@wcstack/state 1.18.0 → 1.19.1
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/dist/index.esm.js +444 -111
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../src/config.ts","../../src/version.ts","../../src/raiseError.ts","../../src/bindings/initializeBindingPromiseByNode.ts","../../src/bindings/replaceToReplaceNode.ts","../../src/define.ts","../../src/address/PathInfo.ts","../../src/getCustomElement.ts","../../src/bindTextParser/expandSpread.ts","../../src/structural/resolveNodePath.ts","../../src/bindings/getBindingInfos.ts","../../src/bindings/getBindingsByNode.ts","../../src/structural/define.ts","../../src/filters/errorMessages.ts","../../src/filters/builtinFilters.ts","../../src/bindTextParser/parseFilterArgs.ts","../../src/bindTextParser/parseFilters.ts","../../src/bindTextParser/utils.ts","../../src/bindTextParser/parsePropPart.ts","../../src/bindTextParser/parseStatePart.ts","../../src/bindTextParser/parseBindTextsForElement.ts","../../src/bindings/parseCommentNode.ts","../../src/bindTextParser/parseBindTextForEmbeddedNode.ts","../../src/bindings/getParseBindTextResults.ts","../../src/bindings/getSubscriberNodes.ts","../../src/bindings/collectNodesAndBindingInfos.ts","../../src/address/StateAddress.ts","../../src/token/Token.ts","../../src/command/CommandToken.ts","../../src/list/loopContextByNode.ts","../../src/proxy/symbols.ts","../../src/event/handler.ts","../../src/event/EventToken.ts","../../src/event/eventTokenRegistry.ts","../../src/event/eventTokenHandler.ts","../../src/event/isPossibleTwoWay.ts","../../src/event/twowayHandler.ts","../../src/list/lastListValueByAbsoluteStateAddress.ts","../../src/address/AbsolutePathInfo.ts","../../src/address/AbsoluteStateAddress.ts","../../src/apply/rootNodeByFragment.ts","../../src/address/calcWildcardLen.ts","../../src/list/getListIndexByBindingInfo.ts","../../src/binding/getAbsoluteStateAddressByBinding.ts","../../src/webComponent/completeWebComponent.ts","../../src/apply/applyChangeToAttribute.ts","../../src/createEmptyArray.ts","../../src/apply/getFilteredValue.ts","../../src/apply/applyChangeToCheckbox.ts","../../src/apply/applyChangeToClass.ts","../../src/apply/applyChangeToCommand.ts","../../src/bindings/indexBindingsByContent.ts","../../src/polyfills.ts","../../src/getUUID.ts","../../src/list/createListIndex.ts","../../src/list/listIndexesByList.ts","../../src/list/createListDiff.ts","../../src/binding/getBindingSetByAbsoluteStateAddress.ts","../../src/binding/getStateAddressByBindingInfo.ts","../../src/bindings/bindingsByContent.ts","../../src/bindings/nodesByContent.ts","../../src/bindings/bindLoopContextToContent.ts","../../src/structural/activateContent.ts","../../src/createEmptySet.ts","../../src/structural/contentsByNode.ts","../../src/structural/createContent.ts","../../src/apply/applyChangeToFor.ts","../../src/apply/applyChangeToIf.ts","../../src/event/getInputAttributeMirror.ts","../../src/apply/ssrPropertyStore.ts","../../src/apply/applyChangeToProperty.ts","../../src/apply/applyChangeToRadio.ts","../../src/apply/applyChangeToStyle.ts","../../src/apply/applyChangeToText.ts","../../src/apply/applyChangeToWebComponent.ts","../../src/list/getIndexValueByLoopContext.ts","../../src/apply/getValue.ts","../../src/apply/scheduleDeferredApply.ts","../../src/apply/applyChange.ts","../../src/apply/applyChangeFromBindings.ts","../../src/event/radioHandler.ts","../../src/event/checkboxHandler.ts","../../src/bindings/initializeBindings.ts","../../src/mustache/convertMustacheToComments.ts","../../src/structural/createNotFilter.ts","../../src/structural/expandShorthandPaths.ts","../../src/structural/getNodePath.ts","../../src/structural/getFragmentNodeInfos.ts","../../src/structural/optimizeFragment.ts","../../src/structural/collectStructuralFragments.ts","../../src/waitForStateInitialize.ts","../../src/buildBindings.ts","../../src/hydrateBindings.ts","../../src/stateElementByName.ts","../../src/structural/fragmentInfoByUUID.ts","../../src/components/Ssr.ts","../../src/stateLoader/loadFromInnerScript.ts","../../src/stateLoader/loadFromJsonFile.ts","../../src/stateLoader/loadFromScriptFile.ts","../../src/stateLoader/loadFromScriptJson.ts","../../src/list/loopContext.ts","../../src/command/processCommandTokensDeclaration.ts","../../src/command/commandTokenRegistry.ts","../../src/command/commandNamespace.ts","../../src/event/processEventTokensDeclaration.ts","../../src/event/processOnDeclaration.ts","../../src/stream/lastNotified.ts","../../src/stream/activeStateElements.ts","../../src/stream/streamRegistry.ts","../../src/stream/processStreamsDeclaration.ts","../../src/stream/streamNamespace.ts","../../src/updater/updater.ts","../../src/stream/argsTrace.ts","../../src/stream/consumeSource.ts","../../src/stream/streamRuntime.ts","../../src/dcc/dccPropertyFactories.ts","../../src/dcc/wcBindable.ts","../../src/dcc/defineDCC.ts","../../src/address/ResolvedAddress.ts","../../src/proxy/apis/connectedCallback.ts","../../src/proxy/apis/disconnectedCallback.ts","../../src/cache/cacheEntryByAbsoluteStateAddress.ts","../../src/proxy/methods/checkDependency.ts","../../src/proxy/methods/getByAddress.ts","../../src/proxy/methods/getContextListIndex.ts","../../src/proxy/methods/swapInfo.ts","../../src/dependency/walkDependency.ts","../../src/proxy/methods/setByAddress.ts","../../src/proxy/apis/resolve.ts","../../src/proxy/apis/getAll.ts","../../src/proxy/methods/getListIndex.ts","../../src/proxy/apis/postUpdate.ts","../../src/proxy/apis/trackDependency.ts","../../src/proxy/apis/updatedCallback.ts","../../src/proxy/methods/setLoopContext.ts","../../src/proxy/traps/get.ts","../../src/proxy/traps/set.ts","../../src/proxy/StateHandler.ts","../../src/webComponent/lastValueByAbsoluteStateAddress.ts","../../src/webComponent/stateElementByWebComponent.ts","../../src/webComponent/MappingRule.ts","../../src/webComponent/meltFrozenObject.ts","../../src/webComponent/innerState.ts","../../src/webComponent/outerState.ts","../../src/webComponent/plainOuterState.ts","../../src/webComponent/bindWebComponent.ts","../../src/components/State.ts","../../src/registerComponents.ts","../../src/bootstrapState.ts","../../src/defineState.ts","../../src/filters/filterMeta.ts","../../src/manifest.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\nlet _inSsrCache: boolean | null = null;\n\nexport function inSsr(): boolean {\n if (_inSsrCache !== null) return _inSsrCache;\n const html = document.querySelector('html');\n _inSsrCache = html ? html.hasAttribute('data-wcs-server') : false;\n return _inSsrCache;\n}\n\n/** @internal テスト用: inSsr() キャッシュをリセット */\nexport function resetSsrCache(): void {\n _inSsrCache = null;\n}\n\ninterface IInternalConfig {\n bindAttributeName: string;\n commentTextPrefix: string;\n commentForPrefix: string;\n commentIfPrefix: string;\n commentElseIfPrefix: string;\n commentElsePrefix: string;\n tagNames: {\n state: string;\n ssr: string;\n };\n locale: string;\n debug: boolean;\n enableMustache: boolean;\n sameValueGuard: boolean;\n}\n\nconst _config: IInternalConfig = {\n bindAttributeName: 'data-wcs',\n commentTextPrefix: 'wcs-text',\n commentForPrefix: 'wcs-for',\n commentIfPrefix: 'wcs-if',\n commentElseIfPrefix: 'wcs-elseif',\n commentElsePrefix: 'wcs-else',\n tagNames: {\n state: 'wcs-state',\n ssr: 'wcs-ssr',\n },\n locale: 'en',\n debug: false,\n enableMustache: true,\n sameValueGuard: true,\n};\n\n// backward compatible export (read-only usage)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n return config;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n if (typeof partialConfig.bindAttributeName === \"string\") {\n _config.bindAttributeName = partialConfig.bindAttributeName;\n }\n if (typeof partialConfig.commentTextPrefix === \"string\") {\n _config.commentTextPrefix = partialConfig.commentTextPrefix;\n }\n if (typeof partialConfig.commentForPrefix === \"string\") {\n _config.commentForPrefix = partialConfig.commentForPrefix;\n }\n if (typeof partialConfig.commentIfPrefix === \"string\") {\n _config.commentIfPrefix = partialConfig.commentIfPrefix;\n }\n if (typeof partialConfig.commentElseIfPrefix === \"string\") {\n _config.commentElseIfPrefix = partialConfig.commentElseIfPrefix;\n }\n if (typeof partialConfig.commentElsePrefix === \"string\") {\n _config.commentElsePrefix = partialConfig.commentElsePrefix;\n }\n if (typeof partialConfig.locale === \"string\") {\n _config.locale = partialConfig.locale;\n }\n if (typeof partialConfig.debug === \"boolean\") {\n _config.debug = partialConfig.debug;\n }\n if (typeof partialConfig.enableMustache === \"boolean\") {\n _config.enableMustache = partialConfig.enableMustache;\n }\n if (typeof partialConfig.sameValueGuard === \"boolean\") {\n _config.sameValueGuard = partialConfig.sameValueGuard;\n }\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\nexport const VERSION = pkg.version;\n","\nexport function raiseError(message: string): never {\n throw new Error(`[@wcstack/state] ${message}`);\n}","import { IInitializeBindingPromise } from \"./types\";\n\nconst bindingPromiseByNode = new WeakMap<Node, IInitializeBindingPromise>();\n\nlet id = 0;\n\nexport function getInitializeBindingPromiseByNode(node: Node): IInitializeBindingPromise {\n let bindingPromise = bindingPromiseByNode.get(node) || null;\n if (bindingPromise !== null) {\n return bindingPromise;\n }\n let resolveFn = undefined;\n const promise = new Promise<void>((resolve) => {\n resolveFn = resolve;\n });\n bindingPromise = {\n id: ++id,\n promise,\n resolve: resolveFn!\n };\n bindingPromiseByNode.set(node, bindingPromise);\n return bindingPromise;\n}\n\nexport async function waitInitializeBinding(node: Node): Promise<void> {\n const bindingPromise = getInitializeBindingPromiseByNode(node);\n await bindingPromise.promise;\n}\n\nexport function resolveInitializedBinding(node: Node): void {\n const bindingPromise = getInitializeBindingPromiseByNode(node);\n bindingPromise.resolve();\n}\n","import { IBindingInfo } from \"../types.js\";\n\nexport function replaceToReplaceNode(bindingInfo: IBindingInfo): void {\n const node = bindingInfo.node;\n const replaceNode = bindingInfo.replaceNode;\n if (node === replaceNode) {\n return;\n }\n if (node.parentNode === null) {\n // already replaced\n return;\n }\n node.parentNode.replaceChild(replaceNode, node);\n}\n","export const DELIMITER = '.';\nexport const WILDCARD = '*';\nexport const MAX_WILDCARD_DEPTH = 128;\nexport const MAX_LOOP_DEPTH = 128;\n\n// data-wcs バインディング構文 `[prop][#mod]: [path][@state][|filter...]` の区切り文字(単一正本)。\n// これらは「死守の壁(構文契約)」であり値は不変。manifest.syntax.delimiters で公開される。\nexport const BINDING_SEPARATOR = ';'; // 複数バインディングの区切り\nexport const PROP_VALUE_SEPARATOR = ':'; // 左辺(prop)と右辺(path)の区切り\nexport const MODIFIER_SEPARATOR = '#'; // prop と修飾子の区切り\nexport const STATE_NAME_SEPARATOR = '@'; // path と @stateName の区切り\nexport const FILTER_SEPARATOR = '|'; // フィルタパイプの区切り\n\n/**\n * stackIndexByIndexName\n * インデックス名からスタックインデックスへのマッピング\n * $1 => 0\n * $2 => 1\n * :\n * ${i + 1} => i\n * i < MAX_WILDCARD_DEPTH\n */\nconst tmpIndexByIndexName: { [key: PropertyKey]: number } = {};\nfor (let i = 0; i < MAX_WILDCARD_DEPTH; i++) {\n tmpIndexByIndexName[`$${i+1}`] = i;\n}\nexport const INDEX_BY_INDEX_NAME: { [key: PropertyKey]: number } = Object.freeze(tmpIndexByIndexName);\n\nexport const NO_SET_TIMEOUT = 60 * 1000; // 1分\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\nexport const STATE_CONNECTED_CALLBACK_NAME = \"$connectedCallback\";\nexport const STATE_DISCONNECTED_CALLBACK_NAME = \"$disconnectedCallback\";\nexport const STATE_UPDATED_CALLBACK_NAME = \"$updatedCallback\";\n\nexport const WEBCOMPONENT_STATE_READY_CALLBACK_NAME = \"$stateReadyCallback\";\n\nexport const STATE_BINDABLES_NAME = \"$bindables\";\nexport const STATE_COMMAND_TOKENS_NAME = \"$commandTokens\";\nexport const STATE_COMMAND_NAMESPACE_NAME = \"$command\";\nexport const STATE_EVENT_TOKENS_NAME = \"$eventTokens\";\nexport const STATE_ON_NAME = \"$on\";\nexport const STATE_STREAMS_NAME = \"$streams\";\nexport const STATE_STREAM_STATUS_NAMESPACE_NAME = \"$streamStatus\";\nexport const STATE_STREAM_ERROR_NAMESPACE_NAME = \"$streamError\";\nexport const DCC_DEFINITION_ATTRIBUTE = \"data-wc-definition\";\n","import { WILDCARD } from \"../define.js\";\nimport { IPathInfo } from \"./types.js\";\n\nconst _cache: Map<string, IPathInfo> = new Map();\n\nlet id: number = 0;\nexport function getPathInfo(path: string): IPathInfo {\n let pathInfo = _cache.get(path);\n if (typeof pathInfo !== \"undefined\") {\n return pathInfo;\n }\n pathInfo = Object.freeze(new PathInfo(path));\n _cache.set(path, pathInfo);\n return pathInfo;\n}\n\nclass PathInfo implements IPathInfo {\n readonly id: number = ++id;\n readonly path: string;\n readonly segments: string[];\n readonly lastSegment: string;\n readonly cumulativePaths: string[];\n readonly cumulativePathSet: Set<string>;\n readonly cumulativePathInfos: IPathInfo[];\n readonly cumulativePathInfoSet: Set<IPathInfo>;\n readonly parentPath: string | null;\n readonly wildcardPaths: string[];\n readonly wildcardPathSet: Set<string>;\n readonly indexByWildcardPath: Record<string, number>;\n readonly wildcardPathInfos: IPathInfo[];\n readonly wildcardPathInfoSet: Set<IPathInfo>;\n readonly wildcardParentPaths: string[];\n readonly wildcardParentPathSet: Set<string>;\n readonly wildcardParentPathInfos: IPathInfo[];\n readonly wildcardParentPathInfoSet: Set<IPathInfo>;\n readonly wildcardPositions: number[];\n readonly lastWildcardPath: string | null;\n readonly lastWildcardInfo: IPathInfo | null;\n readonly wildcardCount: number;\n readonly parentPathInfo: IPathInfo | null;\n constructor(path: string) {\n // Helper to get or create StructuredPathInfo instances, avoiding redundant creation for self-reference\n const getPattern = (_path: string): IPathInfo => {\n return (path === _path) ? this : getPathInfo(_path);\n };\n \n // Split the pattern into individual path segments (e.g., \"items.*.name\" → [\"items\", \"*\", \"name\"])\n const segments = path.split(\".\");\n \n // Arrays to track all cumulative paths from root to each segment\n const cumulativePaths = [];\n const cumulativePathInfos: IPathInfo[] = [];\n \n // Arrays to track wildcard-specific information\n const wildcardPaths = [];\n const indexByWildcardPath: Record<string, number> = {}; // Maps wildcard path to its index position\n const wildcardPathInfos = [];\n const wildcardParentPaths = []; // Paths of parent segments for each wildcard\n const wildcardParentPathInfos = [];\n const wildcardPositions = [];\n \n let currentPatternPath = \"\", prevPatternPath = \"\";\n let wildcardCount = 0;\n \n // Iterate through each segment to build cumulative paths and identify wildcards\n for(let i = 0; i < segments.length; i++) {\n currentPatternPath += segments[i];\n \n // If this segment is a wildcard, track it with all wildcard-specific metadata\n if (segments[i] === WILDCARD) {\n wildcardPaths.push(currentPatternPath);\n indexByWildcardPath[currentPatternPath] = wildcardCount; // Store wildcard's ordinal position\n wildcardPathInfos.push(getPattern(currentPatternPath));\n wildcardParentPaths.push(prevPatternPath); // Parent path is the previous cumulative path\n wildcardParentPathInfos.push(getPattern(prevPatternPath));\n wildcardPositions.push(i);\n wildcardCount++;\n }\n \n // Track all cumulative paths for hierarchical navigation (e.g., \"items\", \"items.*\", \"items.*.name\")\n cumulativePaths.push(currentPatternPath);\n cumulativePathInfos.push(getPattern(currentPatternPath));\n \n // Save current path as previous for next iteration, then add separator\n prevPatternPath = currentPatternPath;\n currentPatternPath += \".\";\n }\n \n // Determine the deepest (last) wildcard path and the parent path of the entire pattern\n const lastWildcardPath = wildcardPaths.length > 0 ? wildcardPaths[wildcardPaths.length - 1] : null;\n const parentPath = cumulativePaths.length > 1 ? cumulativePaths[cumulativePaths.length - 2] : null;\n \n // Assign all analyzed data to readonly properties\n this.path = path;\n this.segments = segments;\n this.lastSegment = segments[segments.length - 1];\n this.cumulativePaths = cumulativePaths;\n this.cumulativePathSet = new Set(cumulativePaths); // Set for fast lookup\n this.cumulativePathInfos = cumulativePathInfos;\n this.cumulativePathInfoSet = new Set(cumulativePathInfos);\n this.wildcardPaths = wildcardPaths;\n this.wildcardPathSet = new Set(wildcardPaths);\n this.indexByWildcardPath = indexByWildcardPath;\n this.wildcardPathInfos = wildcardPathInfos;\n this.wildcardPathInfoSet = new Set(wildcardPathInfos);\n this.wildcardParentPaths = wildcardParentPaths;\n this.wildcardParentPathSet = new Set(wildcardParentPaths);\n this.wildcardParentPathInfos = wildcardParentPathInfos;\n this.wildcardParentPathInfoSet = new Set(wildcardParentPathInfos);\n this.wildcardPositions = wildcardPositions;\n this.lastWildcardPath = lastWildcardPath;\n this.lastWildcardInfo = lastWildcardPath ? getPattern(lastWildcardPath) : null;\n this.parentPath = parentPath;\n this.parentPathInfo = parentPath ? getPattern(parentPath) : null;\n this.wildcardCount = wildcardCount;\n }\n}\n","\nconst cache = new WeakMap<Node, string | null>();\n\nexport function getCustomElement(node: Node): string | null {\n const cached = cache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n let value: string | null = null;\n try {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return value;\n }\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n if (tagName.includes(\"-\")) {\n return value = tagName;\n }\n if (element.hasAttribute(\"is\")) {\n const is = element.getAttribute(\"is\")!;\n if (is.includes(\"-\")) {\n return value = is;\n }\n }\n return value;\n } finally {\n cache.set(node, value);\n }\n}\n","import { getPathInfo } from \"../address/PathInfo\";\nimport { config } from \"../config\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IWcBindable } from \"../event/types\";\nimport { ParseBindTextResult } from \"./types\";\n\nfunction isValidWcBindable(value: unknown): value is IWcBindable {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as { protocol?: unknown; version?: unknown; properties?: unknown };\n return v.protocol === \"wc-bindable\"\n && v.version === 1\n && Array.isArray(v.properties);\n}\n\nfunction makeExpandedEntry(\n name: string,\n base: string,\n stateName: string,\n): ParseBindTextResult {\n // Dot-relative spread keeps the loop item root (`.`) without producing `..foo`.\n const expandedPath = base === \".\" ? `.${name}` : `${base}.${name}`;\n return {\n propName: name,\n propSegments: [name],\n propModifiers: [],\n statePathName: expandedPath,\n statePathInfo: getPathInfo(expandedPath),\n stateName,\n inFilters: [],\n outFilters: [],\n bindingType: 'prop',\n };\n}\n\nfunction dedupKey(r: ParseBindTextResult): string | null {\n switch (r.bindingType) {\n case 'prop':\n case 'event':\n case 'radio':\n case 'checkbox':\n return `${r.bindingType}::${r.propName}`;\n case 'spread':\n return null;\n default:\n return null;\n }\n}\n\nexport interface IExpandSpreadOptions {\n /**\n * When false, raise an error if the custom element class is not yet defined.\n * When true (default), leave the spread entry in place so the caller can\n * defer expansion via customElements.whenDefined.\n */\n readonly allowDeferred?: boolean;\n}\n\n/**\n * Expand spread bind-text entries (`...: target`) into per-prop entries\n * by enumerating wcBindable.properties + inputs of the element's class.\n *\n * Behavior:\n * - With `allowDeferred: true` (default): if class is not yet defined, the\n * spread entry stays so the caller can wait via customElements.whenDefined.\n * - With `allowDeferred: false`: raises if class is not defined.\n * - Duplicate propName: last-wins (explicit binding overrides spread).\n * - When config.debug, console.debug logs each override.\n * - Mid-`*` in target path is allowed (e.g. `...: stores.*.fetch`).\n *\n * Composite Profile (COMPOSITE.md / SPEC-extensions § 4) support:\n * - A composite shell exposes its synthesized declaration via the standard\n * `target.constructor.wcBindable` surface (§ 1 Discovery), so this function\n * handles it without any composite-specific code path.\n * - Composed property names use the `<sourceId>.<sourceName>` pattern\n * (e.g. \"s3.progress\"); we keep the dotted name as a single segment so\n * element member access stays flat (element[\"s3.progress\"], not nested).\n * - The expanded state path becomes `targetBase.s3.progress`, which resolves\n * as nested state access — author state as `{ s3: { progress: 0 } }` to\n * mirror the composed structure.\n * - Tier claim (Symbol.for(\"wc-bindable.composite.tiers\")) is not read here;\n * spread covers observation (T1) and writable inputs (T2) transparently\n * through normal property assignment, and commands stay out of spread by\n * design regardless of tier.\n */\nexport function expandSpread(\n node: Node,\n results: ParseBindTextResult[],\n options: IExpandSpreadOptions = {},\n): ParseBindTextResult[] {\n const allowDeferred = options.allowDeferred ?? true;\n if (!results.some(r => r.bindingType === 'spread')) {\n return results;\n }\n const expanded: ParseBindTextResult[] = [];\n const spreadOrigin = new WeakSet<ParseBindTextResult>();\n for (const result of results) {\n if (result.bindingType !== 'spread') {\n expanded.push(result);\n continue;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) {\n raiseError(`Spread binding requires an element node.`);\n }\n const element = node as Element;\n const tagName = getCustomElement(element);\n if (tagName === null) {\n raiseError(`Spread binding \"${result.statePathName}\" requires a custom element with wcBindable, but <${element.tagName.toLowerCase()}> is not a custom element.`);\n }\n const customClass = customElements.get(tagName) as { wcBindable?: unknown } | undefined;\n if (typeof customClass === \"undefined\") {\n if (!allowDeferred) {\n raiseError(`Spread binding \"${result.statePathName}\" requires <${tagName}> to be registered. Define the custom element before initializing this binding.`);\n }\n // Deferred: keep spread entry intact; caller retries via whenDefined.\n expanded.push(result);\n continue;\n }\n const bindable = customClass.wcBindable;\n if (!isValidWcBindable(bindable)) {\n raiseError(`Spread binding \"${result.statePathName}\" requires <${tagName}> to declare wcBindable (protocol=\"wc-bindable\", version=1).`);\n }\n const targetBase = result.statePathName;\n const stateName = result.stateName;\n const seen = new Set<string>();\n for (const prop of bindable.properties) {\n if (seen.has(prop.name)) continue;\n seen.add(prop.name);\n const entry = makeExpandedEntry(prop.name, targetBase, stateName);\n spreadOrigin.add(entry);\n expanded.push(entry);\n }\n // properties win over inputs when the name overlaps because they carry the\n // full property contract (for example change events).\n for (const input of (bindable.inputs ?? [])) {\n if (seen.has(input.name)) continue;\n seen.add(input.name);\n const entry = makeExpandedEntry(input.name, targetBase, stateName);\n spreadOrigin.add(entry);\n expanded.push(entry);\n }\n }\n // Last-wins de-duplication\n const lastIndexByKey = new Map<string, number>();\n for (let i = 0; i < expanded.length; i++) {\n const key = dedupKey(expanded[i]);\n if (key !== null) {\n lastIndexByKey.set(key, i);\n }\n }\n const final: ParseBindTextResult[] = [];\n for (let i = 0; i < expanded.length; i++) {\n const key = dedupKey(expanded[i]);\n if (key === null) {\n final.push(expanded[i]);\n continue;\n }\n if (lastIndexByKey.get(key) === i) {\n final.push(expanded[i]);\n } else if (config.debug && spreadOrigin.has(expanded[i])) {\n const overrider = expanded[lastIndexByKey.get(key)!];\n const tagText = node.nodeType === Node.ELEMENT_NODE\n ? `<${(node as Element).tagName.toLowerCase()}>`\n : 'node';\n console.debug(`[@wcstack/state] spread: prop \"${expanded[i].propName}\" of ${tagText} overridden by explicit binding (statePath: \"${overrider.statePathName}\").`);\n }\n }\n return final;\n}\n\nexport function hasUnresolvedSpread(results: ParseBindTextResult[]): boolean {\n return results.some(r => r.bindingType === 'spread');\n}\n","\nexport function resolveNodePath(root: Node, path: number[]): Node | null {\n let currentNode = root;\n if (path.length === 0) return currentNode;\n // path.reduce()だと途中でnullになる可能性があるので、\n for(let i = 0; i < path.length; i++) {\n currentNode = currentNode?.childNodes[path[i]] ?? null;\n if (currentNode === null) break;\n }\n return currentNode;\n}","import { IBindingInfo } from \"../types\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\n\nexport function getBindingInfos(node: Node, parseBindingTextResults: ParseBindTextResult[]): IBindingInfo[] {\n const bindingInfos: IBindingInfo[] = [];\n for (const parseBindingTextResult of parseBindingTextResults) {\n if (parseBindingTextResult.bindingType !== 'text') {\n bindingInfos.push({\n ...parseBindingTextResult,\n node: node,\n replaceNode: node,\n });\n } else {\n const replaceNode = document.createTextNode('');\n bindingInfos.push({\n ...parseBindingTextResult,\n node: node,\n replaceNode: replaceNode,\n });\n }\n }\n return bindingInfos;\n}\n","import { IBindingInfo } from \"../binding/types\";\n\nconst bindingsByNode = new WeakMap<Node, IBindingInfo[]>();\n\nexport function getBindingsByNode(node: Node): IBindingInfo[] | null {\n return bindingsByNode.get(node) || null;\n}\n\nexport function setBindingsByNode(node: Node, bindings: IBindingInfo[]): void {\n bindingsByNode.set(node, bindings);\n}\n\nexport function addBindingByNode(node: Node, binding: IBindingInfo): void {\n const bindings = getBindingsByNode(node);\n if (bindings === null) {\n setBindingsByNode(node, [binding]);\n } else {\n bindings.push(binding);\n }\n}","import { BindingType } from \"../types.js\";\n\nexport const STRUCTURAL_BINDING_TYPE_SET: Set<BindingType> = new Set([\n \"if\",\n \"elseif\",\n \"else\",\n \"for\",\n]);\n","/**\n * errorMessages.ts\n *\n * Error message generation utilities used by filter functions.\n *\n * Main responsibilities:\n * - Throws clear error messages when filter options or value type checks fail\n * - Takes function name as argument to specify which filter caused the error\n *\n * Design points:\n * - optionsRequired: Error when required option is not specified\n * - optionMustBeNumber: Error when option value is not a number\n * - valueMustBeNumber: Error when value is not a number\n * - valueMustBeBoolean: Error when value is not boolean\n * - valueMustBeDate: Error when value is not a Date\n */\nimport { raiseError } from \"../raiseError\";\n\n/**\n * Throws error when filter requires at least one option but none provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function optionsRequired(fnName:string): never {\n raiseError(`filter ${fnName} requires at least one option`);\n}\n\n/**\n * Throws error when filter option must be a number but invalid value provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function optionMustBeNumber(fnName:string): never {\n raiseError(`filter ${fnName} requires a number as option`);\n}\n\n/**\n * Throws error when filter requires numeric value but non-number provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeNumber(fnName:string): never {\n raiseError(`filter ${fnName} requires a number value`);\n}\n\n/**\n * Throws error when filter requires numeric value but non-number provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeString(fnName:string): never {\n raiseError(`filter ${fnName} requires a string value`);\n}\n\n/**\n * Throws error when filter requires boolean value but non-boolean provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeBoolean(fnName:string): never {\n raiseError(`filter ${fnName} requires a boolean value`);\n} \n\n/**\n * Throws error when filter requires Date value but non-Date provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeDate(fnName:string): never {\n raiseError(`filter ${fnName} requires a date value`);\n}","/**\n * builtinFilters.ts\n *\n * Implementation file for built-in filter functions available in Structive.\n *\n * Main responsibilities:\n * - Provides filters for conversion, comparison, formatting, and validation of numbers, strings, dates, booleans, etc.\n * - Defines functions with options for each filter name, enabling flexible use during binding\n * - Designed for common use as both input and output filters\n *\n * Design points:\n * - Comprehensive coverage of diverse filters: eq, ne, lt, gt, inc, fix, locale, uc, lc, cap, trim, slice, pad, int, float, round, date, time, ymd, falsy, truthy, defaults, boolean, number, string, null, etc.\n * - Rich type checking and error handling for option values\n * - Centralized management of filter functions with FilterWithOptions type, easy to extend\n * - Dynamic retrieval of filter functions from filter names and options via builtinFilterFn\n */\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { optionMustBeNumber, optionsRequired, valueMustBeBoolean, valueMustBeDate, valueMustBeNumber } from \"./errorMessages.js\";\nimport { FilterFn, FilterWithOptions } from \"./types\";\n\nfunction validateNumberString(value: string): boolean {\n if (!value || isNaN(Number(value))) {\n return false;\n }\n return true;\n}\n\n/**\n * Equality filter - compares value with option.\n * \n * @param options - Array with comparison value as first element\n * @returns Filter function that returns boolean\n */\nconst eq = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('eq');\n return (value: unknown): boolean => {\n // Align types for comparison\n if (typeof value === 'number') {\n if (!validateNumberString(opt)) {optionMustBeNumber('eq');}\n return value === Number(opt);\n }\n if (typeof value === 'string') {\n return value === opt;\n }\n // Strict equality for others\n return value === opt;\n }\n}\n\n/**\n * Inequality filter - compares value with option.\n * \n * @param options - Array with comparison value as first element\n * @returns Filter function that returns boolean\n */\nconst ne = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('ne');\n return (value: unknown): boolean => {\n // Align types for comparison\n if (typeof value === 'number') {\n if (!validateNumberString(opt)) {optionMustBeNumber('ne');}\n return value !== Number(opt);\n }\n if (typeof value === 'string') {\n return value !== opt;\n }\n // Strict equality for others\n return value !== opt;\n }\n}\n\n/**\n * Boolean NOT filter - inverts boolean value.\n * \n * @param options - Unused\n * @returns Filter function that returns inverted boolean\n */\nconst not = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => {\n if (typeof value !== 'boolean') {valueMustBeBoolean('not');}\n return !value;\n }\n}\n\n/**\n * Less than filter - checks if value is less than option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst lt = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('lt');\n if (!validateNumberString(opt)) {optionMustBeNumber('lt');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('lt');}\n return value < Number(opt);\n }\n}\n\n/**\n * Less than or equal filter - checks if value is less than or equal to option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst le = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('le');\n if (!validateNumberString(opt)) {optionMustBeNumber('le');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('le');}\n return value <= Number(opt);\n }\n}\n\n/**\n * Greater than filter - checks if value is greater than option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst gt = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('gt');\n if (!validateNumberString(opt)) {optionMustBeNumber('gt');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('gt');}\n return value > Number(opt);\n }\n}\n\n/**\n * Greater than or equal filter - checks if value is greater than or equal to option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst ge = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('ge');\n if (!validateNumberString(opt)) {optionMustBeNumber('ge');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('ge');}\n return value >= Number(opt);\n }\n}\n\n/**\n * Increment filter - adds option value to input value.\n * \n * @param options - Array with increment number as first element\n * @returns Filter function that returns incremented number\n */\nconst inc = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('inc');\n if (!validateNumberString(opt)) {optionMustBeNumber('inc');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('inc');}\n return value + Number(opt);\n }\n}\n\n/**\n * Decrement filter - subtracts option value from input value.\n * \n * @param options - Array with decrement number as first element\n * @returns Filter function that returns decremented number\n */\nconst dec = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('dec');\n if (!validateNumberString(opt)) {optionMustBeNumber('dec');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('dec');}\n return value - Number(opt);\n }\n}\n\n/**\n * Multiply filter - multiplies value by option.\n * \n * @param options - Array with multiplier number as first element\n * @returns Filter function that returns multiplied number\n */\nconst mul = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('mul');\n if (!validateNumberString(opt)) {optionMustBeNumber('mul');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('mul');}\n return value * Number(opt);\n }\n}\n\n/**\n * Divide filter - divides value by option.\n * \n * @param options - Array with divisor number as first element\n * @returns Filter function that returns divided number\n */\nconst div = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('div');\n if (!validateNumberString(opt)) {optionMustBeNumber('div');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('div');}\n return value / Number(opt);\n }\n}\n\n/**\n * Modulo filter - returns remainder of division.\n * \n * @param options - Array with divisor number as first element\n * @returns Filter function that returns remainder\n */\nconst mod = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('mod');\n if (!validateNumberString(opt)) {optionMustBeNumber('mod');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('mod');}\n return value % Number(opt);\n }\n}\n\n/**\n * Fixed decimal filter - formats number to fixed decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns formatted string\n */\nconst fix = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? \"0\";\n if (!validateNumberString(opt)) {optionMustBeNumber('fix');}\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('fix');}\n return value.toFixed(Number(opt));\n }\n}\n\n/**\n * Locale number filter - formats number according to locale.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns localized number string\n */\nconst locale = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('locale');}\n return value.toLocaleString(opt);\n }\n}\n\n/**\n * Uppercase filter - converts string to uppercase.\n * \n * @param options - Unused\n * @returns Filter function that returns uppercase string\n */\nconst uc = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).toUpperCase();\n }\n}\n\n/**\n * Lowercase filter - converts string to lowercase.\n * \n * @param options - Unused\n * @returns Filter function that returns lowercase string\n */\nconst lc = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).toLowerCase();\n }\n}\n\n/**\n * Capitalize filter - capitalizes first character of string.\n * \n * @param options - Unused\n * @returns Filter function that returns capitalized string\n */\nconst cap = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n const v = String(value);\n if (v.length === 0) {return v;}\n if (v.length === 1) {return v.toUpperCase();}\n return v.charAt(0).toUpperCase() + v.slice(1);\n }\n}\n\n/**\n * Trim filter - removes whitespace from both ends of string.\n * \n * @param options - Unused\n * @returns Filter function that returns trimmed string\n */\nconst trim = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).trim();\n }\n}\n\n/**\n * Slice filter - extracts portion of string from specified index.\n * \n * @param options - Array with start index and optional end index\n * @returns Filter function that returns sliced string\n */\nconst slice = (options?:string[]): FilterFn<string> => {\n const numberedOpts: number[] = [];\n const opt1 = options?.[0] ?? optionsRequired('slice');\n if (!validateNumberString(opt1)) {optionMustBeNumber('slice');}\n numberedOpts.push(Number(opt1));\n const opt2 = options?.[1];\n if (typeof opt2 !== 'undefined') {\n if (!validateNumberString(opt2)) {optionMustBeNumber('slice');}\n numberedOpts.push(Number(opt2));\n }\n return (value: unknown): string => {\n return String(value).slice(...numberedOpts);\n }\n}\n\n/**\n * Substring filter - extracts substring from specified position and length.\n * \n * @param options - Array with start index and length\n * @returns Filter function that returns substring\n */\nconst substr = (options?:string[]): FilterFn<string> => {\n const opt1 = options?.[0] ?? optionsRequired('substr');\n if (!validateNumberString(opt1)) {optionMustBeNumber('substr');}\n const opt2 = options?.[1] ?? optionsRequired('substr');\n if (!validateNumberString(opt2)) {optionMustBeNumber('substr');}\n return (value: unknown): string => {\n return String(value).substr(Number(opt1), Number(opt2));\n }\n}\n\n/**\n * Pad filter - pads string to specified length from start.\n * \n * @param options - Array with target length and pad string (default: '0')\n * @returns Filter function that returns padded string\n */\nconst pad = (options?:string[]): FilterFn<string> => {\n const opt1 = options?.[0] ?? optionsRequired('pad');\n if (!validateNumberString(opt1)) {optionMustBeNumber('pad');}\n const opt2 = options?.[1] ?? '0';\n return (value: unknown): string => {\n return String(value).padStart(Number(opt1), opt2);\n }\n}\n\n/**\n * Repeat filter - repeats string specified number of times.\n * \n * @param options - Array with repeat count as first element\n * @returns Filter function that returns repeated string\n */\nconst rep = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? optionsRequired('rep');\n if (!validateNumberString(opt)) {optionMustBeNumber('rep');}\n return (value: unknown): string => {\n return String(value).repeat(Number(opt));\n }\n}\n\n/**\n * Reverse filter - reverses character order in string.\n * \n * @param options - Unused\n * @returns Filter function that returns reversed string\n */\nconst rev = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).split('').reverse().join('');\n }\n}\n\n/**\n * Integer filter - parses value to integer.\n * \n * @param options - Unused\n * @returns Filter function that returns integer\n */\nconst int = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return parseInt(String(value), 10);\n }\n}\n\n/**\n * Float filter - parses value to floating point number.\n * \n * @param options - Unused\n * @returns Filter function that returns float\n */\nconst float = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return parseFloat(String(value));\n }\n}\n\n/**\n * Round filter - rounds number to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns rounded number\n */\nconst round = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('round');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('round');}\n const optValue = Math.pow(10, Number(opt));\n return Math.round(value * optValue) / optValue;\n }\n}\n\n/**\n * Floor filter - rounds number down to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns floored number\n */\nconst floor = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('floor');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('floor');}\n const optValue = Math.pow(10, Number(opt));\n return Math.floor(value * optValue) / optValue;\n }\n}\n\n/**\n * Ceiling filter - rounds number up to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns ceiled number\n */\nconst ceil = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('ceil');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('ceil');}\n const optValue = Math.pow(10, Number(opt));\n return Math.ceil(value * optValue) / optValue;\n }\n}\n\n/**\n * Percent filter - formats number as percentage string.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns percentage string with '%'\n */\nconst percent = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('percent');}\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('percent');}\n return `${(value * 100).toFixed(Number(opt))}%`;\n }\n}\n\n/**\n * Date filter - formats Date object as localized date string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns date string\n */\nconst date = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('date');}\n return value.toLocaleDateString(opt);\n }\n}\n\n/**\n * Time filter - formats Date object as localized time string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns time string\n */\nconst time = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('time');}\n return value.toLocaleTimeString(opt);\n }\n}\n\n/**\n * DateTime filter - formats Date object as localized date and time string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns datetime string\n */\nconst datetime = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('datetime');}\n return value.toLocaleString(opt);\n }\n}\n\n/**\n * Year-Month-Day filter - formats Date object as YYYY-MM-DD string.\n * \n * @param options - Array with separator string as first element (default: '-')\n * @returns Filter function that returns formatted date string\n */\nconst ymd = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? '-';\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('ymd');}\n const year = value.getFullYear().toString();\n const month = (value.getMonth() + 1).toString().padStart(2, '0');\n const day = value.getDate().toString().padStart(2, '0');\n return `${year}${opt}${month}${opt}${day}`;\n }\n}\n\n/**\n * Falsy filter - checks if value is falsy.\n * \n * @param options - Unused\n * @returns Filter function that returns true for false/null/undefined/0/''/NaN\n */\nconst falsy = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => value === false || value === null || value === undefined || value === 0 || value === '' || Number.isNaN(value);\n}\n\n/**\n * Truthy filter - checks if value is truthy.\n * \n * @param options - Unused\n * @returns Filter function that returns true for non-falsy values\n */\nconst truthy = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean =>value !== false && value !== null && value !== undefined && value !== 0 && value !== '' && !Number.isNaN(value);\n}\n\n/**\n * Default filter - returns default value if input is falsy.\n * \n * @param options - Array with default value as first element\n * @returns Filter function that returns value or default\n */\nconst defaults = (options?:string[]): FilterFn<unknown> => {\n const opt = options?.[0] ?? optionsRequired('defaults');\n return (value: unknown): unknown => {\n if (value === false || value === null || value === undefined || value === 0 || value === '' || Number.isNaN(value)) {return opt;}\n return value;\n }\n}\n\n/**\n * Boolean filter - converts value to boolean.\n * \n * @param options - Unused\n * @returns Filter function that returns boolean\n */\nconst boolean = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => {\n return Boolean(value);\n }\n}\n\n/**\n * Number filter - converts value to number.\n * \n * @param options - Unused\n * @returns Filter function that returns number\n */\nconst number = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return Number(value);\n }\n}\n\n/**\n * String filter - converts value to string.\n * \n * @param options - Unused\n * @returns Filter function that returns string\n */\nconst string = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value);\n }\n}\n\n/**\n * Null filter - converts empty string to null.\n * \n * @param options - Unused\n * @returns Filter function that returns null for empty string, otherwise original value\n */\nconst _null = (_options?:string[]): FilterFn<unknown> => {\n return (value: unknown): unknown => {\n return (value === \"\") ? null : value;\n } \n}\n\nconst builtinFilters: FilterWithOptions = {\n \"eq\": eq,\n \"ne\": ne,\n \"not\": not,\n\n \"lt\": lt,\n \"le\": le,\n \"gt\": gt,\n \"ge\": ge,\n\n \"inc\": inc,\n \"dec\": dec,\n \"mul\": mul,\n \"div\": div,\n \"mod\": mod,\n\n \"fix\": fix,\n \"locale\": locale,\n \"uc\": uc,\n \"lc\": lc,\n \"cap\": cap,\n \"trim\": trim,\n \"slice\": slice,\n \"substr\": substr,\n \"pad\": pad,\n \"rep\": rep,\n \"rev\": rev,\n\n \"int\": int,\n \"float\": float,\n \"round\": round,\n \"floor\": floor,\n \"ceil\": ceil,\n \"percent\": percent,\n\n \"date\": date,\n \"time\": time,\n \"datetime\": datetime,\n \"ymd\": ymd,\n\n \"falsy\": falsy,\n \"truthy\": truthy,\n \"defaults\": defaults,\n\n \"boolean\": boolean,\n \"number\": number,\n \"string\": string,\n \"null\": _null,\n};\n\nexport const outputBuiltinFilters = builtinFilters;\nexport const inputBuiltinFilters = builtinFilters;\n\nexport const builtinFiltersByFilterIOType = {\n \"input\": inputBuiltinFilters,\n \"output\": outputBuiltinFilters,\n} as const;\n\n/**\n * Retrieves built-in filter function by name and options.\n * \n * @param name - Filter name\n * @param options - Array of option strings\n * @returns Function that takes FilterWithOptions and returns filter function\n */\nexport const builtinFilterFn = (name:string, options: string[]) => (filters: FilterWithOptions) => {\n const filter = filters[name];\n if (!filter) {\n raiseError(`filter not found: ${name}`);\n }\n return filter(options);\n}\n\n","export function parseFilterArgs(argsText: string): string[] {\n const args: string[] = [];\n let current = '';\n let inQuote: string | null = null;\n let hasQuote = false;\n\n for (let i = 0; i < argsText.length; i++) {\n const char = argsText[i];\n\n if (inQuote) {\n if (char === inQuote) {\n inQuote = null;\n } else {\n current += char;\n }\n } else if (char === '\"' || char === \"'\") {\n inQuote = char;\n hasQuote = true;\n } else if (char === ',') {\n args.push(current.trim());\n current = '';\n hasQuote = false;\n } else {\n current += char;\n }\n }\n\n const last = current.trim();\n if (last || hasQuote) {\n args.push(last);\n }\n\n return args;\n}\n","import { builtinFilterFn, builtinFiltersByFilterIOType } from \"../filters/builtinFilters\";\nimport { FilterFn, FilterIOType } from \"../filters/types\";\nimport { raiseError } from \"../raiseError\";\nimport { IFilterInfo } from \"../types\";\nimport { parseFilterArgs } from \"./parseFilterArgs\";\n\nconst filterFnByKey: Map<string, FilterFn<unknown>> = new Map();\n\n// format: filterName(arg1,arg2) or filterName\n\nexport function parseFilters(filterTextList: string[], filterIOType: FilterIOType): IFilterInfo[] {\n const builtinFilters = builtinFiltersByFilterIOType[filterIOType];\n const filters: IFilterInfo[] = filterTextList.map((filterText) => {\n const openParenIndex = filterText.indexOf('(');\n const closeParenIndex = filterText.lastIndexOf(')');\n // check parentheses\n if (openParenIndex !== -1 && closeParenIndex === -1) {\n raiseError(`Invalid filter format: missing closing parenthesis in \"${filterText}\"`);\n }\n if (closeParenIndex !== -1 && openParenIndex === -1) {\n raiseError(`Invalid filter format: missing opening parenthesis in \"${filterText}\"`);\n }\n if (openParenIndex === -1) {\n // no arguments\n const filterName = filterText.trim();\n const filterKey = `${filterName}():${filterIOType}`;\n let filterFn = filterFnByKey.get(filterKey);\n if (typeof filterFn === 'undefined') {\n filterFn = builtinFilterFn(filterName, [])(builtinFilters);\n filterFnByKey.set(filterKey, filterFn);\n }\n return {\n filterName: filterName,\n args: [],\n filterFn: filterFn,\n };\n } else {\n const argsText = filterText.substring(openParenIndex + 1, closeParenIndex);\n const filterName = filterText.substring(0, openParenIndex).trim();\n const args = parseFilterArgs(argsText);\n const filterKey = `${filterName}(${args.join(',')}):${filterIOType}`;\n let filterFn = filterFnByKey.get(filterKey);\n if (typeof filterFn === 'undefined') {\n filterFn = builtinFilterFn(filterName, args)(builtinFilters);\n filterFnByKey.set(filterKey, filterFn);\n }\n return {\n filterName,\n args,\n filterFn,\n };\n }\n });\n return filters;\n}","\nexport const trimFn = (s: string): string => s.trim();\n","import { DELIMITER, FILTER_SEPARATOR, MODIFIER_SEPARATOR } from \"../define\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { parseFilters } from \"./parseFilters\";\nimport { trimFn } from \"./utils\";\n\ntype PropPartParseResult = Pick<IBindingInfo, 'propName' | 'propSegments' | 'propModifiers' | 'inFilters'>;\n\nconst cacheFilterInfos = new Map<string, IFilterInfo[]>();\n\n// format: propName#moodifier1,modifier2\n// propName-format: path.to.property (e.g., textContent, style.color, not include :)\n// special path: \n// 'attr.attributeName' for attributes (e.g., attr.href, attr.data-id)\n// 'style.propertyName' for style properties (e.g., style.backgroundColor, style.fontSize)\n// 'class.className' for class names (e.g., class.active, class.hidden)\n// 'onclick', 'onchange' etc. for event listeners\n\nexport function parsePropPart(propPart: string): PropPartParseResult {\n const pos = propPart.indexOf(FILTER_SEPARATOR);\n let propText: string = '';\n let filterTexts: string[] = [];\n let filtersText = '';\n let filters: IFilterInfo[] = [];\n if (pos !== -1) {\n propText = propPart.slice(0, pos).trim();\n filtersText = propPart.slice(pos + 1).trim();\n if (cacheFilterInfos.has(filtersText)) {\n filters = cacheFilterInfos.get(filtersText)!;\n } else {\n filterTexts = filtersText.split(FILTER_SEPARATOR).map(trimFn);\n filters = parseFilters(filterTexts, \"input\");\n cacheFilterInfos.set(filtersText, filters);\n }\n } else {\n propText = propPart.trim();\n }\n\n const [propName, propModifiersText] = propText.split(MODIFIER_SEPARATOR).map(trimFn);\n const propSegments = propName.split(DELIMITER).map(trimFn);\n const propModifiers = propModifiersText\n ? propModifiersText.split(',').map(trimFn)\n : [];\n return {\n propName,\n propSegments,\n propModifiers,\n inFilters: filters,\n };\n}","import { getPathInfo } from \"../address/PathInfo\";\nimport { FILTER_SEPARATOR, STATE_NAME_SEPARATOR } from \"../define\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { parseFilters } from \"./parseFilters\";\nimport { trimFn } from \"./utils\";\n\ntype StatePartParseResult = Pick<IBindingInfo, \n 'stateName' | 'statePathName' | 'statePathInfo' | 'outFilters'>;\n\nconst cacheFilterInfos = new Map<string, IFilterInfo[]>();\n\n// format: statePath@stateName|filter|filter\n// statePath-format: path.to.property (e.g., user.name.first, users.*.name, users.0.name, not include @)\n// stateName: optional, default is 'default'\n// filters-format: filterName or filterName(arg1,arg2)\nexport function parseStatePart(statePart: string): StatePartParseResult {\n const pos = statePart.indexOf(FILTER_SEPARATOR);\n let stateAndPath: string = '';\n let filterTexts: string[] = [];\n let filtersText = '';\n let filters: IFilterInfo[] = [];\n if (pos !== -1) {\n stateAndPath = statePart.slice(0, pos).trim();\n filtersText = statePart.slice(pos + 1).trim();\n if (cacheFilterInfos.has(filtersText)) {\n filters = cacheFilterInfos.get(filtersText)!;\n } else {\n filterTexts = filtersText.split(FILTER_SEPARATOR).map(trimFn);\n filters = parseFilters(filterTexts, \"output\");\n cacheFilterInfos.set(filtersText, filters);\n }\n } else {\n stateAndPath = statePart.trim();\n }\n const [statePathName, stateName = 'default'] = stateAndPath.split(STATE_NAME_SEPARATOR).map(trimFn);\n const pathInfo = getPathInfo(statePathName);\n return {\n stateName,\n statePathName,\n statePathInfo: pathInfo,\n outFilters: filters,\n };\n}\n","import { getPathInfo } from \"../address/PathInfo.js\";\nimport { BINDING_SEPARATOR, PROP_VALUE_SEPARATOR } from \"../define.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { STRUCTURAL_BINDING_TYPE_SET } from \"../structural/define.js\";\nimport { parsePropPart } from \"./parsePropPart.js\";\nimport { parseStatePart } from \"./parseStatePart.js\";\nimport { ParseBindTextResult } from \"./types.js\";\nimport { trimFn } from \"./utils.js\";\n\n// format: propPart:statePart; propPart:statePart; ...\n// special-propPart:\n// if: statePart (single binding for conditional rendering)\n// else: (single binding for conditional rendering, and statePart is ignored)\n// elseif: statePart only (single binding for conditional rendering)\n// for: statePart only (single binding for loop rendering)\n// onclick: statePart, onchange: statePart etc. (event listeners)\n// ...: statePart (spread — expand wcBindable properties+inputs of target object)\n\nexport function parseBindTextsForElement(bindText: string): ParseBindTextResult[] {\n const [ ...bindTexts ] = bindText.split(BINDING_SEPARATOR).map(trimFn).filter(s => s.length > 0);\n const results = bindTexts.map((bindText): ParseBindTextResult => {\n const separatorIndex = bindText.indexOf(PROP_VALUE_SEPARATOR);\n if (separatorIndex === -1) {\n raiseError(`Invalid bindText: \"${bindText}\". Missing ':' separator between propPart and statePart.`);\n }\n const propPart = bindText.slice(0, separatorIndex).trim();\n const statePart = bindText.slice(separatorIndex + 1).trim();\n if (propPart === 'else') {\n const pathInfo = getPathInfo('#else');\n return {\n propName: 'else',\n propSegments: ['else'],\n propModifiers: [],\n statePathName: '#else',\n statePathInfo: pathInfo,\n stateName: '',\n inFilters: [],\n outFilters: [],\n bindingType: 'else',\n };\n } else if (propPart === '...') {\n const stateResult = parseStatePart(statePart);\n if (stateResult.outFilters.length > 0) {\n raiseError(`Invalid spread binding \"${bindText}\": filters are not allowed on spread targets.`);\n }\n if (stateResult.statePathName.length === 0) {\n raiseError(`Invalid spread binding \"${bindText}\": spread target path is required.`);\n }\n return {\n propName: '...',\n propSegments: ['...'],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: 'spread',\n };\n } else if (propPart === 'if'\n || propPart === 'elseif'\n || propPart === 'for'\n || propPart === 'radio'\n || propPart === 'checkbox'\n ) {\n const stateResult = parseStatePart(statePart);\n return {\n propName: propPart,\n propSegments: [propPart],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: propPart,\n };\n } else {\n const stateResult = parseStatePart(statePart);\n const propResult = parsePropPart(propPart);\n // eventToken.<prop>: <name> は要素 dispatch を state へ流す pub/sub 配線。\n // 値適用ではないため bindingType 'event' として listener attach 経路に乗せる。\n if (propResult.propSegments[0] === 'eventToken') {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'event',\n };\n }\n if (propResult.propSegments[0].startsWith('on')) {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'event',\n };\n } else {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'prop',\n };\n }\n }\n });\n // check for sigle binding for 'if', 'elseif', 'else', 'for'\n if (results.length > 1) {\n const isIncludeSingleBinding = results.some(r => STRUCTURAL_BINDING_TYPE_SET.has(r.bindingType));\n if (isIncludeSingleBinding) {\n raiseError(`Invalid bindText: \"${bindText}\". 'if', 'elseif', 'else', and 'for' bindings must be single binding.`);\n }\n }\n return results;\n}\n\n","import { config } from \"../config\";\n\nconst bindTextByNode = new WeakMap<Node, string>();\n\n// format: <!--@@wcs-text:path-->\n// bind-stateはconfig.commentTextPrefixで変更可能\n// format: <!--@@wcs-for:UUID-->\n// bind-stateはconfig.commentForPrefixで変更可能\n// format: <!--@@wcs-if:UUID-->\n// bind-stateはconfig.commentIfPrefixで変更可能\n// format: <!--@@wcs-else:UUID-->\n// bind-stateはconfig.commentElsePrefixで変更可能\n// format: <!--@@wcs-elseif:UUID-->\n// bind-stateはconfig.commentElseIfPrefixで変更可能\nconst bindingTypeKeywordSet: Set<string> = new Set<string>([\n config.commentTextPrefix,\n config.commentForPrefix,\n config.commentIfPrefix,\n config.commentElseIfPrefix,\n config.commentElsePrefix,\n]);\n\n// format: <!--@@:path-->は<!--@@wcs-text:path-->と同義にする\nconst EMBEDDED_REGEX = new RegExp(`^\\\\s*@@\\\\s*(.*?)\\\\s*:\\\\s*(.+?)\\\\s*$`);\n\nexport function parseCommentNode(node: Node): string | null {\n const savedText = bindTextByNode.get(node);\n if (typeof savedText === \"string\") {\n return savedText;\n }\n if (node.nodeType !== Node.COMMENT_NODE) {\n return null;\n }\n const commentNode = node as Comment;\n const text = commentNode.data.trim();\n const match = EMBEDDED_REGEX.exec(text);\n if (match === null) {\n return null;\n }\n // 空の場合は wcs-text として扱う\n const keyword = match[1] || config.commentTextPrefix;\n if (!bindingTypeKeywordSet.has(keyword)) {\n return null;\n }\n bindTextByNode.set(node, match[2]);\n return match[2];\n}\n\nexport function getCommentNodeBindText(node: Node): string | null {\n return bindTextByNode.get(node) || null;\n}","import { parseStatePart } from \"./parseStatePart.js\";\nimport { ParseBindTextResult } from \"./types.js\";\n\nexport function parseBindTextForEmbeddedNode(bindText: string): ParseBindTextResult {\n const stateResult = parseStatePart(bindText);\n return {\n propName: 'textContent',\n propSegments: ['textContent'],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: 'text',\n }\n}","import { config } from \"../config\";\nimport { raiseError } from \"../raiseError\";\nimport { parseBindTextsForElement } from \"../bindTextParser/parseBindTextsForElement\";\nimport { parseCommentNode } from \"./parseCommentNode\";\nimport { parseBindTextForEmbeddedNode } from \"../bindTextParser/parseBindTextForEmbeddedNode\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { getFragmentInfoByUUID } from \"../structural/fragmentInfoByUUID\";\n\nexport function getParseBindTextResults(node: Node): ParseBindTextResult[] {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const bindText = element.getAttribute(config.bindAttributeName) || '';\n return parseBindTextsForElement(bindText);\n } else if (node.nodeType === Node.COMMENT_NODE) {\n const bindTextOrUUID = parseCommentNode(node);\n if (bindTextOrUUID === null) {\n raiseError(`Comment node binding text not found.`);\n }\n const fragmentInfo = getFragmentInfoByUUID(bindTextOrUUID);\n let parseBindingTextResult = fragmentInfo?.parseBindTextResult ?? null;\n let uuid: string | null = null;\n if (parseBindingTextResult === null) {\n // It is not a structural fragment UUID, so treat it as bindText\n parseBindingTextResult = parseBindTextForEmbeddedNode(bindTextOrUUID);\n uuid = null;\n } else {\n uuid = bindTextOrUUID;\n }\n return [{\n ...parseBindingTextResult,\n uuid: uuid,\n }]\n }\n return [];\n}","import { config } from \"../config\";\nimport { parseCommentNode } from \"./parseCommentNode\";\n\n/**\n * data-wcs 属性または埋め込みノード<!--{{}}-->を持つノードをすべて取得する\n * @param root \n * @returns \n */\n\nexport function getSubscriberNodes(root: Document | Element | DocumentFragment): Node[] {\n const subscriberNodes: Node[] = [];\n const walker = document.createTreeWalker(\n root, \n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT, \n {\n acceptNode(node: Node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const hasBinding = element.hasAttribute(config.bindAttributeName);\n return hasBinding\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n } else {\n // Comment node\n return parseCommentNode(node) !== null\n ? NodeFilter.FILTER_ACCEPT \n : NodeFilter.FILTER_SKIP;\n }\n }\n }\n );\n \n while (walker.nextNode()) {\n subscriberNodes.push(walker.currentNode);\n }\n return subscriberNodes;\n}","import { expandSpread, hasUnresolvedSpread } from \"../bindTextParser/expandSpread\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { resolveNodePath } from \"../structural/resolveNodePath\";\nimport { IFragmentNodeInfo } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { getBindingInfos } from \"./getBindingInfos\";\nimport { setBindingsByNode } from \"./getBindingsByNode\";\nimport { getParseBindTextResults } from \"./getParseBindTextResults\";\nimport { getSubscriberNodes } from \"./getSubscriberNodes\";\nimport { resolveInitializedBinding } from \"./initializeBindingPromiseByNode\";\n\nconst registeredNodeSet = new WeakSet<Node>();\n\nexport interface IDeferredSpreadEntry {\n readonly node: Node;\n readonly tagName: string;\n readonly parseResults: ParseBindTextResult[];\n}\n\nfunction processParseResultsForNode(\n node: Node,\n parseResults: ParseBindTextResult[],\n options: { allowDeferred: boolean },\n): { bindings: IBindingInfo[], deferred: IDeferredSpreadEntry | null } {\n const expanded = expandSpread(node, parseResults, { allowDeferred: options.allowDeferred });\n if (hasUnresolvedSpread(expanded)) {\n const tagName = node.nodeType === Node.ELEMENT_NODE\n ? getCustomElement(node as Element)\n : null;\n if (tagName === null) {\n raiseError(`Spread binding deferred but element is not a custom element.`);\n }\n return { bindings: [], deferred: { node, tagName, parseResults } };\n }\n registeredNodeSet.add(node);\n const bindings = getBindingInfos(node, expanded);\n setBindingsByNode(node, bindings);\n resolveInitializedBinding(node);\n return { bindings, deferred: null };\n}\n\nexport function collectNodesAndBindingInfos(\n root: Document | Element | DocumentFragment\n): [ Node[], IBindingInfo[], IDeferredSpreadEntry[] ] {\n const subscriberNodes = getSubscriberNodes(root);\n const allBindings: IBindingInfo[] = [];\n const deferredSpreads: IDeferredSpreadEntry[] = [];\n for(const node of subscriberNodes) {\n if (registeredNodeSet.has(node)) continue;\n const parseResults = getParseBindTextResults(node);\n const result = processParseResultsForNode(node, parseResults, { allowDeferred: true });\n if (result.deferred !== null) {\n deferredSpreads.push(result.deferred);\n continue;\n }\n allBindings.push(...result.bindings);\n }\n return [subscriberNodes, allBindings, deferredSpreads];\n}\n\nexport function collectNodesAndBindingInfosByFragment(\n root: DocumentFragment,\n nodeInfos: IFragmentNodeInfo[],\n): [ Node[], IBindingInfo[] ] {\n const nodes: Node[] = [];\n const allBindings: IBindingInfo[] = [];\n for(const nodeInfo of nodeInfos) {\n const node = resolveNodePath(root, nodeInfo.nodePath);\n if (node === null) {\n raiseError(`Node not found by path [${nodeInfo.nodePath.join(', ')}] in fragment.`);\n }\n if (registeredNodeSet.has(node)) continue;\n const result = processParseResultsForNode(node, nodeInfo.parseBindTextResults, { allowDeferred: false });\n // deferred is impossible when allowDeferred=false (expandSpread raises instead)\n allBindings.push(...result.bindings);\n nodes.push(node);\n }\n return [nodes, allBindings];\n}\n\nexport function unregisterNode(node: Node): void {\n registeredNodeSet.delete(node);\n}\n\n/**\n * Re-process a deferred spread entry once the custom element class is\n * registered. Expands the captured parseResults, installs bindings, and\n * returns them so the caller can attach handlers and apply state values.\n */\nexport function processDeferredNode(entry: IDeferredSpreadEntry): IBindingInfo[] {\n const { node, parseResults } = entry;\n unregisterNode(node);\n const result = processParseResultsForNode(node, parseResults, { allowDeferred: false });\n return result.bindings;\n}\n","import { WILDCARD } from \"../define\";\nimport { IListIndex } from \"../list/types\";\nimport { IPathInfo, IStateAddress } from \"./types\";\n\nconst _cache: WeakMap<IListIndex, WeakMap<IPathInfo, IStateAddress>> = new WeakMap();\nconst _cacheNullListIndex: WeakMap<IPathInfo, IStateAddress> = new WeakMap();\n\nclass StateAddress implements IStateAddress {\n readonly pathInfo: IPathInfo;\n readonly listIndex: IListIndex | null;\n private _parentAddress: IStateAddress | null | undefined;\n\n constructor(pathInfo: IPathInfo, listIndex: IListIndex | null) {\n this.pathInfo = pathInfo;\n this.listIndex = listIndex;\n }\n\n get parentAddress(): IStateAddress | null {\n if (typeof this._parentAddress !== 'undefined') {\n return this._parentAddress;\n }\n const parentPathInfo = this.pathInfo.parentPathInfo;\n if (parentPathInfo === null) {\n return null;\n }\n const lastSegment = this.pathInfo.segments[this.pathInfo.segments.length - 1];\n let parentListIndex: IListIndex | null = null;\n if (lastSegment === WILDCARD) {\n parentListIndex = this.listIndex?.parentListIndex ?? null;\n } else {\n parentListIndex = this.listIndex;\n }\n return this._parentAddress = createStateAddress(parentPathInfo, parentListIndex);\n }\n}\n\nexport function createStateAddress(pathInfo: IPathInfo, listIndex: IListIndex | null): IStateAddress {\n if (listIndex === null) {\n let cached = _cacheNullListIndex.get(pathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new StateAddress(pathInfo, null);\n _cacheNullListIndex.set(pathInfo, cached);\n return cached;\n } else {\n let cacheByPathInfo = _cache.get(listIndex);\n if (typeof cacheByPathInfo === \"undefined\") {\n cacheByPathInfo = new WeakMap<IPathInfo, IStateAddress>();\n _cache.set(listIndex, cacheByPathInfo);\n }\n let cached = cacheByPathInfo.get(pathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new StateAddress(pathInfo, listIndex);\n cacheByPathInfo.set(pathInfo, cached);\n return cached;\n }\n}","// command-token / event-token が共有する pub/sub プリミティブ。\n// _subscribers は Set のため挿入順を保持する。\n// emit() は subscribe() された順に呼び出され、戻り値配列も同じ順序で返る。\n//\n// 「誰が subscribe し誰が emit するか」だけが command / event の違い:\n// - command-token: element が subscribe / state が emit\n// - event-token: state(`$on`) が subscribe / element(listener) が emit\n\nexport type TokenSubscriber = (...args: unknown[]) => unknown;\n\nexport interface IToken {\n readonly name: string;\n readonly size: number;\n subscribe(fn: TokenSubscriber): () => void;\n unsubscribe(fn: TokenSubscriber): boolean;\n emit(...args: unknown[]): unknown[];\n}\n\nexport class Token implements IToken {\n private _name: string;\n private _subscribers: Set<TokenSubscriber> = new Set();\n\n constructor(name: string) {\n this._name = name;\n }\n\n get name(): string {\n return this._name;\n }\n\n get size(): number {\n return this._subscribers.size;\n }\n\n subscribe(fn: TokenSubscriber): () => void {\n this._subscribers.add(fn);\n return () => {\n this._subscribers.delete(fn);\n };\n }\n\n unsubscribe(fn: TokenSubscriber): boolean {\n return this._subscribers.delete(fn);\n }\n\n emit(...args: unknown[]): unknown[] {\n const results: unknown[] = [];\n for (const fn of this._subscribers) {\n results.push(fn(...args));\n }\n return results;\n }\n}\n","import { Token } from \"../token/Token\";\nimport { ICommandToken } from \"./types\";\n\n// CommandToken は共有 pub/sub プリミティブ Token の薄い特化。\n// instanceof による型判別を成立させるため独立クラスとして維持する。\nexport class CommandToken extends Token implements ICommandToken {\n}\n\nexport function isCommandToken(value: unknown): value is ICommandToken {\n return value instanceof CommandToken;\n}\n","import { ILoopContext } from \"./types\";\n\nconst loopContextByNode = new WeakMap<Node, ILoopContext>();\n\nexport function getLoopContextByNode(node: Node): ILoopContext | null {\n let paramNode: Node | null = node;\n while (paramNode) {\n const loopContext = loopContextByNode.get(paramNode);\n if (loopContext) {\n return loopContext;\n }\n paramNode = paramNode.parentNode;\n }\n return null;\n}\n\nexport function setLoopContextByNode(node: Node, loopContext: ILoopContext | null): void {\n if (loopContext === null) {\n loopContextByNode.delete(node);\n return;\n }\n loopContextByNode.set(node, loopContext);\n}\n","\nexport const setLoopContextAsyncSymbol: unique symbol = Symbol(\"$$setLoopContextAsync\");\nexport const setLoopContextSymbol: unique symbol = Symbol(\"$$setLoopContext\");\nexport const getByAddressSymbol: unique symbol = Symbol(\"$$getByAddress\");\nexport const setByAddressSymbol: unique symbol = Symbol(\"$$setByAddress\");\nexport const connectedCallbackSymbol: unique symbol = Symbol(\"$$connectedCallback\");\nexport const disconnectedCallbackSymbol: unique symbol = Symbol(\"$$disconnectedCallback\");\nexport const updatedCallbackSymbol: unique symbol = Symbol(\"$$updatedCallback\");\n","import { createStateAddress } from \"../address/StateAddress\";\nimport { IPathInfo } from \"../address/types\";\nimport { isCommandToken } from \"../command/CommandToken\";\nimport { ICommandToken } from \"../command/types\";\nimport { STATE_COMMAND_NAMESPACE_NAME } from \"../define\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { getByAddressSymbol, setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"../types\";\n\n// onclick: $command.<name> のように、DOM イベントから command token を直接 emit する形式かを判定する。\n// 右辺が $command 名前空間配下のパス($command.<token>)のときに true。\nfunction isCommandTokenPath(statePathName: string): boolean {\n return statePathName.startsWith(STATE_COMMAND_NAMESPACE_NAME + \".\");\n}\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\nconst bindingSetByHandlerKey: Map<string, Set<IBindingInfo>> = new Map();\n\nfunction getHandlerKey(binding: IBindingInfo): string {\n const modifierKey = binding.propModifiers.filter(m => m === 'prevent' || m === 'stop').sort().join(',');\n return `${binding.stateName}::${binding.statePathName}::${modifierKey}`;\n}\n\nconst stateEventHandlerFunction = (\n stateName: string,\n handlerName: string,\n modifiers: string[],\n statePathInfo: IPathInfo\n) => (event: Event): any => {\n if (modifiers.includes('prevent')) event.preventDefault();\n if (modifiers.includes('stop')) event.stopPropagation();\n\n const node = event.target as Element;\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for event handler.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n const isCommand = isCommandTokenPath(handlerName);\n stateElement.createStateAsync(\"writable\", async (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n const indexes = loopContext?.listIndex.indexes ?? [];\n if (isCommand) {\n // command token を解決して emit。引数はハンドラ呼び出しと同じく (event, ...listIndexes) を透過する。\n const token = state[getByAddressSymbol](createStateAddress(statePathInfo, null));\n if (!isCommandToken(token)) {\n raiseError(`Event binding \"${handlerName}\" did not resolve to a CommandToken. Declare the name in $commandTokens and reference it as $command.<name>.`);\n }\n return (token as ICommandToken).emit(event, ...indexes);\n }\n const handler = state[handlerName];\n if (typeof handler !== \"function\") {\n raiseError(`Handler \"${handlerName}\" is not a function on state \"${stateName}\".`);\n }\n return Reflect.apply(handler, state, [event, ...indexes]);\n });\n });\n}\n\nexport function attachEventHandler(binding: IBindingInfo): boolean {\n if (!binding.propName.startsWith(\"on\")) {\n return false;\n }\n const key = getHandlerKey(binding);\n let stateEventHandler = handlerByHandlerKey.get(key);\n if (typeof stateEventHandler === \"undefined\") {\n stateEventHandler = stateEventHandlerFunction(binding.stateName, binding.statePathName, binding.propModifiers, binding.statePathInfo);\n handlerByHandlerKey.set(key, stateEventHandler);\n }\n\n const eventName = binding.propName.slice(2);\n (binding.node as Element).addEventListener(eventName, stateEventHandler);\n\n let bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n bindingSet = new Set<IBindingInfo>([binding]);\n bindingSetByHandlerKey.set(key, bindingSet);\n } else {\n bindingSet.add(binding);\n }\n return true;\n}\n\nexport function detachEventHandler(binding: IBindingInfo): boolean {\n if (!binding.propName.startsWith(\"on\")) {\n return false;\n }\n const key = getHandlerKey(binding);\n const stateEventHandler = handlerByHandlerKey.get(key);\n if (typeof stateEventHandler === \"undefined\") {\n return false;\n }\n const eventName = binding.propName.slice(2);\n (binding.node as Element).removeEventListener(eventName, stateEventHandler);\n\n const bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n return false;\n }\n bindingSet.delete(binding);\n if (bindingSet.size === 0) {\n handlerByHandlerKey.delete(key);\n bindingSetByHandlerKey.delete(key);\n }\n return true;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingSetByHandlerKey,\n};\n\n","import { Token } from \"../token/Token\";\n\n// EventToken は共有 pub/sub プリミティブ Token の薄い特化(element→state 方向)。\n// instanceof による型判別を成立させるため独立クラスとして維持する。\nexport class EventToken extends Token {\n}\n\nexport function isEventToken(value: unknown): value is EventToken {\n return value instanceof EventToken;\n}\n","import { IStateElement } from \"../components/types\";\nimport { EventToken } from \"./EventToken\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, EventToken>> = new WeakMap();\n\nexport function getOrCreateEventToken(stateElement: IStateElement, name: string): EventToken {\n let registry = registryByStateElement.get(stateElement);\n if (typeof registry === \"undefined\") {\n registry = new Map<string, EventToken>();\n registryByStateElement.set(stateElement, registry);\n }\n let token = registry.get(name);\n if (typeof token === \"undefined\") {\n token = new EventToken(name);\n registry.set(name, token);\n }\n return token;\n}\n\nexport function clearEventTokenRegistry(stateElement: IStateElement): void {\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * eventToken.<propertyName>: <eventTokenName> バインディングの attach ハンドラ。\n *\n * command-token の双対(element→state)。要素が dispatch する CustomEvent を受けて\n * event-token を emit し、state 側の `$on` ハンドラ群へ pub/sub で配送する。\n *\n * 設計(MVP スコープ: wc-bindable カスタム要素のみ):\n * - キーは生イベント名ではなく **wcBindable property 名**。実 DOM イベント名は\n * wcBindable.properties[].event から解決する(command-token が wcBindable.commands で\n * 検証するのと対称。コロンを含む namespaced event 名と binding 構文の `:` 衝突も回避)。\n * - <prop> が wcBindable.properties に宣言されていることは attach 時に検証する\n * (要素クラス参照のみで DOM 接続に非依存。fail-fast / typo 耐性)。\n * - <eventTokenName> が $eventTokens に宣言されていることは **発火時** に検証する\n * (state 解決が必要なため。詳細は下記の fire-time 解決の注記を参照)。\n * - subscriber 引数規約は `(state, event, ...listIndexes)`。\n * - modifier `#prevent` / `#stop` は既存イベント binding と同等にサポート。\n *\n * token はイベント発火ごとに registry から解決する(getOrCreateEventToken)。これにより\n * state の再 set で registry が作り直されても最新の subscriber 群へ配送できる。\n *\n * state element の解決と `$eventTokens` 検証は **発火時** に行う(attach 時ではない)。\n * 構造ブロック(for/if)や SSR hydration では、binding 初期化時にノードが detached な\n * DocumentFragment / wrapper 上にあり、その時点では element.getRootNode() から state を\n * 解決できないため。onclick / two-way ハンドラと同じく fire-time 解決に揃えている。\n */\n\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { IBindingInfo } from \"../types\";\nimport { IWcBindable } from \"./types\";\nimport { getOrCreateEventToken } from \"./eventTokenRegistry\";\n\ninterface IEventTokenListener {\n readonly eventName: string;\n readonly handler: (event: Event) => void;\n}\n\nconst listenerByBinding: WeakMap<IBindingInfo, IEventTokenListener> = new WeakMap();\n\nfunction getWcBindable(element: Element): IWcBindable | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n // attach 側で未定義要素は whenDefined 後に再試行するため、ここに来る時点で customClass は定義済み。\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n const bindable = customClass?.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n return bindable;\n }\n return null;\n}\n\nexport function attachEventTokenHandler(binding: IBindingInfo): boolean {\n if (binding.propSegments[0] !== \"eventToken\") {\n return false;\n }\n const element = binding.node as Element;\n\n // カスタム要素が未定義なら定義後に再試行(wcBindable が必要なため)。\n const customTagName = getCustomElement(element);\n if (customTagName !== null && customElements.get(customTagName) === undefined) {\n customElements.whenDefined(customTagName).then(() => {\n attachEventTokenHandler(binding);\n });\n return true;\n }\n\n // 再評価で二重 attach しない。\n if (listenerByBinding.has(binding)) {\n return true;\n }\n\n const propertyName = binding.propSegments[1];\n if (typeof propertyName !== \"string\" || propertyName.length === 0) {\n raiseError(`eventToken binding requires a property name (e.g., \"eventToken.error\").`);\n }\n\n const bindable = getWcBindable(element);\n if (bindable === null) {\n raiseError(`eventToken binding requires a wc-bindable custom element. <${element.tagName.toLowerCase()}> is not wc-bindable.`);\n }\n const propDesc = bindable.properties.find((p) => p.name === propertyName);\n if (typeof propDesc === \"undefined\") {\n raiseError(`Property \"${propertyName}\" is not declared in wcBindable.properties of <${element.tagName.toLowerCase()}>.`);\n }\n const eventName = propDesc.event;\n\n const tokenName = binding.statePathName;\n const stateName = binding.stateName;\n const modifiers = binding.propModifiers;\n const handler = (event: Event): void => {\n if (modifiers.includes(\"prevent\")) event.preventDefault();\n if (modifiers.includes(\"stop\")) event.stopPropagation();\n\n // state は発火時の live root から解決する(attach 時は detached の可能性があるため)。\n const rootNode = element.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for eventToken handler.`);\n }\n if (!stateElement.eventTokenNames.has(tokenName)) {\n raiseError(`eventToken \"${tokenName}\" is not declared in $eventTokens of state \"${stateName}\".`);\n }\n const loopContext = getLoopContextByNode(element);\n stateElement.createStateAsync(\"writable\", async (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n const indexes = loopContext?.listIndex.indexes ?? [];\n const token = getOrCreateEventToken(stateElement, tokenName);\n return token.emit(state, event, ...indexes);\n });\n });\n };\n\n element.addEventListener(eventName, handler);\n listenerByBinding.set(binding, { eventName, handler });\n return true;\n}\n\nexport function detachEventTokenHandler(binding: IBindingInfo): boolean {\n if (binding.propSegments[0] !== \"eventToken\") {\n return false;\n }\n const listener = listenerByBinding.get(binding);\n if (typeof listener === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(listener.eventName, listener.handler);\n listenerByBinding.delete(binding);\n return true;\n}\n\nexport const __private__ = {\n listenerByBinding,\n};\n","import { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IWcBindable } from \"./types\";\n\nconst CHECK_TYPES = new Set([ 'radio', 'checkbox' ]);\nconst DEFAULT_VALUE_PROP_NAMES = new Set([ 'value', 'valueAsNumber', 'valueAsDate' ]);\n\nexport function isPossibleTwoWay(node: Node, propName: string): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'input') {\n const inputType = (element.getAttribute('type') || 'text').toLowerCase();\n if (inputType === 'button') {\n return false;\n }\n if (CHECK_TYPES.has(inputType) && propName === 'checked') {\n return true;\n }\n if (DEFAULT_VALUE_PROP_NAMES.has(propName)) {\n return true;\n }\n }\n if (tagName === 'select' && propName === 'value') {\n return true;\n }\n if (tagName === 'textarea' && propName === 'value') {\n return true;\n }\n const customTagName = getCustomElement(element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined. Cannot determine if property \"${propName}\" is suitable for two-way binding.`);\n }\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n if (bindable.properties.some(p => p.name === propName)) {\n return true;\n }\n }\n }\n return false;\n}","import { isPossibleTwoWay } from \"./isPossibleTwoWay\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { IWcBindable } from \"./types\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\nconst bindingSetByHandlerKey: Map<string, Set<IBindingInfo>> = new Map();\n\nconst DEFAULT_GETTER = (e: Event) => (e as CustomEvent).detail;\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string, hasGetter: boolean): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.propName}::${binding.statePathName}::${eventName}::${filterKey}::${hasGetter ? 'g' : 'n'}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n const tagName = (binding.node as Element).tagName.toLowerCase();\n // 1.default event name\n let eventName = (tagName === 'select') ? 'change' : 'input';\n // 2.wcBindable protocol\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined. Cannot determine event name for two-way binding.`);\n }\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n const propDesc = bindable.properties.find(p => p.name === binding.propName);\n if (propDesc) {\n eventName = propDesc.event;\n }\n }\n }\n // 3.modifier\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nfunction getValueGetter(binding: IBindingInfo): ((event: Event) => any) | null {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (customClass) {\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n const propDesc = bindable.properties.find(p => p.name === binding.propName);\n if (propDesc) {\n return propDesc.getter ?? DEFAULT_GETTER;\n }\n }\n }\n }\n return null;\n}\n\nconst twowayEventHandlerFunction = (\n stateName: string,\n propName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n valueGetter: ((event: Event) => any) | null,\n) => (event: Event): any => {\n const node = event.target as Element;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n let newValue: any;\n if (valueGetter !== null) {\n newValue = valueGetter(event);\n } else {\n if (!(propName in node)) {\n console.warn(`[@wcstack/state] Property \"${propName}\" does not exist on target element.`);\n return;\n }\n newValue = (node as any)[propName];\n }\n let filteredNewValue = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[statePathName] = filteredNewValue;\n });\n });\n}\n\nexport function attachTwowayEventHandler(binding: IBindingInfo): void {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName);\n if (typeof customClass === \"undefined\") {\n customElements.whenDefined(customTagName).then(() => {\n attachTwowayEventHandler(binding);\n });\n return;\n }\n }\n\n if (isPossibleTwoWay(binding.node, binding.propName) && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const valueGetter = getValueGetter(binding);\n const key = getHandlerKey(binding, eventName, valueGetter !== null);\n let twowayEventHandler = handlerByHandlerKey.get(key);\n if (typeof twowayEventHandler === \"undefined\") {\n twowayEventHandler = twowayEventHandlerFunction(\n binding.stateName,\n binding.propName,\n binding.statePathName,\n binding.inFilters,\n valueGetter\n );\n handlerByHandlerKey.set(key, twowayEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, twowayEventHandler);\n let bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n bindingSet = new Set<IBindingInfo>([binding]);\n bindingSetByHandlerKey.set(key, bindingSet);\n } else {\n bindingSet.add(binding);\n }\n }\n}\n\nexport function detachTwowayEventHandler(binding: IBindingInfo): void {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName);\n if (typeof customClass === \"undefined\") {\n customElements.whenDefined(customTagName).then(() => {\n detachTwowayEventHandler(binding);\n });\n return;\n }\n }\n\n if (isPossibleTwoWay(binding.node, binding.propName) && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const valueGetter = getValueGetter(binding);\n const key = getHandlerKey(binding, eventName, valueGetter !== null);\n const twowayEventHandler = handlerByHandlerKey.get(key);\n if (typeof twowayEventHandler === \"undefined\") {\n return;\n }\n (binding.node as Element).removeEventListener(eventName, twowayEventHandler);\n\n const bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n return;\n }\n bindingSet.delete(binding);\n if (bindingSet.size === 0) {\n handlerByHandlerKey.delete(key);\n bindingSetByHandlerKey.delete(key);\n }\n }\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingSetByHandlerKey,\n getHandlerKey,\n getEventName,\n getValueGetter,\n twowayEventHandlerFunction,\n DEFAULT_GETTER,\n};\n","import { IAbsoluteStateAddress } from \"../address/types\";\n\nconst lastListValueByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, readonly unknown[]> = new WeakMap();\n\nexport function getLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): readonly unknown[] {\n return lastListValueByAbsoluteStateAddress.get(address) ?? [];\n}\n\nexport function setLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress, value: readonly unknown[]): void {\n lastListValueByAbsoluteStateAddress.set(address, value);\n}\n\nexport function clearLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): void {\n lastListValueByAbsoluteStateAddress.delete(address);\n}\n\nexport function hasLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): boolean {\n return lastListValueByAbsoluteStateAddress.has(address);\n}\n","import { IStateElement } from \"../components/types\";\nimport { IAbsolutePathInfo, IPathInfo } from \"./types\";\n\nconst _cache: WeakMap<IStateElement, WeakMap<IPathInfo, IAbsolutePathInfo>> = new WeakMap();\n\nexport function getAbsolutePathInfo(stateElement: IStateElement, pathInfo: IPathInfo): IAbsolutePathInfo {\n if (_cache.has(stateElement)) {\n const pathMap = _cache.get(stateElement)!;\n if (pathMap.has(pathInfo)) {\n return pathMap.get(pathInfo)!;\n }\n } else {\n _cache.set(stateElement, new WeakMap());\n }\n const absolutePathInfo = Object.freeze(new AbsolutePathInfo(stateElement, pathInfo));\n _cache.get(stateElement)!.set(pathInfo, absolutePathInfo);\n return absolutePathInfo;\n}\n\nclass AbsolutePathInfo implements IAbsolutePathInfo {\n readonly pathInfo: IPathInfo;\n readonly stateName: string;\n readonly stateElement: IStateElement;\n readonly parentAbsolutePathInfo: IAbsolutePathInfo | null;\n constructor(stateElement: IStateElement, pathInfo: IPathInfo) {\n this.pathInfo = pathInfo;\n this.stateName = stateElement.name;\n this.stateElement = stateElement;\n if (pathInfo.parentPathInfo === null) {\n this.parentAbsolutePathInfo = null;\n } else {\n this.parentAbsolutePathInfo = getAbsolutePathInfo(stateElement, pathInfo.parentPathInfo);\n }\n }\n}","import { WILDCARD } from \"../define\";\nimport { IListIndex } from \"../list/types\";\nimport { IAbsolutePathInfo, IAbsoluteStateAddress } from \"./types\";\n\nconst _cache: WeakMap<IListIndex, WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress>> = new WeakMap();\nconst _cacheNullListIndex: WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress> = new WeakMap();\n\nclass AbsoluteStateAddress implements IAbsoluteStateAddress {\n readonly absolutePathInfo: IAbsolutePathInfo;\n readonly listIndex: IListIndex | null;\n private _parentAbsoluteAddress: IAbsoluteStateAddress | null | undefined;\n\n constructor(absolutePathInfo: IAbsolutePathInfo, listIndex: IListIndex | null) {\n this.absolutePathInfo = absolutePathInfo;\n this.listIndex = listIndex;\n }\n\n get parentAbsoluteAddress(): IAbsoluteStateAddress | null {\n if (typeof this._parentAbsoluteAddress !== 'undefined') {\n return this._parentAbsoluteAddress;\n }\n const parentAbsolutePathInfo = this.absolutePathInfo.parentAbsolutePathInfo;\n if (parentAbsolutePathInfo === null) {\n return null;\n }\n const lastSegment = this.absolutePathInfo.pathInfo.segments[this.absolutePathInfo.pathInfo.segments.length - 1];\n let parentListIndex: IListIndex | null = null;\n if (lastSegment === WILDCARD) {\n parentListIndex = this.listIndex?.parentListIndex ?? null;\n } else {\n parentListIndex = this.listIndex;\n }\n return this._parentAbsoluteAddress = createAbsoluteStateAddress(\n parentAbsolutePathInfo,\n parentListIndex\n );\n }\n}\n\nexport function createAbsoluteStateAddress(absolutePathInfo: IAbsolutePathInfo, listIndex: IListIndex | null): IAbsoluteStateAddress {\n if (listIndex === null) {\n let cached = _cacheNullListIndex.get(absolutePathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new AbsoluteStateAddress(absolutePathInfo, null);\n _cacheNullListIndex.set(absolutePathInfo, cached);\n return cached;\n } else {\n let cacheByAbsolutePathInfo = _cache.get(listIndex);\n if (typeof cacheByAbsolutePathInfo === \"undefined\") {\n cacheByAbsolutePathInfo = new WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress>();\n _cache.set(listIndex, cacheByAbsolutePathInfo);\n }\n let cached = cacheByAbsolutePathInfo.get(absolutePathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new AbsoluteStateAddress(absolutePathInfo, listIndex);\n cacheByAbsolutePathInfo.set(absolutePathInfo, cached);\n return cached;\n }\n}\n","\nconst rootNodeByFragment: WeakMap<DocumentFragment, Node> = new WeakMap();\n\nexport function setRootNodeByFragment(fragment: DocumentFragment, rootNode: Node | null): void {\n if (rootNode === null) {\n rootNodeByFragment.delete(fragment);\n } else {\n rootNodeByFragment.set(fragment, rootNode);\n }\n}\n\nexport function getRootNodeByFragment(fragment: DocumentFragment): Node | null {\n return rootNodeByFragment.get(fragment) || null;\n}\n","import { IPathInfo } from \"./types.js\";\n\nconst cacheCalcWildcardLen: Map<string, number> = new Map(); \n\nexport function calcWildcardLen(pathInfo: IPathInfo, targetPathInfo: IPathInfo): number {\n let path1: IPathInfo;\n let path2: IPathInfo;\n if (pathInfo.wildcardCount === 0 || targetPathInfo.wildcardCount === 0) {\n return 0;\n }\n if (pathInfo.wildcardCount === 1 \n && targetPathInfo.wildcardCount > 0 \n && targetPathInfo.wildcardPathSet.has(pathInfo.path)) {\n return 1;\n }\n if (pathInfo.id < targetPathInfo.id) {\n path1 = pathInfo;\n path2 = targetPathInfo;\n } else {\n path1 = targetPathInfo;\n path2 = pathInfo;\n }\n const key = `${path1.path}\\t${path2.path}`;\n let len = cacheCalcWildcardLen.get(key);\n if (typeof len !== \"undefined\") {\n return len;\n }\n const matchPath = path1.wildcardPathSet.intersection(path2.wildcardPathSet);\n len = matchPath.size;\n cacheCalcWildcardLen.set(key, len);\n return len;\n}\n\n","import { calcWildcardLen } from \"../address/calcWildcardLen\";\nimport { IBindingInfo } from \"../types\";\nimport { getLoopContextByNode } from \"./loopContextByNode\";\nimport { IListIndex, ILoopContext } from \"./types\";\n\nconst listIndexByBindingInfoByLoopContext: WeakMap<ILoopContext, WeakMap<IBindingInfo, IListIndex | null>> = new WeakMap();\n\nexport function getListIndexByBindingInfo(bindingInfo: IBindingInfo): IListIndex | null {\n const loopContext = getLoopContextByNode(bindingInfo.node);\n if (loopContext === null) {\n return null;\n }\n let listIndexByBindingInfo = listIndexByBindingInfoByLoopContext.get(loopContext);\n if (typeof listIndexByBindingInfo === \"undefined\") {\n listIndexByBindingInfo = new WeakMap<IBindingInfo, IListIndex | null>();\n listIndexByBindingInfoByLoopContext.set(loopContext, listIndexByBindingInfo);\n } else {\n const listIndex = listIndexByBindingInfo.get(bindingInfo);\n if (typeof listIndex !== \"undefined\") {\n return listIndex;\n }\n }\n\n let listIndex: IListIndex | null = null;\n try {\n const wildcardLen = calcWildcardLen(loopContext.pathInfo, bindingInfo.statePathInfo);\n if (wildcardLen > 0) {\n listIndex = loopContext.listIndex.at(wildcardLen - 1);\n }\n return listIndex;\n } finally {\n listIndexByBindingInfo.set(bindingInfo, listIndex);\n }\n\n}\n","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { IAbsoluteStateAddress } from \"../address/types\";\nimport { getRootNodeByFragment } from \"../apply/rootNodeByFragment\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"./types\";\n\nconst absoluteStateAddressByBinding: WeakMap<IBindingInfo, IAbsoluteStateAddress> = new WeakMap();\n\nexport function getAbsoluteStateAddressByBinding(binding: IBindingInfo): IAbsoluteStateAddress {\n // 切断されていても、キャッシュされていれば絶対状態アドレスを返す。\n let absoluteStateAddress: IAbsoluteStateAddress | null = null;\n absoluteStateAddress = absoluteStateAddressByBinding.get(binding) || null;\n if (absoluteStateAddress !== null) {\n return absoluteStateAddress;\n }\n\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n // binding.replaceNodeはisConnected=trueになっていることが前提、切断されている場合はraiseErrorを返す\n if (binding.replaceNode.isConnected === false) {\n // DocumentFragmentでバッファリングされている場合は、ルートノードをDocumentFragmentから実際のルートノードに切り替える\n const rootNodeByFragment = getRootNodeByFragment(rootNode as DocumentFragment);\n if (rootNodeByFragment === null) {\n raiseError(`Cannot get absolute state address for disconnected binding: ${binding.bindingType} ${binding.statePathName} on ${binding.node.nodeName}`);\n } else {\n rootNode = rootNodeByFragment;\n }\n }\n\n const listIndex = getListIndexByBindingInfo(binding);\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n const absolutePathInfo = getAbsolutePathInfo(stateElement, binding.statePathInfo);\n absoluteStateAddress = \n createAbsoluteStateAddress(absolutePathInfo, listIndex);\n absoluteStateAddressByBinding.set(binding, absoluteStateAddress);\n return absoluteStateAddress;\n}\n\nexport function clearAbsoluteStateAddressByBinding(binding: IBindingInfo) {\n absoluteStateAddressByBinding.delete(binding);\n}","import { IStateElement } from \"../components/types\";\n\nconst completeByStateElementByWebComponent = new WeakMap<Element, WeakMap<IStateElement, boolean>>();\n\nexport function markWebComponentAsComplete(webComponent: Element, stateElement: IStateElement): void {\n let completeByStateElement = completeByStateElementByWebComponent.get(webComponent);\n if (!completeByStateElement) {\n completeByStateElement = new WeakMap<IStateElement, boolean>();\n completeByStateElementByWebComponent.set(webComponent, completeByStateElement);\n }\n completeByStateElement.set(stateElement, true);\n}\n\nexport function isWebComponentComplete(webComponent: Element, stateElement: IStateElement): boolean {\n const completeByStateElement = completeByStateElementByWebComponent.get(webComponent);\n if (!completeByStateElement) {\n return false;\n }\n return completeByStateElement.get(stateElement) === true;\n}\n","import { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToAttribute(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const attrName = binding.propSegments[1];\n if (element.getAttribute(attrName) !== newValue) {\n element.setAttribute(attrName, newValue as string);\n }\n}\n","\nexport function createEmptyArray<T>(): Readonly<Array<T>> {\n return Object.freeze<Array<T>>([]);\n}\n","import { IFilterInfo } from \"../binding/types.js\";\n\nexport function getFilteredValue(value: any, filters: IFilterInfo[]) {\n let filteredValue = value;\n for(const filter of filters) {\n filteredValue = filter.filterFn(filteredValue);\n }\n return filteredValue;\n}\n","import { createEmptyArray } from \"../createEmptyArray\";\nimport { IBindingInfo } from \"../types\";\nimport { getFilteredValue } from \"./getFilteredValue\";\nimport { IApplyContext } from \"./types\";\n\nconst EMPTY_ARRAY = createEmptyArray<unknown>();\n\nexport function applyChangeToCheckbox(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as HTMLInputElement;\n const elementValue = element.value;\n const elementFilteredValue = getFilteredValue(elementValue, binding.inFilters);\n const normalizedNewValue = Array.isArray(newValue) ? newValue : EMPTY_ARRAY;\n element.checked = normalizedNewValue.includes(elementFilteredValue);\n}\n","import { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToClass(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const className = binding.propSegments[1];\n if (typeof newValue !== 'boolean') {\n raiseError(`Invalid value for class application: expected boolean, got ${typeof newValue}`);\n }\n element.classList.toggle(className, newValue as boolean);\n}","/**\n * command.<methodName>: <commandToken-path> バインディングの適用ハンドラ。\n *\n * subscribe lifecycle:\n * - 同一 binding に同じ token が再評価された場合は no-op。\n * - 異なる token が来た場合は古い subscription を解除し、新しい token に subscribe し直す。\n * 旧解除は新しい binding 妥当性検証(methodName・wcBindable.commands チェック)を\n * 通過した後に行うため、再評価が validation で失敗しても旧購読は温存される(fail-fast)。\n * - element は WeakRef で保持し、subscriber 経由で element を強参照しないようにする。\n * これにより、element が DOM から消えた後に subscriber が token._subscribers に\n * 残っていても element 本体は GC 可能。\n * - emit 時に下記いずれかなら自動で subscription を破棄する(lazy purge):\n * - WeakRef.deref() が undefined(element が既に GC 済み)\n * - element.isConnected が false(DOM から取り外されている)\n *\n * 既知の制約:\n * - emit が来なければ stale subscriber は token に残り続ける(要素が GC されても subscriber 関数自体は残る)。\n * state インスタンスが disconnect されたタイミングで registry ごとクリアされるため、最終的には解放される。\n * element ライフサイクルに直接フックする手段が現状の binding 機構に無いため、能動的な purge は将来課題。\n */\n\nimport { isCommandToken } from \"../command/CommandToken\";\nimport { ICommandToken } from \"../command/types\";\nimport { IWcBindable } from \"../event/types\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\ninterface ICommandSubscription {\n readonly token: ICommandToken;\n readonly unsubscribe: () => void;\n readonly elementRef: WeakRef<Element>;\n}\n\nconst subscribedBindings: WeakMap<IBindingInfo, ICommandSubscription> = new WeakMap();\n\nfunction getWcBindable(element: Element): IWcBindable | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined for command binding.`);\n }\n const bindable = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n return bindable;\n }\n return null;\n}\n\nexport function applyChangeToCommand(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n if (!isCommandToken(newValue)) {\n raiseError(`command binding requires a CommandToken value (use $command.<tokenName> with a name declared in $commandTokens).`);\n }\n const token = newValue as ICommandToken;\n\n const existing = subscribedBindings.get(binding);\n if (existing && existing.token === token) {\n return;\n }\n\n // 新しい binding 妥当性検証は、旧 subscription を解除する前に通す(fail-fast)。\n const element = binding.node as Element;\n const methodName = binding.propSegments[1];\n if (typeof methodName !== \"string\" || methodName.length === 0) {\n raiseError(`command binding requires a method name (e.g., \"command.fetch\").`);\n }\n\n const bindable = getWcBindable(element);\n if (bindable === null) {\n raiseError(`command binding requires a wc-bindable custom element. <${element.tagName.toLowerCase()}> is not wc-bindable.`);\n }\n if (!Array.isArray(bindable.commands) || !bindable.commands.some((c) => c.name === methodName)) {\n raiseError(`Command \"${methodName}\" is not declared in wcBindable.commands of <${element.tagName.toLowerCase()}>.`);\n }\n\n // ここまで来たら旧解除して新 subscribe に切り替える。\n if (existing) {\n existing.unsubscribe();\n subscribedBindings.delete(binding);\n }\n\n const elementRef = new WeakRef(element);\n let unsubscribe: (() => void) | null = null;\n const subscriber = (...args: unknown[]): unknown => {\n const el = elementRef.deref();\n if (!el || !el.isConnected) {\n unsubscribe?.();\n subscribedBindings.delete(binding);\n return undefined;\n }\n const method = (el as unknown as Record<string, unknown>)[methodName];\n if (typeof method !== \"function\") {\n raiseError(`Method \"${methodName}\" is not a function on <${el.tagName.toLowerCase()}>.`);\n }\n return Reflect.apply(method as (...a: unknown[]) => unknown, el, args);\n };\n unsubscribe = token.subscribe(subscriber);\n subscribedBindings.set(binding, { token, unsubscribe, elementRef });\n}\n\nexport const __private__ = {\n subscribedBindings,\n};\n","import { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\n\nconst indexBindingsByContent: WeakMap<IContent, IBindingInfo[]> = new WeakMap();\n\nexport function getIndexBindingsByContent(content: IContent): IBindingInfo[] {\n return indexBindingsByContent.get(content) ?? [];\n}\n\nexport function setIndexBindingsByContent(content: IContent, bindings: IBindingInfo[]): void {\n indexBindingsByContent.set(content, bindings);\n}\n","/* v8 ignore file */\nexport {};\n\ndeclare global {\n interface Set<T> {\n difference(other: Set<T>): Set<T>;\n intersection(other: Set<T>): Set<T>;\n }\n}\n\nif (!Set.prototype.difference) {\n Set.prototype.difference = function <T>(this: Set<T>, other: Set<T>): Set<T> {\n const result = new Set(this);\n for (const elem of other) {\n result.delete(elem);\n }\n return result;\n };\n}\n\nif (!Set.prototype.intersection) {\n Set.prototype.intersection = function <T>(this: Set<T>, other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const elem of other) {\n if (this.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n };\n}\n","\nlet count = 0;\nexport function getUUID(): string {\n return `u${(count++).toString(36)}`;\n}\n","import { getUUID } from \"../getUUID\";\nimport { IListIndex } from \"./types\";\n\nlet version = 0;\n\nclass ListIndex implements IListIndex {\n readonly uuid = getUUID();\n readonly parentListIndex: IListIndex | null;\n readonly position: number;\n readonly length: number;\n\n private _index: number;\n private _version: number;\n private _indexes: number[] | undefined;\n private _listIndexes: WeakRef<IListIndex>[] | undefined;\n\n /**\n * Creates a new ListIndex instance.\n * \n * @param parentListIndex - Parent list index for nested loops, or null for top-level\n * @param index - Current index value in the loop\n */\n constructor(parentListIndex: IListIndex | null, index: number) {\n this.parentListIndex = parentListIndex;\n this.position = parentListIndex ? parentListIndex.position + 1 : 0;\n this.length = this.position + 1;\n this._index = index;\n this._version = version;\n }\n\n /**\n * Gets current index value.\n * \n * @returns Current index number\n */\n get index() {\n return this._index;\n }\n \n /**\n * Sets index value and updates version.\n * \n * @param value - New index value\n */\n set index(value: number) {\n this._index = value;\n this._version = ++version;\n this.indexes[this.position] = value;\n }\n\n /**\n * Gets current version number for change detection.\n * \n * @returns Version number\n */\n get version(): number {\n return this._version;\n }\n\n /**\n * Checks if parent indexes have changed since last access.\n * \n * @returns true if parent has newer version, false otherwise\n */\n get dirty(): boolean {\n if (this.parentListIndex === null) {\n return false;\n } else {\n return this.parentListIndex.dirty || this.parentListIndex.version > this._version;\n }\n }\n\n /**\n * Gets array of all index values from root to current level.\n * Rebuilds array if parent indexes have changed (dirty).\n * \n * @returns Array of index values\n */\n get indexes(): number[] {\n if (this.parentListIndex === null) {\n if (typeof this._indexes === \"undefined\") {\n this._indexes = [this._index];\n }\n } else {\n if (typeof this._indexes === \"undefined\" || this.dirty) {\n this._indexes = [...this.parentListIndex.indexes, this._index];\n this._version = version;\n }\n }\n return this._indexes;\n }\n\n /**\n * Gets array of WeakRef to all ListIndex instances from root to current level.\n * \n * @returns Array of WeakRef<IListIndex>\n */\n get listIndexes(): WeakRef<IListIndex>[] {\n if (this.parentListIndex === null) {\n if (typeof this._listIndexes === \"undefined\") {\n this._listIndexes = [new WeakRef(this)];\n }\n } else {\n if (typeof this._listIndexes === \"undefined\") {\n this._listIndexes = [...this.parentListIndex.listIndexes, new WeakRef(this)];\n }\n }\n return this._listIndexes;\n }\n\n /**\n * Gets variable name for this loop index ($1, $2, etc.).\n * \n * @returns Variable name string\n */\n get varName(): string {\n return `$${this.position + 1}`;\n }\n\n /**\n * Gets ListIndex at specified position in hierarchy.\n * Supports negative indexing from end.\n * \n * @param pos - Position index (0-based, negative for from end)\n * @returns ListIndex at position or null if not found/garbage collected\n */\n at(pos: number): IListIndex | null {\n if (pos >= 0) {\n return this.listIndexes[pos]?.deref() || null;\n } else {\n return this.listIndexes[this.listIndexes.length + pos]?.deref() || null;\n }\n }\n}\n\n/**\n * Factory function to create ListIndex instance.\n * \n * @param parentListIndex - Parent list index for nested loops, or null for top-level\n * @param index - Current index value in the loop\n * @returns New IListIndex instance\n */\nexport function createListIndex(parentListIndex: IListIndex | null, index: number): IListIndex {\n return new ListIndex(parentListIndex, index);\n}\n","import { IListIndex } from \"./types\";\n\nconst listIndexesByList = new WeakMap<readonly unknown[], IListIndex[]>();\n\nexport function getListIndexesByList(list: readonly unknown[]): IListIndex[] | null {\n return listIndexesByList.get(list) || null;\n}\n\nexport function setListIndexesByList(list: readonly unknown[], listIndexes: IListIndex[] | null): void {\n if (listIndexes === null) {\n listIndexesByList.delete(list);\n return;\n }\n listIndexesByList.set(list, listIndexes);\n}","import \"../polyfills\";\nimport { createListIndex } from \"./createListIndex\";\nimport { getListIndexesByList, setListIndexesByList } from \"./listIndexesByList\";\nimport { IListDiff, IListIndex } from \"./types\";\n\nconst listDiffByOldListByNewList = new WeakMap<readonly unknown[], WeakMap<readonly unknown[], IListDiff>>();\n\nconst EMPTY_LIST = Object.freeze([]);\nconst EMPTY_SET = new Set<IListIndex>();\n\nfunction getListDiff(rawOldList: readonly unknown[], rawNewList: readonly unknown[]): IListDiff | null {\n const oldList = (Array.isArray(rawOldList) && rawOldList.length > 0) ? rawOldList : EMPTY_LIST;\n const newList = (Array.isArray(rawNewList) && rawNewList.length > 0) ? rawNewList : EMPTY_LIST;\n let diffByNewList = listDiffByOldListByNewList.get(oldList);\n if (!diffByNewList) {\n return null;\n }\n return diffByNewList.get(newList) || null;\n}\n\nfunction setListDiff(oldList: readonly unknown[], newList: readonly unknown[], diff: IListDiff): void {\n let diffByNewList = listDiffByOldListByNewList.get(oldList);\n if (!diffByNewList) {\n diffByNewList = new WeakMap<readonly unknown[], IListDiff>();\n listDiffByOldListByNewList.set(oldList, diffByNewList);\n }\n diffByNewList.set(newList, diff);\n}\n/**\n * Checks if two lists are identical by comparing length and each element.\n * @param oldList - Previous list to compare\n * @param newList - New list to compare\n * @returns True if lists are identical, false otherwise\n */\nfunction isSameList(oldList: readonly unknown[], newList: readonly unknown[]): boolean {\n if (oldList.length !== newList.length) {\n return false;\n }\n\n for (let i = 0; i < oldList.length; i++) {\n if (oldList[i] !== newList[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Creates or updates list indexes by comparing old and new lists.\n * Optimizes by reusing existing list indexes when values match.\n * @param parentListIndex - Parent list index for nested lists, or null for top-level\n * @param oldList - Previous list (will be normalized to array)\n * @param newList - New list (will be normalized to array)\n * @param oldIndexes - Array of existing list indexes to potentially reuse\n * @returns Array of list indexes for the new list\n */\nexport function createListDiff(\n parentListIndex: IListIndex | null,\n rawOldList: unknown,\n rawNewList: unknown,\n): IListDiff {\n // Normalize inputs to arrays (handles null/undefined)\n const oldList: readonly unknown[] = (Array.isArray(rawOldList) && rawOldList.length > 0) ? rawOldList : EMPTY_LIST;\n const newList: readonly unknown[] = (Array.isArray(rawNewList) && rawNewList.length > 0) ? rawNewList : EMPTY_LIST;\n const cachedDiff = getListDiff(oldList, newList);\n if (cachedDiff) {\n return cachedDiff;\n }\n const oldIndexes = getListIndexesByList(oldList) || [];\n let retValue: IListDiff | undefined;\n try {\n // Early return for empty list\n if (newList.length === 0) {\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: [] as IListIndex[],\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: new Set<IListIndex>(oldIndexes),\n addIndexSet: EMPTY_SET,\n };\n }\n // If old list was empty, create all new indexes\n let newIndexes: IListIndex[] | null = getListIndexesByList(newList);\n if (oldList.length === 0) {\n if (newIndexes === null) {\n newIndexes = [];\n for(let i = 0; i < newList.length; i++) {\n const newListIndex = createListIndex(parentListIndex, i);\n newIndexes.push(newListIndex);\n }\n }\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: EMPTY_SET,\n addIndexSet: new Set<IListIndex>(newIndexes),\n };\n }\n // If lists are identical, return existing indexes unchanged (optimization)\n if (isSameList(oldList, newList)) {\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: oldIndexes,\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: EMPTY_SET,\n addIndexSet: EMPTY_SET,\n };\n }\n // Use index-based map for efficiency\n // Supports duplicate values by storing array of indexes\n const indexByValue = new Map<unknown, number[]>();\n for(let i = 0; i < oldList.length; i++) {\n const val = oldList[i];\n let indexes = indexByValue.get(val);\n if (!indexes) {\n indexes = [];\n indexByValue.set(val, indexes);\n }\n indexes.push(i);\n }\n if (newIndexes !== null) {\n return calcDiffIndexes(oldList, newList, oldIndexes, newIndexes, indexByValue);\n }\n newIndexes = [];\n\n // Build new indexes array by matching values with old list\n const changeIndexSet: Set<IListIndex> = new Set();\n const addIndexSet: Set<IListIndex> = new Set();\n for(let i = 0; i < newList.length; i++) {\n const newValue = newList[i];\n const existingIndexes = indexByValue.get(newValue);\n const oldIndex = existingIndexes && existingIndexes.length > 0 ? existingIndexes.shift() : undefined;\n \n if (typeof oldIndex === \"undefined\") {\n // New element\n const newListIndex = createListIndex(parentListIndex, i);\n newIndexes.push(newListIndex);\n addIndexSet.add(newListIndex);\n } else {\n // Reuse existing element\n const existingListIndex = oldIndexes[oldIndex];\n // Update index if position changed\n if (existingListIndex.index !== i) {\n existingListIndex.index = i;\n changeIndexSet.add(existingListIndex);\n }\n newIndexes.push(existingListIndex);\n }\n }\n \n const deleteIndexSet: Set<IListIndex> = (new Set(oldIndexes)).difference(new Set(newIndexes));\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: changeIndexSet,\n deleteIndexSet: deleteIndexSet,\n addIndexSet: addIndexSet,\n };\n } finally {\n if (typeof retValue !== \"undefined\") {\n setListDiff(oldList, newList, retValue);\n setListIndexesByList(newList, retValue.newIndexes);\n }\n }\n}\n\nfunction calcDiffIndexes(\n oldList: readonly unknown[],\n newList: readonly unknown[],\n oldIndexes: IListIndex[],\n newIndexes: IListIndex[],\n indexByValue: Map<unknown, number[]>\n): IListDiff {\n const newIndexSet: Set<IListIndex> = new Set(newIndexes);\n const oldIndexSet: Set<IListIndex> = new Set(oldIndexes);\n const changeIndexSet: Set<IListIndex> = new Set();\n const addIndexSet: Set<IListIndex> = newIndexSet.difference(oldIndexSet);\n const deleteIndexSet: Set<IListIndex> = oldIndexSet.difference(newIndexSet);\n for(let i = 0; i < newList.length; i++) {\n const newValue = newList[i];\n const existingIndexes = indexByValue.get(newValue);\n const oldIndex = existingIndexes && existingIndexes.length > 0 ? existingIndexes.shift() : undefined;\n if (typeof oldIndex !== \"undefined\") {\n const existingListIndex = oldIndexes[oldIndex];\n if (existingListIndex.index !== i) {\n // 位置が違うことだけを記録 \n changeIndexSet.add(existingListIndex);\n }\n }\n }\n return {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: changeIndexSet,\n deleteIndexSet: deleteIndexSet,\n addIndexSet: addIndexSet,\n };\n}","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { IBindingInfo } from \"./types\";\n\nconst bindingSetByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, Set<IBindingInfo>> = new WeakMap();\n\nexport function getBindingSetByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): Set<IBindingInfo> {\n let bindingSet: Set<IBindingInfo> | null = null;\n bindingSet = bindingSetByAbsoluteStateAddress.get(absoluteStateAddress) || null;\n if (bindingSet === null) {\n bindingSet = new Set();\n bindingSetByAbsoluteStateAddress.set(absoluteStateAddress, bindingSet);\n }\n return bindingSet;\n}\n\nexport function addBindingByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, binding: IBindingInfo): void {\n const bindingSet = getBindingSetByAbsoluteStateAddress(absoluteStateAddress);\n bindingSet.add(binding);\n}\n\nexport function clearBindingSetByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): void {\n bindingSetByAbsoluteStateAddress.delete(absoluteStateAddress);\n}\n\nexport function removeBindingByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, binding: IBindingInfo): void {\n const bindingSet = getBindingSetByAbsoluteStateAddress(absoluteStateAddress);\n bindingSet.delete(binding);\n}","import { createStateAddress } from \"../address/StateAddress\";\nimport { IStateAddress } from \"../address/types\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\n\nconst stateAddressByBindingInfo: WeakMap<IBindingInfo, IStateAddress> = new WeakMap();\n\nexport function getStateAddressByBindingInfo(bindingInfo: IBindingInfo) {\n let stateAddress: IStateAddress | null = null;\n stateAddress = stateAddressByBindingInfo.get(bindingInfo) || null;\n if (stateAddress !== null) {\n return stateAddress;\n }\n if (bindingInfo.statePathInfo.wildcardCount > 0) {\n const listIndex = getListIndexByBindingInfo(bindingInfo);\n if (listIndex === null) {\n raiseError(`Cannot resolve state address for binding with wildcard statePathName \"${bindingInfo.statePathName}\" because list index is null.`);\n }\n stateAddress = createStateAddress(bindingInfo.statePathInfo, listIndex);\n } else {\n stateAddress = createStateAddress(bindingInfo.statePathInfo, null);\n }\n stateAddressByBindingInfo.set(bindingInfo, stateAddress);\n return stateAddress;\n}\n\n// call for change loopContext\nexport function clearStateAddressByBindingInfo(bindingInfo: IBindingInfo) {\n stateAddressByBindingInfo.delete(bindingInfo);\n}","import { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\n\nconst bindingsByContent: WeakMap<IContent, IBindingInfo[]> = new WeakMap();\n\nexport function getBindingsByContent(content: IContent): IBindingInfo[] {\n return bindingsByContent.get(content) ?? [];\n}\n\nexport function setBindingsByContent(content: IContent, bindings: IBindingInfo[]): void {\n bindingsByContent.set(content, bindings);\n}\n","import { IContent } from \"../structural/types\";\n\nconst nodesByContent: WeakMap<IContent, Node[]> = new WeakMap();\n\nexport function getNodesByContent(content: IContent): Node[] {\n return nodesByContent.get(content) ?? [];\n}\n\nexport function setNodesByContent(content: IContent, nodes: Node[]): void {\n nodesByContent.set(content, nodes);\n}\n","import { setLoopContextByNode } from \"../list/loopContextByNode\";\nimport { ILoopContext } from \"../list/types\";\nimport { IContent } from \"../structural/types\";\nimport { getNodesByContent } from \"./nodesByContent\";\n\nexport function bindLoopContextToContent(content: IContent, loopContext: ILoopContext | null): void {\n const nodes = getNodesByContent(content);\n for(const node of nodes) {\n setLoopContextByNode(node, loopContext);\n }\n}\n\nexport function unbindLoopContextToContent(content: IContent): void {\n const nodes = getNodesByContent(content);\n for(const node of nodes) {\n setLoopContextByNode(node, null);\n }\n}\n","import { applyChange } from \"../apply/applyChange\";\nimport { IApplyContext } from \"../apply/types\";\nimport { clearAbsoluteStateAddressByBinding, getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress, removeBindingByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { clearStateAddressByBindingInfo } from \"../binding/getStateAddressByBindingInfo\";\nimport { getBindingsByContent } from \"../bindings/bindingsByContent\";\nimport { bindLoopContextToContent, unbindLoopContextToContent } from \"../bindings/bindLoopContextToContent\";\nimport { ILoopContext } from \"../list/types\";\nimport { IContent } from \"./types\";\n\nexport function activateContent(\n content: IContent, \n loopContext: ILoopContext | null,\n context: IApplyContext,\n): void {\n bindLoopContextToContent(content, loopContext);\n const bindings = getBindingsByContent(content);\n for(const binding of bindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n applyChange(binding, context);\n }\n}\n\nexport function deactivateContent(\n content: IContent\n): void {\n if (!content.mounted) {\n return;\n }\n const bindings = getBindingsByContent(content);\n for(const binding of bindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n removeBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n clearAbsoluteStateAddressByBinding(binding);\n clearStateAddressByBindingInfo(binding);\n }\n unbindLoopContextToContent(content);\n}\n\n","\nexport function createEmptySet<T>(): Readonly<Set<T>> {\n return Object.freeze(new Set<T>());\n}\n","import { createEmptySet } from \"../createEmptySet\";\nimport { IContent } from \"./types\";\n\nconst contentSetByNode = new WeakMap<Node, Set<IContent>>();\n\nconst EMPTY_SET = createEmptySet<IContent>();\n\nexport function setContentByNode(node: Node, content: IContent): void {\n const contents = contentSetByNode.get(node);\n if (contents) {\n contents.add(content);\n } else {\n contentSetByNode.set(node, new Set([content]));\n }\n}\n\nexport function getContentSetByNode(node: Node): Readonly<Set<IContent>> {\n const contents = contentSetByNode.get(node);\n if (typeof contents !== \"undefined\") {\n return contents;\n }\n return EMPTY_SET;\n}\n\nexport function deleteContentByNode(node: Node, content: IContent): void {\n const contents = contentSetByNode.get(node);\n if (contents) {\n contents.delete(content);\n if (contents.size === 0) {\n contentSetByNode.delete(node);\n }\n }\n}","import { clearAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding.js\";\nimport { clearStateAddressByBindingInfo } from \"../binding/getStateAddressByBindingInfo.js\";\nimport { getBindingsByContent, setBindingsByContent } from \"../bindings/bindingsByContent.js\";\nimport { setIndexBindingsByContent } from \"../bindings/indexBindingsByContent.js\";\nimport { initializeBindingsByFragment } from \"../bindings/initializeBindings.js\";\nimport { setNodesByContent } from \"../bindings/nodesByContent.js\";\nimport { INDEX_BY_INDEX_NAME } from \"../define.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IBindingInfo } from \"../types.js\";\nimport { getContentSetByNode, setContentByNode } from \"./contentsByNode.js\";\nimport { getFragmentInfoByUUID } from \"./fragmentInfoByUUID.js\";\nimport { IContent } from \"./types.js\";\n\nconst recursiveBindingTypes = new Set(['if', 'elseif', 'else', 'for']);\n\nclass Content implements IContent {\n private _content: DocumentFragment;\n private _childNodeArray: Node[] = [];\n private _firstNode: Node | null = null;\n private _lastNode: Node | null = null;\n private _mounted: boolean = false;\n constructor(content: DocumentFragment) {\n this._content = content;\n this._childNodeArray = Array.from(this._content.childNodes);\n this._firstNode = this._childNodeArray.length > 0 ? this._childNodeArray[0] : null;\n this._lastNode = this._childNodeArray.length > 0 ? this._childNodeArray[this._childNodeArray.length - 1] : null;\n }\n\n get firstNode(): Node | null {\n return this._firstNode;\n }\n\n get lastNode(): Node | null {\n return this._lastNode;\n }\n\n get mounted(): boolean {\n return this._mounted;\n }\n\n appendTo(targetNode: Node): void {\n for(const node of this._childNodeArray) {\n targetNode.appendChild(node);\n }\n this._mounted = true;\n }\n\n mountAfter(targetNode: Node): void {\n const parentNode = targetNode.parentNode;\n const nextSibling = targetNode.nextSibling;\n if (parentNode) {\n for(const node of this._childNodeArray) {\n parentNode.insertBefore(node, nextSibling);\n }\n }\n this._mounted = true;\n }\n\n unmount(): void {\n for(const node of this._childNodeArray) {\n if (node.parentNode !== null) {\n node.parentNode.removeChild(node);\n }\n }\n const bindings = getBindingsByContent(this);\n for(const binding of bindings) {\n if (recursiveBindingTypes.has(binding.bindingType)) {\n const contents = getContentSetByNode(binding.node);\n for (const content of contents) {\n content.unmount();\n }\n }\n clearStateAddressByBindingInfo(binding);\n clearAbsoluteStateAddressByBinding(binding);\n }\n this._mounted = false;\n }\n}\n\n/**\n * SSR ハイドレーション用: 既存の DOM ノード配列から Content を生成する。\n * テンプレートからの clone ではなく、SSR で描画済みのノードをそのまま使う。\n */\nexport function createContentFromNodes(\n nodes: Node[],\n): IContent {\n const fragment = document.createDocumentFragment();\n // ノードを fragment に移動せず、参照だけ持つ Content を作る\n const content = new Content(fragment);\n // Content の内部状態を直接設定\n (content as any)._childNodeArray = nodes;\n (content as any)._firstNode = nodes.length > 0 ? nodes[0] : null;\n (content as any)._lastNode = nodes.length > 0 ? nodes[nodes.length - 1] : null;\n (content as any)._mounted = true; // SSR で既にマウント済み\n return content;\n}\n\nexport function createContent(\n bindingInfo: IBindingInfo, \n): IContent {\n if (typeof bindingInfo.uuid === 'undefined' || bindingInfo.uuid === null) {\n raiseError(`BindingInfo.uuid is null.`);\n }\n const fragmentInfo = getFragmentInfoByUUID(bindingInfo.uuid);\n if (!fragmentInfo) {\n raiseError(`Fragment with UUID \"${bindingInfo.uuid}\" not found.`);\n }\n const cloneFragment = document.importNode(fragmentInfo.fragment, true);\n const initialInfo = initializeBindingsByFragment(cloneFragment, fragmentInfo.nodeInfos);\n const content = new Content(cloneFragment);\n setBindingsByContent(content, initialInfo.bindingInfos);\n const indexBindings: IBindingInfo[] = [];\n for(const binding of initialInfo.bindingInfos) {\n if (binding.statePathName in INDEX_BY_INDEX_NAME) {\n indexBindings.push(binding);\n }\n }\n setIndexBindingsByContent(content, indexBindings);\n setNodesByContent(content, initialInfo.nodes);\n setContentByNode(bindingInfo.node, content);\n return content;\n}\n","import { getPathInfo } from \"../address/PathInfo\";\nimport { createStateAddress } from \"../address/StateAddress\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { getIndexBindingsByContent } from \"../bindings/indexBindingsByContent\";\nimport { inSsr } from \"../config\";\nimport { WILDCARD } from \"../define\";\nimport { createListDiff } from \"../list/createListDiff\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { getLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { IListIndex } from \"../list/types\";\nimport { raiseError } from \"../raiseError\";\nimport { activateContent, deactivateContent } from \"../structural/activateContent\";\nimport { createContent } from \"../structural/createContent\";\nimport { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { applyChange } from \"./applyChange\";\nimport { setRootNodeByFragment } from \"./rootNodeByFragment\";\nimport { IApplyContext } from \"./types\";\n\nconst lastNodeByNode: WeakMap<Node, Node> = new WeakMap();\nconst contentByListIndexByNode: WeakMap<Node, WeakMap<IListIndex, IContent>> = new WeakMap();\nconst pooledContentsByNode: WeakMap<Node, IContent[]> = new WeakMap();\nconst isOnlyNodeInParentContentByNode: WeakMap<Node, boolean> = new WeakMap();\n\n// テスト用ヘルパー(内部状態の操作)\nexport function __test_setContentByListIndex(node: Node, index: IListIndex, content: IContent | null): void {\n setContent(node, index, content);\n}\n\nexport function __test_deleteLastNodeByNode(node: Node): void {\n lastNodeByNode.delete(node);\n}\n\n// SSR ハイドレーション用: Content を ListIndex に登録する\nexport function hydrateSetContent(node: Node, index: IListIndex, content: IContent): void {\n setContent(node, index, content);\n}\n\nexport function hydrateSetLastNode(node: Node, lastNode: Node): void {\n lastNodeByNode.set(node, lastNode);\n}\n\nexport function __test_deleteContentByNode(node: Node): void {\n contentByListIndexByNode.delete(node);\n}\n\nfunction getPooledContents(bindingInfo: IBindingInfo): IContent[] {\n return pooledContentsByNode.get(bindingInfo.node) || [];\n}\n\nfunction setPooledContent(bindingInfo: IBindingInfo, content: IContent): void {\n const contents = pooledContentsByNode.get(bindingInfo.node);\n if (typeof contents === 'undefined') {\n pooledContentsByNode.set(bindingInfo.node, [content]);\n } else {\n contents.push(content);\n }\n}\n\nfunction isOnlyNodeInParentContent(firstNode: Node, lastNode: Node): boolean {\n let prevCheckNode = firstNode.previousSibling;\n let nextCheckNode = lastNode.nextSibling;\n let onlyNode = true;\n while(prevCheckNode !== null) {\n if (prevCheckNode.nodeType === Node.ELEMENT_NODE \n || (prevCheckNode.nodeType === Node.TEXT_NODE && (prevCheckNode.textContent?.trim() ?? '') !== '')) {\n onlyNode = false;\n break;\n }\n prevCheckNode = prevCheckNode.previousSibling;\n }\n while(nextCheckNode !== null) {\n if (nextCheckNode.nodeType === Node.ELEMENT_NODE \n || (nextCheckNode.nodeType === Node.TEXT_NODE && (nextCheckNode.textContent?.trim() ?? '') !== '')) {\n onlyNode = false;\n break;\n }\n nextCheckNode = nextCheckNode.nextSibling;\n }\n return onlyNode;\n}\n\nfunction getContent(node: Node, listIndex: IListIndex): IContent | null {\n let contentByListIndex = contentByListIndexByNode.get(node);\n if (typeof contentByListIndex === 'undefined') {\n return null;\n }\n const content = contentByListIndex.get(listIndex);\n return typeof content === 'undefined' ? null : content;\n}\n\nfunction setContent(node: Node, listIndex: IListIndex, content: IContent | null): void {\n let contentByListIndex = contentByListIndexByNode.get(node);\n if (typeof contentByListIndex === 'undefined') {\n if (content === null) {\n return;\n }\n contentByListIndex = new WeakMap<IListIndex, IContent>();\n contentByListIndexByNode.set(node, contentByListIndex);\n }\n if (content === null) {\n contentByListIndex.delete(listIndex);\n } else {\n contentByListIndex.set(listIndex, content);\n }\n}\n\nexport function applyChangeToFor(\n bindingInfo: IBindingInfo, \n context: IApplyContext,\n newValue: unknown, \n): void {\n const listPathInfo = bindingInfo.statePathInfo;\n const listIndex = getListIndexByBindingInfo(bindingInfo);\n const absAddress = getAbsoluteStateAddressByBinding(bindingInfo);\n const lastValue = getLastListValueByAbsoluteStateAddress(absAddress);\n const diff = createListDiff(listIndex, lastValue, newValue);\n context.newListValueByAbsAddress.set(absAddress, Array.isArray(newValue) ? newValue : []);\n\n if (Array.isArray(lastValue) \n && lastValue.length === diff.deleteIndexSet.size \n && diff.deleteIndexSet.size > 0\n && bindingInfo.node.parentNode !== null\n ) {\n let isOnlyNode = isOnlyNodeInParentContentByNode.get(bindingInfo.node);\n if (typeof isOnlyNode === 'undefined') {\n const lastNode = lastNodeByNode.get(bindingInfo.node) || bindingInfo.node;\n isOnlyNode = isOnlyNodeInParentContent(bindingInfo.node, lastNode);\n isOnlyNodeInParentContentByNode.set(bindingInfo.node, isOnlyNode);\n }\n if (isOnlyNode) {\n const parentNode = bindingInfo.node.parentNode;\n parentNode.textContent = '';\n parentNode.appendChild(bindingInfo.node);\n }\n }\n for(const deleteIndex of diff.deleteIndexSet) {\n const content = getContent(bindingInfo.node, deleteIndex);\n if (content !== null) {\n deactivateContent(content);\n content.unmount();\n setPooledContent(bindingInfo, content);\n setContent(bindingInfo.node, deleteIndex, null);\n }\n }\n\n let lastNode = bindingInfo.node;\n const elementPathInfo = getPathInfo(listPathInfo.path + '.' + WILDCARD);\n const loopContextStack = context.stateElement.loopContextStack;\n let fragment: DocumentFragment | null = null;\n if (diff.newIndexes.length == diff.addIndexSet.size \n && diff.newIndexes.length > 0\n && lastNode.isConnected\n ) {\n // 全部追加の場合はまとめて処理\n fragment = document.createDocumentFragment();\n setRootNodeByFragment(fragment, context.rootNode);\n }\n const ssrMode = inSsr();\n const uuid = bindingInfo.uuid ?? '';\n for(const index of diff.newIndexes) {\n let content: IContent | undefined;\n // add\n if (diff.addIndexSet.has(index)) {\n const stateAddress = createStateAddress(elementPathInfo, index);\n loopContextStack.createLoopContext(stateAddress, (loopContext) => {\n const pooledContents = getPooledContents(bindingInfo);\n content = pooledContents.pop();\n if (typeof content === 'undefined') {\n content = createContent(bindingInfo);\n }\n // コンテント活性化の前にDOMツリーに追加しておく必要がある\n if (fragment !== null) {\n if (ssrMode) {\n fragment.appendChild(document.createComment(`@@wcs-for-start:${uuid}:${listPathInfo.path}:${index.index}`));\n }\n content.appendTo(fragment);\n if (ssrMode) {\n fragment.appendChild(document.createComment(`@@wcs-for-end:${uuid}:${listPathInfo.path}:${index.index}`));\n }\n } else {\n // Update lastNode for next iteration to ensure correct order\n // Ensure content is in correct position (e.g. if previous siblings were deleted/moved)\n if (lastNode.nextSibling !== content.firstNode) {\n if (ssrMode) {\n const startComment = document.createComment(`@@wcs-for-start:${uuid}:${listPathInfo.path}:${index.index}`);\n lastNode.parentNode!.insertBefore(startComment, lastNode.nextSibling);\n lastNode = startComment;\n }\n content.mountAfter(lastNode);\n }\n if (ssrMode) {\n const endComment = document.createComment(`@@wcs-for-end:${uuid}:${listPathInfo.path}:${index.index}`);\n const afterNode = content.lastNode ?? lastNode;\n afterNode.parentNode!.insertBefore(endComment, afterNode.nextSibling);\n }\n }\n // コンテントを活性化\n activateContent(content, loopContext, context);\n });\n if (typeof content === 'undefined') {\n raiseError(`Content not found for ListIndex: ${index.index} at path \"${listPathInfo.path}\"`);\n }\n } else {\n content = getContent(bindingInfo.node, index)!;\n if (diff.changeIndexSet.has(index)) {\n // change\n const indexBindings = getIndexBindingsByContent(content);\n for(const indexBinding of indexBindings) {\n applyChange(indexBinding, context);\n }\n }\n // Update lastNode for next iteration to ensure correct order\n // Ensure content is in correct position (e.g. if previous siblings were deleted/moved)\n if (content === null) {\n raiseError(`Content not found for ListIndex: ${index.index} at path \"${listPathInfo.path}\"`);\n }\n if (lastNode.nextSibling !== content.firstNode) {\n content.mountAfter(lastNode);\n }\n }\n lastNode = content.lastNode || lastNode;\n setContent(bindingInfo.node, index, content);\n }\n lastNodeByNode.set(bindingInfo.node, lastNode);\n if (fragment !== null) {\n // Mount all at once\n bindingInfo.node.parentNode!.insertBefore(fragment, bindingInfo.node.nextSibling);\n setRootNodeByFragment(fragment, null);\n }\n}\n","import { config, inSsr } from \"../config\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { activateContent, deactivateContent } from \"../structural/activateContent\";\nimport { getContentSetByNode } from \"../structural/contentsByNode\";\nimport { createContent } from \"../structural/createContent\";\nimport { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nconst lastConnectedByNode: WeakMap<Node, boolean> = new WeakMap();\n\nfunction bindingInfoText(bindingInfo: IBindingInfo): string {\n return `${bindingInfo.bindingType} ${bindingInfo.statePathName} ${bindingInfo.outFilters.map(f => f.filterName).join('|')} ${bindingInfo.node.isConnected ? '(connected)' : '(disconnected)'}`;\n}\n\nexport function applyChangeToIf(\n bindingInfo: IBindingInfo,\n context: IApplyContext,\n rawNewValue: unknown,\n): void {\n const currentConnected = bindingInfo.node.isConnected;\n const newValue = Boolean(rawNewValue);\n let content: IContent | undefined;\n const contents = getContentSetByNode(bindingInfo.node);\n if (contents.size === 0) {\n content = createContent(bindingInfo);\n } else {\n content = contents.values().next().value!;\n }\n const ssrMode = inSsr();\n const uuid = bindingInfo.uuid ?? '';\n const keyword = bindingInfo.bindingType; // if, elseif, else\n try {\n if (!newValue) {\n if (config.debug) {\n console.log(`unmount if content : ${bindingInfoText(bindingInfo)}`);\n }\n deactivateContent(content);\n content.unmount();\n }\n if (newValue) {\n if (config.debug) {\n console.log(`mount if content : ${bindingInfoText(bindingInfo)}`);\n }\n if (ssrMode) {\n const startComment = document.createComment(`@@wcs-${keyword}-start:${uuid}:${bindingInfo.statePathName}`);\n bindingInfo.node.parentNode!.insertBefore(startComment, bindingInfo.node.nextSibling);\n content.mountAfter(startComment);\n const endComment = document.createComment(`@@wcs-${keyword}-end:${uuid}:${bindingInfo.statePathName}`);\n const afterNode = content.lastNode ?? startComment;\n afterNode.parentNode!.insertBefore(endComment, afterNode.nextSibling);\n } else {\n content.mountAfter(bindingInfo.node);\n }\n const loopContext = getLoopContextByNode(bindingInfo.node);\n activateContent(content, loopContext, context);\n }\n } finally {\n lastConnectedByNode.set(bindingInfo.node, currentConnected);\n }\n}\n\n","import { getCustomElement } from \"../getCustomElement\";\nimport { IWcBindable } from \"./types\";\n\n/**\n * 要素 `element` の `propName` プロパティ書き込みに対して、\n * wc-bindable inputs の `attribute` ミラー先属性名を返す。\n *\n * - wc-bindable でないネイティブ要素や、inputs 未宣言、attribute フィールド無しは null\n * - inputs に同名宣言があっても `attribute` を持たないものはミラー対象外\n *\n * 戻り値の string がそのまま `setAttribute(name, value)` の name となる。\n */\nexport function getInputAttributeMirror(element: Element, propName: string): string | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n if (typeof customClass === \"undefined\") {\n return null;\n }\n const bindable = customClass.wcBindable;\n if (bindable?.protocol !== \"wc-bindable\" || bindable?.version !== 1) {\n return null;\n }\n const inputs = bindable.inputs;\n if (!Array.isArray(inputs)) {\n return null;\n }\n for (const input of inputs) {\n if (input.name === propName && typeof input.attribute === \"string\" && input.attribute.length > 0) {\n return input.attribute;\n }\n }\n return null;\n}\n\n/**\n * mirror 属性値の表現を決める。\n * - null / undefined → 属性削除\n * - object / array → JSON.stringify (失敗時は String(value))\n * - その他 (string / number / boolean / bigint) → String(value)\n */\nexport function applyMirrorAttribute(element: Element, attributeName: string, value: unknown): void {\n if (value === null || typeof value === \"undefined\") {\n element.removeAttribute(attributeName);\n return;\n }\n let formatted: string;\n if (typeof value === \"object\") {\n try {\n formatted = JSON.stringify(value);\n } catch {\n formatted = String(value);\n }\n } else {\n formatted = String(value);\n }\n element.setAttribute(attributeName, formatted);\n}\n","/**\n * SSR 時に HTML 属性で表現できないプロパティバインディングを蓄積するストア。\n * ハイドレーション時にクライアント側で復元する。\n */\n\nexport interface ISsrPropertyEntry {\n propName: string;\n value: unknown;\n}\n\n// node → プロパティエントリのリスト\nconst store: WeakMap<Node, ISsrPropertyEntry[]> = new WeakMap();\n\nexport function addSsrProperty(node: Node, propName: string, value: unknown): void {\n let entries = store.get(node);\n if (!entries) {\n entries = [];\n store.set(node, entries);\n }\n // 同じプロパティの既存エントリは上書き\n const existing = entries.find(e => e.propName === propName);\n if (existing) {\n existing.value = value;\n } else {\n entries.push({ propName, value });\n }\n}\n\nexport function getSsrProperties(node: Node): ISsrPropertyEntry[] {\n return store.get(node) ?? [];\n}\n\nexport function getAllSsrPropertyNodes(): Node[] {\n // WeakMap は列挙不可なので、別途トラッキングが必要\n return Array.from(trackedNodes);\n}\n\nconst trackedNodes: Set<Node> = new Set();\n\nexport function trackSsrPropertyNode(node: Node): void {\n trackedNodes.add(node);\n}\n\nexport function clearSsrPropertyStore(): void {\n trackedNodes.clear();\n}\n","import { config, inSsr } from \"../config\";\nimport { applyMirrorAttribute, getInputAttributeMirror } from \"../event/getInputAttributeMirror\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\nimport { addSsrProperty, trackSsrPropertyNode } from \"./ssrPropertyStore\";\n\n// SSR 時に HTML 属性で代替可能なプロパティ\n// これら以外のプロパティは ssrPropertyStore に蓄積してハイドレーション時に復元\nconst SSR_ATTR_PROPS: Record<string, (element: Element, value: unknown) => void> = {\n value(element, value) {\n if (element.tagName === 'TEXTAREA') {\n element.textContent = String(value ?? '');\n } else {\n element.setAttribute('value', String(value ?? ''));\n }\n },\n checked(element, value) {\n if (value) element.setAttribute('checked', '');\n else element.removeAttribute('checked');\n },\n selected(element, value) {\n if (value) element.setAttribute('selected', '');\n else element.removeAttribute('selected');\n },\n disabled(element, value) {\n if (value) element.setAttribute('disabled', '');\n else element.removeAttribute('disabled');\n },\n selectedIndex(element, value) {\n const options = element.querySelectorAll('option');\n const idx = Number(value);\n for (let i = 0; i < options.length; i++) {\n if (i === idx) options[i].setAttribute('selected', '');\n else options[i].removeAttribute('selected');\n }\n },\n};\n\nexport function applyChangeToProperty(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n // undefined は「状態が値を持たない=無意見」であり、書き込み自体をスキップして\n // 要素側の既定値を生かす。書き込んでしまうと setter の文字列化で\n // \"undefined\" 属性や removeAttribute が走り要素が壊れる (spread で未初期化\n // slot を配線したときに顕在化)。明示的なクリアは null で表現する。\n // mirror 属性 (applyMirrorAttribute) の「undefined → 属性削除」と同じ語彙。\n if (typeof newValue === \"undefined\") {\n if (config.debug) {\n console.debug(`Skipped property write: state value is undefined.`, {\n element: binding.node,\n propSegments: binding.propSegments,\n statePathName: binding.statePathName,\n });\n }\n return;\n }\n const element = binding.node as Element;\n const propSegments = binding.propSegments;\n if (propSegments.length === 1) {\n const firstSegment = propSegments[0];\n if ((element as any)[firstSegment] !== newValue) {\n let propertyWriteSucceeded = false;\n try {\n (element as any)[firstSegment] = newValue;\n propertyWriteSucceeded = true;\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to set property '${firstSegment}' on element.`, {\n element,\n newValue,\n error\n });\n }\n }\n // wc-bindable inputs[].attribute ミラー。プロパティ書き込みが成功したときだけ\n // 属性へ反映する。setter が値を拒否した場合に属性だけ進んでしまうと\n // property と attribute が乖離し、attributeChangedCallback や CSS セレクタが\n // 実際のプロパティ値と矛盾した状態で発火するため、ここでガードする。\n if (propertyWriteSucceeded) {\n const mirrorAttr = getInputAttributeMirror(element, firstSegment);\n if (mirrorAttr !== null) {\n try {\n applyMirrorAttribute(element, mirrorAttr, newValue);\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to mirror attribute '${mirrorAttr}' on element.`, {\n element,\n newValue,\n error\n });\n }\n }\n }\n }\n }\n if (inSsr()) {\n const attrHandler = SSR_ATTR_PROPS[firstSegment];\n if (attrHandler) {\n // 属性で代替可能 → HTML 属性に反映\n attrHandler(element, newValue);\n } else {\n // 属性で代替不可 → ハイドレーション用ストアに蓄積\n addSsrProperty(element, firstSegment, newValue);\n trackSsrPropertyNode(element);\n }\n }\n return;\n }\n const firstSegment = propSegments[0];\n let subObject = (element as any)[firstSegment];\n for (let i = 1; i < propSegments.length - 1; i++) {\n const segment = propSegments[i];\n if (subObject == null) {\n return;\n }\n subObject = subObject[segment];\n }\n const oldValue = subObject[propSegments[propSegments.length - 1]];\n if (oldValue !== newValue) {\n if (Object.isFrozen(subObject)) {\n if (config.debug) {\n console.warn(`Attempting to set property on frozen object.`, {\n element,\n propSegments,\n oldValue,\n newValue\n });\n }\n return;\n }\n try {\n subObject[propSegments[propSegments.length - 1]] = newValue;\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to set property on sub-object.`, {\n element,\n propSegments,\n oldValue,\n newValue,\n error\n });\n }\n }\n }\n // サブオブジェクトプロパティ (e.g. style.xxx) は属性に反映済みなのでストア不要\n}\n","import { IBindingInfo } from \"../types\";\nimport { getFilteredValue } from \"./getFilteredValue\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToRadio(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as HTMLInputElement;\n const elementValue = element.value;\n const elementFilteredValue = getFilteredValue(elementValue, binding.inFilters);\n element.checked = newValue === elementFilteredValue;\n}\n","import { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToStyle(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const styleName = binding.propSegments[1];\n const style = (binding.node as HTMLElement).style;\n const currentValue = (style as any)[styleName];\n if (currentValue !== newValue) {\n (style as any)[styleName] = newValue;\n }\n}\n","import { inSsr } from \"../config\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { IApplyContext } from \"./types\";\n\nconst ssrWrappedNodes: WeakSet<Node> = new WeakSet();\n\nexport function applyChangeToText(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n if (binding.replaceNode.nodeValue !== newValue) {\n binding.replaceNode.nodeValue = newValue as string;\n }\n // SSR モード時: テキストノードの前後にコメントを挿入して境界を明示\n if (inSsr() && !ssrWrappedNodes.has(binding.replaceNode)) {\n ssrWrappedNodes.add(binding.replaceNode);\n const parentNode = binding.replaceNode.parentNode;\n if (parentNode) {\n const path = binding.statePathName;\n const startComment = document.createComment(`@@wcs-text-start:${path}`);\n const endComment = document.createComment(`@@wcs-text-end:${path}`);\n parentNode.insertBefore(startComment, binding.replaceNode);\n parentNode.insertBefore(endComment, binding.replaceNode.nextSibling);\n }\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToWebComponent(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const propSegments = binding.propSegments;\n if (propSegments.length <= 1) {\n raiseError(`Invalid propSegments for web component binding: ${propSegments.join(\".\")}`);\n }\n const [ firstSegment, ...restSegments ] = propSegments;\n const subObject = (element as any)[firstSegment] as Record<string, unknown> | undefined;\n if (typeof subObject === \"undefined\") {\n raiseError(`Property \"${firstSegment}\" not found on web component.`);\n }\n subObject[restSegments.join(\".\")] = newValue;\n}\n","import { INDEX_BY_INDEX_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { ILoopContext } from \"./types\";\n\n// indexName ... $1, $2, ...\nexport function getIndexValueByLoopContext(loopContext: ILoopContext, indexName: string): number | null {\n if (loopContext.listIndex === null) {\n raiseError(`ListIndex not found for loopContext:`);\n }\n const indexPos = INDEX_BY_INDEX_NAME[indexName];\n if (typeof indexPos === \"undefined\") {\n raiseError(`Invalid index name: ${indexName}`);\n }\n const listIndex = loopContext.listIndex.at(indexPos);\n if (listIndex === null) {\n raiseError(`Index not found at position ${indexPos} for loopContext:`);\n }\n return listIndex.index;\n}","import { getStateAddressByBindingInfo } from \"../binding/getStateAddressByBindingInfo\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { INDEX_BY_INDEX_NAME } from \"../define\";\nimport { getIndexValueByLoopContext } from \"../list/getIndexValueByLoopContext\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { getByAddressSymbol } from \"../proxy/symbols\";\nimport { IStateProxy } from \"../proxy/types\";\nimport { raiseError } from \"../raiseError\";\n\nexport function getValue(state: IStateProxy, binding: IBindingInfo): any {\n const stateAddress = getStateAddressByBindingInfo(binding);\n if (stateAddress.pathInfo.path in INDEX_BY_INDEX_NAME) {\n const loopContext = getLoopContextByNode(binding.node);\n if (loopContext === null) {\n raiseError(`ListIndex not found for binding: ${binding.statePathName}`);\n }\n return getIndexValueByLoopContext(loopContext, stateAddress.pathInfo.path);\n } else {\n return state[getByAddressSymbol](stateAddress);\n }\n}\n","import { IBindingInfo } from \"../types.js\";\nimport { applyChangeFromBindings } from \"./applyChangeFromBindings.js\";\n\n// applyChange が「未 define のカスタム要素」への適用を見送った binding の台帳。\n// define されるまでの間、同じ binding に対して applyChange は(state 更新の\n// たびに)何度も呼ばれうるため、whenDefined の多重登録をここで抑止する。\n// WeakSet なので binding の寿命に追従し、恒久 define されないタグでもリークしない。\nconst scheduledBindings = new WeakSet<IBindingInfo>();\n\n/**\n * 未 define のカスタム要素に対する適用を customElements.whenDefined 後に再実行\n * する。two-way / event-token の attach、spread の deferred 展開はいずれも\n * whenDefined で再試行するのに対し、値の適用だけが片道 skip だった非対称の解消\n * (docs/state-binding-init-races.md §2)。\n *\n * 再適用は applyChangeFromBindings を通すため、define 時点の最新 state 値で\n * 適用される(skip 時点の値を保持しない)。define を待つ間に DOM から外れた\n * binding には適用しない(deferred spread と同じ規約)。\n */\nexport function scheduleDeferredApply(binding: IBindingInfo, tagName: string): void {\n if (scheduledBindings.has(binding)) {\n return;\n }\n scheduledBindings.add(binding);\n customElements.whenDefined(tagName).then(() => {\n scheduledBindings.delete(binding);\n if (!binding.replaceNode.isConnected) {\n return; // define を待つ間にノードが削除された\n }\n applyChangeFromBindings([binding]);\n }).catch((error: unknown) => {\n console.error(`[@wcstack/state] deferred apply failed for <${tagName}>.`, error);\n });\n}\n","import { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding.js\";\nimport { getCustomElement } from \"../getCustomElement.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { getStateElementByName } from \"../stateElementByName.js\";\nimport { IBindingInfo } from \"../types.js\";\nimport { isWebComponentComplete } from \"../webComponent/completeWebComponent.js\";\nimport { applyChangeToAttribute } from \"./applyChangeToAttribute.js\";\nimport { applyChangeToCheckbox } from \"./applyChangeToCheckbox.js\";\nimport { applyChangeToClass } from \"./applyChangeToClass.js\";\nimport { applyChangeToCommand } from \"./applyChangeToCommand.js\";\nimport { applyChangeToFor } from \"./applyChangeToFor.js\";\nimport { applyChangeToIf } from \"./applyChangeToIf.js\";\nimport { applyChangeToProperty } from \"./applyChangeToProperty.js\";\nimport { applyChangeToRadio } from \"./applyChangeToRadio.js\";\nimport { applyChangeToStyle } from \"./applyChangeToStyle.js\";\nimport { applyChangeToText } from \"./applyChangeToText.js\";\nimport { applyChangeToWebComponent } from \"./applyChangeToWebComponent.js\";\nimport { getFilteredValue } from \"./getFilteredValue.js\";\nimport { getValue } from \"./getValue.js\";\nimport { getRootNodeByFragment } from \"./rootNodeByFragment.js\";\nimport { scheduleDeferredApply } from \"./scheduleDeferredApply.js\";\nimport { ApplyChangeFn, IApplyContext } from \"./types.js\";\n\nconst applyChangeByFirstSegment: { [key: string]: ApplyChangeFn } = {\n \"class\": applyChangeToClass,\n \"attr\": applyChangeToAttribute,\n \"style\": applyChangeToStyle,\n \"command\": applyChangeToCommand,\n};\n\nconst applyChangeByBindingType: { [key: string]: ApplyChangeFn } = {\n \"text\": applyChangeToText,\n \"for\": applyChangeToFor,\n \"if\": applyChangeToIf,\n \"else\": applyChangeToIf,\n \"elseif\": applyChangeToIf,\n \"radio\": applyChangeToRadio,\n \"checkbox\": applyChangeToCheckbox,\n};\n\nconst fnByBinding: WeakMap<IBindingInfo, ApplyChangeFn> = new WeakMap();\nconst deferredSelectBindingByBinding: WeakMap<IBindingInfo, boolean> = new WeakMap();\n\nfunction _applyChange(binding: IBindingInfo, context: IApplyContext): void {\n const value = getValue(context.state, binding);\n const filteredValue = getFilteredValue(value, binding.outFilters);\n\n if (deferredSelectBindingByBinding.get(binding) === true) {\n context.deferredSelectBindings.push({ binding, value: filteredValue });\n return;\n }\n let fn = fnByBinding.get(binding);\n if (typeof fn !== 'undefined') {\n fn(binding, context, filteredValue);\n return;\n }\n if (fnByBinding.has(binding)) {\n if (isWebComponentComplete(binding.replaceNode as Element, context.stateElement)) {\n fn = applyChangeToWebComponent;\n fnByBinding.set(binding, fn); // 確定したのでキャッシュ\n } else {\n fn = applyChangeToProperty;\n }\n fn(binding, context, filteredValue);\n return;\n }\n\n fn = applyChangeByBindingType[binding.bindingType];\n if (typeof fn === 'undefined') {\n const firstSegment = binding.propSegments[0];\n fn = applyChangeByFirstSegment[firstSegment];\n fnByBinding.set(binding, fn);\n if (typeof fn === 'undefined') {\n const customTag = getCustomElement(binding.replaceNode);\n if (customTag) {\n if (isWebComponentComplete(binding.replaceNode as Element, context.stateElement)) {\n fn = applyChangeToWebComponent;\n fnByBinding.set(binding, fn); // 確定したのでキャッシュ\n } else {\n fn = applyChangeToProperty;\n }\n } else {\n fn = applyChangeToProperty;\n fnByBinding.set(binding, fn);\n }\n }\n }\n if (fn === applyChangeToProperty) {\n const element = binding.node as Element;\n if (element.tagName === 'SELECT') {\n const propName = binding.propSegments[0];\n if (propName === 'value' || propName === 'selectedIndex') {\n context.deferredSelectBindings.push({ binding, value: filteredValue });\n deferredSelectBindingByBinding.set(binding, true);\n return;\n }\n }\n }\n fn(binding, context, filteredValue);\n}\n\nexport function applyChange(binding: IBindingInfo, context: IApplyContext): void {\n if (context.appliedBindingSet.has(binding)) {\n return;\n }\n context.appliedBindingSet.add(binding);\n const absAddress = getAbsoluteStateAddressByBinding(binding);\n if (context.updatedAbsAddressSetByStateElement.has(context.stateElement)) {\n const addressSet = context.updatedAbsAddressSetByStateElement.get(context.stateElement)!;\n addressSet.add(absAddress);\n } else {\n context.updatedAbsAddressSetByStateElement.set(context.stateElement, new Set([\n absAddress\n ]));\n }\n if (binding.bindingType === \"event\") {\n return;\n }\n const customTag = getCustomElement(binding.replaceNode);\n if (customTag) {\n if (customElements.get(customTag) === undefined) {\n // 未 define のカスタム要素へは今は適用できない(accessor 未確立の要素に\n // 素の own property を書くと upgrade 後に class accessor を隠してしまう)。\n // whenDefined 後に最新 state 値で再適用する(two-way attach / deferred\n // spread と対称。docs/state-binding-init-races.md §2)。\n scheduleDeferredApply(binding, customTag);\n return;\n }\n }\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n if (rootNode instanceof DocumentFragment && !(rootNode instanceof ShadowRoot)) {\n rootNode = getRootNodeByFragment(rootNode);\n if (rootNode === null) {\n raiseError(`Root node for fragment not found for binding.`);\n }\n }\n if (binding.stateName !== context.stateName || rootNode !== context.rootNode) {\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n stateElement.createState(\"readonly\", (targetState) => {\n const newContext = {\n stateName: binding.stateName,\n rootNode: rootNode,\n stateElement: stateElement,\n state: targetState,\n appliedBindingSet: context.appliedBindingSet,\n newListValueByAbsAddress: context.newListValueByAbsAddress,\n updatedAbsAddressSetByStateElement: context.updatedAbsAddressSetByStateElement,\n deferredSelectBindings: context.deferredSelectBindings,\n }\n _applyChange(binding, newContext);\n });\n } else {\n _applyChange(binding, context);\n }\n}\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { setLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { updatedCallbackSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"../types\";\nimport { applyChange } from \"./applyChange\";\nimport { applyChangeToProperty } from \"./applyChangeToProperty\";\nimport { getRootNodeByFragment } from \"./rootNodeByFragment\";\nimport { IApplyContext, IDeferredSelectBinding } from \"./types\";\n\n/**\n * バインディング情報の配列を処理し、各バインディングに対して状態の変更を適用する。\n *\n * 2フェーズで処理:\n * Phase 1: 構造的更新(for/if) + 値更新(select以外) — select.value/selectedIndex は遅延収集\n * Phase 2: 遅延されたselect.value/selectedIndex を適用(option要素の生成後)\n *\n * 最適化のため、以下のグループ化を行う:\n * 同じ stateNameとrootNode を持つバインディングをグループ化 → createState の呼び出しを削減\n */\nexport function applyChangeFromBindings(bindings: IBindingInfo[]): void {\n let bindingIndex = 0;\n const appliedBindingSet: Set<IBindingInfo> = new Set();\n const newListValueByAbsAddress: Map<IAbsoluteStateAddress, readonly unknown[]> = new Map();\n const updatedAbsAddressSetByStateElement: Map<IStateElement, Set<IAbsoluteStateAddress>> = new Map();\n const deferredSelectBindings: IDeferredSelectBinding[] = [];\n\n // Phase 1: 構造的更新 + 値更新(select.value/selectedIndex は遅延)\n while(bindingIndex < bindings.length) {\n let binding = bindings[bindingIndex];\n const stateName = binding.stateName;\n if (binding.replaceNode.isConnected === false) {\n // 切断されているバインディングは無視、本来は事前に除去されているはず\n if (config.debug) {\n console.log(`applyChangeFromBindings: skip disconnected binding: ${binding.bindingType} ${binding.statePathName} on ${binding.node.nodeName}`, binding);\n }\n bindingIndex++;\n continue;\n }\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n if (rootNode instanceof DocumentFragment && !(rootNode instanceof ShadowRoot)) {\n rootNode = getRootNodeByFragment(rootNode);\n if (rootNode === null) {\n raiseError(`Root node for fragment not found for binding.`);\n }\n }\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for binding.`);\n }\n\n stateElement.createState(\"readonly\", (state) => {\n const context: IApplyContext = {\n rootNode: rootNode,\n stateName: stateName,\n stateElement: stateElement,\n state: state,\n appliedBindingSet: appliedBindingSet,\n newListValueByAbsAddress: newListValueByAbsAddress,\n updatedAbsAddressSetByStateElement: updatedAbsAddressSetByStateElement,\n deferredSelectBindings: deferredSelectBindings,\n };\n\n do {\n applyChange(binding, context);\n bindingIndex++;\n\n const nextBindingInfo: IBindingInfo | undefined = bindings[bindingIndex];\n if (!nextBindingInfo) break; // 終端に到達\n const nextRootNode = nextBindingInfo.replaceNode.getRootNode() as Node;\n if (nextBindingInfo.stateName !== stateName || nextRootNode !== context.rootNode) break; // stateName が変わった\n binding = nextBindingInfo;\n } while(true); // eslint-disable-line no-constant-condition\n });\n }\n // Phase 2: 遅延されたselect.value/selectedIndex を適用\n // applyChangeToProperty は context を参照しないため null を渡す\n for (const { binding, value } of deferredSelectBindings) {\n applyChangeToProperty(binding, null as unknown as IApplyContext, value);\n }\n\n for(const [ absAddress, newListValue ] of newListValueByAbsAddress.entries()) {\n setLastListValueByAbsoluteStateAddress(absAddress, newListValue);\n }\n for(const [ stateElement, absAddressSet ] of updatedAbsAddressSetByStateElement.entries()) {\n stateElement.createState(\"writable\", (state) => {\n state[updatedCallbackSymbol](Array.from(absAddressSet));\n });\n }\n}\n","import { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\nconst bindingSetByHandlerKey: Map<string, Set<IBindingInfo>> = new Map();\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.statePathName}::${eventName}::${filterKey}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n let eventName = 'input';\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nconst radioEventHandlerFunction = (\n stateName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n) => (event: Event): any => {\n const node = event.target as HTMLInputElement;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n if (node.type !== 'radio') {\n console.warn(`[@wcstack/state] event.target is not a radio input element.`);\n return;\n }\n if (node.checked === false) {\n return;\n }\n const newValue = node.value;\n let filteredNewValue: unknown = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[statePathName] = filteredNewValue;\n });\n });\n}\n\nexport function attachRadioEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"radio\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n let radioEventHandler = handlerByHandlerKey.get(key);\n if (typeof radioEventHandler === \"undefined\") {\n radioEventHandler = radioEventHandlerFunction(\n binding.stateName,\n binding.statePathName,\n binding.inFilters\n );\n handlerByHandlerKey.set(key, radioEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, radioEventHandler);\n let bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n bindingSet = new Set<IBindingInfo>([binding]);\n bindingSetByHandlerKey.set(key, bindingSet);\n } else {\n bindingSet.add(binding);\n }\n return true;\n }\n return false;\n}\n\nexport function detachRadioEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"radio\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n const radioEventHandler = handlerByHandlerKey.get(key);\n if (typeof radioEventHandler === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(eventName, radioEventHandler);\n\n const bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n return false;\n }\n bindingSet.delete(binding);\n if (bindingSet.size === 0) {\n handlerByHandlerKey.delete(key);\n bindingSetByHandlerKey.delete(key);\n }\n return true;\n }\n return false;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingSetByHandlerKey,\n getHandlerKey,\n getEventName,\n radioEventHandlerFunction,\n};\n","import { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\nconst bindingSetByHandlerKey: Map<string, Set<IBindingInfo>> = new Map();\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.statePathName}::${eventName}::${filterKey}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n let eventName = 'input';\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nconst checkboxEventHandlerFunction = (\n stateName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n) => (event: Event): any => {\n const node = event.target as HTMLInputElement;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n if (node.type !== 'checkbox') {\n console.warn(`[@wcstack/state] event.target is not a checkbox input element.`);\n return;\n }\n const checked = node.checked;\n const newValue = node.value;\n let filteredNewValue: unknown = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n let currentValue = state[statePathName];\n if (Array.isArray(currentValue)) {\n if (checked) {\n if (currentValue.indexOf(filteredNewValue) === -1) {\n state[statePathName] = currentValue.concat(filteredNewValue);\n }\n } else {\n const index = currentValue.indexOf(filteredNewValue);\n if (index !== -1) {\n state[statePathName] = currentValue.toSpliced(index, 1);\n }\n }\n } else {\n if (checked) {\n state[statePathName] = [filteredNewValue];\n } else {\n state[statePathName] = [];\n }\n }\n });\n });\n}\n\nexport function attachCheckboxEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"checkbox\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n let checkboxEventHandler = handlerByHandlerKey.get(key);\n if (typeof checkboxEventHandler === \"undefined\") {\n checkboxEventHandler = checkboxEventHandlerFunction(\n binding.stateName,\n binding.statePathName,\n binding.inFilters\n );\n handlerByHandlerKey.set(key, checkboxEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, checkboxEventHandler);\n let bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n bindingSet = new Set<IBindingInfo>([binding]);\n bindingSetByHandlerKey.set(key, bindingSet);\n } else {\n bindingSet.add(binding);\n }\n return true;\n }\n return false;\n}\n\nexport function detachCheckboxEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"checkbox\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n const checkboxEventHandler = handlerByHandlerKey.get(key);\n if (typeof checkboxEventHandler === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(eventName, checkboxEventHandler);\n\n const bindingSet = bindingSetByHandlerKey.get(key);\n if (typeof bindingSet === \"undefined\") {\n return false;\n }\n bindingSet.delete(binding);\n if (bindingSet.size === 0) {\n handlerByHandlerKey.delete(key);\n bindingSetByHandlerKey.delete(key);\n }\n return true;\n }\n return false;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingSetByHandlerKey,\n getHandlerKey,\n getEventName,\n checkboxEventHandlerFunction,\n};\n","import { ILoopContext } from \"../list/types\";\nimport { IBindingInfo } from \"../types\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { raiseError } from \"../raiseError\";\nimport { replaceToReplaceNode } from \"./replaceToReplaceNode\";\nimport {\n collectNodesAndBindingInfos,\n collectNodesAndBindingInfosByFragment,\n IDeferredSpreadEntry,\n processDeferredNode,\n} from \"./collectNodesAndBindingInfos\";\nimport { IFragmentNodeInfo } from \"../structural/types\";\nimport { attachEventHandler } from \"../event/handler\";\nimport { attachEventTokenHandler } from \"../event/eventTokenHandler\";\nimport { attachTwowayEventHandler } from \"../event/twowayHandler\";\nimport { setLoopContextByNode } from \"../list/loopContextByNode\";\nimport { applyChangeFromBindings } from \"../apply/applyChangeFromBindings\";\nimport { IInitialBindingInfo } from \"./types\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { attachRadioEventHandler } from \"../event/radioHandler\";\nimport { attachCheckboxEventHandler } from \"../event/checkboxHandler\";\n\nfunction _initializeBindings(\n allBindings: IBindingInfo[],\n): void {\n for(const binding of allBindings) {\n\n // replace node\n replaceToReplaceNode(binding);\n\n // event\n if (attachEventHandler(binding)) {\n continue;\n }\n\n // event token (element → state)\n if (attachEventTokenHandler(binding)) {\n continue;\n }\n\n // two-way binding\n attachTwowayEventHandler(binding);\n // radio binding\n attachRadioEventHandler(binding);\n // checkbox binding\n attachCheckboxEventHandler(binding);\n\n }\n}\n\nfunction _registerAbsoluteAddresses(allBindings: IBindingInfo[]): void {\n for(const binding of allBindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n if (binding.bindingType !== 'event') {\n stateElement.setPathInfo(binding.statePathName, binding.bindingType);\n }\n }\n}\n\nfunction _scheduleDeferredSpreads(\n deferredSpreads: IDeferredSpreadEntry[],\n parentLoopContext: ILoopContext | null,\n): void {\n for (const entry of deferredSpreads) {\n customElements.whenDefined(entry.tagName).then(() => {\n if (!entry.node.isConnected) return; // node was removed before class became ready\n const bindings = processDeferredNode(entry);\n if (bindings.length === 0) return;\n setLoopContextByNode(entry.node, parentLoopContext);\n _initializeBindings(bindings);\n _registerAbsoluteAddresses(bindings);\n applyChangeFromBindings(bindings);\n }).catch((error: unknown) => {\n console.error(`[@wcstack/state] deferred spread failed for <${entry.tagName}>.`, error);\n });\n }\n}\n\nexport function initializeBindings(\n root: Document | DocumentFragment |Element, parentLoopContext: ILoopContext | null\n): void {\n const [subscriberNodes, allBindings, deferredSpreads] = collectNodesAndBindingInfos(root);\n for(const node of subscriberNodes) {\n setLoopContextByNode(node, parentLoopContext);\n }\n _initializeBindings(allBindings);\n _registerAbsoluteAddresses(allBindings);\n // apply all at once\n applyChangeFromBindings(allBindings);\n _scheduleDeferredSpreads(deferredSpreads, parentLoopContext);\n}\n\nexport function initializeBindingsByFragment(\n root: DocumentFragment,\n nodeInfos: IFragmentNodeInfo[],\n): IInitialBindingInfo {\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfosByFragment(root, nodeInfos);\n _initializeBindings(allBindings);\n return {\n nodes: subscriberNodes,\n bindingInfos: allBindings,\n };\n}\n","import { config } from \"../config.js\";\nimport { SVG_NAMESPACE } from \"../define.js\";\n\nconst MUSTACHE_REGEX = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\nconst SKIP_TAGS = new Set([\"SCRIPT\", \"STYLE\"]);\n\nexport function convertMustacheToComments(root: Document | Element | DocumentFragment): void {\n if (!config.enableMustache) {\n return;\n }\n\n convertTextNodes(root);\n\n const templates = Array.from(root.querySelectorAll(\"template\"));\n\n for (const template of templates) {\n if (template.namespaceURI === SVG_NAMESPACE) {\n const newTemplate = document.createElement(\"template\");\n const childNodes = Array.from(template.childNodes);\n for(let i = 0; i < childNodes.length; i++) {\n const childNode = childNodes[i];\n newTemplate.content.appendChild(childNode);\n }\n for(const attr of template.attributes) {\n newTemplate.setAttribute(attr.name, attr.value);\n }\n template.replaceWith(newTemplate);\n convertMustacheToComments(newTemplate.content);\n } else {\n convertMustacheToComments(template.content);\n }\n }\n}\n\nfunction convertTextNodes(root: Document | Element | DocumentFragment): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n const textNodes: Text[] = [];\n\n while (walker.nextNode()) {\n textNodes.push(walker.currentNode as Text);\n }\n\n for (const textNode of textNodes) {\n if (textNode.parentElement && SKIP_TAGS.has(textNode.parentElement.tagName)) {\n continue;\n }\n replaceTextNode(textNode);\n }\n}\n\nfunction replaceTextNode(textNode: Text): void {\n const text = textNode.data;\n MUSTACHE_REGEX.lastIndex = 0;\n\n if (!MUSTACHE_REGEX.test(text)) {\n return;\n }\n\n MUSTACHE_REGEX.lastIndex = 0;\n const fragment = document.createDocumentFragment();\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = MUSTACHE_REGEX.exec(text)) !== null) {\n if (match.index > lastIndex) {\n fragment.appendChild(document.createTextNode(text.slice(lastIndex, match.index)));\n }\n\n const bindText = match[1];\n fragment.appendChild(document.createComment(`@@: ${bindText}`));\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n fragment.appendChild(document.createTextNode(text.slice(lastIndex)));\n }\n\n textNode.parentNode!.replaceChild(fragment, textNode);\n}\n","import { builtinFilterFn, outputBuiltinFilters } from \"../filters/builtinFilters\";\nimport { IFilterInfo } from \"../types\";\n\nlet _notFilterInfo: IFilterInfo | undefined = undefined;\n\nexport function createNotFilter(): IFilterInfo {\n if (_notFilterInfo) {\n return _notFilterInfo;\n }\n const filterName = \"not\"\n const args: string[] = [];\n const filterFn = builtinFilterFn(filterName, args)(outputBuiltinFilters);\n _notFilterInfo = {\n filterName,\n args,\n filterFn,\n }\n return _notFilterInfo;\n}\n","import { config } from \"../config.js\";\nimport { DELIMITER, WILDCARD } from \"../define.js\";\n\nconst COMMENT_REGEX = /^(\\s*@@\\s*(?:.*?)\\s*:\\s*)(.+?)(\\s*)$/;\n\nfunction expandShorthandInStatePart(statePart: string, forPath: string): string {\n const prefix = forPath + DELIMITER + WILDCARD;\n const pipeIndex = statePart.indexOf('|');\n const atIndex = statePart.indexOf('@');\n let pathPart: string;\n let suffix: string;\n if (pipeIndex !== -1) {\n pathPart = statePart.slice(0, pipeIndex).trim();\n suffix = statePart.slice(pipeIndex);\n } else if (atIndex !== -1) {\n pathPart = statePart.slice(0, atIndex).trim();\n suffix = statePart.slice(atIndex);\n } else {\n pathPart = statePart.trim();\n suffix = '';\n }\n if (pathPart === '.') {\n pathPart = prefix;\n } else if (pathPart.startsWith('.')) {\n pathPart = prefix + DELIMITER + pathPart.slice(1);\n } else {\n return statePart;\n }\n if (suffix.length > 0) {\n return pathPart + suffix;\n }\n return pathPart;\n}\n\nfunction expandCommentData(data: string, forPath: string): string {\n const match = COMMENT_REGEX.exec(data);\n if (match === null) {\n return data;\n }\n const commentPrefix = match[1];\n const bindText = match[2];\n const commentSuffix = match[3];\n const expanded = expandShorthandInStatePart(bindText, forPath);\n return commentPrefix + expanded + commentSuffix;\n}\n\nfunction expandBindAttribute(attrValue: string, forPath: string): string {\n const parts = attrValue.split(';');\n let changed = false;\n const result = parts.map(part => {\n const trimmed = part.trim();\n if (trimmed.length === 0) return part;\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex === -1) return part;\n const propPart = trimmed.slice(0, colonIndex).trim();\n const statePart = trimmed.slice(colonIndex + 1).trim();\n const expanded = expandShorthandInStatePart(statePart, forPath);\n if (expanded !== statePart) {\n changed = true;\n return `${propPart}: ${expanded}`;\n }\n return part;\n });\n if (!changed) return attrValue;\n return result.join(';');\n}\n\nexport function expandShorthandInBindAttribute(attrValue: string, forPath: string): string {\n return expandBindAttribute(attrValue, forPath);\n}\n\nexport function expandShorthandPaths(root: DocumentFragment, forPath: string): void {\n const bindAttr = config.bindAttributeName;\n const walker = document.createTreeWalker(\n root,\n NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_ELEMENT,\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n if (node.nodeType === Node.COMMENT_NODE) {\n const comment = node as Comment;\n comment.data = expandCommentData(comment.data, forPath);\n continue;\n }\n const element = node as Element;\n if (element instanceof HTMLTemplateElement) {\n continue;\n }\n const attr = element.getAttribute(bindAttr);\n if (attr !== null) {\n const expanded = expandBindAttribute(attr, forPath);\n if (expanded !== attr) {\n element.setAttribute(bindAttr, expanded);\n }\n }\n }\n}\n","\nexport function getNodePath(node: Node): number[] {\n let currentNode: Node | null = node;\n const path: number[] = [];\n while(currentNode.parentNode !== null) {\n const nodes: Node[] = Array.from(currentNode.parentNode.childNodes);\n const index = nodes.indexOf(currentNode);\n path.unshift(index);\n currentNode = currentNode.parentNode;\n }\n return path;\n}\n","import { getParseBindTextResults } from \"../bindings/getParseBindTextResults\";\nimport { getSubscriberNodes } from \"../bindings/getSubscriberNodes\";\nimport { getNodePath } from \"./getNodePath\";\nimport { IFragmentNodeInfo } from \"./types\";\n\nexport function getFragmentNodeInfos(fragment: DocumentFragment): IFragmentNodeInfo[] {\n const fragmnentNodeInfos: IFragmentNodeInfo[] = [];\n const subscriberNodes = getSubscriberNodes(fragment);\n for(const subscriberNode of subscriberNodes) {\n const parseBindingTextResults = getParseBindTextResults(subscriberNode);\n fragmnentNodeInfos.push({\n nodePath: getNodePath(subscriberNode),\n parseBindTextResults: parseBindingTextResults,\n });\n }\n return fragmnentNodeInfos;\n}","\nexport function optimizeFragment(fragment: DocumentFragment): void {\n const childNodes = Array.from(fragment.childNodes);\n for(const childNode of childNodes) {\n if (childNode.nodeType === Node.TEXT_NODE) {\n const textContent = childNode.textContent || '';\n if (textContent.trim() === '') {\n // Remove empty text nodes\n fragment.removeChild(childNode);\n }\n }\n }\n}\n","import { getParseBindTextResults } from \"../bindings/getParseBindTextResults\";\nimport { parseBindTextsForElement } from \"../bindTextParser/parseBindTextsForElement\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { BindingType } from \"../types\";\nimport { createNotFilter } from \"./createNotFilter\";\nimport { expandShorthandInBindAttribute, expandShorthandPaths } from \"./expandShorthandPaths\";\nimport { setFragmentInfoByUUID } from \"./fragmentInfoByUUID\";\nimport { getFragmentNodeInfos } from \"./getFragmentNodeInfos\";\nimport { getNodePath } from \"./getNodePath\";\nimport { optimizeFragment } from \"./optimizeFragment\";\nimport { IFragmentInfo } from \"./types\";\n\nconst keywordByBindingType: Map<BindingType, string> = new Map<BindingType, string>([\n [\"for\", config.commentForPrefix],\n [\"if\", config.commentIfPrefix],\n [\"elseif\", config.commentElseIfPrefix],\n [\"else\", config.commentElsePrefix],\n]);\n\nconst notFilter = createNotFilter();\n\nfunction cloneNotParseBindTextResult(\n bindingType: BindingType,\n parseBindTextResult: ParseBindTextResult\n): ParseBindTextResult {\n const filters = parseBindTextResult.outFilters;\n return {\n ...parseBindTextResult,\n outFilters: [...filters, notFilter],\n bindingType: bindingType,\n };\n}\n\nfunction _getFragmentInfo(\n rootNode: Node,\n fragment: DocumentFragment,\n parseBindingTextResult: ParseBindTextResult,\n forPath?: string\n): IFragmentInfo {\n optimizeFragment(fragment);\n if (typeof forPath === \"string\") {\n expandShorthandPaths(fragment, forPath);\n }\n collectStructuralFragments(rootNode, fragment, forPath);\n // after replacing and collect node infos on child fragment\n const fragmentInfo = {\n fragment: fragment,\n parseBindTextResult: parseBindingTextResult,\n nodeInfos: getFragmentNodeInfos(fragment),\n }\n return fragmentInfo;\n}\n\n\nexport function collectStructuralFragments(rootNode: Node, walkRoot: Document | Element | DocumentFragment, forPath?: string): void {\n const elseKeyword = config.commentElsePrefix;\n const walker = document.createTreeWalker(\n walkRoot, \n NodeFilter.SHOW_ELEMENT, \n {\n acceptNode(node: Node) {\n const element = node as Element;\n if (element.tagName.toLowerCase() === 'template') {\n const bindText = element.getAttribute(config.bindAttributeName) || '';\n if (bindText.length > 0) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n let lastIfFragmentInfo: IFragmentInfo | null = null; // for elseif chaining\n const elseFragmentInfos: IFragmentInfo[] = []; // for elseif chaining\n const templates: HTMLTemplateElement[] = [];\n while (walker.nextNode()) {\n const template = walker.currentNode as HTMLTemplateElement;\n templates.push(template);\n }\n\n for(const template of templates) {\n let bindText = template.getAttribute(config.bindAttributeName) || '';\n if (typeof forPath === \"string\") {\n bindText = expandShorthandInBindAttribute(bindText, forPath);\n }\n const parseBindTextResults = parseBindTextsForElement(bindText);\n let parseBindTextResult = parseBindTextResults[0];\n const keyword = keywordByBindingType.get(parseBindTextResult.bindingType);\n if (typeof keyword === 'undefined') {\n continue;\n }\n\n const bindingType = parseBindTextResult.bindingType;\n const fragment = template.content;\n const uuid = getUUID();\n let fragmentInfo: IFragmentInfo | null = null;\n\n // Determine childForPath for shorthand expansion\n const childForPath = bindingType === \"for\"\n ? parseBindTextResult.statePathName\n : forPath;\n\n if (bindingType === \"else\") {\n // check last 'if' or 'elseif' fragment info\n if (lastIfFragmentInfo === null) {\n raiseError(`'else' binding found without preceding 'if' or 'elseif' binding.`);\n }\n // else condition\n parseBindTextResult = cloneNotParseBindTextResult(\"else\", lastIfFragmentInfo.parseBindTextResult);\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n\n const lastElseFragmentInfo = elseFragmentInfos.at(-1);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n if (typeof lastElseFragmentInfo !== \"undefined\") {\n template.remove();\n lastElseFragmentInfo.fragment.appendChild(placeHolder);\n lastElseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(placeHolder),\n parseBindTextResults: getParseBindTextResults(placeHolder),\n });\n } else {\n template.replaceWith(placeHolder);\n }\n } else if (bindingType === \"elseif\") {\n // check last 'if' or 'elseif' fragment info\n if (lastIfFragmentInfo === null) {\n raiseError(`'elseif' binding found without preceding 'if' or 'elseif' binding.`);\n }\n\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n\n // create else fragment\n const elseUUID = getUUID();\n const elseFragmentInfo: IFragmentInfo = {\n fragment: document.createDocumentFragment(),\n parseBindTextResult: cloneNotParseBindTextResult(\"else\", lastIfFragmentInfo.parseBindTextResult),\n nodeInfos: [],\n };\n elseFragmentInfo.fragment.appendChild(placeHolder);\n elseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(placeHolder),\n parseBindTextResults: getParseBindTextResults(placeHolder),\n });\n setFragmentInfoByUUID(elseUUID, rootNode, elseFragmentInfo);\n const lastElseFragmentInfo = elseFragmentInfos.at(-1);\n elseFragmentInfos.push(elseFragmentInfo);\n const elsePlaceHolder = document.createComment(`@@${elseKeyword}:${elseUUID}`);\n\n if (typeof lastElseFragmentInfo !== \"undefined\") {\n template.remove();\n lastElseFragmentInfo.fragment.appendChild(elsePlaceHolder);\n lastElseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(elsePlaceHolder),\n parseBindTextResults: getParseBindTextResults(elsePlaceHolder),\n });\n } else {\n template.replaceWith(elsePlaceHolder);\n }\n\n } else {\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n template.replaceWith(placeHolder);\n }\n\n // Update lastIfFragmentInfo for if/elseif/else chaining\n if (bindingType === \"if\") {\n elseFragmentInfos.length = 0; // start new if chain\n lastIfFragmentInfo = fragmentInfo;\n } else if (bindingType === \"elseif\") {\n lastIfFragmentInfo = fragmentInfo;\n } else if (bindingType === \"else\") {\n lastIfFragmentInfo = null;\n elseFragmentInfos.length = 0; // end if chain\n }\n }\n}\n","import { State } from \"./components/State\";\nimport { IStateElement } from \"./components/types\";\nimport { config } from \"./config\";\n\nexport async function waitForStateInitialize(root: Document | Element | DocumentFragment): Promise<void> {\n const elements = root.querySelectorAll(config.tagNames.state);\n const promises: Promise<void>[] = [];\n await customElements.whenDefined(config.tagNames.state);\n for(const element of elements) {\n const stateElement = element as State as IStateElement;\n promises.push(stateElement.initializePromise);\n }\n await Promise.all(promises);\n}\n","import { waitInitializeBinding } from \"./bindings/initializeBindingPromiseByNode\";\nimport { initializeBindings } from \"./bindings/initializeBindings\";\nimport { config } from \"./config\";\nimport { convertMustacheToComments } from \"./mustache/convertMustacheToComments\";\nimport { collectStructuralFragments } from \"./structural/collectStructuralFragments\";\nimport { waitForStateInitialize } from \"./waitForStateInitialize\";\n\nexport async function buildBindings(root: Document | ShadowRoot): Promise<void> {\n if (root === document) {\n // document配下のwcs-stateの初期化(connectedCallbackの完了)を待機する\n await waitForStateInitialize(document);\n // baindingを取得して、初期値をセットする\n convertMustacheToComments(document);\n collectStructuralFragments(document, document);\n initializeBindings(document.body, null);\n } else {\n const shadowRoot = root as ShadowRoot;\n if (shadowRoot.host.hasAttribute(config.bindAttributeName)) {\n // data-wcsを持つWebComponentは、WebComponentのbindingが完了するまで待機する。\n await waitInitializeBinding(shadowRoot.host);\n }\n // shadowRoot配下のwcs-stateの初期化(connectedCallbackの完了)を待機する\n await waitForStateInitialize(shadowRoot);\n // baindingを取得して、初期値をセットする\n convertMustacheToComments(shadowRoot);\n collectStructuralFragments(shadowRoot, shadowRoot);\n initializeBindings(shadowRoot, null);\n }\n}\n","import { getAbsoluteStateAddressByBinding } from \"./binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress } from \"./binding/getBindingSetByAbsoluteStateAddress\";\nimport { setLastListValueByAbsoluteStateAddress } from \"./list/lastListValueByAbsoluteStateAddress\";\nimport { parseBindTextsForElement } from \"./bindTextParser/parseBindTextsForElement\";\nimport { ParseBindTextResult } from \"./bindTextParser/types\";\nimport { collectNodesAndBindingInfos } from \"./bindings/collectNodesAndBindingInfos\";\nimport { setBindingsByContent } from \"./bindings/bindingsByContent\";\nimport { setIndexBindingsByContent } from \"./bindings/indexBindingsByContent\";\nimport { setNodesByContent } from \"./bindings/nodesByContent\";\nimport { bindLoopContextToContent } from \"./bindings/bindLoopContextToContent\";\nimport { config } from \"./config\";\nimport { WILDCARD, INDEX_BY_INDEX_NAME } from \"./define\";\nimport { Ssr, SSR_BLOCK_START } from \"./components/Ssr\";\nimport { getStateElementByName } from \"./stateElementByName\";\nimport { raiseError } from \"./raiseError\";\nimport { setLoopContextByNode } from \"./list/loopContextByNode\";\nimport { replaceToReplaceNode } from \"./bindings/replaceToReplaceNode\";\nimport { attachEventHandler } from \"./event/handler\";\nimport { attachEventTokenHandler } from \"./event/eventTokenHandler\";\nimport { attachTwowayEventHandler } from \"./event/twowayHandler\";\nimport { attachRadioEventHandler } from \"./event/radioHandler\";\nimport { attachCheckboxEventHandler } from \"./event/checkboxHandler\";\nimport { applyChangeFromBindings } from \"./apply/applyChangeFromBindings\";\nimport { hydrateSetContent, hydrateSetLastNode } from \"./apply/applyChangeToFor\";\nimport { waitForStateInitialize } from \"./waitForStateInitialize\";\nimport { setFragmentInfoByUUID, getFragmentInfoByUUID } from \"./structural/fragmentInfoByUUID\";\nimport { setContentByNode } from \"./structural/contentsByNode\";\nimport { createContentFromNodes } from \"./structural/createContent\";\nimport { collectStructuralFragments } from \"./structural/collectStructuralFragments\";\nimport { createNotFilter } from \"./structural/createNotFilter\";\nimport { getFragmentNodeInfos } from \"./structural/getFragmentNodeInfos\";\nimport { optimizeFragment } from \"./structural/optimizeFragment\";\nimport { expandShorthandPaths } from \"./structural/expandShorthandPaths\";\nimport { createListIndex } from \"./list/createListIndex\";\nimport { IListIndex } from \"./list/types\";\nimport { setListIndexesByList } from \"./list/listIndexesByList\";\nimport { getPathInfo } from \"./address/PathInfo\";\nimport { createStateAddress } from \"./address/StateAddress\";\nimport { IBindingInfo } from \"./types\";\nimport { VERSION } from \"./version\";\n\n// ハイドレーション時にスキップするバインディングタイプ\nconst STRUCTURAL_TYPES = new Set(['for', 'if', 'elseif', 'else']);\n\n\ninterface ISsrBlock {\n type: string; // for, if, elseif, else\n uuid: string;\n path: string;\n index: number | null; // for のみ\n nodes: Node[]; // start〜end 間のノード\n}\n\n/**\n * SSR ブロック境界コメントを走査して、start〜end 間のノードを収集する\n */\nfunction collectSsrBlocks(root: Node): ISsrBlock[] {\n const blocks: ISsrBlock[] = [];\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const startComments: Comment[] = [];\n\n // まず全コメントを収集\n while (walker.nextNode()) {\n startComments.push(walker.currentNode as Comment);\n }\n\n for (const comment of startComments) {\n const startMatch = SSR_BLOCK_START.exec(comment.data);\n if (!startMatch) continue;\n\n const type = startMatch[1];\n const info = startMatch[2]; // \"uuid:path:index\" or \"uuid:path\"\n const parts = info.split(':');\n\n let uuid: string;\n let path: string;\n let index: number | null = null;\n\n if (type === 'for') {\n // uuid:path:index\n uuid = parts[0];\n path = parts[1];\n index = parseInt(parts[2], 10);\n } else {\n // uuid:path\n uuid = parts[0];\n path = parts.slice(1).join(':');\n }\n\n // start と end の間のノードを収集\n const nodes: Node[] = [];\n let sibling = comment.nextSibling;\n const endPattern = `@@wcs-${type}-end:${info}`;\n while (sibling) {\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n break;\n }\n nodes.push(sibling);\n sibling = sibling.nextSibling;\n }\n\n blocks.push({ type, uuid, path, index, nodes });\n }\n\n return blocks;\n}\n\n/**\n * live DOM ノード群からバインディングを収集する。\n * ノードを一時的に DocumentFragment に移動して collectNodesAndBindingInfos を実行し、\n * 元の位置に戻す。\n */\nfunction collectBindingsFromLiveNodes(\n nodes: Node[],\n): { bindingInfos: IBindingInfo[], subscriberNodes: Node[] } {\n if (nodes.length === 0) return { bindingInfos: [], subscriberNodes: [] };\n\n // ノードの元の位置を記録\n const parent = nodes[0].parentNode;\n const nextSibling = nodes[nodes.length - 1].nextSibling;\n\n // 一時的に wrapper 要素に移動(collectNodesAndBindingInfos は Element を受け付ける)\n const wrapper = document.createElement('div');\n for (const node of nodes) {\n wrapper.appendChild(node);\n }\n\n // バインディング収集\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfos(wrapper);\n\n // _initializeBindings 相当の処理\n for (const binding of allBindings) {\n replaceToReplaceNode(binding);\n if (attachEventHandler(binding)) continue;\n if (attachEventTokenHandler(binding)) continue;\n attachTwowayEventHandler(binding);\n attachRadioEventHandler(binding);\n attachCheckboxEventHandler(binding);\n }\n\n // 元の位置に戻す\n if (parent) {\n while (wrapper.firstChild) {\n parent.insertBefore(wrapper.firstChild, nextSibling);\n }\n }\n\n return {\n bindingInfos: allBindings,\n subscriberNodes,\n };\n}\n\n/**\n * SSR ブロックの DOM ノードを Content 化し、バインディングを登録する。\n */\nfunction hydrateBlocks(root: Node, blocks: ISsrBlock[]): void {\n // for ブロックの listIndex を UUID ごとに収集\n const listIndexesByUuid: Map<string, IListIndex[]> = new Map();\n\n for (const block of blocks) {\n if (block.nodes.length === 0) continue;\n\n const content = createContentFromNodes(block.nodes);\n\n // Content のバインディングを収集\n const { bindingInfos, subscriberNodes } = collectBindingsFromLiveNodes(block.nodes);\n\n // Content 内のノードに data-wcs-completed を付与\n // (メインの collectNodesAndBindingInfos で重複登録されないようにする)\n for (const node of subscriberNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n (node as Element).setAttribute('data-wcs-completed', '');\n }\n }\n setBindingsByContent(content, bindingInfos);\n setNodesByContent(content, subscriberNodes);\n\n const indexBindings: IBindingInfo[] = [];\n for (const binding of bindingInfos) {\n if (binding.statePathName in INDEX_BY_INDEX_NAME) {\n indexBindings.push(binding);\n }\n }\n setIndexBindingsByContent(content, indexBindings);\n\n if (block.type === 'for' && block.index !== null) {\n const placeholderComment = findPlaceholderComment(root, 'for', block.uuid);\n if (placeholderComment) {\n const listIndex = createListIndex(null, block.index);\n hydrateSetContent(placeholderComment, listIndex, content);\n const lastNode = block.nodes[block.nodes.length - 1];\n hydrateSetLastNode(placeholderComment, lastNode);\n setContentByNode(placeholderComment, content);\n\n // ループコンテキストをバインドし、バインディングをアドレスに登録\n const pathInfo = getPathInfo(block.path + '.' + WILDCARD);\n const stateAddress = createStateAddress(pathInfo, listIndex);\n // ILoopContext は IStateAddress + listIndex なので、stateAddress をそのまま使う\n bindLoopContextToContent(content, stateAddress as any);\n\n for (const binding of bindingInfos) {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absAddr, binding);\n }\n\n // listIndex を UUID ごとに収集(後で setListIndexesByList に渡す)\n let indexes = listIndexesByUuid.get(block.uuid);\n if (!indexes) {\n indexes = [];\n listIndexesByUuid.set(block.uuid, indexes);\n }\n indexes.push(listIndex);\n }\n } else {\n const placeholderComment = findPlaceholderComment(root, block.type, block.uuid);\n if (placeholderComment) {\n setContentByNode(placeholderComment, content);\n\n // バインディングをアドレスに登録\n for (const binding of bindingInfos) {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absAddr, binding);\n }\n }\n }\n }\n\n // for ブロックの listIndex を state のリスト値に紐づける\n for (const [uuid, indexes] of listIndexesByUuid) {\n const placeholderComment = findPlaceholderComment(root, 'for', uuid);\n if (!placeholderComment) continue;\n // state から現在のリスト値を取得して listIndexes を設定\n const rootNode = placeholderComment.getRootNode() as Node;\n // structuralBindings はまだ登録前なので、getParseBindTextResults を直接使う\n const fragmentInfo = getFragmentInfoByUUID(uuid);\n if (!fragmentInfo) continue;\n const stateName = fragmentInfo.parseBindTextResult.stateName;\n const statePathName = fragmentInfo.parseBindTextResult.statePathName;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (!stateElement) continue;\n stateElement.createState(\"readonly\", (state) => {\n const list = state[statePathName];\n if (Array.isArray(list)) {\n setListIndexesByList(list, indexes);\n }\n });\n }\n}\n\nfunction findPlaceholderComment(root: Node, type: string, uuid: string): Comment | null {\n const keywordMap: Record<string, string> = {\n 'for': config.commentForPrefix,\n 'if': config.commentIfPrefix,\n 'elseif': config.commentElseIfPrefix,\n 'else': config.commentElsePrefix,\n };\n const keyword = keywordMap[type];\n if (!keyword) return null;\n\n const pattern = `@@${keyword}:${uuid}`;\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (comment.data === pattern) {\n return comment;\n }\n }\n return null;\n}\n\n/**\n * <wcs-ssr> 内のテンプレートを fragmentInfoByUUID に復帰させる。\n */\nfunction restoreFragments(root: Document, ssrEl: Ssr): void {\n const rootNode = root as Node;\n let lastIfParseResult: ParseBindTextResult | null = null;\n\n for (const [uuid, tpl] of ssrEl.templates) {\n const bindText = tpl.getAttribute(config.bindAttributeName) || '';\n const parseBindTextResults = parseBindTextsForElement(bindText);\n let parseBindTextResult = parseBindTextResults[0];\n const bindingType = parseBindTextResult.bindingType;\n\n // else: 直前の if 条件の not → 条件反転\n // elseif: 独自条件を持つが stateName は if から引き継ぐ\n if (bindingType === 'else' && lastIfParseResult) {\n parseBindTextResult = {\n ...lastIfParseResult,\n outFilters: [...lastIfParseResult.outFilters, createNotFilter()],\n bindingType: 'else',\n };\n } else if (bindingType === 'elseif' && lastIfParseResult) {\n parseBindTextResult = {\n ...parseBindTextResult,\n stateName: lastIfParseResult.stateName,\n };\n }\n\n // if chain の追跡\n if (bindingType === 'if') {\n lastIfParseResult = parseBindTextResult;\n } else if (bindingType === 'elseif') {\n lastIfParseResult = parseBindTextResult;\n } else if (bindingType === 'else') {\n lastIfParseResult = null;\n }\n\n const fragment = document.importNode(tpl.content, true);\n const forPath = bindingType === \"for\" ? parseBindTextResult.statePathName : undefined;\n optimizeFragment(fragment);\n if (typeof forPath === \"string\") {\n expandShorthandPaths(fragment, forPath);\n }\n collectStructuralFragments(rootNode, fragment, forPath);\n\n const fragmentInfo = {\n fragment,\n parseBindTextResult,\n nodeInfos: getFragmentNodeInfos(fragment),\n };\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n }\n}\n\n/**\n * SSR ハイドレーション用バインディング初期化。\n * バージョン不一致時は DOM をクリーンアップして false を返す\n * (呼び出し元で buildBindings にフォールバック)。\n */\nexport async function hydrateBindings(root: Document): Promise<boolean> {\n await waitForStateInitialize(root);\n\n // バージョン検証\n const ssrElements = root.querySelectorAll(config.tagNames.ssr);\n for (const ssrNode of ssrElements) {\n const ssrEl = ssrNode as Ssr;\n if (!ssrEl.verifyVersion()) {\n console.warn(\n `[@wcstack/state] SSR version mismatch: server=\"${ssrEl.version}\", client=\"${VERSION}\". Falling back to full render.`\n );\n Ssr.cleanupDom(root);\n return false;\n }\n }\n\n // <wcs-ssr> からテンプレートを fragmentInfoByUUID に復帰\n for (const ssrNode of ssrElements) {\n restoreFragments(root, ssrNode as Ssr);\n }\n\n // SSR ブロック境界コメントから既存 DOM を Content 化\n const blocks = collectSsrBlocks(document.body);\n hydrateBlocks(document.body, blocks);\n\n // ブロック境界コメント (start/end) を除去\n Ssr.removeBlockBoundaryComments(document.body);\n\n // <wcs-ssr> を一時除去(バインディング走査に含めない)\n const ssrParents: { el: Element, parent: Node, next: Node | null }[] = [];\n for (const el of ssrElements) {\n if (el.parentNode) {\n ssrParents.push({ el, parent: el.parentNode, next: el.nextSibling });\n el.remove();\n }\n }\n\n // 構造プレースホルダーコメント (@@wcs-for:uuid 等) は残す\n // → バインディング走査で拾われ、状態変化時の再レンダリングに使われる\n\n // SSR テキストバインディングを @@: 形式に復元\n Ssr.restoreTextBindings(document.body);\n\n // ノードとバインディングを収集\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfos(document.body);\n\n // 収集完了したノードに data-wcs-completed 属性を付与\n // for ブロック内ノード(hydrateBlocks で登録済み)にはループコンテキストをリセットしない\n for (const node of subscriberNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n if (!el.hasAttribute('data-wcs-completed')) {\n setLoopContextByNode(node, null);\n el.setAttribute('data-wcs-completed', '');\n }\n } else {\n // コメントノード等\n setLoopContextByNode(node, null);\n }\n }\n\n // バインディングを構造系とそれ以外に分離\n const normalBindings: IBindingInfo[] = [];\n const structuralBindings: IBindingInfo[] = [];\n\n for (const binding of allBindings) {\n replaceToReplaceNode(binding);\n if (attachEventHandler(binding)) {\n continue;\n }\n if (attachEventTokenHandler(binding)) {\n continue;\n }\n attachTwowayEventHandler(binding);\n attachRadioEventHandler(binding);\n attachCheckboxEventHandler(binding);\n\n if (STRUCTURAL_TYPES.has(binding.bindingType)) {\n structuralBindings.push(binding);\n } else if (binding.statePathName.includes(WILDCARD)) {\n // for ブロック内のバインディング → Content のバインディングとして登録済み\n continue;\n } else {\n normalBindings.push(binding);\n }\n }\n\n // 全バインディング(通常 + 構造)をアドレスに登録\n for (const binding of [...normalBindings, ...structuralBindings]) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n if (binding.bindingType !== 'event') {\n stateElement.setPathInfo(binding.statePathName, binding.bindingType);\n }\n }\n\n // for バインディングの lastListValue を初期値として設定\n // (次回の状態変化時に差分計算の基準になる)\n for (const binding of structuralBindings) {\n if (binding.bindingType === 'for') {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement) {\n stateElement.createState(\"readonly\", (state) => {\n const value = state[binding.statePathName];\n if (Array.isArray(value)) {\n setLastListValueByAbsoluteStateAddress(absAddr, value);\n }\n });\n }\n }\n }\n\n // 通常バインディングのみ初回値適用(構造バインディングはSSR描画済み)\n applyChangeFromBindings(normalBindings);\n\n // <wcs-ssr> を元に戻す\n for (const { el, parent, next } of ssrParents) {\n parent.insertBefore(el, next);\n }\n\n // hydrateProps 復元\n const restoredSsrElements = root.querySelectorAll(config.tagNames.ssr);\n for (const ssrNode of restoredSsrElements) {\n const ssrEl = ssrNode as Ssr;\n const props = ssrEl.hydrateProps;\n for (const [id, propMap] of Object.entries(props)) {\n const target = root.querySelector(`[data-wcs-ssr-id=\"${id}\"]`);\n if (!target) continue;\n for (const [propName, value] of Object.entries(propMap)) {\n (target as any)[propName] = value;\n }\n }\n }\n\n // ハイドレーション中の重複登録防止用属性を除去\n const completedEls = root.querySelectorAll('[data-wcs-completed]');\n for (const el of completedEls) {\n el.removeAttribute('data-wcs-completed');\n }\n\n return true;\n}\n\n/** @internal テスト用 */\nexport const __test = {\n collectSsrBlocks,\n collectBindingsFromLiveNodes,\n hydrateBlocks,\n findPlaceholderComment,\n restoreFragments,\n};\n","import { buildBindings } from \"./buildBindings\";\nimport { hydrateBindings } from \"./hydrateBindings\";\nimport { IStateElement } from \"./components/types\";\nimport { config, inSsr } from \"./config\";\nimport { raiseError } from \"./raiseError\";\n\nconst stateElementByNameByNode: WeakMap<Node, Map<string, IStateElement>> = new WeakMap();\nconst bindingsReadyByNode: WeakMap<Node, Promise<void>> = new WeakMap();\n\nexport function getStateElementByName(rootNode:Node, name: string): IStateElement | null {\n let stateElementByName = stateElementByNameByNode.get(rootNode);\n if (!stateElementByName) {\n return null;\n }\n return stateElementByName.get(name) || null;\n}\n\n/**\n * 指定された rootNode のバインディング初期化が完了するまで待機する Promise を返す。\n */\nexport function getBindingsReady(rootNode: Node): Promise<void> {\n return bindingsReadyByNode.get(rootNode) ?? Promise.resolve();\n}\n\nexport function setStateElementByName(rootNode:Node, name: string, element: IStateElement | null): void {\n\n let stateElementByName = stateElementByNameByNode.get(rootNode);\n\n if (element === null) {\n // 削除の場合、Mapが存在しない場合は何もしない\n if (!stateElementByName) {\n return;\n }\n stateElementByName.delete(name);\n if (stateElementByName.size === 0) {\n stateElementByNameByNode.delete(rootNode);\n }\n if (config.debug) {\n console.debug(`State element unregistered: name=\"${name}\"`);\n }\n } else {\n // 登録の場合\n if (!stateElementByName) {\n stateElementByName = new Map<string, IStateElement>();\n stateElementByNameByNode.set(rootNode, stateElementByName);\n // 初めてルートノードに登録する場合\n // enable-ssr 属性があり、サーバーサイドでない場合はハイドレーション\n const enableSsr = !inSsr() && (element as unknown as Element).hasAttribute?.('enable-ssr');\n if (rootNode.constructor.name === 'HTMLDocument' || rootNode.constructor.name === 'Document') {\n const ready = new Promise<void>((resolve) => {\n queueMicrotask(async () => {\n if (enableSsr) {\n const success = await hydrateBindings(rootNode as Document);\n if (!success) {\n await buildBindings(rootNode as Document);\n }\n } else {\n await buildBindings(rootNode as Document);\n }\n resolve();\n });\n });\n bindingsReadyByNode.set(rootNode, ready);\n } else if (rootNode.constructor.name === 'ShadowRoot') {\n const ready = new Promise<void>((resolve) => {\n queueMicrotask(async () => {\n await buildBindings(rootNode as ShadowRoot);\n resolve();\n });\n });\n bindingsReadyByNode.set(rootNode, ready);\n }\n }\n if (stateElementByName.has(name)) {\n raiseError(`State element with name \"${name}\" is already registered.`);\n }\n stateElementByName.set(name, element);\n if (config.debug) {\n console.debug(`State element registered: name=\"${name}\"`, element);\n }\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IFragmentInfo } from \"./types\";\n\nconst fragmentInfoByUUID = new Map<string, IFragmentInfo>();\n\nexport function setFragmentInfoByUUID(uuid: string, rootNode: Node, fragmentInfo: IFragmentInfo | null): void {\n if (fragmentInfo === null) {\n fragmentInfoByUUID.delete(uuid);\n } else {\n fragmentInfoByUUID.set(uuid, fragmentInfo);\n const bindingPartial = fragmentInfo.parseBindTextResult;\n const stateElement = getStateElementByName(rootNode, bindingPartial.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${bindingPartial.stateName}\" not found for fragment info.`);\n }\n stateElement.setPathInfo(bindingPartial.statePathName, bindingPartial.bindingType);\n for(const nodeInfo of fragmentInfo.nodeInfos) {\n for(const nodeBindingPartial of nodeInfo.parseBindTextResults) {\n const nodeStateElement = getStateElementByName(rootNode, nodeBindingPartial.stateName);\n if (nodeStateElement === null) {\n raiseError(`State element with name \"${nodeBindingPartial.stateName}\" not found for fragment info node.`);\n }\n nodeStateElement.setPathInfo(nodeBindingPartial.statePathName, nodeBindingPartial.bindingType);\n }\n }\n }\n}\n\nexport function getFragmentInfoByUUID(uuid: string): IFragmentInfo | null {\n return fragmentInfoByUUID.get(uuid) || null;\n}\n\nexport function getAllFragmentUUIDs(): string[] {\n return Array.from(fragmentInfoByUUID.keys());\n}","import { config } from \"../config\";\nimport { IState } from \"../types\";\nimport { VERSION } from \"../version\";\nimport { getAllFragmentUUIDs, getFragmentInfoByUUID } from \"../structural/fragmentInfoByUUID\";\nimport { getAllSsrPropertyNodes, getSsrProperties, clearSsrPropertyStore } from \"../apply/ssrPropertyStore\";\n\nexport interface ISsrElement {\n readonly name: string;\n readonly version: string;\n readonly stateData: IState;\n readonly templates: Map<string, HTMLTemplateElement>;\n readonly hydrateProps: Record<string, Record<string, unknown>>;\n getTemplate(uuid: string): HTMLTemplateElement | null;\n verifyVersion(): boolean;\n}\n\n// SSR コメントパターン\nconst SSR_PLACEHOLDER_COMMENT = /^@@wcs-(?:for|if|elseif|else):[^-]/;\nconst SSR_BLOCK_START = /^@@wcs-(for|if|elseif|else)-start:(.+)$/;\nconst SSR_BLOCK_END = /^@@wcs-(for|if|elseif|else)-end:(.+)$/;\nconst SSR_TEXT_START = /^@@wcs-text-start:(.+)$/;\n\nexport {\n SSR_PLACEHOLDER_COMMENT,\n SSR_BLOCK_START,\n SSR_BLOCK_END,\n SSR_TEXT_START,\n};\n\n/**\n * script 要素へ埋め込む JSON を HTML パーサから保護する。\n * HTML 直列化時、script の中身は生のまま出力されるため、state 値に\n * \"</script>\" や \"<!--\" を含む文字列があると script を脱出できてしまう。\n * \"<\" \">\" \"&\" と U+2028/U+2029 を JSON の \\uXXXX エスケープへ置換する\n * (JSON.parse では元の文字列と等価に復元される)。\n */\nfunction escapeJsonForScript(json: string): string {\n return json\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nexport class Ssr extends HTMLElement implements ISsrElement {\n private _stateData: IState | null = null;\n private _templates: Map<string, HTMLTemplateElement> | null = null;\n private _hydrateProps: Record<string, Record<string, unknown>> | null = null;\n\n get name(): string {\n return this.getAttribute('name') || 'default';\n }\n\n get version(): string {\n return this.getAttribute('version') || '';\n }\n\n get stateData(): IState {\n if (this._stateData === null) {\n this._stateData = this._loadStateData();\n }\n return this._stateData;\n }\n\n get templates(): Map<string, HTMLTemplateElement> {\n if (this._templates === null) {\n this._templates = this._loadTemplates();\n }\n return this._templates;\n }\n\n get hydrateProps(): Record<string, Record<string, unknown>> {\n if (this._hydrateProps === null) {\n this._hydrateProps = this._loadHydrateProps();\n }\n return this._hydrateProps;\n }\n\n getTemplate(uuid: string): HTMLTemplateElement | null {\n return this.templates.get(uuid) ?? null;\n }\n\n /**\n * サーバーの SSR バージョンとクライアントの state バージョンを検証する。\n * メジャー・マイナーバージョンが一致すればtrue。\n * version 属性がない場合は検証スキップ(true)。\n */\n verifyVersion(): boolean {\n const serverVersion = this.version;\n if (!serverVersion) return true;\n const serverParts = serverVersion.split('.');\n const clientParts = VERSION.split('.');\n // メジャー・マイナーが一致すれば互換\n return serverParts[0] === clientParts[0] && serverParts[1] === clientParts[1];\n }\n\n setStateData(data: IState): void {\n this._stateData = data;\n }\n\n setHydrateProps(props: Record<string, Record<string, unknown>>): void {\n this._hydrateProps = props;\n }\n\n private _loadStateData(): IState {\n const script = this.querySelector(\n `script[type=\"application/json\"]:not([data-wcs-ssr-props])`\n );\n if (!script) return {};\n try {\n return JSON.parse(script.textContent || '{}');\n } catch {\n return {};\n }\n }\n\n private _loadTemplates(): Map<string, HTMLTemplateElement> {\n const map = new Map<string, HTMLTemplateElement>();\n const templates = this.querySelectorAll<HTMLTemplateElement>('template[id]');\n for (const tpl of templates) {\n const id = tpl.getAttribute('id');\n if (id) {\n map.set(id, tpl);\n }\n }\n return map;\n }\n\n private _loadHydrateProps(): Record<string, Record<string, unknown>> {\n const script = this.querySelector('script[data-wcs-ssr-props]');\n if (!script) return {};\n try {\n return JSON.parse(script.textContent || '{}');\n } catch {\n return {};\n }\n }\n\n static findByName(root: Node, name: string): ISsrElement | null {\n const tagName = config.tagNames.ssr;\n const parentEl = root instanceof Element\n ? root\n : root instanceof Document\n ? root.documentElement\n : null;\n if (!parentEl) return null;\n const el = parentEl.querySelector(`${tagName}[name=\"${name}\"]`);\n return el as ISsrElement | null;\n }\n\n /**\n * stateData と構造テンプレート・プロパティから <wcs-ssr> の中身を構築する。\n * server パッケージの renderToString から呼ばれる。\n */\n /**\n * wcs-state 要素から $ プレフィックスや関数を除いたデータを抽出する。\n */\n static extractStateData(stateEl: Element): Record<string, any> {\n const raw = (stateEl as any).__state;\n if (!raw || typeof raw !== 'object') return {};\n const data: Record<string, any> = {};\n for (const [key, value] of Object.entries(raw)) {\n if (!key.startsWith('$') && typeof value !== 'function') {\n data[key] = value;\n }\n }\n return data;\n }\n\n static buildContent(ssrEl: Element, stateData: Record<string, any>): void {\n // 初期データ JSON\n const jsonScript = document.createElement('script');\n jsonScript.setAttribute('type', 'application/json');\n jsonScript.textContent = escapeJsonForScript(JSON.stringify(stateData));\n ssrEl.appendChild(jsonScript);\n\n // UUID で管理されているテンプレートを復元して格納\n const uuids = getAllFragmentUUIDs();\n for (const uuid of uuids) {\n const fragmentInfo = getFragmentInfoByUUID(uuid);\n if (!fragmentInfo) continue;\n\n const tpl = document.createElement('template');\n tpl.setAttribute('id', uuid);\n\n const bindResult = fragmentInfo.parseBindTextResult;\n const bindText = bindResult.bindingType === 'else'\n ? 'else:'\n : `${bindResult.bindingType}: ${bindResult.statePathName}`;\n tpl.setAttribute(config.bindAttributeName, bindText);\n\n const content = fragmentInfo.fragment.cloneNode(true) as DocumentFragment;\n tpl.content.appendChild(content);\n\n ssrEl.appendChild(tpl);\n }\n\n // 属性で代替不可なプロパティをハイドレーション用に格納\n const ssrNodes = getAllSsrPropertyNodes();\n if (ssrNodes.length > 0) {\n const propsData: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < ssrNodes.length; i++) {\n const node = ssrNodes[i];\n const entries = getSsrProperties(node);\n if (entries.length === 0) continue;\n const id = `wcs-ssr-${i}`;\n (node as Element).setAttribute('data-wcs-ssr-id', id);\n const props: Record<string, unknown> = {};\n for (const entry of entries) {\n props[entry.propName] = entry.value;\n }\n propsData[id] = props;\n }\n if (Object.keys(propsData).length > 0) {\n const propsScript = document.createElement('script');\n propsScript.setAttribute('type', 'application/json');\n propsScript.setAttribute('data-wcs-ssr-props', '');\n propsScript.textContent = escapeJsonForScript(JSON.stringify(propsData));\n ssrEl.appendChild(propsScript);\n }\n }\n\n clearSsrPropertyStore();\n }\n\n /**\n * SSR ブロック境界コメント (@@wcs-*-start/end) を除去する\n */\n static removeBlockBoundaryComments(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const toRemove: Comment[] = [];\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (SSR_BLOCK_START.test(comment.data) || SSR_BLOCK_END.test(comment.data)) {\n toRemove.push(comment);\n }\n }\n for (const comment of toRemove) {\n comment.remove();\n }\n }\n\n /**\n * SSR の構造プレースホルダーコメント (@@wcs-for:uuid 等) を除去する\n */\n static removeStructuralComments(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const toRemove: Comment[] = [];\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (SSR_PLACEHOLDER_COMMENT.test(comment.data)) {\n toRemove.push(comment);\n }\n }\n for (const comment of toRemove) {\n comment.remove();\n }\n }\n\n /**\n * SSR テキストバインディングコメントを復元する。\n * <!--@@wcs-text-start:path-->text<!--@@wcs-text-end:path-->\n * → <!--@@: path--> (バインディングシステムが認識する形式)\n */\n static restoreTextBindings(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const startComments: { comment: Comment, path: string }[] = [];\n\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n const match = SSR_TEXT_START.exec(comment.data);\n if (match) {\n startComments.push({ comment, path: match[1] });\n }\n }\n\n for (const { comment, path } of startComments) {\n const bindComment = document.createComment(`@@: ${path}`);\n comment.parentNode!.insertBefore(bindComment, comment);\n\n let sibling: Node | null = comment.nextSibling;\n comment.remove();\n\n const endPattern = `@@wcs-text-end:${path}`;\n while (sibling) {\n const next: Node | null = sibling.nextSibling;\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n sibling.parentNode!.removeChild(sibling);\n break;\n }\n sibling.parentNode!.removeChild(sibling);\n sibling = next;\n }\n }\n }\n\n /**\n * SSR DOM をクリーンアップし、buildBindings が動作できる状態に戻す。\n * バージョン不一致時のフォールバック用。\n *\n * 1. SSR ブロック境界コメント間のレンダリング済みノードを除去\n * 2. SSR テキストバインディングを @@: 形式に復元\n * 3. プレースホルダーコメントを <wcs-ssr> 内のテンプレートで差し替え\n * 4. data-wcs-ssr-id 属性を除去\n * 5. <wcs-ssr> を除去\n */\n static cleanupDom(root: Document): void {\n const body = document.body;\n\n // <wcs-ssr> からテンプレート UUID マップを構築(カスタム要素未定義でも動作するよう DOM 直接走査)\n const ssrElements = root.querySelectorAll(config.tagNames.ssr);\n const templateByUuid = new Map<string, HTMLTemplateElement>();\n for (const ssrNode of ssrElements) {\n const templates = ssrNode.querySelectorAll<HTMLTemplateElement>('template[id]');\n for (const tpl of templates) {\n const id = tpl.getAttribute('id');\n if (id) {\n templateByUuid.set(id, tpl);\n }\n }\n }\n\n // SSR ブロック境界コメント間のレンダリング済みノードと境界コメントを除去\n const walker1 = document.createTreeWalker(body, NodeFilter.SHOW_COMMENT);\n const startComments: Comment[] = [];\n while (walker1.nextNode()) {\n const comment = walker1.currentNode as Comment;\n if (SSR_BLOCK_START.test(comment.data)) {\n startComments.push(comment);\n }\n }\n for (const startComment of startComments) {\n const match = SSR_BLOCK_START.exec(startComment.data)!;\n const type = match[1];\n const info = match[2];\n const endPattern = `@@wcs-${type}-end:${info}`;\n let sibling = startComment.nextSibling;\n while (sibling) {\n const next = sibling.nextSibling;\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n sibling.remove();\n break;\n }\n sibling.remove();\n sibling = next;\n }\n startComment.remove();\n }\n\n // SSR テキストバインディングを @@: 形式に復元\n Ssr.restoreTextBindings(body);\n\n // プレースホルダーコメント (@@wcs-for:uuid 等) をテンプレートに差し替え\n const walker2 = document.createTreeWalker(body, NodeFilter.SHOW_COMMENT);\n const placeholders: { comment: Comment, uuid: string }[] = [];\n while (walker2.nextNode()) {\n const comment = walker2.currentNode as Comment;\n if (SSR_PLACEHOLDER_COMMENT.test(comment.data)) {\n const uuid = comment.data.split(':')[1];\n placeholders.push({ comment, uuid });\n }\n }\n for (const { comment, uuid } of placeholders) {\n const tpl = templateByUuid.get(uuid);\n if (tpl) {\n const restored = document.createElement('template') as HTMLTemplateElement;\n const bindAttr = tpl.getAttribute(config.bindAttributeName);\n if (bindAttr) restored.setAttribute(config.bindAttributeName, bindAttr);\n const imported = document.importNode(tpl.content, true);\n if (imported.childNodes.length > 0) {\n restored.content.appendChild(imported);\n } else {\n for (const child of Array.from(tpl.childNodes)) {\n restored.content.appendChild(document.importNode(child, true));\n }\n }\n comment.parentNode!.replaceChild(restored, comment);\n }\n }\n\n // data-wcs-ssr-id 属性を除去\n const ssrIdElements = root.querySelectorAll('[data-wcs-ssr-id]');\n for (const el of ssrIdElements) {\n el.removeAttribute('data-wcs-ssr-id');\n }\n\n // <wcs-ssr> を除去\n for (const el of ssrElements) {\n el.remove();\n }\n }\n}\n","import { IState } from \"../types\";\n\ntype ScriptModule = { default?: unknown };\n\nexport async function loadFromInnerScript(script: HTMLScriptElement, name: string): Promise<IState> {\n let scriptModule: ScriptModule | null = null;\n const uniq_comment = `\\n//# sourceURL=${name}\\n`;\n if (typeof URL.createObjectURL === 'function') {\n // Create a blob URL for the script and dynamically import it\n const blob = new Blob([script.text + uniq_comment], { type: \"application/javascript\" });\n const url = URL.createObjectURL(blob);\n try {\n scriptModule = await import(url) as ScriptModule;\n } finally {\n // Clean up blob URL to prevent memory leak\n URL.revokeObjectURL(url);\n }\n } else {\n // Fallback: Base64 encoding method (for test environment)\n // Convert script to Base64 and import via data: URL\n const b64 = btoa(String.fromCodePoint(...new TextEncoder().encode(script.text + uniq_comment)));\n scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\n }\n return (scriptModule && typeof scriptModule.default === 'object') ? scriptModule.default as IState : {};\n}\n","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport async function loadFromJsonFile(url: string): Promise<IState> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n raiseError(`Failed to fetch JSON file: ${response.statusText}`);\n }\n const data = await response.json();\n return data;\n } catch (e) {\n console.error('Failed to load JSON file:', e);\n return {};\n }\n}","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport async function loadFromScriptFile(url: string): Promise<IState> {\n try {\n const module = await import(/* @vite-ignore */ url);\n return module.default || {};\n } catch (e) {\n raiseError(`Failed to load script file: ${e}`);\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\n\nexport function loadFromScriptJson(id: string): IState {\n const script = document.getElementById(id) as HTMLScriptElement;\n if (script && script.type === 'application/json') {\n try {\n const data = JSON.parse(script.textContent || '{}');\n return data;\n } catch (e) {\n raiseError('Failed to parse JSON from script element:' + e);\n }\n }\n return {};\n}","import { IStateAddress } from \"../address/types\";\nimport { MAX_LOOP_DEPTH } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { ILoopContext, ILoopContextStack } from \"./types\";\n\ntype LoopContextCallback<T> = (loopContext: ILoopContext) => T | Promise<T>;\n\nclass LoopContextStack {\n private _loopContextStack: (ILoopContext | undefined)[] = Array(MAX_LOOP_DEPTH).fill(undefined);\n private _length: number = 0;\n\n createLoopContext(\n elementStateAddress: IStateAddress,\n callback: LoopContextCallback<void>\n ): void | Promise<void> {\n if (elementStateAddress.listIndex === null) {\n raiseError(`Cannot create loop context for a state address that does not have a list index.`);\n }\n const loopContext = elementStateAddress as ILoopContext;\n if (this._length >= MAX_LOOP_DEPTH) {\n raiseError(`Exceeded maximum loop context stack depth of ${MAX_LOOP_DEPTH}. Possible infinite loop.`);\n }\n const lastLoopContext = this._loopContextStack[this._length - 1];\n if (typeof lastLoopContext !== \"undefined\" ) {\n if (lastLoopContext.pathInfo.wildcardCount + 1 !== loopContext.pathInfo.wildcardCount) {\n raiseError(`Cannot push loop context for a list whose wildcard count is not exactly one more than the current active loop context.`);\n }\n // \n const prevWildcardPathInfo = loopContext.pathInfo.wildcardPathInfos[loopContext.pathInfo.wildcardPathInfos.length - 2];\n if (lastLoopContext.pathInfo !== prevWildcardPathInfo) {\n raiseError(`Cannot push loop context for a list whose parent wildcard path info does not match the current active loop context.`);\n }\n } else {\n if (loopContext.pathInfo.wildcardCount !== 1) {\n raiseError(`Cannot push loop context for a list with wildcard positions when there is no active loop context.`);\n }\n }\n this._loopContextStack[this._length] = loopContext;\n this._length++;\n let retValue : void | Promise<void> = void 0;\n try {\n retValue = callback(loopContext);\n } finally {\n if (retValue instanceof Promise) {\n retValue.finally(() => {\n this._length--;\n this._loopContextStack[this._length] = undefined;\n });\n } else {\n this._length--;\n this._loopContextStack[this._length] = undefined;\n }\n }\n return retValue;\n } \n}\n\nexport function createLoopContextStack(): ILoopContextStack {\n return new LoopContextStack();\n}\n\n","/**\n * `$commandTokens: [\"a\", \"b\", ...]` 配列宣言を解析し、宣言された名前群を Set で返す。\n *\n * 注入は行わず、proxy 側で `state.$command.<name>` として token を解決する設計。\n * (以前の実装は state 直下に各名前の getter を注入していたが、リアクティブ値との\n * 名前空間衝突を避け識別性を上げるため `$command` ネームスペース集約に切り替え。)\n *\n * 対応している宣言形式は **オブジェクトリテラル** のみ。\n * クラス本体に `static $commandTokens = [...]` を書く形式や、\n * クラスのプロトタイプ上の同名コマンドの検出は現状サポートしない。\n */\n\nimport { STATE_COMMAND_NAMESPACE_NAME, STATE_COMMAND_TOKENS_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport function processCommandTokensDeclaration(state: IState): Set<string> {\n const names = new Set<string>();\n const declared = (state as Record<string, unknown>)[STATE_COMMAND_TOKENS_NAME];\n if (typeof declared === \"undefined\") {\n return names;\n }\n if (!Array.isArray(declared)) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} must be an array of strings.`);\n }\n for (const name of declared) {\n if (typeof name !== \"string\" || name.length === 0) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entries must be non-empty strings.`);\n }\n if (name === STATE_COMMAND_NAMESPACE_NAME) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entry \"${name}\" conflicts with the reserved namespace name \"${STATE_COMMAND_NAMESPACE_NAME}\".`);\n }\n if (names.has(name)) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entry \"${name}\" is duplicated.`);\n }\n names.add(name);\n }\n return names;\n}\n","import { IStateElement } from \"../components/types\";\nimport { CommandToken } from \"./CommandToken\";\nimport { ICommandToken } from \"./types\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, ICommandToken>> = new WeakMap();\n\nexport function getOrCreateCommandToken(stateElement: IStateElement, name: string): ICommandToken {\n let registry = registryByStateElement.get(stateElement);\n if (typeof registry === \"undefined\") {\n registry = new Map<string, ICommandToken>();\n registryByStateElement.set(stateElement, registry);\n }\n let token = registry.get(name);\n if (typeof token === \"undefined\") {\n token = new CommandToken(name);\n registry.set(name, token);\n }\n return token;\n}\n\nexport function clearCommandTokenRegistry(stateElement: IStateElement): void {\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * `state.$command` でアクセスされる command token の namespace proxy を提供する。\n *\n * - state element 単位で memo 化し、同一 stateElement なら同じ proxy が返る。\n * - 宣言された名前 (`$commandTokens` に列挙されたもの) のみ token を返す。\n * 宣言外の名前にアクセスした場合は undefined を返す。\n * (`constructor` / `Symbol.toPrimitive` / `then` など内部システムが触るキーで\n * 例外を投げないため。typo は subsequent な `.emit()` 呼び出しで TypeError として\n * 間接的に表面化する。)\n * - token そのものの memo は `getOrCreateCommandToken` 側に集約されており、\n * namespace proxy は薄いゲートウェイとして振る舞う。\n */\n\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getOrCreateCommandToken } from \"./commandTokenRegistry\";\nimport { ICommandToken } from \"./types\";\n\nconst namespaceProxyByStateElement: WeakMap<IStateElement, object> = new WeakMap();\n\nexport function getCommandNamespace(stateElement: IStateElement): object {\n const cached = namespaceProxyByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = new Proxy(Object.create(null), {\n get(_target: object, prop: PropertyKey): ICommandToken | undefined {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n if (!stateElement.commandTokenNames.has(prop)) {\n return undefined;\n }\n return getOrCreateCommandToken(stateElement, prop);\n },\n has(_target: object, prop: PropertyKey): boolean {\n return typeof prop === \"string\" && stateElement.commandTokenNames.has(prop);\n },\n ownKeys(): string[] {\n return Array.from(stateElement.commandTokenNames);\n },\n getOwnPropertyDescriptor(_target: object, prop: PropertyKey): PropertyDescriptor | undefined {\n if (typeof prop === \"string\" && stateElement.commandTokenNames.has(prop)) {\n return {\n configurable: true,\n enumerable: true,\n value: getOrCreateCommandToken(stateElement, prop),\n };\n }\n return undefined;\n },\n set(): boolean {\n raiseError(`$command namespace is read-only; assigning to it is not allowed.`);\n },\n deleteProperty(): boolean {\n raiseError(`$command namespace is read-only; deleting from it is not allowed.`);\n },\n });\n namespaceProxyByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\nexport function clearCommandNamespace(stateElement: IStateElement): void {\n namespaceProxyByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n namespaceProxyByStateElement,\n};\n","/**\n * `$eventTokens: [\"a\", \"b\", ...]` 配列宣言を解析し、宣言された名前群を Set で返す。\n *\n * event-token は command-token の双対(element→state 方向)。要素が dispatch する\n * イベントを `eventToken.<prop>: <name>` で token に流し、state 側は `$on` マップで受ける。\n * ここで宣言された名前のみが `eventToken.X` / `$on` の有効なチャネル名になる(typo 耐性)。\n *\n * 対応している宣言形式は **オブジェクトリテラル** のみ。\n */\n\nimport { STATE_EVENT_TOKENS_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport function processEventTokensDeclaration(state: IState): Set<string> {\n const names = new Set<string>();\n const declared = (state as Record<string, unknown>)[STATE_EVENT_TOKENS_NAME];\n if (typeof declared === \"undefined\") {\n return names;\n }\n if (!Array.isArray(declared)) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} must be an array of strings.`);\n }\n for (const name of declared) {\n if (typeof name !== \"string\" || name.length === 0) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} entries must be non-empty strings.`);\n }\n if (names.has(name)) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} entry \"${name}\" is duplicated.`);\n }\n names.add(name);\n }\n return names;\n}\n","/**\n * `$on: { <name>: (state, event, ...listIndexes) => {...} }` マップを解析し、\n * 各ハンドラを対応する event-token に subscribe する(state 側の受信配線)。\n *\n * - `$on` のキーは `$eventTokens` で宣言済みでなければならない(typo 耐性)。\n * - 各値は関数でなければならない。\n * - 引数規約は `(state, event, ...listIndexes)`。`this` 束縛は行わず引数で state を渡すため\n * アロー関数で書ける(command-token の emit 規約と対称)。\n *\n * `$eventTokens` で宣言されたが `$on` に対応が無い token は subscriber ゼロ(emit は no-op)。\n */\n\nimport { IStateElement } from \"../components/types\";\nimport { STATE_ON_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\nimport { TokenSubscriber } from \"../token/Token\";\nimport { getOrCreateEventToken } from \"./eventTokenRegistry\";\n\nexport function processOnDeclaration(\n stateElement: IStateElement,\n state: IState,\n eventTokenNames: ReadonlySet<string>,\n): void {\n const declared = (state as Record<string, unknown>)[STATE_ON_NAME];\n if (typeof declared === \"undefined\") {\n return;\n }\n if (typeof declared !== \"object\" || declared === null) {\n raiseError(`${STATE_ON_NAME} must be an object mapping event-token names to handler functions.`);\n }\n for (const [name, handler] of Object.entries(declared as Record<string, unknown>)) {\n if (!eventTokenNames.has(name)) {\n raiseError(`${STATE_ON_NAME} entry \"${name}\" is not declared in $eventTokens.`);\n }\n if (typeof handler !== \"function\") {\n raiseError(`${STATE_ON_NAME} entry \"${name}\" must be a function.`);\n }\n const token = getOrCreateEventToken(stateElement, name);\n token.subscribe(handler as TokenSubscriber);\n }\n}\n","/**\n * stream/lastNotified.ts\n *\n * 「最後に通知した観測値」台帳 — DOM binding / $updatedCallback(観測層)が\n * 最後に見た status・error(docs/state-streams-design.md §4-3)。\n *\n * 通知の same-value 判定を entry フィールドとの比較で行うと、再 set\n * (clearStreamRegistry → 新 entry 生成)を跨いだ陳腐化を検出できない\n * (error 表示中に再 set すると新 entry は error=null で生まれるため\n * null → null と誤判定して $postUpdate が落ち、DOM に旧 error が残る)。\n * そのため通知 dedup は entry の寿命ではなく stateElement の寿命で持つ\n * (ただし再 set で新宣言から消えた名前のエントリは pruneLastNotified で削除する —\n * 同名にしか dedup は要らず、放置すると台帳が単調増加するため)。\n * 未通知(初回)の基準値は宣言直後の観測初期値と同じ { idle, null }。\n *\n * さらに abortAllStreams(§5-1)は registry entry を通知なしで idle / null に\n * 直接ミューテーションするため、観測層が「台帳の値」と「idle / null」の\n * どちらを見たか確定できなくなる(binding / computed の fresh 読みは通知が\n * なくても他パスの drain で走る)。その乖離フィールドは invalidateLastNotified\n * で UNCERTAIN に無効化し、次回 updateStreamStatus の同値判定が必ず\n * 「変化あり」になるようにする(再接続ウィンドウ内の idle 描画が恒久陳腐化\n * しないための不変条件、§4-3)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport type { StreamStatus } from \"./types\";\n\n/**\n * 無通知ミューテーション後の「観測値が確定できない」印。\n * どの実値とも一致しないため、次回の通知 dedup(`!==` / `Object.is`)を強制的に解除する。\n */\nconst UNCERTAIN: unique symbol = Symbol(\"wcs-stream-last-notified-uncertain\");\n\nexport interface ILastNotified {\n status: StreamStatus | typeof UNCERTAIN;\n error: unknown;\n}\n\nconst lastNotifiedByStateElement = new WeakMap<IStateElement, Map<string, ILastNotified>>();\n\n/**\n * 最後に通知した観測値を返す。未通知なら基準値 { idle, null }。\n */\nexport function getLastNotified(stateElement: IStateElement, name: string): ILastNotified {\n return (\n lastNotifiedByStateElement.get(stateElement)?.get(name) ?? { status: \"idle\", error: null }\n );\n}\n\n/**\n * 通知した観測値を記録する(updateStreamStatus が $postUpdate 発行と同時に呼ぶ)。\n */\nexport function setLastNotified(\n stateElement: IStateElement,\n name: string,\n status: StreamStatus,\n error: unknown,\n): void {\n let lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n lastMap = new Map();\n lastNotifiedByStateElement.set(stateElement, lastMap);\n }\n lastMap.set(name, { status, error });\n}\n\n/**\n * 再 set(clearStreamRegistry → processStreamsDeclaration)後に呼び、新宣言に\n * 存在しない名前の台帳エントリを削除する。台帳は stateElement の寿命で生存するが\n * (§4-3 の再 set・再接続跨ぎ dedup)、それが必要なのは同名エントリのみで、\n * 旧宣言にしか無い名前は以後どの通知経路(updateStreamStatus)からも参照されない。\n * prune しないと、再 set のたびに異なる stream 名を使うステートで台帳が\n * stateElement の寿命の間単調増加する。\n * 既知の許容: prune 後に同名を再宣言した場合、dedup は基準値 { idle, null } から\n * やり直しになる(宣言削除時の binding 陳腐化が §4-4 の既知エッジである以上、\n * 再宣言は新規宣言と同じ扱いでよい)。\n */\nexport function pruneLastNotified(stateElement: IStateElement, liveNames: ReadonlySet<string>): void {\n const lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n return;\n }\n for (const name of lastMap.keys()) {\n if (!liveNames.has(name)) {\n lastMap.delete(name);\n }\n }\n}\n\n/**\n * 無通知ミューテーション(abortAllStreams の idle / null 直接書き換え)の直後に呼び、\n * 台帳のうちミューテーション後の値と一致しないフィールドを UNCERTAIN に無効化する。\n * 一致しているフィールド(観測層がどちらを見ても同じ値)は dedup を維持する\n * (例: error が null のままなら再接続時に $streamError.<name> の余計な通知は出ない)。\n */\nexport function invalidateLastNotified(stateElement: IStateElement, name: string): void {\n const lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n return;\n }\n const last = lastMap.get(name);\n if (typeof last === \"undefined\") {\n // 未通知: 基準値 { idle, null } はミューテーション後の値と一致するため乖離しない\n return;\n }\n lastMap.set(name, {\n status: last.status === \"idle\" ? last.status : UNCERTAIN,\n error: Object.is(last.error, null) ? null : UNCERTAIN,\n });\n}\n\nexport const __private__ = {\n lastNotifiedByStateElement,\n UNCERTAIN,\n};\n","/**\n * stream/activeStateElements.ts\n *\n * 起動中(startStreams 済み・未切断)の stateElement の列挙用 Set\n * (docs/state-streams-design.md §3-2)。\n *\n * streamRegistry の WeakMap は列挙不能のため、updater の drain リスナーが\n * 「どの stateElement の entry と batch を交差させるか」を知るには\n * 列挙可能な strong Set が別途必要になる。lastNotified.ts と同じ\n * 「import 循環回避の小モジュール」パターン\n * (streamRegistry → activeStateElements ← streamRuntime の一方向依存に保つ)。\n *\n * リーク防止の不変条件(strong Set が切断済み要素の GC を妨げないための連動):\n * - add は startStreams(streamRuntime.ts)だけが行う\n * (eager 起動=connect 時、および接続中の `_state` 再 set 時の再起動)。\n * - delete は abortAllStreams / clearStreamRegistry(streamRegistry.ts)が行う。\n * disconnect(disconnectedCallback → abortAllStreams)と `_state` 再 set\n * (clearStreamRegistry → processStreamsDeclaration → 接続中なら startStreams で\n * 再 add)の両経路が必ずここを通るため、「Set に居る = 接続中かつ起動済み」が\n * 常に保たれ、切断済み stateElement への強参照は残らない。\n * 設計書 §3-2 の「未接続(disconnect 済み)の stateElement の entry は restart\n * しない」はこの不変条件で担保される。\n */\n\nimport type { IStateElement } from \"../components/types\";\n\nconst activeStateElements = new Set<IStateElement>();\n\n/**\n * 起動中 stateElement として登録する(startStreams 専用。不変条件はモジュールヘッダ参照)。\n */\nexport function addActiveStateElement(stateElement: IStateElement): void {\n activeStateElements.add(stateElement);\n}\n\n/**\n * 起動中 stateElement から外す(abortAllStreams / clearStreamRegistry 専用)。\n */\nexport function deleteActiveStateElement(stateElement: IStateElement): void {\n activeStateElements.delete(stateElement);\n}\n\n/**\n * 起動中 stateElement を列挙する(drain リスナーの交差判定用)。\n */\nexport function getActiveStateElements(): ReadonlySet<IStateElement> {\n return activeStateElements;\n}\n\nexport const __private__ = {\n activeStateElements,\n};\n","/**\n * stream/streamRegistry.ts\n *\n * `$streams` の registry(docs/state-streams-design.md §2-1 / §5)。\n * eventTokenRegistry と対称の WeakMap registry。\n *\n * - status / error の正本は registry entry(state オブジェクト上に実プロパティは持たない)。\n * - disconnect 時は abortAllStreams(abort のみ・registry 保持)、\n * `_state` 再 set 時のみ clearStreamRegistry(abort + 全削除)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport { deleteActiveStateElement } from \"./activeStateElements\";\nimport { invalidateLastNotified } from \"./lastNotified\";\nimport type { IStreamEntry } from \"./types\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, IStreamEntry>> = new WeakMap();\n\n/**\n * stream entry 群を置換登録する(`_state` セッターからの再構築で丸ごと差し替える)。\n */\nexport function setStreamEntries(stateElement: IStateElement, entries: Map<string, IStreamEntry>): void {\n registryByStateElement.set(stateElement, entries);\n}\n\n/**\n * 登録済みの stream entry 群を返す。未登録なら空 Map を返す(registry への登録はしない)。\n */\nexport function getStreamEntries(stateElement: IStateElement): Map<string, IStreamEntry> {\n return registryByStateElement.get(stateElement) ?? new Map<string, IStreamEntry>();\n}\n\n/**\n * 全 stream を abort して idle に戻す(設計書 §5-1)。registry は保持する。\n *\n * disconnectedCallback(切断時)に呼ばれるため、status / error の反映は\n * proxy / $postUpdate を使わず entry への直接ミューテーションで行う\n * (切断済みで binding 更新は不要かつ rootNode が無い)。\n *\n * 無通知ミューテーションは「最後に通知した観測値」台帳(stream/lastNotified.ts)\n * と registry を乖離させるため、同時に台帳側を invalidate する。これを怠ると\n * 再接続ウィンドウ内の fresh 読み(他パスの drain での getter 再計算など)が\n * 描画した idle に対し、restart の updateStreamStatus(\"active\") が切断前の\n * 通知値と同値判定されて skip され、DOM が恒久的に陳腐化する(設計書 §4-3)。\n */\nexport function abortAllStreams(stateElement: IStateElement): void {\n // 依存駆動 restart の対象から外す(切断済み stateElement は restart しない、\n // 設計書 §3-2。add 側は startStreams — stream/activeStateElements.ts の\n // リーク防止不変条件を参照)。registry の有無に関わらず必ず外す。\n deleteActiveStateElement(stateElement);\n const entries = registryByStateElement.get(stateElement);\n if (typeof entries === \"undefined\") {\n return;\n }\n for (const entry of entries.values()) {\n entry.controller?.abort();\n entry.controller = null;\n entry.status = \"idle\";\n entry.error = null;\n invalidateLastNotified(stateElement, entry.name);\n }\n}\n\n/**\n * 全 stream を abort したうえで registry から削除する(`_state` 再 set 時の再配線用、設計書 §5-2)。\n */\nexport function clearStreamRegistry(stateElement: IStateElement): void {\n abortAllStreams(stateElement);\n // abortAllStreams が既に delete 済みだが、「clear = 全削除でも必ず restart 対象から\n // 外れる」不変条件を将来の abortAllStreams の変更から独立に保証するため明示的に呼ぶ。\n deleteActiveStateElement(stateElement);\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * stream/processStreamsDeclaration.ts\n *\n * `$streams: { <name>: { args?, source, fold?, initial? } }` 宣言マップを解析し、\n * IStreamEntry を構築して streamRegistry に一括登録する\n * (docs/state-streams-design.md §1-1 / §1-2 / §1-3)。\n *\n * - バリデーション(§1-2): 違反は raiseError。\n * - 名前はフラットなプロパティ名のみ(空文字 / `.`(DELIMITER)/ `*`(WILDCARD)/ 先頭 `$` を禁止)。\n * - Object.prototype の継承名(`__proto__` / `constructor` / `toString` 等)を禁止\n * (own key でなくても `in` 判定が真になり、実体化 skip + 起動時 Reflect.set の\n * 継承 setter 化 — `__proto__` は prototype 差し替え — を引き起こすため)。\n * - getter / setter として宣言済みのパスとの衝突を禁止(getterPaths / setterPaths を検査)。\n * - `source` は関数必須。`fold` は(あれば)関数。`fold` があるのに `initial` が無ければエラー\n * (reduce は initial 必須。`initial` の有無は in 演算子で判定)。`args` は(あれば)関数。\n * - fold 省略時は latest(`(_acc, chunk) => chunk`)を注入する(§0 決定レコード)。\n * - 値プロパティ実体化(§1-3): `state[name]` が未定義なら `initial`\n * (fold 無しなら undefined)でデータプロパティとして初期化する。\n * ユーザーが同名プロパティを先に宣言していた場合は上書きしない\n * (起動時の initial リセットは streamRuntime 側の責務)。\n * - 通知 dedup 台帳の prune(§4-3): 新宣言に存在しない名前の lastNotified エントリを\n * 削除する(台帳は stateElement 寿命 — 再 set 跨ぎ dedup が必要なのは同名のみ)。\n *\n * 呼び出しは stateElement.getterPaths / setterPaths の確定後であること\n * (State の `_state` セッターが getStateInfo の反映より後に呼ぶことで保証する)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport { DELIMITER, STATE_STREAMS_NAME, WILDCARD } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport type { IState } from \"../types\";\nimport { pruneLastNotified } from \"./lastNotified\";\nimport { setStreamEntries } from \"./streamRegistry\";\nimport type { IStreamDefinition, IStreamEntry, StreamFold, StreamSource } from \"./types\";\n\n/** fold 省略時に注入される既定 fold(latest = 最新チャンクで置換) */\nconst latestFold: StreamFold = (_acc, chunk) => chunk;\n\n/** `$streams` 無し宣言の prune 用(旧宣言の全名前が残骸になる) */\nconst NO_STREAM_NAMES: ReadonlySet<string> = new Set<string>();\n\nexport function processStreamsDeclaration(stateElement: IStateElement, state: IState): void {\n const declared = (state as Record<string, unknown>)[STATE_STREAMS_NAME];\n if (typeof declared === \"undefined\") {\n // $streams 無しの再 set でも旧宣言の名前は通知 dedup 台帳の残骸になるため prune する\n pruneLastNotified(stateElement, NO_STREAM_NAMES);\n return;\n }\n if (typeof declared !== \"object\" || declared === null) {\n raiseError(`${STATE_STREAMS_NAME} must be an object mapping stream names to stream definitions.`);\n }\n const entries = new Map<string, IStreamEntry>();\n for (const [name, def] of Object.entries(declared as Record<string, unknown>)) {\n if (name.length === 0) {\n raiseError(`${STATE_STREAMS_NAME} entry name must be a non-empty string.`);\n }\n if (name.includes(DELIMITER)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be a flat property name (\"${DELIMITER}\" is not allowed).`);\n }\n if (name.includes(WILDCARD)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be a flat property name (\"${WILDCARD}\" is not allowed).`);\n }\n if (name.startsWith(\"$\")) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must not start with \"$\" (reserved namespace).`);\n }\n // Object.prototype の継承名(__proto__ / constructor / toString 等)は一律拒否する。\n // own key でないのに `name in state` が真になるため実体化(§1-3)が skip され、\n // 起動時の initial リセット(Reflect.set)が継承 setter に化ける\n // (特に __proto__ は state の prototype を差し替える)ため、名前検査の防衛線で落とす(§1-2)。\n if (name in Object.prototype) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must not be a property name inherited from Object.prototype (e.g. \"__proto__\", \"constructor\").`);\n }\n if (stateElement.getterPaths.has(name)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" conflicts with a getter declared on the state.`);\n }\n if (stateElement.setterPaths.has(name)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" conflicts with a setter declared on the state.`);\n }\n if (typeof def !== \"object\" || def === null) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be an object ({ args?, source, fold?, initial? }).`);\n }\n const definition = def as Record<string, unknown>;\n if (typeof definition.source !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" source must be a function.`);\n }\n const hasFold = typeof definition.fold !== \"undefined\";\n if (hasFold && typeof definition.fold !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" fold must be a function.`);\n }\n if (hasFold && !(\"initial\" in definition)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" requires \"initial\" when fold is specified (reduce needs a seed value).`);\n }\n const hasArgs = typeof definition.args !== \"undefined\";\n if (hasArgs && typeof definition.args !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" args must be a function.`);\n }\n const entry: IStreamEntry = {\n name,\n definition: {\n args: (definition.args as IStreamDefinition[\"args\"] | undefined) ?? null,\n source: definition.source as StreamSource,\n fold: (definition.fold as StreamFold | undefined) ?? latestFold,\n initial: definition.initial,\n },\n status: \"idle\",\n error: null,\n controller: null,\n depAddresses: new Set(),\n };\n // 値プロパティ実体化(§1-3): ユーザーが同名プロパティを先に宣言していたら上書きしない\n if (!(name in state)) {\n state[name] = entry.definition.initial;\n }\n entries.set(name, entry);\n }\n setStreamEntries(stateElement, entries);\n // 新宣言に存在しない名前の通知 dedup 台帳エントリを prune する\n // (同名は保持 = §4-3 の再 set 跨ぎ dedup 契約を維持。stream/lastNotified.ts 参照)\n pruneLastNotified(stateElement, new Set(entries.keys()));\n}\n","/**\n * stream/streamNamespace.ts\n *\n * `$streamStatus` / `$streamError` の read-only namespace proxy\n * (docs/state-streams-design.md §4-1 / §4-2)。commandNamespace と対称。\n *\n * - state element 単位で memo 化し、同一 stateElement なら同じ proxy が返る。\n * - 宣言された stream 名(`$streams` に列挙されたもの)のみ registry entry の\n * status / error を返す。宣言外の名前・Symbol キーは undefined\n * (`then` / `constructor` 等を内部機構が触っても throw しない寛容規約、\n * $command と同じ)。\n * - 値は memo しない: proxy は getStreamEntries を毎回読む thin gateway\n * (status / error は runtime が随時書き換えるため。registry entry が正本、§2-1)。\n * - set / deleteProperty は raiseError。setByAddress の親走査が namespace proxy に\n * 到達したときの Reflect.set もここで落ちる(書き込み防御 S11 の終端)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport {\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { getStreamEntries } from \"./streamRegistry\";\nimport type { IStreamEntry } from \"./types\";\n\nconst statusNamespaceByStateElement: WeakMap<IStateElement, object> = new WeakMap();\nconst errorNamespaceByStateElement: WeakMap<IStateElement, object> = new WeakMap();\n\nfunction createStreamNamespaceProxy(\n stateElement: IStateElement,\n namespaceName: string,\n pick: (entry: IStreamEntry) => unknown,\n): object {\n return new Proxy(Object.create(null), {\n get(_target: object, prop: PropertyKey): unknown {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n const entry = getStreamEntries(stateElement).get(prop);\n if (typeof entry === \"undefined\") {\n return undefined;\n }\n return pick(entry);\n },\n has(_target: object, prop: PropertyKey): boolean {\n return typeof prop === \"string\" && getStreamEntries(stateElement).has(prop);\n },\n ownKeys(): string[] {\n return Array.from(getStreamEntries(stateElement).keys());\n },\n getOwnPropertyDescriptor(_target: object, prop: PropertyKey): PropertyDescriptor | undefined {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n const entry = getStreamEntries(stateElement).get(prop);\n if (typeof entry === \"undefined\") {\n return undefined;\n }\n return {\n configurable: true,\n enumerable: true,\n value: pick(entry),\n };\n },\n set(): boolean {\n raiseError(`${namespaceName} namespace is read-only; assigning to it is not allowed.`);\n },\n deleteProperty(): boolean {\n raiseError(`${namespaceName} namespace is read-only; deleting from it is not allowed.`);\n },\n });\n}\n\nexport function getStreamStatusNamespace(stateElement: IStateElement): object {\n const cached = statusNamespaceByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = createStreamNamespaceProxy(\n stateElement,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n (entry) => entry.status,\n );\n statusNamespaceByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\nexport function getStreamErrorNamespace(stateElement: IStateElement): object {\n const cached = errorNamespaceByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = createStreamNamespaceProxy(\n stateElement,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n (entry) => entry.error,\n );\n errorNamespaceByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\n/**\n * 両 namespace proxy の memo を破棄する(clearCommandNamespace と対称)。\n * disconnectedCallback と `_state` 再 set 時に呼ばれる。\n */\nexport function clearStreamNamespace(stateElement: IStateElement): void {\n statusNamespaceByStateElement.delete(stateElement);\n errorNamespaceByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n statusNamespaceByStateElement,\n errorNamespaceByStateElement,\n};\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { applyChangeFromBindings } from \"../apply/applyChangeFromBindings\";\nimport { getBindingSetByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { IBindingInfo } from \"../types\";\n\n/**\n * drain(_applyChange)終了通知のリスナー(docs/state-streams-design.md §3-2)。\n * バッチ内の更新アドレス(AbsoluteStateAddress のインスタンス同一性で\n * dedup 済みの Set)を受け取る。stream runtime の依存駆動 restart が\n * この通知を交差判定の入力にする。\n */\nexport type UpdateBatchListener = (batch: ReadonlySet<IAbsoluteStateAddress>) => void;\n\nconst updateBatchListeners: Set<UpdateBatchListener> = new Set();\n\n/**\n * drain 終了リスナーを登録する。\n */\nexport function registerUpdateBatchListener(listener: UpdateBatchListener): void {\n updateBatchListeners.add(listener);\n}\n\n/**\n * drain 終了リスナーを解除する(テスト間の分離用)。\n */\nexport function unregisterUpdateBatchListener(listener: UpdateBatchListener): void {\n updateBatchListeners.delete(listener);\n}\n\n/**\n * 全リスナーに drain のバッチを通知する。\n * リスナーの throw は握りつぶさない(内部バグの隠蔽防止)。\n * stream 側リスナーが entry ごとに自前で try/catch する契約(設計書 §3-2)。\n */\nfunction notifyUpdateBatchListeners(batch: ReadonlySet<IAbsoluteStateAddress>): void {\n for (const listener of updateBatchListeners) {\n listener(batch);\n }\n}\n\nclass Updater {\n private _queueAbsoluteAddresses: IAbsoluteStateAddress[] = [];\n constructor() {\n }\n\n enqueueAbsoluteAddress(absoluteAddress: IAbsoluteStateAddress): void {\n const requireStartProcess = this._queueAbsoluteAddresses.length === 0;\n this._queueAbsoluteAddresses.push(absoluteAddress);\n if (requireStartProcess) {\n queueMicrotask(() => {\n const absoluteAddresses = this._queueAbsoluteAddresses;\n this._queueAbsoluteAddresses = [];\n this._applyChange(absoluteAddresses);\n });\n }\n }\n\n // テスト用に公開\n testApplyChange(absoluteAddresses: IAbsoluteStateAddress[]): void {\n this._applyChange(absoluteAddresses);\n }\n\n private _applyChange(absoluteAddresses: IAbsoluteStateAddress[]): void {\n // Note: AbsoluteStateAddress はキャッシュされているため、\n // 同一の (stateName, address) は同じインスタンスとなり、\n // Set による重複排除が正しく機能する \n const absoluteAddressSet = new Set(absoluteAddresses);\n const processBindings: IBindingInfo[] = [];\n for (const absoluteAddress of absoluteAddressSet) {\n const bindings = getBindingSetByAbsoluteStateAddress(absoluteAddress);\n for(const binding of bindings) {\n if (binding.replaceNode.isConnected === false) {\n // 切断されているバインディングは無視\n continue;\n }\n processBindings.push(binding);\n }\n }\n applyChangeFromBindings(\n processBindings\n );\n // drain 終了フック: binding 適用後に dedup 済みバッチを通知する(設計書 §3-2)。\n // testApplyChange も同じ _applyChange を通るため、テストから同期に駆動できる。\n notifyUpdateBatchListeners(absoluteAddressSet);\n }\n\n}\n\nconst updater = new Updater();\n\nexport function getUpdater(): Updater {\n return updater;\n}\n\n// テスト用にprivateメソッドを公開\nexport const __private__ = {\n Updater,\n};\n","/**\n * stream/argsTrace.ts\n *\n * `$streams` の args トレース(依存捕捉、docs/state-streams-design.md §3-1)。\n *\n * - モジュールスコープの collector を立てて readonly proxy 上で args を評価し、\n * getByAddress を通った読みを絶対アドレス(IAbsoluteStateAddress)として捕捉する。\n * AbsolutePathInfo / AbsoluteStateAddress は両方キャッシュ済みのため、捕捉した\n * アドレスは drain バッチと Set.has のインスタンス同一性で O(1) 照合できる(§2-1)。\n * - collectStreamDependency は getByAddress のホットパスから毎読み呼ばれるため、\n * collector === null なら即 return し、それ以外の計算を一切しない。\n * - 起動・restart のたびに traceArgs が呼ばれ、成功時は entry.depAddresses を\n * 丸ごと置換する(per-run の動的再捕捉)。失敗時は前回成功 run の検証済み\n * 捕捉を保持する(§2-2 の「error からも依存変化で restart」を保つ)。\n * - lastNotified.ts と同じく import 循環回避のための小モジュール\n * (getByAddress → argsTrace ← streamRuntime の一方向依存に保つ)。\n */\n\nimport { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport type { IAbsoluteStateAddress, IStateAddress } from \"../address/types\";\nimport type { IStateElement } from \"../components/types\";\nimport {\n DELIMITER,\n STATE_STREAMS_NAME,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport type { IStreamEntry } from \"./types\";\n\n/** トレース中のみ非 null。getByAddress を通った読みの絶対アドレスが溜まる。 */\nlet collector: Set<IAbsoluteStateAddress> | null = null;\n\n/**\n * getByAddress の入口(checkDependency 直後)から毎読み呼ばれるフック。\n * トレース外(collector === null)では何もしない。\n */\nexport function collectStreamDependency(stateElement: IStateElement, address: IStateAddress): void {\n if (collector === null) {\n return;\n }\n const absolutePathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n collector.add(createAbsoluteStateAddress(absolutePathInfo, address.listIndex));\n}\n\n/**\n * args を readonly proxy で同期評価し、読まれたパスを entry.depAddresses に\n * 丸ごと置換で再捕捉する(§3-1)。評価値(source の第 1 引数になる)を返す。\n *\n * - args === null(宣言で省略)なら depAddresses を clear して undefined\n * (依存なし = 起動後 restart しない)。\n * - 検査(違反は raiseError):\n * (a) 評価値が Promise(同期契約違反)\n * (b) 自己依存 — `<name>` / `$streamStatus.<name>` / `$streamError.<name>` の読み\n * (restart の自己書き込みで再発火する無限ループ、S8)\n * (c) wildcard を含むパスの読み(`$getAll` 等も同様。第 1 段スコープ外)\n * - 失敗時(args のユーザー例外・検査違反)は今回の捕捉(captured)を採用せず\n * 伝播し、entry.depAddresses には**前回成功 run の検証済み捕捉を保持する**。\n * これにより drain リスナーが throw を error 経路に正規化したあとも、依存の\n * 書き込みで再試行できる(§2-2「done / error からも依存変化で restart」——\n * 一時的な args throw で stream が恒久固着しない)。ループ安全性:\n * 保持されるのは前回**成功** run の捕捉のみ(自己依存・wildcard 検査済み)で\n * 自分の `<name>` / `$streamStatus.<name>` / `$streamError.<name>` を含み得ず、\n * traceArgs throw 時の startStream は initial リセットに到達しないため、\n * error 正規化の書き込みが保持 deps に再 hit することはない。再試行は依存\n * 書き込み 1 回につき高々 1 回で有界。未検査の captured を採用しないことが\n * ループ防止の要件であり、前回検証済み捕捉の保持はそれを侵さない。\n * - collector は finally で必ず復元する(例外・再入安全。ネスト評価は想定しないが\n * 防御的に「前の collector を復元」の形にしておく — コストは同等)。\n */\nexport function traceArgs(stateElement: IStateElement, entry: IStreamEntry): unknown {\n const argsFn = entry.definition.args;\n if (argsFn === null) {\n entry.depAddresses.clear();\n return undefined;\n }\n const previousCollector = collector;\n const captured = new Set<IAbsoluteStateAddress>();\n collector = captured;\n let argsValue: unknown = undefined;\n try {\n stateElement.createState(\"readonly\", (state) => {\n argsValue = argsFn(state);\n });\n } finally {\n // args のユーザー例外時は captured を採用せずそのまま伝播する\n // (entry.depAddresses は前回成功 run の検証済み捕捉を保持)\n collector = previousCollector;\n }\n if (argsValue instanceof Promise) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must be synchronous (it returned a Promise).`,\n );\n }\n const selfStatusPath = `${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}${entry.name}`;\n const selfErrorPath = `${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}${entry.name}`;\n for (const dep of captured) {\n const pathInfo = dep.absolutePathInfo.pathInfo;\n if (\n dep.absolutePathInfo.stateElement === stateElement &&\n (pathInfo.path === entry.name || pathInfo.path === selfStatusPath || pathInfo.path === selfErrorPath)\n ) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must not read the stream itself (\"${pathInfo.path}\"): a self-dependency would restart the stream on its own writes (infinite loop).`,\n );\n }\n if (pathInfo.wildcardCount > 0) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must not read wildcard paths (\"${pathInfo.path}\"): wildcard dependencies are out of scope.`,\n );\n }\n }\n entry.depAddresses = captured;\n return argsValue;\n}\n","/**\n * stream/consumeSource.ts\n *\n * `$streams` のチャンク消費ループ(docs/state-streams-design.md §3-3)。\n * packages/signals/src/streamResource.ts の consume / iterate /\n * readableToAsyncIterable の移植(パッケージ間依存は持たない自己完結原則)。\n *\n * 唯一の構造差分は状態書き込みの IConsumeSink への委譲:\n * value.set(fold(value.peek(), chunk)) → sink.fold(chunk)\n * status.set(\"done\") → sink.done()\n * error.set(e) + status.set(\"error\") → sink.fail(e)\n *\n * sink.fold() が throw した場合(fold throw)もループ内の throw として\n * 既存の catch に流れ、signal.aborted なら return、でなければ sink.fail(e)。\n * consumeSource 自体は fold throw と source throw を区別しない\n * (producer の掃除 = controller.abort() は呼び出し側 runtime が fail 内で行う)。\n * consumeSource は reject しない(全経路 catch 済み)。\n *\n * ---------------------------------------------------------------------------\n * 以下、移植元モジュールヘッダの契約(原文英語のまま維持):\n *\n * CONTRACT (cooperative cancellation — STRONG REQUIREMENT): the `source` MUST honor\n * the `AbortSignal` it is given. Honoring it is what drives switchMap restart/dispose;\n * a source that ignores it cannot be reliably cancelled.\n *\n * Rescue levels on abort:\n * - ReadableStream: FULLY rescued. A parked read() is force-unwound via\n * reader.cancel(), which both releases the underlying source and settles the\n * pending read() so the loop unwinds.\n * - AsyncIterable / async generator: PARTIALLY rescued. On abort we call\n * iterator.return() to trigger the generator's finally/cleanup. But a parked\n * `await` (the producer stalling before its next yield while IGNORING `signal`)\n * cannot be force-unwound from outside — return() only takes effect when the\n * generator next resumes. So a source that parks forever and never observes\n * `signal` still leaks its consume task. Honor `signal` to bound this.\n * The `if (signal.aborted) return` check only runs after a chunk arrives, not while\n * parked — it drops stale chunks but is not, by itself, a cancellation mechanism.\n */\n\nimport type { IConsumeSink, StreamProducer, StreamSource } from \"./types\";\n\nexport async function consumeSource(\n source: StreamSource,\n args: unknown,\n signal: AbortSignal,\n sink: IConsumeSink,\n): Promise<void> {\n // Obtain the iterator EXPLICITLY (not via `for await`'s implicit one) so abort can\n // call `iterator.return()` to trigger an AsyncIterable / async generator's\n // `finally`/cleanup. A `for await` only calls `.return()` when the loop itself exits;\n // if the producer is PARKED (awaiting before the next yield while ignoring `signal`),\n // the loop never advances, so the implicit `.return()` never runs and the task leaks\n // past restart/dispose. Calling `.return()` on abort is the PARTIAL rescue: the\n // parked `await` cannot be force-unwound from outside, but once the generator resumes\n // (its next tick), `.return()` makes it run its `finally` and stop — recovering the\n // common \"generator wakes up after abort\" case. The ReadableStream path is fully\n // rescued via `reader.cancel()` (see `readableToAsyncIterable`).\n let iterator: AsyncIterator<unknown> | null = null;\n // Guard against returning the SAME iterator twice. `onAbort` is reachable two ways:\n // the abort listener, and the explicit call below when abort raced the\n // `await source(...)`. The guard keys on the iterator instance (not a plain \"ran\"\n // flag): the listener firing with iterator still null must NOT consume the single\n // real cleanup that the explicit call performs once the iterator exists. So we only\n // mark an iterator returned once we have actually called `.return()` on it.\n let returned: AsyncIterator<unknown> | null = null;\n const onAbort = (): void => {\n if (!iterator || iterator === returned) {\n return; // nothing to release yet, or already released this iterator\n }\n returned = iterator;\n // Fire the iterator's cleanup. Swallow any throw/rejection from `.return()` — we\n // are tearing down; a producer that rejects on return must not surface here.\n try {\n void iterator.return?.()?.then?.(undefined, () => {});\n } catch {\n // `.return()` threw synchronously while tearing down — ignore.\n }\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n const produced = await source(args, signal);\n iterator = iterate(produced, signal)[Symbol.asyncIterator]();\n if (signal.aborted) {\n // Aborted while awaiting the source: the abort listener already ran (iterator\n // was still null then), so explicitly release the just-produced iterator now —\n // this fires a generator's finally / a ReadableStream's cancel for the\n // resource we created but will never iterate.\n onAbort();\n return;\n }\n for (;;) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n if (signal.aborted) {\n return; // stale chunk from a superseded/disposed run — drop it\n }\n sink.fold(result.value);\n }\n if (signal.aborted) {\n return; // stream ended but this run was aborted — don't mark done\n }\n sink.done();\n } catch (e) {\n if (signal.aborted) {\n return; // an abort that surfaced as a throw is not an error\n }\n sink.fail(e); // keep the last folded value (do not reset)\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nfunction iterate(produced: StreamProducer, signal: AbortSignal): AsyncIterable<unknown> {\n // Optional chaining: a null/undefined source return value must fall through to the\n // explicit TypeError below (symmetric with the `?.` on the getReader probe), not\n // throw an opaque \"Cannot read properties of null\" from this property access.\n if (typeof (produced as AsyncIterable<unknown>)?.[Symbol.asyncIterator] === \"function\") {\n return produced as AsyncIterable<unknown>;\n }\n // Not async-iterable: must be a ReadableStream (read via getReader). Validate so\n // a wrong source value yields a clear error instead of an opaque \"getReader is\n // not a function\" from inside the generator.\n if (typeof (produced as ReadableStream<unknown>)?.getReader !== \"function\") {\n throw new TypeError(\n \"[@wcstack/state] $streams: source must return an AsyncIterable or a ReadableStream (got neither).\",\n );\n }\n return readableToAsyncIterable(produced as ReadableStream<unknown>, signal);\n}\n\nasync function* readableToAsyncIterable(\n stream: ReadableStream<unknown>,\n signal: AbortSignal,\n): AsyncGenerator<unknown> {\n const reader = stream.getReader();\n // A ReadableStream read() does NOT observe an AbortSignal on its own. Without\n // this, a switchMap restart / dispose leaves the previous reader parked in a\n // pending read() forever, leaking the underlying source. Cancelling on abort\n // both releases the source AND settles the pending read() so the for-await\n // unwinds and the finally below can release the lock. Abort is the only\n // early-exit path for this generator (the consumer never calls .return()\n // without aborting), so this is the sole place a non-drained stream is cancelled.\n const onAbort = (): void => {\n void reader.cancel().catch(() => {}); // tearing down; swallow a rejected cancel\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n yield value;\n }\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n reader.releaseLock();\n }\n}\n","/**\n * stream/streamRuntime.ts\n *\n * `$streams` の起動・チャンク反映・status 遷移(docs/state-streams-design.md\n * §2-2 / §3-3 / §4-3)。\n *\n * スコープ:\n * - eager 起動(startStreams)と start = restart の共通手順(startStream)。\n * - args は traceArgs(stream/argsTrace.ts)で readonly proxy 評価と同時に依存を\n * per-run 再捕捉する(§3-1)。\n * - 依存駆動 restart(§3-2): モジュール初期化時に updater の drain 終了リスナーを\n * 1 つ登録し(restartStreamsOnUpdateBatch)、起動中 stateElement\n * (stream/activeStateElements.ts — startStreams で add・abortAllStreams /\n * clearStreamRegistry で delete)の各 entry について depAddresses と batch を\n * 交差させ、hit した entry を restart する。\n *\n * 切断後の後始末について(不変条件):\n * - disconnect(abortAllStreams)は registry entry を直接ミューテーションして\n * idle に戻す($postUpdate は呼ばない — 切断済みで binding 更新は不要かつ\n * rootNode が無い)。\n * - abort 済み run の sink コールバック(fold / done / fail)は consumeSource の\n * stale-drop(全経路の signal.aborted チェック)が createState 到達前に\n * 落とすため、runtime 側に切断後ガードは不要。\n * 「runtime が createState を呼ぶのは自分の controller が生きている間だけ」が\n * この 2 つの組み合わせで常に保たれる。\n */\n\nimport type { IAbsoluteStateAddress } from \"../address/types\";\nimport type { IStateElement } from \"../components/types\";\nimport {\n DELIMITER,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { registerUpdateBatchListener } from \"../updater/updater\";\nimport { addActiveStateElement, getActiveStateElements } from \"./activeStateElements\";\nimport { traceArgs } from \"./argsTrace\";\nimport { consumeSource } from \"./consumeSource\";\nimport { getLastNotified, setLastNotified } from \"./lastNotified\";\nimport { getStreamEntries } from \"./streamRegistry\";\nimport type { IConsumeSink, IStreamEntry, StreamStatus } from \"./types\";\n\n/**\n * 登録済みの全 stream を起動する(eager 起動、設計書 §2-3)。\n * State.connectedCallback($connectedCallback 完了後)と接続中の `_state` 再 set\n * から呼ばれる想定。\n *\n * 同時に依存駆動 restart(§3-2)の対象として activeStateElements に登録する\n * (delete 側は abortAllStreams / clearStreamRegistry —\n * stream/activeStateElements.ts のリーク防止不変条件を参照)。\n * eager 起動の throw(args のユーザー例外等)はここでは正規化せず loud fail のまま\n * (既存の $connectedCallback と同じ扱い。正規化は drain リスナー側の restart のみ)。\n */\nexport function startStreams(stateElement: IStateElement): void {\n const entries = getStreamEntries(stateElement);\n if (entries.size === 0) {\n return;\n }\n addActiveStateElement(stateElement);\n for (const entry of entries.values()) {\n startStream(stateElement, entry);\n }\n}\n\n/**\n * stream を起動する。start = restart の共通手順(設計書 §2-2):\n *\n * 1. 旧 run を abort(restart 時)→ 新 AbortController\n * 2. traceArgs で args を readonly proxy 評価し依存を丸ごと再捕捉\n * (Promise / 自己依存 / wildcard 読みは raiseError、§3-1)\n * 3. 値を initial にリセット(起動 = 最初の run も restart と同一セマンティクス、§1-3)\n * 4. status=\"active\"・error=null を反映\n * 5. consumeSource で消費開始\n */\nexport function startStream(stateElement: IStateElement, entry: IStreamEntry): void {\n entry.controller?.abort();\n const controller = new AbortController();\n entry.controller = controller;\n\n // args 評価 + 依存の per-run 再捕捉(args === null なら depAddresses を clear して\n // undefined。Promise / 自己依存 / wildcard 読みは raiseError、§3-1)\n const argsValue = traceArgs(stateElement, entry);\n\n // 値リセット: setByAddress を通すことで updater coalesce・sameValueGuard・\n // walkDependency(stream 値に依存する computed の dirty 化)がすべて乗る(§3-3)\n stateElement.createState(\"writable\", (state) => {\n state[entry.name] = entry.definition.initial;\n });\n\n updateStreamStatus(stateElement, entry, \"active\", null);\n\n const definition = entry.definition;\n const sink: IConsumeSink = {\n fold(chunk: unknown): void {\n // fold の throw はそのまま伝播させる(consumeSource が fail 経路に回す)\n stateElement.createState(\"writable\", (state) => {\n state[entry.name] = definition.fold(state[entry.name], chunk);\n });\n },\n done(): void {\n updateStreamStatus(stateElement, entry, \"done\", null);\n },\n fail(error: unknown): void {\n // 値は直前の fold 結果を保持(リセットしない)\n updateStreamStatus(stateElement, entry, \"error\", error);\n // fold-throw 時の producer 掃除(iterator.return() / reader.cancel() を発火)。\n // source-throw 時は producer が既に終了しているので abort は無害(§3-3)。\n controller.abort();\n },\n };\n void consumeSource(definition.source, argsValue, controller.signal, sink);\n}\n\n/**\n * status / error の反映ヘルパ(設計書 §4-3)。\n *\n * - registry entry が正本。常に最新値へ書き換える。\n * - 「最後に通知した観測値」(stream/lastNotified.ts — 再 set・再接続を跨いで\n * stateElement の寿命で生存する台帳)から変化した項目に対応する名前空間パス\n * (`$streamStatus.<name>` / `$streamError.<name>`)だけを writable proxy の\n * $postUpdate で通知する(updater enqueue + walkDependency)。\n * - 両方不変なら通知しない(名前空間パスは setByAddress を通らないため\n * sameValueGuard が効かず、同等の same-value 判定を runtime 側が持つ)。\n * abortAllStreams の無通知ミューテーションで台帳が invalidate されている場合は\n * 同値扱いにならず必ず通知される(再接続ウィンドウ内の fresh 読みが描画した\n * idle の恒久陳腐化を防ぐ、§4-3)。\n */\nexport function updateStreamStatus(\n stateElement: IStateElement,\n entry: IStreamEntry,\n status: StreamStatus,\n error: unknown,\n): void {\n entry.status = status;\n entry.error = error;\n const last = getLastNotified(stateElement, entry.name);\n const statusChanged = last.status !== status;\n const errorChanged = !Object.is(last.error, error);\n if (!statusChanged && !errorChanged) {\n return;\n }\n setLastNotified(stateElement, entry.name, status, error);\n stateElement.createState(\"writable\", (state) => {\n if (statusChanged) {\n state.$postUpdate(`${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}${entry.name}`);\n }\n if (errorChanged) {\n state.$postUpdate(`${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}${entry.name}`);\n }\n });\n}\n\n/**\n * 依存駆動 restart の drain リスナー(設計書 §3-2)。\n * モジュール初期化時に registerUpdateBatchListener で 1 つだけ登録される。\n *\n * - 起動中の各 stateElement の各 entry について、depAddresses と batch の交差を\n * Set.has のインスタンス同一性で判定する(小さい方 = depAddresses を回して\n * batch.has(dep)。AbsoluteStateAddress はキャッシュにより同一 (stateName, path,\n * listIndex) が同一インスタンス、§2-1)。args なし(depAddresses 空)の entry は\n * 自然にスキップされる。\n * - status は問わず restart する(done / error からも依存の叩き直しで再試行、§2-2)。\n * - hit は収集してから一括で restart する(イテレーション中の registry 変更を避ける。\n * entry ごとに最初の hit で break するため「1 drain につき 1 entry 最大 1 restart」\n * もここで自然に成立する — 同一 tick 内の複数依存書き込みは 1 restart に畳まれる)。\n * - hits の実行時にも active + entry identity を再チェックする: 先行 restart の\n * source / args は consumeSource / traceArgs の同期プレフィックスで同期実行される\n * ため、そこで (a) 他の stateElement(や自分自身のホスト)の同期切断、(b) 同一要素の\n * _state 同期再 set(clearStreamRegistry → startStreams で Set に再 add される)が\n * 起こり得る。(a) は切断済み要素への startStream が rootNode 不在で throw する経路、\n * (b) は registry から置換済みの旧 entry を restart して到達不能な孤児 consume run を\n * リークする経路(§3-2「未接続の stateElement の entry は restart しない」・\n * §5-1「切断後は idle」に違反)で、いずれも「entry が現行 registry の live entry で\n * あること」の再検証で skip する。startStream **実行中**の自己切断・再 set は事前\n * チェックではガードできないため、catch 側でも同じ再検証を行ってから error に\n * 正規化する(切断済みでの正規化は createState が再 throw して drain リスナー外へ\n * 漏れ、後続 hits の restart を巻き添えにするため)。\n * - restart(startStream)は entry ごとに try/catch し、throw(args のユーザー例外・\n * Promise 同期契約違反等)は controller.abort() → status=\"error\"・$streamError 格納\n * に正規化する(§3-2 規範 3)。updater の drain を壊さず、他 entry の restart も\n * 継続する。eager 起動(connect 時の startStreams)の throw は従来どおり loud fail。\n * - restart 内の書き込み(initial リセット・status 通知)は updater への enqueue のみで\n * 新しい microtask バッチを作る(drain 再入ではない)。自己依存は traceArgs が\n * 宣言時に raiseError で検出するため、restart 書き込みが自分の依存に再 hit する\n * ループは起きない(§3-1)。\n */\nfunction restartStreamsOnUpdateBatch(batch: ReadonlySet<IAbsoluteStateAddress>): void {\n const activeStateElements = getActiveStateElements();\n if (activeStateElements.size === 0) {\n // stream 未使用アプリの drain に配列・イテレータ割り当てのコストを載せない\n return;\n }\n const hits: { stateElement: IStateElement; entry: IStreamEntry }[] = [];\n for (const stateElement of activeStateElements) {\n for (const entry of getStreamEntries(stateElement).values()) {\n for (const dep of entry.depAddresses) {\n if (batch.has(dep)) {\n hits.push({ stateElement, entry });\n break;\n }\n }\n }\n }\n for (const { stateElement, entry } of hits) {\n // 先行 restart の source / args 同期実行は他要素の切断や同一要素の _state 同期再 set を\n // 行い得るため、実行時に再チェックする(live な Set / registry ビューで即時反映):\n // - 切断済み要素は skip(§3-2「未接続の stateElement の entry は restart しない」)\n // - entry が現行 registry のものでなければ skip — 同期再 set で置換された旧 entry を\n // restart すると、registry から到達不能なため abortAllStreams でも止められない\n // 孤児 consume run がリークする\n if (\n !activeStateElements.has(stateElement) ||\n getStreamEntries(stateElement).get(entry.name) !== entry\n ) {\n continue;\n }\n try {\n startStream(stateElement, entry);\n } catch (e) {\n entry.controller?.abort();\n // startStream 実行中(args / source の同期プレフィックス)の自己切断・同期再 set は\n // 上の再チェックではガードできない。切断済みだと updateStreamStatus の createState が\n // rootNode 不在で再 throw して drain リスナー外へ漏れる(後続 hits の restart を\n // 巻き添えにする)ため、entry がまだ現行の live entry である場合のみ error に\n // 正規化する(切断済みなら abortAllStreams が idle に戻し済み。§3-2 規範 3 / §5-1)。\n if (\n activeStateElements.has(stateElement) &&\n getStreamEntries(stateElement).get(entry.name) === entry\n ) {\n updateStreamStatus(stateElement, entry, \"error\", e);\n }\n }\n }\n}\n\nregisterUpdateBatchListener(restartStreamsOnUpdateBatch);\n","import { IStateElement } from \"../components/types\";\n\ninterface IDCCElement extends HTMLElement {\n readonly stateElement: IStateElement | null;\n}\n\nexport function getterFn(name: string) {\n return function (this: IDCCElement) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n let value: any;\n try {\n stateEl.createState(\"readonly\", (state) => {\n value = state[name];\n });\n } catch (e) {\n console.warn(`[@wcstack/state] DCC getter \"${name}\" failed:`, e);\n return undefined;\n }\n return value;\n };\n}\n\nexport function setterFn(name: string) {\n return function (this: IDCCElement, value: any) {\n const stateEl = this.stateElement;\n if (!stateEl) return;\n stateEl.initializePromise.then(() => {\n stateEl.createState(\"writable\", (state) => {\n state[name] = value;\n });\n });\n };\n}\n\nexport function callFn(name: string, isAsync: boolean) {\n if (isAsync) {\n return function (this: IDCCElement, ...args: any[]) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n return stateEl.initializePromise.then(() => {\n let result: any;\n return stateEl.createStateAsync(\"writable\", async (state) => {\n result = await state[name](...args);\n }).then(() => result);\n });\n };\n }\n return function (this: IDCCElement, ...args: any[]) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n return stateEl.initializePromise.then(() => {\n let result: any;\n stateEl.createState(\"writable\", (state) => {\n result = state[name](...args);\n });\n return result;\n });\n };\n}\n\nexport function isInternalProperty(name: string): boolean {\n return name.startsWith(\"$\");\n}\n","// wc-bindable protocol manifest types — single source of truth in /protocol/wc-bindable.ts.\nexport type {\n IWcBindable, IWcBindableProperty, IWcBindableInput, IWcBindableCommand,\n} from \"../protocol/wcBindable.js\";\n// This module also uses the types in its runtime helpers below, so import them into scope.\nimport type { IWcBindable, IWcBindableProperty } from \"../protocol/wcBindable.js\";\n\nexport function createWcBindable(tagName: string, bindables: string[]): IWcBindable {\n const properties: IWcBindableProperty[] = bindables.map((propName) => ({\n name: propName,\n event: `${tagName}:${propName}-changed`,\n }));\n return {\n protocol: \"wc-bindable\",\n version: 1,\n properties,\n };\n}\n\nexport function createBindableEventMap(tagName: string, bindables: string[]): Record<string, string> {\n const map: Record<string, string> = {};\n for (const propName of bindables) {\n map[propName] = `${tagName}:${propName}-changed`;\n }\n return map;\n}\n","import { IState } from \"../types\";\nimport { DCC_DEFINITION_ATTRIBUTE, STATE_BINDABLES_NAME } from \"../define\";\nimport { config } from \"../config\";\nimport { raiseError } from \"../raiseError\";\nimport { getterFn, setterFn, callFn, isInternalProperty } from \"./dccPropertyFactories\";\nimport { createWcBindable, createBindableEventMap, IWcBindable } from \"./wcBindable\";\nimport { State } from \"../components/State\";\n\nexport function defineDCC(hostElement: Element, shadowRoot: ShadowRoot, state: IState): void {\n const tagName = hostElement.tagName.toLowerCase();\n\n // バリデーション\n if (!tagName.includes(\"-\")) {\n raiseError(`DCC: \"${tagName}\" is not a valid custom element name (must contain a hyphen).`);\n }\n if (customElements.get(tagName)) {\n // 既に登録済みならスキップ(重複定義の検知のため警告は出す)\n console.warn(`[@wcstack/state] DCC: \"${tagName}\" is already registered. Skipping redefinition.`);\n return;\n }\n\n // ShadowRoot は cloneNode 不可のため、template 経由で内容をクローン\n const template = document.createElement(\"template\");\n template.innerHTML = shadowRoot.innerHTML;\n const shadowRootMode = shadowRoot.mode as ShadowRootMode;\n\n // $bindables から wcBindable + bindableEventMap を生成\n const bindables: string[] = Array.isArray(state[STATE_BINDABLES_NAME])\n ? state[STATE_BINDABLES_NAME]\n : [];\n const wcBindable: IWcBindable | null = bindables.length > 0\n ? createWcBindable(tagName, bindables)\n : null;\n const bindableEventMap: Record<string, string> = bindables.length > 0\n ? createBindableEventMap(tagName, bindables)\n : {};\n\n // DCC クラス生成\n const stateTagSelector = `${config.tagNames.state}:not([name])` as const;\n\n const DCCElement = class extends HTMLElement {\n static template = template;\n static shadowRootMode = shadowRootMode;\n static wcBindable = wcBindable;\n static bindableEventMap = bindableEventMap;\n\n private _shadow: ShadowRoot | null = null;\n\n connectedCallback() {\n if (this.hasAttribute(DCC_DEFINITION_ATTRIBUTE)) return;\n this._shadow = this.attachShadow({ mode: DCCElement.shadowRootMode });\n this._shadow.appendChild(DCCElement.template.content.cloneNode(true));\n\n // bindableEventMap の設定\n if (Object.keys(DCCElement.bindableEventMap).length > 0) {\n const stateEl = this._shadow.querySelector(stateTagSelector) as State | null;\n if (stateEl) {\n stateEl.initializePromise.then(() => {\n stateEl.setBindableEventMap(DCCElement.bindableEventMap);\n });\n }\n }\n }\n\n get stateElement() {\n return this._shadow?.querySelector(stateTagSelector) as State | null;\n }\n };\n\n // state プロパティを走査して DCC クラスのプロトタイプにgetter/setter/methodを定義\n const descriptors = Object.getOwnPropertyDescriptors(state);\n for (const [name, desc] of Object.entries(descriptors)) {\n if (isInternalProperty(name)) continue;\n\n const newDesc: PropertyDescriptor = { configurable: true, enumerable: true };\n if (typeof desc.value === \"function\") {\n const isAsync = desc.value.constructor?.name === \"AsyncFunction\";\n newDesc.value = callFn(name, isAsync);\n } else {\n newDesc.get = getterFn(name);\n newDesc.set = setterFn(name);\n }\n Object.defineProperty(DCCElement.prototype, name, newDesc);\n }\n\n // カスタム要素登録\n customElements.define(tagName, DCCElement);\n}\n","/**\n * getResolvedPathInfo.ts\n *\n * Utility for parsing and generating detailed path information (IResolvedPathInfo)\n * from State property names (path strings), including wildcard and index information.\n *\n * Main responsibilities:\n * - Breaks down property names to determine presence and type of wildcards and indexes\n * - Automatically determines wildcard type: context/all/partial/none\n * - Caches by path for reusability and performance\n * - Retrieves structured path information via getStructuredPathInfo\n *\n * Design points:\n * - Caches using Map to handle reserved words like \"constructor\" and \"toString\"\n * - Flexibly determines wildcards (*) and numeric indexes, storing them in wildcardIndexes\n * - context type indicates unresolved indexes, all type indicates all resolved indexes, partial type indicates mixed\n * - ResolvedPathInfo class centralizes path parsing and information management\n */\nimport { IResolvedAddress, WildcardType } from './types';\nimport { getPathInfo } from './PathInfo';\n\n/**\n * Cache for resolved path information.\n * Uses Map to safely handle property names including reserved words like \"constructor\" and \"toString\".\n */\nconst _cache: Map<string, IResolvedAddress> = new Map();\n\n/**\n * Class that parses and stores resolved path information.\n * \n * Analyzes property path strings to extract:\n * - Path segments and their hierarchy\n * - Wildcard locations and types\n * - Numeric indexes vs unresolved wildcards\n * - Wildcard type classification (none/context/all/partial)\n */\nclass ResolvedAddress implements IResolvedAddress {\n readonly path;\n readonly segments;\n readonly paths;\n readonly wildcardCount;\n readonly wildcardType;\n readonly wildcardIndexes;\n readonly pathInfo;\n \n /**\n * Constructs resolved path information from a property path string.\n * \n * Parses the path to identify wildcards (*) and numeric indexes,\n * classifies the wildcard type, and generates structured path information.\n * \n * @param name - Property path string (e.g., \"items.*.name\" or \"data.0.value\")\n */\n constructor(path: string) {\n // Split path into individual segments\n const segments = path.split(\".\");\n const tmpPatternSegments = segments.slice();\n const paths = [];\n let incompleteCount = 0; // Count of unresolved wildcards (*)\n let completeCount = 0; // Count of resolved wildcards (numeric indexes)\n let lastPath = \"\";\n let wildcardCount = 0;\n let wildcardType: WildcardType = \"none\";\n const wildcardIndexes: (number | null)[] = [];\n \n // Process each segment to identify wildcards and indexes\n for(let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (segment === \"*\") {\n // Unresolved wildcard\n tmpPatternSegments[i] = \"*\";\n wildcardIndexes.push(null);\n incompleteCount++;\n wildcardCount++;\n } else {\n const number = Number(segment);\n if (!Number.isNaN(number)) {\n // Numeric index - treat as resolved wildcard\n tmpPatternSegments[i] = \"*\";\n wildcardIndexes.push(number);\n completeCount++;\n wildcardCount++;\n }\n }\n // Build cumulative path array\n lastPath += segment;\n paths.push(lastPath);\n lastPath += (i < segment.length - 1 ? \".\" : \"\");\n }\n // Generate pattern string with wildcards normalized\n const structuredPath = tmpPatternSegments.join(\".\");\n const pathInfo = getPathInfo(structuredPath);\n \n // Classify wildcard type based on resolved vs unresolved counts\n if (incompleteCount > 0 || completeCount > 0) {\n if (incompleteCount === wildcardCount) {\n // All wildcards are unresolved - need context to resolve\n wildcardType = \"context\";\n } else if (completeCount === wildcardCount) {\n // All wildcards are resolved with numeric indexes\n wildcardType = \"all\";\n } else {\n // Mix of resolved and unresolved wildcards\n wildcardType = \"partial\";\n }\n }\n this.path = path;\n this.segments = segments;\n this.paths = paths;\n this.wildcardCount = wildcardCount;\n this.wildcardType = wildcardType;\n this.wildcardIndexes = wildcardIndexes;\n this.pathInfo = pathInfo;\n }\n}\n\n/**\n * Retrieves or creates resolved path information for a property path.\n * \n * This function caches resolved path information for performance.\n * On first access, it parses the path and creates a ResolvedPathInfo instance.\n * Subsequent accesses return the cached result.\n * \n * @param name - Property path string (e.g., \"items.*.name\", \"data.0.value\")\n * @returns Resolved path information containing segments, wildcards, and type classification\n */\nexport function getResolvedAddress(name:string):IResolvedAddress {\n let nameInfo: IResolvedAddress | undefined;\n // Return cached value or create, cache, and return new instance\n return _cache.get(name) ?? (_cache.set(name, nameInfo = new ResolvedAddress(name)), nameInfo);\n}","/**\n * connectedCallback.ts\n *\n * StateClassのライフサイクルフック「$connectedCallback」を呼び出すユーティリティ関数です。\n *\n * 主な役割:\n * - オブジェクト(target)に$connectedCallbackメソッドが定義されていれば呼び出す\n * - コールバックはtargetのthisコンテキストで呼び出し、IReadonlyStateProxy(receiver)を引数として渡す\n * - 非同期関数として実行可能(await対応)\n *\n * 設計ポイント:\n * - Reflect.getで$connectedCallbackプロパティを安全に取得\n * - 存在しない場合は何もしない\n * - ライフサイクル管理やカスタム初期化処理に利用\n */\n\nimport { STATE_CONNECTED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\nexport async function connectedCallback(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n _handler: IStateHandler\n):Promise<void> {\n const callback = Reflect.get(target, STATE_CONNECTED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n await callback.call(receiver);\n }\n}","/**\n * disconnectedCallback.ts\n *\n * StateClassのライフサイクルフック「$disconnectedCallback」を呼び出すユーティリティ関数です。\n *\n * 主な役割:\n * - オブジェクト(target)に$disconnectedCallbackメソッドが定義されていれば呼び出す\n * - コールバックはtargetのthisコンテキストで呼び出し、IReadonlyStateProxy(receiver)を引数として渡す\n *\n * 設計ポイント:\n * - Reflect.getで$disconnectedCallbackプロパティを安全に取得\n * - 存在しない場合は何もしない\n * - ライフサイクル管理やクリーンアップ処理に利用\n */\n\nimport { STATE_DISCONNECTED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\nexport function disconnectedCallback(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n _handler: IStateHandler\n): void {\n const callback = Reflect.get(target, STATE_DISCONNECTED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n callback.call(receiver);\n }\n}\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { ICacheEntry } from \"./types\";\n\nconst cacheEntryByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, ICacheEntry> = new WeakMap();\n\nexport function getCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress\n): ICacheEntry | null {\n return cacheEntryByAbsoluteStateAddress.get(address) ?? null;\n}\n\nexport function setCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress,\n cacheEntry: ICacheEntry | null\n): void {\n if (cacheEntry === null) {\n cacheEntryByAbsoluteStateAddress.delete(address);\n } else {\n cacheEntryByAbsoluteStateAddress.set(address, cacheEntry);\n }\n}\n\nexport function dirtyCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress\n): void {\n const cacheEntry = cacheEntryByAbsoluteStateAddress.get(address);\n if (cacheEntry) {\n cacheEntry.dirty = true;\n }\n}","import { IStateAddress } from \"../../address/types\";\nimport { IStateHandler } from \"../types\";\n\nexport function checkDependency(\n handler: IStateHandler,\n address: IStateAddress,\n): void {\n // 動的依存関係の登録\n if (handler.addressStackLength > 0) {\n const lastInfo = handler.lastAddressStack?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null) {\n if (stateElement.getterPaths.has(lastInfo.path) &&\n lastInfo.path !== address.pathInfo.path) {\n // lastInfo.pathはgetterの名前であり、address.pathInfo.pathは\n // そのgetterが参照している値のパスである\n stateElement.addDynamicDependency(address.pathInfo.path, lastInfo.path);\n }\n }\n }\n}","/**\n * getByAddress.ts\n *\n * StateClassの内部APIとして、構造化パス情報(IStructuredPathInfo)とリストインデックス(IListIndex)を指定して\n * 状態オブジェクト(target)から値を取得するための関数(getByAddress)の実装です。\n *\n * 主な役割:\n * - 指定されたパス・インデックスに対応するState値を取得(多重ループやワイルドカードにも対応)\n * - 依存関係の自動登録(checkDependencyで登録)\n * - キャッシュ機構(リストもキャッシュ対象)\n * - getter経由で値取得時はpushAddressでスコープを一時設定\n * - 存在しない場合は親pathAddressやlistIndexを辿って再帰的に値を取得\n *\n * 設計ポイント:\n * - checkDependencyで依存追跡を実行 \n * - キャッシュ有効時はstateAddressで値をキャッシュし、取得・再利用を最適化\n * - ワイルドカードや多重ループにも柔軟に対応し、再帰的な値取得を実現\n * - finallyでキャッシュへの格納を保証\n */\n\nimport { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { IStateAddress } from \"../../address/types\";\nimport { getCacheEntryByAbsoluteStateAddress, setCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { getCommandNamespace } from \"../../command/commandNamespace\";\nimport { IStateElement } from \"../../components/types\";\nimport { STATE_COMMAND_NAMESPACE_NAME, STATE_STREAM_ERROR_NAMESPACE_NAME, STATE_STREAM_STATUS_NAMESPACE_NAME, WILDCARD } from \"../../define\";\nimport { raiseError } from \"../../raiseError\";\nimport { collectStreamDependency } from \"../../stream/argsTrace\";\nimport { getStreamErrorNamespace, getStreamStatusNamespace } from \"../../stream/streamNamespace\";\nimport { IStateHandler } from \"../types\";\nimport { checkDependency } from \"./checkDependency\";\n\n/**\n * namespace 配下のパスは raw state を持たないため、proxy の get トラップと同じ\n * namespace オブジェクトを辿る。1セグメント目は namespace 本体、2セグメント目以降は\n * namespace 上のキーを順に走査する。走査値が object / function 以外(null /\n * undefined / primitive の葉)になったら undefined を返す — 葉より深い読み\n * (例: `$streamStatus.<name>.<key>`、error が primitive throw のときの\n * `$streamError.<name>.message`)は宣言外アクセスと同じ undefined 解決とし、\n * Reflect.get の non-object TypeError を updater の drain に漏らさない\n * (§4-1 の throw しない寛容規約)。\n */\nfunction walkNamespace(namespace: object, segments: string[]): any {\n let value: any = namespace;\n for (let i = 1; i < segments.length; i++) {\n // Object(v) !== v は「v が object / function でない」(= primitive / null / undefined)判定\n if (Object(value) !== value) {\n return undefined;\n }\n value = Reflect.get(value, segments[i]);\n }\n return value;\n}\n\nfunction _getByAddress(\n target : object,\n address : IStateAddress,\n receiver : any,\n handler : IStateHandler,\n stateElement: IStateElement,\n): any {\n const firstSegment = address.pathInfo.segments[0];\n if (firstSegment === STATE_COMMAND_NAMESPACE_NAME) {\n // $command 名前空間: キーは宣言済み command token 名\n return walkNamespace(getCommandNamespace(stateElement), address.pathInfo.segments);\n }\n if (firstSegment === STATE_STREAM_STATUS_NAMESPACE_NAME) {\n // $streamStatus / $streamError 名前空間: キーは宣言済み stream 名\n // (registry entry が正本の thin gateway、docs/state-streams-design.md §4-2)。\n // setByAddress の親走査もここを通るため、子への Reflect.set が namespace proxy の\n // raiseError に到達する = 書き込み防御(S11)もこの分岐で成立する。\n return walkNamespace(getStreamStatusNamespace(stateElement), address.pathInfo.segments);\n }\n if (firstSegment === STATE_STREAM_ERROR_NAMESPACE_NAME) {\n return walkNamespace(getStreamErrorNamespace(stateElement), address.pathInfo.segments);\n }\n if (address.pathInfo.path in target) {\n // getterの中で参照の可能性があるので、addressをプッシュする\n if (stateElement.getterPaths.has(address.pathInfo.path)) {\n handler.pushAddress(address);\n try {\n return Reflect.get(target, address.pathInfo.path, receiver);\n } finally {\n handler.popAddress();\n }\n } else {\n return Reflect.get(target, address.pathInfo.path);\n }\n } else {\n const parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n const parentValue = getByAddress(target, parentAddress, receiver, handler);\n const lastSegment = address.pathInfo.segments[address.pathInfo.segments.length - 1];\n if (lastSegment === WILDCARD) {\n const index = address.listIndex?.index ?? raiseError(`address.listIndex?.index is undefined path: ${address.pathInfo.path}`);\n return Reflect.get(parentValue, index);\n } else {\n return Reflect.get(parentValue, lastSegment);\n }\n }\n}\n\nfunction _getByAddressWithCache(\n target : object, \n address : IStateAddress,\n receiver : any,\n handler : IStateHandler,\n stateElement: IStateElement\n): any {\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const cacheEntry = getCacheEntryByAbsoluteStateAddress(absAddress);\n if (cacheEntry !== null && cacheEntry.dirty === false) {\n return cacheEntry.value;\n }\n const value = _getByAddress(target, address, receiver, handler, stateElement);\n setCacheEntryByAbsoluteStateAddress(absAddress, {\n value: value,\n dirty: false\n });\n return value;\n}\n\nexport function getByAddress(\n target : object,\n address : IStateAddress,\n receiver : any,\n handler : IStateHandler\n): any {\n checkDependency(handler, address);\n // $streams の args トレース中のみ絶対アドレスを捕捉(collector 非活性なら即 return)\n collectStreamDependency(handler.stateElement, address);\n const stateElement = handler.stateElement;\n const cacheable = address.pathInfo.wildcardCount > 0 || \n stateElement.getterPaths.has(address.pathInfo.path);\n if (cacheable) {\n return _getByAddressWithCache(target, address, receiver, handler, stateElement);\n } else {\n return _getByAddress(target, address, receiver, handler, stateElement);\n }\n}\n","/**\n * getContextListIndex.ts\n *\n * Stateの内部APIとして、現在のプロパティ参照スコープにおける\n * 指定したstructuredPath(ワイルドカード付きプロパティパス)に対応する\n * リストインデックス(IListIndex)を取得する関数です。\n *\n * 主な役割:\n * - handlerの最後にアクセスされたAddressから、指定パスに対応するリストインデックスを取得\n * - ワイルドカード階層に対応し、多重ループやネストした配列バインディングにも利用可能\n *\n * 設計ポイント:\n * - 直近のプロパティ参照情報を取得\n * - info.indexByWildcardPathからstructuredPathのインデックスを特定\n * - listIndex.at(index)で該当階層のリストインデックスを取得\n * - パスが一致しない場合や参照が存在しない場合はnullを返す\n */\n\nimport { IListIndex } from \"../../list/types\";\nimport { IStateHandler } from \"../types\";\n\nexport function getContextListIndex(\n handler: IStateHandler,\n structuredPath: string\n): IListIndex | null {\n if (handler.addressStackLength === 0) {\n return null;\n }\n const address = handler.lastAddressStack;\n if (address === null) {\n return null;\n }\n const index: number | undefined = address.pathInfo.indexByWildcardPath[structuredPath];\n if (typeof index === \"undefined\") {\n return null;\n }\n return address.listIndex?.at(index) ?? null;\n}\n","import { IStateAddress } from \"../../address/types\";\nimport { ISwapInfo } from \"./types\";\n\nconst swapInfoByStateAddress: WeakMap<IStateAddress, ISwapInfo> = new WeakMap();\n\nexport function getSwapInfoByAddress(address: IStateAddress): ISwapInfo | null {\n return swapInfoByStateAddress.get(address) ?? null;\n}\n\nexport function setSwapInfoByAddress(address: IStateAddress, swapInfo: ISwapInfo | null): void {\n if (swapInfo === null) {\n swapInfoByStateAddress.delete(address);\n } else {\n swapInfoByStateAddress.set(address, swapInfo);\n }\n}\n","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { calcWildcardLen } from \"../address/calcWildcardLen\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { createStateAddress } from \"../address/StateAddress\";\nimport { IPathInfo, IStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { WILDCARD } from \"../define\";\nimport { createListDiff } from \"../list/createListDiff\";\nimport { getLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { IListDiff, IListIndex } from \"../list/types\";\nimport { getByAddressSymbol } from \"../proxy/symbols\";\nimport { IStateProxy } from \"../proxy/types\";\nimport { raiseError } from \"../raiseError\";\nimport { SearchType } from \"./types\";\n\nconst MAX_DEPENDENCY_DEPTH = 1000;\n\nfunction getIndexes(listDiff: IListDiff, searchType: SearchType): Iterable<IListIndex> {\n switch (searchType) {\n case \"old\":\n return listDiff.oldIndexes;\n case \"new\":\n return listDiff.newIndexes;\n case \"add\":\n return listDiff.addIndexSet;\n case \"change\":\n return listDiff.changeIndexSet;\n case \"delete\":\n return listDiff.deleteIndexSet;\n default: \n if (config.debug) {\n console.log(`Invalid search type: ${searchType}`);\n }\n return [];\n }\n}\n\ntype ExpandContext = {\n readonly stateName: string,\n readonly stateElement: IStateElement,\n readonly targetPathInfo: IPathInfo,\n readonly targetListIndexes: IListIndex[],\n readonly wildcardPaths: string[],\n readonly wildcardParentPaths: string[],\n readonly stateProxy: IStateProxy,\n readonly searchType: SearchType\n}\n\nfunction _walkExpandWildcard(\n context: ExpandContext, \n currentWildcardIndex: number,\n parentListIndex: IListIndex | null\n): void {\n const parentPath = context.wildcardParentPaths[currentWildcardIndex];\n const parentPathInfo = getPathInfo(parentPath);\n const parentAbsPathInfo = getAbsolutePathInfo(context.stateElement, parentPathInfo);\n const parentAddress = createStateAddress(parentPathInfo, parentListIndex);\n const parentAbsAddress = createAbsoluteStateAddress(parentAbsPathInfo, parentListIndex);\n const lastValue = getLastListValueByAbsoluteStateAddress(parentAbsAddress);\n const newValue = context.stateProxy[getByAddressSymbol](parentAddress);\n const listDiff = createListDiff(parentAddress.listIndex, lastValue, newValue);\n\n const loopIndexes = getIndexes(listDiff, context.searchType);\n if (currentWildcardIndex === context.wildcardPaths.length - 1) {\n context.targetListIndexes.push(...loopIndexes);\n } else {\n for(const listIndex of loopIndexes) {\n _walkExpandWildcard(\n context,\n currentWildcardIndex + 1,\n listIndex\n );\n }\n }\n}\n\ntype Context = {\n readonly stateName: string,\n readonly stateElement: IStateElement,\n readonly staticMap: Map<string, string[]>,\n readonly dynamicMap: Map<string, string[]>, \n readonly result: Set<IStateAddress>,\n readonly listPathSet: Set<string>,\n readonly visited: Set<IStateAddress>,\n readonly stateProxy: IStateProxy,\n readonly searchType: SearchType,\n}\n\ntype StackEntry = { address: IStateAddress, depth: number };\n\nfunction _walkDependency(\n context: Context,\n startAddress: IStateAddress,\n callback: (address: IStateAddress) => void\n): void {\n const stack: StackEntry[] = [{ address: startAddress, depth: 0 }];\n\n while (stack.length > 0) {\n const { address, depth } = stack.pop()!;\n if (depth > MAX_DEPENDENCY_DEPTH) {\n raiseError(`Maximum dependency depth of ${MAX_DEPENDENCY_DEPTH} exceeded. Possible circular dependency detected at path: ${address.pathInfo.path}`);\n }\n if (context.visited.has(address)) {\n continue;\n }\n context.visited.add(address);\n callback(address);\n const sourcePath = address.pathInfo.path;\n const nextDepth = depth + 1;\n\n // 依存アドレスを逆順でpushするための一時バッファ\n const nextEntries: StackEntry[] = [];\n\n /**\n * パスから依存関係をたどる\n * users.*.name <= users.* <= users\n * ただし、users がリストであれば users.* の依存関係は展開する\n */\n const staticDeps = context.staticMap.get(sourcePath);\n if (staticDeps) {\n for(const dep of staticDeps) {\n const depPathInfo = getPathInfo(dep);\n if (context.listPathSet.has(sourcePath) && depPathInfo.lastSegment === WILDCARD) {\n //expand indexes\n const newValue = context.stateProxy[getByAddressSymbol](address);\n const absPathInfo = getAbsolutePathInfo(context.stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const lastValue = getLastListValueByAbsoluteStateAddress(absAddress);\n const listDiff = createListDiff(address.listIndex, lastValue, newValue);\n for(const listIndex of listDiff.newIndexes) {\n const depAddress = createStateAddress(depPathInfo, listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n } else {\n const depAddress = createStateAddress(depPathInfo, address.listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n }\n }\n /**\n * 動的依存関係をたどる\n * 動的依存関係は、getterの実行時に決定される\n *\n * source, target\n *\n * products.*.price => products.*.tax\n * get \"products.*.tax\"() { return this[\"products.*.price\"] * 0.1; }\n *\n * products.*.price => products.summary\n * get \"products.summary\"() { return this.$getAll(\"products.*.price\", []).reduce(sum); }\n *\n * categories.*.name => categories.*.products.*.categoryName\n * get \"categories.*.products.*.categoryName\"() { return this[\"categories.*.name\"]; }\n */\n const dynamicDeps = context.dynamicMap.get(sourcePath);\n if (dynamicDeps) {\n for(const dep of dynamicDeps) {\n const depPathInfo = getPathInfo(dep);\n const listIndexes: (IListIndex | null)[] = [];\n if (depPathInfo.wildcardCount > 0) {\n // ワイルドカードを含む依存関係の処理\n // 同じ親を持つかをパスの集合積で判定する\n // polyfills.tsにてSetのintersectionメソッドを定義している\n const wildcardLen = calcWildcardLen(address.pathInfo, depPathInfo);\n const expandable = (depPathInfo.wildcardCount - wildcardLen) >= 1;\n if (expandable) {\n let listIndex: IListIndex | null;\n if (wildcardLen > 0) {\n // categories.*.name => categories.*.products.*.categoryName\n // ワイルドカードを含む同じ親(products.*)を持つのが、\n // さらに下位にワイルドカードがあるので展開する\n if (address.listIndex === null) {\n raiseError(`Cannot expand dynamic dependency with wildcard for non-list address: ${address.pathInfo.path}`);\n }\n listIndex = address.listIndex!.at(wildcardLen - 1);\n } else {\n // selectedIndex => items.*.selected\n // 同じ親を持たない場合はnullから開始\n listIndex = null;\n }\n const expandContext: ExpandContext = {\n stateName: context.stateName,\n stateElement: context.stateElement,\n targetPathInfo: depPathInfo,\n targetListIndexes: [],\n wildcardPaths: depPathInfo.wildcardPaths,\n wildcardParentPaths: depPathInfo.wildcardParentPaths,\n stateProxy: context.stateProxy,\n searchType: context.searchType,\n };\n _walkExpandWildcard(expandContext, wildcardLen, listIndex);\n listIndexes.push(...expandContext.targetListIndexes);\n } else {\n // products.*.price => products.*.tax\n // ワイルドカードを含む同じ親(products.*)を持つので、リストインデックスは引き継ぐ\n if (address.listIndex === null) {\n raiseError(`Cannot expand dynamic dependency with wildcard for non-list address: ${address.pathInfo.path}`);\n }\n const listIndex = address.listIndex.at(wildcardLen - 1);\n listIndexes.push(listIndex);\n }\n } else {\n // products.*.tax => currentTaxRate\n // 同じ親を持たないので、リストインデックスはnull\n listIndexes.push(null);\n }\n for(const listIndex of listIndexes) {\n const depAddress = createStateAddress(depPathInfo, listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n }\n }\n\n // 逆順でpushして、元の再帰と同じ探索順序を保つ\n for(let i = nextEntries.length - 1; i >= 0; i--) {\n stack.push(nextEntries[i]);\n }\n }\n}\n\nexport function walkDependency(\n stateName: string,\n stateElement: IStateElement,\n startAddress: IStateAddress,\n staticDependency: Map<string, string[]>,\n dynamicDependency: Map<string, string[]>,\n listPathSet: Set<string>,\n stateProxy: IStateProxy,\n searchType: SearchType,\n callback: (address: IStateAddress) => void\n): IStateAddress[] {\n const context: Context = {\n stateName: stateName,\n stateElement: stateElement,\n staticMap: staticDependency,\n dynamicMap: dynamicDependency,\n result: new Set<IStateAddress>(),\n listPathSet: listPathSet,\n visited: new Set<IStateAddress>(),\n stateProxy: stateProxy,\n searchType: searchType,\n };\n _walkDependency(context, startAddress, callback);\n return Array.from(context.result);\n}\n","/**\n * setByAddress.ts\n *\n * Stateの内部APIとして、アドレス情報(IStateAddress)を指定して\n * 状態オブジェクト(target)に値を設定するための関数(setByAddress)の実装です。\n *\n * 主な役割:\n * - 指定されたパス・インデックスに対応するState値を設定(多重ループやワイルドカードにも対応)\n * - getter/setter経由で値設定時はpushAddressでスコープを一時設定\n * - 存在しない場合は親pathInfoやlistIndexを辿って再帰的に値を設定\n * - 設定後はupdater.enqueueUpdateAddressで更新情報を登録\n *\n * 設計ポイント:\n * - ワイルドカードや多重ループにも柔軟に対応し、再帰的な値設定を実現\n * - finallyで必ず更新情報を登録し、再描画や依存解決に利用\n * - getter/setter経由のスコープ切り替えも考慮した設計\n */\n\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { IAbsoluteStateAddress, IStateAddress } from \"../../address/types\";\nimport { WILDCARD } from \"../../define\";\nimport { createListIndex } from \"../../list/createListIndex\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { raiseError } from \"../../raiseError\";\nimport { getUpdater } from \"../../updater/updater\";\nimport { IStateHandler, IStateProxy } from \"../types\";\nimport { getByAddress } from \"./getByAddress\";\nimport { getSwapInfoByAddress, setSwapInfoByAddress } from \"./swapInfo\";\nimport { walkDependency } from \"../../dependency/walkDependency\";\nimport { dirtyCacheEntryByAbsoluteStateAddress, setCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { config } from \"../../config\";\n\nfunction _setByAddress(\n target : object, \n address : IStateAddress,\n absAddress: IAbsoluteStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n): any {\n try {\n if (address.pathInfo.path in target) {\n if (handler.stateElement.setterPaths.has(address.pathInfo.path)) {\n // setterの中で参照の可能性があるので、addressをプッシュする\n handler.pushAddress(address);\n try {\n return Reflect.set(target, address.pathInfo.path, value, receiver);\n } finally {\n handler.popAddress();\n }\n } else {\n return Reflect.set(target, address.pathInfo.path, value);\n }\n } else {\n const parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n const parentValue = getByAddress(target, parentAddress, receiver, handler);\n const lastSegment = address.pathInfo.segments[address.pathInfo.segments.length - 1];\n if (lastSegment === WILDCARD) {\n const index = address.listIndex?.index ?? raiseError(`address.listIndex?.index is undefined path: ${address.pathInfo.path}`);\n return Reflect.set(parentValue, index, value);\n } else {\n return Reflect.set(parentValue, lastSegment, value);\n }\n }\n } finally {\n const updater = getUpdater();\n updater.enqueueAbsoluteAddress(absAddress);\n // 依存関係のあるキャッシュを無効化(ダーティ)、更新対象として登録\n walkDependency(\n handler.stateName,\n handler.stateElement,\n address,\n handler.stateElement.staticDependency,\n handler.stateElement.dynamicDependency,\n handler.stateElement.listPaths,\n receiver as IStateProxy,\n \"new\",\n (depAddress: IStateAddress) => {\n // キャッシュを無効化(ダーティ)\n if (depAddress === address) return;\n const absDepPathInfo = getAbsolutePathInfo(handler.stateElement, depAddress.pathInfo);\n const absDepAddress = createAbsoluteStateAddress(absDepPathInfo, depAddress.listIndex);\n dirtyCacheEntryByAbsoluteStateAddress(absDepAddress);\n // 更新対象として登録\n updater.enqueueAbsoluteAddress(absDepAddress);\n }\n )\n }\n}\n\nfunction _setByAddressWithSwap(\n target : object, \n address : IStateAddress,\n absAddress: IAbsoluteStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n) {\n // elementsの場合はswapInfoを準備\n let parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n let swapInfo = getSwapInfoByAddress(parentAddress);\n if (swapInfo === null) {\n const parentValue = getByAddress(target, parentAddress, receiver, handler) ?? [];\n const listIndexes = getListIndexesByList(parentValue) ?? [];\n swapInfo = {\n value: [...parentValue], listIndexes: [...listIndexes]\n }\n setSwapInfoByAddress(parentAddress, swapInfo);\n }\n try {\n return _setByAddress(target, address, absAddress, value, receiver, handler);\n } finally {\n const index = swapInfo.value.indexOf(value);\n const currentParentValue = getByAddress(target, parentAddress, receiver, handler) ?? [];\n const currentListIndexes = Array.isArray(currentParentValue) ? (getListIndexesByList(currentParentValue) ?? []) : [];\n const curIndex = address.listIndex!.index;\n const listIndex = (index !== -1) ? \n swapInfo!.listIndexes[index] : \n createListIndex(parentAddress.listIndex, -1);\n currentListIndexes[curIndex] = listIndex;\n // 重複チェック\n // 重複していない場合、swapが完了したとみなし、インデックスを更新\n const listValueSet = new Set(currentParentValue);\n if (listValueSet.size === swapInfo!.value.length) {\n for(let i = 0; i < currentListIndexes.length; i++) {\n currentListIndexes[i].index = i;\n }\n // 完了したのでswapInfoを削除\n setSwapInfoByAddress(parentAddress, null);\n }\n }\n}\n\nexport function setByAddress(\n target : object, \n address : IStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n): any {\n const stateElement = handler.stateElement;\n // --- same-value guard (config.sameValueGuard・既定 ON) ---\n // primitive 値かつ Object.is 同値なら、set / enqueue / walkDependency / DOM 適用 /\n // $updatedCallback / DCC イベントを丸ごとスキップ(標準的なリアクティブ no-op)。\n // 参照型(object/array)は in-place mutation 取りこぼし防止のため素通し(ガードしない)。\n if (config.sameValueGuard && (value === null || typeof value !== \"object\")) {\n const oldValue = getByAddress(target, address, receiver, handler);\n if (Object.is(oldValue, value)) {\n return true;\n }\n }\n // --- end same-value guard ---\n const isSwappable = stateElement.elementPaths.has(address.pathInfo.path);\n const cacheable = address.pathInfo.wildcardCount > 0 || \n stateElement.getterPaths.has(address.pathInfo.path);\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n try {\n if (isSwappable) {\n return _setByAddressWithSwap(target, address, absAddress, value, receiver, handler);\n } else {\n return _setByAddress(target, address, absAddress, value, receiver, handler);\n }\n } finally {\n if (cacheable) {\n setCacheEntryByAbsoluteStateAddress(absAddress, {\n value: value,\n dirty: false\n });\n }\n // DCC bindable イベントディスパッチ\n const eventName = stateElement.bindableEventMap[address.pathInfo.path];\n if (eventName) {\n const rootNode = stateElement.rootNode;\n if (rootNode instanceof ShadowRoot) {\n rootNode.host.dispatchEvent(new CustomEvent(eventName, {\n detail: value,\n bubbles: true,\n }));\n }\n }\n }\n}\n\n","/**\n * resolve.ts\n *\n * StateClassのAPIとして、パス(path)とインデックス(indexes)を指定して\n * Stateの値を取得・設定するための関数(resolve)の実装です。\n *\n * 主な役割:\n * - 文字列パス(path)とインデックス配列(indexes)から、該当するState値の取得・設定を行う\n * - ワイルドカードや多重ループを含むパスにも対応\n * - value未指定時は取得(getByRef)、指定時は設定(setByRef)を実行\n *\n * 設計ポイント:\n * - getStructuredPathInfoでパスを解析し、ワイルドカード階層ごとにリストインデックスを解決\n * - handler.engine.getListIndexesSetで各階層のリストインデックス集合を取得\n * - getByRef/setByRefで値の取得・設定を一元的に処理\n * - 柔軟なバインディングやAPI経由での利用が可能\n */\n\nimport { getPathInfo } from \"../../address/PathInfo\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { setByAddress } from \"../methods/setByAddress\";\nimport { IStateHandler } from \"../types\";\n\ntype ResolveFunction = (path: string, indexes: number[], value?: any) => any;\n\nexport function resolve(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): ResolveFunction {\n return (path: string, indexes: number[], value?: any): any => {\n const pathInfo = getPathInfo(path);\n if (handler.addressStackLength > 0) {\n const lastInfo = handler.lastAddressStack?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null && lastInfo.path !== pathInfo.path) {\n // gettersに含まれる場合は依存関係を登録\n if (stateElement.getterPaths.has(lastInfo.path)) {\n stateElement.addDynamicDependency(pathInfo.path, lastInfo.path);\n }\n }\n }\n\n if (pathInfo.wildcardParentPathInfos.length > indexes.length) {\n raiseError(`indexes length is insufficient: ${path}`);\n }\n // ワイルドカード階層ごとにListIndexを解決していく\n let listIndex: IListIndex | null = null;\n for(let i = 0; i < pathInfo.wildcardParentPathInfos.length; i++) {\n const wildcardParentPathInfo = pathInfo.wildcardParentPathInfos[i];\n const wildcardAddress = createStateAddress(wildcardParentPathInfo, listIndex);\n const tmpValue = getByAddress(target, wildcardAddress, receiver, handler);\n const listIndexes = getListIndexesByList(tmpValue);\n if (listIndexes == null) {\n raiseError(`ListIndexes not found: ${wildcardParentPathInfo.path}`);\n }\n const index = indexes[i];\n listIndex = listIndexes[index] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n }\n\n // ToDo:WritableかReadonlyかを判定して適切なメソッドを呼び出す\n const address = createStateAddress(pathInfo, listIndex);\n const hasSetValue = typeof value !== \"undefined\";\n if (!hasSetValue) {\n return getByAddress(target, address, receiver, handler);\n } else {\n setByAddress(target, address, value, receiver, handler);\n }\n };\n} ","/**\n * getAllReadonly\n *\n * ワイルドカードを含む State パスから、対象となる全要素を配列で取得する。\n * Throws: LIST-201(インデックス未解決)、BIND-201(ワイルドカード情報不整合)\n */\n\nimport { getPathInfo } from \"../../address/PathInfo\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IPathInfo, IStateAddress } from \"../../address/types\";\nimport { createListDiff } from \"../../list/createListDiff\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { getContextListIndex } from \"../methods/getContextListIndex\";\nimport { IStateHandler } from \"../types\";\nimport { resolve } from \"./resolve\";\n\n// ToDo: IAbsoluteStateAddressに変更する\nconst lastValueByListAddress = new WeakMap<IStateAddress, unknown[]>();\n\ntype GetAllFunction = (path: string, indexes?: number[]) => any[];\n\nexport function getAll(\n target: object, \n prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): GetAllFunction {\n const resolveFn = resolve(target, prop, receiver, handler);\n return (path: string, indexes?: number[]): any[] => {\n const newValueByAddress: Map<IStateAddress, any> = new Map();\n const pathInfo = getPathInfo(path);\n if (handler.addressStackLength > 0) {\n const lastInfo = handler.lastAddressStack?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null && lastInfo.path !== pathInfo.path) {\n // gettersに含まれる場合は依存関係を登録\n if (stateElement.getterPaths.has(lastInfo.path)) {\n stateElement.addDynamicDependency(pathInfo.path, lastInfo.path);\n }\n }\n }\n \n if (typeof indexes === \"undefined\") {\n for(let i = 0; i < pathInfo.wildcardParentPathInfos.length; i++) {\n const wildcardPattern = pathInfo.wildcardParentPathInfos[i];\n const listIndex = getContextListIndex(handler, wildcardPattern.path);\n if (listIndex) {\n indexes = listIndex.indexes;\n break;\n }\n }\n if (typeof indexes === \"undefined\") {\n indexes = [];\n }\n }\n const walkWildcardPattern = (\n wildcardParentPathInfos: IPathInfo[],\n wildcardIndexPos: number,\n listIndex: IListIndex | null,\n indexes: number[],\n indexPos: number,\n parentIndexes: number[],\n results: number[][]\n ) => {\n const wildcardParentPathInfo = wildcardParentPathInfos[wildcardIndexPos] ?? null;\n if (wildcardParentPathInfo === null) {\n results.push(parentIndexes);\n return;\n }\n const wildcardAddress = createStateAddress(wildcardParentPathInfo, listIndex);\n const oldValue = lastValueByListAddress.get(wildcardAddress);\n const newValue = getByAddress(target, wildcardAddress, receiver, handler);\n const listDiff = createListDiff(listIndex, oldValue, newValue);\n const listIndexes = listDiff.newIndexes;\n const index = indexes[indexPos] ?? null;\n newValueByAddress.set(wildcardAddress, newValue);\n if (index === null) {\n for(let i = 0; i < listIndexes.length; i++) {\n const listIndex = listIndexes[i];\n walkWildcardPattern(\n wildcardParentPathInfos, \n wildcardIndexPos + 1, \n listIndex, \n indexes, \n indexPos + 1, \n parentIndexes.concat(listIndex.index),\n results);\n }\n } else {\n const listIndex = listIndexes[index] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n if ((wildcardIndexPos + 1) < wildcardParentPathInfos.length) {\n walkWildcardPattern(\n wildcardParentPathInfos, \n wildcardIndexPos + 1, \n listIndex, \n indexes, \n indexPos + 1, \n parentIndexes.concat(listIndex.index),\n results\n );\n } else {\n // 最終ワイルドカード層まで到達しているので、結果を確定\n results.push(parentIndexes.concat(listIndex.index));\n }\n }\n }\n const resultIndexes: number[][] = [];\n walkWildcardPattern(\n pathInfo.wildcardParentPathInfos, \n 0, \n null, \n indexes, \n 0, \n [], \n resultIndexes\n );\n const resultValues: any[] = [];\n for(let i = 0; i < resultIndexes.length; i++) {\n resultValues.push(resolveFn(\n pathInfo.path,\n resultIndexes[i]\n ));\n }\n for(const [address, newValue] of newValueByAddress.entries()) {\n lastValueByListAddress.set(address, newValue);\n }\n return resultValues;\n }\n }\n","/**\n * getListIndex.ts\n *\n * StateClassの内部APIとして、パス情報(IResolvedAddress)から\n * 対応するリストインデックス(IListIndex)を取得する関数です。\n *\n * 主な役割:\n * - パスのワイルドカード種別(context/all/partial/none)に応じてリストインデックスを解決\n * - context型は現在のループコンテキストからリストインデックスを取得\n * - all型は各階層のリストインデックス集合からインデックスを辿って取得\n * - partial型やnone型は未実装またはnullを返す\n *\n * 設計ポイント:\n * - ワイルドカードや多重ループ、ネストした配列バインディングに柔軟に対応\n * - getListIndexesByListで各階層のリストインデックス集合を取得\n * - エラー時はraiseErrorで例外を投げる\n */\n\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IResolvedAddress } from \"../../address/types\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\nimport { getByAddress } from \"./getByAddress\";\nimport { getContextListIndex } from \"./getContextListIndex\";\n\nexport function getListIndex(\n target : object, \n resolvedAddress: IResolvedAddress, \n receiver: any,\n handler: IStateHandler\n): IListIndex | null {\n const pathInfo = resolvedAddress.pathInfo;\n switch (resolvedAddress.wildcardType) {\n case \"none\":\n return null;\n case \"context\": {\n const lastWildcardPath = pathInfo.wildcardPaths.at(-1) ?? \n raiseError(`lastWildcardPath is null: ${resolvedAddress.pathInfo.path}`);\n return getContextListIndex(handler, lastWildcardPath) ?? \n raiseError(`ListIndex not found: ${resolvedAddress.pathInfo.path}`);\n }\n case \"all\": {\n let parentListIndex: IListIndex | null = null;\n for(let i = 0; i < resolvedAddress.pathInfo.wildcardCount; i++) {\n const wildcardParentPathInfo = resolvedAddress.pathInfo.wildcardParentPathInfos[i] ?? \n raiseError(`wildcardParentPathInfo is null: ${resolvedAddress.pathInfo.path}`);\n const wildcardParentAddress = createStateAddress(wildcardParentPathInfo, parentListIndex);\n const wildcardParentValue = getByAddress(target, wildcardParentAddress, receiver, handler);\n const wildcardParentListIndexes: IListIndex[] = getListIndexesByList(wildcardParentValue) ?? \n raiseError( `ListIndex not found: ${wildcardParentPathInfo.path}`);\n const wildcardIndex = resolvedAddress.wildcardIndexes[i] ?? \n raiseError(`wildcardIndex is null: ${resolvedAddress.pathInfo.path}`);\n parentListIndex = wildcardParentListIndexes[wildcardIndex] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n }\n return parentListIndex;\n }\n case \"partial\": {\n raiseError(`Partial wildcard type is not supported yet: ${resolvedAddress.pathInfo.path}`);\n }\n }\n}\n","import { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IStateAddress } from \"../../address/types\";\nimport { dirtyCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { walkDependency } from \"../../dependency/walkDependency\";\nimport { getUpdater } from \"../../updater/updater\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { IStateHandler, IStateProxy } from \"../types\";\n\n\ntype PostFunction = (path: string) => void;\n\nexport function postUpdate(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): PostFunction {\n const stateElement = handler.stateElement;\n return (path: string): void => {\n const resolvedAddress = getResolvedAddress(path);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const address = createStateAddress(resolvedAddress.pathInfo, listIndex);\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const updater = getUpdater();\n updater.enqueueAbsoluteAddress(absAddress);\n // 依存関係のあるキャッシュを無効化(ダーティ)、更新対象として登録\n walkDependency(\n handler.stateName,\n handler.stateElement,\n address,\n handler.stateElement.staticDependency,\n handler.stateElement.dynamicDependency,\n handler.stateElement.listPaths,\n receiver as IStateProxy,\n \"new\",\n (depAddress: IStateAddress) => {\n // キャッシュを無効化(ダーティ)\n const absDepPathInfo = getAbsolutePathInfo(stateElement, depAddress.pathInfo);\n const absDepAddress = createAbsoluteStateAddress(absDepPathInfo, depAddress.listIndex);\n dirtyCacheEntryByAbsoluteStateAddress(absDepAddress);\n // 更新対象として登録\n updater.enqueueAbsoluteAddress(absDepAddress);\n }\n );\n }\n}","/**\n * trackDependency.ts\n *\n * StateClassのAPIとして、getterチェーン中に参照されたパス間の\n * 依存関係を動的に登録するための関数(trackDependency)の実装です。\n *\n * 主な役割:\n * - 現在解決中のStatePropertyRef(lastRefStack)を取得\n * - pathManager.gettersに登録されているgetterの場合のみ依存を追跡\n * - 自身と同一パターンでない参照に対してaddDynamicDependencyを呼び出す\n *\n * 設計ポイント:\n * - lastRefStackが存在しない場合はSTATE-202エラーを発生させる\n * - getter同士の再帰(自己依存)は登録しない\n * - 動的依存はpathManagerに集約し、キャッシュの無効化に利用する\n */\n\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\n\n/**\n * 現在解決中のgetterから、指定されたパスへの動的依存を登録する関数を返します。\n *\n * - pathManager.gettersに登録されているgetterのみ依存追跡を行う\n * - 自己参照は除外し、異なるパターン間の依存だけを記録\n * - 動的依存はpathManager.addDynamicDependencyで集中管理される\n *\n * @param target プロキシ対象オブジェクト\n * @param prop アクセスされたプロパティキー\n * @param receiver プロキシレシーバ\n * @param handler StateClassハンドラ\n * @returns 引数pathで指定されたパターンへの依存を登録する無名関数\n */\n\ntype TrackDependencyFunction = (path: string) => void;\n\nexport function trackDependency(\n _target: object, \n _prop: PropertyKey, \n _receiver: any,\n handler: IStateHandler\n): TrackDependencyFunction {\n return (path: string): void => {\n if (handler.addressStackLength === 0) {\n raiseError(`No active state reference to track dependency for path \"${path}\".`);\n }\n const lastInfo = handler.lastAddressStack?.pathInfo ?? \n raiseError('Internal error: lastAddressStack is null');\n const stateElement = handler.stateElement;\n if (handler.stateElement.getterPaths.has(lastInfo.path) &&\n lastInfo.path !== path) {\n stateElement.addDynamicDependency(path, lastInfo.path);\n }\n };\n}\n","/**\n * updatedCallback.ts\n *\n * Utility function to invoke the StateClass lifecycle hook \"$updatedCallback\".\n *\n * Main responsibilities:\n * - Invokes $updatedCallback method if defined on the object (target)\n * - Callback is invoked with target's this context, passing IReadonlyStateProxy (receiver) as argument\n * - Executable as async function (await compatible)\n *\n * Design points:\n * - Safely retrieves $updatedCallback property using Reflect.get\n * - Does nothing if the callback doesn't exist\n * - Used for lifecycle management and update handling logic\n */\n\nimport { IAbsoluteStateAddress } from \"../../address/types\";\nimport { STATE_UPDATED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\n/**\n * Invokes the $updatedCallback lifecycle hook if defined on the target.\n * Aggregates updated paths and their indexes before passing to the callback.\n * @param target - Target object to check for callback\n * @param refs - Array of state property references that were updated\n * @param receiver - State proxy to pass as this context\n * @param handler - State handler (unused but part of signature)\n * @returns Promise or void depending on callback implementation\n */\nexport function updatedCallback(\n target: object, \n refs: IAbsoluteStateAddress[], \n receiver: any,\n handler: IStateHandler\n): unknown {\n const callback: unknown = Reflect.get(target, STATE_UPDATED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n const paths: Set<string> = new Set();\n // ToDo:現状では1階層のみのワイルドカードに対応。多階層対応は後回し\n const indexesListByPath: Record<string, Array<number[]>> = {};\n for (const ref of refs) {\n const pathInfo = ref.absolutePathInfo.pathInfo;\n let pathName;\n if (ref.absolutePathInfo.stateName === handler.stateName) {\n pathName = pathInfo.path;\n } else {\n pathName = pathInfo.path + \"@\" + ref.absolutePathInfo.stateName;\n }\n paths.add(pathName);\n if (pathInfo.wildcardCount > 0) {\n const indexes = ref.listIndex!.indexes ?? [];\n const indexesList = indexesListByPath[pathName];\n if (typeof indexesList === \"undefined\") {\n indexesListByPath[pathName] = [indexes];\n } else {\n indexesList.push(indexes);\n }\n }\n }\n return callback.call(receiver, Array.from(paths), indexesListByPath);\n }\n}","/**\n * setLoopContext.ts\n *\n * StateClassの内部APIとして、ループコンテキスト(ILoopContext)を一時的に設定し、\n * 指定した同期/非同期コールバックをそのスコープ内で実行するための関数です。\n *\n * 主な役割:\n * - handler.loopContextにループコンテキストを一時的に設定\n * - 既にループコンテキストが設定されている場合はエラーを投げる\n * - 常にスコープを設定しコールバックを実行\n * - finallyで必ずloopContextをnullに戻し、スコープ外への影響を防止\n *\n * 設計ポイント:\n * - ループバインディングや多重ループ時のスコープ管理を安全に行う\n * - finallyで状態復元を保証し、例外発生時も安全\n * - 非同期処理にも対応\n */\n\nimport { ILoopContext } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\n\nfunction _setLoopContext<T>(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => T\n): T {\n if (typeof handler.loopContext !== \"undefined\") {\n raiseError('already in loop context');\n }\n handler.setLoopContext(loopContext);\n try {\n handler.pushAddress(loopContext);\n try {\n return callback();\n } finally {\n handler.popAddress();\n }\n } finally {\n handler.clearLoopContext();\n }\n}\n\nexport function setLoopContext(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => any\n): any {\n return _setLoopContext(handler, loopContext, callback);\n}\n\nexport async function setLoopContextAsync(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => Promise<any>\n): Promise<any> {\n return await _setLoopContext(handler, loopContext, callback);\n}\n","/**\n * get.ts\n *\n * StateClassのProxyトラップとして、プロパティアクセス時の値取得処理を担う関数(get)の実装です。\n *\n * 主な役割:\n * - 文字列プロパティの場合、特殊プロパティ($1〜$9, $resolve, $getAll, $navigate)に応じた値やAPIを返却\n * - 通常のプロパティはgetResolvedPathInfoでパス情報を解決し、getListIndexでリストインデックスを取得\n * - getByRefで構造化パス・リストインデックスに対応した値を取得\n * - シンボルプロパティの場合はhandler.callableApi経由でAPIを呼び出し\n * - それ以外はReflect.getで通常のプロパティアクセスを実行\n *\n * 設計ポイント:\n * - $1〜$9は直近のStatePropertyRefのリストインデックス値を返す特殊プロパティ\n * - $resolve, $getAll, $navigateはAPI関数やルーターインスタンスを返す\n * - 通常のプロパティアクセスもバインディングや多重ループに対応\n * - シンボルAPIやReflect.getで拡張性・互換性も確保\n */\n\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IAbsoluteStateAddress, IStateAddress } from \"../../address/types\";\nimport { getCommandNamespace } from \"../../command/commandNamespace\";\nimport { DELIMITER, INDEX_BY_INDEX_NAME, STATE_COMMAND_NAMESPACE_NAME, STATE_STREAM_ERROR_NAMESPACE_NAME, STATE_STREAM_STATUS_NAMESPACE_NAME } from \"../../define\";\nimport { raiseError } from \"../../raiseError\";\nimport { getStreamErrorNamespace, getStreamStatusNamespace } from \"../../stream/streamNamespace\";\nimport { connectedCallback } from \"../apis/connectedCallback\";\nimport { disconnectedCallback } from \"../apis/disconnectedCallback\";\nimport { getAll } from \"../apis/getAll\";\nimport { postUpdate } from \"../apis/postUpdate\";\nimport { resolve } from \"../apis/resolve\";\nimport { trackDependency } from \"../apis/trackDependency\";\nimport { updatedCallback } from \"../apis/updatedCallback\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { setByAddress } from \"../methods/setByAddress\";\nimport { setLoopContext, setLoopContextAsync } from \"../methods/setLoopContext\";\nimport { connectedCallbackSymbol, disconnectedCallbackSymbol, getByAddressSymbol, setByAddressSymbol, setLoopContextAsyncSymbol, setLoopContextSymbol, updatedCallbackSymbol } from \"../symbols\";\nimport { IStateHandler } from \"../types\";\n\n// `$streamStatus.<name>` / `$streamError.<name>` の dotted パス判定用プレフィックス\nconst STREAM_STATUS_PATH_PREFIX = `${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}`;\nconst STREAM_ERROR_PATH_PREFIX = `${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}`;\n\nexport function get(\n target : object, \n prop : PropertyKey, \n receiver: any,\n handler : IStateHandler\n): any {\n const index = INDEX_BY_INDEX_NAME[prop];\n if (typeof index !== \"undefined\") {\n if (handler.addressStackLength === 0) {\n raiseError(`No active state reference to get list index for \"${prop.toString()}\".`);\n }\n const listIndex = handler.lastAddressStack?.listIndex;\n return listIndex?.indexes[index] ?? raiseError(`ListIndex not found: ${prop.toString()}`);\n }\n if (typeof prop === \"string\") {\n if (prop[0] === '$') {\n switch (prop) {\n case \"$stateElement\": {\n return handler.stateElement;\n }\n case \"$getAll\": {\n return (path: string, indexes?: number[]): any[] => {\n return getAll(\n target, \n prop, \n receiver,\n handler\n )(path, indexes);\n }\n }\n case \"$postUpdate\": {\n return (path: string): void => {\n return postUpdate(\n target, \n prop, \n receiver,\n handler\n )(path);\n }\n }\n case \"$resolve\": {\n return (path: string, indexes: number[], value?: any): any => {\n return resolve(\n target, \n prop, \n receiver,\n handler\n )(path, indexes, value);\n }\n }\n case \"$trackDependency\": {\n return (path: string): void => {\n return trackDependency(\n target,\n prop,\n receiver,\n handler\n )(path);\n }\n }\n case STATE_COMMAND_NAMESPACE_NAME: {\n return getCommandNamespace(handler.stateElement);\n }\n case STATE_STREAM_STATUS_NAMESPACE_NAME: {\n return getStreamStatusNamespace(handler.stateElement);\n }\n case STATE_STREAM_ERROR_NAMESPACE_NAME: {\n return getStreamErrorNamespace(handler.stateElement);\n }\n }\n // switch 不一致の $ プロパティのうち、`$streamStatus.<name>` / `$streamError.<name>`\n // の dotted パスだけは通常のパス解決(getByAddress)へフォールスルーさせる。\n // これが computed(getter)内での依存追跡付き読み取りの正規形\n // (checkDependency が getter スコープで動的依存を登録し、$postUpdate の\n // walkDependency で computed が無効化される、docs/state-streams-design.md §4-3)。\n // それ以外の未知 $ プロパティは従来どおり undefined を返す。\n if (!prop.startsWith(STREAM_STATUS_PATH_PREFIX) && !prop.startsWith(STREAM_ERROR_PATH_PREFIX)) {\n return undefined;\n }\n }\n const resolvedAddress = getResolvedAddress(prop);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const stateAddress = createStateAddress(resolvedAddress.pathInfo, listIndex);\n return getByAddress(\n target,\n stateAddress,\n receiver,\n handler\n );\n } else if (typeof prop === \"symbol\") {\n switch (prop) {\n case setLoopContextAsyncSymbol: {\n return (loopContext: any, callback = async (): Promise<any> => {}): Promise<any> => {\n return setLoopContextAsync(handler, loopContext, callback);\n };\n }\n case setLoopContextSymbol: {\n return (loopContext: any, callback = (): any => {}): any => {\n return setLoopContext(handler, loopContext, callback);\n };\n }\n case getByAddressSymbol: {\n return (address: IStateAddress): any => {\n return getByAddress(\n target,\n address,\n receiver,\n handler\n );\n }\n }\n case setByAddressSymbol: {\n return (address: IStateAddress, value: any): void => {\n return setByAddress(\n target,\n address,\n value,\n receiver,\n handler\n );\n }\n }\n case connectedCallbackSymbol: {\n return (): Promise<void> => {\n return connectedCallback(\n target,\n prop,\n receiver,\n handler\n );\n }\n }\n case disconnectedCallbackSymbol: {\n return (): void => {\n return disconnectedCallback(\n target,\n prop,\n receiver,\n handler\n );\n }\n }\n case updatedCallbackSymbol: {\n return (\n refs: IAbsoluteStateAddress[]\n ): unknown => {\n return updatedCallback(\n target,\n refs,\n receiver,\n handler\n );\n }\n }\n }\n\n return Reflect.get(\n target, \n prop, \n receiver\n );\n }\n}\n","/**\n * set.ts\n *\n * StateClassのProxyトラップとして、プロパティ設定時の値セット処理を担う関数(set)の実装です。\n *\n * 主な役割:\n * - 文字列プロパティの場合、getResolvedPathInfoでパス情報を解決し、getListIndexでリストインデックスを取得\n * - setByRefで構造化パス・リストインデックスに対応した値設定を実行\n * - それ以外(シンボル等)の場合はReflect.setで通常のプロパティ設定を実行\n *\n * 設計ポイント:\n * - バインディングや多重ループ、ワイルドカードを含むパスにも柔軟に対応\n * - setByRefを利用することで、依存解決や再描画などの副作用も一元管理\n * - Reflect.setで標準的なプロパティ設定の互換性も確保\n */\n\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { IStateHandler } from \"../types\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { setByAddress } from \"../methods/setByAddress\";\n\nexport function set(\n target : object, \n prop : PropertyKey, \n value : any, \n receiver: any,\n handler : IStateHandler\n): boolean {\n if (typeof prop === \"string\") {\n const resolvedAddress = getResolvedAddress(prop);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const stateAddress = createStateAddress(resolvedAddress.pathInfo, listIndex);\n return setByAddress(\n target, \n stateAddress,\n value, \n receiver,\n handler\n );\n } else {\n return Reflect.set(\n target, \n prop, \n value, \n receiver\n );\n }\n}\n","import { IStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IStateHandler, IStateProxy, Mutability } from \"./types\";\nimport { get as trapGet } from \"./traps/get\";\nimport { set as trapSet } from \"./traps/set\";\nimport { ILoopContext } from \"../list/types\";\nimport { IState } from \"../types\";\nimport { MAX_LOOP_DEPTH } from \"../define\";\n\nclass StateHandler implements IStateHandler {\n private _stateElement: IStateElement;\n private _stateName: string;\n private _addressStack: (IStateAddress | null | undefined)[] = Array(MAX_LOOP_DEPTH).fill(undefined);\n private _addressStackIndex: number = -1;\n private _loopContext: ILoopContext | null | undefined;\n private _mutability: Mutability;\n \n constructor(\n rootNode: Node,\n stateName: string,\n mutability: Mutability\n ) {\n this._stateName = stateName;\n const stateElement = getStateElementByName(rootNode, this._stateName);\n if (stateElement === null) {\n raiseError(`StateHandler: State element with name \"${this._stateName}\" not found.`);\n }\n this._stateElement = stateElement;\n this._mutability = mutability;\n }\n\n get stateName(): string {\n return this._stateName;\n }\n\n get stateElement(): IStateElement {\n return this._stateElement;\n }\n\n get lastAddressStack(): IStateAddress | null {\n let address: IStateAddress | null | undefined = undefined;\n if (this._addressStackIndex >= 0) {\n address = this._addressStack[this._addressStackIndex];\n }\n if (typeof address === \"undefined\") {\n raiseError(`Last address stack is undefined.`);\n }\n return address;\n }\n\n get addressStackLength(): number {\n return this._addressStackIndex + 1;\n }\n\n get loopContext(): ILoopContext | null | undefined {\n return this._loopContext;\n }\n\n pushAddress(address: IStateAddress | null): void {\n this._addressStackIndex++;\n if (this._addressStackIndex >= MAX_LOOP_DEPTH) {\n raiseError(`Exceeded maximum address stack depth of ${MAX_LOOP_DEPTH}. Possible infinite loop.`);\n }\n this._addressStack[this._addressStackIndex] = address;\n }\n\n popAddress(): IStateAddress | null {\n if (this._addressStackIndex < 0) {\n return null;\n }\n const address = this._addressStack[this._addressStackIndex];\n if (typeof address === \"undefined\") {\n raiseError(`Address stack at index ${this._addressStackIndex} is undefined.`);\n }\n this._addressStack[this._addressStackIndex] = undefined;\n this._addressStackIndex--;\n return address;\n }\n\n setLoopContext(loopContext: ILoopContext | null): void {\n this._loopContext = loopContext;\n }\n\n clearLoopContext(): void {\n this._loopContext = undefined;\n }\n\n get(\n target : object, \n prop : PropertyKey, \n receiver: any\n ): any {\n return trapGet(target, prop, receiver, this);\n }\n\n set(\n target : object, \n prop : PropertyKey, \n value : any, \n receiver: any\n ): boolean {\n if (this._mutability === \"readonly\") {\n raiseError(`State \"${this._stateName}\" is readonly.`);\n }\n return trapSet(target, prop, value, receiver, this);\n }\n\n has(\n target: object, \n prop : PropertyKey\n ): boolean {\n return Reflect.has(target, prop);\n// return Reflect.has(target, prop) || this.symbols.has(prop) || this.apis.has(prop);\n }\n\n}\n\nexport function createStateProxy(\n rootNode: Node,\n state: IState,\n stateName: string,\n mutability: Mutability\n): IStateProxy {\n const handler = new StateHandler(rootNode, stateName, mutability);\n const stateProxy = new Proxy<IStateProxy>(state as IStateProxy, handler);\n return stateProxy;\n}\n\nexport const __private__ = {\n StateHandler,\n};","\n// WebComponent専用のキャッシュ\n// outerState.tsからのアクセスで、これを返す\n\nimport { IAbsoluteStateAddress } from \"../address/types\";\n\nconst lastValueByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, any> = new WeakMap();\n\nexport function setLastValueByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, value: any): void {\n lastValueByAbsoluteStateAddress.set(absoluteStateAddress, value);\n}\n\nexport function getLastValueByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): any {\n return lastValueByAbsoluteStateAddress.get(absoluteStateAddress);\n}\n","import { IStateElement } from \"../components/types\";\n\nconst stateElementByWebComponent: WeakMap<Element, Map<string, IStateElement>> = new WeakMap();\n\nexport function setStateElementByWebComponent(webComponent: Element, stateName: string, stateElement: IStateElement): void {\n let stateMap = stateElementByWebComponent.get(webComponent);\n if (!stateMap) {\n stateMap = new Map();\n stateElementByWebComponent.set(webComponent, stateMap);\n }\n stateMap.set(stateName, stateElement);\n}\n\nexport function getStateElementByWebComponent(webComponent: Element, stateName: string): IStateElement | null {\n const stateMap = stateElementByWebComponent.get(webComponent);\n if (!stateMap) {\n return null;\n }\n return stateMap.get(stateName) ?? null;\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IAbsolutePathInfo } from \"../address/types\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { addBindingByNode } from \"../bindings/getBindingsByNode\";\nimport { IStateElement } from \"../components/types\";\nimport { DELIMITER } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\n\nexport interface IMappingRule {\n innerAbsPathInfo: IAbsolutePathInfo;\n outerAbsPathInfo: IAbsolutePathInfo;\n}\n\nconst innerMappingByElement: WeakMap<Element, Map<IAbsolutePathInfo, IAbsolutePathInfo>> = new WeakMap();\nconst outerMappingByElement: WeakMap<Element, Map<IAbsolutePathInfo, IAbsolutePathInfo>> = new WeakMap();\nconst primaryMappingRuleSetByElement: WeakMap<Element, Set<IMappingRule>> = new WeakMap();\nconst primaryBindingByMappingRule: WeakMap<IMappingRule, IBindingInfo> = new WeakMap();\n\nfunction createMappingRuleByBinding(innerState: IStateElement, binding: IBindingInfo): IMappingRule {\n const innerPathInfo = getPathInfo(binding.propSegments.slice(1).join(DELIMITER));\n const innerAbsPathInfo = getAbsolutePathInfo(innerState, innerPathInfo);\n const outerAbsStateAddress = getAbsoluteStateAddressByBinding(binding);\n const outerAbsPathInfo = outerAbsStateAddress.absolutePathInfo;\n return { innerAbsPathInfo, outerAbsPathInfo };\n}\n\nexport function buildPrimaryMappingRule(webComponent: Element, stateName: string, bindings: IBindingInfo[]): void {\n if (bindings.length === 0) {\n return;\n }\n const innerState = getStateElementByWebComponent(webComponent, stateName);\n if (innerState === null) {\n raiseError('State element not found for web component.');\n }\n const innerMappingRule = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n const outerMappingRule = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n for (const binding of bindings) {\n const mappingRule = createMappingRuleByBinding(innerState, binding);\n let primaryMappingRuleSet = primaryMappingRuleSetByElement.get(webComponent);\n if (typeof primaryMappingRuleSet === 'undefined') {\n primaryMappingRuleSetByElement.set(webComponent, new Set([mappingRule]));\n } else {\n primaryMappingRuleSet.add(mappingRule);\n }\n const innerAbsPathInfo = mappingRule.innerAbsPathInfo;\n const outerAbsPathInfo = mappingRule.outerAbsPathInfo;\n primaryBindingByMappingRule.set(mappingRule, binding);\n innerMappingRule.set(innerAbsPathInfo, outerAbsPathInfo);\n outerMappingRule.set(outerAbsPathInfo, innerAbsPathInfo);\n }\n innerMappingByElement.set(webComponent, innerMappingRule);\n outerMappingByElement.set(webComponent, outerMappingRule);\n}\n\nexport function getInnerAbsolutePathInfo(webComponent: Element, outerAbsPathInfo: IAbsolutePathInfo): IAbsolutePathInfo | null {\n const mapping = outerMappingByElement.get(webComponent);\n if (typeof mapping === 'undefined') {\n return null;\n }\n return mapping.get(outerAbsPathInfo) ?? null;\n}\n\nexport function getOuterAbsolutePathInfo(webComponent: Element, innerAbsPathInfo: IAbsolutePathInfo): IAbsolutePathInfo | null {\n let innerMapping = innerMappingByElement.get(webComponent);\n if (typeof innerMapping === 'undefined') {\n innerMapping = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n innerMappingByElement.set(webComponent, innerMapping);\n }\n if (innerMapping.has(innerAbsPathInfo)) {\n return innerMapping.get(innerAbsPathInfo)!\n }\n let outerMapping = outerMappingByElement.get(webComponent);\n if (typeof outerMapping === 'undefined') {\n outerMapping = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n outerMappingByElement.set(webComponent, outerMapping);\n }\n // 内側からのアクセスの場合、ルールがなければプライマリルールから新たにルールとバインディングを生成する\n const primaryMappingRuleSet = primaryMappingRuleSetByElement.get(webComponent);\n if (typeof primaryMappingRuleSet === 'undefined') {\n // マッピングルールが存在しない場合はnullを返し、ローカル状態へのフォールバックを許可する\n return null;\n }\n let primaryMappingRule: IMappingRule | null = null;\n for(const currentPrimaryMappingRule of primaryMappingRuleSet) {\n // innerPathInfoがprimaryMappingRuleのinnerPathInfoを包含しているか\n if (!innerAbsPathInfo.pathInfo.cumulativePathInfoSet.has(currentPrimaryMappingRule.innerAbsPathInfo.pathInfo)) {\n continue;\n }\n if (currentPrimaryMappingRule.innerAbsPathInfo.pathInfo.segments.length === innerAbsPathInfo.pathInfo.segments.length) {\n raiseError('Duplicate mapping rule for web component.');\n }\n primaryMappingRule = currentPrimaryMappingRule;\n break;\n }\n if (primaryMappingRule === null) {\n // マッピングルールに一致しない場合はnullを返し、ローカル状態へのフォールバックを許可する\n return null;\n }\n // マッチした残りのパスをouterPathInfoに付与して新たなルールを生成\n const primaryBinding = primaryBindingByMappingRule.get(primaryMappingRule);\n /* c8 ignore start */\n if (typeof primaryBinding === 'undefined') {\n raiseError('Binding not found for primary mapping rule on web component.');\n }\n /* c8 ignore stop */\n const outerRemainingSegments = innerAbsPathInfo.pathInfo.segments.slice(primaryMappingRule.innerAbsPathInfo.pathInfo.segments.length);\n const outerSegments = primaryMappingRule.outerAbsPathInfo.pathInfo.segments.concat(outerRemainingSegments);\n const outerPathInfo = getPathInfo(outerSegments.join(DELIMITER));\n const rootNode = webComponent.getRootNode() as Node;\n const outerStateElement = getStateElementByName(rootNode, primaryBinding.stateName);\n if (outerStateElement === null) {\n raiseError(`State element with name \"${primaryBinding.stateName}\" not found for web component.`);\n }\n const outerAbsPathInfo = getAbsolutePathInfo(outerStateElement, outerPathInfo);\n innerMapping.set(innerAbsPathInfo, outerAbsPathInfo);\n outerMapping.set(outerAbsPathInfo, innerAbsPathInfo);\n\n // ルールに対応するバインディングを生成\n const newBinding: IBindingInfo = {\n ...primaryBinding,\n propName: innerAbsPathInfo.pathInfo.path,\n propSegments: innerAbsPathInfo.pathInfo.segments,\n statePathName: outerAbsPathInfo.pathInfo.path,\n statePathInfo: outerAbsPathInfo.pathInfo,\n }\n addBindingByNode(webComponent, newBinding);\n\n return outerAbsPathInfo;\n}","\nfunction cloneWithDescriptors(obj: object) {\n const proto = Object.getPrototypeOf(obj);\n const clone = Object.create(proto);\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n for(const key in descriptors) {\n const descriptor = descriptors[key];\n if (descriptor.writable === false) {\n descriptor.writable = true;\n }\n }\n Object.defineProperties(clone, descriptors);\n return clone;\n}\n\nexport function meltFrozenObject(frozenObj: object) {\n return cloneWithDescriptors(frozenObj);\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateElement } from \"../components/types\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { IListIndex } from \"../list/types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { setLastValueByAbsoluteStateAddress } from \"./lastValueByAbsoluteStateAddress\";\nimport { getOuterAbsolutePathInfo } from \"./MappingRule\";\nimport { meltFrozenObject } from \"./meltFrozenObject\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IInnerState } from \"./types\";\n\nclass InnerStateProxyHandler implements ProxyHandler<IInnerState> {\n private _webComponent: Element;\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._webComponent = webComponent;\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IInnerState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n if (prop === \"then\") {\n // Promiseのthenと誤認識されるのを防ぐため、Promiseに存在するプロパティはProxyのgetで処理しない\n return undefined;\n }\n if (prop[0] === '$') {\n return undefined;\n }\n // 1. getter完全一致 → ローカル計算(this = receiverで依存自動追跡)\n if (this._innerStateElement.getterPaths.has(prop) && prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // 2 & 3. マッピング完全一致 / サブパス → 親の状態\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n const loopContext = getLoopContextByNode(this._webComponent);\n let value = undefined;\n outerAbsPathInfo.stateElement.createState(\"readonly\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n value = state[outerAbsPathInfo.pathInfo.path];\n let listIndex: IListIndex | null = null;\n if (loopContext !== null && loopContext.listIndex !== null) {\n if (outerAbsPathInfo.pathInfo.wildcardCount > 0) {\n // wildcardPathSetとloopContextのpathInfoSetのintersectionのうち、segment数が最も多いものをouterAbsPathInfoにする\n // 例: outerPathInfoが \"todos.*.name\"で、loopContextのpathInfoSetに \"todos.0.name\", \"todos.1.name\"がある場合、\"todos.0.name\"や\"todos.1.name\"をouterAbsPathInfoにする\n listIndex = loopContext.listIndex.at(outerAbsPathInfo.pathInfo.wildcardCount - 1);\n }\n }\n const absStateAddress = createAbsoluteStateAddress(outerAbsPathInfo, listIndex);\n setLastValueByAbsoluteStateAddress(absStateAddress, value);\n });\n });\n return value;\n }\n // 4. ローカルデータプロパティ → ローカル値\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // 5. エラー\n raiseError(`Property \"${prop}\" not found in inner state: no mapping rule and no local state property.`);\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IInnerState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n // 1. setter完全一致 → ローカル処理(this = receiverで親への書き込み可能)\n if (this._innerStateElement.setterPaths.has(prop) && prop in target) {\n return Reflect.set(target, prop, value, receiver);\n }\n // 2 & 3. マッピング完全一致 / サブパス → 親に書く\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n const loopContext = getLoopContextByNode(this._webComponent);\n outerAbsPathInfo.stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[outerAbsPathInfo.pathInfo.path] = value;\n });\n });\n return true;\n }\n // 4. ローカルデータプロパティ → ローカルに書く\n if (prop in target) {\n return Reflect.set(target, prop, value, receiver);\n }\n // 5. エラー\n raiseError(`Property \"${prop}\" not found in inner state: no mapping rule and no local state property.`);\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n\n has(target: IInnerState, prop: string | symbol): boolean {\n if (typeof prop === 'string') {\n if (prop[0] === '$') {\n return false;\n }\n // 1. getter/setter完全一致\n if ((this._innerStateElement.getterPaths.has(prop) || this._innerStateElement.setterPaths.has(prop)) && prop in target) {\n return true;\n }\n // 2 & 3. マッピング\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n return true;\n }\n // 4. ローカルデータ\n if (prop in target) {\n return true;\n }\n // 5. 存在しない\n return false;\n } else {\n return Reflect.has(target, prop);\n }\n }\n\n}\n\nexport function createInnerState(webComponent: Element, stateName: string): IInnerState {\n const handler = new InnerStateProxyHandler(webComponent, stateName);\n const innerState = getStateElementByWebComponent(webComponent, stateName);\n /* c8 ignore start */\n if (innerState === null) {\n raiseError('State element not found for web component.');\n }\n /* c8 ignore stop */\n if (innerState.boundComponentStateProp === null) {\n raiseError('State element is not bound to any component state prop.');\n }\n if (!(innerState.boundComponentStateProp in webComponent)) {\n raiseError(`State element is not bound to a valid component state prop: ${innerState.boundComponentStateProp}`);\n }\n const state = (webComponent as any)[innerState.boundComponentStateProp];\n if (typeof state !== 'object' || state === null) {\n raiseError(`Invalid state object for component state prop: ${innerState.boundComponentStateProp}`);\n }\n return new Proxy(meltFrozenObject(state), handler);\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getLastValueByAbsoluteStateAddress } from \"./lastValueByAbsoluteStateAddress\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nclass OuterStateProxyHandler implements ProxyHandler<IOuterState> {\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IOuterState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const absStateAddress = createAbsoluteStateAddress(innerAbsPathInfo, null);\n return getLastValueByAbsoluteStateAddress(absStateAddress);\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IOuterState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n this._innerStateElement.createState(\"readonly\", (state) => {\n state.$postUpdate(innerAbsPathInfo.pathInfo.path);\n });\n return true;\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n}\n\nexport function createOuterState(webComponent: Element, stateName: string): IOuterState {\n const handler = new OuterStateProxyHandler(webComponent, stateName);\n return new Proxy({}, handler);\n}\n","import { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nclass PlainOuterStateProxyHandler implements ProxyHandler<IOuterState> {\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IOuterState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n let value;\n this._innerStateElement.createState(\"readonly\", (state) => {\n value = state[prop];\n });\n return value;\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IOuterState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n this._innerStateElement.createState(\"writable\", (state) => {\n state[prop] = value;\n });\n return true;\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n}\n\nexport function createPlainOuterState(webComponent: Element, stateName: string): IOuterState {\n const handler = new PlainOuterStateProxyHandler(webComponent, stateName);\n return new Proxy({}, handler);\n}\n","import { getBindingsByNode } from \"../bindings/getBindingsByNode\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { WEBCOMPONENT_STATE_READY_CALLBACK_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { markWebComponentAsComplete } from \"./completeWebComponent\";\nimport { createInnerState } from \"./innerState\";\nimport { buildPrimaryMappingRule } from \"./MappingRule\";\nimport { meltFrozenObject } from \"./meltFrozenObject\";\nimport { createOuterState } from \"./outerState\";\nimport { createPlainOuterState } from \"./plainOuterState\";\nimport { setStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nconst getOuter = (outerState: IOuterState) => (): IOuterState => outerState;\n\nexport function bindWebComponent(\n innerStateElement: IStateElement,\n component: Element,\n stateProp: string,\n state: Record<string, any>\n): void {\n setStateElementByWebComponent(component, stateProp, innerStateElement);\n if (component.hasAttribute(config.bindAttributeName)) {\n const bindings = (getBindingsByNode(component) ?? []).filter(\n binding => binding.propSegments[0] === stateProp\n );\n buildPrimaryMappingRule(component, stateProp, bindings);\n const outerState = createOuterState(component, stateProp);\n const innerState = createInnerState(component, stateProp);\n innerStateElement.setInitialState(innerState);\n Object.defineProperty(component, stateProp, {\n get: getOuter(outerState),\n enumerable: true,\n configurable: true,\n });\n } else {\n innerStateElement.setInitialState(meltFrozenObject(state));\n const outerState = createPlainOuterState(component, stateProp);\n Object.defineProperty(component, stateProp, {\n get: getOuter(outerState),\n enumerable: true,\n configurable: true,\n });\n }\n markWebComponentAsComplete(component, innerStateElement);\n if (WEBCOMPONENT_STATE_READY_CALLBACK_NAME in component) {\n const func = (component as any)[WEBCOMPONENT_STATE_READY_CALLBACK_NAME];\n if (typeof func === 'function') {\n func.call(component, stateProp).catch((error: any) => {\n raiseError(`Error in ${WEBCOMPONENT_STATE_READY_CALLBACK_NAME}: ${error instanceof Error ? error.message : String(error)}`);\n });\n } else {\n raiseError(`${WEBCOMPONENT_STATE_READY_CALLBACK_NAME} is not a function.`);\n }\n }\n}\n","import { config, inSsr } from \"../config\";\nimport { loadFromInnerScript } from \"../stateLoader/loadFromInnerScript\";\nimport { loadFromJsonFile } from \"../stateLoader/loadFromJsonFile\";\nimport { loadFromScriptFile } from \"../stateLoader/loadFromScriptFile\";\nimport { loadFromScriptJson } from \"../stateLoader/loadFromScriptJson\";\nimport { raiseError } from \"../raiseError\";\nimport { BindingType, IState } from \"../types\";\nimport { IStateElement } from \"./types\";\nimport { setStateElementByName, getStateElementByName, getBindingsReady } from \"../stateElementByName\";\nimport { ILoopContextStack } from \"../list/types\";\nimport { createLoopContextStack } from \"../list/loopContext\";\nimport { DCC_DEFINITION_ATTRIBUTE, NO_SET_TIMEOUT, STATE_CONNECTED_CALLBACK_NAME, STATE_DISCONNECTED_CALLBACK_NAME, WILDCARD } from \"../define\";\nimport { processCommandTokensDeclaration } from \"../command/processCommandTokensDeclaration\";\nimport { clearCommandTokenRegistry } from \"../command/commandTokenRegistry\";\nimport { clearCommandNamespace } from \"../command/commandNamespace\";\nimport { processEventTokensDeclaration } from \"../event/processEventTokensDeclaration\";\nimport { clearEventTokenRegistry } from \"../event/eventTokenRegistry\";\nimport { processOnDeclaration } from \"../event/processOnDeclaration\";\nimport { processStreamsDeclaration } from \"../stream/processStreamsDeclaration\";\nimport { clearStreamNamespace } from \"../stream/streamNamespace\";\nimport { abortAllStreams, clearStreamRegistry } from \"../stream/streamRegistry\";\nimport { startStreams } from \"../stream/streamRuntime\";\nimport { defineDCC } from \"../dcc/defineDCC\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateProxy, Mutability } from \"../proxy/types\";\nimport { createStateProxy } from \"../proxy/StateHandler\";\nimport { bindWebComponent } from \"../webComponent/bindWebComponent\";\nimport { connectedCallbackSymbol, disconnectedCallbackSymbol } from \"../proxy/symbols\";\nimport { waitInitializeBinding } from \"../bindings/initializeBindingPromiseByNode\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { Ssr } from \"./Ssr\";\nimport { VERSION } from \"../version\";\n\ntype Descriptors = Record<string, PropertyDescriptor>;\n\nfunction getAllPropertyDescriptors(obj: object): Descriptors {\n let descriptors: Descriptors = {};\n let proto = obj;\n while (proto && proto !== Object.prototype) {\n Object.assign(descriptors, Object.getOwnPropertyDescriptors(proto));\n proto = Object.getPrototypeOf(proto);\n }\n return descriptors;\n}\n\nfunction getStateInfo(\n state: IState\n): {\n getterPaths: Set<string>,\n setterPaths: Set<string>,\n} {\n const getterPaths: Set<string> = new Set<string>();\n const setterPaths: Set<string> = new Set<string>();\n const descriptors = getAllPropertyDescriptors(state);\n for(const [ key, descriptor ] of Object.entries(descriptors)) {\n if (typeof descriptor.get === \"function\") {\n getterPaths.add(key);\n }\n if (typeof descriptor.set === \"function\") {\n setterPaths.add(key);\n }\n }\n return {\n getterPaths, setterPaths\n };\n}\n\nexport class State extends HTMLElement implements IStateElement {\n static hasConnectedCallbackPromise = true;\n\n static getBindingsReady(rootNode: Node): Promise<void> {\n return getBindingsReady(rootNode);\n }\n\n private __state: IState | undefined;\n private _name: string = 'default';\n private _initialized: boolean = false;\n private _initializePromise: Promise<void>;\n private _resolveInitialize: (() => void) | null = null;\n private _connectedCallbackPromise: Promise<void>;\n private _resolveConnectedCallback: (() => void) | null = null;\n private _loadingPromise: Promise<void>;\n private _resolveLoading: (() => void) | null = null;\n private _setStatePromise: Promise<Record<string, any>> | null = null;\n private _resolveSetState: ((value: Record<string, any>) => void) | null = null;\n private _listPaths: Set<string> = new Set<string>();\n private _elementPaths: Set<string> = new Set<string>();\n private _getterPaths: Set<string> = new Set<string>();\n private _setterPaths: Set<string> = new Set<string>();\n private _loopContextStack: ILoopContextStack = createLoopContextStack();\n private _dynamicDependency: Map<string, string[]> = new Map<string, string[]>();\n private _staticDependency: Map<string, string[]> = new Map<string, string[]>();\n private _pathSet: Set<string> = new Set<string>();\n private _version = 0;\n private _rootNode: Node | null = null;\n private _boundComponent: Element | null = null;\n private _boundComponentStateProp: string | null = null;\n private _bindableEventMap: Record<string, string> = {};\n private _commandTokenNames: Set<string> = new Set<string>();\n private _eventTokenNames: Set<string> = new Set<string>();\n private _dcc: boolean = false;\n // connect サイクルの世代カウンタ(connectedCallback 冒頭でインクリメント)。\n // $connectedCallback の await 中の「切断 → 即再接続」では、新 connect が\n // _rootNode を再設定済みのため陳腐化した旧 connect の再開が _rootNode ガードを\n // 素通りして startStreams に到達し、同一の再接続に対して source が二重起動する。\n // 末尾で冒頭に捕捉した世代と照合し、陳腐 connect からの起動を skip する(設計書 §2-3)。\n private _connectGeneration: number = 0;\n // _state セッター側の startStreams が走った connect 世代\n // (connectedCallback 末尾の startStreams との二重起動防止、設計書 §2-3。\n // 世代が進めば不一致となり自然に無効化される — サイクル単位のフラグリセット相当)\n private _streamsStartedGeneration: number = 0;\n\n constructor() {\n super();\n this._initializePromise = new Promise<void>((resolve) => {\n this._resolveInitialize = resolve;\n });\n this._connectedCallbackPromise = new Promise<void>((resolve) => {\n this._resolveConnectedCallback = resolve;\n });\n this._loadingPromise = new Promise<void>((resolve) => {\n this._resolveLoading = resolve;\n });\n this._setStatePromise = new Promise<Record<string, any>>((resolve) => {\n this._resolveSetState = resolve;\n });\n }\n\n private get _state(): IState {\n if (typeof this.__state === \"undefined\") {\n raiseError(`${config.tagNames.state} _state is not initialized yet.`);\n }\n return this.__state;\n }\n\n private set _state(value: IState) {\n this._commandTokenNames = processCommandTokensDeclaration(value);\n this._eventTokenNames = processEventTokensDeclaration(value);\n this.__state = value;\n // 再 set 時に二重 subscribe しないよう registry をクリアしてから $on を配線し直す。\n clearEventTokenRegistry(this);\n processOnDeclaration(this, value, this._eventTokenNames);\n this._listPaths.clear();\n this._elementPaths.clear();\n this._getterPaths.clear();\n // 再 set 時の残骸が $streams の衝突検査(processStreamsDeclaration)に\n // 偽陽性で命中しないよう getterPaths と対称にクリアする。\n this._setterPaths.clear();\n this._pathSet.clear();\n const stateInfo = getStateInfo(value);\n for(const path of stateInfo.getterPaths) {\n this._getterPaths.add(path);\n }\n for(const path of stateInfo.setterPaths) {\n this._setterPaths.add(path);\n }\n // $streams: 再 set 時の二重起動防止のため旧 stream を abort + registry 全削除してから\n // 新宣言をパースする(clearEventTokenRegistry → processOnDeclaration と同じ再配線パターン)。\n // getterPaths / setterPaths の収集後であること(宣言バリデーションが衝突検査で参照する)。\n // namespace proxy の memo も破棄して古い proxy を捨てる(clearCommandNamespace と対称)。\n clearStreamNamespace(this);\n clearStreamRegistry(this);\n processStreamsDeclaration(this, value);\n // 接続中の再 set(S13)は新宣言で即再起動する。\n // 初回(_initialize 中)は _initialized が false なのでここでは起動されず、\n // connectedCallback 側の startStreams($connectedCallback 完了後)が担う。\n if (this._initialized && this._rootNode !== null && !inSsr()) {\n startStreams(this);\n // $connectedCallback 実行中の再 set(setInitialState)では、ここで新宣言が\n // 起動済みのため connectedCallback 末尾の startStreams を skip させる。\n // skip しないと同一 connect サイクルで新宣言の source が 2 回起動する\n // (1 回目は即 abort — switchMap 意味論で状態は壊れないが、副作用を持つ\n // source が 2 回発火してしまう)。\n this._streamsStartedGeneration = this._connectGeneration;\n }\n this._resolveLoading?.();\n }\n\n get name(): string {\n return this._name;\n }\n\n private _loadFromSsrElement(): IState | null {\n if (!this.hasAttribute('enable-ssr')) return null;\n const name = this.getAttribute('name') || 'default';\n const root = this.parentNode;\n if (!root) return null;\n const ssrEl = Ssr.findByName(root, name);\n if (!ssrEl) return null;\n const data = ssrEl.stateData;\n return Object.keys(data).length > 0 ? data : null;\n }\n\n private async _initialize() {\n // enable-ssr (クライアント側のみ): <wcs-ssr> から初期データを取得\n const ssrState = !inSsr() ? this._loadFromSsrElement() : null;\n try {\n if (this.hasAttribute('state')) {\n const state = this.getAttribute('state');\n this._state = loadFromScriptJson(state!);\n } else if (this.hasAttribute('src')) {\n const src = this.getAttribute('src');\n if (src && src.endsWith('.json')) {\n this._state = await loadFromJsonFile(src);\n } else if (src && src.endsWith('.js')) {\n this._state = await loadFromScriptFile(src);\n } else {\n raiseError(`Unsupported src file type: ${src}`);\n }\n } else if (this.hasAttribute('json')) {\n const json = this.getAttribute('json');\n this._state = JSON.parse(json!);\n } else {\n const script = this.querySelector<HTMLScriptElement>('script[type=\"module\"]');\n if (script) {\n this._state = await loadFromInnerScript(script, `${this._name}`);\n } else {\n const timerId = setTimeout(() => {\n console.warn(`[@wcstack/state] Warning: No state source found for <${config.tagNames.state}> element with name=\"${this._name}\".`);\n }, NO_SET_TIMEOUT);\n // 要注意!!!APIでセットする場合はここで待機する必要がある --(1)\n this._state = await this._setStatePromise!;\n clearTimeout(timerId);\n }\n }\n } catch(e) {\n raiseError(`Failed to initialize state: ${e}`);\n }\n // SSR データがある場合、state 定義(メソッド/getter)を維持しつつデータ値を上書き\n if (ssrState !== null && this.__state) {\n for (const [key, value] of Object.entries(ssrState)) {\n if (key in this.__state) {\n const desc = Object.getOwnPropertyDescriptor(this.__state, key);\n // getter/setter はスキップ(定義側を優先)\n if (desc && (desc.get || desc.set)) continue;\n // 関数はスキップ\n if (typeof this.__state[key] === 'function') continue;\n }\n this.__state[key] = value;\n }\n }\n await this._loadingPromise;\n this._name = this.getAttribute('name') || 'default';\n setStateElementByName(this.rootNode!, this._name, this);\n }\n\n private async _initializeBindWebComponent() {\n if (this.hasAttribute(\"bind-component\")) {\n // wcs-stateはコンポーネントのトップレベル要素であること\n // ShadowDOM直下: parentNodeがShadowRoot → hostが親コンポーネント\n // LightDOM/ShadowDOM内のLightDOM: parentNodeがElement → それが親コンポーネント\n const parentNode = this.parentNode;\n const boundComponent = parentNode instanceof ShadowRoot\n ? parentNode.host\n : parentNode instanceof Element\n ? parentNode\n : null;\n const customTagName = boundComponent ? getCustomElement(boundComponent) : null;\n if (boundComponent === null || customTagName === null) {\n raiseError(`\"bind-component\" requires <${config.tagNames.state}> to be a direct child of a custom element.`);\n }\n // LightDOMの場合、名前空間が上位スコープと共有されるためnameが必須\n if (!(parentNode instanceof ShadowRoot) && !this.hasAttribute(\"name\")) {\n raiseError(`\"bind-component\" in Light DOM requires a \"name\" attribute to avoid namespace conflicts with the parent scope.`);\n }\n const boundComponentStateProp = this.getAttribute(\"bind-component\")!;\n await customElements.whenDefined(customTagName.toLowerCase());\n // data-wcs属性がある場合は、上位の状態によりbinding情報の設定が完了するまで待機する\n if (boundComponent.hasAttribute(config.bindAttributeName)) {\n await waitInitializeBinding(boundComponent);\n }\n if (!(boundComponentStateProp in boundComponent)) {\n raiseError(`Component does not have property \"${boundComponentStateProp}\" for state binding.`);\n }\n const state = (boundComponent as any)[boundComponentStateProp] as Record<string, any>;\n if (typeof state !== 'object' || state === null) {\n raiseError(`Component property \"${boundComponentStateProp}\" is not an object for state binding.`);\n }\n this._boundComponent = boundComponent;\n this._boundComponentStateProp = boundComponentStateProp;\n bindWebComponent(this, this._boundComponent, this._boundComponentStateProp, state);\n }\n }\n\n private async _callStateConnectedCallback(): Promise<void> {\n await this.createStateAsync(\"writable\", async (state) => {\n // stateに\"$connectedCallback\"があるか確認し、connectedCallbackAPIを呼び出す\n if (STATE_CONNECTED_CALLBACK_NAME in state) {\n await state[connectedCallbackSymbol]();\n }\n });\n }\n\n private async _initializeDCC(hostElement: Element, shadowRoot: ShadowRoot): Promise<void> {\n let state: IState;\n try {\n if (this.hasAttribute('src')) {\n const src = this.getAttribute('src')!;\n if (src.endsWith('.js')) {\n state = await loadFromScriptFile(src);\n } else {\n raiseError(`DCC: Unsupported src type: ${src}`);\n }\n } else {\n const script = this.querySelector<HTMLScriptElement>('script[type=\"module\"]');\n if (script) {\n state = await loadFromInnerScript(script, hostElement.tagName.toLowerCase());\n } else {\n raiseError(`DCC: No state source found for \"${hostElement.tagName.toLowerCase()}\".`);\n }\n }\n } catch (e) {\n raiseError(`DCC: Failed to load state: ${e}`);\n }\n defineDCC(hostElement, shadowRoot, state!);\n this._dcc = true;\n this._initialized = true;\n this._rootNode = null; // disconnectedCallbackでのstate参照を防止\n this._resolveInitialize?.();\n this._resolveConnectedCallback?.();\n }\n\n private _callStateDisconnectedCallback(): void {\n this.createState(\"writable\", (state) => {\n // stateに\"$disconnectedCallback\"があるか確認し、disconnectedCallbackAPIを呼び出す\n if (STATE_DISCONNECTED_CALLBACK_NAME in state) {\n state[disconnectedCallbackSymbol]();\n }\n });\n }\n\n async connectedCallback() {\n this._rootNode = this.getRootNode() as Node;\n // connect 世代を進めて冒頭で捕捉する(末尾の startStreams 前に照合し、\n // $connectedCallback の await 中に「切断 → 即再接続」された陳腐 connect の\n // 再開からの起動を防ぐ)。前回接続中の再 set(S13)で立った\n // _streamsStartedGeneration も世代不一致となり自然に無効化される。\n const connectGeneration = ++this._connectGeneration;\n if (!this._initialized) {\n // DCC 検出: ShadowRoot 内かつホストに data-wc-definition がある場合\n const parentNode = this.parentNode;\n if (parentNode instanceof ShadowRoot &&\n parentNode.host.hasAttribute(DCC_DEFINITION_ATTRIBUTE)) {\n await this._initializeDCC(parentNode.host, parentNode);\n return;\n }\n await this._initializeBindWebComponent();\n await this._initialize();\n this._initialized = true;\n this._resolveInitialize?.();\n } else if (!this._dcc && getStateElementByName(this._rootNode, this._name) !== this) {\n // 再接続(disconnect で名前登録が解除された後の再 connect): 登録を復元する。\n // createState が rootNode 経由でこの要素を解決できるようにするために必要\n // ($connectedCallback の再実行と $streams の initial からの再起動が依存する、設計書 §2-3)。\n setStateElementByName(this._rootNode, this._name, this);\n }\n // enable-ssr (クライアント側): SSR で $connectedCallback 済みなのでスキップ\n // inSsr() (サーバー側): レンダリング中なので実行する\n if (!this.hasAttribute('enable-ssr') || inSsr()) {\n await this._callStateConnectedCallback();\n }\n\n // サーバーモード + enable-ssr: バインディング完了後に <wcs-ssr> を生成\n if (inSsr() && this.hasAttribute('enable-ssr')) {\n await getBindingsReady(this.rootNode);\n\n const name = this.getAttribute('name') || 'default';\n const stateData = Ssr.extractStateData(this);\n const ssrEl = document.createElement(config.tagNames.ssr);\n ssrEl.setAttribute('name', name);\n ssrEl.setAttribute('version', VERSION);\n Ssr.buildContent(ssrEl, stateData);\n this.parentNode?.insertBefore(ssrEl, this);\n }\n\n // $streams の eager 起動($connectedCallback 完了後、設計書 §2-3)。\n // inSsr() 時は起動しない(SSR 出力には initial が乗る、§7-1)。\n // enable-ssr のクライアント側は $connectedCallback をスキップしても起動する\n // (stream はシリアライズ不能なランタイム副作用のため)。\n // _rootNode ガード: $connectedCallback の await 中に切断された場合は起動しない。\n // ガードなしだと startStream 内の createState が rootNode 解決(disconnectedCallback\n // で null 化済み)の raiseError で throw し、connectedCallbackPromise が永遠に\n // 未解決になる。「未接続の entry は restart しない」設計書 §3-2 とも整合し、\n // _state セッター側の startStreams 前ガード(_rootNode !== null)と対称。\n // 世代ガード(connectGeneration 照合): await 中に「切断 → 即再接続」された場合、\n // 新 connect が _rootNode を再設定済みで上のガードを素通りするため、世代不一致で\n // 陳腐化した connect の再開を検出して skip する。起動点が新 connect の末尾に\n // 一本化され、「$connectedCallback 完了後に起動」(S1)の順序保証も保たれる。\n // _streamsStartedGeneration ガード: $connectedCallback 内の setInitialState\n // (接続中の再 set)で _state セッター側が新宣言を起動済みの場合は skip する\n // (skip しないと同一 connect サイクルで source が 2 回起動する、設計書 §2-3)。\n if (\n !inSsr() &&\n this._rootNode !== null &&\n connectGeneration === this._connectGeneration &&\n this._streamsStartedGeneration !== connectGeneration\n ) {\n startStreams(this);\n }\n\n this._resolveConnectedCallback?.();\n }\n\n disconnectedCallback() {\n if (this._rootNode !== null) {\n // try/finally: ユーザーの $disconnectedCallback が throw しても後続の後始末を\n // 必ず実行する。特に abortAllStreams が飛ぶと stream が消費を続け(ゾンビ I/O)、\n // activeStateElements の強参照残留で GC が妨げられ、切断済み要素が依存駆動\n // restart の対象にも残る(設計書 §3-2 / §5-1 違反)。throw 自体は従来どおり\n // 呼び出し元へ伝播させる(変わるのは後始末の保証のみ)。\n try {\n this._callStateDisconnectedCallback();\n } finally {\n setStateElementByName(this.rootNode, this._name, null);\n clearCommandTokenRegistry(this);\n clearCommandNamespace(this);\n clearEventTokenRegistry(this);\n // stream は abort のみで registry は保持する(再接続時に同じ宣言から\n // initial で再起動できる、設計書 §5-1 / §5-2)。\n // namespace proxy の memo は破棄する(clearCommandNamespace と対称。\n // registry は残るため再接続後の初回アクセスで同内容の proxy が再生成される)。\n abortAllStreams(this);\n clearStreamNamespace(this);\n this._rootNode = null;\n }\n }\n }\n\n get initializePromise(): Promise<void> {\n return this._initializePromise;\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get listPaths(): Set<string> {\n return this._listPaths;\n }\n\n get elementPaths(): Set<string> {\n return this._elementPaths;\n }\n\n get getterPaths(): Set<string> {\n return this._getterPaths;\n }\n\n get setterPaths(): Set<string> {\n return this._setterPaths;\n }\n\n get loopContextStack(): ILoopContextStack {\n return this._loopContextStack;\n }\n\n get dynamicDependency(): Map<string, string[]> {\n return this._dynamicDependency;\n }\n\n get staticDependency(): Map<string, string[]> {\n return this._staticDependency;\n }\n\n get version(): number {\n return this._version;\n }\n\n get rootNode(): Node {\n if (this._rootNode === null) {\n raiseError('State rootNode is not available.');\n }\n return this._rootNode;\n }\n\n get boundComponentStateProp(): string | null {\n return this._boundComponentStateProp;\n }\n\n get bindableEventMap(): Record<string, string> {\n return this._bindableEventMap;\n }\n\n get commandTokenNames(): ReadonlySet<string> {\n return this._commandTokenNames;\n }\n\n get eventTokenNames(): ReadonlySet<string> {\n return this._eventTokenNames;\n }\n\n setBindableEventMap(map: Record<string, string>): void {\n this._bindableEventMap = map;\n }\n\n private _addDependency(\n map: Map<string, string[]>,\n sourcePath: string,\n targetPath: string\n ): boolean {\n const deps = map.get(sourcePath);\n if (deps === undefined) {\n map.set(sourcePath, [targetPath]);\n return true;\n } else if (!deps.includes(targetPath)) {\n deps.push(targetPath);\n return true;\n }\n return false;\n }\n\n /**\n * source, target\n *\n * products.*.price => products.*.tax\n * get \"products.*.tax\"() { return this[\"products.*.price\"] * 0.1; }\n *\n * products.*.price => products.summary\n * get \"products.summary\"() { return this.$getAll(\"products.*.price\", []).reduce(sum); }\n *\n * categories.*.name => categories.*.products.*.categoryName\n * get \"categories.*.products.*.categoryName\"() { return this[\"categories.*.name\"]; }\n *\n * @param sourcePath\n * @param targetPath\n */\n addDynamicDependency(sourcePath: string, targetPath: string): boolean {\n return this._addDependency(this._dynamicDependency, sourcePath, targetPath);\n }\n\n /**\n * source, target\n * products => products.*\n * products.* => products.*.price\n * products.* => products.*.name\n *\n * @param sourcePath\n * @param targetPath\n */\n addStaticDependency(sourcePath: string, targetPath: string): boolean {\n return this._addDependency(this._staticDependency, sourcePath, targetPath);\n }\n\n setPathInfo(path: string, bindingType: BindingType): void {\n if (bindingType === \"for\") {\n this._listPaths.add(path);\n this._elementPaths.add(path + '.' + WILDCARD);\n }\n if (!this._pathSet.has(path)) {\n const pathInfo = getPathInfo(path);\n this._pathSet.add(path);\n if (pathInfo.parentPath !== null) {\n let currentPathInfo = pathInfo;\n while(currentPathInfo.parentPath !== null) {\n if (!this.addStaticDependency(currentPathInfo.parentPath, currentPathInfo.path)) {\n break;\n }\n currentPathInfo = getPathInfo(currentPathInfo.parentPath);\n }\n }\n }\n }\n\n private _createState<T>(rootNode: Node, mutability: Mutability, callback: (state: IStateProxy) => T): T {\n try {\n const stateProxy = createStateProxy(rootNode, this._state, this._name, mutability);\n return callback(stateProxy);\n } finally {\n // cleanup if needed\n }\n }\n\n async createStateAsync(mutability: Mutability, callback: (state: IStateProxy) => Promise<void>): Promise<void> {\n return await this._createState(this.rootNode, mutability, callback);\n }\n\n createState(mutability: Mutability, callback: (state: IStateProxy) => void): void {\n this._createState(this.rootNode, mutability, callback);\n }\n\n nextVersion(): number {\n this._version++;\n return this._version;\n }\n\n bindProperty(prop: string, desc: PropertyDescriptor): void {\n Object.defineProperty(this._state, prop, desc);\n }\n\n setInitialState(state: Record<string, any>): void {\n if (!this._initialized) {\n this._resolveSetState?.(state);\n } else {\n this._state = state;\n }\n }\n}\n","import { Ssr } from \"./components/Ssr\";\nimport { State } from \"./components/State\";\nimport { config } from \"./config\";\n\nexport function registerComponents() {\n if (!customElements.get(config.tagNames.ssr)) {\n customElements.define(config.tagNames.ssr, Ssr);\n }\n if (!customElements.get(config.tagNames.state)) {\n customElements.define(config.tagNames.state, State);\n }\n}\n","import { setConfig } from \"./config\";\nimport { registerComponents } from \"./registerComponents\";\nimport { IWritableConfig } from \"./types\";\n\nexport function bootstrapState(config?: IWritableConfig): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}","/**\n * defineState.ts\n *\n * 状態オブジェクトに型付けを提供するためのユーティリティ。\n * defineState() はアイデンティティ関数で、ThisType<> を付与することで\n * メソッド・computed getter 内の this に型補完を提供する。\n *\n * テンプレートリテラル型によるドットパスの型解決:\n * - WcsPaths<T> : T から生成される全ドットパスの union\n * - WcsPathValue<T,P>: パス P に対応する値の型\n * - WcsPathAccessor<T>: ブラケットアクセス用マップ型\n */\n\n// ============================================================\n// Internal helper types\n// ============================================================\n\n/**\n * `any` 型を検出する。\n * `0 extends (1 & T)` は T が `any` の場合のみ true になる。\n */\ntype IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/**\n * T がドットパス再帰の対象となる「プレーンなデータオブジェクト」かどうかを判定する。\n * プリミティブ、組み込みオブジェクト (Date, Map 等)、関数、配列、any は除外。\n */\ntype IsPlainObject<T> =\n IsAny<T> extends true ? false :\n T extends\n | string | number | boolean | null | undefined | symbol | bigint\n | ((...args: any[]) => any) | Date | RegExp | Error\n | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any>\n | Promise<any> | readonly any[]\n ? false\n : T extends Record<string, any>\n ? true\n : false;\n\n/**\n * T のキーのうち、関数でないもの(データプロパティ・computed getter)を抽出する。\n * メソッド(イベントハンドラ等)はドットパスの対象外。\n * any 型のプロパティは除外せず保持する。\n */\ntype DataKeys<T> = {\n [K in keyof T & string]: IsAny<T[K]> extends true ? K : T[K] extends (...args: any[]) => any ? never : K;\n}[keyof T & string];\n\n// ============================================================\n// WcsPaths — ドットパスの union 生成\n// ============================================================\n\n/**\n * 型 T から生成される全てのドットパスの union。\n * 配列プロパティはワイルドカード `*` を使用: `items.*.name`\n *\n * 再帰の深さは最大4レベルに制限(コンパイル性能の確保)。\n *\n * @example\n * ```ts\n * type S = {\n * count: number;\n * users: { name: string; age: number }[];\n * cart: { items: { price: number }[] };\n * };\n * type P = WcsPaths<S>;\n * // = \"count\" | \"users\" | \"users.*\" | \"users.*.name\" | \"users.*.age\"\n * // | \"cart\" | \"cart.items\" | \"cart.items.*\" | \"cart.items.*.price\"\n * ```\n */\nexport type WcsPaths<T, Depth extends readonly any[] = []> =\n Depth[\"length\"] extends 4 ? never :\n {\n [K in DataKeys<T>]:\n | K\n | (T[K] extends readonly (infer E)[]\n ? IsPlainObject<E> extends true\n ? `${K}.*` | WcsSubPaths<E, `${K}.*.`, [...Depth, 0]>\n : `${K}.*`\n : IsPlainObject<T[K]> extends true\n ? WcsSubPaths<T[K], `${K}.`, [...Depth, 0]>\n : never)\n }[DataKeys<T>];\n\n/** @internal プレフィックス付きサブパスの生成ヘルパー */\ntype WcsSubPaths<T, Prefix extends string, Depth extends readonly any[]> =\n WcsPaths<T, Depth> extends infer P extends string\n ? `${Prefix}${P}`\n : never;\n\n// ============================================================\n// WcsPathValue — パスから値の型を解決\n// ============================================================\n\n/**\n * ドットパス P に対応する値の型を T から解決する。\n *\n * 解決順序:\n * 1. T の直接キー(computed getter 含む)\n * 2. `K.*` → 配列要素型\n * 3. `K.rest` → オブジェクト/配列のネストを再帰的に辿る\n *\n * @example\n * ```ts\n * type S = { cart: { items: { price: number; qty: number }[] } };\n * type V1 = WcsPathValue<S, \"cart.items.*.price\">; // number\n * type V2 = WcsPathValue<S, \"cart.items.*\">; // { price: number; qty: number }\n * type V3 = WcsPathValue<S, \"cart\">; // { items: ... }\n * ```\n */\nexport type WcsPathValue<T, P extends string> =\n // 1. Direct key (includes computed getters like \"users.*.ageCategory\")\n P extends keyof T\n ? T[P]\n // 2. K.* → array element type\n : P extends `${infer K}.*`\n ? K extends keyof T\n ? T[K] extends readonly (infer E)[] ? E : never\n : never\n // 3. K.rest → recurse into nested structure\n : P extends `${infer K}.${infer Rest}`\n ? K extends keyof T\n ? T[K] extends readonly (infer E)[]\n // Array: expect *.subpath or *\n ? Rest extends `*.${infer SubRest}`\n ? WcsPathValue<E, SubRest>\n : Rest extends \"*\"\n ? E\n : never\n // Object: recurse\n : T[K] extends Record<string, any>\n ? WcsPathValue<T[K], Rest>\n : never\n : never\n : never;\n\n// ============================================================\n// WcsPathAccessor — ブラケットアクセス用マップ型\n// ============================================================\n\n/**\n * 全ドットパスに対する型付きブラケットアクセスを提供するマップ型。\n *\n * `this[\"users.*.name\"]` のようなアクセスに対して、\n * WcsPaths で生成されたパスに対応する値の型を返す。\n */\ntype WcsPathAccessor<T> = {\n [P in WcsPaths<T>]: WcsPathValue<T, P>;\n};\n\n// ============================================================\n// State Proxy API — this 経由でアクセスできるAPI\n// ============================================================\n\n/**\n * `<wcs-state>` の Proxy 経由で提供されるAPIメソッド。\n * state定義オブジェクト内のメソッド・getter で `this.` 経由で利用可能。\n */\nexport interface WcsStateApi {\n /**\n * ワイルドカードを含むパスにマッチする全要素を配列で取得する。\n *\n * @example\n * ```ts\n * get \"cart.totalPrice\"() {\n * return this.$getAll(\"cart.items.*.price\", []).reduce((sum, v) => sum + v, 0);\n * }\n * ```\n */\n $getAll<V = any>(path: string, defaultValue?: V[]): V[];\n\n /**\n * 指定パスの更新を手動でトリガーする。\n * Proxy の set トラップを経由せずに内部状態を変更した場合に使用。\n */\n $postUpdate(path: string): void;\n\n /**\n * パスとインデックス配列を指定して、ワイルドカードを解決した値を取得・設定する。\n *\n * @param path - ワイルドカードを含むパス\n * @param indexes - 各ワイルドカード階層のインデックス\n * @param value - 設定する値(省略時は取得)\n */\n $resolve(path: string, indexes: number[], value?: any): any;\n\n /**\n * 指定パスへの依存関係を明示的に登録する。\n * computed getter 内で動的にパスを組み立てる場合に使用。\n */\n $trackDependency(path: string): void;\n\n /** `<wcs-state>` 要素への参照 */\n readonly $stateElement: HTMLElement;\n\n // ループインデックス変数 ($1〜$9)\n // for テンプレート内のイベントハンドラで、ネストされたループの\n // 各階層のインデックスにアクセスするために使用。\n readonly $1: number;\n readonly $2: number;\n readonly $3: number;\n readonly $4: number;\n readonly $5: number;\n readonly $6: number;\n readonly $7: number;\n readonly $8: number;\n readonly $9: number;\n}\n\n// ============================================================\n// WcsThis — state メソッド/getter 内の this の型\n// ============================================================\n\n/**\n * state定義オブジェクト内の `this` の型。\n *\n * - `T` のプロパティに型付きでアクセス可能(直接キー)\n * - `WcsPathAccessor<T>` によるネストされたドットパスの型付きアクセス\n * - `WcsStateApi` のメソッド ($getAll, $postUpdate 等) にアクセス可能\n * - 動的パス (`this[\\`items.${i}.name\\`]`) は型チェック対象外(キャストが必要)\n *\n * @example\n * ```ts\n * defineState({\n * count: 0,\n * users: [] as { name: string; age: number }[],\n * increment() {\n * this.count++; // number\n * this[\"users.*.name\"]; // string (パス型解決)\n * this.$getAll(\"path\", []); // API\n * }\n * });\n * ```\n */\nexport type WcsThis<T> = T & WcsStateApi & WcsPathAccessor<T>;\n\n// ============================================================\n// defineState — 型付き状態定義関数\n// ============================================================\n\n/**\n * `<wcs-state>` 用の型付き状態オブジェクトを定義する。\n *\n * ランタイムではアイデンティティ関数(引数をそのまま返す)として動作し、\n * コストはゼロ。TypeScript の `ThisType<>` を利用して、メソッド・getter 内の\n * `this` に型補完を提供する。\n *\n * ### 基本的な使い方 (TypeScript)\n * ```ts\n * import { defineState } from '@wcstack/state';\n *\n * export default defineState({\n * count: 0,\n * users: [] as { name: string; age: number }[],\n *\n * increment() {\n * this.count++; // ✅ number\n * this[\"users.*.name\"]; // ✅ string (ドットパス型解決)\n * },\n *\n * get \"users.*.ageCategory\"() {\n * return this[\"users.*.age\"] < 25 ? \"Young\" : \"Adult\";\n * }\n * });\n * ```\n *\n * ### JavaScript (JSDoc)\n * ```js\n * import { defineState } from '@wcstack/state';\n *\n * export default defineState({\n * count: 0,\n * increment() {\n * this.count++; // ✅ JSDoc + tsconfig checkJs で型補完\n * }\n * });\n * ```\n *\n * ### HTML インラインスクリプト\n * ```html\n * <wcs-state>\n * <script type=\"module\">\n * import { defineState } from '@wcstack/state';\n * export default defineState({\n * count: 0,\n * increment() { this.count++; }\n * });\n * </script>\n * </wcs-state>\n * ```\n *\n * ### ライフサイクルコールバック\n * ```ts\n * export default defineState({\n * data: null,\n * async $connectedCallback() {\n * this.data = await fetch('/api/data').then(r => r.json());\n * },\n * $disconnectedCallback() {\n * // cleanup\n * },\n * $updatedCallback() {\n * // called after DOM update\n * }\n * });\n * ```\n */\nexport function defineState<T extends Record<string, any>>(\n definition: T & ThisType<WcsThis<T>>\n): T {\n return definition;\n}\n","/**\n * filterMeta.ts — 組み込みフィルタの構造化メタデータ(単一正本・route-a A2-1)。\n *\n * これまで vscode-wcs(completionData.ts BUILTIN_FILTERS)が手で持っていたフィルタの\n * 引数仕様・型・説明を、実装側(@wcstack/state)に**正本として移設**したもの。\n * manifest.ts がこれを公開し、vscode-wcs はそれを消費して手リストを撤去できる。\n *\n * 完全性は __tests__/manifest.test.ts のドリフト検出が保証する\n * (filterMeta のキー集合 == builtinFilters のキー集合)。フィルタを追加して meta を\n * 書き忘れると CI が落ちる。\n */\n\nexport type FilterResultType = \"boolean\" | \"number\" | \"string\" | \"passthrough\";\nexport type FilterArgType = \"number\" | \"string\" | \"any\";\n\nexport interface IFilterMeta {\n /** 説明(補完・ホバー用) */\n description: string;\n /** 引数を取るか */\n hasArgs: boolean;\n /** 適用後の結果型(passthrough は入力型をそのまま返す) */\n resultType: FilterResultType;\n /** 受け入れ可能な入力型('any' は任意) */\n acceptTypes: \"any\" | readonly string[];\n /** 引数の最小数 */\n minArgs: number;\n /** 引数の最大数 */\n maxArgs: number;\n /** 各引数の期待型(省略時はチェックしない) */\n argTypes?: readonly FilterArgType[];\n}\n\n/** 組み込みフィルタ名 → 構造化メタデータ。キー集合は builtinFilters と一致しなければならない。 */\nexport const builtinFilterMeta: Record<string, IFilterMeta> = {\n // 比較・論理\n eq: { description: \"等しいか比較\", hasArgs: true, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n ne: { description: \"異なるか比較\", hasArgs: true, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n not: { description: \"ブール値を反転\", hasArgs: false, resultType: \"boolean\", acceptTypes: [\"boolean\"], minArgs: 0, maxArgs: 0 },\n lt: { description: \"より小さいか\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n le: { description: \"以下か\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n gt: { description: \"より大きいか\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n ge: { description: \"以上か\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n // 算術\n inc: { description: \"加算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n dec: { description: \"減算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n mul: { description: \"乗算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n div: { description: \"除算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n mod: { description: \"剰余\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n // 数値フォーマット\n fix: { description: \"固定小数点表記\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n locale: { description: \"ロケール形式で数値フォーマット\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"string\"] },\n // 文字列\n uc: { description: \"大文字に変換\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n lc: { description: \"小文字に変換\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n cap: { description: \"先頭文字を大文字に\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n trim: { description: \"前後の空白を削除\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n slice: { description: \"部分文字列 (start[,end])\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"number\"] },\n substr: { description: \"部分文字列 (pos,len)\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"number\"] },\n pad: { description: \"パディング (length[,char])\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"string\"] },\n rep: { description: \"繰り返し (count)\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n rev: { description: \"文字順を反転\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n // 数値パース・丸め\n int: { description: \"整数にパース\", hasArgs: false, resultType: \"number\", acceptTypes: [\"string\", \"number\"], minArgs: 0, maxArgs: 0 },\n float: { description: \"浮動小数点数にパース\", hasArgs: false, resultType: \"number\", acceptTypes: [\"string\", \"number\"], minArgs: 0, maxArgs: 0 },\n round: { description: \"四捨五入\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n floor: { description: \"切り下げ\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n ceil: { description: \"切り上げ\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n percent: { description: \"パーセンテージ形式\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n // 日付・時刻\n date: { description: \"ロケール形式の日付\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n time: { description: \"ロケール形式の時刻\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n datetime: { description: \"ロケール形式の日時\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n ymd: { description: \"YYYY-MM-DD 形式\", hasArgs: true, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 1, argTypes: [\"string\"] },\n // 真偽値・変換\n falsy: { description: \"偽値か判定\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n truthy: { description: \"真値か判定\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n defaults: { description: \"偽値の場合デフォルト値\", hasArgs: true, resultType: \"passthrough\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n boolean: { description: \"ブール値に変換\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n number: { description: \"数値に変換\", hasArgs: false, resultType: \"number\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n string: { description: \"文字列に変換\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n null: { description: \"空文字列をnullに変換\", hasArgs: false, resultType: \"passthrough\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n};\n","/**\n * manifest.ts — `<wcs-state>` の構文・フィルタ・予約名を機械可読な単一正本として公開する。\n *\n * 目的(route-a A2-1): vscode-wcs(wcstack-intellisense)が現在ハードコードで二重実装している\n * 「フィルタ一覧・構文区切り・予約名」を、state 側の実装から導出した manifest に一本化し、\n * 手作業同期によるドリフトを構造的に断つための土台。\n *\n * 設計:\n * - `filters` は実装(builtinFilters の Record キー)から **自動導出**=実装が唯一の正本。\n * - 構文・予約名は config / define.ts の定数から導出。\n * - 将来 `dist/wcs-manifest.json` としてビルド時に書き出し、vscode-wcs がそれを読む形に発展させる。\n * - ドリフト検出テスト(__tests__/manifest.test.ts)が、フィルタ集合の golden と実装の一致を CI で保証する。\n */\nimport { config } from \"./config.js\";\nimport { outputBuiltinFilters } from \"./filters/builtinFilters.js\";\nimport { builtinFilterMeta, IFilterMeta } from \"./filters/filterMeta.js\";\nimport { STRUCTURAL_BINDING_TYPE_SET } from \"./structural/define.js\";\nimport {\n DELIMITER,\n WILDCARD,\n BINDING_SEPARATOR,\n PROP_VALUE_SEPARATOR,\n MODIFIER_SEPARATOR,\n STATE_NAME_SEPARATOR,\n FILTER_SEPARATOR,\n STATE_CONNECTED_CALLBACK_NAME,\n STATE_DISCONNECTED_CALLBACK_NAME,\n STATE_UPDATED_CALLBACK_NAME,\n WEBCOMPONENT_STATE_READY_CALLBACK_NAME,\n STATE_BINDABLES_NAME,\n STATE_COMMAND_TOKENS_NAME,\n STATE_COMMAND_NAMESPACE_NAME,\n STATE_EVENT_TOKENS_NAME,\n STATE_ON_NAME,\n} from \"./define.js\";\n\n// 消費側(vscode-wcs 等)が `@wcstack/state/manifest` から正本を直接引けるよう再エクスポート。\nexport { builtinFilterMeta } from \"./filters/filterMeta.js\";\nexport type { IFilterMeta, FilterResultType, FilterArgType } from \"./filters/filterMeta.js\";\nexport { STRUCTURAL_BINDING_TYPE_SET } from \"./structural/define.js\";\n\n/** マニフェストのバージョン(構造を変えたら上げる)。 */\nexport const WCS_MANIFEST_VERSION = 1;\n\nexport interface IWcsManifest {\n version: number;\n syntax: {\n /** バインド属性名(既定 data-wcs) */\n bindAttribute: string;\n /** タグ名(既定 wcs-state) */\n tagName: string;\n /** パス区切り(`.`) */\n pathDelimiter: string;\n /** ワイルドカード(`*`) */\n wildcard: string;\n /** バインディング構文 `[prop][#mod]: [path][@state][|filter...]` の区切り文字 */\n delimiters: {\n binding: string; // ; 複数バインディングの区切り\n propValue: string; // : prop と path の区切り\n modifier: string; // # prop と修飾子の区切り\n stateName: string; // @ path と stateName の区切り\n filter: string; // | フィルタパイプの区切り\n };\n /** 構造ディレクティブ(`<template data-wcs=\"for: ...\">` 等) */\n structuralDirectives: readonly string[];\n };\n /** 組み込みフィルタ名(builtinFilters から自動導出=実装が正本) */\n filters: string[];\n /** 組み込みフィルタの構造化メタデータ(説明・引数仕様・型)。vscode-wcs の手リスト撤去用。 */\n filterMeta: Record<string, IFilterMeta>;\n /** 予約ライフサイクルフック名 */\n reservedLifecycle: readonly string[];\n /** 予約 state API(プロトコル系の `$` 名前空間) */\n reservedStateApi: readonly string[];\n}\n\n/** 機械可読な単一正本を返す。vscode-wcs はこれを消費する想定。 */\nexport function getWcsManifest(): IWcsManifest {\n return {\n version: WCS_MANIFEST_VERSION,\n syntax: {\n bindAttribute: config.bindAttributeName,\n tagName: config.tagNames.state,\n pathDelimiter: DELIMITER,\n wildcard: WILDCARD,\n delimiters: {\n binding: BINDING_SEPARATOR,\n propValue: PROP_VALUE_SEPARATOR,\n modifier: MODIFIER_SEPARATOR,\n stateName: STATE_NAME_SEPARATOR,\n filter: FILTER_SEPARATOR,\n },\n // 正本 STRUCTURAL_BINDING_TYPE_SET から導出(手書きの二重定義を排除)。\n structuralDirectives: Array.from(STRUCTURAL_BINDING_TYPE_SET),\n },\n // 実装(Record のキー)から自動導出。手リストを持たない=ドリフトの構造的排除。\n filters: Object.keys(outputBuiltinFilters),\n filterMeta: builtinFilterMeta,\n reservedLifecycle: [\n STATE_CONNECTED_CALLBACK_NAME,\n STATE_DISCONNECTED_CALLBACK_NAME,\n STATE_UPDATED_CALLBACK_NAME,\n WEBCOMPONENT_STATE_READY_CALLBACK_NAME,\n ],\n reservedStateApi: [\n STATE_BINDABLES_NAME,\n STATE_COMMAND_TOKENS_NAME,\n STATE_COMMAND_NAMESPACE_NAME,\n STATE_EVENT_TOKENS_NAME,\n STATE_ON_NAME,\n ],\n };\n}\n"],"names":["id","_cache","cacheFilterInfos","_cacheNullListIndex","handlerByHandlerKey","bindingSetByHandlerKey","getHandlerKey","registryByStateElement","getWcBindable","getEventName","EMPTY_SET","trapGet","trapSet"],"mappings":"AAEA,IAAI,WAAW,GAAmB,IAAI;SAEtB,KAAK,GAAA;IACnB,IAAI,WAAW,KAAK,IAAI;AAAE,QAAA,OAAO,WAAW;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,IAAA,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,KAAK;AACjE,IAAA,OAAO,WAAW;AACpB;AAwBA,MAAM,OAAO,GAAoB;AAC/B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,gBAAgB,EAAE,SAAS;AAC3B,IAAA,eAAe,EAAE,QAAQ;AACzB,IAAA,mBAAmB,EAAE,YAAY;AACjC,IAAA,iBAAiB,EAAE,UAAU;AAC7B,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,cAAc,EAAE,IAAI;CACrB;AAED;AACO,MAAM,MAAM,GAAY,OAAkB;SAEjC,SAAS,GAAA;AACvB,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,SAAS,CAAC,aAA8B,EAAA;AACtD,IAAA,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC1B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;IACzD;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,iBAAiB,KAAK,QAAQ,EAAE;AACvD,QAAA,OAAO,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB;IAC7D;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,iBAAiB,KAAK,QAAQ,EAAE;AACvD,QAAA,OAAO,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB;IAC7D;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,gBAAgB,KAAK,QAAQ,EAAE;AACtD,QAAA,OAAO,CAAC,gBAAgB,GAAG,aAAa,CAAC,gBAAgB;IAC3D;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,QAAQ,EAAE;AACrD,QAAA,OAAO,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe;IACzD;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AACzD,QAAA,OAAO,CAAC,mBAAmB,GAAG,aAAa,CAAC,mBAAmB;IACjE;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,iBAAiB,KAAK,QAAQ,EAAE;AACvD,QAAA,OAAO,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB;IAC7D;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC5C,QAAA,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM;IACvC;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE;AAC5C,QAAA,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK;IACrC;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE;AACrD,QAAA,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc;IACvD;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE;AACrD,QAAA,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc;IACvD;AACF;;;;;;AC1FO,MAAM,OAAO,GAAG,GAAG,CAAC;;ACArB,SAAU,UAAU,CAAC,OAAe,EAAA;AACxC,IAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAA,CAAE,CAAC;AAChD;;ACDA,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAmC;AAE3E,IAAIA,IAAE,GAAG,CAAC;AAEJ,SAAU,iCAAiC,CAAC,IAAU,EAAA;IAC1D,IAAI,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AAC3D,IAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,QAAA,OAAO,cAAc;IACvB;IACA,IAAI,SAAS,GAAG,SAAS;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;QAC5C,SAAS,GAAG,OAAO;AACrB,IAAA,CAAC,CAAC;AACF,IAAA,cAAc,GAAG;QACf,EAAE,EAAE,EAAEA,IAAE;QACR,OAAO;AACP,QAAA,OAAO,EAAE;KACV;AACD,IAAA,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AAC9C,IAAA,OAAO,cAAc;AACvB;AAEO,eAAe,qBAAqB,CAAC,IAAU,EAAA;AACpD,IAAA,MAAM,cAAc,GAAG,iCAAiC,CAAC,IAAI,CAAC;IAC9D,MAAM,cAAc,CAAC,OAAO;AAC9B;AAEM,SAAU,yBAAyB,CAAC,IAAU,EAAA;AAClD,IAAA,MAAM,cAAc,GAAG,iCAAiC,CAAC,IAAI,CAAC;IAC9D,cAAc,CAAC,OAAO,EAAE;AAC1B;;AC9BM,SAAU,oBAAoB,CAAC,WAAyB,EAAA;AAC5D,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI;AAC7B,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW;AAC3C,IAAA,IAAI,IAAI,KAAK,WAAW,EAAE;QACxB;IACF;AACA,IAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;;QAE5B;IACF;IACA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC;AACjD;;ACbO,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,QAAQ,GAAG,GAAG;AACpB,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,cAAc,GAAG,GAAG;AAEjC;AACA;AACO,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;;;;AAQG;AACH,MAAM,mBAAmB,GAAmC,EAAE;AAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;IAC3C,mBAAmB,CAAC,IAAI,CAAC,GAAC,CAAC,CAAA,CAAE,CAAC,GAAG,CAAC;AACpC;AACO,MAAM,mBAAmB,GAAmC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAE9F,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,MAAM,aAAa,GAAG,4BAA4B;AAElD,MAAM,6BAA6B,GAAG,oBAAoB;AAC1D,MAAM,gCAAgC,GAAG,uBAAuB;AAChE,MAAM,2BAA2B,GAAG,kBAAkB;AAEtD,MAAM,sCAAsC,GAAG,qBAAqB;AAEpE,MAAM,oBAAoB,GAAG,YAAY;AACzC,MAAM,yBAAyB,GAAG,gBAAgB;AAClD,MAAM,4BAA4B,GAAG,UAAU;AAC/C,MAAM,uBAAuB,GAAG,cAAc;AAC9C,MAAM,aAAa,GAAG,KAAK;AAC3B,MAAM,kBAAkB,GAAG,UAAU;AACrC,MAAM,kCAAkC,GAAG,eAAe;AAC1D,MAAM,iCAAiC,GAAG,cAAc;AACxD,MAAM,wBAAwB,GAAG,oBAAoB;;AC3C5D,MAAMC,QAAM,GAA2B,IAAI,GAAG,EAAE;AAEhD,IAAI,EAAE,GAAW,CAAC;AACZ,SAAU,WAAW,CAAC,IAAY,EAAA;IACtC,IAAI,QAAQ,GAAGA,QAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,OAAO,QAAQ;IACjB;IACA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAAA,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC1B,IAAA,OAAO,QAAQ;AACjB;AAEA,MAAM,QAAQ,CAAA;IACH,EAAE,GAAW,EAAE,EAAE;AACjB,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,WAAW;AACX,IAAA,eAAe;AACf,IAAA,iBAAiB;AACjB,IAAA,mBAAmB;AACnB,IAAA,qBAAqB;AACrB,IAAA,UAAU;AACV,IAAA,aAAa;AACb,IAAA,eAAe;AACf,IAAA,mBAAmB;AACnB,IAAA,iBAAiB;AACjB,IAAA,mBAAmB;AACnB,IAAA,mBAAmB;AACnB,IAAA,qBAAqB;AACrB,IAAA,uBAAuB;AACvB,IAAA,yBAAyB;AACzB,IAAA,iBAAiB;AACjB,IAAA,gBAAgB;AAChB,IAAA,gBAAgB;AAChB,IAAA,aAAa;AACb,IAAA,cAAc;AACvB,IAAA,WAAA,CAAY,IAAY,EAAA;;AAEtB,QAAA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAe;AAC9C,YAAA,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;AACrD,QAAA,CAAC;;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;;QAGhC,MAAM,eAAe,GAAG,EAAE;QAC1B,MAAM,mBAAmB,GAAgB,EAAE;;QAG3C,MAAM,aAAa,GAAG,EAAE;AACxB,QAAA,MAAM,mBAAmB,GAA2B,EAAE,CAAC;QACvD,MAAM,iBAAiB,GAAG,EAAE;AAC5B,QAAA,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAC/B,MAAM,uBAAuB,GAAG,EAAE;QAClC,MAAM,iBAAiB,GAAG,EAAE;AAE5B,QAAA,IAAI,kBAAkB,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE;QACjD,IAAI,aAAa,GAAG,CAAC;;AAGrB,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,kBAAkB,IAAI,QAAQ,CAAC,CAAC,CAAC;;AAGjC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC5B,gBAAA,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACtC,gBAAA,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;gBACxD,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACtD,gBAAA,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC1C,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACzD,gBAAA,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,gBAAA,aAAa,EAAE;YACjB;;AAGA,YAAA,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACxC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;;YAGxD,eAAe,GAAG,kBAAkB;YACpC,kBAAkB,IAAI,GAAG;QAC3B;;QAGA,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;QAClG,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;;AAGlG,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;QACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC;AACzD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC;AAC7C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;QAC1C,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC;AACrD,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC;AACzD,QAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;QACtD,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC;AACjE,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,IAAI;AAC9E,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI;AAChE,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;IACpC;AACD;;ACnHD,MAAM,KAAK,GAAG,IAAI,OAAO,EAAuB;AAE1C,SAAU,gBAAgB,CAAC,IAAU,EAAA;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,IAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,QAAA,OAAO,MAAM;IACf;IACA,IAAI,KAAK,GAAkB,IAAI;AAC/B,IAAA,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;QACA,MAAM,OAAO,GAAG,IAAe;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;AAC7C,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,OAAO,KAAK,GAAG,OAAO;QACxB;AACA,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAE;AACtC,YAAA,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACpB,OAAO,KAAK,GAAG,EAAE;YACnB;QACF;AACA,QAAA,OAAO,KAAK;IACd;YAAU;AACR,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IACxB;AACF;;ACrBA,SAAS,iBAAiB,CAAC,KAAc,EAAA;AACvC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAC7D,MAAM,CAAC,GAAG,KAAwE;AAClF,IAAA,OAAO,CAAC,CAAC,QAAQ,KAAK;WACjB,CAAC,CAAC,OAAO,KAAK;AACd,WAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;AAClC;AAEA,SAAS,iBAAiB,CACxB,IAAY,EACZ,IAAY,EACZ,SAAiB,EAAA;;AAGjB,IAAA,MAAM,YAAY,GAAG,IAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,EAAE;IAClE,OAAO;AACL,QAAA,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,CAAC,IAAI,CAAC;AACpB,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,aAAa,EAAE,YAAY;AAC3B,QAAA,aAAa,EAAE,WAAW,CAAC,YAAY,CAAC;QACxC,SAAS;AACT,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,WAAW,EAAE,MAAM;KACpB;AACH;AAEA,SAAS,QAAQ,CAAC,CAAsB,EAAA;AACtC,IAAA,QAAQ,CAAC,CAAC,WAAW;AACnB,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,UAAU;YACb,OAAO,CAAA,EAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,QAAQ,CAAA,CAAE;AAC1C,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI;AACb,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AACG,SAAU,YAAY,CAC1B,IAAU,EACV,OAA8B,EAC9B,UAAgC,EAAE,EAAA;AAElC,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI;AACnD,IAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,EAAE;AAClD,QAAA,OAAO,OAAO;IAChB;IACA,MAAM,QAAQ,GAA0B,EAAE;AAC1C,IAAA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAuB;AACvD,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,QAAA,IAAI,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;AACnC,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YACrB;QACF;QACA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;YACvC,UAAU,CAAC,CAAA,wCAAA,CAA0C,CAAC;QACxD;QACA,MAAM,OAAO,GAAG,IAAe;AAC/B,QAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,UAAU,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,aAAa,CAAA,kDAAA,EAAqD,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,0BAAA,CAA4B,CAAC;QACnK;QACA,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAyC;AACvF,QAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;YACtC,IAAI,CAAC,aAAa,EAAE;gBAClB,UAAU,CAAC,mBAAmB,MAAM,CAAC,aAAa,CAAA,YAAA,EAAe,OAAO,CAAA,+EAAA,CAAiF,CAAC;YAC5J;;AAEA,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YACrB;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU;AACvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE;YAChC,UAAU,CAAC,mBAAmB,MAAM,CAAC,aAAa,CAAA,YAAA,EAAe,OAAO,CAAA,4DAAA,CAA8D,CAAC;QACzI;AACA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa;AACvC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,YAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC;AACjE,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB;;;QAGA,KAAK,MAAM,KAAK,KAAK,QAAQ,CAAC,MAAM,IAAI,EAAE,GAAG;AAC3C,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,YAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC;AAClE,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB;IACF;;AAEA,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB;AAChD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;AAChB,YAAA,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5B;IACF;IACA,MAAM,KAAK,GAA0B,EAAE;AACvC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,GAAG,KAAK,IAAI,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB;QACF;QACA,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACjC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB;AAAO,aAAA,IAAI,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;kBACnC,IAAK,IAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,CAAA;kBAC3C,MAAM;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA,KAAA,EAAQ,OAAO,CAAA,6CAAA,EAAgD,SAAS,CAAC,aAAa,CAAA,GAAA,CAAK,CAAC;QAClK;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,mBAAmB,CAAC,OAA8B,EAAA;AAChE,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;AACtD;;AC3KM,SAAU,eAAe,CAAC,IAAU,EAAE,IAAc,EAAA;IACxD,IAAI,WAAW,GAAG,IAAI;AACtB,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,WAAW;;AAEzC,IAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,WAAW,GAAG,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;QACtD,IAAI,WAAW,KAAK,IAAI;YAAE;IAC5B;AACA,IAAA,OAAO,WAAW;AACpB;;ACPM,SAAU,eAAe,CAAC,IAAU,EAAE,uBAA8C,EAAA;IACxF,MAAM,YAAY,GAAmB,EAAE;AACvC,IAAA,KAAK,MAAM,sBAAsB,IAAI,uBAAuB,EAAE;AAC5D,QAAA,IAAI,sBAAsB,CAAC,WAAW,KAAK,MAAM,EAAE;YACjD,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,GAAG,sBAAsB;AACzB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,IAAI;AAClB,aAAA,CAAC;QACJ;aAAO;YACL,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,GAAG,sBAAsB;AACzB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,WAAW;AACzB,aAAA,CAAC;QACJ;IACF;AACA,IAAA,OAAO,YAAY;AACrB;;ACpBA,MAAM,cAAc,GAAG,IAAI,OAAO,EAAwB;AAEpD,SAAU,iBAAiB,CAAC,IAAU,EAAA;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AACzC;AAEM,SAAU,iBAAiB,CAAC,IAAU,EAAE,QAAwB,EAAA;AACpE,IAAA,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC;AAEM,SAAU,gBAAgB,CAAC,IAAU,EAAE,OAAqB,EAAA;AAChE,IAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACxC,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,iBAAiB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;IACpC;SAAO;AACL,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IACxB;AACF;;ACjBO,MAAM,2BAA2B,GAAqB,IAAI,GAAG,CAAC;IACnE,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,KAAK;AACN,CAAA,CAAC;;ACPF;;;;;;;;;;;;;;;AAeG;AAGH;;;;;AAKG;AACG,SAAU,eAAe,CAAC,MAAa,EAAA;AAC3C,IAAA,UAAU,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,6BAAA,CAA+B,CAAC;AAC7D;AAEA;;;;;AAKG;AACG,SAAU,kBAAkB,CAAC,MAAa,EAAA;AAC9C,IAAA,UAAU,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,4BAAA,CAA8B,CAAC;AAC5D;AAEA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,MAAa,EAAA;AAC7C,IAAA,UAAU,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,wBAAA,CAA0B,CAAC;AACxD;AAYA;;;;;AAKG;AACG,SAAU,kBAAkB,CAAC,MAAa,EAAA;AAC9C,IAAA,UAAU,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,yBAAA,CAA2B,CAAC;AACzD;AAEA;;;;;AAKG;AACG,SAAU,eAAe,CAAC,MAAa,EAAA;AAC3C,IAAA,UAAU,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,sBAAA,CAAwB,CAAC;AACtD;;AC5EA;;;;;;;;;;;;;;;AAeG;AAMH,SAAS,oBAAoB,CAAC,KAAa,EAAA;IACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAClC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,KAAc,KAAa;;AAEjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gBAAC,kBAAkB,CAAC,IAAI,CAAC;YAAC;AAC1D,YAAA,OAAO,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC;QAC9B;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,KAAK,GAAG;QACtB;;QAEA,OAAO,KAAK,KAAK,GAAG;AACtB,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,KAAc,KAAa;;AAEjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gBAAC,kBAAkB,CAAC,IAAI,CAAC;YAAC;AAC1D,YAAA,OAAO,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC;QAC9B;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,KAAK,GAAG;QACtB;;QAEA,OAAO,KAAK,KAAK,GAAG;AACtB,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,QAAkB,KAAuB;IACpD,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAAC,kBAAkB,CAAC,KAAK,CAAC;QAAC;QAC3D,OAAO,CAAC,KAAK;AACf,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;AACjD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,IAAI,CAAC;IAAC;IAC1D,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,IAAI,CAAC;QAAC;AACxD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;AACjD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,IAAI,CAAC;IAAC;IAC1D,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,IAAI,CAAC;QAAC;AACxD,QAAA,OAAO,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;AAC7B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;AACjD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,IAAI,CAAC;IAAC;IAC1D,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,IAAI,CAAC;QAAC;AACxD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,OAAiB,KAAuB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC;AACjD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,IAAI,CAAC;IAAC;IAC1D,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,IAAI,CAAC;QAAC;AACxD,QAAA,OAAO,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;AAC7B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;AACzD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;AACzD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;AACzD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;AACzD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;AACzD,QAAA,OAAO,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;IAClD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;AAC/B,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,KAAK,CAAC;QAAC;QACzD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,MAAM,GAAG,CAAC,OAAiB,KAAsB;IACrD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;IACzC,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAC;AAC5D,QAAA,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;AAClC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,QAAkB,KAAsB;IAClD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACpC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,EAAE,GAAG,CAAC,QAAkB,KAAsB;IAClD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACpC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,QAAkB,KAAsB;IACnD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAAC,YAAA,OAAO,CAAC;QAAC;AAC9B,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAAC,YAAA,OAAO,CAAC,CAAC,WAAW,EAAE;QAAC;AAC5C,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,IAAI,GAAG,CAAC,QAAkB,KAAsB;IACpD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AAC7B,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,OAAiB,KAAsB;IACpD,MAAM,YAAY,GAAa,EAAE;AACjC,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC;AACrD,IAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;QAAC,kBAAkB,CAAC,OAAO,CAAC;IAAC;IAC9D,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;AACzB,IAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;YAAC,kBAAkB,CAAC,OAAO,CAAC;QAAC;QAC9D,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC;IACA,OAAO,CAAC,KAAc,KAAY;QAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;AAC7C,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,MAAM,GAAG,CAAC,OAAiB,KAAsB;AACrD,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC;AACtD,IAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;QAAC,kBAAkB,CAAC,QAAQ,CAAC;IAAC;AAC/D,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC;AACtD,IAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;QAAC,kBAAkB,CAAC,QAAQ,CAAC;IAAC;IAC/D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACzD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AACnD,IAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;IAChC,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AACnD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;AAClD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,KAAK,CAAC;IAAC;IAC3D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1C,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,QAAkB,KAAsB;IACnD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACnD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,QAAkB,KAAsB;IACnD,OAAO,CAAC,KAAc,KAAY;QAChC,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACpC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,QAAkB,KAAsB;IACrD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,OAAiB,KAAsB;IACpD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;AAC/B,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,OAAO,CAAC;IAAC;IAC7D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,OAAO,CAAC;QAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ;AAChD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,OAAiB,KAAsB;IACpD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;AAC/B,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,OAAO,CAAC;IAAC;IAC7D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,OAAO,CAAC;QAAC;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ;AAChD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,IAAI,GAAG,CAAC,OAAiB,KAAsB;IACnD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;AAC/B,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,MAAM,CAAC;IAAC;IAC5D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,MAAM,CAAC;QAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,QAAQ;AAC/C,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,OAAO,GAAG,CAAC,OAAiB,KAAsB;IACtD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;AAC/B,IAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;QAAC,kBAAkB,CAAC,SAAS,CAAC;IAAC;IAC/D,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAAC,iBAAiB,CAAC,SAAS,CAAC;QAAC;AAC7D,QAAA,OAAO,CAAA,EAAG,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG;AACjD,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,IAAI,GAAG,CAAC,OAAiB,KAAsB;IACnD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;IACzC,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAG;YAAC,eAAe,CAAC,MAAM,CAAC;QAAC;AACxD,QAAA,OAAO,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACtC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,IAAI,GAAG,CAAC,OAAiB,KAAsB;IACnD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;IACzC,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAAC,eAAe,CAAC,MAAM,CAAC;QAAC;AACvD,QAAA,OAAO,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACtC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,QAAQ,GAAG,CAAC,OAAiB,KAAsB;IACvD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;IACzC,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAAC,eAAe,CAAC,UAAU,CAAC;QAAC;AAC3D,QAAA,OAAO,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;AAClC,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,GAAG,GAAG,CAAC,OAAiB,KAAsB;IAClD,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG;IAC/B,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAAC,eAAe,CAAC,KAAK,CAAC;QAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChE,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACvD,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE;AAC5C,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,QAAkB,KAAuB;AACtD,IAAA,OAAO,CAAC,KAAc,KAAc,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACpJ,CAAC;AAED;;;;;AAKG;AACH,MAAM,MAAM,GAAG,CAAC,QAAkB,KAAuB;AACvD,IAAA,OAAO,CAAC,KAAc,KAAa,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AACpJ,CAAC;AAED;;;;;AAKG;AACH,MAAM,QAAQ,GAAG,CAAC,OAAiB,KAAuB;AACxD,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC;IACvD,OAAO,CAAC,KAAc,KAAa;QACjC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAAC,YAAA,OAAO,GAAG;QAAC;AAChI,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,OAAO,GAAG,CAAC,QAAkB,KAAuB;IACxD,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,MAAM,GAAG,CAAC,QAAkB,KAAsB;IACtD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,MAAM,GAAG,CAAC,QAAkB,KAAsB;IACtD,OAAO,CAAC,KAAc,KAAY;AAChC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;AACH,CAAC;AAED;;;;;AAKG;AACH,MAAM,KAAK,GAAG,CAAC,QAAkB,KAAuB;IACtD,OAAO,CAAC,KAAc,KAAa;AACjC,QAAA,OAAO,CAAC,KAAK,KAAK,EAAE,IAAI,IAAI,GAAG,KAAK;AACtC,IAAA,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAsB;AACxC,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,GAAG;AAEV,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AAER,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AAEV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;AAEV,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,OAAO;AAElB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,KAAK,EAAE,GAAG;AAEV,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,UAAU,EAAE,QAAQ;AAEpB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,MAAM,EAAE,KAAK;CACd;AAEM,MAAM,oBAAoB,GAAG,cAAc;AAC3C,MAAM,mBAAmB,GAAG,cAAc;AAE1C,MAAM,4BAA4B,GAAG;AAC1C,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,QAAQ,EAAE,oBAAoB;CACtB;AAEV;;;;;;AAMG;AACI,MAAM,eAAe,GAAG,CAAC,IAAW,EAAE,OAAiB,KAAK,CAAC,OAA0B,KAAI;AAChG,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,UAAU,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE,CAAC;IACzC;AACA,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;;ACrqBK,SAAU,eAAe,CAAC,QAAgB,EAAA;IAC9C,MAAM,IAAI,GAAa,EAAE;IACzB,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,OAAO,GAAkB,IAAI;IACjC,IAAI,QAAQ,GAAG,KAAK;AAEpB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;QAExB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;gBACpB,OAAO,GAAG,IAAI;YAChB;iBAAO;gBACL,OAAO,IAAI,IAAI;YACjB;QACF;aAAO,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;YACvC,OAAO,GAAG,IAAI;YACd,QAAQ,GAAG,IAAI;QACjB;AAAO,aAAA,IAAI,IAAI,KAAK,GAAG,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,KAAK;QAClB;aAAO;YACL,OAAO,IAAI,IAAI;QACjB;IACF;AAEA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE;AAC3B,IAAA,IAAI,IAAI,IAAI,QAAQ,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;AAEA,IAAA,OAAO,IAAI;AACb;;AC3BA,MAAM,aAAa,GAAmC,IAAI,GAAG,EAAE;AAE/D;AAEM,SAAU,YAAY,CAAC,cAAwB,EAAE,YAA0B,EAAA;AAC/E,IAAA,MAAM,cAAc,GAAG,4BAA4B,CAAC,YAAY,CAAC;IACjE,MAAM,OAAO,GAAkB,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;QAC/D,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9C,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;;QAEnD,IAAI,cAAc,KAAK,EAAE,IAAI,eAAe,KAAK,EAAE,EAAE;AACnD,YAAA,UAAU,CAAC,CAAA,uDAAA,EAA0D,UAAU,CAAA,CAAA,CAAG,CAAC;QACrF;QACA,IAAI,eAAe,KAAK,EAAE,IAAI,cAAc,KAAK,EAAE,EAAE;AACnD,YAAA,UAAU,CAAC,CAAA,uDAAA,EAA0D,UAAU,CAAA,CAAA,CAAG,CAAC;QACrF;AACA,QAAA,IAAI,cAAc,KAAK,EAAE,EAAE;;AAEzB,YAAA,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE;AACpC,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAA,GAAA,EAAM,YAAY,EAAE;YACnD,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C,YAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBACnC,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC;AAC1D,gBAAA,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;YACxC;YACA,OAAO;AACL,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,QAAQ,EAAE,QAAQ;aACnB;QACH;aAAO;AACL,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,EAAE,eAAe,CAAC;AAC1E,YAAA,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE;AACjE,YAAA,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC;AACtC,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,YAAY,EAAE;YACpE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C,YAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBACnC,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,cAAc,CAAC;AAC5D,gBAAA,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;YACxC;YACA,OAAO;gBACL,UAAU;gBACV,IAAI;gBACJ,QAAQ;aACT;QACH;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,OAAO;AAChB;;ACrDO,MAAM,MAAM,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,IAAI,EAAE;;ACMrD,MAAMC,kBAAgB,GAAG,IAAI,GAAG,EAAyB;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AAEM,SAAU,aAAa,CAAC,QAAgB,EAAA;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC9C,IAAI,QAAQ,GAAW,EAAE;IACzB,IAAI,WAAW,GAAa,EAAE;IAC9B,IAAI,WAAW,GAAG,EAAE;IACpB,IAAI,OAAO,GAAkB,EAAE;AAC/B,IAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,QAAA,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AACxC,QAAA,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5C,QAAA,IAAIA,kBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACrC,YAAA,OAAO,GAAGA,kBAAgB,CAAC,GAAG,CAAC,WAAW,CAAE;QAC9C;aAAO;AACL,YAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7D,YAAA,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;AAC5C,YAAAA,kBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;QAC5C;IACF;SAAO;AACL,QAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE;IAC5B;AAEA,IAAA,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACpF,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1D,MAAM,aAAa,GAAG;UAClB,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM;UACvC,EAAE;IACN,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,aAAa;AACb,QAAA,SAAS,EAAE,OAAO;KACnB;AACH;;ACvCA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyB;AAEzD;AACA;AACA;AACA;AACM,SAAU,cAAc,CAAC,SAAiB,EAAA;IAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC/C,IAAI,YAAY,GAAW,EAAE;IAC7B,IAAI,WAAW,GAAa,EAAE;IAC9B,IAAI,WAAW,GAAG,EAAE;IACpB,IAAI,OAAO,GAAkB,EAAE;AAC/B,IAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,QAAA,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AAC7C,QAAA,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7C,QAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACrC,YAAA,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAE;QAC9C;aAAO;AACL,YAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7D,YAAA,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC7C,YAAA,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;QAC5C;IACF;SAAO;AACL,QAAA,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE;IACjC;AACA,IAAA,MAAM,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACnG,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;IAC3C,OAAO;QACL,SAAS;QACT,aAAa;AACb,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,UAAU,EAAE,OAAO;KACpB;AACH;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEM,SAAU,wBAAwB,CAAC,QAAgB,EAAA;AACvD,IAAA,MAAM,CAAE,GAAG,SAAS,CAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAyB;QAC9D,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAC7D,QAAA,IAAI,cAAc,KAAK,EAAE,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,mBAAA,EAAsB,QAAQ,CAAA,wDAAA,CAA0D,CAAC;QACtG;AACA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE;AACzD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AAC3D,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;YACrC,OAAO;AACL,gBAAA,QAAQ,EAAE,MAAM;gBAChB,YAAY,EAAE,CAAC,MAAM,CAAC;AACtB,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,aAAa,EAAE,OAAO;AACtB,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,WAAW,EAAE,MAAM;aACpB;QACH;AAAO,aAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC7B,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;YAC7C,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,UAAU,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAA,6CAAA,CAA+C,CAAC;YAChG;YACA,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,gBAAA,UAAU,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAA,kCAAA,CAAoC,CAAC;YACrF;YACA,OAAO;AACL,gBAAA,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,CAAC,KAAK,CAAC;AACrB,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,GAAG,WAAW;AACd,gBAAA,WAAW,EAAE,QAAQ;aACtB;QACH;aAAO,IAAI,QAAQ,KAAK;AACnB,eAAA,QAAQ,KAAK;AACb,eAAA,QAAQ,KAAK;AACb,eAAA,QAAQ,KAAK;eACb,QAAQ,KAAK,UAAU,EAC1B;AACA,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;YAC7C,OAAO;AACL,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,CAAC,QAAQ,CAAC;AACxB,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,GAAG,WAAW;AACd,gBAAA,WAAW,EAAE,QAAQ;aACtB;QACH;aAAO;AACL,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;AAC7C,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC;;;YAG1C,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;gBAC/C,OAAO;AACL,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,WAAW;AACd,oBAAA,WAAW,EAAE,OAAO;iBACrB;YACH;AACA,YAAA,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC/C,OAAO;AACL,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,WAAW;AACd,oBAAA,WAAW,EAAE,OAAO;iBACrB;YACH;iBAAO;gBACL,OAAO;AACL,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,WAAW;AACd,oBAAA,WAAW,EAAE,MAAM;iBACpB;YACH;QACF;AACF,IAAA,CAAC,CAAC;;AAEF,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,QAAA,MAAM,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAChG,IAAI,sBAAsB,EAAE;AAC1B,YAAA,UAAU,CAAC,CAAA,mBAAA,EAAsB,QAAQ,CAAA,qEAAA,CAAuE,CAAC;QACnH;IACF;AACA,IAAA,OAAO,OAAO;AAChB;;ACxGA,MAAM,cAAc,GAAG,IAAI,OAAO,EAAgB;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,GAAgB,IAAI,GAAG,CAAS;AACzD,IAAA,MAAM,CAAC,iBAAiB;AACxB,IAAA,MAAM,CAAC,gBAAgB;AACvB,IAAA,MAAM,CAAC,eAAe;AACtB,IAAA,MAAM,CAAC,mBAAmB;AAC1B,IAAA,MAAM,CAAC,iBAAiB;AACzB,CAAA,CAAC;AAEF;AACA,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,CAAA,mCAAA,CAAqC,CAAC;AAElE,SAAU,gBAAgB,CAAC,IAAU,EAAA;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,IAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,QAAA,OAAO,SAAS;IAClB;IACA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;IACA,MAAM,WAAW,GAAG,IAAe;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB;IACpD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;IACA,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AACjB;;AC3CM,SAAU,4BAA4B,CAAC,QAAgB,EAAA;AAC3D,IAAA,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC;IAC5C,OAAO;AACL,QAAA,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,CAAC,aAAa,CAAC;AAC7B,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,GAAG,WAAW;AACd,QAAA,WAAW,EAAE,MAAM;KACpB;AACH;;ACLM,SAAU,uBAAuB,CAAC,IAAU,EAAA;IAChD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;QACvC,MAAM,OAAO,GAAG,IAAe;AAC/B,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACrE,QAAA,OAAO,wBAAwB,CAAC,QAAQ,CAAC;IAC3C;SAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AAC9C,QAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAC7C,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;YAC3B,UAAU,CAAC,CAAA,oCAAA,CAAsC,CAAC;QACpD;AACA,QAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,cAAc,CAAC;AAC1D,QAAA,IAAI,sBAAsB,GAAG,YAAY,EAAE,mBAAmB,IAAI,IAAI;QACtE,IAAI,IAAI,GAAkB,IAAI;AAC9B,QAAA,IAAI,sBAAsB,KAAK,IAAI,EAAE;;AAEnC,YAAA,sBAAsB,GAAG,4BAA4B,CAAC,cAAc,CAAC;YACrE,IAAI,GAAG,IAAI;QACb;aAAO;YACL,IAAI,GAAG,cAAc;QACvB;AACA,QAAA,OAAO,CAAC;AACN,gBAAA,GAAG,sBAAsB;AACzB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;IACJ;AACA,IAAA,OAAO,EAAE;AACX;;AC/BA;;;;AAIG;AAEG,SAAU,kBAAkB,CAAC,IAA2C,EAAA;IAC5E,MAAM,eAAe,GAAW,EAAE;AAClC,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CACtC,IAAI,EACJ,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,EACjD;AACE,QAAA,UAAU,CAAC,IAAU,EAAA;YACnB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;gBACvC,MAAM,OAAO,GAAG,IAAe;gBAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACjE,gBAAA,OAAO;sBACH,UAAU,CAAC;AACb,sBAAE,UAAU,CAAC,WAAW;YAC5B;iBAAO;;AAEL,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK;sBAC9B,UAAU,CAAC;AACb,sBAAE,UAAU,CAAC,WAAW;YAC5B;QACF;AACD,KAAA,CACF;AAED,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IAC1C;AACA,IAAA,OAAO,eAAe;AACxB;;ACvBA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAQ;AAQ7C,SAAS,0BAA0B,CACjC,IAAU,EACV,YAAmC,EACnC,OAAmC,EAAA;AAEnC,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;AAC3F,IAAA,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;AACrC,cAAE,gBAAgB,CAAC,IAAe;cAChC,IAAI;AACR,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,UAAU,CAAC,CAAA,4DAAA,CAA8D,CAAC;QAC5E;AACA,QAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;IACpE;AACA,IAAA,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;AAChD,IAAA,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC;IACjC,yBAAyB,CAAC,IAAI,CAAC;AAC/B,IAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;AACrC;AAEM,SAAU,2BAA2B,CACzC,IAA2C,EAAA;AAE3C,IAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAChD,MAAM,WAAW,GAAmB,EAAE;IACtC,MAAM,eAAe,GAA2B,EAAE;AAClD,IAAA,KAAI,MAAM,IAAI,IAAI,eAAe,EAAE;AACjC,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE;AACjC,QAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAClD,QAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACtF,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;AAC5B,YAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC;QACF;QACA,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtC;AACA,IAAA,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,eAAe,CAAC;AACxD;AAEM,SAAU,qCAAqC,CACnD,IAAsB,EACtB,SAA8B,EAAA;IAE9B,MAAM,KAAK,GAAW,EAAE;IACxB,MAAM,WAAW,GAAmB,EAAE;AACtC,IAAA,KAAI,MAAM,QAAQ,IAAI,SAAS,EAAE;QAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACrD,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,UAAU,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,CAAgB,CAAC;QACrF;AACA,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE;AACjC,QAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;;QAExG,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAClB;AACA,IAAA,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;AAC7B;AAEM,SAAU,cAAc,CAAC,IAAU,EAAA;AACvC,IAAA,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;AAChC;AAEA;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,KAA2B,EAAA;AAC7D,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK;IACpC,cAAc,CAAC,IAAI,CAAC;AACpB,IAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACvF,OAAO,MAAM,CAAC,QAAQ;AACxB;;AC5FA,MAAMD,QAAM,GAA2D,IAAI,OAAO,EAAE;AACpF,MAAME,qBAAmB,GAAsC,IAAI,OAAO,EAAE;AAE5E,MAAM,YAAY,CAAA;AACP,IAAA,QAAQ;AACR,IAAA,SAAS;AACV,IAAA,cAAc;IAEtB,WAAA,CAAY,QAAmB,EAAE,SAA4B,EAAA;AAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE;YAC9C,OAAO,IAAI,CAAC,cAAc;QAC5B;AACA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc;AACnD,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7E,IAAI,eAAe,GAAsB,IAAI;AAC7C,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,IAAI,IAAI;QAC3D;aAAO;AACL,YAAA,eAAe,GAAG,IAAI,CAAC,SAAS;QAClC;QACA,OAAO,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,cAAc,EAAE,eAAe,CAAC;IAClF;AACD;AAEK,SAAU,kBAAkB,CAAC,QAAmB,EAAE,SAA4B,EAAA;AAClF,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB,IAAI,MAAM,GAAGA,qBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,MAAM;QACf;QACA,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzC,QAAAA,qBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzC,QAAA,OAAO,MAAM;IACf;SAAO;QACL,IAAI,eAAe,GAAGF,QAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;AAC1C,YAAA,eAAe,GAAG,IAAI,OAAO,EAA4B;AACzD,YAAAA,QAAM,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;QACxC;QACA,IAAI,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,MAAM;QACf;QACA,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC9C,QAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACrC,QAAA,OAAO,MAAM;IACf;AACF;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;MAYa,KAAK,CAAA;AACR,IAAA,KAAK;AACL,IAAA,YAAY,GAAyB,IAAI,GAAG,EAAE;AAEtD,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI;IAC/B;AAEA,IAAA,SAAS,CAAC,EAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9B,QAAA,CAAC;IACH;AAEA,IAAA,WAAW,CAAC,EAAmB,EAAA;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC;IAEA,IAAI,CAAC,GAAG,IAAe,EAAA;QACrB,MAAM,OAAO,GAAc,EAAE;AAC7B,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B;AACA,QAAA,OAAO,OAAO;IAChB;AACD;;ACjDD;AACA;AACM,MAAO,YAAa,SAAQ,KAAK,CAAA;AACtC;AAEK,SAAU,cAAc,CAAC,KAAc,EAAA;IAC3C,OAAO,KAAK,YAAY,YAAY;AACtC;;ACRA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAsB;AAErD,SAAU,oBAAoB,CAAC,IAAU,EAAA;IAC7C,IAAI,SAAS,GAAgB,IAAI;IACjC,OAAO,SAAS,EAAE;QAChB,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;QACpD,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,WAAW;QACpB;AACA,QAAA,SAAS,GAAG,SAAS,CAAC,UAAU;IAClC;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,oBAAoB,CAAC,IAAU,EAAE,WAAgC,EAAA;AAC/E,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,QAAA,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B;IACF;AACA,IAAA,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AAC1C;;ACrBO,MAAM,yBAAyB,GAAkB,MAAM,CAAC,uBAAuB,CAAC;AAChF,MAAM,oBAAoB,GAAkB,MAAM,CAAC,kBAAkB,CAAC;AACtE,MAAM,kBAAkB,GAAkB,MAAM,CAAC,gBAAgB,CAAC;AAClE,MAAM,kBAAkB,GAAkB,MAAM,CAAC,gBAAgB,CAAC;AAClE,MAAM,uBAAuB,GAAkB,MAAM,CAAC,qBAAqB,CAAC;AAC5E,MAAM,0BAA0B,GAAkB,MAAM,CAAC,wBAAwB,CAAC;AAClF,MAAM,qBAAqB,GAAkB,MAAM,CAAC,mBAAmB,CAAC;;ACI/E;AACA;AACA,SAAS,kBAAkB,CAAC,aAAqB,EAAA;IAC/C,OAAO,aAAa,CAAC,UAAU,CAAC,4BAA4B,GAAG,GAAG,CAAC;AACrE;AAEA,MAAMG,qBAAmB,GAAuC,IAAI,GAAG,EAAE;AACzE,MAAMC,wBAAsB,GAAmC,IAAI,GAAG,EAAE;AAExE,SAASC,eAAa,CAAC,OAAqB,EAAA;AAC1C,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;IACvG,OAAO,CAAA,EAAG,OAAO,CAAC,SAAS,CAAA,EAAA,EAAK,OAAO,CAAC,aAAa,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE;AACzE;AAEA,MAAM,yBAAyB,GAAG,CAChC,SAAiB,EACjB,WAAmB,EACnB,SAAmB,EACnB,aAAwB,KACrB,CAAC,KAAY,KAAS;AACzB,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,KAAK,CAAC,cAAc,EAAE;AACzD,IAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,eAAe,EAAE;AAEvD,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAiB;AACpC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAU;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,8BAAA,CAAgC,CAAC;IACnF;AAEA,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC;AAC9C,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC;IACjD,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,KAAK,KAAI;AACxD,QAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;YAC5C,MAAM,OAAO,GAAG,WAAW,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;YACpD,IAAI,SAAS,EAAE;;AAEb,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAChF,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AAC1B,oBAAA,UAAU,CAAC,CAAA,eAAA,EAAkB,WAAW,CAAA,4GAAA,CAA8G,CAAC;gBACzJ;gBACA,OAAQ,KAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC;YACzD;AACA,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;AAClC,YAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,gBAAA,UAAU,CAAC,CAAA,SAAA,EAAY,WAAW,iCAAiC,SAAS,CAAA,EAAA,CAAI,CAAC;YACnF;AACA,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;AAC3D,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,kBAAkB,CAAC,OAAqB,EAAA;IACtD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACtC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,GAAG,GAAGA,eAAa,CAAC,OAAO,CAAC;IAClC,IAAI,iBAAiB,GAAGF,qBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AACpD,IAAA,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;AAC5C,QAAA,iBAAiB,GAAG,yBAAyB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;AACrI,QAAAA,qBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC;IACjD;IAEA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC;IAExE,IAAI,UAAU,GAAGC,wBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,IAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;QACrC,UAAU,GAAG,IAAI,GAAG,CAAe,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAAA,wBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;IAC7C;SAAO;AACL,QAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;IACzB;AACA,IAAA,OAAO,IAAI;AACb;;ACnFA;AACA;AACM,MAAO,UAAW,SAAQ,KAAK,CAAA;AACpC;;ACFD,MAAME,wBAAsB,GAAoD,IAAI,OAAO,EAAE;AAEvF,SAAU,qBAAqB,CAAC,YAA2B,EAAE,IAAY,EAAA;IAC7E,IAAI,QAAQ,GAAGA,wBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvD,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,QAAQ,GAAG,IAAI,GAAG,EAAsB;AACxC,QAAAA,wBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IACpD;IACA,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,QAAA,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AAC5B,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC3B;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,uBAAuB,CAAC,YAA2B,EAAA;AACjE,IAAAA,wBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7C;;ACrBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AAgBH,MAAM,iBAAiB,GAA+C,IAAI,OAAO,EAAE;AAEnF,SAASC,eAAa,CAAC,OAAgB,EAAA;AACrC,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC/C,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;;IAEA,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAA6C;AACjG,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,UAAU;AACxC,IAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;AACnE,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,uBAAuB,CAAC,OAAqB,EAAA;IAC3D,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;AAC5C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;;AAGvC,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC/C,IAAA,IAAI,aAAa,KAAK,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE;QAC7E,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAK;YAClD,uBAAuB,CAAC,OAAO,CAAC;AAClC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAClC,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QACjE,UAAU,CAAC,CAAA,uEAAA,CAAyE,CAAC;IACvF;AAEA,IAAA,MAAM,QAAQ,GAAGA,eAAa,CAAC,OAAO,CAAC;AACvC,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;QACrB,UAAU,CAAC,CAAA,2DAAA,EAA8D,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,qBAAA,CAAuB,CAAC;IAChI;AACA,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AACzE,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,UAAU,CAAC,CAAA,UAAA,EAAa,YAAY,CAAA,+CAAA,EAAkD,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;IAC1H;AACA,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK;AAEhC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa;AACvC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACnC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa;AACvC,IAAA,MAAM,OAAO,GAAG,CAAC,KAAY,KAAU;AACrC,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,KAAK,CAAC,cAAc,EAAE;AACzD,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,eAAe,EAAE;;AAGvD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAU;QAC9C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,mCAAA,CAAqC,CAAC;QACxF;QACA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAChD,YAAA,UAAU,CAAC,CAAA,YAAA,EAAe,SAAS,+CAA+C,SAAS,CAAA,EAAA,CAAI,CAAC;QAClG;AACA,QAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC;QACjD,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,KAAK,KAAI;AACxD,YAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;gBAC5C,MAAM,OAAO,GAAG,WAAW,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;gBACpD,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC;gBAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAC7C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5C,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtD,IAAA,OAAO,IAAI;AACb;;ACpHA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAE,OAAO,EAAE,UAAU,CAAE,CAAC;AACpD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAE,OAAO,EAAE,eAAe,EAAE,aAAa,CAAE,CAAC;AAE/E,SAAU,gBAAgB,CAAC,IAAU,EAAE,QAAgB,EAAA;IAC3D,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AACvC,QAAA,OAAO,KAAK;IACd;IACA,MAAM,OAAO,GAAG,IAAe;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;AAC7C,IAAA,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,QAAA,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,WAAW,EAAE;AACxE,QAAA,IAAI,SAAS,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,KAAK;QACd;QACA,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE;AACxD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1C,YAAA,OAAO,IAAI;QACb;IACF;IACA,IAAI,OAAO,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE;AAChD,QAAA,OAAO,IAAI;IACb;IACA,IAAI,OAAO,KAAK,UAAU,IAAI,QAAQ,KAAK,OAAO,EAAE;AAClD,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC/C,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAQ;AAC5D,QAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;AACtC,YAAA,UAAU,CAAC,CAAA,gBAAA,EAAmB,aAAa,mDAAmD,QAAQ,CAAA,kCAAA,CAAoC,CAAC;QAC7I;AACA,QAAA,MAAM,QAAQ,GAA4B,WAAW,CAAC,UAAU;AAChE,QAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;AACnE,YAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE;AACtD,gBAAA,OAAO,IAAI;YACb;QACF;IACF;AACA,IAAA,OAAO,KAAK;AACd;;ACpCA,MAAMJ,qBAAmB,GAAuC,IAAI,GAAG,EAAE;AACzE,MAAMC,wBAAsB,GAAmC,IAAI,GAAG,EAAE;AAExE,MAAM,cAAc,GAAG,CAAC,CAAQ,KAAM,CAAiB,CAAC,MAAM;AAE9D,SAASC,eAAa,CAAC,OAAqB,EAAE,SAAiB,EAAE,SAAkB,EAAA;AACjF,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACnG,OAAO,CAAA,EAAG,OAAO,CAAC,SAAS,CAAA,EAAA,EAAK,OAAO,CAAC,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAC,aAAa,CAAA,EAAA,EAAK,SAAS,CAAA,EAAA,EAAK,SAAS,CAAA,EAAA,EAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAA,CAAE;AACpI;AAEA,SAASG,cAAY,CAAC,OAAqB,EAAA;IACzC,MAAM,OAAO,GAAI,OAAO,CAAC,IAAgB,CAAC,OAAO,CAAC,WAAW,EAAE;;AAE/D,IAAA,IAAI,SAAS,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,GAAG,OAAO;;IAE3D,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAe,CAAC;AAC/D,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAQ;AAC5D,QAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;AACtC,YAAA,UAAU,CAAC,CAAA,gBAAA,EAAmB,aAAa,CAAA,kEAAA,CAAoE,CAAC;QAClH;AACA,QAAA,MAAM,QAAQ,GAA4B,WAAW,CAAC,UAAU;AAChE,QAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;YACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC;YAC3E,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,GAAG,QAAQ,CAAC,KAAK;YAC5B;QACF;IACF;;AAEA,IAAA,KAAI,MAAM,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE;AAC3C,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B;IACF;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,cAAc,CAAC,OAAqB,EAAA;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAe,CAAC;AAC/D,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAQ;QAC5D,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,QAAQ,GAA4B,WAAW,CAAC,UAAU;AAChE,YAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;gBACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC;gBAC3E,IAAI,QAAQ,EAAE;AACZ,oBAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,cAAc;gBAC1C;YACF;QACF;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,MAAM,0BAA0B,GAAG,CACjC,SAAiB,EACjB,QAAgB,EAChB,aAAqB,EACrB,SAAwB,EACxB,WAA2C,KACxC,CAAC,KAAY,KAAS;AACzB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAiB;AACpC,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,sCAAA,CAAwC,CAAC;QACtD;IACF;AACA,IAAA,IAAI,QAAa;AACjB,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,QAAA,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;IAC/B;SAAO;AACL,QAAA,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAA,mCAAA,CAAqC,CAAC;YACzF;QACF;AACA,QAAA,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC;IACpC;IACA,IAAI,gBAAgB,GAAG,QAAQ;AAC/B,IAAA,KAAI,MAAM,MAAM,IAAI,SAAS,EAAE;AAC7B,QAAA,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACtD;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAU;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,gCAAA,CAAkC,CAAC;IACrF;AAEA,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAC9C,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,QAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;AAC5C,YAAA,KAAK,CAAC,aAAa,CAAC,GAAG,gBAAgB;AACzC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,wBAAwB,CAAC,OAAqB,EAAA;IAC5D,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAe,CAAC;AAC/D,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;QAC1B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;AACrD,QAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;YACtC,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAK;gBAClD,wBAAwB,CAAC,OAAO,CAAC;AACnC,YAAA,CAAC,CAAC;YACF;QACF;IACF;IAEA,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AAClG,QAAA,MAAM,SAAS,GAAGA,cAAY,CAAC,OAAO,CAAC;AACvC,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;AAC3C,QAAA,MAAM,GAAG,GAAGH,eAAa,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,KAAK,IAAI,CAAC;QACnE,IAAI,kBAAkB,GAAGF,qBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AACrD,QAAA,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;YAC7C,kBAAkB,GAAG,0BAA0B,CAC7C,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,SAAS,EACjB,WAAW,CACZ;AACD,YAAAA,qBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC;QAClD;QACC,OAAO,CAAC,IAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACzE,IAAI,UAAU,GAAGC,wBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,QAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;YACrC,UAAU,GAAG,IAAI,GAAG,CAAe,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAAA,wBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;QAC7C;aAAO;AACL,YAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB;IACF;AACF;;AC3IA,MAAM,mCAAmC,GAAuD,IAAI,OAAO,EAAE;AAEvG,SAAU,sCAAsC,CAAC,OAA8B,EAAA;IACnF,OAAO,mCAAmC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;AAC/D;AAEM,SAAU,sCAAsC,CAAC,OAA8B,EAAE,KAAyB,EAAA;AAC9G,IAAA,mCAAmC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AACzD;;ACPA,MAAMJ,QAAM,GAAkE,IAAI,OAAO,EAAE;AAErF,SAAU,mBAAmB,CAAC,YAA2B,EAAE,QAAmB,EAAA;AAClF,IAAA,IAAIA,QAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;QAC5B,MAAM,OAAO,GAAGA,QAAM,CAAC,GAAG,CAAC,YAAY,CAAE;AACzC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACzB,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;QAC/B;IACF;SAAO;QACLA,QAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,OAAO,EAAE,CAAC;IACzC;AACA,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACpF,IAAAA,QAAM,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AACzD,IAAA,OAAO,gBAAgB;AACzB;AAEA,MAAM,gBAAgB,CAAA;AACX,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,YAAY;AACZ,IAAA,sBAAsB;IAC/B,WAAA,CAAY,YAA2B,EAAE,QAAmB,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE;AACpC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QACpC;aAAO;YACL,IAAI,CAAC,sBAAsB,GAAG,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC;QAC1F;IACF;AACD;;AC9BD,MAAMA,QAAM,GAA2E,IAAI,OAAO,EAAE;AACpG,MAAM,mBAAmB,GAAsD,IAAI,OAAO,EAAE;AAE5F,MAAM,oBAAoB,CAAA;AACf,IAAA,gBAAgB;AAChB,IAAA,SAAS;AACV,IAAA,sBAAsB;IAE9B,WAAA,CAAY,gBAAmC,EAAE,SAA4B,EAAA;AAC3E,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,IAAI,OAAO,IAAI,CAAC,sBAAsB,KAAK,WAAW,EAAE;YACtD,OAAO,IAAI,CAAC,sBAAsB;QACpC;AACA,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB;AAC3E,QAAA,IAAI,sBAAsB,KAAK,IAAI,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/G,IAAI,eAAe,GAAsB,IAAI;AAC7C,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,IAAI,IAAI;QAC3D;aAAO;AACL,YAAA,eAAe,GAAG,IAAI,CAAC,SAAS;QAClC;QACA,OAAO,IAAI,CAAC,sBAAsB,GAAG,0BAA0B,CAC7D,sBAAsB,EACtB,eAAe,CAChB;IACH;AACD;AAEK,SAAU,0BAA0B,CAAC,gBAAmC,EAAE,SAA4B,EAAA;AAC1G,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB,IAAI,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,MAAM;QACf;QACA,MAAM,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,IAAI,CAAC;AACzD,QAAA,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACjD,QAAA,OAAO,MAAM;IACf;SAAO;QACL,IAAI,uBAAuB,GAAGA,QAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AACnD,QAAA,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE;AAClD,YAAA,uBAAuB,GAAG,IAAI,OAAO,EAA4C;AACjF,YAAAA,QAAM,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,CAAC;QAChD;QACA,IAAI,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC1D,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,MAAM;QACf;QACA,MAAM,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,CAAC;AAC9D,QAAA,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACrD,QAAA,OAAO,MAAM;IACf;AACF;;AC7DA,MAAM,kBAAkB,GAAoC,IAAI,OAAO,EAAE;AAEnE,SAAU,qBAAqB,CAAC,QAA0B,EAAE,QAAqB,EAAA;AACrF,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;IACrC;SAAO;AACL,QAAA,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5C;AACF;AAEM,SAAU,qBAAqB,CAAC,QAA0B,EAAA;IAC9D,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI;AACjD;;ACXA,MAAM,oBAAoB,GAAwB,IAAI,GAAG,EAAE;AAErD,SAAU,eAAe,CAAC,QAAmB,EAAE,cAAyB,EAAA;AAC5E,IAAA,IAAI,KAAgB;AACpB,IAAA,IAAI,KAAgB;AACpB,IAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,cAAc,CAAC,aAAa,KAAK,CAAC,EAAE;AACtE,QAAA,OAAO,CAAC;IACV;AACA,IAAA,IAAI,QAAQ,CAAC,aAAa,KAAK;WAC1B,cAAc,CAAC,aAAa,GAAG;WAC/B,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACtD,QAAA,OAAO,CAAC;IACV;IACA,IAAI,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE;QACnC,KAAK,GAAG,QAAQ;QAChB,KAAK,GAAG,cAAc;IACxB;SAAO;QACL,KAAK,GAAG,cAAc;QACtB,KAAK,GAAG,QAAQ;IAClB;IACA,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAA,CAAE;IAC1C,IAAI,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;AACvC,IAAA,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;AAC9B,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC;AAC3E,IAAA,GAAG,GAAG,SAAS,CAAC,IAAI;AACpB,IAAA,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AAClC,IAAA,OAAO,GAAG;AACZ;;AC1BA,MAAM,mCAAmC,GAAoE,IAAI,OAAO,EAAE;AAEpH,SAAU,yBAAyB,CAAC,WAAyB,EAAA;IACjE,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1D,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI;IACb;IACA,IAAI,sBAAsB,GAAG,mCAAmC,CAAC,GAAG,CAAC,WAAW,CAAC;AACjF,IAAA,IAAI,OAAO,sBAAsB,KAAK,WAAW,EAAE;AACjD,QAAA,sBAAsB,GAAG,IAAI,OAAO,EAAmC;AACvE,QAAA,mCAAmC,CAAC,GAAG,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAC9E;SAAO;QACL,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC;AACzD,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;AACpC,YAAA,OAAO,SAAS;QAClB;IACF;IAEA,IAAI,SAAS,GAAsB,IAAI;AACvC,IAAA,IAAI;AACF,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC;AACpF,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;QACvD;AACA,QAAA,OAAO,SAAS;IAClB;YAAU;AACR,QAAA,sBAAsB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;IACpD;AAEF;;ACzBA,MAAM,6BAA6B,GAAiD,IAAI,OAAO,EAAE;AAE3F,SAAU,gCAAgC,CAAC,OAAqB,EAAA;;IAEpE,IAAI,oBAAoB,GAAiC,IAAI;IAC7D,oBAAoB,GAAG,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AACzE,IAAA,IAAI,oBAAoB,KAAK,IAAI,EAAE;AACjC,QAAA,OAAO,oBAAoB;IAC7B;IAEA,IAAI,QAAQ,GAAgB,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;;IAErE,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,KAAK,KAAK,EAAE;;AAE7C,QAAA,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,QAA4B,CAAC;AAC9E,QAAA,IAAI,kBAAkB,KAAK,IAAI,EAAE;AAC/B,YAAA,UAAU,CAAC,CAAA,4DAAA,EAA+D,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,CAAA,IAAA,EAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC;QACvJ;aAAO;YACL,QAAQ,GAAG,kBAAkB;QAC/B;IACF;AAEA,IAAA,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC;IACpD,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;AACvE,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;IACrF;IACA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC;IACjF,oBAAoB;AAClB,QAAA,0BAA0B,CAAC,gBAAgB,EAAE,SAAS,CAAC;AACzD,IAAA,6BAA6B,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC;AAChE,IAAA,OAAO,oBAAoB;AAC7B;AAEM,SAAU,kCAAkC,CAAC,OAAqB,EAAA;AACtE,IAAA,6BAA6B,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/C;;AC3CA,MAAM,oCAAoC,GAAG,IAAI,OAAO,EAA4C;AAE9F,SAAU,0BAA0B,CAAC,YAAqB,EAAE,YAA2B,EAAA;IAC3F,IAAI,sBAAsB,GAAG,oCAAoC,CAAC,GAAG,CAAC,YAAY,CAAC;IACnF,IAAI,CAAC,sBAAsB,EAAE;AAC3B,QAAA,sBAAsB,GAAG,IAAI,OAAO,EAA0B;AAC9D,QAAA,oCAAoC,CAAC,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAChF;AACA,IAAA,sBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC;AAChD;AAEM,SAAU,sBAAsB,CAAC,YAAqB,EAAE,YAA2B,EAAA;IACvF,MAAM,sBAAsB,GAAG,oCAAoC,CAAC,GAAG,CAAC,YAAY,CAAC;IACrF,IAAI,CAAC,sBAAsB,EAAE;AAC3B,QAAA,OAAO,KAAK;IACd;IACA,OAAO,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI;AAC1D;;SChBgB,sBAAsB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AACtG,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;AAC/C,QAAA,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAkB,CAAC;IACpD;AACF;;SCRgB,gBAAgB,GAAA;AAC9B,IAAA,OAAO,MAAM,CAAC,MAAM,CAAW,EAAE,CAAC;AACpC;;ACDM,SAAU,gBAAgB,CAAC,KAAU,EAAE,OAAsB,EAAA;IACjE,IAAI,aAAa,GAAG,KAAK;AACzB,IAAA,KAAI,MAAM,MAAM,IAAI,OAAO,EAAE;AAC3B,QAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;IAChD;AACA,IAAA,OAAO,aAAa;AACtB;;ACHA,MAAM,WAAW,GAAG,gBAAgB,EAAW;SAE/B,qBAAqB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AACrG,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAwB;AAChD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;IAClC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC;AAC9E,IAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,WAAW;IAC3E,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AACrE;;SCTgB,kBAAkB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AAClG,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,IAAA,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE;AACjC,QAAA,UAAU,CAAC,CAAA,2DAAA,EAA8D,OAAO,QAAQ,CAAA,CAAE,CAAC;IAC7F;IACA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAmB,CAAC;AAC1D;;ACXA;;;;;;;;;;;;;;;;;;;AAmBG;AAgBH,MAAM,kBAAkB,GAAgD,IAAI,OAAO,EAAE;AAErF,SAAS,aAAa,CAAC,OAAgB,EAAA;AACrC,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC/C,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IACA,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAA6C;AACjG,IAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;AACtC,QAAA,UAAU,CAAC,CAAA,gBAAA,EAAmB,aAAa,CAAA,qCAAA,CAAuC,CAAC;IACrF;AACA,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU;AACvC,IAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;AACnE,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,OAAO,IAAI;AACb;SAEgB,oBAAoB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AACpG,IAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;QAC7B,UAAU,CAAC,CAAA,gHAAA,CAAkH,CAAC;IAChI;IACA,MAAM,KAAK,GAAG,QAAyB;IAEvC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;IAChD,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE;QACxC;IACF;;AAGA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7D,UAAU,CAAC,CAAA,+DAAA,CAAiE,CAAC;IAC/E;AAEA,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;AACvC,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;QACrB,UAAU,CAAC,CAAA,wDAAA,EAA2D,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,qBAAA,CAAuB,CAAC;IAC7H;AACA,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;AAC9F,QAAA,UAAU,CAAC,CAAA,SAAA,EAAY,UAAU,CAAA,6CAAA,EAAgD,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;IACrH;;IAGA,IAAI,QAAQ,EAAE;QACZ,QAAQ,CAAC,WAAW,EAAE;AACtB,QAAA,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;IACpC;AAEA,IAAA,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IACvC,IAAI,WAAW,GAAwB,IAAI;AAC3C,IAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAe,KAAa;AACjD,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE;QAC7B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAC1B,WAAW,IAAI;AACf,YAAA,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,MAAM,GAAI,EAAyC,CAAC,UAAU,CAAC;AACrE,QAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,YAAA,UAAU,CAAC,CAAA,QAAA,EAAW,UAAU,CAAA,wBAAA,EAA2B,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;QAC1F;QACA,OAAO,OAAO,CAAC,KAAK,CAAC,MAAsC,EAAE,EAAE,EAAE,IAAI,CAAC;AACxE,IAAA,CAAC;AACD,IAAA,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;AACzC,IAAA,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrE;;ACnGA,MAAM,sBAAsB,GAAsC,IAAI,OAAO,EAAE;AAEzE,SAAU,yBAAyB,CAAC,OAAiB,EAAA;IACzD,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;AAClD;AAEM,SAAU,yBAAyB,CAAC,OAAiB,EAAE,QAAwB,EAAA;AACnF,IAAA,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/C;;ACDA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE;AAC7B,IAAA,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,UAA2B,KAAa,EAAA;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACrB;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;AAEA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;AAC/B,IAAA,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,UAA2B,KAAa,EAAA;AACnE,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK;AAC3B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClB,gBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAClB;QACF;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;AACH;;AC7BA,IAAI,KAAK,GAAG,CAAC;SACG,OAAO,GAAA;IACrB,OAAO,CAAA,CAAA,EAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAE;AACrC;;ACDA,IAAI,OAAO,GAAG,CAAC;AAEf,MAAM,SAAS,CAAA;IACJ,IAAI,GAAG,OAAO,EAAE;AAChB,IAAA,eAAe;AACf,IAAA,QAAQ;AACR,IAAA,MAAM;AAEP,IAAA,MAAM;AACN,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,YAAY;AAEpB;;;;;AAKG;IACH,WAAA,CAAY,eAAkC,EAAE,KAAa,EAAA;AAC3D,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,eAAe,GAAG,eAAe,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAEA;;;;AAIG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;;AAIG;IACH,IAAI,KAAK,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,OAAO;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK;IACrC;AAEA;;;;AAIG;AACH,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA;;;;AAIG;AACH,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ;QACnF;IACF;AAEA;;;;;AAKG;AACH,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACjC,YAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B;QACF;aAAO;YACL,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE;AACtD,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC9D,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;YACzB;QACF;QACA,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA;;;;AAIG;AACH,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACjC,YAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;gBAC5C,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC;QACF;aAAO;AACL,YAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;AAC5C,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9E;QACF;QACA,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;;;AAIG;AACH,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;IAChC;AAEA;;;;;;AAMG;AACH,IAAA,EAAE,CAAC,GAAW,EAAA;AACZ,QAAA,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI;QAC/C;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI;QACzE;IACF;AACD;AAED;;;;;;AAMG;AACG,SAAU,eAAe,CAAC,eAAkC,EAAE,KAAa,EAAA;AAC/E,IAAA,OAAO,IAAI,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC;AAC9C;;AC9IA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAoC;AAEnE,SAAU,oBAAoB,CAAC,IAAwB,EAAA;IAC3D,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AAC5C;AAEM,SAAU,oBAAoB,CAAC,IAAwB,EAAE,WAAgC,EAAA;AAC7F,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,QAAA,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B;IACF;AACA,IAAA,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AAC1C;;ACTA,MAAM,0BAA0B,GAAG,IAAI,OAAO,EAA8D;AAE5G,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACpC,MAAMS,WAAS,GAAG,IAAI,GAAG,EAAc;AAEvC,SAAS,WAAW,CAAC,UAA8B,EAAE,UAA8B,EAAA;IACjF,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU;IAC9F,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU;IAC9F,IAAI,aAAa,GAAG,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AAC3C;AAEA,SAAS,WAAW,CAAC,OAA2B,EAAE,OAA2B,EAAE,IAAe,EAAA;IAC5F,IAAI,aAAa,GAAG,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,aAAa,GAAG,IAAI,OAAO,EAAiC;AAC5D,QAAA,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;IACxD;AACA,IAAA,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAClC;AACA;;;;;AAKG;AACH,SAAS,UAAU,CAAC,OAA2B,EAAE,OAA2B,EAAA;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;;;;AAQG;SACa,cAAc,CAC5B,eAAkC,EAClC,UAAmB,EACnB,UAAmB,EAAA;;IAGnB,MAAM,OAAO,GAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU;IAClH,MAAM,OAAO,GAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU;IAClH,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;IAChD,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,UAAU;IACnB;IACA,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE;AACtD,IAAA,IAAI,QAA+B;AACnC,IAAA,IAAI;;AAEF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,QAAQ,GAAG;AAChB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,EAAkB;AAC9B,gBAAA,cAAc,EAAEA,WAAS;AACzB,gBAAA,cAAc,EAAE,IAAI,GAAG,CAAa,UAAU,CAAC;AAC/C,gBAAA,WAAW,EAAEA,WAAS;aACvB;QACH;;AAEA,QAAA,IAAI,UAAU,GAAwB,oBAAoB,CAAC,OAAO,CAAC;AACnE,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;gBACvB,UAAU,GAAG,EAAE;AACf,gBAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;AACxD,oBAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC/B;YACF;AACA,YAAA,OAAO,QAAQ,GAAG;AAChB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,cAAc,EAAEA,WAAS;AACzB,gBAAA,cAAc,EAAEA,WAAS;AACzB,gBAAA,WAAW,EAAE,IAAI,GAAG,CAAa,UAAU,CAAC;aAC7C;QACH;;AAEA,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AAChC,YAAA,OAAO,QAAQ,GAAG;AAChB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,cAAc,EAAEA,WAAS;AACzB,gBAAA,cAAc,EAAEA,WAAS;AACzB,gBAAA,WAAW,EAAEA,WAAS;aACvB;QACH;;;AAGA,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB;AACjD,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,EAAE;AACZ,gBAAA,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;YAChC;AACA,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;AACA,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,YAAA,OAAO,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;QAChF;QACA,UAAU,GAAG,EAAE;;AAGf,QAAA,MAAM,cAAc,GAAoB,IAAI,GAAG,EAAE;AACjD,QAAA,MAAM,WAAW,GAAoB,IAAI,GAAG,EAAE;AAC9C,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,SAAS;AAEpG,YAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;;gBAEnC,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC;AACxD,gBAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAC7B,gBAAA,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAC/B;iBAAO;;AAEL,gBAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC;;AAE9C,gBAAA,IAAI,iBAAiB,CAAC,KAAK,KAAK,CAAC,EAAE;AACjC,oBAAA,iBAAiB,CAAC,KAAK,GAAG,CAAC;AAC3B,oBAAA,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBACvC;AACA,gBAAA,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACpC;QACF;AAEA,QAAA,MAAM,cAAc,GAAoB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7F,QAAA,OAAO,QAAQ,GAAG;AAChB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,WAAW,EAAE,WAAW;SACzB;IACH;YAAU;AACR,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;AACvC,YAAA,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;QACpD;IACF;AACF;AAEA,SAAS,eAAe,CACtB,OAA2B,EAC3B,OAA2B,EAC3B,UAAwB,EACxB,UAAwB,EACxB,YAAoC,EAAA;AAEpC,IAAA,MAAM,WAAW,GAAoB,IAAI,GAAG,CAAC,UAAU,CAAC;AACxD,IAAA,MAAM,WAAW,GAAoB,IAAI,GAAG,CAAC,UAAU,CAAC;AACxD,IAAA,MAAM,cAAc,GAAoB,IAAI,GAAG,EAAE;IACjD,MAAM,WAAW,GAAoB,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;IACxE,MAAM,cAAc,GAAoB,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;AAC3E,IAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;QAC3B,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClD,MAAM,QAAQ,GAAG,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,SAAS;AACpG,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,CAAC;AAC9C,YAAA,IAAI,iBAAiB,CAAC,KAAK,KAAK,CAAC,EAAE;;AAEjC,gBAAA,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACvC;QACF;IACF;IACA,OAAO;AACL,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,cAAc,EAAE,cAAc;AAC9B,QAAA,cAAc,EAAE,cAAc;AAC9B,QAAA,WAAW,EAAE,WAAW;KACzB;AACH;;ACpMA,MAAM,gCAAgC,GAAsD,IAAI,OAAO,EAAE;AAEnG,SAAU,mCAAmC,CAAC,oBAA2C,EAAA;IAC7F,IAAI,UAAU,GAA6B,IAAI;IAC/C,UAAU,GAAG,gCAAgC,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI;AAC/E,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,QAAA,UAAU,GAAG,IAAI,GAAG,EAAE;AACtB,QAAA,gCAAgC,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC;IACxE;AACA,IAAA,OAAO,UAAU;AACnB;AAEM,SAAU,gCAAgC,CAAC,oBAA2C,EAAE,OAAqB,EAAA;AACjH,IAAA,MAAM,UAAU,GAAG,mCAAmC,CAAC,oBAAoB,CAAC;AAC5E,IAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB;AAMM,SAAU,mCAAmC,CAAC,oBAA2C,EAAE,OAAqB,EAAA;AACpH,IAAA,MAAM,UAAU,GAAG,mCAAmC,CAAC,oBAAoB,CAAC;AAC5E,IAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B;;ACrBA,MAAM,yBAAyB,GAAyC,IAAI,OAAO,EAAE;AAE/E,SAAU,4BAA4B,CAAC,WAAyB,EAAA;IACpE,IAAI,YAAY,GAAyB,IAAI;IAC7C,YAAY,GAAG,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI;AACjE,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,OAAO,YAAY;IACrB;IACA,IAAI,WAAW,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,EAAE;AAC/C,QAAA,MAAM,SAAS,GAAG,yBAAyB,CAAC,WAAW,CAAC;AACxD,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,YAAA,UAAU,CAAC,CAAA,sEAAA,EAAyE,WAAW,CAAC,aAAa,CAAA,6BAAA,CAA+B,CAAC;QAC/I;QACA,YAAY,GAAG,kBAAkB,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;IACzE;SAAO;QACL,YAAY,GAAG,kBAAkB,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC;IACpE;AACA,IAAA,yBAAyB,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;AACxD,IAAA,OAAO,YAAY;AACrB;AAEA;AACM,SAAU,8BAA8B,CAAC,WAAyB,EAAA;AACtE,IAAA,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/C;;AC3BA,MAAM,iBAAiB,GAAsC,IAAI,OAAO,EAAE;AAEpE,SAAU,oBAAoB,CAAC,OAAiB,EAAA;IACpD,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;AAC7C;AAEM,SAAU,oBAAoB,CAAC,OAAiB,EAAE,QAAwB,EAAA;AAC9E,IAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC1C;;ACTA,MAAM,cAAc,GAA8B,IAAI,OAAO,EAAE;AAEzD,SAAU,iBAAiB,CAAC,OAAiB,EAAA;IACjD,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;AAC1C;AAEM,SAAU,iBAAiB,CAAC,OAAiB,EAAE,KAAa,EAAA;AAChE,IAAA,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AACpC;;ACLM,SAAU,wBAAwB,CAAC,OAAiB,EAAE,WAAgC,EAAA;AAC1F,IAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACxC,IAAA,KAAI,MAAM,IAAI,IAAI,KAAK,EAAE;AACvB,QAAA,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;IACzC;AACF;AAEM,SAAU,0BAA0B,CAAC,OAAiB,EAAA;AAC1D,IAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACxC,IAAA,KAAI,MAAM,IAAI,IAAI,KAAK,EAAE;AACvB,QAAA,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;IAClC;AACF;;SCPgB,eAAe,CAC7B,OAAiB,EACjB,WAAgC,EAChC,OAAsB,EAAA;AAEtB,IAAA,wBAAwB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC9C,IAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC;AAC9C,IAAA,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,QAAA,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACtE,QAAA,gCAAgC,CAAC,oBAAoB,EAAE,OAAO,CAAC;AAC/D,QAAA,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;IAC/B;AACF;AAEM,SAAU,iBAAiB,CAC/B,OAAiB,EAAA;AAEjB,IAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACpB;IACF;AACA,IAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC;AAC9C,IAAA,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC7B,QAAA,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACtE,QAAA,mCAAmC,CAAC,oBAAoB,EAAE,OAAO,CAAC;QAClE,kCAAkC,CAAC,OAAO,CAAC;QAC3C,8BAA8B,CAAC,OAAO,CAAC;IACzC;IACA,0BAA0B,CAAC,OAAO,CAAC;AACrC;;SCrCgB,cAAc,GAAA;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAK,CAAC;AACpC;;ACAA,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAuB;AAE3D,MAAM,SAAS,GAAG,cAAc,EAAY;AAEtC,SAAU,gBAAgB,CAAC,IAAU,EAAE,OAAiB,EAAA;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3C,IAAI,QAAQ,EAAE;AACZ,QAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACvB;SAAO;AACL,QAAA,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD;AACF;AAEM,SAAU,mBAAmB,CAAC,IAAU,EAAA;IAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3C,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,OAAO,SAAS;AAClB;;ACTA,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtE,MAAM,OAAO,CAAA;AACH,IAAA,QAAQ;IACR,eAAe,GAAW,EAAE;IAC5B,UAAU,GAAgB,IAAI;IAC9B,SAAS,GAAgB,IAAI;IAC7B,QAAQ,GAAY,KAAK;AACjC,IAAA,WAAA,CAAY,OAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;AAClF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;IACjH;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,QAAQ,CAAC,UAAgB,EAAA;AACvB,QAAA,KAAI,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AAEA,IAAA,UAAU,CAAC,UAAgB,EAAA;AACzB,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU;AACxC,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;QAC1C,IAAI,UAAU,EAAE;AACd,YAAA,KAAI,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;YAC5C;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,OAAO,GAAA;AACL,QAAA,KAAI,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;YACnC;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC;AAC3C,QAAA,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC7B,IAAI,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAClD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;oBAC9B,OAAO,CAAC,OAAO,EAAE;gBACnB;YACF;YACA,8BAA8B,CAAC,OAAO,CAAC;YACvC,kCAAkC,CAAC,OAAO,CAAC;QAC7C;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AACD;AAED;;;AAGG;AACG,SAAU,sBAAsB,CACpC,KAAa,EAAA;AAEb,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE;;AAElD,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;;AAEpC,IAAA,OAAe,CAAC,eAAe,GAAG,KAAK;AACvC,IAAA,OAAe,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAC/D,OAAe,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAC7E,IAAA,OAAe,CAAC,QAAQ,GAAG,IAAI,CAAC;AACjC,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,aAAa,CAC3B,WAAyB,EAAA;AAEzB,IAAA,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE;QACxE,UAAU,CAAC,CAAA,yBAAA,CAA2B,CAAC;IACzC;IACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,UAAU,CAAC,CAAA,oBAAA,EAAuB,WAAW,CAAC,IAAI,CAAA,YAAA,CAAc,CAAC;IACnE;AACA,IAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtE,MAAM,WAAW,GAAG,4BAA4B,CAAC,aAAa,EAAE,YAAY,CAAC,SAAS,CAAC;AACvF,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;AAC1C,IAAA,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC;IACvD,MAAM,aAAa,GAAmB,EAAE;AACxC,IAAA,KAAI,MAAM,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE;AAC7C,QAAA,IAAI,OAAO,CAAC,aAAa,IAAI,mBAAmB,EAAE;AAChD,YAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B;IACF;AACA,IAAA,yBAAyB,CAAC,OAAO,EAAE,aAAa,CAAC;AACjD,IAAA,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;AAC7C,IAAA,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3C,IAAA,OAAO,OAAO;AAChB;;ACtGA,MAAM,cAAc,GAAwB,IAAI,OAAO,EAAE;AACzD,MAAM,wBAAwB,GAAiD,IAAI,OAAO,EAAE;AAC5F,MAAM,oBAAoB,GAA8B,IAAI,OAAO,EAAE;AACrE,MAAM,+BAA+B,GAA2B,IAAI,OAAO,EAAE;AAW7E;SACgB,iBAAiB,CAAC,IAAU,EAAE,KAAiB,EAAE,OAAiB,EAAA;AAChF,IAAA,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;AAClC;AAEM,SAAU,kBAAkB,CAAC,IAAU,EAAE,QAAc,EAAA;AAC3D,IAAA,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC;AAMA,SAAS,iBAAiB,CAAC,WAAyB,EAAA;IAClD,OAAO,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;AACzD;AAEA,SAAS,gBAAgB,CAAC,WAAyB,EAAE,OAAiB,EAAA;IACpE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AAC3D,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACnC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;IACvD;SAAO;AACL,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IACxB;AACF;AAEA,SAAS,yBAAyB,CAAC,SAAe,EAAE,QAAc,EAAA;AAChE,IAAA,IAAI,aAAa,GAAG,SAAS,CAAC,eAAe;AAC7C,IAAA,IAAI,aAAa,GAAG,QAAQ,CAAC,WAAW;IACxC,IAAI,QAAQ,GAAG,IAAI;AACnB,IAAA,OAAM,aAAa,KAAK,IAAI,EAAE;AAC5B,QAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC;gBAC9B,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;YACpG,QAAQ,GAAG,KAAK;YAChB;QACF;AACA,QAAA,aAAa,GAAG,aAAa,CAAC,eAAe;IAC/C;AACA,IAAA,OAAM,aAAa,KAAK,IAAI,EAAE;AAC5B,QAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC;gBAC9B,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;YACpG,QAAQ,GAAG,KAAK;YAChB;QACF;AACA,QAAA,aAAa,GAAG,aAAa,CAAC,WAAW;IAC3C;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,UAAU,CAAC,IAAU,EAAE,SAAqB,EAAA;IACnD,IAAI,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3D,IAAA,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;AAC7C,QAAA,OAAO,IAAI;IACb;IACA,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACjD,IAAA,OAAO,OAAO,OAAO,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO;AACxD;AAEA,SAAS,UAAU,CAAC,IAAU,EAAE,SAAqB,EAAE,OAAwB,EAAA;IAC7E,IAAI,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3D,IAAA,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;AAC7C,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB;QACF;AACA,QAAA,kBAAkB,GAAG,IAAI,OAAO,EAAwB;AACxD,QAAA,wBAAwB,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC;IACxD;AACA,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;IACtC;SAAO;AACL,QAAA,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5C;AACF;SAEgB,gBAAgB,CAC9B,WAAyB,EACzB,OAAsB,EACtB,QAAiB,EAAA;AAEjB,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa;AAC9C,IAAA,MAAM,SAAS,GAAG,yBAAyB,CAAC,WAAW,CAAC;AACxD,IAAA,MAAM,UAAU,GAAG,gCAAgC,CAAC,WAAW,CAAC;AAChE,IAAA,MAAM,SAAS,GAAI,sCAAsC,CAAC,UAAU,CAAC;IACrE,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC3D,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;AAEzF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS;AACtB,WAAA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC;AACzC,WAAA,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG;AAC3B,WAAA,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,EACvC;QACA,IAAI,UAAU,GAAG,+BAA+B,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACtE,QAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI;YACzE,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;YAClE,+BAA+B,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC;QACnE;QACA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU;AAC9C,YAAA,UAAU,CAAC,WAAW,GAAG,EAAE;AAC3B,YAAA,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;QAC1C;IACF;AACA,IAAA,KAAI,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC;AACzD,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,iBAAiB,CAAC,OAAO,CAAC;YAC1B,OAAO,CAAC,OAAO,EAAE;AACjB,YAAA,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;YACtC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC;QACjD;IACF;AAEA,IAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,IAAI;AAC/B,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC;AACvE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB;IAC9D,IAAI,QAAQ,GAA4B,IAAI;IAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;AAC1C,WAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG;WACzB,QAAQ,CAAC,WAAW,EACvB;;AAEA,QAAA,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE;AAC5C,QAAA,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;IACnD;AACA,IAAA,MAAM,OAAO,GAAG,KAAK,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE;AACnC,IAAA,KAAI,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;AAClC,QAAA,IAAI,OAA6B;;QAEjC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,EAAE,KAAK,CAAC;YAC/D,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,WAAW,KAAI;AAC/D,gBAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC;AACrD,gBAAA,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE;AAC9B,gBAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,oBAAA,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC;gBACtC;;AAEA,gBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;oBACrB,IAAI,OAAO,EAAE;wBACX,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC,CAAC;oBAC7G;AACA,oBAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC1B,IAAI,OAAO,EAAE;wBACX,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC,CAAC;oBAC3G;gBACF;qBAAO;;;oBAGL,IAAI,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,SAAS,EAAE;wBAC9C,IAAI,OAAO,EAAE;AACX,4BAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,mBAAmB,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;4BAC1G,QAAQ,CAAC,UAAW,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC;4BACrE,QAAQ,GAAG,YAAY;wBACzB;AACA,wBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC9B;oBACA,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;AACtG,wBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ;wBAC9C,SAAS,CAAC,UAAW,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC;oBACvE;gBACF;;AAEA,gBAAA,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;AAChD,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;gBAClC,UAAU,CAAC,CAAA,iCAAA,EAAoC,KAAK,CAAC,KAAK,CAAA,UAAA,EAAa,YAAY,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;YAC9F;QACF;aAAO;YACL,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAE;YAC9C,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;AAElC,gBAAA,MAAM,aAAa,GAAG,yBAAyB,CAAC,OAAO,CAAC;AACxD,gBAAA,KAAI,MAAM,YAAY,IAAI,aAAa,EAAE;AACvC,oBAAA,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC;gBACpC;YACF;;;AAGA,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;gBACpB,UAAU,CAAC,CAAA,iCAAA,EAAoC,KAAK,CAAC,KAAK,CAAA,UAAA,EAAa,YAAY,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;YAC9F;YACA,IAAI,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,SAAS,EAAE;AAC9C,gBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC9B;QACF;AACA,QAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ;QACvC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IAC9C;IACA,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC9C,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;;AAErB,QAAA,WAAW,CAAC,IAAI,CAAC,UAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACjF,QAAA,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC;IACvC;AACF;;AC7NA,MAAM,mBAAmB,GAA2B,IAAI,OAAO,EAAE;AAEjE,SAAS,eAAe,CAAC,WAAyB,EAAA;AAChD,IAAA,OAAO,GAAG,WAAW,CAAC,WAAW,CAAA,CAAA,EAAI,WAAW,CAAC,aAAa,CAAA,CAAA,EAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,IAAI,CAAC,WAAW,GAAG,aAAa,GAAG,gBAAgB,EAAE;AAChM;SAEgB,eAAe,CAC7B,WAAyB,EACzB,OAAsB,EACtB,WAAoB,EAAA;AAEpB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW;AACrD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;AACrC,IAAA,IAAI,OAA6B;IACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC;AACtD,IAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC;IACtC;SAAO;QACL,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM;IAC3C;AACA,IAAA,MAAM,OAAO,GAAG,KAAK,EAAE;AACvB,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE;AACnC,IAAA,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC;AACxC,IAAA,IAAI;QACF,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,eAAe,CAAC,WAAW,CAAC,CAAA,CAAE,CAAC;YACrE;YACA,iBAAiB,CAAC,OAAO,CAAC;YAC1B,OAAO,CAAC,OAAO,EAAE;QACnB;QACA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,CAAA,mBAAA,EAAsB,eAAe,CAAC,WAAW,CAAC,CAAA,CAAE,CAAC;YACnE;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,OAAA,EAAU,IAAI,IAAI,WAAW,CAAC,aAAa,CAAA,CAAE,CAAC;AAC1G,gBAAA,WAAW,CAAC,IAAI,CAAC,UAAW,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACrF,gBAAA,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;AAChC,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,KAAA,EAAQ,IAAI,IAAI,WAAW,CAAC,aAAa,CAAA,CAAE,CAAC;AACtG,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY;gBAClD,SAAS,CAAC,UAAW,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC;YACvE;iBAAO;AACL,gBAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;YACtC;YACA,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC;AAC1D,YAAA,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;QAChD;IACF;YAAU;QACR,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAC7D;AACF;;ACzDA;;;;;;;;AAQG;AACG,SAAU,uBAAuB,CAAC,OAAgB,EAAE,QAAgB,EAAA;AACxE,IAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC/C,IAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IACA,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAA6C;AACjG,IAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;AACtC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU;AACvC,IAAA,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,IAAI,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE;AACnE,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;AACA,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAChG,OAAO,KAAK,CAAC,SAAS;QACxB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;SACa,oBAAoB,CAAC,OAAgB,EAAE,aAAqB,EAAE,KAAc,EAAA;IAC1F,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAClD,QAAA,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;QACtC;IACF;AACA,IAAA,IAAI,SAAiB;AACrB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,IAAI;AACF,YAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC;AAAE,QAAA,MAAM;AACN,YAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B;IACF;SAAO;AACL,QAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B;AACA,IAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC;AAChD;;AC3DA;;;AAGG;AAOH;AACA,MAAM,KAAK,GAAuC,IAAI,OAAO,EAAE;SAE/C,cAAc,CAAC,IAAU,EAAE,QAAgB,EAAE,KAAc,EAAA;IACzE,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,EAAE;AACZ,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IAC1B;;AAEA,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC3D,IAAI,QAAQ,EAAE;AACZ,QAAA,QAAQ,CAAC,KAAK,GAAG,KAAK;IACxB;SAAO;QACL,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC;AACF;AAEM,SAAU,gBAAgB,CAAC,IAAU,EAAA;IACzC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9B;SAEgB,sBAAsB,GAAA;;AAEpC,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;AACjC;AAEA,MAAM,YAAY,GAAc,IAAI,GAAG,EAAE;AAEnC,SAAU,oBAAoB,CAAC,IAAU,EAAA;AAC7C,IAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB;SAEgB,qBAAqB,GAAA;IACnC,YAAY,CAAC,KAAK,EAAE;AACtB;;ACvCA;AACA;AACA,MAAM,cAAc,GAA+D;IACjF,KAAK,CAAC,OAAO,EAAE,KAAK,EAAA;AAClB,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;YAClC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C;aAAO;AACL,YAAA,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpD;IACF,CAAC;IACD,OAAO,CAAC,OAAO,EAAE,KAAK,EAAA;AACpB,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;;AACzC,YAAA,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC;IACzC,CAAC;IACD,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAA;AACrB,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;;AAC1C,YAAA,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC;IAC1C,CAAC;IACD,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAA;AACrB,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;;AAC1C,YAAA,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC;IAC1C,CAAC;IACD,aAAa,CAAC,OAAO,EAAE,KAAK,EAAA;QAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAClD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;;gBACjD,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC;QAC7C;IACF,CAAC;CACF;SAEe,qBAAqB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;;;;;;AAMrG,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,iDAAA,CAAmD,EAAE;gBACjE,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,aAAa,EAAE,OAAO,CAAC,aAAa;AACrC,aAAA,CAAC;QACJ;QACA;IACF;AACA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;AACvC,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;AACpC,QAAA,IAAK,OAAe,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE;YAC/C,IAAI,sBAAsB,GAAG,KAAK;AAClC,YAAA,IAAI;AACD,gBAAA,OAAe,CAAC,YAAY,CAAC,GAAG,QAAQ;gBACzC,sBAAsB,GAAG,IAAI;YAC/B;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,wBAAA,EAA2B,YAAY,eAAe,EAAE;wBACnE,OAAO;wBACP,QAAQ;wBACR;AACD,qBAAA,CAAC;gBACJ;YACF;;;;;YAKA,IAAI,sBAAsB,EAAE;gBAC1B,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC;AACjE,gBAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,oBAAA,IAAI;AACF,wBAAA,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;oBACrD;oBAAE,OAAO,KAAK,EAAE;AACd,wBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,4BAAA,OAAO,CAAC,IAAI,CAAC,CAAA,4BAAA,EAA+B,UAAU,eAAe,EAAE;gCACrE,OAAO;gCACP,QAAQ;gCACR;AACD,6BAAA,CAAC;wBACJ;oBACF;gBACF;YACF;QACF;QACA,IAAI,KAAK,EAAE,EAAE;AACX,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC;YAChD,IAAI,WAAW,EAAE;;AAEf,gBAAA,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;YAChC;iBAAO;;AAEL,gBAAA,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC;gBAC/C,oBAAoB,CAAC,OAAO,CAAC;YAC/B;QACF;QACA;IACF;AACA,IAAA,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;AACpC,IAAA,IAAI,SAAS,GAAI,OAAe,CAAC,YAAY,CAAC;AAC9C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB;QACF;AACA,QAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;IAChC;AACA,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC9B,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,4CAAA,CAA8C,EAAE;oBAC3D,OAAO;oBACP,YAAY;oBACZ,QAAQ;oBACR;AACD,iBAAA,CAAC;YACJ;YACA;QACF;AACA,QAAA,IAAI;AACF,YAAA,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ;QAC7D;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,qCAAA,CAAuC,EAAE;oBACpD,OAAO;oBACP,YAAY;oBACZ,QAAQ;oBACR,QAAQ;oBACR;AACD,iBAAA,CAAC;YACJ;QACF;IACF;;AAEF;;SC3IgB,kBAAkB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AAClG,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAwB;AAChD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;IAClC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC;AAC9E,IAAA,OAAO,CAAC,OAAO,GAAG,QAAQ,KAAK,oBAAoB;AACrD;;SCNgB,kBAAkB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;IAClG,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,IAAA,MAAM,KAAK,GAAI,OAAO,CAAC,IAAoB,CAAC,KAAK;AACjD,IAAA,MAAM,YAAY,GAAI,KAAa,CAAC,SAAS,CAAC;AAC9C,IAAA,IAAI,YAAY,KAAK,QAAQ,EAAE;AAC5B,QAAA,KAAa,CAAC,SAAS,CAAC,GAAG,QAAQ;IACtC;AACF;;ACNA,MAAM,eAAe,GAAkB,IAAI,OAAO,EAAE;SAEpC,iBAAiB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;IACjG,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC9C,QAAA,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,QAAkB;IACpD;;AAEA,IAAA,IAAI,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACxD,QAAA,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU;QACjD,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa;YAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAE,CAAC;YACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAE,CAAC;YACnE,UAAU,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW,CAAC;YAC1D,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;QACtE;IACF;AACF;;SClBgB,yBAAyB,CAAC,OAAqB,EAAE,QAAuB,EAAE,QAAiB,EAAA;AACzG,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;AACvC,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,IAAA,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;QAC5B,UAAU,CAAC,CAAA,gDAAA,EAAmD,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;IACzF;IACA,MAAM,CAAE,YAAY,EAAE,GAAG,YAAY,CAAE,GAAG,YAAY;AACtD,IAAA,MAAM,SAAS,GAAI,OAAe,CAAC,YAAY,CAAwC;AACvF,IAAA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;AACpC,QAAA,UAAU,CAAC,CAAA,UAAA,EAAa,YAAY,CAAA,6BAAA,CAA+B,CAAC;IACtE;IACA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;AAC9C;;ACZA;AACM,SAAU,0BAA0B,CAAC,WAAyB,EAAE,SAAiB,EAAA;AACrF,IAAA,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE;QAClC,UAAU,CAAC,CAAA,oCAAA,CAAsC,CAAC;IACpD;AACA,IAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC;AAC/C,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,UAAU,CAAC,CAAA,oBAAA,EAAuB,SAAS,CAAA,CAAE,CAAC;IAChD;IACA,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC;AACpD,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,QAAA,UAAU,CAAC,CAAA,4BAAA,EAA+B,QAAQ,CAAA,iBAAA,CAAmB,CAAC;IACxE;IACA,OAAO,SAAS,CAAC,KAAK;AACxB;;ACTM,SAAU,QAAQ,CAAC,KAAkB,EAAE,OAAqB,EAAA;AAChE,IAAA,MAAM,YAAY,GAAG,4BAA4B,CAAC,OAAO,CAAC;IAC1D,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,IAAI,mBAAmB,EAAE;QACrD,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;AACtD,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,YAAA,UAAU,CAAC,CAAA,iCAAA,EAAoC,OAAO,CAAC,aAAa,CAAA,CAAE,CAAC;QACzE;QACA,OAAO,0BAA0B,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5E;SAAO;AACL,QAAA,OAAO,KAAK,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC;IAChD;AACF;;ACjBA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAgB;AAErD;;;;;;;;;AASG;AACG,SAAU,qBAAqB,CAAC,OAAqB,EAAE,OAAe,EAAA;AAC1E,IAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAClC;IACF;AACA,IAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AAC5C,QAAA,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;AACpC,YAAA,OAAO;QACT;AACA,QAAA,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC;AACpC,IAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,KAAI;QAC1B,OAAO,CAAC,KAAK,CAAC,CAAA,4CAAA,EAA+C,OAAO,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;AAClF,IAAA,CAAC,CAAC;AACJ;;ACVA,MAAM,yBAAyB,GAAqC;AAClE,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,MAAM,EAAE,sBAAsB;AAC9B,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,SAAS,EAAE,oBAAoB;CAChC;AAED,MAAM,wBAAwB,GAAqC;AACjE,IAAA,MAAM,EAAE,iBAAiB;AACzB,IAAA,KAAK,EAAE,gBAAgB;AACvB,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,UAAU,EAAE,qBAAqB;CAClC;AAED,MAAM,WAAW,GAAyC,IAAI,OAAO,EAAE;AACvE,MAAM,8BAA8B,GAAmC,IAAI,OAAO,EAAE;AAEpF,SAAS,YAAY,CAAC,OAAqB,EAAE,OAAsB,EAAA;IACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC;IAEjE,IAAI,8BAA8B,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;AACxD,QAAA,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QACtE;IACF;IACA,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,IAAA,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;AAC7B,QAAA,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;QACnC;IACF;AACA,IAAA,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC5B,IAAI,sBAAsB,CAAC,OAAO,CAAC,WAAsB,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE;YAChF,EAAE,GAAG,yBAAyB;YAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/B;aAAO;YACL,EAAE,GAAG,qBAAqB;QAC5B;AACA,QAAA,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;QACnC;IACF;AAEA,IAAA,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,WAAW,CAAC;AAClD,IAAA,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5C,QAAA,EAAE,GAAG,yBAAyB,CAAC,YAAY,CAAC;AAC5C,QAAA,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;AAC5B,QAAA,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;YAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;YACvD,IAAI,SAAS,EAAE;gBACb,IAAI,sBAAsB,CAAC,OAAO,CAAC,WAAsB,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE;oBAChF,EAAE,GAAG,yBAAyB;oBAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC/B;qBAAO;oBACL,EAAE,GAAG,qBAAqB;gBAC5B;YACF;iBAAO;gBACL,EAAE,GAAG,qBAAqB;AAC1B,gBAAA,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9B;QACF;IACF;AACA,IAAA,IAAI,EAAE,KAAK,qBAAqB,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAe;AACvC,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE;YAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACxC,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,eAAe,EAAE;AACxD,gBAAA,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AACtE,gBAAA,8BAA8B,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;gBACjD;YACF;QACF;IACF;AACA,IAAA,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;AACrC;AAEM,SAAU,WAAW,CAAC,OAAqB,EAAE,OAAsB,EAAA;IACvE,IAAI,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC1C;IACF;AACA,IAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,IAAA,MAAM,UAAU,GAAG,gCAAgC,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,CAAC,kCAAkC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACxE,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,kCAAkC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAE;AACxF,QAAA,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;IAC5B;SAAO;QACL,OAAO,CAAC,kCAAkC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC;YAC3E;AACD,SAAA,CAAC,CAAC;IACL;AACA,IAAA,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE;QACnC;IACF;IACA,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;IACvD,IAAI,SAAS,EAAE;QACb,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;;;;;AAK/C,YAAA,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC;YACzC;QACF;IACF;IACA,IAAI,QAAQ,GAAgB,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;IACrE,IAAI,QAAQ,YAAY,gBAAgB,IAAI,EAAE,QAAQ,YAAY,UAAU,CAAC,EAAE;AAC7E,QAAA,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,UAAU,CAAC,CAAA,6CAAA,CAA+C,CAAC;QAC7D;IACF;AACA,IAAA,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;QAC5E,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;QACrF;QACA,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,WAAW,KAAI;AACnD,YAAA,MAAM,UAAU,GAAG;gBACjB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,KAAK,EAAE,WAAW;gBAClB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;gBAC1D,kCAAkC,EAAE,OAAO,CAAC,kCAAkC;gBAC9E,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;aACvD;AACD,YAAA,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC;AACnC,QAAA,CAAC,CAAC;IACJ;SAAO;AACL,QAAA,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;IAChC;AACF;;AChJA;;;;;;;;;AASG;AACG,SAAU,uBAAuB,CAAC,QAAwB,EAAA;IAC9D,IAAI,YAAY,GAAG,CAAC;AACpB,IAAA,MAAM,iBAAiB,GAAsB,IAAI,GAAG,EAAE;AACtD,IAAA,MAAM,wBAAwB,GAAmD,IAAI,GAAG,EAAE;AAC1F,IAAA,MAAM,kCAAkC,GAAmD,IAAI,GAAG,EAAE;IACpG,MAAM,sBAAsB,GAA6B,EAAE;;AAG3D,IAAA,OAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE;AACpC,QAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACnC,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,KAAK,KAAK,EAAE;;AAE7C,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,OAAO,CAAC,GAAG,CAAC,CAAA,oDAAA,EAAuD,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,CAAA,IAAA,EAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAA,CAAE,EAAE,OAAO,CAAC;YACzJ;AACA,YAAA,YAAY,EAAE;YACd;QACF;QACA,IAAI,QAAQ,GAAgB,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;QACrE,IAAI,QAAQ,YAAY,gBAAgB,IAAI,EAAE,QAAQ,YAAY,UAAU,CAAC,EAAE;AAC7E,YAAA,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC;AAC1C,YAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB,UAAU,CAAC,CAAA,6CAAA,CAA+C,CAAC;YAC7D;QACF;QACA,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,wBAAA,CAA0B,CAAC;QAC7E;QAEA,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,OAAO,GAAkB;AAC7B,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,iBAAiB,EAAE,iBAAiB;AACpC,gBAAA,wBAAwB,EAAE,wBAAwB;AAClD,gBAAA,kCAAkC,EAAE,kCAAkC;AACtE,gBAAA,sBAAsB,EAAE,sBAAsB;aAC/C;AAED,YAAA,GAAG;AACD,gBAAA,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7B,gBAAA,YAAY,EAAE;AAEd,gBAAA,MAAM,eAAe,GAA6B,QAAQ,CAAC,YAAY,CAAC;AACxE,gBAAA,IAAI,CAAC,eAAe;AAAE,oBAAA,MAAM;gBAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,WAAW,EAAU;gBACtE,IAAI,eAAe,CAAC,SAAS,KAAK,SAAS,IAAI,YAAY,KAAK,OAAO,CAAC,QAAQ;AAAE,oBAAA,MAAM;gBACxF,OAAO,GAAG,eAAe;AAC3B,YAAA,CAAC,QAAO,IAAI,EAAE;AAChB,QAAA,CAAC,CAAC;IACJ;;;IAGA,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,sBAAsB,EAAE;AACvD,QAAA,qBAAqB,CAAC,OAAO,EAAE,IAAgC,EAAE,KAAK,CAAC;IACzE;AAEA,IAAA,KAAI,MAAM,CAAE,UAAU,EAAE,YAAY,CAAE,IAAI,wBAAwB,CAAC,OAAO,EAAE,EAAE;AAC5E,QAAA,sCAAsC,CAAC,UAAU,EAAE,YAAY,CAAC;IAClE;AACA,IAAA,KAAI,MAAM,CAAE,YAAY,EAAE,aAAa,CAAE,IAAI,kCAAkC,CAAC,OAAO,EAAE,EAAE;QACzF,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;YAC7C,KAAK,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzD,QAAA,CAAC,CAAC;IACJ;AACF;;ACtFA,MAAMN,qBAAmB,GAAuC,IAAI,GAAG,EAAE;AACzE,MAAMC,wBAAsB,GAAmC,IAAI,GAAG,EAAE;AAExE,SAASC,eAAa,CAAC,OAAqB,EAAE,SAAiB,EAAA;AAC7D,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnG,IAAA,OAAO,CAAA,EAAG,OAAO,CAAC,SAAS,CAAA,EAAA,EAAK,OAAO,CAAC,aAAa,CAAA,EAAA,EAAK,SAAS,CAAA,EAAA,EAAK,SAAS,EAAE;AACrF;AAEA,SAASG,cAAY,CAAC,OAAqB,EAAA;IACzC,IAAI,SAAS,GAAG,OAAO;AACvB,IAAA,KAAI,MAAM,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE;AAC3C,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B;IACF;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,MAAM,yBAAyB,GAAG,CAChC,SAAiB,EACjB,aAAqB,EACrB,SAAwB,KACrB,CAAC,KAAY,KAAS;AACzB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAA0B;AAC7C,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,sCAAA,CAAwC,CAAC;QACtD;IACF;AACA,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,2DAAA,CAA6D,CAAC;QAC3E;IACF;AACA,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;QAC1B;IACF;AACA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;IAC3B,IAAI,gBAAgB,GAAY,QAAQ;AACxC,IAAA,KAAI,MAAM,MAAM,IAAI,SAAS,EAAE;AAC7B,QAAA,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACtD;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAU;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,gCAAA,CAAkC,CAAC;IACrF;AAEA,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAC9C,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,QAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;AAC5C,YAAA,KAAK,CAAC,aAAa,CAAC,GAAG,gBAAgB;AACzC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,uBAAuB,CAAC,OAAqB,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjF,QAAA,MAAM,SAAS,GAAGA,cAAY,CAAC,OAAO,CAAC;QACvC,MAAM,GAAG,GAAGH,eAAa,CAAC,OAAO,EAAE,SAAS,CAAC;QAC7C,IAAI,iBAAiB,GAAGF,qBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AACpD,QAAA,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;AAC5C,YAAA,iBAAiB,GAAG,yBAAyB,CAC3C,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,SAAS,CAClB;AACD,YAAAA,qBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACjD;QACC,OAAO,CAAC,IAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC;QACxE,IAAI,UAAU,GAAGC,wBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,QAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;YACrC,UAAU,GAAG,IAAI,GAAG,CAAe,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAAA,wBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;QAC7C;aAAO;AACL,YAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;;AC/EA,MAAM,mBAAmB,GAAuC,IAAI,GAAG,EAAE;AACzE,MAAM,sBAAsB,GAAmC,IAAI,GAAG,EAAE;AAExE,SAAS,aAAa,CAAC,OAAqB,EAAE,SAAiB,EAAA;AAC7D,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnG,IAAA,OAAO,CAAA,EAAG,OAAO,CAAC,SAAS,CAAA,EAAA,EAAK,OAAO,CAAC,aAAa,CAAA,EAAA,EAAK,SAAS,CAAA,EAAA,EAAK,SAAS,EAAE;AACrF;AAEA,SAAS,YAAY,CAAC,OAAqB,EAAA;IACzC,IAAI,SAAS,GAAG,OAAO;AACvB,IAAA,KAAI,MAAM,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE;AAC3C,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B;IACF;AACA,IAAA,OAAO,SAAS;AAClB;AAEA,MAAM,4BAA4B,GAAG,CACnC,SAAiB,EACjB,aAAqB,EACrB,SAAwB,KACrB,CAAC,KAAY,KAAS;AACzB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAA0B;AAC7C,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,sCAAA,CAAwC,CAAC;QACtD;IACF;AACA,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,QAAA,OAAO,CAAC,IAAI,CAAC,CAAA,8DAAA,CAAgE,CAAC;QAC9E;IACF;AACA,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;IAC3B,IAAI,gBAAgB,GAAY,QAAQ;AACxC,IAAA,KAAI,MAAM,MAAM,IAAI,SAAS,EAAE;AAC7B,QAAA,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACtD;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAU;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,gCAAA,CAAkC,CAAC;IACrF;AAEA,IAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAC9C,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,QAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;AAC5C,YAAA,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC/B,IAAI,OAAO,EAAE;oBACX,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE;wBACjD,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC9D;gBACF;qBAAO;oBACL,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACpD,oBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,wBAAA,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;oBACzD;gBACF;YACF;iBAAO;gBACL,IAAI,OAAO,EAAE;AACX,oBAAA,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC3C;qBAAO;AACL,oBAAA,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;gBAC3B;YACF;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,0BAA0B,CAAC,OAAqB,EAAA;AAC9D,IAAA,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACpF,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;QAC7C,IAAI,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AACvD,QAAA,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;AAC/C,YAAA,oBAAoB,GAAG,4BAA4B,CACjD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,SAAS,CAClB;AACD,YAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC;QACpD;QACC,OAAO,CAAC,IAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,CAAC;QAC3E,IAAI,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,QAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;YACrC,UAAU,GAAG,IAAI,GAAG,CAAe,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAA,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;QAC7C;aAAO;AACL,YAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;;AC9EA,SAAS,mBAAmB,CAC1B,WAA2B,EAAA;AAE3B,IAAA,KAAI,MAAM,OAAO,IAAI,WAAW,EAAE;;QAGhC,oBAAoB,CAAC,OAAO,CAAC;;AAG7B,QAAA,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAC/B;QACF;;AAGA,QAAA,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE;YACpC;QACF;;QAGA,wBAAwB,CAAC,OAAO,CAAC;;QAEjC,uBAAuB,CAAC,OAAO,CAAC;;QAEhC,0BAA0B,CAAC,OAAO,CAAC;IAErC;AACF;AAEA,SAAS,0BAA0B,CAAC,WAA2B,EAAA;AAC7D,IAAA,KAAI,MAAM,OAAO,IAAI,WAAW,EAAE;AAChC,QAAA,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACtE,QAAA,gCAAgC,CAAC,oBAAoB,EAAE,OAAO,CAAC;QAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;QAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;QACrF;AACA,QAAA,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE;YACnC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC;QACtE;IACF;AACF;AAEA,SAAS,wBAAwB,CAC/B,eAAuC,EACvC,iBAAsC,EAAA;AAEtC,IAAA,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;QACnC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO;AACpC,YAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE;AAC3B,YAAA,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC;YACnD,mBAAmB,CAAC,QAAQ,CAAC;YAC7B,0BAA0B,CAAC,QAAQ,CAAC;YACpC,uBAAuB,CAAC,QAAQ,CAAC;AACnC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,KAAI;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAA,6CAAA,EAAgD,KAAK,CAAC,OAAO,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;AACzF,QAAA,CAAC,CAAC;IACJ;AACF;AAEM,SAAU,kBAAkB,CAChC,IAA0C,EAAE,iBAAsC,EAAA;AAElF,IAAA,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,eAAe,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC;AACzF,IAAA,KAAI,MAAM,IAAI,IAAI,eAAe,EAAE;AACjC,QAAA,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAC/C;IACA,mBAAmB,CAAC,WAAW,CAAC;IAChC,0BAA0B,CAAC,WAAW,CAAC;;IAEvC,uBAAuB,CAAC,WAAW,CAAC;AACpC,IAAA,wBAAwB,CAAC,eAAe,EAAE,iBAAiB,CAAC;AAC9D;AAEM,SAAU,4BAA4B,CAC1C,IAAsB,EACtB,SAA8B,EAAA;AAE9B,IAAA,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,qCAAqC,CAAC,IAAI,EAAE,SAAS,CAAC;IAC7F,mBAAmB,CAAC,WAAW,CAAC;IAChC,OAAO;AACL,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,YAAY,EAAE,WAAW;KAC1B;AACH;;AC1GA,MAAM,cAAc,GAAG,sBAAsB;AAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAExC,SAAU,yBAAyB,CAAC,IAA2C,EAAA;AACnF,IAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;QAC1B;IACF;IAEA,gBAAgB,CAAC,IAAI,CAAC;AAEtB,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAE/D,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,QAAA,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,EAAE;YAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;YACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAClD,YAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;AAC/B,gBAAA,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;YAC5C;AACA,YAAA,KAAI,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACrC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACjD;AACA,YAAA,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;AACjC,YAAA,yBAAyB,CAAC,WAAW,CAAC,OAAO,CAAC;QAChD;aAAO;AACL,YAAA,yBAAyB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7C;IACF;AACF;AAEA,SAAS,gBAAgB,CAAC,IAA2C,EAAA;AACnE,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;IACpE,MAAM,SAAS,GAAW,EAAE;AAE5B,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAmB,CAAC;IAC5C;AAEA,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,QAAA,IAAI,QAAQ,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;YAC3E;QACF;QACA,eAAe,CAAC,QAAQ,CAAC;IAC3B;AACF;AAEA,SAAS,eAAe,CAAC,QAAc,EAAA;AACrC,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,IAAA,cAAc,CAAC,SAAS,GAAG,CAAC;IAE5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9B;IACF;AAEA,IAAA,cAAc,CAAC,SAAS,GAAG,CAAC;AAC5B,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE;IAClD,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,IAAI,KAA6B;AAEjC,IAAA,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACnD,QAAA,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE;AAC3B,YAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnF;AAEA,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AACzB,QAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAE,CAAC,CAAC;QAE/D,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;IAC3C;AAEA,IAAA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE;IAEA,QAAQ,CAAC,UAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACvD;;AC5EA,IAAI,cAAc,GAA4B,SAAS;SAEvC,eAAe,GAAA;IAC7B,IAAI,cAAc,EAAE;AAClB,QAAA,OAAO,cAAc;IACvB;IACA,MAAM,UAAU,GAAG,KAAK;IACxB,MAAM,IAAI,GAAa,EAAE;IACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,oBAAoB,CAAC;AACxE,IAAA,cAAc,GAAG;QACf,UAAU;QACV,IAAI;QACJ,QAAQ;KACT;AACD,IAAA,OAAO,cAAc;AACvB;;ACfA,MAAM,aAAa,GAAG,sCAAsC;AAE5D,SAAS,0BAA0B,CAAC,SAAiB,EAAE,OAAe,EAAA;AACpE,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ;IAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,IAAA,IAAI,QAAgB;AACpB,IAAA,IAAI,MAAc;AAClB,IAAA,IAAI,SAAS,KAAK,EAAE,EAAE;AACpB,QAAA,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE;AAC/C,QAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC;AAAO,SAAA,IAAI,OAAO,KAAK,EAAE,EAAE;AACzB,QAAA,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAC7C,QAAA,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;IACnC;SAAO;AACL,QAAA,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE;QAC3B,MAAM,GAAG,EAAE;IACb;AACA,IAAA,IAAI,QAAQ,KAAK,GAAG,EAAE;QACpB,QAAQ,GAAG,MAAM;IACnB;AAAO,SAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACnC,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD;SAAO;AACL,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,OAAO,QAAQ,GAAG,MAAM;IAC1B;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAA;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;AAC9B,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC9D,IAAA,OAAO,aAAa,GAAG,QAAQ,GAAG,aAAa;AACjD;AAEA,SAAS,mBAAmB,CAAC,SAAiB,EAAE,OAAe,EAAA;IAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;QACvC,IAAI,UAAU,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;AACpD,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;QACtD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC;AAC/D,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO,GAAG,IAAI;AACd,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,QAAQ,EAAE;QACnC;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;AAC9B,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB;AAEM,SAAU,8BAA8B,CAAC,SAAiB,EAAE,OAAe,EAAA;AAC/E,IAAA,OAAO,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;AAChD;AAEM,SAAU,oBAAoB,CAAC,IAAsB,EAAE,OAAe,EAAA;AAC1E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB;AACzC,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CACtC,IAAI,EACJ,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAClD;AAED,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW;QAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;YACvC,MAAM,OAAO,GAAG,IAAe;YAC/B,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YACvD;QACF;QACA,MAAM,OAAO,GAAG,IAAe;AAC/B,QAAA,IAAI,OAAO,YAAY,mBAAmB,EAAE;YAC1C;QACF;QACA,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC3C,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;AACnD,YAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,gBAAA,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC1C;QACF;IACF;AACF;;AChGM,SAAU,WAAW,CAAC,IAAU,EAAA;IACpC,IAAI,WAAW,GAAgB,IAAI;IACnC,MAAM,IAAI,GAAa,EAAE;AACzB,IAAA,OAAM,WAAW,CAAC,UAAU,KAAK,IAAI,EAAE;AACrC,QAAA,MAAM,KAAK,GAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;QACnE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,QAAA,WAAW,GAAG,WAAW,CAAC,UAAU;IACtC;AACA,IAAA,OAAO,IAAI;AACb;;ACNM,SAAU,oBAAoB,CAAC,QAA0B,EAAA;IAC7D,MAAM,kBAAkB,GAAwB,EAAE;AAClD,IAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AACpD,IAAA,KAAI,MAAM,cAAc,IAAI,eAAe,EAAE;AAC3C,QAAA,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,cAAc,CAAC;QACvE,kBAAkB,CAAC,IAAI,CAAC;AACtB,YAAA,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC;AACrC,YAAA,oBAAoB,EAAE,uBAAuB;AAC9C,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,kBAAkB;AAC3B;;ACfM,SAAU,gBAAgB,CAAC,QAA0B,EAAA;IACzD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAClD,IAAA,KAAI,MAAM,SAAS,IAAI,UAAU,EAAE;QACjC,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE;AAC/C,YAAA,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;AAE7B,gBAAA,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;YACjC;QACF;IACF;AACF;;ACGA,MAAM,oBAAoB,GAA6B,IAAI,GAAG,CAAsB;AAClF,IAAA,CAAC,KAAK,EAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,IAAA,CAAC,IAAI,EAAG,MAAM,CAAC,eAAe,CAAC;AAC/B,IAAA,CAAC,QAAQ,EAAE,MAAM,CAAC,mBAAmB,CAAC;AACtC,IAAA,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC;AACnC,CAAA,CAAC;AAEF,MAAM,SAAS,GAAG,eAAe,EAAE;AAEnC,SAAS,2BAA2B,CAClC,WAAwB,EACxB,mBAAwC,EAAA;AAExC,IAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU;IAC9C,OAAO;AACL,QAAA,GAAG,mBAAmB;AACtB,QAAA,UAAU,EAAE,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC;AACnC,QAAA,WAAW,EAAE,WAAW;KACzB;AACH;AAEA,SAAS,gBAAgB,CACvB,QAAc,EACd,QAA0B,EAC1B,sBAA2C,EAC3C,OAAgB,EAAA;IAEhB,gBAAgB,CAAC,QAAQ,CAAC;AAC1B,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,QAAA,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;IACzC;AACA,IAAA,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;;AAEvD,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,mBAAmB,EAAE,sBAAsB;AAC3C,QAAA,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC;KAC1C;AACD,IAAA,OAAO,YAAY;AACrB;SAGgB,0BAA0B,CAAC,QAAc,EAAE,QAA+C,EAAE,OAAgB,EAAA;AAC1H,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CACtC,QAAQ,EACR,UAAU,CAAC,YAAY,EACvB;AACE,QAAA,UAAU,CAAC,IAAU,EAAA;YACnB,MAAM,OAAO,GAAG,IAAe;YAC/B,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AAChD,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACrE,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,OAAO,UAAU,CAAC,aAAa;gBACjC;YACF;YACA,OAAO,UAAU,CAAC,WAAW;QAC/B;AACD,KAAA,CACF;AACD,IAAA,IAAI,kBAAkB,GAAyB,IAAI,CAAC;AACpD,IAAA,MAAM,iBAAiB,GAAoB,EAAE,CAAC;IAC9C,MAAM,SAAS,GAA0B,EAAE;AAC3C,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAkC;AAC1D,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC1B;AAEA,IAAA,KAAI,MAAM,QAAQ,IAAI,SAAS,EAAE;AAC/B,QAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACpE,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,QAAQ,GAAG,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC9D;AACA,QAAA,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;AAC/D,QAAA,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,CAAC;AACzE,QAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW;AACnD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;AACjC,QAAA,MAAM,IAAI,GAAG,OAAO,EAAE;QACtB,IAAI,YAAY,GAAyB,IAAI;;AAG7C,QAAA,MAAM,YAAY,GAAG,WAAW,KAAK;cACjC,mBAAmB,CAAC;cACpB,OAAO;AAEX,QAAA,IAAI,WAAW,KAAK,MAAM,EAAE;;AAE1B,YAAA,IAAI,kBAAkB,KAAK,IAAI,EAAE;gBAC/B,UAAU,CAAC,CAAA,gEAAA,CAAkE,CAAC;YAChF;;YAEA,mBAAmB,GAAG,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC;YACjG,YAAY,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,CAAC;AACtF,YAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;YAEnD,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;AACrD,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AAClE,YAAA,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;gBAC/C,QAAQ,CAAC,MAAM,EAAE;AACjB,gBAAA,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;AACtD,gBAAA,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC;AAClC,oBAAA,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC;AAClC,oBAAA,oBAAoB,EAAE,uBAAuB,CAAC,WAAW,CAAC;AAC3D,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;YACnC;QACF;AAAO,aAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;;AAEnC,YAAA,IAAI,kBAAkB,KAAK,IAAI,EAAE;gBAC/B,UAAU,CAAC,CAAA,kEAAA,CAAoE,CAAC;YAClF;YAEA,YAAY,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,CAAC;AACtF,YAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;AACnD,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;;AAGlE,YAAA,MAAM,QAAQ,GAAG,OAAO,EAAE;AAC1B,YAAA,MAAM,gBAAgB,GAAkB;AACtC,gBAAA,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,EAAE;gBAC3C,mBAAmB,EAAE,2BAA2B,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC;AAChG,gBAAA,SAAS,EAAE,EAAE;aACd;AACD,YAAA,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;AAClD,YAAA,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;AAC9B,gBAAA,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC;AAClC,gBAAA,oBAAoB,EAAE,uBAAuB,CAAC,WAAW,CAAC;AAC3D,aAAA,CAAC;AACF,YAAA,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC;YAC3D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;AACrD,YAAA,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxC,YAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC;AAE9E,YAAA,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;gBAC/C,QAAQ,CAAC,MAAM,EAAE;AACjB,gBAAA,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;AAC1D,gBAAA,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC;AAClC,oBAAA,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC;AACtC,oBAAA,oBAAoB,EAAE,uBAAuB,CAAC,eAAe,CAAC;AAC/D,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;YACvC;QAEF;aAAO;YACL,YAAY,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,CAAC;AACtF,YAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;AACnD,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AAClE,YAAA,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC;QACnC;;AAGA,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,YAAA,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,kBAAkB,GAAG,YAAY;QACnC;AAAO,aAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;YACnC,kBAAkB,GAAG,YAAY;QACnC;AAAO,aAAA,IAAI,WAAW,KAAK,MAAM,EAAE;YACjC,kBAAkB,GAAG,IAAI;AACzB,YAAA,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B;IACF;AACF;;ACnLO,eAAe,sBAAsB,CAAC,IAA2C,EAAA;AACtF,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,QAAQ,GAAoB,EAAE;IACpC,MAAM,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvD,IAAA,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC7B,MAAM,YAAY,GAAG,OAAiC;AACtD,QAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;IAC/C;AACA,IAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7B;;ACNO,eAAe,aAAa,CAAC,IAA2B,EAAA;AAC7D,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;;AAErB,QAAA,MAAM,sBAAsB,CAAC,QAAQ,CAAC;;QAEtC,yBAAyB,CAAC,QAAQ,CAAC;AACnC,QAAA,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9C,QAAA,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACzC;SAAO;QACL,MAAM,UAAU,GAAG,IAAkB;QACrC,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;;AAE1D,YAAA,MAAM,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9C;;AAEA,QAAA,MAAM,sBAAsB,CAAC,UAAU,CAAC;;QAExC,yBAAyB,CAAC,UAAU,CAAC;AACrC,QAAA,0BAA0B,CAAC,UAAU,EAAE,UAAU,CAAC;AAClD,QAAA,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC;IACtC;AACF;;ACaA;AACA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAWjE;;AAEG;AACH,SAAS,gBAAgB,CAAC,IAAU,EAAA;IAClC,MAAM,MAAM,GAAgB,EAAE;AAC9B,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;IACvE,MAAM,aAAa,GAAc,EAAE;;AAGnC,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAsB,CAAC;IACnD;AAEA,IAAA,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;QACnC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE7B,QAAA,IAAI,IAAY;AAChB,QAAA,IAAI,IAAY;QAChB,IAAI,KAAK,GAAkB,IAAI;AAE/B,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;;AAElB,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACf,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC;aAAO;;AAEL,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC;;QAGA,MAAM,KAAK,GAAW,EAAE;AACxB,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,WAAW;AACjC,QAAA,MAAM,UAAU,GAAG,CAAA,MAAA,EAAS,IAAI,CAAA,KAAA,EAAQ,IAAI,EAAE;QAC9C,OAAO,OAAO,EAAE;AACd,YAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAK,OAAmB,CAAC,IAAI,KAAK,UAAU,EAAE;gBACtF;YACF;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,YAAA,OAAO,GAAG,OAAO,CAAC,WAAW;QAC/B;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjD;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;;;AAIG;AACH,SAAS,4BAA4B,CACnC,KAAa,EAAA;AAEb,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;;IAGxE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;AAClC,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW;;IAGvD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;IAC3B;;IAGA,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,2BAA2B,CAAC,OAAO,CAAC;;AAG3E,IAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;QACjC,oBAAoB,CAAC,OAAO,CAAC;QAC7B,IAAI,kBAAkB,CAAC,OAAO,CAAC;YAAE;QACjC,IAAI,uBAAuB,CAAC,OAAO,CAAC;YAAE;QACtC,wBAAwB,CAAC,OAAO,CAAC;QACjC,uBAAuB,CAAC,OAAO,CAAC;QAChC,0BAA0B,CAAC,OAAO,CAAC;IACrC;;IAGA,IAAI,MAAM,EAAE;AACV,QAAA,OAAO,OAAO,CAAC,UAAU,EAAE;YACzB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;QACtD;IACF;IAEA,OAAO;AACL,QAAA,YAAY,EAAE,WAAW;QACzB,eAAe;KAChB;AACH;AAEA;;AAEG;AACH,SAAS,aAAa,CAAC,IAAU,EAAE,MAAmB,EAAA;;AAEpD,IAAA,MAAM,iBAAiB,GAA8B,IAAI,GAAG,EAAE;AAE9D,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAE9B,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGnD,QAAA,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,KAAK,CAAC;;;AAInF,QAAA,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE;YAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AACtC,gBAAA,IAAgB,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC1D;QACF;AACA,QAAA,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC;AAC3C,QAAA,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC;QAE3C,MAAM,aAAa,GAAmB,EAAE;AACxC,QAAA,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;AAClC,YAAA,IAAI,OAAO,CAAC,aAAa,IAAI,mBAAmB,EAAE;AAChD,gBAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B;QACF;AACA,QAAA,yBAAyB,CAAC,OAAO,EAAE,aAAa,CAAC;AAEjD,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;AAChD,YAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YAC1E,IAAI,kBAAkB,EAAE;gBACtB,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;AACpD,gBAAA,iBAAiB,CAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC;AACzD,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,gBAAA,kBAAkB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAChD,gBAAA,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC;;AAG7C,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACzD,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;;AAE5D,gBAAA,wBAAwB,CAAC,OAAO,EAAE,YAAmB,CAAC;AAEtD,gBAAA,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;AAClC,oBAAA,MAAM,OAAO,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACzD,oBAAA,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC;gBACpD;;gBAGA,IAAI,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,GAAG,EAAE;oBACZ,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC5C;AACA,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB;QACF;aAAO;AACL,YAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YAC/E,IAAI,kBAAkB,EAAE;AACtB,gBAAA,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC;;AAG7C,gBAAA,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;AAClC,oBAAA,MAAM,OAAO,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACzD,oBAAA,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC;gBACpD;YACF;QACF;IACF;;IAGA,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,iBAAiB,EAAE;QAC/C,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,kBAAkB;YAAE;;AAEzB,QAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAU;;AAEzD,QAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY;YAAE;AACnB,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,mBAAmB,CAAC,SAAS;AAC5D,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,mBAAmB,CAAC,aAAa;QACpE,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,CAAC,YAAY;YAAE;QACnB,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;AACjC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;IACJ;AACF;AAEA,SAAS,sBAAsB,CAAC,IAAU,EAAE,IAAY,EAAE,IAAY,EAAA;AACpE,IAAA,MAAM,UAAU,GAA2B;QACzC,KAAK,EAAE,MAAM,CAAC,gBAAgB;QAC9B,IAAI,EAAE,MAAM,CAAC,eAAe;QAC5B,QAAQ,EAAE,MAAM,CAAC,mBAAmB;QACpC,MAAM,EAAE,MAAM,CAAC,iBAAiB;KACjC;AACD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC;AAChC,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AAEzB,IAAA,MAAM,OAAO,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,IAAI,EAAE;AACtC,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;AACvE,IAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsB;AAC7C,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;AAC5B,YAAA,OAAO,OAAO;QAChB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACH,SAAS,gBAAgB,CAAC,IAAc,EAAE,KAAU,EAAA;IAClD,MAAM,QAAQ,GAAG,IAAY;IAC7B,IAAI,iBAAiB,GAA+B,IAAI;IAExD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;AACzC,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACjE,QAAA,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;AAC/D,QAAA,IAAI,mBAAmB,GAAG,oBAAoB,CAAC,CAAC,CAAC;AACjD,QAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW;;;AAInD,QAAA,IAAI,WAAW,KAAK,MAAM,IAAI,iBAAiB,EAAE;AAC/C,YAAA,mBAAmB,GAAG;AACpB,gBAAA,GAAG,iBAAiB;gBACpB,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC;AAChE,gBAAA,WAAW,EAAE,MAAM;aACpB;QACH;AAAO,aAAA,IAAI,WAAW,KAAK,QAAQ,IAAI,iBAAiB,EAAE;AACxD,YAAA,mBAAmB,GAAG;AACpB,gBAAA,GAAG,mBAAmB;gBACtB,SAAS,EAAE,iBAAiB,CAAC,SAAS;aACvC;QACH;;AAGA,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;YACnC,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,WAAW,KAAK,MAAM,EAAE;YACjC,iBAAiB,GAAG,IAAI;QAC1B;AAEA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,WAAW,KAAK,KAAK,GAAG,mBAAmB,CAAC,aAAa,GAAG,SAAS;QACrF,gBAAgB,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;QACzC;AACA,QAAA,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AAEvD,QAAA,MAAM,YAAY,GAAG;YACnB,QAAQ;YACR,mBAAmB;AACnB,YAAA,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC;SAC1C;AACD,QAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;IACrD;AACF;AAEA;;;;AAIG;AACI,eAAe,eAAe,CAAC,IAAc,EAAA;AAClD,IAAA,MAAM,sBAAsB,CAAC,IAAI,CAAC;;AAGlC,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9D,IAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;QACjC,MAAM,KAAK,GAAG,OAAc;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;YAC1B,OAAO,CAAC,IAAI,CACV,CAAA,+CAAA,EAAkD,KAAK,CAAC,OAAO,CAAA,WAAA,EAAc,OAAO,CAAA,+BAAA,CAAiC,CACtH;AACD,YAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,KAAK;QACd;IACF;;AAGA,IAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AACjC,QAAA,gBAAgB,CAAC,IAAI,EAAE,OAAc,CAAC;IACxC;;IAGA,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9C,IAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;;AAGpC,IAAA,GAAG,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAG9C,MAAM,UAAU,GAAuD,EAAE;AACzE,IAAA,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;AAC5B,QAAA,IAAI,EAAE,CAAC,UAAU,EAAE;AACjB,YAAA,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;YACpE,EAAE,CAAC,MAAM,EAAE;QACb;IACF;;;;AAMA,IAAA,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGtC,IAAA,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC;;;AAIjF,IAAA,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE;QAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;YACvC,MAAM,EAAE,GAAG,IAAe;YAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,EAAE;AAC1C,gBAAA,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;AAChC,gBAAA,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC3C;QACF;aAAO;;AAEL,YAAA,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;QAClC;IACF;;IAGA,MAAM,cAAc,GAAmB,EAAE;IACzC,MAAM,kBAAkB,GAAmB,EAAE;AAE7C,IAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;QACjC,oBAAoB,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAC/B;QACF;AACA,QAAA,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE;YACpC;QACF;QACA,wBAAwB,CAAC,OAAO,CAAC;QACjC,uBAAuB,CAAC,OAAO,CAAC;QAChC,0BAA0B,CAAC,OAAO,CAAC;QAEnC,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC7C,YAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC;aAAO,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;;YAEnD;QACF;aAAO;AACL,YAAA,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B;IACF;;IAGA,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,cAAc,EAAE,GAAG,kBAAkB,CAAC,EAAE;AAChE,QAAA,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACtE,QAAA,gCAAgC,CAAC,oBAAoB,EAAE,OAAO,CAAC;QAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;QAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;AACvE,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,SAAS,CAAA,wBAAA,CAA0B,CAAC;QACrF;AACA,QAAA,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE;YACnC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC;QACtE;IACF;;;AAIA,IAAA,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;AACxC,QAAA,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE;AACjC,YAAA,MAAM,OAAO,GAAG,gCAAgC,CAAC,OAAO,CAAC;YACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAU;YAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;YACvE,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;oBAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;AAC1C,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,wBAAA,sCAAsC,CAAC,OAAO,EAAE,KAAK,CAAC;oBACxD;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;IACF;;IAGA,uBAAuB,CAAC,cAAc,CAAC;;IAGvC,KAAK,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE;AAC7C,QAAA,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC;IAC/B;;AAGA,IAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtE,IAAA,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE;QACzC,MAAM,KAAK,GAAG,OAAc;AAC5B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;AAChC,QAAA,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA,kBAAA,EAAqB,EAAE,CAAA,EAAA,CAAI,CAAC;AAC9D,YAAA,IAAI,CAAC,MAAM;gBAAE;AACb,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACtD,gBAAA,MAAc,CAAC,QAAQ,CAAC,GAAG,KAAK;YACnC;QACF;IACF;;IAGA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;AAClE,IAAA,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE;AAC7B,QAAA,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC;IAC1C;AAEA,IAAA,OAAO,IAAI;AACb;;ACxdA,MAAM,wBAAwB,GAA8C,IAAI,OAAO,EAAE;AACzF,MAAM,mBAAmB,GAAiC,IAAI,OAAO,EAAE;AAEjE,SAAU,qBAAqB,CAAC,QAAa,EAAE,IAAY,EAAA;IAC/D,IAAI,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/D,IAAI,CAAC,kBAAkB,EAAE;AACvB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AAC7C;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,QAAc,EAAA;IAC7C,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE;AAC/D;SAEgB,qBAAqB,CAAC,QAAa,EAAE,IAAY,EAAE,OAA6B,EAAA;IAE9F,IAAI,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAE/D,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;;QAEpB,IAAI,CAAC,kBAAkB,EAAE;YACvB;QACF;AACA,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC,EAAE;AACjC,YAAA,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C;AACA,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAA,CAAA,CAAG,CAAC;QAC7D;IACF;SAAO;;QAEL,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,kBAAkB,GAAG,IAAI,GAAG,EAAyB;AACrD,YAAA,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;;;AAG1D,YAAA,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAK,OAA8B,CAAC,YAAY,GAAG,YAAY,CAAC;AAC1F,YAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC5F,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;oBAC1C,cAAc,CAAC,YAAW;wBACxB,IAAI,SAAS,EAAE;AACb,4BAAA,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAoB,CAAC;4BAC3D,IAAI,CAAC,OAAO,EAAE;AACZ,gCAAA,MAAM,aAAa,CAAC,QAAoB,CAAC;4BAC3C;wBACF;6BAAO;AACL,4BAAA,MAAM,aAAa,CAAC,QAAoB,CAAC;wBAC3C;AACA,wBAAA,OAAO,EAAE;AACX,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC1C;iBAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;gBACrD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;oBAC1C,cAAc,CAAC,YAAW;AACxB,wBAAA,MAAM,aAAa,CAAC,QAAsB,CAAC;AAC3C,wBAAA,OAAO,EAAE;AACX,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC1C;QACF;AACA,QAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,IAAI,CAAA,wBAAA,CAA0B,CAAC;QACxE;AACA,QAAA,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AACrC,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC;QACpE;IACF;AACF;;AC7EA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyB;SAE3C,qBAAqB,CAAC,IAAY,EAAE,QAAc,EAAE,YAAkC,EAAA;AACpG,IAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;IACjC;SAAO;AACL,QAAA,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;AAC1C,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,mBAAmB;QACvD,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC;AAC9E,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,cAAc,CAAC,SAAS,CAAA,8BAAA,CAAgC,CAAC;QAClG;QACA,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC,WAAW,CAAC;AAClF,QAAA,KAAI,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5C,YAAA,KAAI,MAAM,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,EAAE;gBAC7D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC;AACtF,gBAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAC7B,oBAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,kBAAkB,CAAC,SAAS,CAAA,mCAAA,CAAqC,CAAC;gBAC3G;gBACA,gBAAgB,CAAC,WAAW,CAAC,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,WAAW,CAAC;YAChG;QACF;IACF;AACF;AAEM,SAAU,qBAAqB,CAAC,IAAY,EAAA;IAChD,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AAC7C;SAEgB,mBAAmB,GAAA;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC9C;;ACnBA;AACA,MAAM,uBAAuB,GAAG,oCAAoC;AACpE,MAAM,eAAe,GAAG,yCAAyC;AACjE,MAAM,aAAa,GAAG,uCAAuC;AAC7D,MAAM,cAAc,GAAG,yBAAyB;AAShD;;;;;;AAMG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAA;AACvC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,IAAI,EAAE,SAAS;AACvB,SAAA,OAAO,CAAC,IAAI,EAAE,SAAS;AACvB,SAAA,OAAO,CAAC,IAAI,EAAE,SAAS;AACvB,SAAA,OAAO,CAAC,SAAS,EAAE,SAAS;AAC5B,SAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;AAClC;AAEM,MAAO,GAAI,SAAQ,WAAW,CAAA;IAC1B,UAAU,GAAkB,IAAI;IAChC,UAAU,GAA4C,IAAI;IAC1D,aAAa,GAAmD,IAAI;AAE5E,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;IAC/C;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;IAC3C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC;QACA,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC;QACA,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C;QACA,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;IACzC;AAEA;;;;AAIG;IACH,aAAa,GAAA;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;AAClC,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI;QAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;AAEtC,QAAA,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;IAC/E;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;AAEA,IAAA,eAAe,CAAC,KAA8C,EAAA;AAC5D,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;IAEQ,cAAc,GAAA;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAC/B,CAAA,yDAAA,CAA2D,CAC5D;AACD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACtB,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;QAC/C;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE;QACX;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAsB,cAAc,CAAC;AAC5E,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YACjC,IAAI,EAAE,EAAE;AACN,gBAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;YAClB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;IAEQ,iBAAiB,GAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC;AAC/D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACtB,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;QAC/C;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,EAAE;QACX;IACF;AAEA,IAAA,OAAO,UAAU,CAAC,IAAU,EAAE,IAAY,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,YAAY;AAC/B,cAAE;cACA,IAAI,YAAY;kBACd,IAAI,CAAC;kBACL,IAAI;AACV,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1B,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,EAAG,OAAO,CAAA,OAAA,EAAU,IAAI,CAAA,EAAA,CAAI,CAAC;AAC/D,QAAA,OAAO,EAAwB;IACjC;AAEA;;;AAGG;AACH;;AAEG;IACH,OAAO,gBAAgB,CAAC,OAAgB,EAAA;AACtC,QAAA,MAAM,GAAG,GAAI,OAAe,CAAC,OAAO;AACpC,QAAA,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;QAC9C,MAAM,IAAI,GAAwB,EAAE;AACpC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AACvD,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;YACnB;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,YAAY,CAAC,KAAc,EAAE,SAA8B,EAAA;;QAEhE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,QAAA,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACnD,QAAA,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACvE,QAAA,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;;AAG7B,QAAA,MAAM,KAAK,GAAG,mBAAmB,EAAE;AACnC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,YAAY;gBAAE;YAEnB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9C,YAAA,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AAE5B,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,mBAAmB;AACnD,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,KAAK;AAC1C,kBAAE;kBACA,CAAA,EAAG,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,aAAa,CAAA,CAAE;YAC5D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;YAEpD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAqB;AACzE,YAAA,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAEhC,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;QACxB;;AAGA,QAAA,MAAM,QAAQ,GAAG,sBAAsB,EAAE;AACzC,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,SAAS,GAA4C,EAAE;AAC7D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC;AACxB,gBAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACtC,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE;AAC1B,gBAAA,MAAM,EAAE,GAAG,CAAA,QAAA,EAAW,CAAC,EAAE;AACxB,gBAAA,IAAgB,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBACrD,MAAM,KAAK,GAA4B,EAAE;AACzC,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oBAC3B,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK;gBACrC;AACA,gBAAA,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK;YACvB;YACA,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,gBAAA,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC;AACpD,gBAAA,WAAW,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAClD,gBAAA,WAAW,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxE,gBAAA,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC;YAChC;QACF;AAEA,QAAA,qBAAqB,EAAE;IACzB;AAEA;;AAEG;IACH,OAAO,2BAA2B,CAAC,IAAU,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACvE,MAAM,QAAQ,GAAc,EAAE;AAC9B,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsB;AAC7C,YAAA,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1E,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YACxB;QACF;AACA,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,OAAO,CAAC,MAAM,EAAE;QAClB;IACF;AAEA;;AAEG;IACH,OAAO,wBAAwB,CAAC,IAAU,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACvE,MAAM,QAAQ,GAAc,EAAE;AAC9B,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsB;YAC7C,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9C,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YACxB;QACF;AACA,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,OAAO,CAAC,MAAM,EAAE;QAClB;IACF;AAEA;;;;AAIG;IACH,OAAO,mBAAmB,CAAC,IAAU,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACvE,MAAM,aAAa,GAAyC,EAAE;AAE9D,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsB;YAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/C,IAAI,KAAK,EAAE;AACT,gBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD;QACF;QAEA,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE;YAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAC;YACzD,OAAO,CAAC,UAAW,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;AAEtD,YAAA,IAAI,OAAO,GAAgB,OAAO,CAAC,WAAW;YAC9C,OAAO,CAAC,MAAM,EAAE;AAEhB,YAAA,MAAM,UAAU,GAAG,CAAA,eAAA,EAAkB,IAAI,EAAE;YAC3C,OAAO,OAAO,EAAE;AACd,gBAAA,MAAM,IAAI,GAAgB,OAAO,CAAC,WAAW;AAC7C,gBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAK,OAAmB,CAAC,IAAI,KAAK,UAAU,EAAE;AACtF,oBAAA,OAAO,CAAC,UAAW,CAAC,WAAW,CAAC,OAAO,CAAC;oBACxC;gBACF;AACA,gBAAA,OAAO,CAAC,UAAW,CAAC,WAAW,CAAC,OAAO,CAAC;gBACxC,OAAO,GAAG,IAAI;YAChB;QACF;IACF;AAEA;;;;;;;;;AASG;IACH,OAAO,UAAU,CAAC,IAAc,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;;AAG1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9D,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B;AAC7D,QAAA,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;YACjC,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAsB,cAAc,CAAC;AAC/E,YAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;gBAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;gBACjC,IAAI,EAAE,EAAE;AACN,oBAAA,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;gBAC7B;YACF;QACF;;AAGA,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACxE,MAAM,aAAa,GAAc,EAAE;AACnC,QAAA,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAsB;YAC9C,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtC,gBAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B;QACF;AACA,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAE;AACtD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,UAAU,GAAG,CAAA,MAAA,EAAS,IAAI,CAAA,KAAA,EAAQ,IAAI,EAAE;AAC9C,YAAA,IAAI,OAAO,GAAG,YAAY,CAAC,WAAW;YACtC,OAAO,OAAO,EAAE;AACd,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW;AAChC,gBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAK,OAAmB,CAAC,IAAI,KAAK,UAAU,EAAE;oBACtF,OAAO,CAAC,MAAM,EAAE;oBAChB;gBACF;gBACA,OAAO,CAAC,MAAM,EAAE;gBAChB,OAAO,GAAG,IAAI;YAChB;YACA,YAAY,CAAC,MAAM,EAAE;QACvB;;AAGA,QAAA,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAG7B,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACxE,MAAM,YAAY,GAAyC,EAAE;AAC7D,QAAA,OAAO,OAAO,CAAC,QAAQ,EAAE,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAsB;YAC9C,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACtC;QACF;QACA,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,YAAY,EAAE;YAC5C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC,IAAI,GAAG,EAAE;gBACP,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAwB;gBAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC3D,gBAAA,IAAI,QAAQ;oBAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;AACvE,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;gBACvD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,oBAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;gBACxC;qBAAO;AACL,oBAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC9C,wBAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAChE;gBACF;gBACA,OAAO,CAAC,UAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;YACrD;QACF;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;AAChE,QAAA,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE;AAC9B,YAAA,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC;QACvC;;AAGA,QAAA,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;YAC5B,EAAE,CAAC,MAAM,EAAE;QACb;IACF;AACD;;ACpYM,eAAe,mBAAmB,CAAC,MAAyB,EAAE,IAAY,EAAA;IAC/E,IAAI,YAAY,GAAwB,IAAI;AAC5C,IAAA,MAAM,YAAY,GAAG,CAAA,gBAAA,EAAmB,IAAI,IAAI;AAChD,IAAA,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE;;AAE7C,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;QACvF,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI;AACF,YAAA,YAAY,GAAG,MAAM,OAAO,GAAG,CAAiB;QAClD;gBAAU;;AAER,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;QAC1B;IACF;SAAO;;;QAGL,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;QAC/F,YAAY,GAAG,MAAM,OAAO,sCAAsC,GAAG,CAAA,CAAE,CAAiB;IAC1F;IACA,OAAO,CAAC,YAAY,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,IAAI,YAAY,CAAC,OAAiB,GAAG,EAAE;AACzG;;ACrBO,eAAe,gBAAgB,CAAC,GAAW,EAAA;AAChD,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,UAAU,CAAC,CAAA,2BAAA,EAA8B,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;QACjE;AACA,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAClC,QAAA,OAAO,IAAI;IACb;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAC7C,QAAA,OAAO,EAAE;IACX;AACF;;ACZO,eAAe,kBAAkB,CAAC,GAAW,EAAA;AAClD,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,GAAG,CAAC;AACnD,QAAA,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE;IAC7B;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,UAAU,CAAC,CAAA,4BAAA,EAA+B,CAAC,CAAA,CAAE,CAAC;IAChD;AACF;;ACNM,SAAU,kBAAkB,CAAC,EAAU,EAAA;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAsB;IAC/D,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAChD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;AACnD,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,UAAU,CAAC,2CAA2C,GAAG,CAAC,CAAC;QAC7D;IACF;AACA,IAAA,OAAO,EAAE;AACX;;ACRA,MAAM,gBAAgB,CAAA;IACZ,iBAAiB,GAAiC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACvF,OAAO,GAAW,CAAC;IAE3B,iBAAiB,CACf,mBAAkC,EAClC,QAAmC,EAAA;AAEnC,QAAA,IAAI,mBAAmB,CAAC,SAAS,KAAK,IAAI,EAAE;YAC1C,UAAU,CAAC,CAAA,+EAAA,CAAiF,CAAC;QAC/F;QACA,MAAM,WAAW,GAAG,mBAAmC;AACvD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE;AAClC,YAAA,UAAU,CAAC,CAAA,6CAAA,EAAgD,cAAc,CAAA,yBAAA,CAA2B,CAAC;QACvG;AACA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAChE,QAAA,IAAI,OAAO,eAAe,KAAK,WAAW,EAAG;AAC3C,YAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE;gBACrF,UAAU,CAAC,CAAA,sHAAA,CAAwH,CAAC;YACtI;;AAEA,YAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AACtH,YAAA,IAAI,eAAe,CAAC,QAAQ,KAAK,oBAAoB,EAAE;gBACrD,UAAU,CAAC,CAAA,mHAAA,CAAqH,CAAC;YACnI;QACF;aAAO;YACL,IAAI,WAAW,CAAC,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE;gBAC5C,UAAU,CAAC,CAAA,iGAAA,CAAmG,CAAC;YACjH;QACF;QACA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW;QAClD,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,QAAQ,GAA0B,MAAM;AAC5C,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC;QAClC;gBAAU;AACR,YAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;AAC/B,gBAAA,QAAQ,CAAC,OAAO,CAAC,MAAK;oBACpB,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;AAClD,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS;YAClD;QACF;AACA,QAAA,OAAO,QAAQ;IACjB;AACD;SAEe,sBAAsB,GAAA;IACpC,OAAO,IAAI,gBAAgB,EAAE;AAC/B;;AC3DA;;;;;;;;;;AAUG;AAMG,SAAU,+BAA+B,CAAC,KAAa,EAAA;AAC3D,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;AAC/B,IAAA,MAAM,QAAQ,GAAI,KAAiC,CAAC,yBAAyB,CAAC;AAC9E,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,UAAU,CAAC,CAAA,EAAG,yBAAyB,CAAA,6BAAA,CAA+B,CAAC;IACzE;AACA,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,YAAA,UAAU,CAAC,CAAA,EAAG,yBAAyB,CAAA,mCAAA,CAAqC,CAAC;QAC/E;AACA,QAAA,IAAI,IAAI,KAAK,4BAA4B,EAAE;YACzC,UAAU,CAAC,GAAG,yBAAyB,CAAA,QAAA,EAAW,IAAI,CAAA,8CAAA,EAAiD,4BAA4B,CAAA,EAAA,CAAI,CAAC;QAC1I;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnB,YAAA,UAAU,CAAC,CAAA,EAAG,yBAAyB,WAAW,IAAI,CAAA,gBAAA,CAAkB,CAAC;QAC3E;AACA,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACjB;AACA,IAAA,OAAO,KAAK;AACd;;AClCA,MAAME,wBAAsB,GAAuD,IAAI,OAAO,EAAE;AAE1F,SAAU,uBAAuB,CAAC,YAA2B,EAAE,IAAY,EAAA;IAC/E,IAAI,QAAQ,GAAGA,wBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvD,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,QAAQ,GAAG,IAAI,GAAG,EAAyB;AAC3C,QAAAA,wBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IACpD;IACA,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,QAAA,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;AAC9B,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC3B;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,yBAAyB,CAAC,YAA2B,EAAA;AACnE,IAAAA,wBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7C;;ACtBA;;;;;;;;;;;AAWG;AAOH,MAAM,4BAA4B,GAAmC,IAAI,OAAO,EAAE;AAE5E,SAAU,mBAAmB,CAAC,YAA2B,EAAA;IAC7D,MAAM,MAAM,GAAG,4BAA4B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC7D,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,MAAM;IACf;IACA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC3C,GAAG,CAAC,OAAe,EAAE,IAAiB,EAAA;AACpC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,OAAO,SAAS;YAClB;YACA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7C,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,OAAO,uBAAuB,CAAC,YAAY,EAAE,IAAI,CAAC;QACpD,CAAC;QACD,GAAG,CAAC,OAAe,EAAE,IAAiB,EAAA;AACpC,YAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7E,CAAC;QACD,OAAO,GAAA;YACL,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;QACnD,CAAC;QACD,wBAAwB,CAAC,OAAe,EAAE,IAAiB,EAAA;AACzD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACxE,OAAO;AACL,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,KAAK,EAAE,uBAAuB,CAAC,YAAY,EAAE,IAAI,CAAC;iBACnD;YACH;AACA,YAAA,OAAO,SAAS;QAClB,CAAC;QACD,GAAG,GAAA;YACD,UAAU,CAAC,CAAA,gEAAA,CAAkE,CAAC;QAChF,CAAC;QACD,cAAc,GAAA;YACZ,UAAU,CAAC,CAAA,iEAAA,CAAmE,CAAC;QACjF,CAAC;AACF,KAAA,CAAC;AACF,IAAA,4BAA4B,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;AACrD,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,qBAAqB,CAAC,YAA2B,EAAA;AAC/D,IAAA,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC;AACnD;;AChEA;;;;;;;;AAQG;AAMG,SAAU,6BAA6B,CAAC,KAAa,EAAA;AACzD,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;AAC/B,IAAA,MAAM,QAAQ,GAAI,KAAiC,CAAC,uBAAuB,CAAC;AAC5E,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;IACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,UAAU,CAAC,CAAA,EAAG,uBAAuB,CAAA,6BAAA,CAA+B,CAAC;IACvE;AACA,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;QAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,YAAA,UAAU,CAAC,CAAA,EAAG,uBAAuB,CAAA,mCAAA,CAAqC,CAAC;QAC7E;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnB,YAAA,UAAU,CAAC,CAAA,EAAG,uBAAuB,WAAW,IAAI,CAAA,gBAAA,CAAkB,CAAC;QACzE;AACA,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACjB;AACA,IAAA,OAAO,KAAK;AACd;;ACjCA;;;;;;;;;;AAUG;SASa,oBAAoB,CAClC,YAA2B,EAC3B,KAAa,EACb,eAAoC,EAAA;AAEpC,IAAA,MAAM,QAAQ,GAAI,KAAiC,CAAC,aAAa,CAAC;AAClE,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACnC;IACF;IACA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrD,QAAA,UAAU,CAAC,CAAA,EAAG,aAAa,CAAA,kEAAA,CAAoE,CAAC;IAClG;AACA,IAAA,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,EAAE;QACjF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAA,UAAU,CAAC,CAAA,EAAG,aAAa,WAAW,IAAI,CAAA,kCAAA,CAAoC,CAAC;QACjF;AACA,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,UAAU,CAAC,CAAA,EAAG,aAAa,WAAW,IAAI,CAAA,qBAAA,CAAuB,CAAC;QACpE;QACA,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC;AACvD,QAAA,KAAK,CAAC,SAAS,CAAC,OAA0B,CAAC;IAC7C;AACF;;ACzCA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAKH;;;AAGG;AACH,MAAM,SAAS,GAAkB,MAAM,CAAC,oCAAoC,CAAC;AAO7E,MAAM,0BAA0B,GAAG,IAAI,OAAO,EAA6C;AAE3F;;AAEG;AACG,SAAU,eAAe,CAAC,YAA2B,EAAE,IAAY,EAAA;IACvE,QACE,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;AAE9F;AAEA;;AAEG;AACG,SAAU,eAAe,CAC7B,YAA2B,EAC3B,IAAY,EACZ,MAAoB,EACpB,KAAc,EAAA;IAEd,IAAI,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1D,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,QAAA,OAAO,GAAG,IAAI,GAAG,EAAE;AACnB,QAAA,0BAA0B,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC;IACvD;IACA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACtC;AAEA;;;;;;;;;;AAUG;AACG,SAAU,iBAAiB,CAAC,YAA2B,EAAE,SAA8B,EAAA;IAC3F,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5D,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QAClC;IACF;IACA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACtB;IACF;AACF;AAEA;;;;;AAKG;AACG,SAAU,sBAAsB,CAAC,YAA2B,EAAE,IAAY,EAAA;IAC9E,MAAM,OAAO,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5D,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QAClC;IACF;IACA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,IAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;;QAE/B;IACF;AACA,IAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;AAChB,QAAA,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS;AACxD,QAAA,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;AACtD,KAAA,CAAC;AACJ;;AC7GA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAIH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiB;AAEpD;;AAEG;AACG,SAAU,qBAAqB,CAAC,YAA2B,EAAA;AAC/D,IAAA,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvC;AAEA;;AAEG;AACG,SAAU,wBAAwB,CAAC,YAA2B,EAAA;AAClE,IAAA,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1C;AAEA;;AAEG;SACa,sBAAsB,GAAA;AACpC,IAAA,OAAO,mBAAmB;AAC5B;;AC/CA;;;;;;;;;AASG;AAOH,MAAM,sBAAsB,GAAsD,IAAI,OAAO,EAAE;AAE/F;;AAEG;AACG,SAAU,gBAAgB,CAAC,YAA2B,EAAE,OAAkC,EAAA;AAC9F,IAAA,sBAAsB,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC;AACnD;AAEA;;AAEG;AACG,SAAU,gBAAgB,CAAC,YAA2B,EAAA;IAC1D,OAAO,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,EAAwB;AACpF;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,eAAe,CAAC,YAA2B,EAAA;;;;IAIzD,wBAAwB,CAAC,YAAY,CAAC;IACtC,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC;AACxD,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QAClC;IACF;IACA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;AACpC,QAAA,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,UAAU,GAAG,IAAI;AACvB,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI;AAClB,QAAA,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC;IAClD;AACF;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,YAA2B,EAAA;IAC7D,eAAe,CAAC,YAAY,CAAC;;;IAG7B,wBAAwB,CAAC,YAAY,CAAC;AACtC,IAAA,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7C;;ACxEA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AAUH;AACA,MAAM,UAAU,GAAe,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK;AAErD;AACA,MAAM,eAAe,GAAwB,IAAI,GAAG,EAAU;AAExD,SAAU,yBAAyB,CAAC,YAA2B,EAAE,KAAa,EAAA;AAClF,IAAA,MAAM,QAAQ,GAAI,KAAiC,CAAC,kBAAkB,CAAC;AACvE,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;;AAEnC,QAAA,iBAAiB,CAAC,YAAY,EAAE,eAAe,CAAC;QAChD;IACF;IACA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrD,QAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,CAAA,8DAAA,CAAgE,CAAC;IACnG;AACA,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB;AAC/C,IAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,EAAE;AAC7E,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,CAAA,uCAAA,CAAyC,CAAC;QAC5E;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC5B,UAAU,CAAC,GAAG,kBAAkB,CAAA,QAAA,EAAW,IAAI,CAAA,iCAAA,EAAoC,SAAS,CAAA,kBAAA,CAAoB,CAAC;QACnH;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC3B,UAAU,CAAC,GAAG,kBAAkB,CAAA,QAAA,EAAW,IAAI,CAAA,iCAAA,EAAoC,QAAQ,CAAA,kBAAA,CAAoB,CAAC;QAClH;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,+CAAA,CAAiD,CAAC;QACnG;;;;;AAKA,QAAA,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;AAC5B,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,gGAAA,CAAkG,CAAC;QACpJ;QACA,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,gDAAA,CAAkD,CAAC;QACpG;QACA,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,gDAAA,CAAkD,CAAC;QACpG;QACA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;AAC3C,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,yDAAA,CAA2D,CAAC;QAC7G;QACA,MAAM,UAAU,GAAG,GAA8B;AACjD,QAAA,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE;AAC3C,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,4BAAA,CAA8B,CAAC;QAChF;QACA,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,WAAW;QACtD,IAAI,OAAO,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;AACpD,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,0BAAA,CAA4B,CAAC;QAC9E;QACA,IAAI,OAAO,IAAI,EAAE,SAAS,IAAI,UAAU,CAAC,EAAE;AACzC,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,wEAAA,CAA0E,CAAC;QAC5H;QACA,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,WAAW;QACtD,IAAI,OAAO,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;AACpD,YAAA,UAAU,CAAC,CAAA,EAAG,kBAAkB,WAAW,IAAI,CAAA,0BAAA,CAA4B,CAAC;QAC9E;AACA,QAAA,MAAM,KAAK,GAAiB;YAC1B,IAAI;AACJ,YAAA,UAAU,EAAE;AACV,gBAAA,IAAI,EAAG,UAAU,CAAC,IAA8C,IAAI,IAAI;gBACxE,MAAM,EAAE,UAAU,CAAC,MAAsB;AACzC,gBAAA,IAAI,EAAG,UAAU,CAAC,IAA+B,IAAI,UAAU;gBAC/D,OAAO,EAAE,UAAU,CAAC,OAAO;AAC5B,aAAA;AACD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI,GAAG,EAAE;SACxB;;AAED,QAAA,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO;QACxC;AACA,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC1B;AACA,IAAA,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC;;;AAGvC,IAAA,iBAAiB,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D;;ACvHA;;;;;;;;;;;;;;;AAeG;AAWH,MAAM,6BAA6B,GAAmC,IAAI,OAAO,EAAE;AACnF,MAAM,4BAA4B,GAAmC,IAAI,OAAO,EAAE;AAElF,SAAS,0BAA0B,CACjC,YAA2B,EAC3B,aAAqB,EACrB,IAAsC,EAAA;IAEtC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACpC,GAAG,CAAC,OAAe,EAAE,IAAiB,EAAA;AACpC,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,OAAO,SAAS;YAClB;YACA,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACtD,YAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,GAAG,CAAC,OAAe,EAAE,IAAiB,EAAA;AACpC,YAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7E,CAAC;QACD,OAAO,GAAA;AACL,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,CAAC;QACD,wBAAwB,CAAC,OAAe,EAAE,IAAiB,EAAA;AACzD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,OAAO,SAAS;YAClB;YACA,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACtD,YAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,gBAAA,OAAO,SAAS;YAClB;YACA,OAAO;AACL,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;aACnB;QACH,CAAC;QACD,GAAG,GAAA;AACD,YAAA,UAAU,CAAC,CAAA,EAAG,aAAa,CAAA,wDAAA,CAA0D,CAAC;QACxF,CAAC;QACD,cAAc,GAAA;AACZ,YAAA,UAAU,CAAC,CAAA,EAAG,aAAa,CAAA,yDAAA,CAA2D,CAAC;QACzF,CAAC;AACF,KAAA,CAAC;AACJ;AAEM,SAAU,wBAAwB,CAAC,YAA2B,EAAA;IAClE,MAAM,MAAM,GAAG,6BAA6B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9D,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,MAAM,KAAK,GAAG,0BAA0B,CACtC,YAAY,EACZ,kCAAkC,EAClC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CACxB;AACD,IAAA,6BAA6B,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;AACtD,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,uBAAuB,CAAC,YAA2B,EAAA;IACjE,MAAM,MAAM,GAAG,4BAA4B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC7D,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,MAAM,KAAK,GAAG,0BAA0B,CACtC,YAAY,EACZ,iCAAiC,EACjC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CACvB;AACD,IAAA,4BAA4B,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;AACrD,IAAA,OAAO,KAAK;AACd;AAEA;;;AAGG;AACG,SAAU,oBAAoB,CAAC,YAA2B,EAAA;AAC9D,IAAA,6BAA6B,CAAC,MAAM,CAAC,YAAY,CAAC;AAClD,IAAA,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC;AACnD;;AChGA,MAAM,oBAAoB,GAA6B,IAAI,GAAG,EAAE;AAEhE;;AAEG;AACG,SAAU,2BAA2B,CAAC,QAA6B,EAAA;AACvE,IAAA,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpC;AASA;;;;AAIG;AACH,SAAS,0BAA0B,CAAC,KAAyC,EAAA;AAC3E,IAAA,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE;QAC3C,QAAQ,CAAC,KAAK,CAAC;IACjB;AACF;AAEA,MAAM,OAAO,CAAA;IACH,uBAAuB,GAA4B,EAAE;AAC7D,IAAA,WAAA,GAAA;IACA;AAEA,IAAA,sBAAsB,CAAC,eAAsC,EAAA;QAC3D,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC;QAClD,IAAI,mBAAmB,EAAE;YACvB,cAAc,CAAC,MAAK;AAClB,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB;AACtD,gBAAA,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACjC,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;AACtC,YAAA,CAAC,CAAC;QACJ;IACF;;AAGA,IAAA,eAAe,CAAC,iBAA0C,EAAA;AACxD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC;IACtC;AAEQ,IAAA,YAAY,CAAC,iBAA0C,EAAA;;;;AAI7D,QAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC;QACrD,MAAM,eAAe,GAAmB,EAAE;AAC1C,QAAA,KAAK,MAAM,eAAe,IAAI,kBAAkB,EAAE;AAChD,YAAA,MAAM,QAAQ,GAAG,mCAAmC,CAAC,eAAe,CAAC;AACrE,YAAA,KAAI,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC7B,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,KAAK,KAAK,EAAE;;oBAE7C;gBACF;AACA,gBAAA,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/B;QACF;QACA,uBAAuB,CACrB,eAAe,CAChB;;;QAGD,0BAA0B,CAAC,kBAAkB,CAAC;IAChD;AAED;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAEb,UAAU,GAAA;AACxB,IAAA,OAAO,OAAO;AAChB;;AC5FA;;;;;;;;;;;;;;;;AAgBG;AAeH;AACA,IAAI,SAAS,GAAsC,IAAI;AAEvD;;;AAGG;AACG,SAAU,uBAAuB,CAAC,YAA2B,EAAE,OAAsB,EAAA;AACzF,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB;IACF;IACA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC5E,IAAA,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AAChF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACG,SAAU,SAAS,CAAC,YAA2B,EAAE,KAAmB,EAAA;AACxE,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI;AACpC,IAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,SAAS;IAClB;IACA,MAAM,iBAAiB,GAAG,SAAS;AACnC,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB;IACjD,SAAS,GAAG,QAAQ;IACpB,IAAI,SAAS,GAAY,SAAS;AAClC,IAAA,IAAI;QACF,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;YAAU;;;QAGR,SAAS,GAAG,iBAAiB;IAC/B;AACA,IAAA,IAAI,SAAS,YAAY,OAAO,EAAE;QAChC,UAAU,CACR,GAAG,kBAAkB,CAAA,QAAA,EAAW,KAAK,CAAC,IAAI,CAAA,mDAAA,CAAqD,CAChG;IACH;IACA,MAAM,cAAc,GAAG,CAAA,EAAG,kCAAkC,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAE;IACvF,MAAM,aAAa,GAAG,CAAA,EAAG,iCAAiC,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAE;AACrF,IAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ;AAC9C,QAAA,IACE,GAAG,CAAC,gBAAgB,CAAC,YAAY,KAAK,YAAY;aACjD,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,CAAC,EACrG;AACA,YAAA,UAAU,CACR,CAAA,EAAG,kBAAkB,CAAA,QAAA,EAAW,KAAK,CAAC,IAAI,CAAA,yCAAA,EAA4C,QAAQ,CAAC,IAAI,CAAA,iFAAA,CAAmF,CACvL;QACH;AACA,QAAA,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE;AAC9B,YAAA,UAAU,CACR,CAAA,EAAG,kBAAkB,CAAA,QAAA,EAAW,KAAK,CAAC,IAAI,CAAA,sCAAA,EAAyC,QAAQ,CAAC,IAAI,CAAA,2CAAA,CAA6C,CAC9I;QACH;IACF;AACA,IAAA,KAAK,CAAC,YAAY,GAAG,QAAQ;AAC7B,IAAA,OAAO,SAAS;AAClB;;ACnHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;AAII,eAAe,aAAa,CACjC,MAAoB,EACpB,IAAa,EACb,MAAmB,EACnB,IAAkB,EAAA;;;;;;;;;;;IAYlB,IAAI,QAAQ,GAAkC,IAAI;;;;;;;IAOlD,IAAI,QAAQ,GAAkC,IAAI;IAClD,MAAM,OAAO,GAAG,MAAW;AACzB,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACtC,YAAA,OAAO;QACT;QACA,QAAQ,GAAG,QAAQ;;;AAGnB,QAAA,IAAI;AACF,YAAA,KAAK,QAAQ,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,MAAK,EAAE,CAAC,CAAC;QACvD;AAAE,QAAA,MAAM;;QAER;AACF,IAAA,CAAC;AACD,IAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzD,IAAA,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3C,QAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;AAC5D,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;;;;;AAKlB,YAAA,OAAO,EAAE;YACT;QACF;AACA,QAAA,SAAS;AACP,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AACpC,YAAA,IAAI,MAAM,CAAC,IAAI,EAAE;gBACf;YACF;AACA,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,gBAAA,OAAO;YACT;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACzB;AACA,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,OAAO;QACT;QACA,IAAI,CAAC,IAAI,EAAE;IACb;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,YAAA,OAAO;QACT;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf;YAAU;AACR,QAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC9C;AACF;AAEA,SAAS,OAAO,CAAC,QAAwB,EAAE,MAAmB,EAAA;;;;IAI5D,IAAI,OAAQ,QAAmC,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE;AACtF,QAAA,OAAO,QAAkC;IAC3C;;;;AAIA,IAAA,IAAI,OAAQ,QAAoC,EAAE,SAAS,KAAK,UAAU,EAAE;AAC1E,QAAA,MAAM,IAAI,SAAS,CACjB,mGAAmG,CACpG;IACH;AACA,IAAA,OAAO,uBAAuB,CAAC,QAAmC,EAAE,MAAM,CAAC;AAC7E;AAEA,gBAAgB,uBAAuB,CACrC,MAA+B,EAC/B,MAAmB,EAAA;AAEnB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE;;;;;;;;IAQjC,MAAM,OAAO,GAAG,MAAW;AACzB,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC,CAAC;AACvC,IAAA,CAAC;AACD,IAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzD,IAAA,IAAI;AACF,QAAA,SAAS;YACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;YAC3C,IAAI,IAAI,EAAE;gBACR;YACF;AACA,YAAA,MAAM,KAAK;QACb;IACF;YAAU;AACR,QAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;QAC5C,MAAM,CAAC,WAAW,EAAE;IACtB;AACF;;AChKA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AAiBH;;;;;;;;;;AAUG;AACG,SAAU,YAAY,CAAC,YAA2B,EAAA;AACtD,IAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,CAAC;AAC9C,IAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;QACtB;IACF;IACA,qBAAqB,CAAC,YAAY,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;AACpC,QAAA,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;IAClC;AACF;AAEA;;;;;;;;;AASG;AACG,SAAU,WAAW,CAAC,YAA2B,EAAE,KAAmB,EAAA;AAC1E,IAAA,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;AACzB,IAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,IAAA,KAAK,CAAC,UAAU,GAAG,UAAU;;;IAI7B,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;;;IAIhD,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;QAC7C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO;AAC9C,IAAA,CAAC,CAAC;IAEF,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;AAEvD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;AACnC,IAAA,MAAM,IAAI,GAAiB;AACzB,QAAA,IAAI,CAAC,KAAc,EAAA;;YAEjB,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC7C,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;AAC/D,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,GAAA;YACF,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;QACvD,CAAC;AACD,QAAA,IAAI,CAAC,KAAc,EAAA;;YAEjB,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;;;YAGvD,UAAU,CAAC,KAAK,EAAE;QACpB,CAAC;KACF;AACD,IAAA,KAAK,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3E;AAEA;;;;;;;;;;;;;AAaG;AACG,SAAU,kBAAkB,CAChC,YAA2B,EAC3B,KAAmB,EACnB,MAAoB,EACpB,KAAc,EAAA;AAEd,IAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACrB,IAAA,KAAK,CAAC,KAAK,GAAG,KAAK;IACnB,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC;AACtD,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM;AAC5C,IAAA,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AAClD,IAAA,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE;QACnC;IACF;IACA,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;IACxD,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;QAC7C,IAAI,aAAa,EAAE;AACjB,YAAA,KAAK,CAAC,WAAW,CAAC,CAAA,EAAG,kCAAkC,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;QACrF;QACA,IAAI,YAAY,EAAE;AAChB,YAAA,KAAK,CAAC,WAAW,CAAC,CAAA,EAAG,iCAAiC,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAE,CAAC;QACpF;AACF,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACH,SAAS,2BAA2B,CAAC,KAAyC,EAAA;AAC5E,IAAA,MAAM,mBAAmB,GAAG,sBAAsB,EAAE;AACpD,IAAA,IAAI,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE;;QAElC;IACF;IACA,MAAM,IAAI,GAA2D,EAAE;AACvE,IAAA,KAAK,MAAM,YAAY,IAAI,mBAAmB,EAAE;QAC9C,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;AAC3D,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE;AACpC,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;oBAClC;gBACF;YACF;QACF;IACF;IACA,KAAK,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;;;;;;;AAO1C,QAAA,IACE,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AACtC,YAAA,gBAAgB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EACxD;YACA;QACF;AACA,QAAA,IAAI;AACF,YAAA,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;QAClC;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;;;;;;AAMzB,YAAA,IACE,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,gBAAA,gBAAgB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EACxD;gBACA,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACrD;QACF;IACF;AACF;AAEA,2BAA2B,CAAC,2BAA2B,CAAC;;ACrOlD,SAAU,QAAQ,CAAC,IAAY,EAAA;IACnC,OAAO,YAAA;AACL,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAC9B,QAAA,IAAI,KAAU;AACd,QAAA,IAAI;YACF,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AACxC,gBAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB,YAAA,CAAC,CAAC;QACJ;QAAE,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAA,SAAA,CAAW,EAAE,CAAC,CAAC;AAChE,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH;AAEM,SAAU,QAAQ,CAAC,IAAY,EAAA;AACnC,IAAA,OAAO,UAA6B,KAAU,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAK;YAClC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AACxC,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;AACrB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACH;AAEM,SAAU,MAAM,CAAC,IAAY,EAAE,OAAgB,EAAA;IACnD,IAAI,OAAO,EAAE;QACX,OAAO,UAA6B,GAAG,IAAW,EAAA;AAChD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,SAAS;AAC9B,YAAA,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAK;AACzC,gBAAA,IAAI,MAAW;gBACf,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,KAAK,KAAI;oBAC1D,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBACrC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC;AACvB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;IACH;IACA,OAAO,UAA6B,GAAG,IAAW,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAC9B,QAAA,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAK;AACzC,YAAA,IAAI,MAAW;YACf,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;gBACxC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC/B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AACH;AAEM,SAAU,kBAAkB,CAAC,IAAY,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B;;ACxDM,SAAU,gBAAgB,CAAC,OAAe,EAAE,SAAmB,EAAA;IACnE,MAAM,UAAU,GAA0B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;AACrE,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,KAAK,EAAE,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,QAAA,CAAU;AACxC,KAAA,CAAC,CAAC;IACH,OAAO;AACL,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,OAAO,EAAE,CAAC;QACV,UAAU;KACX;AACH;AAEM,SAAU,sBAAsB,CAAC,OAAe,EAAE,SAAmB,EAAA;IACzE,MAAM,GAAG,GAA2B,EAAE;AACtC,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,QAAA,CAAU;IAClD;AACA,IAAA,OAAO,GAAG;AACZ;;SCjBgB,SAAS,CAAC,WAAoB,EAAE,UAAsB,EAAE,KAAa,EAAA;IACnF,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE;;IAGjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1B,QAAA,UAAU,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,6DAAA,CAA+D,CAAC;IAC7F;AACA,IAAA,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;;AAE/B,QAAA,OAAO,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAA,+CAAA,CAAiD,CAAC;QAChG;IACF;;IAGA,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,IAAA,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;AACzC,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAsB;;IAGxD,MAAM,SAAS,GAAa,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACnE,UAAE,KAAK,CAAC,oBAAoB;UAC1B,EAAE;AACN,IAAA,MAAM,UAAU,GAAuB,SAAS,CAAC,MAAM,GAAG;AACxD,UAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS;UACnC,IAAI;AACR,IAAA,MAAM,gBAAgB,GAA2B,SAAS,CAAC,MAAM,GAAG;AAClE,UAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS;UACzC,EAAE;;IAGN,MAAM,gBAAgB,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA,YAAA,CAAuB;AAExE,IAAA,MAAM,UAAU,GAAG,cAAc,WAAW,CAAA;AAC1C,QAAA,OAAO,QAAQ,GAAG,QAAQ;AAC1B,QAAA,OAAO,cAAc,GAAG,cAAc;AACtC,QAAA,OAAO,UAAU,GAAG,UAAU;AAC9B,QAAA,OAAO,gBAAgB,GAAG,gBAAgB;QAElC,OAAO,GAAsB,IAAI;QAEzC,iBAAiB,GAAA;AACf,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC;gBAAE;AACjD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAGrE,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAiB;gBAC5E,IAAI,OAAO,EAAE;AACX,oBAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAK;AAClC,wBAAA,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,gBAAgB,CAAC;AAC1D,oBAAA,CAAC,CAAC;gBACJ;YACF;QACF;AAEA,QAAA,IAAI,YAAY,GAAA;YACd,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAiB;QACtE;KACD;;IAGD,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAC3D,IAAA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QACtD,IAAI,kBAAkB,CAAC,IAAI,CAAC;YAAE;QAE9B,MAAM,OAAO,GAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;AAC5E,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe;YAChE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC;aAAO;AACL,YAAA,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC5B,YAAA,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC9B;QACA,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC;IAC5D;;AAGA,IAAA,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;AAC5C;;AClEA;;;AAGG;AACH,MAAM,MAAM,GAAkC,IAAI,GAAG,EAAE;AAEvD;;;;;;;;AAQG;AACH,MAAM,eAAe,CAAA;AACV,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,KAAK;AACL,IAAA,aAAa;AACb,IAAA,YAAY;AACZ,IAAA,eAAe;AACf,IAAA,QAAQ;AAEjB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,IAAY,EAAA;;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,EAAE;QAC3C,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,QAAQ,GAAG,EAAE;QACjB,IAAI,aAAa,GAAG,CAAC;QACrB,IAAI,YAAY,GAAiB,MAAM;QACvC,MAAM,eAAe,GAAsB,EAAE;;AAG7C,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,OAAO,KAAK,GAAG,EAAE;;AAEnB,gBAAA,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG;AAC3B,gBAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,gBAAA,eAAe,EAAE;AACjB,gBAAA,aAAa,EAAE;YACjB;iBAAO;AACL,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;AAEzB,oBAAA,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG;AAC3B,oBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,oBAAA,aAAa,EAAE;AACf,oBAAA,aAAa,EAAE;gBACjB;YACF;;YAEA,QAAQ,IAAI,OAAO;AACnB,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpB,YAAA,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;QACjD;;QAEA,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AACnD,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC;;QAG5C,IAAI,eAAe,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;AAC5C,YAAA,IAAI,eAAe,KAAK,aAAa,EAAE;;gBAErC,YAAY,GAAG,SAAS;YAC1B;AAAO,iBAAA,IAAI,aAAa,KAAK,aAAa,EAAE;;gBAE1C,YAAY,GAAG,KAAK;YACtB;iBAAO;;gBAEL,YAAY,GAAG,SAAS;YAC1B;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AACD;AAED;;;;;;;;;AASG;AACG,SAAU,kBAAkB,CAAC,IAAW,EAAA;AAC5C,IAAA,IAAI,QAAsC;;IAE1C,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC/F;;AClIA;;;;;;;;;;;;;;AAcG;AAKI,eAAe,iBAAiB,CACrC,MAAc,EACd,KAAkB,EAClB,QAAa,EACb,QAAuB,EAAA;IAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC;AACnE,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/B;AACF;;AC7BA;;;;;;;;;;;;;AAaG;AAKG,SAAU,oBAAoB,CAClC,MAAc,EACd,KAAkB,EAClB,QAAa,EACb,QAAuB,EAAA;IAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC;AACtE,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB;AACF;;ACzBA,MAAM,gCAAgC,GAAgD,IAAI,OAAO,EAAE;AAE7F,SAAU,mCAAmC,CACjD,OAA8B,EAAA;IAE9B,OAAO,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AAC9D;AAEM,SAAU,mCAAmC,CACjD,OAA8B,EAC9B,UAA8B,EAAA;AAE9B,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,QAAA,gCAAgC,CAAC,MAAM,CAAC,OAAO,CAAC;IAClD;SAAO;AACL,QAAA,gCAAgC,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;IAC3D;AACF;AAEM,SAAU,qCAAqC,CACnD,OAA8B,EAAA;IAE9B,MAAM,UAAU,GAAG,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC;IAChE,IAAI,UAAU,EAAE;AACd,QAAA,UAAU,CAAC,KAAK,GAAG,IAAI;IACzB;AACF;;AC1BM,SAAU,eAAe,CAC7B,OAAsB,EACtB,OAAsB,EAAA;;AAGtB,IAAA,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,QAAQ,IAAI,IAAI;AAC3D,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7C,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;;;AAGzC,gBAAA,YAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACzE;QACF;IACF;AACF;;ACpBA;;;;;;;;;;;;;;;;;;AAkBG;AAeH;;;;;;;;;AASG;AACH,SAAS,aAAa,CAAC,SAAiB,EAAE,QAAkB,EAAA;IAC1D,IAAI,KAAK,GAAQ,SAAS;AAC1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAExC,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;AAC3B,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzC;AACA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,aAAa,CACpB,MAAiB,EACjB,OAAwB,EACxB,QAAc,EACd,OAAwB,EACxB,YAA2B,EAAA;IAE3B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,IAAA,IAAI,YAAY,KAAK,4BAA4B,EAAE;;AAEjD,QAAA,OAAO,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACpF;AACA,IAAA,IAAI,YAAY,KAAK,kCAAkC,EAAE;;;;;AAKvD,QAAA,OAAO,aAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzF;AACA,IAAA,IAAI,YAAY,KAAK,iCAAiC,EAAE;AACtD,QAAA,OAAO,aAAa,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxF;IACA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;;AAEnC,QAAA,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvD,YAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5B,YAAA,IAAI;AACF,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC7D;oBAAU;gBACR,OAAO,CAAC,UAAU,EAAE;YACtB;QACF;aAAO;AACL,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnD;IACF;SAAO;AACL,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,CAAA,yCAAA,EAA4C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AAC9H,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC1E,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AAC5B,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,UAAU,CAAC,CAAA,4CAAA,EAA+C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;YAC5H,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;QACxC;aAAO;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;QAC9C;IACF;AACF;AAEA,SAAS,sBAAsB,CAC7B,MAAiB,EACjB,OAAwB,EACxB,QAAc,EACd,OAAwB,EACxB,YAA2B,EAAA;IAE3B,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvE,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7E,IAAA,MAAM,UAAU,GAAG,mCAAmC,CAAC,UAAU,CAAC;IAClE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,KAAK,EAAE;QACrD,OAAO,UAAU,CAAC,KAAK;IACzB;AACA,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;IAC7E,mCAAmC,CAAC,UAAU,EAAE;AAC9C,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE;AACR,KAAA,CAAC;AACF,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,YAAY,CAC1B,MAAiB,EACjB,OAAwB,EACxB,QAAc,EACd,OAAwB,EAAA;AAExB,IAAA,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;;AAEjC,IAAA,uBAAuB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;AACtD,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC;QAClC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrE,IAAI,SAAS,EAAE;AACb,QAAA,OAAO,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;IACjF;SAAO;AACL,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;IACxE;AACF;;AC5IA;;;;;;;;;;;;;;;;AAgBG;AAKG,SAAU,mBAAmB,CACjC,OAAsB,EACtB,cAAsB,EAAA;AAEtB,IAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,CAAC,EAAE;AACpC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB;AACxC,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;IACA,MAAM,KAAK,GAAuB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC;AACtF,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,QAAA,OAAO,IAAI;IACb;IACA,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI;AAC7C;;AClCA,MAAM,sBAAsB,GAAsC,IAAI,OAAO,EAAE;AAEzE,SAAU,oBAAoB,CAAC,OAAsB,EAAA;IACzD,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AACpD;AAEM,SAAU,oBAAoB,CAAC,OAAsB,EAAE,QAA0B,EAAA;AACrF,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC;IACxC;SAAO;AACL,QAAA,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC/C;AACF;;ACEA,MAAM,oBAAoB,GAAG,IAAI;AAEjC,SAAS,UAAU,CAAC,QAAmB,EAAE,UAAsB,EAAA;IAC7D,QAAQ,UAAU;AAChB,QAAA,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,UAAU;AAC5B,QAAA,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,UAAU;AAC5B,QAAA,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,WAAW;AAC7B,QAAA,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,cAAc;AAChC,QAAA,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,cAAc;AAChC,QAAA;AACE,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,gBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,CAAA,CAAE,CAAC;YACnD;AACA,YAAA,OAAO,EAAE;;AAEf;AAaA,SAAS,mBAAmB,CAC1B,OAAsB,EACtB,oBAA4B,EAC5B,eAAkC,EAAA;IAElC,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;AACpE,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC;IAC9C,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC;IACnF,MAAM,aAAa,GAAG,kBAAkB,CAAC,cAAc,EAAE,eAAe,CAAC;IACzE,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,iBAAiB,EAAE,eAAe,CAAC;AACvF,IAAA,MAAM,SAAS,GAAG,sCAAsC,CAAC,gBAAgB,CAAC;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC;AACtE,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;IAE7E,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC5D,IAAI,oBAAoB,KAAK,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;IAChD;SAAO;AACL,QAAA,KAAI,MAAM,SAAS,IAAI,WAAW,EAAE;YAClC,mBAAmB,CACjB,OAAO,EACP,oBAAoB,GAAG,CAAC,EACxB,SAAS,CACV;QACH;IACF;AACF;AAgBA,SAAS,eAAe,CACtB,OAAgB,EAChB,YAA2B,EAC3B,QAA0C,EAAA;AAE1C,IAAA,MAAM,KAAK,GAAiB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEjE,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG;AACvC,QAAA,IAAI,KAAK,GAAG,oBAAoB,EAAE;YAChC,UAAU,CAAC,CAAA,4BAAA,EAA+B,oBAAoB,CAAA,0DAAA,EAA6D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;QACrJ;QACA,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAChC;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC;AACjB,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI;AACxC,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC;;QAG3B,MAAM,WAAW,GAAiB,EAAE;AAEpC;;;;AAIG;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QACpD,IAAI,UAAU,EAAE;AACd,YAAA,KAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC3B,gBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC;AACpC,gBAAA,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,WAAW,KAAK,QAAQ,EAAE;;oBAE/E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;AAChE,oBAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;oBAC/E,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7E,oBAAA,MAAM,SAAS,GAAG,sCAAsC,CAAC,UAAU,CAAC;AACpE,oBAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;AACvE,oBAAA,KAAI,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE;wBAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC;AAC7D,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;AAC9B,wBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;oBAC7D;gBACF;qBAAO;oBACL,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;AACrE,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;AAC9B,oBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC7D;YACF;QACF;AACA;;;;;;;;;;;;;;AAcG;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QACtD,IAAI,WAAW,EAAE;AACf,YAAA,KAAI,MAAM,GAAG,IAAI,WAAW,EAAE;AAC5B,gBAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC;gBACpC,MAAM,WAAW,GAA0B,EAAE;AAC7C,gBAAA,IAAI,WAAW,CAAC,aAAa,GAAG,CAAC,EAAE;;;;oBAIjC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;oBAClE,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,aAAa,GAAG,WAAW,KAAK,CAAC;oBACjE,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,SAA4B;AAChC,wBAAA,IAAI,WAAW,GAAG,CAAC,EAAE;;;;AAInB,4BAAA,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE;gCAC9B,UAAU,CAAC,wEAAwE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;4BAC7G;4BACA,SAAS,GAAG,OAAO,CAAC,SAAU,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;wBACpD;6BAAO;;;4BAGL,SAAS,GAAG,IAAI;wBAClB;AACA,wBAAA,MAAM,aAAa,GAAkB;4BAEnC,YAAY,EAAE,OAAO,CAAC,YAAY;AAClC,4BACA,iBAAiB,EAAE,EAAE;4BACrB,aAAa,EAAE,WAAW,CAAC,aAAa;4BACxC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;4BACpD,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;yBAC/B;AACD,wBAAA,mBAAmB,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;wBAC1D,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC;oBACtD;yBAAO;;;AAGL,wBAAA,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE;4BAC9B,UAAU,CAAC,wEAAwE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;wBAC7G;AACA,wBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;AACvD,wBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC7B;gBACF;qBAAO;;;AAGL,oBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB;AACA,gBAAA,KAAI,MAAM,SAAS,IAAI,WAAW,EAAE;oBAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC;AAC7D,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;AAC9B,oBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC7D;YACF;QACF;;AAGA,QAAA,KAAI,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B;IACF;AACF;SAEgB,cAAc,CAC5B,SAAiB,EACjB,YAA2B,EAC3B,YAA2B,EAC3B,gBAAuC,EACvC,iBAAwC,EACxC,WAAwB,EACxB,UAAuB,EACvB,UAAsB,EACtB,QAA0C,EAAA;AAE1C,IAAA,MAAM,OAAO,GAAY;AACvB,QACA,YAAY,EAAE,YAAY;AAC1B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,UAAU,EAAE,iBAAiB;QAC7B,MAAM,EAAE,IAAI,GAAG,EAAiB;AAChC,QAAA,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,IAAI,GAAG,EAAiB;AACjC,QAAA,UAAU,EAAE,UAAU;AACtB,QAAA,UAAU,EAAE,UAAU;KACvB;AACD,IAAA,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnC;;ACzPA;;;;;;;;;;;;;;;;AAgBG;AAiBH,SAAS,aAAa,CACpB,MAAiB,EACjB,OAAwB,EACxB,UAAiC,EACjC,KAAc,EACd,QAAc,EACd,OAAwB,EAAA;AAExB,IAAA,IAAI;QACF,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE;AACnC,YAAA,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;;AAE/D,gBAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5B,gBAAA,IAAI;AACF,oBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;gBACpE;wBAAU;oBACR,OAAO,CAAC,UAAU,EAAE;gBACtB;YACF;iBAAO;AACL,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAC1D;QACF;aAAO;AACL,YAAA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,CAAA,yCAAA,EAA4C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AAC9H,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC1E,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,YAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AAC5B,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,UAAU,CAAC,CAAA,4CAAA,EAA+C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;gBAC5H,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC;YAC/C;iBAAO;gBACL,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;YACrD;QACF;IACF;YAAU;AACR,QAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,QAAA,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC;;AAE1C,QAAA,cAAc,CACZ,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,YAAY,EACpB,OAAO,EACP,OAAO,CAAC,YAAY,CAAC,gBAAgB,EACrC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EACtC,OAAO,CAAC,YAAY,CAAC,SAAS,EAC9B,QAAuB,EACvB,KAAK,EACL,CAAC,UAAyB,KAAI;;YAE5B,IAAI,UAAU,KAAK,OAAO;gBAAE;AAC5B,YAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrF,MAAM,aAAa,GAAG,0BAA0B,CAAC,cAAc,EAAE,UAAU,CAAC,SAAS,CAAC;YACtF,qCAAqC,CAAC,aAAa,CAAC;;AAEpD,YAAA,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;AAC/C,QAAA,CAAC,CACF;IACH;AACF;AAEA,SAAS,qBAAqB,CAC5B,MAAiB,EACjB,OAAwB,EACxB,UAAiC,EACjC,KAAc,EACd,QAAc,EACd,OAAwB,EAAA;;AAGxB,IAAA,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,CAAA,yCAAA,EAA4C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AAC5H,IAAA,IAAI,QAAQ,GAAG,oBAAoB,CAAC,aAAa,CAAC;AAClD,IAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE;QAChF,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,EAAE;AAC3D,QAAA,QAAQ,GAAG;YACT,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW;SACtD;AACD,QAAA,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;IAC/C;AACA,IAAA,IAAI;AACF,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC7E;YAAU;QACR,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE;QACvF,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE;AACpH,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAU,CAAC,KAAK;QACzC,MAAM,SAAS,GAAG,CAAC,KAAK,KAAK,EAAE;AAC7B,YAAA,QAAS,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B,eAAe,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;AAC9C,QAAA,kBAAkB,CAAC,QAAQ,CAAC,GAAG,SAAS;;;AAGxC,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC;QAChD,IAAI,YAAY,CAAC,IAAI,KAAK,QAAS,CAAC,KAAK,CAAC,MAAM,EAAE;AAChD,YAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,gBAAA,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YACjC;;AAEA,YAAA,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC;QAC3C;IACF;AACF;AAEM,SAAU,YAAY,CACxB,MAAiB,EACjB,OAAwB,EACxB,KAAc,EACd,QAAc,EACd,OAAwB,EAAA;AAE1B,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;;;;;AAKzC,IAAA,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;AAC1E,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACjE,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;IACF;;AAEA,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC;QAClC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrE,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvE,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7E,IAAA,IAAI;QACF,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;QACrF;aAAO;AACL,YAAA,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7E;IACF;YAAU;QACR,IAAI,SAAS,EAAE;YACb,mCAAmC,CAAC,UAAU,EAAE;AAC9C,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;QACJ;;AAEA,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtE,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ;AACtC,YAAA,IAAI,QAAQ,YAAY,UAAU,EAAE;gBAClC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE;AACrD,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC,CAAC;YACL;QACF;IACF;AACF;;ACvLA;;;;;;;;;;;;;;;;AAgBG;AAaG,SAAU,OAAO,CACrB,MAAc,EACd,KAAkB,EAClB,QAAa,EACb,OAAsB,EAAA;AAEtB,IAAA,OAAO,CAAC,IAAY,EAAE,OAAiB,EAAE,KAAW,KAAS;AAC3D,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,QAAQ,IAAI,IAAI;AAC3D,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,YAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;;gBAExD,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC/C,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;gBACjE;YACF;QACF;QAEA,IAAI,QAAQ,CAAC,uBAAuB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;AAC5D,YAAA,UAAU,CAAC,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAC;QACvD;;QAEA,IAAI,SAAS,GAAsB,IAAI;AACvC,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/D,MAAM,sBAAsB,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,kBAAkB,CAAC,sBAAsB,EAAE,SAAS,CAAC;AAC7E,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;AACzE,YAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC;AAClD,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,gBAAA,UAAU,CAAC,CAAA,uBAAA,EAA0B,sBAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;YACrE;AACA,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,YAAA,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AAC5B,gBAAA,UAAU,CAAC,CAAA,qBAAA,EAAwB,sBAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;QACrE;;QAGA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACvD,QAAA,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,WAAW;QAChD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACzD;aAAO;YACL,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;QACzD;AACF,IAAA,CAAC;AACH;;AC3EA;;;;;AAKG;AAaH;AACA,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAA4B;AAIhE,SAAU,MAAM,CACpB,MAAc,EACd,IAAiB,EACjB,QAAa,EACb,OAAsB,EAAA;AAEpB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC1D,IAAA,OAAO,CAAC,IAAY,EAAE,OAAkB,KAAW;AACjD,QAAA,MAAM,iBAAiB,GAA4B,IAAI,GAAG,EAAE;AAC5D,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,QAAQ,IAAI,IAAI;AAC3D,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;AACzC,YAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;;gBAExD,IAAI,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC/C,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;gBACjE;YACF;QACF;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,YAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/D,MAAM,eAAe,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;gBACpE,IAAI,SAAS,EAAE;AACb,oBAAA,OAAO,GAAG,SAAS,CAAC,OAAO;oBAC3B;gBACF;YACF;AACA,YAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;gBAClC,OAAO,GAAG,EAAE;YACd;QACF;AACA,QAAA,MAAM,mBAAmB,GAAG,CAC1B,uBAAoC,EACpC,gBAAwB,EACxB,SAA4B,EAC5B,OAAiB,EACjB,QAAgB,EAChB,aAAuB,EACvB,OAAmB,KACjB;YACF,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,IAAI;AAChF,YAAA,IAAI,sBAAsB,KAAK,IAAI,EAAE;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3B;YACF;YACA,MAAM,eAAe,GAAG,kBAAkB,CAAC,sBAAsB,EAAE,SAAS,CAAC;YAC7E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC;AAC5D,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;YACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9D,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI;AACvC,YAAA,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC;AAChD,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,gBAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,oBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;oBAChC,mBAAmB,CACjB,uBAAuB,EACvB,gBAAgB,GAAG,CAAC,EACpB,SAAS,EACT,OAAO,EACP,QAAQ,GAAG,CAAC,EACZ,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EACrC,OAAO,CAAC;gBACZ;YACF;iBAAO;AACL,gBAAA,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AAClC,oBAAA,UAAU,CAAC,CAAA,qBAAA,EAAwB,sBAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;gBACnE,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,uBAAuB,CAAC,MAAM,EAAE;oBAC3D,mBAAmB,CACjB,uBAAuB,EACvB,gBAAgB,GAAG,CAAC,EACpB,SAAS,EACT,OAAO,EACP,QAAQ,GAAG,CAAC,EACZ,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EACrC,OAAO,CACR;gBACH;qBAAO;;AAEL,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACrD;YACF;AACF,QAAA,CAAC;QACD,MAAM,aAAa,GAAe,EAAE;AACpC,QAAA,mBAAmB,CACjB,QAAQ,CAAC,uBAAuB,EAChC,CAAC,EACD,IAAI,EACJ,OAAO,EACP,CAAC,EACD,EAAE,EACF,aAAa,CACd;QACD,MAAM,YAAY,GAAU,EAAE;AAC9B,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CACzB,QAAQ,CAAC,IAAI,EACb,aAAa,CAAC,CAAC,CAAC,CACjB,CAAC;QACJ;AACA,QAAA,KAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE;AAC5D,YAAA,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C;AACA,QAAA,OAAO,YAAY;AACrB,IAAA,CAAC;AACH;;ACnIF;;;;;;;;;;;;;;;;AAgBG;AAWG,SAAU,YAAY,CAC1B,MAAiB,EACjB,eAAiC,EACjC,QAAa,EACb,OAAsB,EAAA;AAEtB,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ;AACzC,IAAA,QAAQ,eAAe,CAAC,YAAY;AAClC,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI;QACb,KAAK,SAAS,EAAE;YACd,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpD,UAAU,CAAC,6BAA6B,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AAC1E,YAAA,OAAO,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBACnD,UAAU,CAAC,wBAAwB,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;QACvE;QACA,KAAK,KAAK,EAAE;YACV,IAAI,eAAe,GAAsB,IAAI;AAC7C,YAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;gBAC9D,MAAM,sBAAsB,GAAG,eAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;oBAChF,UAAU,CAAC,mCAAmC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;gBAChF,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,sBAAsB,EAAE,eAAe,CAAC;AACzF,gBAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC1F,gBAAA,MAAM,yBAAyB,GAAiB,oBAAoB,CAAC,mBAAmB,CAAC;AACvF,oBAAA,UAAU,CAAE,CAAA,qBAAA,EAAwB,sBAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;AACpE,gBAAA,MAAM,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;oBACtD,UAAU,CAAC,0BAA0B,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AACvE,gBAAA,eAAe,GAAG,yBAAyB,CAAC,aAAa,CAAC;AACxD,oBAAA,UAAU,CAAC,CAAA,qBAAA,EAAwB,sBAAsB,CAAC,IAAI,CAAA,CAAE,CAAC;YACrE;AACA,YAAA,OAAO,eAAe;QACxB;QACA,KAAK,SAAS,EAAE;YACd,UAAU,CAAC,+CAA+C,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;QAC5F;;AAEJ;;ACjDM,SAAU,UAAU,CACxB,MAAc,EACd,KAAkB,EAClB,QAAa,EACb,OAAsB,EAAA;AAEtB,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;IACzC,OAAO,CAAC,IAAY,KAAU;AAC5B,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;QACvE,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;QACvE,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;AAC7E,QAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,QAAA,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC;;AAE1C,QAAA,cAAc,CACZ,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,YAAY,EACpB,OAAO,EACP,OAAO,CAAC,YAAY,CAAC,gBAAgB,EACrC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EACtC,OAAO,CAAC,YAAY,CAAC,SAAS,EAC9B,QAAuB,EACvB,KAAK,EACL,CAAC,UAAyB,KAAI;;YAE5B,MAAM,cAAc,GAAG,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC7E,MAAM,aAAa,GAAG,0BAA0B,CAAC,cAAc,EAAE,UAAU,CAAC,SAAS,CAAC;YACtF,qCAAqC,CAAC,aAAa,CAAC;;AAEpD,YAAA,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;AAC/C,QAAA,CAAC,CACF;AACH,IAAA,CAAC;AACH;;ACjDA;;;;;;;;;;;;;;;AAeG;AAqBG,SAAU,eAAe,CAC7B,OAAe,EACf,KAAkB,EAClB,SAAc,EACd,OAAsB,EAAA;IAEtB,OAAO,CAAC,IAAY,KAAU;AAC5B,QAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,CAAC,EAAE;AACpC,YAAA,UAAU,CAAC,CAAA,wDAAA,EAA2D,IAAI,CAAA,EAAA,CAAI,CAAC;QACjF;AACA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,QAAQ;YACjD,UAAU,CAAC,0CAA0C,CAAC;AACxD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACzC,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrD,YAAA,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;YACxB,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxD;AACF,IAAA,CAAC;AACH;;ACtDA;;;;;;;;;;;;;;AAcG;AAMH;;;;;;;;AAQG;AACG,SAAU,eAAe,CAC7B,MAAc,EACd,IAA6B,EAC7B,QAAa,EACb,OAAsB,EAAA;IAEtB,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC;AAC1E,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE;;QAEpC,MAAM,iBAAiB,GAAoC,EAAE;AAC7D,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ;AAC9C,YAAA,IAAI,QAAQ;YACZ,IAAI,GAAG,CAAC,gBAAgB,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;AACxD,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI;YAC1B;iBAAO;AACL,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,SAAS;YACjE;AACA,YAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnB,YAAA,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE;gBAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAU,CAAC,OAAO,IAAI,EAAE;AAC5C,gBAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAC/C,gBAAA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;AACtC,oBAAA,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;gBACzC;qBAAO;AACL,oBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC3B;YACF;QACF;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IACtE;AACF;;AC7DA;;;;;;;;;;;;;;;;AAgBG;AAMH,SAAS,eAAe,CACtB,OAAsB,EACtB,WAAgC,EAChC,QAAiB,EAAA;AAEjB,IAAA,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE;QAC9C,UAAU,CAAC,yBAAyB,CAAC;IACvC;AACA,IAAA,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC;AACnC,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;AAChC,QAAA,IAAI;YACF,OAAO,QAAQ,EAAE;QACnB;gBAAU;YACR,OAAO,CAAC,UAAU,EAAE;QACtB;IACF;YAAU;QACR,OAAO,CAAC,gBAAgB,EAAE;IAC5B;AACF;SAEgB,cAAc,CAC5B,OAAsB,EACtB,WAAgC,EAChC,QAAmB,EAAA;IAEnB,OAAO,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AACxD;AAEO,eAAe,mBAAmB,CACvC,OAAsB,EACtB,WAAgC,EAChC,QAA4B,EAAA;IAE5B,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC9D;;ACzDA;;;;;;;;;;;;;;;;;AAiBG;AAuBH;AACA,MAAM,yBAAyB,GAAG,CAAA,EAAG,kCAAkC,CAAA,EAAG,SAAS,EAAE;AACrF,MAAM,wBAAwB,GAAG,CAAA,EAAG,iCAAiC,CAAA,EAAG,SAAS,EAAE;AAE7E,SAAU,GAAG,CACjB,MAAgB,EAChB,IAAqB,EACrB,QAAa,EACb,OAAuB,EAAA;AAEvB,IAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC;AACvC,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AAChC,QAAA,IAAI,OAAO,CAAC,kBAAkB,KAAK,CAAC,EAAE;YACpC,UAAU,CAAC,oDAAoD,IAAI,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI,CAAC;QACrF;AACA,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,EAAE,SAAS;AACrD,QAAA,OAAO,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;IAC3F;AACA,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACnB,QAAQ,IAAI;gBACV,KAAK,eAAe,EAAE;oBACpB,OAAO,OAAO,CAAC,YAAY;gBAC7B;gBACA,KAAK,SAAS,EAAE;AACd,oBAAA,OAAO,CAAC,IAAY,EAAE,OAAkB,KAAW;AACjD,wBAAA,OAAO,MAAM,CACX,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,CACR,CAAC,IAAI,EAAE,OAAO,CAAC;AAClB,oBAAA,CAAC;gBACH;gBACA,KAAK,aAAa,EAAE;oBAClB,OAAO,CAAC,IAAY,KAAU;AAC5B,wBAAA,OAAO,UAAU,CACf,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,CACR,CAAC,IAAI,CAAC;AACT,oBAAA,CAAC;gBACH;gBACA,KAAK,UAAU,EAAE;AACf,oBAAA,OAAO,CAAC,IAAY,EAAE,OAAiB,EAAE,KAAW,KAAS;AAC3D,wBAAA,OAAO,OAAO,CACZ,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,CACR,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;AACzB,oBAAA,CAAC;gBACH;gBACA,KAAK,kBAAkB,EAAE;oBACvB,OAAO,CAAC,IAAY,KAAU;AAC5B,wBAAA,OAAO,eAAe,CACpB,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,CACR,CAAC,IAAI,CAAC;AACT,oBAAA,CAAC;gBACH;gBACA,KAAK,4BAA4B,EAAE;AACjC,oBAAA,OAAO,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC;gBAClD;gBACA,KAAK,kCAAkC,EAAE;AACvC,oBAAA,OAAO,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC;gBACvD;gBACA,KAAK,iCAAiC,EAAE;AACtC,oBAAA,OAAO,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC;gBACtD;;;;;;;;AAQF,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;AAC7F,gBAAA,OAAO,SAAS;YAClB;QACF;AACA,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC1E,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC5E,OAAO,YAAY,CACjB,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,OAAO,CACR;IACH;AAAO,SAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,QAAQ,IAAI;YACV,KAAK,yBAAyB,EAAE;gBAC9B,OAAO,CAAC,WAAgB,EAAE,QAAA,GAAW,YAAyB,EAAE,CAAC,KAAkB;oBACjF,OAAO,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC5D,gBAAA,CAAC;YACH;YACA,KAAK,oBAAoB,EAAE;gBACzB,OAAO,CAAC,WAAgB,EAAE,QAAA,GAAW,MAAU,EAAE,CAAC,KAAS;oBACzD,OAAO,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AACvD,gBAAA,CAAC;YACH;YACA,KAAK,kBAAkB,EAAE;gBACvB,OAAO,CAAC,OAAsB,KAAS;oBACrC,OAAO,YAAY,CACjB,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,CACR;AACH,gBAAA,CAAC;YACH;YACA,KAAK,kBAAkB,EAAE;AACvB,gBAAA,OAAO,CAAC,OAAsB,EAAE,KAAU,KAAU;AAClD,oBAAA,OAAO,YAAY,CACjB,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,CACR;AACH,gBAAA,CAAC;YACH;YACA,KAAK,uBAAuB,EAAE;AAC5B,gBAAA,OAAO,MAAoB;oBACzB,OAAO,iBAAiB,CACtB,MAAM,EACN,IAAI,EACJ,QACO,CACR;AACH,gBAAA,CAAC;YACH;YACA,KAAK,0BAA0B,EAAE;AAC/B,gBAAA,OAAO,MAAW;oBAChB,OAAO,oBAAoB,CACzB,MAAM,EACN,IAAI,EACJ,QACO,CACR;AACH,gBAAA,CAAC;YACH;YACA,KAAK,qBAAqB,EAAE;gBAC1B,OAAO,CACL,IAA6B,KAClB;oBACX,OAAO,eAAe,CACpB,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,CACR;AACH,gBAAA,CAAC;YACH;;QAGF,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,EACN,IAAI,EACJ,QAAQ,CACT;IACH;AACF;;AC9MA;;;;;;;;;;;;;;AAcG;AAQG,SAAU,GAAG,CACjB,MAAgB,EAChB,IAAqB,EACrB,KAAa,EACb,QAAa,EACb,OAAuB,EAAA;AAEvB,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC1E,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC5E,QAAA,OAAO,YAAY,CACjB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,OAAO,CACR;IACH;SAAO;AACL,QAAA,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,CACT;IACH;AACF;;ACrCA,MAAM,YAAY,CAAA;AACR,IAAA,aAAa;AACb,IAAA,UAAU;IACV,aAAa,GAAyC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3F,kBAAkB,GAAW,EAAE;AAC/B,IAAA,YAAY;AACZ,IAAA,WAAW;AAEnB,IAAA,WAAA,CACE,QAAc,EACd,SAAiB,EACjB,UAAsB,EAAA;AAEtB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC3B,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AACrE,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,UAAU,CAAC,CAAA,uCAAA,EAA0C,IAAI,CAAC,UAAU,CAAA,YAAA,CAAc,CAAC;QACrF;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IAC/B;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,IAAI,OAAO,GAAqC,SAAS;AACzD,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE;YAChC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvD;AACA,QAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,UAAU,CAAC,CAAA,gCAAA,CAAkC,CAAC;QAChD;AACA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,kBAAkB,GAAG,CAAC;IACpC;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,WAAW,CAAC,OAA6B,EAAA;QACvC,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,cAAc,EAAE;AAC7C,YAAA,UAAU,CAAC,CAAA,wCAAA,EAA2C,cAAc,CAAA,yBAAA,CAA2B,CAAC;QAClG;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,OAAO;IACvD;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC3D,QAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,YAAA,UAAU,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,kBAAkB,CAAA,cAAA,CAAgB,CAAC;QAC/E;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,SAAS;QACvD,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,cAAc,CAAC,WAAgC,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;IACjC;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;IAC/B;AAEA,IAAA,GAAG,CACD,MAAgB,EAChB,IAAqB,EACrB,QAAa,EAAA;QAEb,OAAOI,GAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;IAC9C;AAEA,IAAA,GAAG,CACD,MAAgB,EAChB,IAAqB,EACrB,KAAa,EACb,QAAa,EAAA;AAEb,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;AACnC,YAAA,UAAU,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,UAAU,CAAA,cAAA,CAAgB,CAAC;QACvD;AACA,QAAA,OAAOC,GAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrD;IAEA,GAAG,CACD,MAAc,EACd,IAAmB,EAAA;QAEnB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;;IAElC;AAED;AAEK,SAAU,gBAAgB,CAC9B,QAAc,EACd,KAAa,EACb,SAAiB,EACjB,UAAsB,EAAA;IAEtB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,KAAK,CAAc,KAAoB,EAAE,OAAO,CAAC;AACxE,IAAA,OAAO,UAAU;AACnB;;AC/HA;AACA;AAIA,MAAM,+BAA+B,GAAwC,IAAI,OAAO,EAAE;AAEpF,SAAU,kCAAkC,CAAC,oBAA2C,EAAE,KAAU,EAAA;AACxG,IAAA,+BAA+B,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAClE;AAEM,SAAU,kCAAkC,CAAC,oBAA2C,EAAA;AAC5F,IAAA,OAAO,+BAA+B,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAClE;;ACZA,MAAM,0BAA0B,GAAiD,IAAI,OAAO,EAAE;SAE9E,6BAA6B,CAAC,YAAqB,EAAE,SAAiB,EAAE,YAA2B,EAAA;IACjH,IAAI,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,QAAQ,GAAG,IAAI,GAAG,EAAE;AACpB,QAAA,0BAA0B,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IACxD;AACA,IAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC;AACvC;AAEM,SAAU,6BAA6B,CAAC,YAAqB,EAAE,SAAiB,EAAA;IACpF,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,YAAY,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,IAAI;IACb;IACA,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI;AACxC;;ACFA,MAAM,qBAAqB,GAAgE,IAAI,OAAO,EAAE;AACxG,MAAM,qBAAqB,GAAgE,IAAI,OAAO,EAAE;AACxG,MAAM,8BAA8B,GAAwC,IAAI,OAAO,EAAE;AACzF,MAAM,2BAA2B,GAAwC,IAAI,OAAO,EAAE;AAEtF,SAAS,0BAA0B,CAAC,UAAyB,EAAE,OAAqB,EAAA;AAClF,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC;AACvE,IAAA,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,OAAO,CAAC;AACtE,IAAA,MAAM,gBAAgB,GAAI,oBAAoB,CAAC,gBAAgB;AAC/D,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;SAEgB,uBAAuB,CAAC,YAAqB,EAAE,SAAiB,EAAE,QAAwB,EAAA;AACxG,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB;IACF;IACA,MAAM,UAAU,GAAG,6BAA6B,CAAC,YAAY,EAAE,SAAS,CAAC;AACzE,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,UAAU,CAAC,4CAA4C,CAAC;IAC1D;AACA,IAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwC;AACxE,IAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwC;AACxE,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,MAAM,WAAW,GAAG,0BAA0B,CAAC,UAAU,EAAE,OAAO,CAAC;QACnE,IAAI,qBAAqB,GAAG,8BAA8B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5E,QAAA,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;AAChD,YAAA,8BAA8B,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1E;aAAO;AACL,YAAA,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC;QACxC;AACA,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB;AACrD,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB;AACrD,QAAA,2BAA2B,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;AACrD,QAAA,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AACxD,QAAA,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC1D;AACA,IAAA,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC;AACzD,IAAA,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC;AAC3D;AAUM,SAAU,wBAAwB,CAAC,YAAqB,EAAE,gBAAmC,EAAA;IACjG,IAAI,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1D,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,QAAA,YAAY,GAAG,IAAI,GAAG,EAAwC;AAC9D,QAAA,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IACvD;AACA,IAAA,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACtC,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAE;IAC5C;IACA,IAAI,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1D,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,QAAA,YAAY,GAAG,IAAI,GAAG,EAAwC;AAC9D,QAAA,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IACvD;;IAEA,MAAM,qBAAqB,GAAG,8BAA8B,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9E,IAAA,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;;AAEhD,QAAA,OAAO,IAAI;IACb;IACA,IAAI,kBAAkB,GAAwB,IAAI;AAClD,IAAA,KAAI,MAAM,yBAAyB,IAAI,qBAAqB,EAAE;;AAE5D,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;YAC7G;QACF;AACA,QAAA,IAAI,yBAAyB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;YACrH,UAAU,CAAC,2CAA2C,CAAC;QACzD;QACA,kBAAkB,GAAG,yBAAyB;QAC9C;IACF;AACA,IAAA,IAAI,kBAAkB,KAAK,IAAI,EAAE;;AAE/B,QAAA,OAAO,IAAI;IACb;;IAEA,MAAM,cAAc,GAAG,2BAA2B,CAAC,GAAG,CAAC,kBAAkB,CAAC;;AAE1E,IAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;QACzC,UAAU,CAAC,8DAA8D,CAAC;IAC5E;;IAEA,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrI,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAC1G,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChE,IAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAU;IACnD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC;AACnF,IAAA,IAAI,iBAAiB,KAAK,IAAI,EAAE;AAC9B,QAAA,UAAU,CAAC,CAAA,yBAAA,EAA4B,cAAc,CAAC,SAAS,CAAA,8BAAA,CAAgC,CAAC;IAClG;IACA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,aAAa,CAAC;AAC9E,IAAA,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AACpD,IAAA,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;;AAGpD,IAAA,MAAM,UAAU,GAAiB;AAC/B,QAAA,GAAG,cAAc;AACjB,QAAA,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI;AACxC,QAAA,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ;AAChD,QAAA,aAAa,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI;QAC7C,aAAa,EAAE,gBAAgB,CAAC,QAAQ;KACzC;AACD,IAAA,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC;AAE1C,IAAA,OAAO,gBAAgB;AACzB;;ACnIA,SAAS,oBAAoB,CAAC,GAAW,EAAA;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACzD,IAAA,KAAI,MAAM,GAAG,IAAI,WAAW,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE;AACjC,YAAA,UAAU,CAAC,QAAQ,GAAG,IAAI;QAC5B;IACF;AACA,IAAA,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC3C,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,gBAAgB,CAAC,SAAiB,EAAA;AAChD,IAAA,OAAO,oBAAoB,CAAC,SAAS,CAAC;AACxC;;ACHA,MAAM,sBAAsB,CAAA;AAClB,IAAA,aAAa;AACb,IAAA,kBAAkB;IAC1B,WAAA,CAAY,YAAqB,EAAE,SAAiB,EAAA;AAClD,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;AACjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,6BAA6B,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,4CAA4C,CAAC;IAC9I;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,QAAa,EAAA;AAC3D,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;;AAEnB,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACnB,gBAAA,OAAO,SAAS;YAClB;;AAEA,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE;gBACnE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;YAC5C;;AAEA,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACpF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACvF,YAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC7B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC5D,IAAI,KAAK,GAAG,SAAS;gBACrB,gBAAgB,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC9D,oBAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;wBAC5C,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAC7C,IAAI,SAAS,GAAsB,IAAI;wBACvC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE;4BAC1D,IAAI,gBAAgB,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE;;;AAG/C,gCAAA,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;4BACnF;wBACF;wBACA,MAAM,eAAe,GAAG,0BAA0B,CAAC,gBAAgB,EAAE,SAAS,CAAC;AAC/E,wBAAA,kCAAkC,CAAC,eAAe,EAAE,KAAK,CAAC;AAC5D,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;;AAEA,YAAA,IAAI,IAAI,IAAI,MAAM,EAAE;gBAClB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;YAC5C;;AAEA,YAAA,UAAU,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,wEAAA,CAA0E,CAAC;QACzG;aAAO;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC5C;IACF;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,KAAU,EAAE,QAAa,EAAA;AACvE,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAE5B,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,EAAE;AACnE,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;YACnD;;AAEA,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACpF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACvF,YAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC7B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC5D,gBAAgB,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC9D,oBAAA,KAAK,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAK;wBAC5C,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK;AAC/C,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,IAAI;YACb;;AAEA,YAAA,IAAI,IAAI,IAAI,MAAM,EAAE;AAClB,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;YACnD;;AAEA,YAAA,UAAU,CAAC,CAAA,UAAA,EAAa,IAAI,CAAA,wEAAA,CAA0E,CAAC;QACzG;aAAO;AACL,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;QACnD;IACF;IAEA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAA;AAC5C,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACnB,gBAAA,OAAO,KAAK;YACd;;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,EAAE;AACtH,gBAAA,OAAO,IAAI;YACb;;AAEA,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACpF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC;AACvF,YAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAC7B,gBAAA,OAAO,IAAI;YACb;;AAEA,YAAA,IAAI,IAAI,IAAI,MAAM,EAAE;AAClB,gBAAA,OAAO,IAAI;YACb;;AAEA,YAAA,OAAO,KAAK;QACd;aAAO;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC;IACF;AAED;AAEK,SAAU,gBAAgB,CAAC,YAAqB,EAAE,SAAiB,EAAA;IACvE,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC;IACnE,MAAM,UAAU,GAAG,6BAA6B,CAAC,YAAY,EAAE,SAAS,CAAC;;AAEzE,IAAA,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,UAAU,CAAC,4CAA4C,CAAC;IAC1D;;AAEA,IAAA,IAAI,UAAU,CAAC,uBAAuB,KAAK,IAAI,EAAE;QAC/C,UAAU,CAAC,yDAAyD,CAAC;IACvE;IACA,IAAI,EAAE,UAAU,CAAC,uBAAuB,IAAI,YAAY,CAAC,EAAE;AACzD,QAAA,UAAU,CAAC,CAAA,4DAAA,EAA+D,UAAU,CAAC,uBAAuB,CAAA,CAAE,CAAC;IACjH;IACA,MAAM,KAAK,GAAI,YAAoB,CAAC,UAAU,CAAC,uBAAuB,CAAC;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,QAAA,UAAU,CAAC,CAAA,+CAAA,EAAkD,UAAU,CAAC,uBAAuB,CAAA,CAAE,CAAC;IACpG;IACA,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;AACpD;;AC3IA,MAAM,sBAAsB,CAAA;AAClB,IAAA,kBAAkB;IAC1B,WAAA,CAAY,YAAqB,EAAE,SAAiB,EAAA;AAClD,QAAA,IAAI,CAAC,kBAAkB,GAAG,6BAA6B,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,4CAA4C,CAAC;IAC9I;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,QAAa,EAAA;AAC3D,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACpF,MAAM,eAAe,GAAG,0BAA0B,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAC1E,YAAA,OAAO,kCAAkC,CAAC,eAAe,CAAC;QAC5D;aAAO;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC5C;IACF;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,KAAU,EAAE,QAAa,EAAA;AACvE,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC;YACvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;YACpF,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;gBACxD,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;QACnD;IACF;AACD;AAEK,SAAU,gBAAgB,CAAC,YAAqB,EAAE,SAAiB,EAAA;IACvE,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC;AACnE,IAAA,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;AAC/B;;ACtCA,MAAM,2BAA2B,CAAA;AACvB,IAAA,kBAAkB;IAC1B,WAAA,CAAY,YAAqB,EAAE,SAAiB,EAAA;AAClD,QAAA,IAAI,CAAC,kBAAkB,GAAG,6BAA6B,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,4CAA4C,CAAC;IAC9I;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,QAAa,EAAA;AAC3D,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,KAAK;YACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AACxD,gBAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;QACd;aAAO;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC5C;IACF;AAEA,IAAA,GAAG,CAAC,MAAmB,EAAE,IAAqB,EAAE,KAAU,EAAE,QAAa,EAAA;AACvE,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AACxD,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;AACrB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,IAAI;QACb;aAAO;AACL,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;QACnD;IACF;AACD;AAEK,SAAU,qBAAqB,CAAC,YAAqB,EAAE,SAAiB,EAAA;IAC5E,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,YAAY,EAAE,SAAS,CAAC;AACxE,IAAA,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;AAC/B;;ACxBA,MAAM,QAAQ,GAAG,CAAC,UAAuB,KAAK,MAAmB,UAAU;AAErE,SAAU,gBAAgB,CAC9B,iBAAgC,EAChC,SAAkB,EAClB,SAAiB,EACjB,KAA0B,EAAA;AAE1B,IAAA,6BAA6B,CAAC,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC;IACtE,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;QACpD,MAAM,QAAQ,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,CAC1D,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,CACjD;AACD,QAAA,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;QACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;QACzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AACzD,QAAA,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;AAC7C,QAAA,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;AAC1C,YAAA,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC;AACzB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;IACJ;SAAO;QACL,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC;AAC9D,QAAA,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;AAC1C,YAAA,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC;AACzB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;IACJ;AACA,IAAA,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,CAAC;AACxD,IAAA,IAAI,sCAAsC,IAAI,SAAS,EAAE;AACvD,QAAA,MAAM,IAAI,GAAI,SAAiB,CAAC,sCAAsC,CAAC;AACvE,QAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAU,KAAI;gBACnD,UAAU,CAAC,YAAY,sCAAsC,CAAA,EAAA,EAAK,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AAC7H,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,UAAU,CAAC,CAAA,EAAG,sCAAsC,CAAA,mBAAA,CAAqB,CAAC;QAC5E;IACF;AACF;;ACrBA,SAAS,yBAAyB,CAAC,GAAW,EAAA;IAC5C,IAAI,WAAW,GAAgB,EAAE;IACjC,IAAI,KAAK,GAAG,GAAG;IACf,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE;AAC1C,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACnE,QAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IACtC;AACA,IAAA,OAAO,WAAW;AACpB;AAEA,SAAS,YAAY,CACnB,KAAa,EAAA;AAKb,IAAA,MAAM,WAAW,GAAgB,IAAI,GAAG,EAAU;AAClD,IAAA,MAAM,WAAW,GAAgB,IAAI,GAAG,EAAU;AAClD,IAAA,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,CAAC;AACpD,IAAA,KAAI,MAAM,CAAE,GAAG,EAAE,UAAU,CAAE,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC5D,QAAA,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,UAAU,EAAE;AACxC,YAAA,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB;AACA,QAAA,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,UAAU,EAAE;AACxC,YAAA,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;QACtB;IACF;IACA,OAAO;AACL,QAAA,WAAW,EAAE;KACd;AACH;AAEM,MAAO,KAAM,SAAQ,WAAW,CAAA;AACpC,IAAA,OAAO,2BAA2B,GAAG,IAAI;IAEzC,OAAO,gBAAgB,CAAC,QAAc,EAAA;AACpC,QAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC;AAEQ,IAAA,OAAO;IACP,KAAK,GAAW,SAAS;IACzB,YAAY,GAAY,KAAK;AAC7B,IAAA,kBAAkB;IAClB,kBAAkB,GAAwB,IAAI;AAC9C,IAAA,yBAAyB;IACzB,yBAAyB,GAAwB,IAAI;AACrD,IAAA,eAAe;IACf,eAAe,GAAwB,IAAI;IAC3C,gBAAgB,GAAwC,IAAI;IAC5D,gBAAgB,GAAkD,IAAI;AACtE,IAAA,UAAU,GAAgB,IAAI,GAAG,EAAU;AAC3C,IAAA,aAAa,GAAgB,IAAI,GAAG,EAAU;AAC9C,IAAA,YAAY,GAAgB,IAAI,GAAG,EAAU;AAC7C,IAAA,YAAY,GAAgB,IAAI,GAAG,EAAU;IAC7C,iBAAiB,GAAsB,sBAAsB,EAAE;AAC/D,IAAA,kBAAkB,GAA0B,IAAI,GAAG,EAAoB;AACvE,IAAA,iBAAiB,GAA0B,IAAI,GAAG,EAAoB;AACtE,IAAA,QAAQ,GAAgB,IAAI,GAAG,EAAU;IACzC,QAAQ,GAAG,CAAC;IACZ,SAAS,GAAgB,IAAI;IAC7B,eAAe,GAAmB,IAAI;IACtC,wBAAwB,GAAkB,IAAI;IAC9C,iBAAiB,GAA2B,EAAE;AAC9C,IAAA,kBAAkB,GAAgB,IAAI,GAAG,EAAU;AACnD,IAAA,gBAAgB,GAAgB,IAAI,GAAG,EAAU;IACjD,IAAI,GAAY,KAAK;;;;;;IAMrB,kBAAkB,GAAW,CAAC;;;;IAI9B,yBAAyB,GAAW,CAAC;AAE7C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,kBAAkB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACtD,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO;AACnC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,yBAAyB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AAC7D,YAAA,IAAI,CAAC,yBAAyB,GAAG,OAAO;AAC1C,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACnD,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAChC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAsB,CAAC,OAAO,KAAI;AACnE,YAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;AACjC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE;YACvC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA,+BAAA,CAAiC,CAAC;QACvE;QACA,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,IAAY,MAAM,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,+BAA+B,CAAC,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,gBAAgB,GAAG,6BAA6B,CAAC,KAAK,CAAC;AAC5D,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;QAEpB,uBAAuB,CAAC,IAAI,CAAC;QAC7B,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;;AAGzB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACrC,QAAA,KAAI,MAAM,IAAI,IAAI,SAAS,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,KAAI,MAAM,IAAI,IAAI,SAAS,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;;;;;QAKA,oBAAoB,CAAC,IAAI,CAAC;QAC1B,mBAAmB,CAAC,IAAI,CAAC;AACzB,QAAA,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC;;;;AAItC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAC5D,YAAY,CAAC,IAAI,CAAC;;;;;;AAMlB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,kBAAkB;QAC1D;AACA,QAAA,IAAI,CAAC,eAAe,IAAI;IAC1B;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAAE,YAAA,OAAO,IAAI;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU;AAC5B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS;AAC5B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;IACnD;AAEQ,IAAA,MAAM,WAAW,GAAA;;AAEvB,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI;AAC7D,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxC,gBAAA,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,KAAM,CAAC;YAC1C;AAAO,iBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACpC,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAChC,IAAI,CAAC,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC;gBAC3C;qBAAO,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBACrC,IAAI,CAAC,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC;gBAC7C;qBAAO;AACL,oBAAA,UAAU,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAC;gBACjD;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAK,CAAC;YACnC;iBAAO;gBACL,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAoB,uBAAuB,CAAC;gBAC7E,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;gBAClE;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,wBAAA,OAAO,CAAC,IAAI,CAAC,CAAA,qDAAA,EAAwD,MAAM,CAAC,QAAQ,CAAC,KAAK,wBAAwB,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI,CAAC;oBACnI,CAAC,EAAE,cAAc,CAAC;;AAElB,oBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAiB;oBAC1C,YAAY,CAAC,OAAO,CAAC;gBACvB;YACF;QACF;QAAE,OAAM,CAAC,EAAE;AACT,YAAA,UAAU,CAAC,CAAA,4BAAA,EAA+B,CAAC,CAAA,CAAE,CAAC;QAChD;;QAEA,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACnD,gBAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AACvB,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;;oBAE/D,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;wBAAE;;oBAEpC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU;wBAAE;gBAC/C;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;YAC3B;QACF;QACA,MAAM,IAAI,CAAC,eAAe;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;QACnD,qBAAqB,CAAC,IAAI,CAAC,QAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IACzD;AAEQ,IAAA,MAAM,2BAA2B,GAAA;AACvC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE;;;;AAIvC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAClC,YAAA,MAAM,cAAc,GAAG,UAAU,YAAY;kBACzC,UAAU,CAAC;kBACX,UAAU,YAAY;AACtB,sBAAE;sBACA,IAAI;AACV,YAAA,MAAM,aAAa,GAAG,cAAc,GAAG,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI;YAC9E,IAAI,cAAc,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE;gBACrD,UAAU,CAAC,8BAA8B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA,2CAAA,CAA6C,CAAC;YAC9G;;AAEA,YAAA,IAAI,EAAE,UAAU,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBACrE,UAAU,CAAC,CAAA,6GAAA,CAA+G,CAAC;YAC7H;YACA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAE;YACpE,MAAM,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;;YAE7D,IAAI,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;AACzD,gBAAA,MAAM,qBAAqB,CAAC,cAAc,CAAC;YAC7C;AACA,YAAA,IAAI,EAAE,uBAAuB,IAAI,cAAc,CAAC,EAAE;AAChD,gBAAA,UAAU,CAAC,CAAA,kCAAA,EAAqC,uBAAuB,CAAA,oBAAA,CAAsB,CAAC;YAChG;AACA,YAAA,MAAM,KAAK,GAAI,cAAsB,CAAC,uBAAuB,CAAwB;YACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,gBAAA,UAAU,CAAC,CAAA,oBAAA,EAAuB,uBAAuB,CAAA,qCAAA,CAAuC,CAAC;YACnG;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,cAAc;AACrC,YAAA,IAAI,CAAC,wBAAwB,GAAG,uBAAuB;AACvD,YAAA,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC;QACpF;IACF;AAEQ,IAAA,MAAM,2BAA2B,GAAA;QACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,KAAK,KAAI;;AAEtD,YAAA,IAAI,6BAA6B,IAAI,KAAK,EAAE;AAC1C,gBAAA,MAAM,KAAK,CAAC,uBAAuB,CAAC,EAAE;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,cAAc,CAAC,WAAoB,EAAE,UAAsB,EAAA;AACvE,QAAA,IAAI,KAAa;AACjB,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAE;AACrC,gBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACvB,oBAAA,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC;gBACvC;qBAAO;AACL,oBAAA,UAAU,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAC;gBACjD;YACF;iBAAO;gBACL,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAoB,uBAAuB,CAAC;gBAC7E,IAAI,MAAM,EAAE;AACV,oBAAA,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC9E;qBAAO;oBACL,UAAU,CAAC,CAAA,gCAAA,EAAmC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;gBACtF;YACF;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,UAAU,CAAC,CAAA,2BAAA,EAA8B,CAAC,CAAA,CAAE,CAAC;QAC/C;AACA,QAAA,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,KAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,kBAAkB,IAAI;AAC3B,QAAA,IAAI,CAAC,yBAAyB,IAAI;IACpC;IAEQ,8BAA8B,GAAA;QACpC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;;AAErC,YAAA,IAAI,gCAAgC,IAAI,KAAK,EAAE;AAC7C,gBAAA,KAAK,CAAC,0BAA0B,CAAC,EAAE;YACrC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,EAAU;;;;;AAK3C,QAAA,MAAM,iBAAiB,GAAG,EAAE,IAAI,CAAC,kBAAkB;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;AAEtB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;YAClC,IAAI,UAAU,YAAY,UAAU;gBAChC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,EAAE;gBAC1D,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;gBACtD;YACF;AACA,YAAA,MAAM,IAAI,CAAC,2BAA2B,EAAE;AACxC,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,kBAAkB,IAAI;QAC7B;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;;;;YAInF,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QACzD;;;QAGA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,EAAE,EAAE;AAC/C,YAAA,MAAM,IAAI,CAAC,2BAA2B,EAAE;QAC1C;;QAGA,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;AAC9C,YAAA,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAErC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;YACnD,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC5C,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACzD,YAAA,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;AAChC,YAAA,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;AACtC,YAAA,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C;;;;;;;;;;;;;;;;;QAkBA,IACE,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,SAAS,KAAK,IAAI;YACvB,iBAAiB,KAAK,IAAI,CAAC,kBAAkB;AAC7C,YAAA,IAAI,CAAC,yBAAyB,KAAK,iBAAiB,EACpD;YACA,YAAY,CAAC,IAAI,CAAC;QACpB;AAEA,QAAA,IAAI,CAAC,yBAAyB,IAAI;IACpC;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;;;;;;AAM3B,YAAA,IAAI;gBACF,IAAI,CAAC,8BAA8B,EAAE;YACvC;oBAAU;gBACR,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBACtD,yBAAyB,CAAC,IAAI,CAAC;gBAC/B,qBAAqB,CAAC,IAAI,CAAC;gBAC3B,uBAAuB,CAAC,IAAI,CAAC;;;;;gBAK7B,eAAe,CAAC,IAAI,CAAC;gBACrB,oBAAoB,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACvB;QACF;IACF;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;IAChC;AAEA,IAAA,IAAI,wBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC,yBAAyB;IACvC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;IAChC;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAC3B,UAAU,CAAC,kCAAkC,CAAC;QAChD;QACA,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,uBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC,wBAAwB;IACtC;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB;IAChC;AAEA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA,IAAA,mBAAmB,CAAC,GAA2B,EAAA;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG;IAC9B;AAEQ,IAAA,cAAc,CACpB,GAA0B,EAC1B,UAAkB,EAClB,UAAkB,EAAA;QAElB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;AACjC,YAAA,OAAO,IAAI;QACb;aAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACrB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;;;;;;;;;AAcG;IACH,oBAAoB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,CAAC;IAC7E;AAEA;;;;;;;;AAQG;IACH,mBAAmB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC;IAC5E;IAEA,WAAW,CAAC,IAAY,EAAE,WAAwB,EAAA;AAChD,QAAA,IAAI,WAAW,KAAK,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC;QAC/C;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE;gBAChC,IAAI,eAAe,GAAG,QAAQ;AAC9B,gBAAA,OAAM,eAAe,CAAC,UAAU,KAAK,IAAI,EAAE;AACzC,oBAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC/E;oBACF;AACA,oBAAA,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC;gBAC3D;YACF;QACF;IACF;AAEQ,IAAA,YAAY,CAAI,QAAc,EAAE,UAAsB,EAAE,QAAmC,EAAA;AACjG,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;AAClF,YAAA,OAAO,QAAQ,CAAC,UAAU,CAAC;QAC7B;gBAAU;;QAEV;IACF;AAEA,IAAA,MAAM,gBAAgB,CAAC,UAAsB,EAAE,QAA+C,EAAA;AAC5F,QAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;IACrE;IAEA,WAAW,CAAC,UAAsB,EAAE,QAAsC,EAAA;QACxE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;IACxD;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,QAAQ,EAAE;QACf,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,YAAY,CAAC,IAAY,EAAE,IAAwB,EAAA;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;IAChD;AAEA,IAAA,eAAe,CAAC,KAA0B,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;;;SC/kBc,kBAAkB,GAAA;AAChC,IAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IACjD;AACA,IAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC9C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACrD;AACF;;ACPM,SAAU,cAAc,CAAC,MAAwB,EAAA;IACrD,IAAI,MAAM,EAAE;QACV,SAAS,CAAC,MAAM,CAAC;IACnB;AACA,IAAA,kBAAkB,EAAE;AACtB;;ACTA;;;;;;;;;;;AAWG;AAiOH;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEG;AACG,SAAU,WAAW,CACzB,UAAoC,EAAA;AAEpC,IAAA,OAAO,UAAU;AACnB;;ACvTA;;;;;;;;;;AAUG;AAsBH;AACO,MAAM,iBAAiB,GAAgC;;AAE5D,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,QAAQ,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAiB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;AACrJ,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,QAAQ,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAiB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IACrJ,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAW,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AACjI,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,QAAQ,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACxJ,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,KAAK,EAAU,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AAC3J,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,QAAQ,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACxJ,IAAA,EAAE,EAAG,EAAE,WAAW,EAAE,KAAK,EAAU,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;;AAE3J,IAAA,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACtI,IAAA,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACtI,IAAA,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACtI,IAAA,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACtI,IAAA,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;;AAEtI,IAAA,GAAG,EAAM,EAAE,WAAW,EAAE,SAAS,EAAkB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AAC/J,IAAA,MAAM,EAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;;IAEvJ,EAAE,EAAM,EAAE,WAAW,EAAE,QAAQ,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACpI,EAAE,EAAM,EAAE,WAAW,EAAE,QAAQ,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACpI,GAAG,EAAK,EAAE,WAAW,EAAE,WAAW,EAAQ,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACjI,IAAI,EAAI,EAAE,WAAW,EAAE,UAAU,EAAU,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AAClI,IAAA,KAAK,EAAG,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACrK,IAAA,MAAM,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAM,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACrK,IAAA,GAAG,EAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACtK,IAAA,GAAG,EAAK,EAAE,WAAW,EAAE,cAAc,EAAU,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC5J,GAAG,EAAK,EAAE,WAAW,EAAE,QAAQ,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;;AAEpI,IAAA,GAAG,EAAM,EAAE,WAAW,EAAE,QAAQ,EAAU,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AAC3I,IAAA,KAAK,EAAI,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AACvI,IAAA,KAAK,EAAI,EAAE,WAAW,EAAE,MAAM,EAAc,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACzJ,IAAA,KAAK,EAAI,EAAE,WAAW,EAAE,MAAM,EAAc,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACzJ,IAAA,IAAI,EAAK,EAAE,WAAW,EAAE,MAAM,EAAc,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;AACzJ,IAAA,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;;IAEpJ,IAAI,EAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACxH,IAAI,EAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACxH,QAAQ,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AACxH,IAAA,GAAG,EAAO,EAAE,WAAW,EAAE,eAAe,EAAI,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;;IAEpJ,KAAK,EAAK,EAAE,WAAW,EAAE,OAAO,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAM,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IAC1I,MAAM,EAAI,EAAE,WAAW,EAAE,OAAO,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAM,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AAC1I,IAAA,QAAQ,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAG,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IACvJ,OAAO,EAAG,EAAE,WAAW,EAAE,SAAS,EAAU,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAM,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACxI,MAAM,EAAI,EAAE,WAAW,EAAE,OAAO,EAAc,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAO,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IAC1I,MAAM,EAAI,EAAE,WAAW,EAAE,QAAQ,EAAY,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAO,WAAW,EAAE,KAAK,EAAO,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACzI,IAAI,EAAM,EAAE,WAAW,EAAE,cAAc,EAAI,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;;;AChFzI;;;;;;;;;;;;AAYG;AA6BH;AACO,MAAM,oBAAoB,GAAG;AAkCpC;SACgB,cAAc,GAAA;IAC5B,OAAO;AACL,QAAA,OAAO,EAAE,oBAAoB;AAC7B,QAAA,MAAM,EAAE;YACN,aAAa,EAAE,MAAM,CAAC,iBAAiB;AACvC,YAAA,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;AAC9B,YAAA,aAAa,EAAE,SAAS;AACxB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE;AACV,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,QAAQ,EAAE,kBAAkB;AAC5B,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,MAAM,EAAE,gBAAgB;AACzB,aAAA;;AAED,YAAA,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC9D,SAAA;;AAED,QAAA,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC1C,QAAA,UAAU,EAAE,iBAAiB;AAC7B,QAAA,iBAAiB,EAAE;YACjB,6BAA6B;YAC7B,gCAAgC;YAChC,2BAA2B;YAC3B,sCAAsC;AACvC,SAAA;AACD,QAAA,gBAAgB,EAAE;YAChB,oBAAoB;YACpB,yBAAyB;YACzB,4BAA4B;YAC5B,uBAAuB;YACvB,aAAa;AACd,SAAA;KACF;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../src/config.ts","../../src/version.ts","../../src/raiseError.ts","../../src/bindings/initializeBindingPromiseByNode.ts","../../src/bindings/replaceToReplaceNode.ts","../../src/define.ts","../../src/address/PathInfo.ts","../../src/getCustomElement.ts","../../src/bindTextParser/expandSpread.ts","../../src/structural/resolveNodePath.ts","../../src/bindings/getBindingInfos.ts","../../src/bindings/getBindingsByNode.ts","../../src/structural/define.ts","../../src/filters/errorMessages.ts","../../src/filters/builtinFilters.ts","../../src/bindTextParser/parseFilterArgs.ts","../../src/bindTextParser/parseFilters.ts","../../src/bindTextParser/utils.ts","../../src/bindTextParser/parsePropPart.ts","../../src/bindTextParser/parseStatePart.ts","../../src/bindTextParser/parseBindTextsForElement.ts","../../src/bindings/parseCommentNode.ts","../../src/bindTextParser/parseBindTextForEmbeddedNode.ts","../../src/bindings/getParseBindTextResults.ts","../../src/bindings/getSubscriberNodes.ts","../../src/bindings/collectNodesAndBindingInfos.ts","../../src/address/StateAddress.ts","../../src/token/Token.ts","../../src/command/CommandToken.ts","../../src/list/loopContextByNode.ts","../../src/proxy/symbols.ts","../../src/event/handlerBindingRegistry.ts","../../src/event/handler.ts","../../src/event/EventToken.ts","../../src/event/eventTokenRegistry.ts","../../src/event/eventTokenHandler.ts","../../src/event/isPossibleTwoWay.ts","../../src/event/twowayHandler.ts","../../src/list/lastListValueByAbsoluteStateAddress.ts","../../src/address/AbsolutePathInfo.ts","../../src/address/AbsoluteStateAddress.ts","../../src/apply/rootNodeByFragment.ts","../../src/address/calcWildcardLen.ts","../../src/list/getListIndexByBindingInfo.ts","../../src/binding/getAbsoluteStateAddressByBinding.ts","../../src/webComponent/completeWebComponent.ts","../../src/apply/applyChangeToAttribute.ts","../../src/createEmptyArray.ts","../../src/apply/getFilteredValue.ts","../../src/apply/applyChangeToCheckbox.ts","../../src/apply/applyChangeToClass.ts","../../src/apply/applyChangeToCommand.ts","../../src/bindings/indexBindingsByContent.ts","../../src/polyfills.ts","../../src/getUUID.ts","../../src/list/createListIndex.ts","../../src/list/listIndexesByList.ts","../../src/list/createListDiff.ts","../../src/list/stableListOrder.ts","../../src/binding/getBindingSetByAbsoluteStateAddress.ts","../../src/bindings/bindingsByContent.ts","../../src/bindings/nodesByContent.ts","../../src/bindings/bindLoopContextToContent.ts","../../src/structural/activateContent.ts","../../src/createEmptySet.ts","../../src/structural/contentsByNode.ts","../../src/binding/getStateAddressByBindingInfo.ts","../../src/structural/createContent.ts","../../src/apply/applyChangeToFor.ts","../../src/apply/applyChangeToIf.ts","../../src/event/getInputAttributeMirror.ts","../../src/apply/ssrPropertyStore.ts","../../src/apply/applyChangeToProperty.ts","../../src/apply/applyChangeToRadio.ts","../../src/apply/applyChangeToStyle.ts","../../src/apply/applyChangeToText.ts","../../src/apply/applyChangeToWebComponent.ts","../../src/list/getIndexValueByLoopContext.ts","../../src/apply/getValue.ts","../../src/apply/scheduleDeferredApply.ts","../../src/apply/applyChange.ts","../../src/apply/applyChangeFromBindings.ts","../../src/event/radioHandler.ts","../../src/event/checkboxHandler.ts","../../src/bindings/initializeBindings.ts","../../src/mustache/convertMustacheToComments.ts","../../src/structural/createNotFilter.ts","../../src/structural/expandShorthandPaths.ts","../../src/structural/getNodePath.ts","../../src/structural/getFragmentNodeInfos.ts","../../src/structural/optimizeFragment.ts","../../src/structural/collectStructuralFragments.ts","../../src/waitForStateInitialize.ts","../../src/buildBindings.ts","../../src/hydrateBindings.ts","../../src/stateElementByName.ts","../../src/structural/fragmentInfoByUUID.ts","../../src/components/Ssr.ts","../../src/stateLoader/loadFromInnerScript.ts","../../src/stateLoader/loadFromJsonFile.ts","../../src/stateLoader/loadFromScriptFile.ts","../../src/stateLoader/loadFromScriptJson.ts","../../src/list/loopContext.ts","../../src/command/processCommandTokensDeclaration.ts","../../src/command/commandTokenRegistry.ts","../../src/command/commandNamespace.ts","../../src/event/processEventTokensDeclaration.ts","../../src/event/processOnDeclaration.ts","../../src/stream/lastNotified.ts","../../src/stream/activeStateElements.ts","../../src/stream/streamRegistry.ts","../../src/stream/processStreamsDeclaration.ts","../../src/stream/streamNamespace.ts","../../src/updater/updater.ts","../../src/stream/argsTrace.ts","../../src/stream/consumeSource.ts","../../src/stream/streamRuntime.ts","../../src/dcc/dccPropertyFactories.ts","../../src/dcc/wcBindable.ts","../../src/dcc/defineDCC.ts","../../src/address/ResolvedAddress.ts","../../src/proxy/apis/connectedCallback.ts","../../src/proxy/apis/disconnectedCallback.ts","../../src/cache/cacheEntryByAbsoluteStateAddress.ts","../../src/proxy/methods/checkDependency.ts","../../src/proxy/methods/getByAddress.ts","../../src/proxy/methods/getContextListIndex.ts","../../src/proxy/methods/swapInfo.ts","../../src/dependency/walkDependency.ts","../../src/proxy/methods/setByAddress.ts","../../src/proxy/apis/resolve.ts","../../src/proxy/apis/getAll.ts","../../src/proxy/methods/getListIndex.ts","../../src/proxy/apis/postUpdate.ts","../../src/proxy/apis/trackDependency.ts","../../src/proxy/apis/updatedCallback.ts","../../src/proxy/methods/setLoopContext.ts","../../src/proxy/traps/get.ts","../../src/proxy/traps/set.ts","../../src/proxy/StateHandler.ts","../../src/webComponent/lastValueByAbsoluteStateAddress.ts","../../src/webComponent/stateElementByWebComponent.ts","../../src/webComponent/MappingRule.ts","../../src/webComponent/meltFrozenObject.ts","../../src/webComponent/innerState.ts","../../src/webComponent/outerState.ts","../../src/webComponent/plainOuterState.ts","../../src/webComponent/bindWebComponent.ts","../../src/components/State.ts","../../src/registerComponents.ts","../../src/bootstrapState.ts","../../src/defineState.ts","../../src/filters/filterMeta.ts","../../src/manifest.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\nexport function inSsr(): boolean {\n // キャッシュしない: SSR モードはプロセスの属性ではなく「現在の document」の\n // 属性。@wcstack/server はグローバル document を差し替えてサーバーレンダリング\n // した後、同一プロセスでクライアント側ハイドレーションが走る(SSR→hydrate の\n // e2e が該当)。サーバーフェーズの判定をキャッシュするとクライアントフェーズが\n // SSR モード扱いになり、hydrateBindings の代わりに buildBindings が選ばれて\n // connectedCallbackPromise が永久に未解決になる。\n const html = document.documentElement;\n return html ? html.hasAttribute('data-wcs-server') : false;\n}\n\ninterface IInternalConfig {\n bindAttributeName: string;\n commentTextPrefix: string;\n commentForPrefix: string;\n commentIfPrefix: string;\n commentElseIfPrefix: string;\n commentElsePrefix: string;\n tagNames: {\n state: string;\n ssr: string;\n };\n locale: string;\n debug: boolean;\n enableMustache: boolean;\n sameValueGuard: boolean;\n}\n\nconst _config: IInternalConfig = {\n bindAttributeName: 'data-wcs',\n commentTextPrefix: 'wcs-text',\n commentForPrefix: 'wcs-for',\n commentIfPrefix: 'wcs-if',\n commentElseIfPrefix: 'wcs-elseif',\n commentElsePrefix: 'wcs-else',\n tagNames: {\n state: 'wcs-state',\n ssr: 'wcs-ssr',\n },\n locale: 'en',\n debug: false,\n enableMustache: true,\n sameValueGuard: true,\n};\n\n// backward compatible export (read-only usage)\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n return config;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n if (typeof partialConfig.bindAttributeName === \"string\") {\n _config.bindAttributeName = partialConfig.bindAttributeName;\n }\n if (typeof partialConfig.commentTextPrefix === \"string\") {\n _config.commentTextPrefix = partialConfig.commentTextPrefix;\n }\n if (typeof partialConfig.commentForPrefix === \"string\") {\n _config.commentForPrefix = partialConfig.commentForPrefix;\n }\n if (typeof partialConfig.commentIfPrefix === \"string\") {\n _config.commentIfPrefix = partialConfig.commentIfPrefix;\n }\n if (typeof partialConfig.commentElseIfPrefix === \"string\") {\n _config.commentElseIfPrefix = partialConfig.commentElseIfPrefix;\n }\n if (typeof partialConfig.commentElsePrefix === \"string\") {\n _config.commentElsePrefix = partialConfig.commentElsePrefix;\n }\n if (typeof partialConfig.locale === \"string\") {\n _config.locale = partialConfig.locale;\n }\n if (typeof partialConfig.debug === \"boolean\") {\n _config.debug = partialConfig.debug;\n }\n if (typeof partialConfig.enableMustache === \"boolean\") {\n _config.enableMustache = partialConfig.enableMustache;\n }\n if (typeof partialConfig.sameValueGuard === \"boolean\") {\n _config.sameValueGuard = partialConfig.sameValueGuard;\n }\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\nexport const VERSION = pkg.version;\n","\nexport function raiseError(message: string): never {\n throw new Error(`[@wcstack/state] ${message}`);\n}","import { IInitializeBindingPromise } from \"./types\";\n\nconst bindingPromiseByNode = new WeakMap<Node, IInitializeBindingPromise>();\n\nlet id = 0;\n\nexport function getInitializeBindingPromiseByNode(node: Node): IInitializeBindingPromise {\n let bindingPromise = bindingPromiseByNode.get(node) || null;\n if (bindingPromise !== null) {\n return bindingPromise;\n }\n let resolveFn = undefined;\n const promise = new Promise<void>((resolve) => {\n resolveFn = resolve;\n });\n bindingPromise = {\n id: ++id,\n promise,\n resolve: resolveFn!\n };\n bindingPromiseByNode.set(node, bindingPromise);\n return bindingPromise;\n}\n\nexport async function waitInitializeBinding(node: Node): Promise<void> {\n const bindingPromise = getInitializeBindingPromiseByNode(node);\n await bindingPromise.promise;\n}\n\nexport function resolveInitializedBinding(node: Node): void {\n const bindingPromise = getInitializeBindingPromiseByNode(node);\n bindingPromise.resolve();\n}\n","import { IBindingInfo } from \"../types.js\";\n\nexport function replaceToReplaceNode(bindingInfo: IBindingInfo): void {\n const node = bindingInfo.node;\n const replaceNode = bindingInfo.replaceNode;\n if (node === replaceNode) {\n return;\n }\n if (node.parentNode === null) {\n // already replaced\n return;\n }\n node.parentNode.replaceChild(replaceNode, node);\n}\n","export const DELIMITER = '.';\nexport const WILDCARD = '*';\nexport const MAX_WILDCARD_DEPTH = 128;\nexport const MAX_LOOP_DEPTH = 128;\n\n// data-wcs バインディング構文 `[prop][#mod]: [path][@state][|filter...]` の区切り文字(単一正本)。\n// これらは「死守の壁(構文契約)」であり値は不変。manifest.syntax.delimiters で公開される。\nexport const BINDING_SEPARATOR = ';'; // 複数バインディングの区切り\nexport const PROP_VALUE_SEPARATOR = ':'; // 左辺(prop)と右辺(path)の区切り\nexport const MODIFIER_SEPARATOR = '#'; // prop と修飾子の区切り\nexport const STATE_NAME_SEPARATOR = '@'; // path と @stateName の区切り\nexport const FILTER_SEPARATOR = '|'; // フィルタパイプの区切り\n\n/**\n * stackIndexByIndexName\n * インデックス名からスタックインデックスへのマッピング\n * $1 => 0\n * $2 => 1\n * :\n * ${i + 1} => i\n * i < MAX_WILDCARD_DEPTH\n */\nconst tmpIndexByIndexName: { [key: PropertyKey]: number } = {};\nfor (let i = 0; i < MAX_WILDCARD_DEPTH; i++) {\n tmpIndexByIndexName[`$${i+1}`] = i;\n}\nexport const INDEX_BY_INDEX_NAME: { [key: PropertyKey]: number } = Object.freeze(tmpIndexByIndexName);\n\nexport const NO_SET_TIMEOUT = 60 * 1000; // 1分\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\nexport const STATE_CONNECTED_CALLBACK_NAME = \"$connectedCallback\";\nexport const STATE_DISCONNECTED_CALLBACK_NAME = \"$disconnectedCallback\";\nexport const STATE_UPDATED_CALLBACK_NAME = \"$updatedCallback\";\n\nexport const WEBCOMPONENT_STATE_READY_CALLBACK_NAME = \"$stateReadyCallback\";\n\nexport const STATE_BINDABLES_NAME = \"$bindables\";\nexport const STATE_COMMAND_TOKENS_NAME = \"$commandTokens\";\nexport const STATE_COMMAND_NAMESPACE_NAME = \"$command\";\nexport const STATE_EVENT_TOKENS_NAME = \"$eventTokens\";\nexport const STATE_ON_NAME = \"$on\";\nexport const STATE_STREAMS_NAME = \"$streams\";\nexport const STATE_STREAM_STATUS_NAMESPACE_NAME = \"$streamStatus\";\nexport const STATE_STREAM_ERROR_NAMESPACE_NAME = \"$streamError\";\nexport const DCC_DEFINITION_ATTRIBUTE = \"data-wc-definition\";\n","import { WILDCARD } from \"../define.js\";\nimport { IPathInfo } from \"./types.js\";\n\nconst _cache: Map<string, IPathInfo> = new Map();\n\nlet id: number = 0;\nexport function getPathInfo(path: string): IPathInfo {\n let pathInfo = _cache.get(path);\n if (typeof pathInfo !== \"undefined\") {\n return pathInfo;\n }\n pathInfo = Object.freeze(new PathInfo(path));\n _cache.set(path, pathInfo);\n return pathInfo;\n}\n\nclass PathInfo implements IPathInfo {\n readonly id: number = ++id;\n readonly path: string;\n readonly segments: string[];\n readonly lastSegment: string;\n readonly cumulativePaths: string[];\n readonly cumulativePathSet: Set<string>;\n readonly cumulativePathInfos: IPathInfo[];\n readonly cumulativePathInfoSet: Set<IPathInfo>;\n readonly parentPath: string | null;\n readonly wildcardPaths: string[];\n readonly wildcardPathSet: Set<string>;\n readonly indexByWildcardPath: Record<string, number>;\n readonly wildcardPathInfos: IPathInfo[];\n readonly wildcardPathInfoSet: Set<IPathInfo>;\n readonly wildcardParentPaths: string[];\n readonly wildcardParentPathSet: Set<string>;\n readonly wildcardParentPathInfos: IPathInfo[];\n readonly wildcardParentPathInfoSet: Set<IPathInfo>;\n readonly wildcardPositions: number[];\n readonly lastWildcardPath: string | null;\n readonly lastWildcardInfo: IPathInfo | null;\n readonly wildcardCount: number;\n readonly parentPathInfo: IPathInfo | null;\n constructor(path: string) {\n // Helper to get or create StructuredPathInfo instances, avoiding redundant creation for self-reference\n const getPattern = (_path: string): IPathInfo => {\n return (path === _path) ? this : getPathInfo(_path);\n };\n \n // Split the pattern into individual path segments (e.g., \"items.*.name\" → [\"items\", \"*\", \"name\"])\n const segments = path.split(\".\");\n \n // Arrays to track all cumulative paths from root to each segment\n const cumulativePaths = [];\n const cumulativePathInfos: IPathInfo[] = [];\n \n // Arrays to track wildcard-specific information\n const wildcardPaths = [];\n const indexByWildcardPath: Record<string, number> = {}; // Maps wildcard path to its index position\n const wildcardPathInfos = [];\n const wildcardParentPaths = []; // Paths of parent segments for each wildcard\n const wildcardParentPathInfos = [];\n const wildcardPositions = [];\n \n let currentPatternPath = \"\", prevPatternPath = \"\";\n let wildcardCount = 0;\n \n // Iterate through each segment to build cumulative paths and identify wildcards\n for(let i = 0; i < segments.length; i++) {\n currentPatternPath += segments[i];\n \n // If this segment is a wildcard, track it with all wildcard-specific metadata\n if (segments[i] === WILDCARD) {\n wildcardPaths.push(currentPatternPath);\n indexByWildcardPath[currentPatternPath] = wildcardCount; // Store wildcard's ordinal position\n wildcardPathInfos.push(getPattern(currentPatternPath));\n wildcardParentPaths.push(prevPatternPath); // Parent path is the previous cumulative path\n wildcardParentPathInfos.push(getPattern(prevPatternPath));\n wildcardPositions.push(i);\n wildcardCount++;\n }\n \n // Track all cumulative paths for hierarchical navigation (e.g., \"items\", \"items.*\", \"items.*.name\")\n cumulativePaths.push(currentPatternPath);\n cumulativePathInfos.push(getPattern(currentPatternPath));\n \n // Save current path as previous for next iteration, then add separator\n prevPatternPath = currentPatternPath;\n currentPatternPath += \".\";\n }\n \n // Determine the deepest (last) wildcard path and the parent path of the entire pattern\n const lastWildcardPath = wildcardPaths.length > 0 ? wildcardPaths[wildcardPaths.length - 1] : null;\n const parentPath = cumulativePaths.length > 1 ? cumulativePaths[cumulativePaths.length - 2] : null;\n \n // Assign all analyzed data to readonly properties\n this.path = path;\n this.segments = segments;\n this.lastSegment = segments[segments.length - 1];\n this.cumulativePaths = cumulativePaths;\n this.cumulativePathSet = new Set(cumulativePaths); // Set for fast lookup\n this.cumulativePathInfos = cumulativePathInfos;\n this.cumulativePathInfoSet = new Set(cumulativePathInfos);\n this.wildcardPaths = wildcardPaths;\n this.wildcardPathSet = new Set(wildcardPaths);\n this.indexByWildcardPath = indexByWildcardPath;\n this.wildcardPathInfos = wildcardPathInfos;\n this.wildcardPathInfoSet = new Set(wildcardPathInfos);\n this.wildcardParentPaths = wildcardParentPaths;\n this.wildcardParentPathSet = new Set(wildcardParentPaths);\n this.wildcardParentPathInfos = wildcardParentPathInfos;\n this.wildcardParentPathInfoSet = new Set(wildcardParentPathInfos);\n this.wildcardPositions = wildcardPositions;\n this.lastWildcardPath = lastWildcardPath;\n this.lastWildcardInfo = lastWildcardPath ? getPattern(lastWildcardPath) : null;\n this.parentPath = parentPath;\n this.parentPathInfo = parentPath ? getPattern(parentPath) : null;\n this.wildcardCount = wildcardCount;\n }\n}\n","\nconst cache = new WeakMap<Node, string | null>();\n\nexport function getCustomElement(node: Node): string | null {\n const cached = cache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n let value: string | null = null;\n try {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return value;\n }\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n if (tagName.includes(\"-\")) {\n return value = tagName;\n }\n if (element.hasAttribute(\"is\")) {\n const is = element.getAttribute(\"is\")!;\n if (is.includes(\"-\")) {\n return value = is;\n }\n }\n return value;\n } finally {\n cache.set(node, value);\n }\n}\n","import { getPathInfo } from \"../address/PathInfo\";\nimport { config } from \"../config\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IWcBindable } from \"../event/types\";\nimport { ParseBindTextResult } from \"./types\";\n\nfunction isValidWcBindable(value: unknown): value is IWcBindable {\n if (typeof value !== \"object\" || value === null) return false;\n const v = value as { protocol?: unknown; version?: unknown; properties?: unknown };\n return v.protocol === \"wc-bindable\"\n && v.version === 1\n && Array.isArray(v.properties);\n}\n\nfunction makeExpandedEntry(\n name: string,\n base: string,\n stateName: string,\n): ParseBindTextResult {\n // Dot-relative spread keeps the loop item root (`.`) without producing `..foo`.\n const expandedPath = base === \".\" ? `.${name}` : `${base}.${name}`;\n return {\n propName: name,\n propSegments: [name],\n propModifiers: [],\n statePathName: expandedPath,\n statePathInfo: getPathInfo(expandedPath),\n stateName,\n inFilters: [],\n outFilters: [],\n bindingType: 'prop',\n };\n}\n\nfunction dedupKey(r: ParseBindTextResult): string | null {\n switch (r.bindingType) {\n case 'prop':\n case 'event':\n case 'radio':\n case 'checkbox':\n return `${r.bindingType}::${r.propName}`;\n case 'spread':\n return null;\n default:\n return null;\n }\n}\n\nexport interface IExpandSpreadOptions {\n /**\n * When false, raise an error if the custom element class is not yet defined.\n * When true (default), leave the spread entry in place so the caller can\n * defer expansion via customElements.whenDefined.\n */\n readonly allowDeferred?: boolean;\n}\n\n/**\n * Expand spread bind-text entries (`...: target`) into per-prop entries\n * by enumerating wcBindable.properties + inputs of the element's class.\n *\n * Behavior:\n * - With `allowDeferred: true` (default): if class is not yet defined, the\n * spread entry stays so the caller can wait via customElements.whenDefined.\n * - With `allowDeferred: false`: raises if class is not defined.\n * - Duplicate propName: last-wins (explicit binding overrides spread).\n * - When config.debug, console.debug logs each override.\n * - Mid-`*` in target path is allowed (e.g. `...: stores.*.fetch`).\n *\n * Composite Profile (COMPOSITE.md / SPEC-extensions § 4) support:\n * - A composite shell exposes its synthesized declaration via the standard\n * `target.constructor.wcBindable` surface (§ 1 Discovery), so this function\n * handles it without any composite-specific code path.\n * - Composed property names use the `<sourceId>.<sourceName>` pattern\n * (e.g. \"s3.progress\"); we keep the dotted name as a single segment so\n * element member access stays flat (element[\"s3.progress\"], not nested).\n * - The expanded state path becomes `targetBase.s3.progress`, which resolves\n * as nested state access — author state as `{ s3: { progress: 0 } }` to\n * mirror the composed structure.\n * - Tier claim (Symbol.for(\"wc-bindable.composite.tiers\")) is not read here;\n * spread covers observation (T1) and writable inputs (T2) transparently\n * through normal property assignment, and commands stay out of spread by\n * design regardless of tier.\n */\nexport function expandSpread(\n node: Node,\n results: ParseBindTextResult[],\n options: IExpandSpreadOptions = {},\n): ParseBindTextResult[] {\n const allowDeferred = options.allowDeferred ?? true;\n if (!results.some(r => r.bindingType === 'spread')) {\n return results;\n }\n const expanded: ParseBindTextResult[] = [];\n const spreadOrigin = new WeakSet<ParseBindTextResult>();\n for (const result of results) {\n if (result.bindingType !== 'spread') {\n expanded.push(result);\n continue;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) {\n raiseError(`Spread binding requires an element node.`);\n }\n const element = node as Element;\n const tagName = getCustomElement(element);\n if (tagName === null) {\n raiseError(`Spread binding \"${result.statePathName}\" requires a custom element with wcBindable, but <${element.tagName.toLowerCase()}> is not a custom element.`);\n }\n const customClass = customElements.get(tagName) as { wcBindable?: unknown } | undefined;\n if (typeof customClass === \"undefined\") {\n if (!allowDeferred) {\n raiseError(`Spread binding \"${result.statePathName}\" requires <${tagName}> to be registered. Define the custom element before initializing this binding.`);\n }\n // Deferred: keep spread entry intact; caller retries via whenDefined.\n expanded.push(result);\n continue;\n }\n const bindable = customClass.wcBindable;\n if (!isValidWcBindable(bindable)) {\n raiseError(`Spread binding \"${result.statePathName}\" requires <${tagName}> to declare wcBindable (protocol=\"wc-bindable\", version=1).`);\n }\n const targetBase = result.statePathName;\n const stateName = result.stateName;\n const seen = new Set<string>();\n for (const prop of bindable.properties) {\n if (seen.has(prop.name)) continue;\n seen.add(prop.name);\n const entry = makeExpandedEntry(prop.name, targetBase, stateName);\n spreadOrigin.add(entry);\n expanded.push(entry);\n }\n // properties win over inputs when the name overlaps because they carry the\n // full property contract (for example change events).\n for (const input of (bindable.inputs ?? [])) {\n if (seen.has(input.name)) continue;\n seen.add(input.name);\n const entry = makeExpandedEntry(input.name, targetBase, stateName);\n spreadOrigin.add(entry);\n expanded.push(entry);\n }\n }\n // Last-wins de-duplication\n const lastIndexByKey = new Map<string, number>();\n for (let i = 0; i < expanded.length; i++) {\n const key = dedupKey(expanded[i]);\n if (key !== null) {\n lastIndexByKey.set(key, i);\n }\n }\n const final: ParseBindTextResult[] = [];\n for (let i = 0; i < expanded.length; i++) {\n const key = dedupKey(expanded[i]);\n if (key === null) {\n final.push(expanded[i]);\n continue;\n }\n if (lastIndexByKey.get(key) === i) {\n final.push(expanded[i]);\n } else if (config.debug && spreadOrigin.has(expanded[i])) {\n const overrider = expanded[lastIndexByKey.get(key)!];\n const tagText = node.nodeType === Node.ELEMENT_NODE\n ? `<${(node as Element).tagName.toLowerCase()}>`\n : 'node';\n console.debug(`[@wcstack/state] spread: prop \"${expanded[i].propName}\" of ${tagText} overridden by explicit binding (statePath: \"${overrider.statePathName}\").`);\n }\n }\n return final;\n}\n\nexport function hasUnresolvedSpread(results: ParseBindTextResult[]): boolean {\n return results.some(r => r.bindingType === 'spread');\n}\n","\nexport function resolveNodePath(root: Node, path: number[]): Node | null {\n let currentNode = root;\n if (path.length === 0) return currentNode;\n // path.reduce()だと途中でnullになる可能性があるので、\n for(let i = 0; i < path.length; i++) {\n currentNode = currentNode?.childNodes[path[i]] ?? null;\n if (currentNode === null) break;\n }\n return currentNode;\n}","import { IBindingInfo } from \"../types\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\n\nexport function getBindingInfos(node: Node, parseBindingTextResults: ParseBindTextResult[]): IBindingInfo[] {\n const bindingInfos: IBindingInfo[] = [];\n for (const parseBindingTextResult of parseBindingTextResults) {\n if (parseBindingTextResult.bindingType !== 'text') {\n bindingInfos.push({\n ...parseBindingTextResult,\n node: node,\n replaceNode: node,\n });\n } else {\n const replaceNode = document.createTextNode('');\n bindingInfos.push({\n ...parseBindingTextResult,\n node: node,\n replaceNode: replaceNode,\n });\n }\n }\n return bindingInfos;\n}\n","import { IBindingInfo } from \"../binding/types\";\n\nconst bindingsByNode = new WeakMap<Node, IBindingInfo[]>();\n\nexport function getBindingsByNode(node: Node): IBindingInfo[] | null {\n return bindingsByNode.get(node) || null;\n}\n\nexport function setBindingsByNode(node: Node, bindings: IBindingInfo[]): void {\n bindingsByNode.set(node, bindings);\n}\n\nexport function addBindingByNode(node: Node, binding: IBindingInfo): void {\n const bindings = getBindingsByNode(node);\n if (bindings === null) {\n setBindingsByNode(node, [binding]);\n } else {\n bindings.push(binding);\n }\n}","import { BindingType } from \"../types.js\";\n\nexport const STRUCTURAL_BINDING_TYPE_SET: Set<BindingType> = new Set([\n \"if\",\n \"elseif\",\n \"else\",\n \"for\",\n]);\n","/**\n * errorMessages.ts\n *\n * Error message generation utilities used by filter functions.\n *\n * Main responsibilities:\n * - Throws clear error messages when filter options or value type checks fail\n * - Takes function name as argument to specify which filter caused the error\n *\n * Design points:\n * - optionsRequired: Error when required option is not specified\n * - optionMustBeNumber: Error when option value is not a number\n * - valueMustBeNumber: Error when value is not a number\n * - valueMustBeBoolean: Error when value is not boolean\n * - valueMustBeDate: Error when value is not a Date\n */\nimport { raiseError } from \"../raiseError\";\n\n/**\n * Throws error when filter requires at least one option but none provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function optionsRequired(fnName:string): never {\n raiseError(`filter ${fnName} requires at least one option`);\n}\n\n/**\n * Throws error when filter option must be a number but invalid value provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function optionMustBeNumber(fnName:string): never {\n raiseError(`filter ${fnName} requires a number as option`);\n}\n\n/**\n * Throws error when filter requires numeric value but non-number provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeNumber(fnName:string): never {\n raiseError(`filter ${fnName} requires a number value`);\n}\n\n/**\n * Throws error when filter requires numeric value but non-number provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeString(fnName:string): never {\n raiseError(`filter ${fnName} requires a string value`);\n}\n\n/**\n * Throws error when filter requires boolean value but non-boolean provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeBoolean(fnName:string): never {\n raiseError(`filter ${fnName} requires a boolean value`);\n} \n\n/**\n * Throws error when filter requires Date value but non-Date provided.\n * \n * @param fnName - Name of the filter function\n * @returns Never returns (always throws)\n */\nexport function valueMustBeDate(fnName:string): never {\n raiseError(`filter ${fnName} requires a date value`);\n}","/**\n * builtinFilters.ts\n *\n * Implementation file for built-in filter functions available in Structive.\n *\n * Main responsibilities:\n * - Provides filters for conversion, comparison, formatting, and validation of numbers, strings, dates, booleans, etc.\n * - Defines functions with options for each filter name, enabling flexible use during binding\n * - Designed for common use as both input and output filters\n *\n * Design points:\n * - Comprehensive coverage of diverse filters: eq, ne, lt, gt, inc, fix, locale, uc, lc, cap, trim, slice, pad, int, float, round, date, time, ymd, falsy, truthy, defaults, boolean, number, string, null, etc.\n * - Rich type checking and error handling for option values\n * - Centralized management of filter functions with FilterWithOptions type, easy to extend\n * - Dynamic retrieval of filter functions from filter names and options via builtinFilterFn\n */\nimport { config } from \"../config.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { optionMustBeNumber, optionsRequired, valueMustBeBoolean, valueMustBeDate, valueMustBeNumber } from \"./errorMessages.js\";\nimport { FilterFn, FilterWithOptions } from \"./types\";\n\nfunction validateNumberString(value: string): boolean {\n if (!value || isNaN(Number(value))) {\n return false;\n }\n return true;\n}\n\n/**\n * Equality filter - compares value with option.\n * \n * @param options - Array with comparison value as first element\n * @returns Filter function that returns boolean\n */\nconst eq = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('eq');\n return (value: unknown): boolean => {\n // Align types for comparison\n if (typeof value === 'number') {\n if (!validateNumberString(opt)) {optionMustBeNumber('eq');}\n return value === Number(opt);\n }\n if (typeof value === 'string') {\n return value === opt;\n }\n // Strict equality for others\n return value === opt;\n }\n}\n\n/**\n * Inequality filter - compares value with option.\n * \n * @param options - Array with comparison value as first element\n * @returns Filter function that returns boolean\n */\nconst ne = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('ne');\n return (value: unknown): boolean => {\n // Align types for comparison\n if (typeof value === 'number') {\n if (!validateNumberString(opt)) {optionMustBeNumber('ne');}\n return value !== Number(opt);\n }\n if (typeof value === 'string') {\n return value !== opt;\n }\n // Strict equality for others\n return value !== opt;\n }\n}\n\n/**\n * Boolean NOT filter - inverts boolean value.\n * \n * @param options - Unused\n * @returns Filter function that returns inverted boolean\n */\nconst not = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => {\n if (typeof value !== 'boolean') {valueMustBeBoolean('not');}\n return !value;\n }\n}\n\n/**\n * Less than filter - checks if value is less than option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst lt = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('lt');\n if (!validateNumberString(opt)) {optionMustBeNumber('lt');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('lt');}\n return value < Number(opt);\n }\n}\n\n/**\n * Less than or equal filter - checks if value is less than or equal to option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst le = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('le');\n if (!validateNumberString(opt)) {optionMustBeNumber('le');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('le');}\n return value <= Number(opt);\n }\n}\n\n/**\n * Greater than filter - checks if value is greater than option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst gt = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('gt');\n if (!validateNumberString(opt)) {optionMustBeNumber('gt');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('gt');}\n return value > Number(opt);\n }\n}\n\n/**\n * Greater than or equal filter - checks if value is greater than or equal to option.\n * \n * @param options - Array with comparison number as first element\n * @returns Filter function that returns boolean\n */\nconst ge = (options?:string[]): FilterFn<boolean> => {\n const opt = options?.[0] ?? optionsRequired('ge');\n if (!validateNumberString(opt)) {optionMustBeNumber('ge');}\n return (value: unknown): boolean => {\n if (typeof value !== 'number') {valueMustBeNumber('ge');}\n return value >= Number(opt);\n }\n}\n\n/**\n * Increment filter - adds option value to input value.\n * \n * @param options - Array with increment number as first element\n * @returns Filter function that returns incremented number\n */\nconst inc = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('inc');\n if (!validateNumberString(opt)) {optionMustBeNumber('inc');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('inc');}\n return value + Number(opt);\n }\n}\n\n/**\n * Decrement filter - subtracts option value from input value.\n * \n * @param options - Array with decrement number as first element\n * @returns Filter function that returns decremented number\n */\nconst dec = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('dec');\n if (!validateNumberString(opt)) {optionMustBeNumber('dec');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('dec');}\n return value - Number(opt);\n }\n}\n\n/**\n * Multiply filter - multiplies value by option.\n * \n * @param options - Array with multiplier number as first element\n * @returns Filter function that returns multiplied number\n */\nconst mul = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('mul');\n if (!validateNumberString(opt)) {optionMustBeNumber('mul');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('mul');}\n return value * Number(opt);\n }\n}\n\n/**\n * Divide filter - divides value by option.\n * \n * @param options - Array with divisor number as first element\n * @returns Filter function that returns divided number\n */\nconst div = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('div');\n if (!validateNumberString(opt)) {optionMustBeNumber('div');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('div');}\n return value / Number(opt);\n }\n}\n\n/**\n * Modulo filter - returns remainder of division.\n * \n * @param options - Array with divisor number as first element\n * @returns Filter function that returns remainder\n */\nconst mod = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? optionsRequired('mod');\n if (!validateNumberString(opt)) {optionMustBeNumber('mod');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('mod');}\n return value % Number(opt);\n }\n}\n\n/**\n * Fixed decimal filter - formats number to fixed decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns formatted string\n */\nconst fix = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? \"0\";\n if (!validateNumberString(opt)) {optionMustBeNumber('fix');}\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('fix');}\n return value.toFixed(Number(opt));\n }\n}\n\n/**\n * Locale number filter - formats number according to locale.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns localized number string\n */\nconst locale = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('locale');}\n return value.toLocaleString(opt);\n }\n}\n\n/**\n * Uppercase filter - converts string to uppercase.\n * \n * @param options - Unused\n * @returns Filter function that returns uppercase string\n */\nconst uc = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).toUpperCase();\n }\n}\n\n/**\n * Lowercase filter - converts string to lowercase.\n * \n * @param options - Unused\n * @returns Filter function that returns lowercase string\n */\nconst lc = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).toLowerCase();\n }\n}\n\n/**\n * Capitalize filter - capitalizes first character of string.\n * \n * @param options - Unused\n * @returns Filter function that returns capitalized string\n */\nconst cap = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n const v = String(value);\n if (v.length === 0) {return v;}\n if (v.length === 1) {return v.toUpperCase();}\n return v.charAt(0).toUpperCase() + v.slice(1);\n }\n}\n\n/**\n * Trim filter - removes whitespace from both ends of string.\n * \n * @param options - Unused\n * @returns Filter function that returns trimmed string\n */\nconst trim = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).trim();\n }\n}\n\n/**\n * Slice filter - extracts portion of string from specified index.\n * \n * @param options - Array with start index and optional end index\n * @returns Filter function that returns sliced string\n */\nconst slice = (options?:string[]): FilterFn<string> => {\n const numberedOpts: number[] = [];\n const opt1 = options?.[0] ?? optionsRequired('slice');\n if (!validateNumberString(opt1)) {optionMustBeNumber('slice');}\n numberedOpts.push(Number(opt1));\n const opt2 = options?.[1];\n if (typeof opt2 !== 'undefined') {\n if (!validateNumberString(opt2)) {optionMustBeNumber('slice');}\n numberedOpts.push(Number(opt2));\n }\n return (value: unknown): string => {\n return String(value).slice(...numberedOpts);\n }\n}\n\n/**\n * Substring filter - extracts substring from specified position and length.\n * \n * @param options - Array with start index and length\n * @returns Filter function that returns substring\n */\nconst substr = (options?:string[]): FilterFn<string> => {\n const opt1 = options?.[0] ?? optionsRequired('substr');\n if (!validateNumberString(opt1)) {optionMustBeNumber('substr');}\n const opt2 = options?.[1] ?? optionsRequired('substr');\n if (!validateNumberString(opt2)) {optionMustBeNumber('substr');}\n return (value: unknown): string => {\n return String(value).substr(Number(opt1), Number(opt2));\n }\n}\n\n/**\n * Pad filter - pads string to specified length from start.\n * \n * @param options - Array with target length and pad string (default: '0')\n * @returns Filter function that returns padded string\n */\nconst pad = (options?:string[]): FilterFn<string> => {\n const opt1 = options?.[0] ?? optionsRequired('pad');\n if (!validateNumberString(opt1)) {optionMustBeNumber('pad');}\n const opt2 = options?.[1] ?? '0';\n return (value: unknown): string => {\n return String(value).padStart(Number(opt1), opt2);\n }\n}\n\n/**\n * Repeat filter - repeats string specified number of times.\n * \n * @param options - Array with repeat count as first element\n * @returns Filter function that returns repeated string\n */\nconst rep = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? optionsRequired('rep');\n if (!validateNumberString(opt)) {optionMustBeNumber('rep');}\n return (value: unknown): string => {\n return String(value).repeat(Number(opt));\n }\n}\n\n/**\n * Reverse filter - reverses character order in string.\n * \n * @param options - Unused\n * @returns Filter function that returns reversed string\n */\nconst rev = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value).split('').reverse().join('');\n }\n}\n\n/**\n * Integer filter - parses value to integer.\n * \n * @param options - Unused\n * @returns Filter function that returns integer\n */\nconst int = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return parseInt(String(value), 10);\n }\n}\n\n/**\n * Float filter - parses value to floating point number.\n * \n * @param options - Unused\n * @returns Filter function that returns float\n */\nconst float = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return parseFloat(String(value));\n }\n}\n\n/**\n * Round filter - rounds number to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns rounded number\n */\nconst round = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('round');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('round');}\n const optValue = Math.pow(10, Number(opt));\n return Math.round(value * optValue) / optValue;\n }\n}\n\n/**\n * Floor filter - rounds number down to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns floored number\n */\nconst floor = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('floor');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('floor');}\n const optValue = Math.pow(10, Number(opt));\n return Math.floor(value * optValue) / optValue;\n }\n}\n\n/**\n * Ceiling filter - rounds number up to specified decimal places.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns ceiled number\n */\nconst ceil = (options?:string[]): FilterFn<number> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('ceil');}\n return (value: unknown): number => {\n if (typeof value !== 'number') {valueMustBeNumber('ceil');}\n const optValue = Math.pow(10, Number(opt));\n return Math.ceil(value * optValue) / optValue;\n }\n}\n\n/**\n * Percent filter - formats number as percentage string.\n * \n * @param options - Array with decimal places as first element (default: 0)\n * @returns Filter function that returns percentage string with '%'\n */\nconst percent = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? '0';\n if (!validateNumberString(opt)) {optionMustBeNumber('percent');}\n return (value: unknown): string => {\n if (typeof value !== 'number') {valueMustBeNumber('percent');}\n return `${(value * 100).toFixed(Number(opt))}%`;\n }\n}\n\n/**\n * Date filter - formats Date object as localized date string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns date string\n */\nconst date = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('date');}\n return value.toLocaleDateString(opt);\n }\n}\n\n/**\n * Time filter - formats Date object as localized time string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns time string\n */\nconst time = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('time');}\n return value.toLocaleTimeString(opt);\n }\n}\n\n/**\n * DateTime filter - formats Date object as localized date and time string.\n * \n * @param options - Array with locale string as first element (default: config.locale)\n * @returns Filter function that returns datetime string\n */\nconst datetime = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? config.locale;\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('datetime');}\n return value.toLocaleString(opt);\n }\n}\n\n/**\n * Year-Month-Day filter - formats Date object as YYYY-MM-DD string.\n * \n * @param options - Array with separator string as first element (default: '-')\n * @returns Filter function that returns formatted date string\n */\nconst ymd = (options?:string[]): FilterFn<string> => {\n const opt = options?.[0] ?? '-';\n return (value: unknown): string => {\n if (!(value instanceof Date)) {valueMustBeDate('ymd');}\n const year = value.getFullYear().toString();\n const month = (value.getMonth() + 1).toString().padStart(2, '0');\n const day = value.getDate().toString().padStart(2, '0');\n return `${year}${opt}${month}${opt}${day}`;\n }\n}\n\n/**\n * Falsy filter - checks if value is falsy.\n * \n * @param options - Unused\n * @returns Filter function that returns true for false/null/undefined/0/''/NaN\n */\nconst falsy = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => value === false || value === null || value === undefined || value === 0 || value === '' || Number.isNaN(value);\n}\n\n/**\n * Truthy filter - checks if value is truthy.\n * \n * @param options - Unused\n * @returns Filter function that returns true for non-falsy values\n */\nconst truthy = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean =>value !== false && value !== null && value !== undefined && value !== 0 && value !== '' && !Number.isNaN(value);\n}\n\n/**\n * Default filter - returns default value if input is falsy.\n * \n * @param options - Array with default value as first element\n * @returns Filter function that returns value or default\n */\nconst defaults = (options?:string[]): FilterFn<unknown> => {\n const opt = options?.[0] ?? optionsRequired('defaults');\n return (value: unknown): unknown => {\n if (value === false || value === null || value === undefined || value === 0 || value === '' || Number.isNaN(value)) {return opt;}\n return value;\n }\n}\n\n/**\n * Boolean filter - converts value to boolean.\n * \n * @param options - Unused\n * @returns Filter function that returns boolean\n */\nconst boolean = (_options?:string[]): FilterFn<boolean> => {\n return (value: unknown): boolean => {\n return Boolean(value);\n }\n}\n\n/**\n * Number filter - converts value to number.\n * \n * @param options - Unused\n * @returns Filter function that returns number\n */\nconst number = (_options?:string[]): FilterFn<number> => {\n return (value: unknown): number => {\n return Number(value);\n }\n}\n\n/**\n * String filter - converts value to string.\n * \n * @param options - Unused\n * @returns Filter function that returns string\n */\nconst string = (_options?:string[]): FilterFn<string> => {\n return (value: unknown): string => {\n return String(value);\n }\n}\n\n/**\n * Null filter - converts empty string to null.\n * \n * @param options - Unused\n * @returns Filter function that returns null for empty string, otherwise original value\n */\nconst _null = (_options?:string[]): FilterFn<unknown> => {\n return (value: unknown): unknown => {\n return (value === \"\") ? null : value;\n } \n}\n\nconst builtinFilters: FilterWithOptions = {\n \"eq\": eq,\n \"ne\": ne,\n \"not\": not,\n\n \"lt\": lt,\n \"le\": le,\n \"gt\": gt,\n \"ge\": ge,\n\n \"inc\": inc,\n \"dec\": dec,\n \"mul\": mul,\n \"div\": div,\n \"mod\": mod,\n\n \"fix\": fix,\n \"locale\": locale,\n \"uc\": uc,\n \"lc\": lc,\n \"cap\": cap,\n \"trim\": trim,\n \"slice\": slice,\n \"substr\": substr,\n \"pad\": pad,\n \"rep\": rep,\n \"rev\": rev,\n\n \"int\": int,\n \"float\": float,\n \"round\": round,\n \"floor\": floor,\n \"ceil\": ceil,\n \"percent\": percent,\n\n \"date\": date,\n \"time\": time,\n \"datetime\": datetime,\n \"ymd\": ymd,\n\n \"falsy\": falsy,\n \"truthy\": truthy,\n \"defaults\": defaults,\n\n \"boolean\": boolean,\n \"number\": number,\n \"string\": string,\n \"null\": _null,\n};\n\nexport const outputBuiltinFilters = builtinFilters;\nexport const inputBuiltinFilters = builtinFilters;\n\nexport const builtinFiltersByFilterIOType = {\n \"input\": inputBuiltinFilters,\n \"output\": outputBuiltinFilters,\n} as const;\n\n/**\n * Retrieves built-in filter function by name and options.\n * \n * @param name - Filter name\n * @param options - Array of option strings\n * @returns Function that takes FilterWithOptions and returns filter function\n */\nexport const builtinFilterFn = (name:string, options: string[]) => (filters: FilterWithOptions) => {\n const filter = filters[name];\n if (!filter) {\n raiseError(`filter not found: ${name}`);\n }\n return filter(options);\n}\n\n","export function parseFilterArgs(argsText: string): string[] {\n const args: string[] = [];\n let current = '';\n let inQuote: string | null = null;\n let hasQuote = false;\n\n for (let i = 0; i < argsText.length; i++) {\n const char = argsText[i];\n\n if (inQuote) {\n if (char === inQuote) {\n inQuote = null;\n } else {\n current += char;\n }\n } else if (char === '\"' || char === \"'\") {\n inQuote = char;\n hasQuote = true;\n } else if (char === ',') {\n args.push(current.trim());\n current = '';\n hasQuote = false;\n } else {\n current += char;\n }\n }\n\n const last = current.trim();\n if (last || hasQuote) {\n args.push(last);\n }\n\n return args;\n}\n","import { builtinFilterFn, builtinFiltersByFilterIOType } from \"../filters/builtinFilters\";\nimport { FilterFn, FilterIOType } from \"../filters/types\";\nimport { raiseError } from \"../raiseError\";\nimport { IFilterInfo } from \"../types\";\nimport { parseFilterArgs } from \"./parseFilterArgs\";\n\nconst filterFnByKey: Map<string, FilterFn<unknown>> = new Map();\n\n// format: filterName(arg1,arg2) or filterName\n\nexport function parseFilters(filterTextList: string[], filterIOType: FilterIOType): IFilterInfo[] {\n const builtinFilters = builtinFiltersByFilterIOType[filterIOType];\n const filters: IFilterInfo[] = filterTextList.map((filterText) => {\n const openParenIndex = filterText.indexOf('(');\n const closeParenIndex = filterText.lastIndexOf(')');\n // check parentheses\n if (openParenIndex !== -1 && closeParenIndex === -1) {\n raiseError(`Invalid filter format: missing closing parenthesis in \"${filterText}\"`);\n }\n if (closeParenIndex !== -1 && openParenIndex === -1) {\n raiseError(`Invalid filter format: missing opening parenthesis in \"${filterText}\"`);\n }\n if (openParenIndex === -1) {\n // no arguments\n const filterName = filterText.trim();\n const filterKey = `${filterName}():${filterIOType}`;\n let filterFn = filterFnByKey.get(filterKey);\n if (typeof filterFn === 'undefined') {\n filterFn = builtinFilterFn(filterName, [])(builtinFilters);\n filterFnByKey.set(filterKey, filterFn);\n }\n return {\n filterName: filterName,\n args: [],\n filterFn: filterFn,\n };\n } else {\n const argsText = filterText.substring(openParenIndex + 1, closeParenIndex);\n const filterName = filterText.substring(0, openParenIndex).trim();\n const args = parseFilterArgs(argsText);\n const filterKey = `${filterName}(${args.join(',')}):${filterIOType}`;\n let filterFn = filterFnByKey.get(filterKey);\n if (typeof filterFn === 'undefined') {\n filterFn = builtinFilterFn(filterName, args)(builtinFilters);\n filterFnByKey.set(filterKey, filterFn);\n }\n return {\n filterName,\n args,\n filterFn,\n };\n }\n });\n return filters;\n}","\nexport const trimFn = (s: string): string => s.trim();\n","import { DELIMITER, FILTER_SEPARATOR, MODIFIER_SEPARATOR } from \"../define\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { parseFilters } from \"./parseFilters\";\nimport { trimFn } from \"./utils\";\n\ntype PropPartParseResult = Pick<IBindingInfo, 'propName' | 'propSegments' | 'propModifiers' | 'inFilters'>;\n\nconst cacheFilterInfos = new Map<string, IFilterInfo[]>();\n\n// format: propName#moodifier1,modifier2\n// propName-format: path.to.property (e.g., textContent, style.color, not include :)\n// special path: \n// 'attr.attributeName' for attributes (e.g., attr.href, attr.data-id)\n// 'style.propertyName' for style properties (e.g., style.backgroundColor, style.fontSize)\n// 'class.className' for class names (e.g., class.active, class.hidden)\n// 'onclick', 'onchange' etc. for event listeners\n\nexport function parsePropPart(propPart: string): PropPartParseResult {\n const pos = propPart.indexOf(FILTER_SEPARATOR);\n let propText: string = '';\n let filterTexts: string[] = [];\n let filtersText = '';\n let filters: IFilterInfo[] = [];\n if (pos !== -1) {\n propText = propPart.slice(0, pos).trim();\n filtersText = propPart.slice(pos + 1).trim();\n if (cacheFilterInfos.has(filtersText)) {\n filters = cacheFilterInfos.get(filtersText)!;\n } else {\n filterTexts = filtersText.split(FILTER_SEPARATOR).map(trimFn);\n filters = parseFilters(filterTexts, \"input\");\n cacheFilterInfos.set(filtersText, filters);\n }\n } else {\n propText = propPart.trim();\n }\n\n const [propName, propModifiersText] = propText.split(MODIFIER_SEPARATOR).map(trimFn);\n const propSegments = propName.split(DELIMITER).map(trimFn);\n const propModifiers = propModifiersText\n ? propModifiersText.split(',').map(trimFn)\n : [];\n return {\n propName,\n propSegments,\n propModifiers,\n inFilters: filters,\n };\n}","import { getPathInfo } from \"../address/PathInfo\";\nimport { FILTER_SEPARATOR, STATE_NAME_SEPARATOR } from \"../define\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { parseFilters } from \"./parseFilters\";\nimport { trimFn } from \"./utils\";\n\ntype StatePartParseResult = Pick<IBindingInfo, \n 'stateName' | 'statePathName' | 'statePathInfo' | 'outFilters'>;\n\nconst cacheFilterInfos = new Map<string, IFilterInfo[]>();\n\n// format: statePath@stateName|filter|filter\n// statePath-format: path.to.property (e.g., user.name.first, users.*.name, users.0.name, not include @)\n// stateName: optional, default is 'default'\n// filters-format: filterName or filterName(arg1,arg2)\nexport function parseStatePart(statePart: string): StatePartParseResult {\n const pos = statePart.indexOf(FILTER_SEPARATOR);\n let stateAndPath: string = '';\n let filterTexts: string[] = [];\n let filtersText = '';\n let filters: IFilterInfo[] = [];\n if (pos !== -1) {\n stateAndPath = statePart.slice(0, pos).trim();\n filtersText = statePart.slice(pos + 1).trim();\n if (cacheFilterInfos.has(filtersText)) {\n filters = cacheFilterInfos.get(filtersText)!;\n } else {\n filterTexts = filtersText.split(FILTER_SEPARATOR).map(trimFn);\n filters = parseFilters(filterTexts, \"output\");\n cacheFilterInfos.set(filtersText, filters);\n }\n } else {\n stateAndPath = statePart.trim();\n }\n const [statePathName, stateName = 'default'] = stateAndPath.split(STATE_NAME_SEPARATOR).map(trimFn);\n const pathInfo = getPathInfo(statePathName);\n return {\n stateName,\n statePathName,\n statePathInfo: pathInfo,\n outFilters: filters,\n };\n}\n","import { getPathInfo } from \"../address/PathInfo.js\";\nimport { BINDING_SEPARATOR, PROP_VALUE_SEPARATOR } from \"../define.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { STRUCTURAL_BINDING_TYPE_SET } from \"../structural/define.js\";\nimport { parsePropPart } from \"./parsePropPart.js\";\nimport { parseStatePart } from \"./parseStatePart.js\";\nimport { ParseBindTextResult } from \"./types.js\";\nimport { trimFn } from \"./utils.js\";\n\n// format: propPart:statePart; propPart:statePart; ...\n// special-propPart:\n// if: statePart (single binding for conditional rendering)\n// else: (single binding for conditional rendering, and statePart is ignored)\n// elseif: statePart only (single binding for conditional rendering)\n// for: statePart only (single binding for loop rendering)\n// onclick: statePart, onchange: statePart etc. (event listeners)\n// ...: statePart (spread — expand wcBindable properties+inputs of target object)\n\nexport function parseBindTextsForElement(bindText: string): ParseBindTextResult[] {\n const [ ...bindTexts ] = bindText.split(BINDING_SEPARATOR).map(trimFn).filter(s => s.length > 0);\n const results = bindTexts.map((bindText): ParseBindTextResult => {\n const separatorIndex = bindText.indexOf(PROP_VALUE_SEPARATOR);\n if (separatorIndex === -1) {\n raiseError(`Invalid bindText: \"${bindText}\". Missing ':' separator between propPart and statePart.`);\n }\n const propPart = bindText.slice(0, separatorIndex).trim();\n const statePart = bindText.slice(separatorIndex + 1).trim();\n if (propPart === 'else') {\n const pathInfo = getPathInfo('#else');\n return {\n propName: 'else',\n propSegments: ['else'],\n propModifiers: [],\n statePathName: '#else',\n statePathInfo: pathInfo,\n stateName: '',\n inFilters: [],\n outFilters: [],\n bindingType: 'else',\n };\n } else if (propPart === '...') {\n const stateResult = parseStatePart(statePart);\n if (stateResult.outFilters.length > 0) {\n raiseError(`Invalid spread binding \"${bindText}\": filters are not allowed on spread targets.`);\n }\n if (stateResult.statePathName.length === 0) {\n raiseError(`Invalid spread binding \"${bindText}\": spread target path is required.`);\n }\n return {\n propName: '...',\n propSegments: ['...'],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: 'spread',\n };\n } else if (propPart === 'if'\n || propPart === 'elseif'\n || propPart === 'for'\n || propPart === 'radio'\n || propPart === 'checkbox'\n ) {\n const stateResult = parseStatePart(statePart);\n return {\n propName: propPart,\n propSegments: [propPart],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: propPart,\n };\n } else {\n const stateResult = parseStatePart(statePart);\n const propResult = parsePropPart(propPart);\n // eventToken.<prop>: <name> は要素 dispatch を state へ流す pub/sub 配線。\n // 値適用ではないため bindingType 'event' として listener attach 経路に乗せる。\n if (propResult.propSegments[0] === 'eventToken') {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'event',\n };\n }\n if (propResult.propSegments[0].startsWith('on')) {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'event',\n };\n } else {\n return {\n ...propResult,\n ...stateResult,\n bindingType: 'prop',\n };\n }\n }\n });\n // check for sigle binding for 'if', 'elseif', 'else', 'for'\n if (results.length > 1) {\n const isIncludeSingleBinding = results.some(r => STRUCTURAL_BINDING_TYPE_SET.has(r.bindingType));\n if (isIncludeSingleBinding) {\n raiseError(`Invalid bindText: \"${bindText}\". 'if', 'elseif', 'else', and 'for' bindings must be single binding.`);\n }\n }\n return results;\n}\n\n","import { config } from \"../config\";\n\nconst bindTextByNode = new WeakMap<Node, string>();\n\n// format: <!--@@wcs-text:path-->\n// bind-stateはconfig.commentTextPrefixで変更可能\n// format: <!--@@wcs-for:UUID-->\n// bind-stateはconfig.commentForPrefixで変更可能\n// format: <!--@@wcs-if:UUID-->\n// bind-stateはconfig.commentIfPrefixで変更可能\n// format: <!--@@wcs-else:UUID-->\n// bind-stateはconfig.commentElsePrefixで変更可能\n// format: <!--@@wcs-elseif:UUID-->\n// bind-stateはconfig.commentElseIfPrefixで変更可能\nconst bindingTypeKeywordSet: Set<string> = new Set<string>([\n config.commentTextPrefix,\n config.commentForPrefix,\n config.commentIfPrefix,\n config.commentElseIfPrefix,\n config.commentElsePrefix,\n]);\n\n// format: <!--@@:path-->は<!--@@wcs-text:path-->と同義にする\nconst EMBEDDED_REGEX = new RegExp(`^\\\\s*@@\\\\s*(.*?)\\\\s*:\\\\s*(.+?)\\\\s*$`);\n\nexport function parseCommentNode(node: Node): string | null {\n const savedText = bindTextByNode.get(node);\n if (typeof savedText === \"string\") {\n return savedText;\n }\n if (node.nodeType !== Node.COMMENT_NODE) {\n return null;\n }\n const commentNode = node as Comment;\n const text = commentNode.data.trim();\n const match = EMBEDDED_REGEX.exec(text);\n if (match === null) {\n return null;\n }\n // 空の場合は wcs-text として扱う\n const keyword = match[1] || config.commentTextPrefix;\n if (!bindingTypeKeywordSet.has(keyword)) {\n return null;\n }\n bindTextByNode.set(node, match[2]);\n return match[2];\n}\n\nexport function getCommentNodeBindText(node: Node): string | null {\n return bindTextByNode.get(node) || null;\n}","import { parseStatePart } from \"./parseStatePart.js\";\nimport { ParseBindTextResult } from \"./types.js\";\n\nexport function parseBindTextForEmbeddedNode(bindText: string): ParseBindTextResult {\n const stateResult = parseStatePart(bindText);\n return {\n propName: 'textContent',\n propSegments: ['textContent'],\n propModifiers: [],\n inFilters: [],\n ...stateResult,\n bindingType: 'text',\n }\n}","import { config } from \"../config\";\nimport { raiseError } from \"../raiseError\";\nimport { parseBindTextsForElement } from \"../bindTextParser/parseBindTextsForElement\";\nimport { parseCommentNode } from \"./parseCommentNode\";\nimport { parseBindTextForEmbeddedNode } from \"../bindTextParser/parseBindTextForEmbeddedNode\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { getFragmentInfoByUUID } from \"../structural/fragmentInfoByUUID\";\n\nexport function getParseBindTextResults(node: Node): ParseBindTextResult[] {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const bindText = element.getAttribute(config.bindAttributeName) || '';\n return parseBindTextsForElement(bindText);\n } else if (node.nodeType === Node.COMMENT_NODE) {\n const bindTextOrUUID = parseCommentNode(node);\n if (bindTextOrUUID === null) {\n raiseError(`Comment node binding text not found.`);\n }\n const fragmentInfo = getFragmentInfoByUUID(bindTextOrUUID);\n let parseBindingTextResult = fragmentInfo?.parseBindTextResult ?? null;\n let uuid: string | null = null;\n if (parseBindingTextResult === null) {\n // It is not a structural fragment UUID, so treat it as bindText\n parseBindingTextResult = parseBindTextForEmbeddedNode(bindTextOrUUID);\n uuid = null;\n } else {\n uuid = bindTextOrUUID;\n }\n return [{\n ...parseBindingTextResult,\n uuid: uuid,\n }]\n }\n return [];\n}","import { config } from \"../config\";\nimport { parseCommentNode } from \"./parseCommentNode\";\n\n/**\n * data-wcs 属性または埋め込みノード<!--{{}}-->を持つノードをすべて取得する\n * @param root \n * @returns \n */\n\nexport function getSubscriberNodes(root: Document | Element | DocumentFragment): Node[] {\n const subscriberNodes: Node[] = [];\n const walker = document.createTreeWalker(\n root, \n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT, \n {\n acceptNode(node: Node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n const hasBinding = element.hasAttribute(config.bindAttributeName);\n return hasBinding\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n } else {\n // Comment node\n return parseCommentNode(node) !== null\n ? NodeFilter.FILTER_ACCEPT \n : NodeFilter.FILTER_SKIP;\n }\n }\n }\n );\n \n while (walker.nextNode()) {\n subscriberNodes.push(walker.currentNode);\n }\n return subscriberNodes;\n}","import { expandSpread, hasUnresolvedSpread } from \"../bindTextParser/expandSpread\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { resolveNodePath } from \"../structural/resolveNodePath\";\nimport { IFragmentNodeInfo } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { getBindingInfos } from \"./getBindingInfos\";\nimport { setBindingsByNode } from \"./getBindingsByNode\";\nimport { getParseBindTextResults } from \"./getParseBindTextResults\";\nimport { getSubscriberNodes } from \"./getSubscriberNodes\";\nimport { resolveInitializedBinding } from \"./initializeBindingPromiseByNode\";\n\nconst registeredNodeSet = new WeakSet<Node>();\n\nexport interface IDeferredSpreadEntry {\n readonly node: Node;\n readonly tagName: string;\n readonly parseResults: ParseBindTextResult[];\n}\n\nfunction processParseResultsForNode(\n node: Node,\n parseResults: ParseBindTextResult[],\n options: { allowDeferred: boolean },\n): { bindings: IBindingInfo[], deferred: IDeferredSpreadEntry | null } {\n const expanded = expandSpread(node, parseResults, { allowDeferred: options.allowDeferred });\n if (hasUnresolvedSpread(expanded)) {\n const tagName = node.nodeType === Node.ELEMENT_NODE\n ? getCustomElement(node as Element)\n : null;\n if (tagName === null) {\n raiseError(`Spread binding deferred but element is not a custom element.`);\n }\n return { bindings: [], deferred: { node, tagName, parseResults } };\n }\n registeredNodeSet.add(node);\n const bindings = getBindingInfos(node, expanded);\n setBindingsByNode(node, bindings);\n resolveInitializedBinding(node);\n return { bindings, deferred: null };\n}\n\nexport function collectNodesAndBindingInfos(\n root: Document | Element | DocumentFragment\n): [ Node[], IBindingInfo[], IDeferredSpreadEntry[] ] {\n const subscriberNodes = getSubscriberNodes(root);\n const allBindings: IBindingInfo[] = [];\n const deferredSpreads: IDeferredSpreadEntry[] = [];\n for(const node of subscriberNodes) {\n if (registeredNodeSet.has(node)) continue;\n const parseResults = getParseBindTextResults(node);\n const result = processParseResultsForNode(node, parseResults, { allowDeferred: true });\n if (result.deferred !== null) {\n deferredSpreads.push(result.deferred);\n continue;\n }\n allBindings.push(...result.bindings);\n }\n return [subscriberNodes, allBindings, deferredSpreads];\n}\n\nexport function collectNodesAndBindingInfosByFragment(\n root: DocumentFragment,\n nodeInfos: IFragmentNodeInfo[],\n): [ Node[], IBindingInfo[] ] {\n const nodes: Node[] = [];\n const allBindings: IBindingInfo[] = [];\n for(const nodeInfo of nodeInfos) {\n const node = resolveNodePath(root, nodeInfo.nodePath);\n if (node === null) {\n raiseError(`Node not found by path [${nodeInfo.nodePath.join(', ')}] in fragment.`);\n }\n if (registeredNodeSet.has(node)) continue;\n const result = processParseResultsForNode(node, nodeInfo.parseBindTextResults, { allowDeferred: false });\n // deferred is impossible when allowDeferred=false (expandSpread raises instead)\n allBindings.push(...result.bindings);\n nodes.push(node);\n }\n return [nodes, allBindings];\n}\n\nexport function unregisterNode(node: Node): void {\n registeredNodeSet.delete(node);\n}\n\n/**\n * Re-process a deferred spread entry once the custom element class is\n * registered. Expands the captured parseResults, installs bindings, and\n * returns them so the caller can attach handlers and apply state values.\n */\nexport function processDeferredNode(entry: IDeferredSpreadEntry): IBindingInfo[] {\n const { node, parseResults } = entry;\n unregisterNode(node);\n const result = processParseResultsForNode(node, parseResults, { allowDeferred: false });\n return result.bindings;\n}\n","import { WILDCARD } from \"../define\";\nimport { IListIndex } from \"../list/types\";\nimport { IPathInfo, IStateAddress } from \"./types\";\n\nconst _cache: WeakMap<IListIndex, WeakMap<IPathInfo, IStateAddress>> = new WeakMap();\nconst _cacheNullListIndex: WeakMap<IPathInfo, IStateAddress> = new WeakMap();\n\nclass StateAddress implements IStateAddress {\n readonly pathInfo: IPathInfo;\n readonly listIndex: IListIndex | null;\n private _parentAddress: IStateAddress | null | undefined;\n\n constructor(pathInfo: IPathInfo, listIndex: IListIndex | null) {\n this.pathInfo = pathInfo;\n this.listIndex = listIndex;\n }\n\n get parentAddress(): IStateAddress | null {\n if (typeof this._parentAddress !== 'undefined') {\n return this._parentAddress;\n }\n const parentPathInfo = this.pathInfo.parentPathInfo;\n if (parentPathInfo === null) {\n return null;\n }\n const lastSegment = this.pathInfo.segments[this.pathInfo.segments.length - 1];\n let parentListIndex: IListIndex | null = null;\n if (lastSegment === WILDCARD) {\n parentListIndex = this.listIndex?.parentListIndex ?? null;\n } else {\n parentListIndex = this.listIndex;\n }\n return this._parentAddress = createStateAddress(parentPathInfo, parentListIndex);\n }\n}\n\nexport function createStateAddress(pathInfo: IPathInfo, listIndex: IListIndex | null): IStateAddress {\n if (listIndex === null) {\n let cached = _cacheNullListIndex.get(pathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new StateAddress(pathInfo, null);\n _cacheNullListIndex.set(pathInfo, cached);\n return cached;\n } else {\n let cacheByPathInfo = _cache.get(listIndex);\n if (typeof cacheByPathInfo === \"undefined\") {\n cacheByPathInfo = new WeakMap<IPathInfo, IStateAddress>();\n _cache.set(listIndex, cacheByPathInfo);\n }\n let cached = cacheByPathInfo.get(pathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new StateAddress(pathInfo, listIndex);\n cacheByPathInfo.set(pathInfo, cached);\n return cached;\n }\n}","// command-token / event-token が共有する pub/sub プリミティブ。\n// _subscribers は Set のため挿入順を保持する。\n// emit() は subscribe() された順に呼び出され、戻り値配列も同じ順序で返る。\n//\n// 「誰が subscribe し誰が emit するか」だけが command / event の違い:\n// - command-token: element が subscribe / state が emit\n// - event-token: state(`$on`) が subscribe / element(listener) が emit\n\nexport type TokenSubscriber = (...args: unknown[]) => unknown;\n\nexport interface IToken {\n readonly name: string;\n readonly size: number;\n subscribe(fn: TokenSubscriber): () => void;\n unsubscribe(fn: TokenSubscriber): boolean;\n emit(...args: unknown[]): unknown[];\n}\n\nexport class Token implements IToken {\n private _name: string;\n private _subscribers: Set<TokenSubscriber> = new Set();\n\n constructor(name: string) {\n this._name = name;\n }\n\n get name(): string {\n return this._name;\n }\n\n get size(): number {\n return this._subscribers.size;\n }\n\n subscribe(fn: TokenSubscriber): () => void {\n this._subscribers.add(fn);\n return () => {\n this._subscribers.delete(fn);\n };\n }\n\n unsubscribe(fn: TokenSubscriber): boolean {\n return this._subscribers.delete(fn);\n }\n\n emit(...args: unknown[]): unknown[] {\n const results: unknown[] = [];\n for (const fn of this._subscribers) {\n results.push(fn(...args));\n }\n return results;\n }\n}\n","import { Token } from \"../token/Token\";\nimport { ICommandToken } from \"./types\";\n\n// CommandToken は共有 pub/sub プリミティブ Token の薄い特化。\n// instanceof による型判別を成立させるため独立クラスとして維持する。\nexport class CommandToken extends Token implements ICommandToken {\n}\n\nexport function isCommandToken(value: unknown): value is ICommandToken {\n return value instanceof CommandToken;\n}\n","import { ILoopContext } from \"./types\";\n\nconst loopContextByNode = new WeakMap<Node, ILoopContext>();\n\nexport function getLoopContextByNode(node: Node): ILoopContext | null {\n let paramNode: Node | null = node;\n while (paramNode) {\n const loopContext = loopContextByNode.get(paramNode);\n if (loopContext) {\n return loopContext;\n }\n paramNode = paramNode.parentNode;\n }\n return null;\n}\n\nexport function setLoopContextByNode(node: Node, loopContext: ILoopContext | null): void {\n if (loopContext === null) {\n loopContextByNode.delete(node);\n return;\n }\n loopContextByNode.set(node, loopContext);\n}\n","\nexport const setLoopContextAsyncSymbol: unique symbol = Symbol(\"$$setLoopContextAsync\");\nexport const setLoopContextSymbol: unique symbol = Symbol(\"$$setLoopContext\");\nexport const getByAddressSymbol: unique symbol = Symbol(\"$$getByAddress\");\nexport const setByAddressSymbol: unique symbol = Symbol(\"$$setByAddress\");\nexport const connectedCallbackSymbol: unique symbol = Symbol(\"$$connectedCallback\");\nexport const disconnectedCallbackSymbol: unique symbol = Symbol(\"$$disconnectedCallback\");\nexport const updatedCallbackSymbol: unique symbol = Symbol(\"$$updatedCallback\");\n","import { IBindingInfo } from \"../types\";\n\n/**\n * イベントハンドラ登録の台帳。\n *\n * 旧実装は Map<string, Set<IBindingInfo>>(文字列キーの強参照 Map)で binding を\n * 保持していたため、binding.node → 行 DOM サブツリー全体が解放不能だった\n * (detach 系はほぼ呼ばれないため、リスト削除後も全イベントバインディングが\n * 永久保持されるリーク。clear-10k 後に 10k 行分の detached DOM が残留していた)。\n *\n * WeakSet(帰属判定・冪等性)と件数カウンタ(「最後の 1 件が外れたらハンドラを\n * 掃除する」判定)に分離し、binding を強参照しない。GC で binding が消えた場合\n * カウンタは減らないが、残るのはキー文字列と数値のみで実害はない。\n */\nexport interface IHandlerBindingRegistry {\n /** binding を key に登録する。新規登録なら true を返す(既登録は冪等に false) */\n add(key: string, binding: IBindingInfo): boolean;\n /** binding を key から外す。key の登録件数が 0 になったら true を返す */\n remove(key: string, binding: IBindingInfo): boolean;\n has(key: string, binding: IBindingInfo): boolean;\n countOf(key: string): number;\n readonly keyCount: number;\n clear(): void;\n}\n\nexport function createHandlerBindingRegistry(): IHandlerBindingRegistry {\n const attachedByKey = new Map<string, WeakSet<IBindingInfo>>();\n const countByKey = new Map<string, number>();\n return {\n add(key: string, binding: IBindingInfo): boolean {\n let attached = attachedByKey.get(key);\n if (typeof attached === \"undefined\") {\n attached = new WeakSet<IBindingInfo>();\n attachedByKey.set(key, attached);\n }\n if (attached.has(binding)) {\n return false;\n }\n attached.add(binding);\n countByKey.set(key, (countByKey.get(key) ?? 0) + 1);\n return true;\n },\n remove(key: string, binding: IBindingInfo): boolean {\n const attached = attachedByKey.get(key);\n if (typeof attached === \"undefined\" || !attached.has(binding)) {\n return false;\n }\n attached.delete(binding);\n const next = (countByKey.get(key) ?? 1) - 1;\n if (next <= 0) {\n attachedByKey.delete(key);\n countByKey.delete(key);\n return true;\n }\n countByKey.set(key, next);\n return false;\n },\n has(key: string, binding: IBindingInfo): boolean {\n return attachedByKey.get(key)?.has(binding) ?? false;\n },\n countOf(key: string): number {\n return countByKey.get(key) ?? 0;\n },\n get keyCount(): number {\n return countByKey.size;\n },\n clear(): void {\n attachedByKey.clear();\n countByKey.clear();\n },\n };\n}\n","import { createStateAddress } from \"../address/StateAddress\";\nimport { IPathInfo } from \"../address/types\";\nimport { isCommandToken } from \"../command/CommandToken\";\nimport { ICommandToken } from \"../command/types\";\nimport { STATE_COMMAND_NAMESPACE_NAME } from \"../define\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { getByAddressSymbol, setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"../types\";\nimport { createHandlerBindingRegistry } from \"./handlerBindingRegistry\";\n\n// onclick: $command.<name> のように、DOM イベントから command token を直接 emit する形式かを判定する。\n// 右辺が $command 名前空間配下のパス($command.<token>)のときに true。\nfunction isCommandTokenPath(statePathName: string): boolean {\n return statePathName.startsWith(STATE_COMMAND_NAMESPACE_NAME + \".\");\n}\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\n// binding を強参照しない台帳(handlerBindingRegistry.ts のリーク解説を参照)\nconst bindingRegistry = createHandlerBindingRegistry();\n\nfunction getHandlerKey(binding: IBindingInfo): string {\n const modifierKey = binding.propModifiers.filter(m => m === 'prevent' || m === 'stop').sort().join(',');\n return `${binding.stateName}::${binding.statePathName}::${modifierKey}`;\n}\n\nconst stateEventHandlerFunction = (\n stateName: string,\n handlerName: string,\n modifiers: string[],\n statePathInfo: IPathInfo\n) => (event: Event): any => {\n if (modifiers.includes('prevent')) event.preventDefault();\n if (modifiers.includes('stop')) event.stopPropagation();\n\n const node = event.target as Element;\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for event handler.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n const isCommand = isCommandTokenPath(handlerName);\n stateElement.createStateAsync(\"writable\", async (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n const indexes = loopContext?.listIndex.indexes ?? [];\n if (isCommand) {\n // command token を解決して emit。引数はハンドラ呼び出しと同じく (event, ...listIndexes) を透過する。\n const token = state[getByAddressSymbol](createStateAddress(statePathInfo, null));\n if (!isCommandToken(token)) {\n raiseError(`Event binding \"${handlerName}\" did not resolve to a CommandToken. Declare the name in $commandTokens and reference it as $command.<name>.`);\n }\n return (token as ICommandToken).emit(event, ...indexes);\n }\n const handler = state[handlerName];\n if (typeof handler !== \"function\") {\n raiseError(`Handler \"${handlerName}\" is not a function on state \"${stateName}\".`);\n }\n return Reflect.apply(handler, state, [event, ...indexes]);\n });\n });\n}\n\nexport function attachEventHandler(binding: IBindingInfo): boolean {\n if (!binding.propName.startsWith(\"on\")) {\n return false;\n }\n const key = getHandlerKey(binding);\n let stateEventHandler = handlerByHandlerKey.get(key);\n if (typeof stateEventHandler === \"undefined\") {\n stateEventHandler = stateEventHandlerFunction(binding.stateName, binding.statePathName, binding.propModifiers, binding.statePathInfo);\n handlerByHandlerKey.set(key, stateEventHandler);\n }\n\n const eventName = binding.propName.slice(2);\n (binding.node as Element).addEventListener(eventName, stateEventHandler);\n\n bindingRegistry.add(key, binding);\n return true;\n}\n\nexport function detachEventHandler(binding: IBindingInfo): boolean {\n if (!binding.propName.startsWith(\"on\")) {\n return false;\n }\n const key = getHandlerKey(binding);\n const stateEventHandler = handlerByHandlerKey.get(key);\n if (typeof stateEventHandler === \"undefined\") {\n return false;\n }\n const eventName = binding.propName.slice(2);\n (binding.node as Element).removeEventListener(eventName, stateEventHandler);\n\n if (bindingRegistry.countOf(key) === 0) {\n return false;\n }\n if (bindingRegistry.remove(key, binding)) {\n handlerByHandlerKey.delete(key);\n }\n return true;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingRegistry,\n getHandlerKey,\n};\n\n","import { Token } from \"../token/Token\";\n\n// EventToken は共有 pub/sub プリミティブ Token の薄い特化(element→state 方向)。\n// instanceof による型判別を成立させるため独立クラスとして維持する。\nexport class EventToken extends Token {\n}\n\nexport function isEventToken(value: unknown): value is EventToken {\n return value instanceof EventToken;\n}\n","import { IStateElement } from \"../components/types\";\nimport { EventToken } from \"./EventToken\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, EventToken>> = new WeakMap();\n\nexport function getOrCreateEventToken(stateElement: IStateElement, name: string): EventToken {\n let registry = registryByStateElement.get(stateElement);\n if (typeof registry === \"undefined\") {\n registry = new Map<string, EventToken>();\n registryByStateElement.set(stateElement, registry);\n }\n let token = registry.get(name);\n if (typeof token === \"undefined\") {\n token = new EventToken(name);\n registry.set(name, token);\n }\n return token;\n}\n\nexport function clearEventTokenRegistry(stateElement: IStateElement): void {\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * eventToken.<propertyName>: <eventTokenName> バインディングの attach ハンドラ。\n *\n * command-token の双対(element→state)。要素が dispatch する CustomEvent を受けて\n * event-token を emit し、state 側の `$on` ハンドラ群へ pub/sub で配送する。\n *\n * 設計(MVP スコープ: wc-bindable カスタム要素のみ):\n * - キーは生イベント名ではなく **wcBindable property 名**。実 DOM イベント名は\n * wcBindable.properties[].event から解決する(command-token が wcBindable.commands で\n * 検証するのと対称。コロンを含む namespaced event 名と binding 構文の `:` 衝突も回避)。\n * - <prop> が wcBindable.properties に宣言されていることは attach 時に検証する\n * (要素クラス参照のみで DOM 接続に非依存。fail-fast / typo 耐性)。\n * - <eventTokenName> が $eventTokens に宣言されていることは **発火時** に検証する\n * (state 解決が必要なため。詳細は下記の fire-time 解決の注記を参照)。\n * - subscriber 引数規約は `(state, event, ...listIndexes)`。\n * - modifier `#prevent` / `#stop` は既存イベント binding と同等にサポート。\n *\n * token はイベント発火ごとに registry から解決する(getOrCreateEventToken)。これにより\n * state の再 set で registry が作り直されても最新の subscriber 群へ配送できる。\n *\n * state element の解決と `$eventTokens` 検証は **発火時** に行う(attach 時ではない)。\n * 構造ブロック(for/if)や SSR hydration では、binding 初期化時にノードが detached な\n * DocumentFragment / wrapper 上にあり、その時点では element.getRootNode() から state を\n * 解決できないため。onclick / two-way ハンドラと同じく fire-time 解決に揃えている。\n */\n\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { IBindingInfo } from \"../types\";\nimport { IWcBindable } from \"./types\";\nimport { getOrCreateEventToken } from \"./eventTokenRegistry\";\n\ninterface IEventTokenListener {\n readonly eventName: string;\n readonly handler: (event: Event) => void;\n}\n\nconst listenerByBinding: WeakMap<IBindingInfo, IEventTokenListener> = new WeakMap();\n\nfunction getWcBindable(element: Element): IWcBindable | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n // attach 側で未定義要素は whenDefined 後に再試行するため、ここに来る時点で customClass は定義済み。\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n const bindable = customClass?.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n return bindable;\n }\n return null;\n}\n\nexport function attachEventTokenHandler(binding: IBindingInfo): boolean {\n if (binding.propSegments[0] !== \"eventToken\") {\n return false;\n }\n const element = binding.node as Element;\n\n // カスタム要素が未定義なら定義後に再試行(wcBindable が必要なため)。\n const customTagName = getCustomElement(element);\n if (customTagName !== null && customElements.get(customTagName) === undefined) {\n customElements.whenDefined(customTagName).then(() => {\n attachEventTokenHandler(binding);\n });\n return true;\n }\n\n // 再評価で二重 attach しない。\n if (listenerByBinding.has(binding)) {\n return true;\n }\n\n const propertyName = binding.propSegments[1];\n if (typeof propertyName !== \"string\" || propertyName.length === 0) {\n raiseError(`eventToken binding requires a property name (e.g., \"eventToken.error\").`);\n }\n\n const bindable = getWcBindable(element);\n if (bindable === null) {\n raiseError(`eventToken binding requires a wc-bindable custom element. <${element.tagName.toLowerCase()}> is not wc-bindable.`);\n }\n const propDesc = bindable.properties.find((p) => p.name === propertyName);\n if (typeof propDesc === \"undefined\") {\n raiseError(`Property \"${propertyName}\" is not declared in wcBindable.properties of <${element.tagName.toLowerCase()}>.`);\n }\n const eventName = propDesc.event;\n\n const tokenName = binding.statePathName;\n const stateName = binding.stateName;\n const modifiers = binding.propModifiers;\n const handler = (event: Event): void => {\n if (modifiers.includes(\"prevent\")) event.preventDefault();\n if (modifiers.includes(\"stop\")) event.stopPropagation();\n\n // state は発火時の live root から解決する(attach 時は detached の可能性があるため)。\n const rootNode = element.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for eventToken handler.`);\n }\n if (!stateElement.eventTokenNames.has(tokenName)) {\n raiseError(`eventToken \"${tokenName}\" is not declared in $eventTokens of state \"${stateName}\".`);\n }\n const loopContext = getLoopContextByNode(element);\n stateElement.createStateAsync(\"writable\", async (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n const indexes = loopContext?.listIndex.indexes ?? [];\n const token = getOrCreateEventToken(stateElement, tokenName);\n return token.emit(state, event, ...indexes);\n });\n });\n };\n\n element.addEventListener(eventName, handler);\n listenerByBinding.set(binding, { eventName, handler });\n return true;\n}\n\nexport function detachEventTokenHandler(binding: IBindingInfo): boolean {\n if (binding.propSegments[0] !== \"eventToken\") {\n return false;\n }\n const listener = listenerByBinding.get(binding);\n if (typeof listener === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(listener.eventName, listener.handler);\n listenerByBinding.delete(binding);\n return true;\n}\n\nexport const __private__ = {\n listenerByBinding,\n};\n","import { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IWcBindable } from \"./types\";\n\nconst CHECK_TYPES = new Set([ 'radio', 'checkbox' ]);\nconst DEFAULT_VALUE_PROP_NAMES = new Set([ 'value', 'valueAsNumber', 'valueAsDate' ]);\n\nexport function isPossibleTwoWay(node: Node, propName: string): boolean {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'input') {\n const inputType = (element.getAttribute('type') || 'text').toLowerCase();\n if (inputType === 'button') {\n return false;\n }\n if (CHECK_TYPES.has(inputType) && propName === 'checked') {\n return true;\n }\n if (DEFAULT_VALUE_PROP_NAMES.has(propName)) {\n return true;\n }\n }\n if (tagName === 'select' && propName === 'value') {\n return true;\n }\n if (tagName === 'textarea' && propName === 'value') {\n return true;\n }\n const customTagName = getCustomElement(element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined. Cannot determine if property \"${propName}\" is suitable for two-way binding.`);\n }\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n if (bindable.properties.some(p => p.name === propName)) {\n return true;\n }\n }\n }\n return false;\n}","import { isPossibleTwoWay } from \"./isPossibleTwoWay\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { IWcBindable } from \"./types\";\nimport { createHandlerBindingRegistry } from \"./handlerBindingRegistry\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\n// binding を強参照しない台帳(handlerBindingRegistry.ts のリーク解説を参照)\nconst bindingRegistry = createHandlerBindingRegistry();\n\nconst DEFAULT_GETTER = (e: Event) => (e as CustomEvent).detail;\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string, hasGetter: boolean): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.propName}::${binding.statePathName}::${eventName}::${filterKey}::${hasGetter ? 'g' : 'n'}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n const tagName = (binding.node as Element).tagName.toLowerCase();\n // 1.default event name\n let eventName = (tagName === 'select') ? 'change' : 'input';\n // 2.wcBindable protocol\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined. Cannot determine event name for two-way binding.`);\n }\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n const propDesc = bindable.properties.find(p => p.name === binding.propName);\n if (propDesc) {\n eventName = propDesc.event;\n }\n }\n }\n // 3.modifier\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nfunction getValueGetter(binding: IBindingInfo): ((event: Event) => any) | null {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName) as any;\n if (customClass) {\n const bindable: IWcBindable | undefined = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n const propDesc = bindable.properties.find(p => p.name === binding.propName);\n if (propDesc) {\n return propDesc.getter ?? DEFAULT_GETTER;\n }\n }\n }\n }\n return null;\n}\n\nconst twowayEventHandlerFunction = (\n stateName: string,\n propName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n valueGetter: ((event: Event) => any) | null,\n) => (event: Event): any => {\n const node = event.target as Element;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n let newValue: any;\n if (valueGetter !== null) {\n newValue = valueGetter(event);\n } else {\n if (!(propName in node)) {\n console.warn(`[@wcstack/state] Property \"${propName}\" does not exist on target element.`);\n return;\n }\n newValue = (node as any)[propName];\n }\n let filteredNewValue = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[statePathName] = filteredNewValue;\n });\n });\n}\n\nexport function attachTwowayEventHandler(binding: IBindingInfo): void {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName);\n if (typeof customClass === \"undefined\") {\n customElements.whenDefined(customTagName).then(() => {\n attachTwowayEventHandler(binding);\n });\n return;\n }\n }\n\n if (isPossibleTwoWay(binding.node, binding.propName) && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const valueGetter = getValueGetter(binding);\n const key = getHandlerKey(binding, eventName, valueGetter !== null);\n let twowayEventHandler = handlerByHandlerKey.get(key);\n if (typeof twowayEventHandler === \"undefined\") {\n twowayEventHandler = twowayEventHandlerFunction(\n binding.stateName,\n binding.propName,\n binding.statePathName,\n binding.inFilters,\n valueGetter\n );\n handlerByHandlerKey.set(key, twowayEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, twowayEventHandler);\n bindingRegistry.add(key, binding);\n }\n}\n\nexport function detachTwowayEventHandler(binding: IBindingInfo): void {\n const customTagName = getCustomElement(binding.node as Element);\n if (customTagName !== null) {\n const customClass = customElements.get(customTagName);\n if (typeof customClass === \"undefined\") {\n customElements.whenDefined(customTagName).then(() => {\n detachTwowayEventHandler(binding);\n });\n return;\n }\n }\n\n if (isPossibleTwoWay(binding.node, binding.propName) && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const valueGetter = getValueGetter(binding);\n const key = getHandlerKey(binding, eventName, valueGetter !== null);\n const twowayEventHandler = handlerByHandlerKey.get(key);\n if (typeof twowayEventHandler === \"undefined\") {\n return;\n }\n (binding.node as Element).removeEventListener(eventName, twowayEventHandler);\n\n if (bindingRegistry.remove(key, binding)) {\n handlerByHandlerKey.delete(key);\n }\n }\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingRegistry,\n getHandlerKey,\n getEventName,\n getValueGetter,\n twowayEventHandlerFunction,\n DEFAULT_GETTER,\n};\n","import { IAbsoluteStateAddress } from \"../address/types\";\n\nconst lastListValueByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, readonly unknown[]> = new WeakMap();\n\nexport function getLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): readonly unknown[] {\n return lastListValueByAbsoluteStateAddress.get(address) ?? [];\n}\n\nexport function setLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress, value: readonly unknown[]): void {\n lastListValueByAbsoluteStateAddress.set(address, value);\n}\n\nexport function clearLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): void {\n lastListValueByAbsoluteStateAddress.delete(address);\n}\n\nexport function hasLastListValueByAbsoluteStateAddress(address: IAbsoluteStateAddress): boolean {\n return lastListValueByAbsoluteStateAddress.has(address);\n}\n","import { IStateElement } from \"../components/types\";\nimport { IAbsolutePathInfo, IPathInfo } from \"./types\";\n\nconst _cache: WeakMap<IStateElement, WeakMap<IPathInfo, IAbsolutePathInfo>> = new WeakMap();\n\nexport function getAbsolutePathInfo(stateElement: IStateElement, pathInfo: IPathInfo): IAbsolutePathInfo {\n if (_cache.has(stateElement)) {\n const pathMap = _cache.get(stateElement)!;\n if (pathMap.has(pathInfo)) {\n return pathMap.get(pathInfo)!;\n }\n } else {\n _cache.set(stateElement, new WeakMap());\n }\n const absolutePathInfo = Object.freeze(new AbsolutePathInfo(stateElement, pathInfo));\n _cache.get(stateElement)!.set(pathInfo, absolutePathInfo);\n return absolutePathInfo;\n}\n\nclass AbsolutePathInfo implements IAbsolutePathInfo {\n readonly pathInfo: IPathInfo;\n readonly stateName: string;\n readonly stateElement: IStateElement;\n readonly parentAbsolutePathInfo: IAbsolutePathInfo | null;\n constructor(stateElement: IStateElement, pathInfo: IPathInfo) {\n this.pathInfo = pathInfo;\n this.stateName = stateElement.name;\n this.stateElement = stateElement;\n if (pathInfo.parentPathInfo === null) {\n this.parentAbsolutePathInfo = null;\n } else {\n this.parentAbsolutePathInfo = getAbsolutePathInfo(stateElement, pathInfo.parentPathInfo);\n }\n }\n}","import { WILDCARD } from \"../define\";\nimport { IListIndex } from \"../list/types\";\nimport { IAbsolutePathInfo, IAbsoluteStateAddress } from \"./types\";\n\nconst _cache: WeakMap<IListIndex, WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress>> = new WeakMap();\nconst _cacheNullListIndex: WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress> = new WeakMap();\n\nclass AbsoluteStateAddress implements IAbsoluteStateAddress {\n readonly absolutePathInfo: IAbsolutePathInfo;\n readonly listIndex: IListIndex | null;\n private _parentAbsoluteAddress: IAbsoluteStateAddress | null | undefined;\n\n constructor(absolutePathInfo: IAbsolutePathInfo, listIndex: IListIndex | null) {\n this.absolutePathInfo = absolutePathInfo;\n this.listIndex = listIndex;\n }\n\n get parentAbsoluteAddress(): IAbsoluteStateAddress | null {\n if (typeof this._parentAbsoluteAddress !== 'undefined') {\n return this._parentAbsoluteAddress;\n }\n const parentAbsolutePathInfo = this.absolutePathInfo.parentAbsolutePathInfo;\n if (parentAbsolutePathInfo === null) {\n return null;\n }\n const lastSegment = this.absolutePathInfo.pathInfo.segments[this.absolutePathInfo.pathInfo.segments.length - 1];\n let parentListIndex: IListIndex | null = null;\n if (lastSegment === WILDCARD) {\n parentListIndex = this.listIndex?.parentListIndex ?? null;\n } else {\n parentListIndex = this.listIndex;\n }\n return this._parentAbsoluteAddress = createAbsoluteStateAddress(\n parentAbsolutePathInfo,\n parentListIndex\n );\n }\n}\n\nexport function createAbsoluteStateAddress(absolutePathInfo: IAbsolutePathInfo, listIndex: IListIndex | null): IAbsoluteStateAddress {\n if (listIndex === null) {\n let cached = _cacheNullListIndex.get(absolutePathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new AbsoluteStateAddress(absolutePathInfo, null);\n _cacheNullListIndex.set(absolutePathInfo, cached);\n return cached;\n } else {\n let cacheByAbsolutePathInfo = _cache.get(listIndex);\n if (typeof cacheByAbsolutePathInfo === \"undefined\") {\n cacheByAbsolutePathInfo = new WeakMap<IAbsolutePathInfo, IAbsoluteStateAddress>();\n _cache.set(listIndex, cacheByAbsolutePathInfo);\n }\n let cached = cacheByAbsolutePathInfo.get(absolutePathInfo);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n cached = new AbsoluteStateAddress(absolutePathInfo, listIndex);\n cacheByAbsolutePathInfo.set(absolutePathInfo, cached);\n return cached;\n }\n}\n","\nconst rootNodeByFragment: WeakMap<DocumentFragment, Node> = new WeakMap();\n\nexport function setRootNodeByFragment(fragment: DocumentFragment, rootNode: Node | null): void {\n if (rootNode === null) {\n rootNodeByFragment.delete(fragment);\n } else {\n rootNodeByFragment.set(fragment, rootNode);\n }\n}\n\nexport function getRootNodeByFragment(fragment: DocumentFragment): Node | null {\n return rootNodeByFragment.get(fragment) || null;\n}\n","import { IPathInfo } from \"./types.js\";\n\nconst cacheCalcWildcardLen: Map<string, number> = new Map(); \n\nexport function calcWildcardLen(pathInfo: IPathInfo, targetPathInfo: IPathInfo): number {\n let path1: IPathInfo;\n let path2: IPathInfo;\n if (pathInfo.wildcardCount === 0 || targetPathInfo.wildcardCount === 0) {\n return 0;\n }\n if (pathInfo.wildcardCount === 1 \n && targetPathInfo.wildcardCount > 0 \n && targetPathInfo.wildcardPathSet.has(pathInfo.path)) {\n return 1;\n }\n if (pathInfo.id < targetPathInfo.id) {\n path1 = pathInfo;\n path2 = targetPathInfo;\n } else {\n path1 = targetPathInfo;\n path2 = pathInfo;\n }\n const key = `${path1.path}\\t${path2.path}`;\n let len = cacheCalcWildcardLen.get(key);\n if (typeof len !== \"undefined\") {\n return len;\n }\n const matchPath = path1.wildcardPathSet.intersection(path2.wildcardPathSet);\n len = matchPath.size;\n cacheCalcWildcardLen.set(key, len);\n return len;\n}\n\n","import { calcWildcardLen } from \"../address/calcWildcardLen\";\nimport { IBindingInfo } from \"../types\";\nimport { getLoopContextByNode } from \"./loopContextByNode\";\nimport { IListIndex, ILoopContext } from \"./types\";\n\nconst listIndexByBindingInfoByLoopContext: WeakMap<ILoopContext, WeakMap<IBindingInfo, IListIndex | null>> = new WeakMap();\n\nexport function getListIndexByBindingInfo(bindingInfo: IBindingInfo): IListIndex | null {\n const loopContext = getLoopContextByNode(bindingInfo.node);\n if (loopContext === null) {\n return null;\n }\n let listIndexByBindingInfo = listIndexByBindingInfoByLoopContext.get(loopContext);\n if (typeof listIndexByBindingInfo === \"undefined\") {\n listIndexByBindingInfo = new WeakMap<IBindingInfo, IListIndex | null>();\n listIndexByBindingInfoByLoopContext.set(loopContext, listIndexByBindingInfo);\n } else {\n const listIndex = listIndexByBindingInfo.get(bindingInfo);\n if (typeof listIndex !== \"undefined\") {\n return listIndex;\n }\n }\n\n let listIndex: IListIndex | null = null;\n try {\n const wildcardLen = calcWildcardLen(loopContext.pathInfo, bindingInfo.statePathInfo);\n if (wildcardLen > 0) {\n listIndex = loopContext.listIndex.at(wildcardLen - 1);\n }\n return listIndex;\n } finally {\n listIndexByBindingInfo.set(bindingInfo, listIndex);\n }\n\n}\n","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { IAbsoluteStateAddress } from \"../address/types\";\nimport { getRootNodeByFragment } from \"../apply/rootNodeByFragment\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"./types\";\n\nconst absoluteStateAddressByBinding: WeakMap<IBindingInfo, IAbsoluteStateAddress> = new WeakMap();\n\nexport function getAbsoluteStateAddressByBinding(binding: IBindingInfo): IAbsoluteStateAddress {\n // 切断されていても、キャッシュされていれば絶対状態アドレスを返す。\n let absoluteStateAddress: IAbsoluteStateAddress | null = null;\n absoluteStateAddress = absoluteStateAddressByBinding.get(binding) || null;\n if (absoluteStateAddress !== null) {\n return absoluteStateAddress;\n }\n\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n // binding.replaceNodeはisConnected=trueになっていることが前提、切断されている場合はraiseErrorを返す\n if (binding.replaceNode.isConnected === false) {\n // DocumentFragmentでバッファリングされている場合は、ルートノードをDocumentFragmentから実際のルートノードに切り替える\n const rootNodeByFragment = getRootNodeByFragment(rootNode as DocumentFragment);\n if (rootNodeByFragment === null) {\n raiseError(`Cannot get absolute state address for disconnected binding: ${binding.bindingType} ${binding.statePathName} on ${binding.node.nodeName}`);\n } else {\n rootNode = rootNodeByFragment;\n }\n }\n\n const listIndex = getListIndexByBindingInfo(binding);\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n const absolutePathInfo = getAbsolutePathInfo(stateElement, binding.statePathInfo);\n absoluteStateAddress = \n createAbsoluteStateAddress(absolutePathInfo, listIndex);\n absoluteStateAddressByBinding.set(binding, absoluteStateAddress);\n return absoluteStateAddress;\n}\n\nexport function clearAbsoluteStateAddressByBinding(binding: IBindingInfo) {\n absoluteStateAddressByBinding.delete(binding);\n}","import { IStateElement } from \"../components/types\";\n\nconst completeByStateElementByWebComponent = new WeakMap<Element, WeakMap<IStateElement, boolean>>();\n\nexport function markWebComponentAsComplete(webComponent: Element, stateElement: IStateElement): void {\n let completeByStateElement = completeByStateElementByWebComponent.get(webComponent);\n if (!completeByStateElement) {\n completeByStateElement = new WeakMap<IStateElement, boolean>();\n completeByStateElementByWebComponent.set(webComponent, completeByStateElement);\n }\n completeByStateElement.set(stateElement, true);\n}\n\nexport function isWebComponentComplete(webComponent: Element, stateElement: IStateElement): boolean {\n const completeByStateElement = completeByStateElementByWebComponent.get(webComponent);\n if (!completeByStateElement) {\n return false;\n }\n return completeByStateElement.get(stateElement) === true;\n}\n","import { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToAttribute(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const attrName = binding.propSegments[1];\n if (element.getAttribute(attrName) !== newValue) {\n element.setAttribute(attrName, newValue as string);\n }\n}\n","\nexport function createEmptyArray<T>(): Readonly<Array<T>> {\n return Object.freeze<Array<T>>([]);\n}\n","import { IFilterInfo } from \"../binding/types.js\";\n\nexport function getFilteredValue(value: any, filters: IFilterInfo[]) {\n let filteredValue = value;\n for(const filter of filters) {\n filteredValue = filter.filterFn(filteredValue);\n }\n return filteredValue;\n}\n","import { createEmptyArray } from \"../createEmptyArray\";\nimport { IBindingInfo } from \"../types\";\nimport { getFilteredValue } from \"./getFilteredValue\";\nimport { IApplyContext } from \"./types\";\n\nconst EMPTY_ARRAY = createEmptyArray<unknown>();\n\nexport function applyChangeToCheckbox(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as HTMLInputElement;\n const elementValue = element.value;\n const elementFilteredValue = getFilteredValue(elementValue, binding.inFilters);\n const normalizedNewValue = Array.isArray(newValue) ? newValue : EMPTY_ARRAY;\n element.checked = normalizedNewValue.includes(elementFilteredValue);\n}\n","import { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToClass(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const className = binding.propSegments[1];\n if (typeof newValue !== 'boolean') {\n raiseError(`Invalid value for class application: expected boolean, got ${typeof newValue}`);\n }\n element.classList.toggle(className, newValue as boolean);\n}","/**\n * command.<methodName>: <commandToken-path> バインディングの適用ハンドラ。\n *\n * subscribe lifecycle:\n * - 同一 binding に同じ token が再評価された場合は no-op。\n * - 異なる token が来た場合は古い subscription を解除し、新しい token に subscribe し直す。\n * 旧解除は新しい binding 妥当性検証(methodName・wcBindable.commands チェック)を\n * 通過した後に行うため、再評価が validation で失敗しても旧購読は温存される(fail-fast)。\n * - element は WeakRef で保持し、subscriber 経由で element を強参照しないようにする。\n * これにより、element が DOM から消えた後に subscriber が token._subscribers に\n * 残っていても element 本体は GC 可能。\n * - emit 時に下記いずれかなら自動で subscription を破棄する(lazy purge):\n * - WeakRef.deref() が undefined(element が既に GC 済み)\n * - element.isConnected が false(DOM から取り外されている)\n *\n * 既知の制約:\n * - emit が来なければ stale subscriber は token に残り続ける(要素が GC されても subscriber 関数自体は残る)。\n * state インスタンスが disconnect されたタイミングで registry ごとクリアされるため、最終的には解放される。\n * element ライフサイクルに直接フックする手段が現状の binding 機構に無いため、能動的な purge は将来課題。\n */\n\nimport { isCommandToken } from \"../command/CommandToken\";\nimport { ICommandToken } from \"../command/types\";\nimport { IWcBindable } from \"../event/types\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\ninterface ICommandSubscription {\n readonly token: ICommandToken;\n readonly unsubscribe: () => void;\n readonly elementRef: WeakRef<Element>;\n}\n\nconst subscribedBindings: WeakMap<IBindingInfo, ICommandSubscription> = new WeakMap();\n\nfunction getWcBindable(element: Element): IWcBindable | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n if (typeof customClass === \"undefined\") {\n raiseError(`Custom element <${customTagName}> is not defined for command binding.`);\n }\n const bindable = customClass.wcBindable;\n if (bindable?.protocol === \"wc-bindable\" && bindable?.version === 1) {\n return bindable;\n }\n return null;\n}\n\nexport function applyChangeToCommand(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n if (!isCommandToken(newValue)) {\n raiseError(`command binding requires a CommandToken value (use $command.<tokenName> with a name declared in $commandTokens).`);\n }\n const token = newValue as ICommandToken;\n\n const existing = subscribedBindings.get(binding);\n if (existing && existing.token === token) {\n return;\n }\n\n // 新しい binding 妥当性検証は、旧 subscription を解除する前に通す(fail-fast)。\n const element = binding.node as Element;\n const methodName = binding.propSegments[1];\n if (typeof methodName !== \"string\" || methodName.length === 0) {\n raiseError(`command binding requires a method name (e.g., \"command.fetch\").`);\n }\n\n const bindable = getWcBindable(element);\n if (bindable === null) {\n raiseError(`command binding requires a wc-bindable custom element. <${element.tagName.toLowerCase()}> is not wc-bindable.`);\n }\n if (!Array.isArray(bindable.commands) || !bindable.commands.some((c) => c.name === methodName)) {\n raiseError(`Command \"${methodName}\" is not declared in wcBindable.commands of <${element.tagName.toLowerCase()}>.`);\n }\n\n // ここまで来たら旧解除して新 subscribe に切り替える。\n if (existing) {\n existing.unsubscribe();\n subscribedBindings.delete(binding);\n }\n\n const elementRef = new WeakRef(element);\n let unsubscribe: (() => void) | null = null;\n const subscriber = (...args: unknown[]): unknown => {\n const el = elementRef.deref();\n if (!el || !el.isConnected) {\n unsubscribe?.();\n subscribedBindings.delete(binding);\n return undefined;\n }\n const method = (el as unknown as Record<string, unknown>)[methodName];\n if (typeof method !== \"function\") {\n raiseError(`Method \"${methodName}\" is not a function on <${el.tagName.toLowerCase()}>.`);\n }\n return Reflect.apply(method as (...a: unknown[]) => unknown, el, args);\n };\n unsubscribe = token.subscribe(subscriber);\n subscribedBindings.set(binding, { token, unsubscribe, elementRef });\n}\n\nexport const __private__ = {\n subscribedBindings,\n};\n","import { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\n\nconst indexBindingsByContent: WeakMap<IContent, IBindingInfo[]> = new WeakMap();\n\nexport function getIndexBindingsByContent(content: IContent): IBindingInfo[] {\n return indexBindingsByContent.get(content) ?? [];\n}\n\nexport function setIndexBindingsByContent(content: IContent, bindings: IBindingInfo[]): void {\n indexBindingsByContent.set(content, bindings);\n}\n","/* v8 ignore file */\nexport {};\n\ndeclare global {\n interface Set<T> {\n difference(other: Set<T>): Set<T>;\n intersection(other: Set<T>): Set<T>;\n }\n}\n\nif (!Set.prototype.difference) {\n Set.prototype.difference = function <T>(this: Set<T>, other: Set<T>): Set<T> {\n const result = new Set(this);\n for (const elem of other) {\n result.delete(elem);\n }\n return result;\n };\n}\n\nif (!Set.prototype.intersection) {\n Set.prototype.intersection = function <T>(this: Set<T>, other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const elem of other) {\n if (this.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n };\n}\n","\nlet count = 0;\nexport function getUUID(): string {\n return `u${(count++).toString(36)}`;\n}\n","import { getUUID } from \"../getUUID\";\nimport { IListIndex } from \"./types\";\n\nlet version = 0;\n\nclass ListIndex implements IListIndex {\n readonly uuid = getUUID();\n readonly parentListIndex: IListIndex | null;\n readonly position: number;\n readonly length: number;\n\n private _index: number;\n private _version: number;\n private _indexes: number[] | undefined;\n private _listIndexes: WeakRef<IListIndex>[] | undefined;\n\n /**\n * Creates a new ListIndex instance.\n * \n * @param parentListIndex - Parent list index for nested loops, or null for top-level\n * @param index - Current index value in the loop\n */\n constructor(parentListIndex: IListIndex | null, index: number) {\n this.parentListIndex = parentListIndex;\n this.position = parentListIndex ? parentListIndex.position + 1 : 0;\n this.length = this.position + 1;\n this._index = index;\n this._version = version;\n }\n\n /**\n * Gets current index value.\n * \n * @returns Current index number\n */\n get index() {\n return this._index;\n }\n \n /**\n * Sets index value and updates version.\n * \n * @param value - New index value\n */\n set index(value: number) {\n this._index = value;\n this._version = ++version;\n this.indexes[this.position] = value;\n }\n\n /**\n * Gets current version number for change detection.\n * \n * @returns Version number\n */\n get version(): number {\n return this._version;\n }\n\n /**\n * Checks if parent indexes have changed since last access.\n * \n * @returns true if parent has newer version, false otherwise\n */\n get dirty(): boolean {\n if (this.parentListIndex === null) {\n return false;\n } else {\n return this.parentListIndex.dirty || this.parentListIndex.version > this._version;\n }\n }\n\n /**\n * Gets array of all index values from root to current level.\n * Rebuilds array if parent indexes have changed (dirty).\n * \n * @returns Array of index values\n */\n get indexes(): number[] {\n if (this.parentListIndex === null) {\n if (typeof this._indexes === \"undefined\") {\n this._indexes = [this._index];\n }\n } else {\n if (typeof this._indexes === \"undefined\" || this.dirty) {\n this._indexes = [...this.parentListIndex.indexes, this._index];\n this._version = version;\n }\n }\n return this._indexes;\n }\n\n /**\n * Gets array of WeakRef to all ListIndex instances from root to current level.\n * \n * @returns Array of WeakRef<IListIndex>\n */\n get listIndexes(): WeakRef<IListIndex>[] {\n if (this.parentListIndex === null) {\n if (typeof this._listIndexes === \"undefined\") {\n this._listIndexes = [new WeakRef(this)];\n }\n } else {\n if (typeof this._listIndexes === \"undefined\") {\n this._listIndexes = [...this.parentListIndex.listIndexes, new WeakRef(this)];\n }\n }\n return this._listIndexes;\n }\n\n /**\n * Gets variable name for this loop index ($1, $2, etc.).\n * \n * @returns Variable name string\n */\n get varName(): string {\n return `$${this.position + 1}`;\n }\n\n /**\n * Gets ListIndex at specified position in hierarchy.\n * Supports negative indexing from end.\n * \n * @param pos - Position index (0-based, negative for from end)\n * @returns ListIndex at position or null if not found/garbage collected\n */\n at(pos: number): IListIndex | null {\n if (pos >= 0) {\n return this.listIndexes[pos]?.deref() || null;\n } else {\n return this.listIndexes[this.listIndexes.length + pos]?.deref() || null;\n }\n }\n}\n\n/**\n * Factory function to create ListIndex instance.\n * \n * @param parentListIndex - Parent list index for nested loops, or null for top-level\n * @param index - Current index value in the loop\n * @returns New IListIndex instance\n */\nexport function createListIndex(parentListIndex: IListIndex | null, index: number): IListIndex {\n return new ListIndex(parentListIndex, index);\n}\n","import { IListIndex } from \"./types\";\n\nconst listIndexesByList = new WeakMap<readonly unknown[], IListIndex[]>();\n\nexport function getListIndexesByList(list: readonly unknown[]): IListIndex[] | null {\n return listIndexesByList.get(list) || null;\n}\n\nexport function setListIndexesByList(list: readonly unknown[], listIndexes: IListIndex[] | null): void {\n if (listIndexes === null) {\n listIndexesByList.delete(list);\n return;\n }\n listIndexesByList.set(list, listIndexes);\n}","import \"../polyfills\";\nimport { createListIndex } from \"./createListIndex\";\nimport { getListIndexesByList, setListIndexesByList } from \"./listIndexesByList\";\nimport { IListDiff, IListIndex } from \"./types\";\n\nconst listDiffByOldListByNewList = new WeakMap<readonly unknown[], WeakMap<readonly unknown[], IListDiff>>();\n\nconst EMPTY_LIST = Object.freeze([]);\nconst EMPTY_SET = new Set<IListIndex>();\n\nfunction getListDiff(rawOldList: readonly unknown[], rawNewList: readonly unknown[]): IListDiff | null {\n const oldList = (Array.isArray(rawOldList) && rawOldList.length > 0) ? rawOldList : EMPTY_LIST;\n const newList = (Array.isArray(rawNewList) && rawNewList.length > 0) ? rawNewList : EMPTY_LIST;\n let diffByNewList = listDiffByOldListByNewList.get(oldList);\n if (!diffByNewList) {\n return null;\n }\n return diffByNewList.get(newList) || null;\n}\n\nfunction setListDiff(oldList: readonly unknown[], newList: readonly unknown[], diff: IListDiff): void {\n let diffByNewList = listDiffByOldListByNewList.get(oldList);\n if (!diffByNewList) {\n diffByNewList = new WeakMap<readonly unknown[], IListDiff>();\n listDiffByOldListByNewList.set(oldList, diffByNewList);\n }\n diffByNewList.set(newList, diff);\n}\n/**\n * Checks if two lists are identical by comparing length and each element.\n * @param oldList - Previous list to compare\n * @param newList - New list to compare\n * @returns True if lists are identical, false otherwise\n */\nfunction isSameList(oldList: readonly unknown[], newList: readonly unknown[]): boolean {\n if (oldList.length !== newList.length) {\n return false;\n }\n\n for (let i = 0; i < oldList.length; i++) {\n if (oldList[i] !== newList[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Aligns each list index's .index with its position in the new list.\n * A diff only becomes the rendered state once the updater applies it: an\n * earlier diff in the same batch (two replacements in one microtask) may have\n * moved shared indexes toward a list that never got applied, and a cache hit\n * skips recomputation entirely — so every createListDiff return re-aligns.\n */\nfunction syncListIndexes(newIndexes: IListIndex[]): void {\n for (let i = 0; i < newIndexes.length; i++) {\n if (newIndexes[i].index !== i) {\n newIndexes[i].index = i;\n }\n }\n}\n\n/**\n * Creates or updates list indexes by comparing old and new lists.\n * Optimizes by reusing existing list indexes when values match.\n * @param parentListIndex - Parent list index for nested lists, or null for top-level\n * @param oldList - Previous list (will be normalized to array)\n * @param newList - New list (will be normalized to array)\n * @param oldIndexes - Array of existing list indexes to potentially reuse\n * @returns Array of list indexes for the new list\n */\nexport function createListDiff(\n parentListIndex: IListIndex | null,\n rawOldList: unknown,\n rawNewList: unknown,\n): IListDiff {\n const diff = computeListDiff(parentListIndex, rawOldList, rawNewList);\n syncListIndexes(diff.newIndexes);\n return diff;\n}\n\nfunction computeListDiff(\n parentListIndex: IListIndex | null,\n rawOldList: unknown,\n rawNewList: unknown,\n): IListDiff {\n // Normalize inputs to arrays (handles null/undefined)\n const oldList: readonly unknown[] = (Array.isArray(rawOldList) && rawOldList.length > 0) ? rawOldList : EMPTY_LIST;\n const newList: readonly unknown[] = (Array.isArray(rawNewList) && rawNewList.length > 0) ? rawNewList : EMPTY_LIST;\n const cachedDiff = getListDiff(oldList, newList);\n if (cachedDiff) {\n return cachedDiff;\n }\n const oldIndexes = getListIndexesByList(oldList) || [];\n let retValue: IListDiff | undefined;\n try {\n // Early return for empty list\n if (newList.length === 0) {\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: [] as IListIndex[],\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: new Set<IListIndex>(oldIndexes),\n addIndexSet: EMPTY_SET,\n };\n }\n // If old list was empty, create all new indexes\n let newIndexes: IListIndex[] | null = getListIndexesByList(newList);\n if (oldList.length === 0) {\n if (newIndexes === null) {\n newIndexes = [];\n for(let i = 0; i < newList.length; i++) {\n const newListIndex = createListIndex(parentListIndex, i);\n newIndexes.push(newListIndex);\n }\n }\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: EMPTY_SET,\n addIndexSet: new Set<IListIndex>(newIndexes),\n };\n }\n // If lists are identical, return existing indexes unchanged (optimization)\n if (isSameList(oldList, newList)) {\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: oldIndexes,\n changeIndexSet: EMPTY_SET,\n deleteIndexSet: EMPTY_SET,\n addIndexSet: EMPTY_SET,\n };\n }\n if (newIndexes !== null) {\n return calcDiffIndexes(oldIndexes, newIndexes);\n }\n newIndexes = [];\n\n // Use index-based map for efficiency\n // Supports duplicate values by storing array of indexes\n const indexByValue = new Map<unknown, number[]>();\n for(let i = 0; i < oldList.length; i++) {\n const val = oldList[i];\n let indexes = indexByValue.get(val);\n if (!indexes) {\n indexes = [];\n indexByValue.set(val, indexes);\n }\n indexes.push(i);\n }\n\n // Build new indexes array by matching values with old list\n const changeIndexSet: Set<IListIndex> = new Set();\n const addIndexSet: Set<IListIndex> = new Set();\n for(let i = 0; i < newList.length; i++) {\n const newValue = newList[i];\n const existingIndexes = indexByValue.get(newValue);\n const oldIndex = existingIndexes && existingIndexes.length > 0 ? existingIndexes.shift() : undefined;\n \n if (typeof oldIndex === \"undefined\") {\n // New element\n const newListIndex = createListIndex(parentListIndex, i);\n newIndexes.push(newListIndex);\n addIndexSet.add(newListIndex);\n } else {\n // Reuse existing element\n const existingListIndex = oldIndexes[oldIndex];\n // Judge position change against the old list's order (oldIndexes array\n // order), not the mutable .index — an earlier diff in the same batch\n // may have already moved .index toward a list that was never applied.\n // The .index itself is re-aligned by syncListIndexes on return.\n if (oldIndex !== i) {\n changeIndexSet.add(existingListIndex);\n }\n newIndexes.push(existingListIndex);\n }\n }\n \n const deleteIndexSet: Set<IListIndex> = (new Set(oldIndexes)).difference(new Set(newIndexes));\n return retValue = {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: changeIndexSet,\n deleteIndexSet: deleteIndexSet,\n addIndexSet: addIndexSet,\n };\n } finally {\n if (typeof retValue !== \"undefined\") {\n setListDiff(oldList, newList, retValue);\n setListIndexesByList(newList, retValue.newIndexes);\n }\n }\n}\n\n/**\n * Diff between two lists whose listIndex ledgers both already exist.\n * Rows are joined by listIndex identity — the same key applyChangeToFor and\n * walkDependency consume the result sets with. A value-based join could mark\n * oldIndexes-side objects that are absent from newIndexes (ledgers built along\n * unconnected diff chains hold different objects for the same value); such\n * orphan markers never match the consumers' has() lookups and only pollute\n * the dirty set. Rows without shared identity are represented as add+delete.\n */\nfunction calcDiffIndexes(\n oldIndexes: IListIndex[],\n newIndexes: IListIndex[],\n): IListDiff {\n const newIndexSet: Set<IListIndex> = new Set(newIndexes);\n const oldIndexSet: Set<IListIndex> = new Set(oldIndexes);\n const changeIndexSet: Set<IListIndex> = new Set();\n const addIndexSet: Set<IListIndex> = newIndexSet.difference(oldIndexSet);\n const deleteIndexSet: Set<IListIndex> = oldIndexSet.difference(newIndexSet);\n // Old positions come from the oldIndexes array order (.index may have been\n // mutated by an unapplied diff in the same batch).\n const oldPosByIndex = new Map<IListIndex, number>();\n for (let i = 0; i < oldIndexes.length; i++) {\n oldPosByIndex.set(oldIndexes[i], i);\n }\n for (let i = 0; i < newIndexes.length; i++) {\n const index = newIndexes[i];\n if (addIndexSet.has(index)) {\n continue;\n }\n if (oldPosByIndex.get(index) !== i) {\n // 位置が違うことだけを記録\n changeIndexSet.add(index);\n }\n }\n return {\n oldIndexes: oldIndexes,\n newIndexes: newIndexes,\n changeIndexSet: changeIndexSet,\n deleteIndexSet: deleteIndexSet,\n addIndexSet: addIndexSet,\n };\n}","import { IListDiff, IListIndex } from \"./types\";\n\n/**\n * Indices into `seq` whose values form a longest strictly-increasing\n * subsequence, returned in ascending order. Classic patience-sorting\n * LIS in O(n log n). `seq` values are assumed distinct (old list\n * positions are unique).\n */\nexport function longestIncreasingSubsequence(seq: number[]): number[] {\n const n = seq.length;\n // tails[k] = index into seq of the smallest tail of an increasing\n // subsequence of length k+1; prev[i] = predecessor index to rebuild the chain.\n const tails: number[] = [];\n const prev: number[] = new Array(n).fill(-1);\n for (let i = 0; i < n; i++) {\n const value = seq[i];\n let lo = 0;\n let hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (seq[tails[mid]] < value) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n if (lo > 0) {\n prev[i] = tails[lo - 1];\n }\n tails[lo] = i;\n }\n const result: number[] = [];\n let k = tails.length > 0 ? tails[tails.length - 1] : -1;\n while (k >= 0) {\n result.push(k);\n k = prev[k];\n }\n result.reverse();\n return result;\n}\n\n/**\n * Determines which reused list indexes can stay where they are when the DOM\n * is brought into the new list order.\n *\n * Returns null when the reused indexes already appear in their old relative\n * order (no inversions) — the caller's existing position guard then performs\n * no moves, so nothing extra is needed. When inversions exist, returns the\n * set of indexes forming a longest increasing subsequence of old positions:\n * leaving exactly those in place and moving every other content yields the\n * correct final order with the fewest content moves (the naive forward walk\n * otherwise cascades: a single swap of rows 2/999 in 1000 rows moves ~997\n * contents instead of 2).\n *\n * Note: IListIndex.index is already mutated to the NEW position by\n * createListDiff, so old positions must come from the oldIndexes array order.\n */\nexport function computeStableIndexSet(diff: IListDiff): ReadonlySet<IListIndex> | null {\n // No reused index changed position, or nothing was reused: relative order\n // is already correct and the walk performs no moves.\n if (diff.changeIndexSet.size === 0 || diff.addIndexSet.size === diff.newIndexes.length) {\n return null;\n }\n const oldPosByIndex = new Map<IListIndex, number>();\n for (let i = 0; i < diff.oldIndexes.length; i++) {\n oldPosByIndex.set(diff.oldIndexes[i], i);\n }\n const reused: IListIndex[] = [];\n const seq: number[] = [];\n let prevPos = -1;\n let sorted = true;\n for (const index of diff.newIndexes) {\n if (diff.addIndexSet.has(index)) {\n continue;\n }\n const pos = oldPosByIndex.get(index);\n if (pos === undefined) {\n // Invariant break (a reused index missing from oldIndexes): fall back\n // to the settle walk rather than compute a stable set from bad data.\n return null;\n }\n if (pos < prevPos) {\n sorted = false;\n }\n prevPos = pos;\n reused.push(index);\n seq.push(pos);\n }\n if (sorted) {\n return null;\n }\n const lis = longestIncreasingSubsequence(seq);\n const stable = new Set<IListIndex>();\n for (const seqIndex of lis) {\n stable.add(reused[seqIndex]);\n }\n return stable;\n}\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { IBindingInfo } from \"./types\";\n\nconst bindingSetByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, Set<IBindingInfo>> = new WeakMap();\n\nexport function getBindingSetByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): Set<IBindingInfo> {\n let bindingSet: Set<IBindingInfo> | null = null;\n bindingSet = bindingSetByAbsoluteStateAddress.get(absoluteStateAddress) || null;\n if (bindingSet === null) {\n bindingSet = new Set();\n bindingSetByAbsoluteStateAddress.set(absoluteStateAddress, bindingSet);\n }\n return bindingSet;\n}\n\n/**\n * 参照専用の取得。get-or-create と違い、未登録アドレスに空 Set を\n * 生成・キャッシュしない(リスト置換の drain は大量のバインディング無し\n * アドレスを照会するため、生成すると空 Set が溜まり続ける)。\n */\nexport function peekBindingSetByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): ReadonlySet<IBindingInfo> | undefined {\n return bindingSetByAbsoluteStateAddress.get(absoluteStateAddress);\n}\n\nexport function addBindingByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, binding: IBindingInfo): void {\n const bindingSet = getBindingSetByAbsoluteStateAddress(absoluteStateAddress);\n bindingSet.add(binding);\n}\n\nexport function clearBindingSetByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): void {\n bindingSetByAbsoluteStateAddress.delete(absoluteStateAddress);\n}\n\nexport function removeBindingByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, binding: IBindingInfo): void {\n // get-or-create を通すと未登録アドレスに空 Set を生成してしまうため素の get で参照する\n const bindingSet = bindingSetByAbsoluteStateAddress.get(absoluteStateAddress);\n if (bindingSet !== undefined) {\n bindingSet.delete(binding);\n }\n}","import { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\n\nconst bindingsByContent: WeakMap<IContent, IBindingInfo[]> = new WeakMap();\n\nexport function getBindingsByContent(content: IContent): IBindingInfo[] {\n return bindingsByContent.get(content) ?? [];\n}\n\nexport function setBindingsByContent(content: IContent, bindings: IBindingInfo[]): void {\n bindingsByContent.set(content, bindings);\n}\n","import { IContent } from \"../structural/types\";\n\nconst nodesByContent: WeakMap<IContent, Node[]> = new WeakMap();\n\nexport function getNodesByContent(content: IContent): Node[] {\n return nodesByContent.get(content) ?? [];\n}\n\nexport function setNodesByContent(content: IContent, nodes: Node[]): void {\n nodesByContent.set(content, nodes);\n}\n","import { setLoopContextByNode } from \"../list/loopContextByNode\";\nimport { ILoopContext } from \"../list/types\";\nimport { IContent } from \"../structural/types\";\nimport { getNodesByContent } from \"./nodesByContent\";\n\nexport function bindLoopContextToContent(content: IContent, loopContext: ILoopContext | null): void {\n const nodes = getNodesByContent(content);\n for(const node of nodes) {\n setLoopContextByNode(node, loopContext);\n }\n}\n\nexport function unbindLoopContextToContent(content: IContent): void {\n const nodes = getNodesByContent(content);\n for(const node of nodes) {\n setLoopContextByNode(node, null);\n }\n}\n","import { applyChange } from \"../apply/applyChange\";\nimport { IApplyContext } from \"../apply/types\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress, removeBindingByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { getBindingsByContent } from \"../bindings/bindingsByContent\";\nimport { bindLoopContextToContent, unbindLoopContextToContent } from \"../bindings/bindLoopContextToContent\";\nimport { ILoopContext } from \"../list/types\";\nimport { IContent } from \"./types\";\n\nexport function activateContent(\n content: IContent, \n loopContext: ILoopContext | null,\n context: IApplyContext,\n): void {\n bindLoopContextToContent(content, loopContext);\n const bindings = getBindingsByContent(content);\n for(const binding of bindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n applyChange(binding, context);\n }\n}\n\nexport function deactivateContent(\n content: IContent\n): void {\n if (!content.mounted) {\n return;\n }\n const bindings = getBindingsByContent(content);\n for(const binding of bindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n removeBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n // アドレスキャッシュ(absoluteStateAddressByBinding / stateAddressByBindingInfo)\n // のクリアはここでは行わない。deactivateContent の呼び出し元(for/if)は必ず\n // 直後に content.unmount() を呼び、unmount が同じ2台帳をネスト content も含めて\n // クリアする(createContent.ts)。ここで消すと全 binding で二重 delete になる。\n }\n unbindLoopContextToContent(content);\n}\n\n","\nexport function createEmptySet<T>(): Readonly<Set<T>> {\n return Object.freeze(new Set<T>());\n}\n","import { createEmptySet } from \"../createEmptySet\";\nimport { IContent } from \"./types\";\n\nconst contentSetByNode = new WeakMap<Node, Set<IContent>>();\n\nconst EMPTY_SET = createEmptySet<IContent>();\n\nexport function setContentByNode(node: Node, content: IContent): void {\n const contents = contentSetByNode.get(node);\n if (contents) {\n contents.add(content);\n } else {\n contentSetByNode.set(node, new Set([content]));\n }\n}\n\nexport function getContentSetByNode(node: Node): Readonly<Set<IContent>> {\n const contents = contentSetByNode.get(node);\n if (typeof contents !== \"undefined\") {\n return contents;\n }\n return EMPTY_SET;\n}\n\nexport function deleteContentByNode(node: Node, content: IContent): void {\n const contents = contentSetByNode.get(node);\n if (contents) {\n contents.delete(content);\n if (contents.size === 0) {\n contentSetByNode.delete(node);\n }\n }\n}","import { createStateAddress } from \"../address/StateAddress\";\nimport { IStateAddress } from \"../address/types\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\n\nconst stateAddressByBindingInfo: WeakMap<IBindingInfo, IStateAddress> = new WeakMap();\n\nexport function getStateAddressByBindingInfo(bindingInfo: IBindingInfo) {\n let stateAddress: IStateAddress | null = null;\n stateAddress = stateAddressByBindingInfo.get(bindingInfo) || null;\n if (stateAddress !== null) {\n return stateAddress;\n }\n if (bindingInfo.statePathInfo.wildcardCount > 0) {\n const listIndex = getListIndexByBindingInfo(bindingInfo);\n if (listIndex === null) {\n raiseError(`Cannot resolve state address for binding with wildcard statePathName \"${bindingInfo.statePathName}\" because list index is null.`);\n }\n stateAddress = createStateAddress(bindingInfo.statePathInfo, listIndex);\n } else {\n stateAddress = createStateAddress(bindingInfo.statePathInfo, null);\n }\n stateAddressByBindingInfo.set(bindingInfo, stateAddress);\n return stateAddress;\n}\n\n// call for change loopContext\nexport function clearStateAddressByBindingInfo(bindingInfo: IBindingInfo) {\n stateAddressByBindingInfo.delete(bindingInfo);\n}","import { clearAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding.js\";\nimport { clearStateAddressByBindingInfo } from \"../binding/getStateAddressByBindingInfo.js\";\nimport { getBindingsByContent, setBindingsByContent } from \"../bindings/bindingsByContent.js\";\nimport { setIndexBindingsByContent } from \"../bindings/indexBindingsByContent.js\";\nimport { initializeBindingsByFragment } from \"../bindings/initializeBindings.js\";\nimport { setNodesByContent } from \"../bindings/nodesByContent.js\";\nimport { INDEX_BY_INDEX_NAME } from \"../define.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { IBindingInfo } from \"../types.js\";\nimport { getContentSetByNode, setContentByNode } from \"./contentsByNode.js\";\nimport { getFragmentInfoByUUID } from \"./fragmentInfoByUUID.js\";\nimport { IContent } from \"./types.js\";\n\nconst recursiveBindingTypes = new Set(['if', 'elseif', 'else', 'for']);\n\nclass Content implements IContent {\n private _content: DocumentFragment;\n private _childNodeArray: Node[] = [];\n private _firstNode: Node | null = null;\n private _lastNode: Node | null = null;\n private _mounted: boolean = false;\n constructor(content: DocumentFragment) {\n this._content = content;\n this._childNodeArray = Array.from(this._content.childNodes);\n this._firstNode = this._childNodeArray.length > 0 ? this._childNodeArray[0] : null;\n this._lastNode = this._childNodeArray.length > 0 ? this._childNodeArray[this._childNodeArray.length - 1] : null;\n }\n\n get firstNode(): Node | null {\n return this._firstNode;\n }\n\n get lastNode(): Node | null {\n return this._lastNode;\n }\n\n get mounted(): boolean {\n return this._mounted;\n }\n\n appendTo(targetNode: Node): void {\n for(const node of this._childNodeArray) {\n targetNode.appendChild(node);\n }\n this._mounted = true;\n }\n\n mountAfter(targetNode: Node): void {\n const parentNode = targetNode.parentNode;\n const nextSibling = targetNode.nextSibling;\n if (parentNode) {\n for(const node of this._childNodeArray) {\n parentNode.insertBefore(node, nextSibling);\n }\n }\n this._mounted = true;\n }\n\n unmount(): void {\n for(const node of this._childNodeArray) {\n if (node.parentNode !== null) {\n node.parentNode.removeChild(node);\n }\n }\n const bindings = getBindingsByContent(this);\n for(const binding of bindings) {\n if (recursiveBindingTypes.has(binding.bindingType)) {\n const contents = getContentSetByNode(binding.node);\n for (const content of contents) {\n content.unmount();\n }\n }\n clearStateAddressByBindingInfo(binding);\n clearAbsoluteStateAddressByBinding(binding);\n }\n this._mounted = false;\n }\n}\n\n/**\n * SSR ハイドレーション用: 既存の DOM ノード配列から Content を生成する。\n * テンプレートからの clone ではなく、SSR で描画済みのノードをそのまま使う。\n */\nexport function createContentFromNodes(\n nodes: Node[],\n): IContent {\n const fragment = document.createDocumentFragment();\n // ノードを fragment に移動せず、参照だけ持つ Content を作る\n const content = new Content(fragment);\n // Content の内部状態を直接設定\n (content as any)._childNodeArray = nodes;\n (content as any)._firstNode = nodes.length > 0 ? nodes[0] : null;\n (content as any)._lastNode = nodes.length > 0 ? nodes[nodes.length - 1] : null;\n (content as any)._mounted = true; // SSR で既にマウント済み\n return content;\n}\n\nexport function createContent(\n bindingInfo: IBindingInfo, \n): IContent {\n if (typeof bindingInfo.uuid === 'undefined' || bindingInfo.uuid === null) {\n raiseError(`BindingInfo.uuid is null.`);\n }\n const fragmentInfo = getFragmentInfoByUUID(bindingInfo.uuid);\n if (!fragmentInfo) {\n raiseError(`Fragment with UUID \"${bindingInfo.uuid}\" not found.`);\n }\n const cloneFragment = document.importNode(fragmentInfo.fragment, true);\n const initialInfo = initializeBindingsByFragment(cloneFragment, fragmentInfo.nodeInfos);\n const content = new Content(cloneFragment);\n setBindingsByContent(content, initialInfo.bindingInfos);\n const indexBindings: IBindingInfo[] = [];\n for(const binding of initialInfo.bindingInfos) {\n if (binding.statePathName in INDEX_BY_INDEX_NAME) {\n indexBindings.push(binding);\n }\n }\n setIndexBindingsByContent(content, indexBindings);\n setNodesByContent(content, initialInfo.nodes);\n setContentByNode(bindingInfo.node, content);\n return content;\n}\n","import { getPathInfo } from \"../address/PathInfo\";\nimport { createStateAddress } from \"../address/StateAddress\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { getIndexBindingsByContent } from \"../bindings/indexBindingsByContent\";\nimport { inSsr } from \"../config\";\nimport { WILDCARD } from \"../define\";\nimport { createListDiff } from \"../list/createListDiff\";\nimport { getListIndexByBindingInfo } from \"../list/getListIndexByBindingInfo\";\nimport { getLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { computeStableIndexSet } from \"../list/stableListOrder\";\nimport { IListIndex } from \"../list/types\";\nimport { raiseError } from \"../raiseError\";\nimport { activateContent, deactivateContent } from \"../structural/activateContent\";\nimport { deleteContentByNode } from \"../structural/contentsByNode\";\nimport { createContent } from \"../structural/createContent\";\nimport { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { applyChange } from \"./applyChange\";\nimport { setRootNodeByFragment } from \"./rootNodeByFragment\";\nimport { IApplyContext } from \"./types\";\n\nconst lastNodeByNode: WeakMap<Node, Node> = new WeakMap();\nconst contentByListIndexByNode: WeakMap<Node, WeakMap<IListIndex, IContent>> = new WeakMap();\nconst pooledContentsByNode: WeakMap<Node, IContent[]> = new WeakMap();\nconst isOnlyNodeInParentContentByNode: WeakMap<Node, boolean> = new WeakMap();\n\n// テスト用ヘルパー(内部状態の操作)\nexport function __test_setContentByListIndex(node: Node, index: IListIndex, content: IContent | null): void {\n setContent(node, index, content);\n}\n\nexport function __test_deleteLastNodeByNode(node: Node): void {\n lastNodeByNode.delete(node);\n}\n\n// SSR ハイドレーション用: Content を ListIndex に登録する\nexport function hydrateSetContent(node: Node, index: IListIndex, content: IContent): void {\n setContent(node, index, content);\n}\n\nexport function hydrateSetLastNode(node: Node, lastNode: Node): void {\n lastNodeByNode.set(node, lastNode);\n}\n\nexport function __test_deleteContentByNode(node: Node): void {\n contentByListIndexByNode.delete(node);\n}\n\nfunction getPooledContents(bindingInfo: IBindingInfo): IContent[] {\n return pooledContentsByNode.get(bindingInfo.node) || [];\n}\n\n// プールの上限(アンカーごと)。プールはアンカー(文書に永続するコメントノード)\n// から content とその DOM サブツリー・バインディング群を強参照するため、無制限だと\n// 大きなリストのクリア後もメモリが解放されない(10k 行で 10MB 級)。上限超過分は\n// contentSetByNode の台帳からも外して GC 可能にする。再追加時は createContent で\n// 作り直すコストと引き換えになる。\nconst MAX_POOLED_CONTENTS = 1000;\nlet maxPooledContents = MAX_POOLED_CONTENTS;\n\n// テスト用: プール上限の変更と現在のプールサイズ取得\nexport function __test_setMaxPooledContents(limit: number): number {\n const prev = maxPooledContents;\n maxPooledContents = limit;\n return prev;\n}\n\nexport function __test_getPooledContentsCount(node: Node): number {\n return (pooledContentsByNode.get(node) || []).length;\n}\n\nfunction setPooledContent(bindingInfo: IBindingInfo, content: IContent): void {\n let contents = pooledContentsByNode.get(bindingInfo.node);\n if (typeof contents === 'undefined') {\n contents = [];\n pooledContentsByNode.set(bindingInfo.node, contents);\n }\n if (contents.length < maxPooledContents) {\n contents.push(content);\n } else {\n // 上限超過: content を完全に手放す。contentSetByNode は createContent 時に\n // 追加されたきり解放経路が無いため、ここで外さないと GC できない。\n deleteContentByNode(bindingInfo.node, content);\n }\n}\n\nfunction isOnlyNodeInParentContent(firstNode: Node, lastNode: Node): boolean {\n let prevCheckNode = firstNode.previousSibling;\n let nextCheckNode = lastNode.nextSibling;\n let onlyNode = true;\n while(prevCheckNode !== null) {\n if (prevCheckNode.nodeType === Node.ELEMENT_NODE \n || (prevCheckNode.nodeType === Node.TEXT_NODE && (prevCheckNode.textContent?.trim() ?? '') !== '')) {\n onlyNode = false;\n break;\n }\n prevCheckNode = prevCheckNode.previousSibling;\n }\n while(nextCheckNode !== null) {\n if (nextCheckNode.nodeType === Node.ELEMENT_NODE \n || (nextCheckNode.nodeType === Node.TEXT_NODE && (nextCheckNode.textContent?.trim() ?? '') !== '')) {\n onlyNode = false;\n break;\n }\n nextCheckNode = nextCheckNode.nextSibling;\n }\n return onlyNode;\n}\n\n// A stable content may be left in place only when its first node verifiably\n// follows the settled walk position in the same tree: the listIndexes ledger\n// can lag the physical DOM (element-write swaps reorder listIndexes without\n// moving nodes; hidden regions unmount contents that stay registered). Empty\n// contents (null firstNode) always take the settle walk so their mount\n// bookkeeping matches the pre-LIS behavior.\nfunction isPhysicallyAfter(lastNode: Node, firstNode: Node | null): boolean {\n if (firstNode === null) {\n return false;\n }\n if (lastNode.nextSibling === firstNode) {\n return true;\n }\n const position = lastNode.compareDocumentPosition(firstNode);\n return (position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0\n && (position & Node.DOCUMENT_POSITION_DISCONNECTED) === 0;\n}\n\nfunction getContent(node: Node, listIndex: IListIndex): IContent | null {\n let contentByListIndex = contentByListIndexByNode.get(node);\n if (typeof contentByListIndex === 'undefined') {\n return null;\n }\n const content = contentByListIndex.get(listIndex);\n return typeof content === 'undefined' ? null : content;\n}\n\nfunction setContent(node: Node, listIndex: IListIndex, content: IContent | null): void {\n let contentByListIndex = contentByListIndexByNode.get(node);\n if (typeof contentByListIndex === 'undefined') {\n if (content === null) {\n return;\n }\n contentByListIndex = new WeakMap<IListIndex, IContent>();\n contentByListIndexByNode.set(node, contentByListIndex);\n }\n if (content === null) {\n contentByListIndex.delete(listIndex);\n } else {\n contentByListIndex.set(listIndex, content);\n }\n}\n\nexport function applyChangeToFor(\n bindingInfo: IBindingInfo, \n context: IApplyContext,\n newValue: unknown, \n): void {\n const listPathInfo = bindingInfo.statePathInfo;\n const listIndex = getListIndexByBindingInfo(bindingInfo);\n const absAddress = getAbsoluteStateAddressByBinding(bindingInfo);\n const lastValue = getLastListValueByAbsoluteStateAddress(absAddress);\n const diff = createListDiff(listIndex, lastValue, newValue);\n context.newListValueByAbsAddress.set(absAddress, Array.isArray(newValue) ? newValue : []);\n\n if (Array.isArray(lastValue) \n && lastValue.length === diff.deleteIndexSet.size \n && diff.deleteIndexSet.size > 0\n && bindingInfo.node.parentNode !== null\n ) {\n let isOnlyNode = isOnlyNodeInParentContentByNode.get(bindingInfo.node);\n if (typeof isOnlyNode === 'undefined') {\n const lastNode = lastNodeByNode.get(bindingInfo.node) || bindingInfo.node;\n isOnlyNode = isOnlyNodeInParentContent(bindingInfo.node, lastNode);\n isOnlyNodeInParentContentByNode.set(bindingInfo.node, isOnlyNode);\n }\n if (isOnlyNode) {\n const parentNode = bindingInfo.node.parentNode;\n parentNode.textContent = '';\n parentNode.appendChild(bindingInfo.node);\n }\n }\n for(const deleteIndex of diff.deleteIndexSet) {\n const content = getContent(bindingInfo.node, deleteIndex);\n if (content !== null) {\n deactivateContent(content);\n content.unmount();\n setPooledContent(bindingInfo, content);\n setContent(bindingInfo.node, deleteIndex, null);\n }\n }\n\n let lastNode = bindingInfo.node;\n const elementPathInfo = getPathInfo(listPathInfo.path + '.' + WILDCARD);\n const loopContextStack = context.stateElement.loopContextStack;\n // When the new order contains inversions, contents in the stable set (an LIS\n // of old positions) keep their relative order and must not be moved; moving\n // only the rest avoids the cascade where one swap relocates every row in\n // between. null = no inversions; the position guard below then does no moves.\n const stableIndexSet = computeStableIndexSet(diff);\n let fragment: DocumentFragment | null = null;\n if (diff.newIndexes.length == diff.addIndexSet.size \n && diff.newIndexes.length > 0\n && lastNode.isConnected\n ) {\n // 全部追加の場合はまとめて処理\n fragment = document.createDocumentFragment();\n setRootNodeByFragment(fragment, context.rootNode);\n }\n const ssrMode = inSsr();\n const uuid = bindingInfo.uuid ?? '';\n for(const index of diff.newIndexes) {\n let content: IContent | undefined;\n // add\n if (diff.addIndexSet.has(index)) {\n const stateAddress = createStateAddress(elementPathInfo, index);\n loopContextStack.createLoopContext(stateAddress, (loopContext) => {\n const pooledContents = getPooledContents(bindingInfo);\n content = pooledContents.pop();\n if (typeof content === 'undefined') {\n content = createContent(bindingInfo);\n }\n // コンテント活性化の前にDOMツリーに追加しておく必要がある\n if (fragment !== null) {\n if (ssrMode) {\n fragment.appendChild(document.createComment(`@@wcs-for-start:${uuid}:${listPathInfo.path}:${index.index}`));\n }\n content.appendTo(fragment);\n if (ssrMode) {\n fragment.appendChild(document.createComment(`@@wcs-for-end:${uuid}:${listPathInfo.path}:${index.index}`));\n }\n } else {\n // Update lastNode for next iteration to ensure correct order\n // Ensure content is in correct position (e.g. if previous siblings were deleted/moved)\n if (lastNode.nextSibling !== content.firstNode) {\n if (ssrMode) {\n const startComment = document.createComment(`@@wcs-for-start:${uuid}:${listPathInfo.path}:${index.index}`);\n lastNode.parentNode!.insertBefore(startComment, lastNode.nextSibling);\n lastNode = startComment;\n }\n content.mountAfter(lastNode);\n }\n if (ssrMode) {\n const endComment = document.createComment(`@@wcs-for-end:${uuid}:${listPathInfo.path}:${index.index}`);\n const afterNode = content.lastNode ?? lastNode;\n afterNode.parentNode!.insertBefore(endComment, afterNode.nextSibling);\n }\n }\n // コンテントを活性化\n activateContent(content, loopContext, context);\n });\n if (typeof content === 'undefined') {\n raiseError(`Content not found for ListIndex: ${index.index} at path \"${listPathInfo.path}\"`);\n }\n } else {\n content = getContent(bindingInfo.node, index)!;\n if (diff.changeIndexSet.has(index)) {\n // change\n const indexBindings = getIndexBindingsByContent(content);\n for(const indexBinding of indexBindings) {\n applyChange(indexBinding, context);\n }\n }\n // Update lastNode for next iteration to ensure correct order\n // Ensure content is in correct position (e.g. if previous siblings were deleted/moved)\n if (content === null) {\n raiseError(`Content not found for ListIndex: ${index.index} at path \"${listPathInfo.path}\"`);\n }\n // Stable contents are already in correct relative order — but only\n // trust that after physical verification (see isPhysicallyAfter).\n // Contents out of order (and everything unverifiable) settle via the\n // self-healing mountAfter walk below.\n const stable = stableIndexSet !== null && stableIndexSet.has(index)\n && isPhysicallyAfter(lastNode, content.firstNode);\n if (!stable && lastNode.nextSibling !== content.firstNode) {\n content.mountAfter(lastNode);\n }\n }\n lastNode = content.lastNode || lastNode;\n setContent(bindingInfo.node, index, content);\n }\n lastNodeByNode.set(bindingInfo.node, lastNode);\n if (fragment !== null) {\n // Mount all at once\n bindingInfo.node.parentNode!.insertBefore(fragment, bindingInfo.node.nextSibling);\n setRootNodeByFragment(fragment, null);\n }\n}\n","import { config, inSsr } from \"../config\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { activateContent, deactivateContent } from \"../structural/activateContent\";\nimport { getContentSetByNode } from \"../structural/contentsByNode\";\nimport { createContent } from \"../structural/createContent\";\nimport { IContent } from \"../structural/types\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nconst lastConnectedByNode: WeakMap<Node, boolean> = new WeakMap();\n\nfunction bindingInfoText(bindingInfo: IBindingInfo): string {\n return `${bindingInfo.bindingType} ${bindingInfo.statePathName} ${bindingInfo.outFilters.map(f => f.filterName).join('|')} ${bindingInfo.node.isConnected ? '(connected)' : '(disconnected)'}`;\n}\n\nexport function applyChangeToIf(\n bindingInfo: IBindingInfo,\n context: IApplyContext,\n rawNewValue: unknown,\n): void {\n const currentConnected = bindingInfo.node.isConnected;\n const newValue = Boolean(rawNewValue);\n let content: IContent | undefined;\n const contents = getContentSetByNode(bindingInfo.node);\n if (contents.size === 0) {\n content = createContent(bindingInfo);\n } else {\n content = contents.values().next().value!;\n }\n const ssrMode = inSsr();\n const uuid = bindingInfo.uuid ?? '';\n const keyword = bindingInfo.bindingType; // if, elseif, else\n try {\n if (!newValue) {\n if (config.debug) {\n console.log(`unmount if content : ${bindingInfoText(bindingInfo)}`);\n }\n deactivateContent(content);\n content.unmount();\n }\n if (newValue) {\n if (config.debug) {\n console.log(`mount if content : ${bindingInfoText(bindingInfo)}`);\n }\n if (ssrMode) {\n const startComment = document.createComment(`@@wcs-${keyword}-start:${uuid}:${bindingInfo.statePathName}`);\n bindingInfo.node.parentNode!.insertBefore(startComment, bindingInfo.node.nextSibling);\n content.mountAfter(startComment);\n const endComment = document.createComment(`@@wcs-${keyword}-end:${uuid}:${bindingInfo.statePathName}`);\n const afterNode = content.lastNode ?? startComment;\n afterNode.parentNode!.insertBefore(endComment, afterNode.nextSibling);\n } else {\n content.mountAfter(bindingInfo.node);\n }\n const loopContext = getLoopContextByNode(bindingInfo.node);\n activateContent(content, loopContext, context);\n }\n } finally {\n lastConnectedByNode.set(bindingInfo.node, currentConnected);\n }\n}\n\n","import { getCustomElement } from \"../getCustomElement\";\nimport { IWcBindable } from \"./types\";\n\n/**\n * 要素 `element` の `propName` プロパティ書き込みに対して、\n * wc-bindable inputs の `attribute` ミラー先属性名を返す。\n *\n * - wc-bindable でないネイティブ要素や、inputs 未宣言、attribute フィールド無しは null\n * - inputs に同名宣言があっても `attribute` を持たないものはミラー対象外\n *\n * 戻り値の string がそのまま `setAttribute(name, value)` の name となる。\n */\nexport function getInputAttributeMirror(element: Element, propName: string): string | null {\n const customTagName = getCustomElement(element);\n if (customTagName === null) {\n return null;\n }\n const customClass = customElements.get(customTagName) as { wcBindable?: IWcBindable } | undefined;\n if (typeof customClass === \"undefined\") {\n return null;\n }\n const bindable = customClass.wcBindable;\n if (bindable?.protocol !== \"wc-bindable\" || bindable?.version !== 1) {\n return null;\n }\n const inputs = bindable.inputs;\n if (!Array.isArray(inputs)) {\n return null;\n }\n for (const input of inputs) {\n if (input.name === propName && typeof input.attribute === \"string\" && input.attribute.length > 0) {\n return input.attribute;\n }\n }\n return null;\n}\n\n/**\n * mirror 属性値の表現を決める。\n * - null / undefined → 属性削除\n * - object / array → JSON.stringify (失敗時は String(value))\n * - その他 (string / number / boolean / bigint) → String(value)\n */\nexport function applyMirrorAttribute(element: Element, attributeName: string, value: unknown): void {\n if (value === null || typeof value === \"undefined\") {\n element.removeAttribute(attributeName);\n return;\n }\n let formatted: string;\n if (typeof value === \"object\") {\n try {\n formatted = JSON.stringify(value);\n } catch {\n formatted = String(value);\n }\n } else {\n formatted = String(value);\n }\n element.setAttribute(attributeName, formatted);\n}\n","/**\n * SSR 時に HTML 属性で表現できないプロパティバインディングを蓄積するストア。\n * ハイドレーション時にクライアント側で復元する。\n */\n\nexport interface ISsrPropertyEntry {\n propName: string;\n value: unknown;\n}\n\n// node → プロパティエントリのリスト\nconst store: WeakMap<Node, ISsrPropertyEntry[]> = new WeakMap();\n\nexport function addSsrProperty(node: Node, propName: string, value: unknown): void {\n let entries = store.get(node);\n if (!entries) {\n entries = [];\n store.set(node, entries);\n }\n // 同じプロパティの既存エントリは上書き\n const existing = entries.find(e => e.propName === propName);\n if (existing) {\n existing.value = value;\n } else {\n entries.push({ propName, value });\n }\n}\n\nexport function getSsrProperties(node: Node): ISsrPropertyEntry[] {\n return store.get(node) ?? [];\n}\n\nexport function getAllSsrPropertyNodes(): Node[] {\n // WeakMap は列挙不可なので、別途トラッキングが必要\n return Array.from(trackedNodes);\n}\n\nconst trackedNodes: Set<Node> = new Set();\n\nexport function trackSsrPropertyNode(node: Node): void {\n trackedNodes.add(node);\n}\n\nexport function clearSsrPropertyStore(): void {\n trackedNodes.clear();\n}\n","import { config, inSsr } from \"../config\";\nimport { applyMirrorAttribute, getInputAttributeMirror } from \"../event/getInputAttributeMirror\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\nimport { addSsrProperty, trackSsrPropertyNode } from \"./ssrPropertyStore\";\n\n// SSR 時に HTML 属性で代替可能なプロパティ\n// これら以外のプロパティは ssrPropertyStore に蓄積してハイドレーション時に復元\nconst SSR_ATTR_PROPS: Record<string, (element: Element, value: unknown) => void> = {\n value(element, value) {\n if (element.tagName === 'TEXTAREA') {\n element.textContent = String(value ?? '');\n } else {\n element.setAttribute('value', String(value ?? ''));\n }\n },\n checked(element, value) {\n if (value) element.setAttribute('checked', '');\n else element.removeAttribute('checked');\n },\n selected(element, value) {\n if (value) element.setAttribute('selected', '');\n else element.removeAttribute('selected');\n },\n disabled(element, value) {\n if (value) element.setAttribute('disabled', '');\n else element.removeAttribute('disabled');\n },\n selectedIndex(element, value) {\n const options = element.querySelectorAll('option');\n const idx = Number(value);\n for (let i = 0; i < options.length; i++) {\n if (i === idx) options[i].setAttribute('selected', '');\n else options[i].removeAttribute('selected');\n }\n },\n};\n\nexport function applyChangeToProperty(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n // undefined は「状態が値を持たない=無意見」であり、書き込み自体をスキップして\n // 要素側の既定値を生かす。書き込んでしまうと setter の文字列化で\n // \"undefined\" 属性や removeAttribute が走り要素が壊れる (spread で未初期化\n // slot を配線したときに顕在化)。明示的なクリアは null で表現する。\n // mirror 属性 (applyMirrorAttribute) の「undefined → 属性削除」と同じ語彙。\n if (typeof newValue === \"undefined\") {\n if (config.debug) {\n console.debug(`Skipped property write: state value is undefined.`, {\n element: binding.node,\n propSegments: binding.propSegments,\n statePathName: binding.statePathName,\n });\n }\n return;\n }\n const element = binding.node as Element;\n const propSegments = binding.propSegments;\n if (propSegments.length === 1) {\n const firstSegment = propSegments[0];\n if ((element as any)[firstSegment] !== newValue) {\n let propertyWriteSucceeded = false;\n try {\n (element as any)[firstSegment] = newValue;\n propertyWriteSucceeded = true;\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to set property '${firstSegment}' on element.`, {\n element,\n newValue,\n error\n });\n }\n }\n // wc-bindable inputs[].attribute ミラー。プロパティ書き込みが成功したときだけ\n // 属性へ反映する。setter が値を拒否した場合に属性だけ進んでしまうと\n // property と attribute が乖離し、attributeChangedCallback や CSS セレクタが\n // 実際のプロパティ値と矛盾した状態で発火するため、ここでガードする。\n if (propertyWriteSucceeded) {\n const mirrorAttr = getInputAttributeMirror(element, firstSegment);\n if (mirrorAttr !== null) {\n try {\n applyMirrorAttribute(element, mirrorAttr, newValue);\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to mirror attribute '${mirrorAttr}' on element.`, {\n element,\n newValue,\n error\n });\n }\n }\n }\n }\n }\n if (inSsr()) {\n const attrHandler = SSR_ATTR_PROPS[firstSegment];\n if (attrHandler) {\n // 属性で代替可能 → HTML 属性に反映\n attrHandler(element, newValue);\n } else {\n // 属性で代替不可 → ハイドレーション用ストアに蓄積\n addSsrProperty(element, firstSegment, newValue);\n trackSsrPropertyNode(element);\n }\n }\n return;\n }\n const firstSegment = propSegments[0];\n let subObject = (element as any)[firstSegment];\n for (let i = 1; i < propSegments.length - 1; i++) {\n const segment = propSegments[i];\n if (subObject == null) {\n return;\n }\n subObject = subObject[segment];\n }\n const oldValue = subObject[propSegments[propSegments.length - 1]];\n if (oldValue !== newValue) {\n if (Object.isFrozen(subObject)) {\n if (config.debug) {\n console.warn(`Attempting to set property on frozen object.`, {\n element,\n propSegments,\n oldValue,\n newValue\n });\n }\n return;\n }\n try {\n subObject[propSegments[propSegments.length - 1]] = newValue;\n } catch (error) {\n if (config.debug) {\n console.warn(`Failed to set property on sub-object.`, {\n element,\n propSegments,\n oldValue,\n newValue,\n error\n });\n }\n }\n }\n // サブオブジェクトプロパティ (e.g. style.xxx) は属性に反映済みなのでストア不要\n}\n","import { IBindingInfo } from \"../types\";\nimport { getFilteredValue } from \"./getFilteredValue\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToRadio(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as HTMLInputElement;\n const elementValue = element.value;\n const elementFilteredValue = getFilteredValue(elementValue, binding.inFilters);\n element.checked = newValue === elementFilteredValue;\n}\n","import { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToStyle(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const styleName = binding.propSegments[1];\n const style = (binding.node as HTMLElement).style;\n const currentValue = (style as any)[styleName];\n if (currentValue !== newValue) {\n (style as any)[styleName] = newValue;\n }\n}\n","import { inSsr } from \"../config\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { IApplyContext } from \"./types\";\n\nconst ssrWrappedNodes: WeakSet<Node> = new WeakSet();\n\nexport function applyChangeToText(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n // nodeValue は nullable DOMString(実ブラウザでは null / undefined とも空文字に\n // 正規化される)ため、比較前に同じ規則で文字列化する。生値のまま比較すると\n // 数値など非文字列値は常に不一致になり、同値でも毎回 DOM 書き込みが走る。\n // 注: happy-dom は undefined を \"undefined\" にする非準拠実装なので String() に\n // 頼らず明示的に \"\" へ正規化する。\n const text = newValue === null || newValue === undefined ? \"\" : String(newValue);\n if (binding.replaceNode.nodeValue !== text) {\n binding.replaceNode.nodeValue = text;\n }\n // SSR モード時: テキストノードの前後にコメントを挿入して境界を明示\n if (inSsr() && !ssrWrappedNodes.has(binding.replaceNode)) {\n ssrWrappedNodes.add(binding.replaceNode);\n const parentNode = binding.replaceNode.parentNode;\n if (parentNode) {\n const path = binding.statePathName;\n const startComment = document.createComment(`@@wcs-text-start:${path}`);\n const endComment = document.createComment(`@@wcs-text-end:${path}`);\n parentNode.insertBefore(startComment, binding.replaceNode);\n parentNode.insertBefore(endComment, binding.replaceNode.nextSibling);\n }\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { IBindingInfo } from \"../types\";\nimport { IApplyContext } from \"./types\";\n\nexport function applyChangeToWebComponent(binding: IBindingInfo, _context: IApplyContext, newValue: unknown): void {\n const element = binding.node as Element;\n const propSegments = binding.propSegments;\n if (propSegments.length <= 1) {\n raiseError(`Invalid propSegments for web component binding: ${propSegments.join(\".\")}`);\n }\n const [ firstSegment, ...restSegments ] = propSegments;\n const subObject = (element as any)[firstSegment] as Record<string, unknown> | undefined;\n if (typeof subObject === \"undefined\") {\n raiseError(`Property \"${firstSegment}\" not found on web component.`);\n }\n subObject[restSegments.join(\".\")] = newValue;\n}\n","import { INDEX_BY_INDEX_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { ILoopContext } from \"./types\";\n\n// indexName ... $1, $2, ...\nexport function getIndexValueByLoopContext(loopContext: ILoopContext, indexName: string): number | null {\n if (loopContext.listIndex === null) {\n raiseError(`ListIndex not found for loopContext:`);\n }\n const indexPos = INDEX_BY_INDEX_NAME[indexName];\n if (typeof indexPos === \"undefined\") {\n raiseError(`Invalid index name: ${indexName}`);\n }\n const listIndex = loopContext.listIndex.at(indexPos);\n if (listIndex === null) {\n raiseError(`Index not found at position ${indexPos} for loopContext:`);\n }\n return listIndex.index;\n}","import { getStateAddressByBindingInfo } from \"../binding/getStateAddressByBindingInfo\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { INDEX_BY_INDEX_NAME } from \"../define\";\nimport { getIndexValueByLoopContext } from \"../list/getIndexValueByLoopContext\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { getByAddressSymbol } from \"../proxy/symbols\";\nimport { IStateProxy } from \"../proxy/types\";\nimport { raiseError } from \"../raiseError\";\n\nexport function getValue(state: IStateProxy, binding: IBindingInfo): any {\n const stateAddress = getStateAddressByBindingInfo(binding);\n if (stateAddress.pathInfo.path in INDEX_BY_INDEX_NAME) {\n const loopContext = getLoopContextByNode(binding.node);\n if (loopContext === null) {\n raiseError(`ListIndex not found for binding: ${binding.statePathName}`);\n }\n return getIndexValueByLoopContext(loopContext, stateAddress.pathInfo.path);\n } else {\n return state[getByAddressSymbol](stateAddress);\n }\n}\n","import { IBindingInfo } from \"../types.js\";\nimport { applyChangeFromBindings } from \"./applyChangeFromBindings.js\";\n\n// applyChange が「未 define のカスタム要素」への適用を見送った binding の台帳。\n// define されるまでの間、同じ binding に対して applyChange は(state 更新の\n// たびに)何度も呼ばれうるため、whenDefined の多重登録をここで抑止する。\n// WeakSet なので binding の寿命に追従し、恒久 define されないタグでもリークしない。\nconst scheduledBindings = new WeakSet<IBindingInfo>();\n\n/**\n * 未 define のカスタム要素に対する適用を customElements.whenDefined 後に再実行\n * する。two-way / event-token の attach、spread の deferred 展開はいずれも\n * whenDefined で再試行するのに対し、値の適用だけが片道 skip だった非対称の解消\n * (docs/state-binding-init-races.md §2)。\n *\n * 再適用は applyChangeFromBindings を通すため、define 時点の最新 state 値で\n * 適用される(skip 時点の値を保持しない)。define を待つ間に DOM から外れた\n * binding には適用しない(deferred spread と同じ規約)。\n */\nexport function scheduleDeferredApply(binding: IBindingInfo, tagName: string): void {\n if (scheduledBindings.has(binding)) {\n return;\n }\n scheduledBindings.add(binding);\n customElements.whenDefined(tagName).then(() => {\n scheduledBindings.delete(binding);\n if (!binding.replaceNode.isConnected) {\n return; // define を待つ間にノードが削除された\n }\n applyChangeFromBindings([binding]);\n }).catch((error: unknown) => {\n console.error(`[@wcstack/state] deferred apply failed for <${tagName}>.`, error);\n });\n}\n","import { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding.js\";\nimport { getCustomElement } from \"../getCustomElement.js\";\nimport { raiseError } from \"../raiseError.js\";\nimport { getStateElementByName } from \"../stateElementByName.js\";\nimport { IBindingInfo } from \"../types.js\";\nimport { isWebComponentComplete } from \"../webComponent/completeWebComponent.js\";\nimport { applyChangeToAttribute } from \"./applyChangeToAttribute.js\";\nimport { applyChangeToCheckbox } from \"./applyChangeToCheckbox.js\";\nimport { applyChangeToClass } from \"./applyChangeToClass.js\";\nimport { applyChangeToCommand } from \"./applyChangeToCommand.js\";\nimport { applyChangeToFor } from \"./applyChangeToFor.js\";\nimport { applyChangeToIf } from \"./applyChangeToIf.js\";\nimport { applyChangeToProperty } from \"./applyChangeToProperty.js\";\nimport { applyChangeToRadio } from \"./applyChangeToRadio.js\";\nimport { applyChangeToStyle } from \"./applyChangeToStyle.js\";\nimport { applyChangeToText } from \"./applyChangeToText.js\";\nimport { applyChangeToWebComponent } from \"./applyChangeToWebComponent.js\";\nimport { getFilteredValue } from \"./getFilteredValue.js\";\nimport { getValue } from \"./getValue.js\";\nimport { getRootNodeByFragment } from \"./rootNodeByFragment.js\";\nimport { scheduleDeferredApply } from \"./scheduleDeferredApply.js\";\nimport { ApplyChangeFn, IApplyContext } from \"./types.js\";\n\nconst applyChangeByFirstSegment: { [key: string]: ApplyChangeFn } = {\n \"class\": applyChangeToClass,\n \"attr\": applyChangeToAttribute,\n \"style\": applyChangeToStyle,\n \"command\": applyChangeToCommand,\n};\n\nconst applyChangeByBindingType: { [key: string]: ApplyChangeFn } = {\n \"text\": applyChangeToText,\n \"for\": applyChangeToFor,\n \"if\": applyChangeToIf,\n \"else\": applyChangeToIf,\n \"elseif\": applyChangeToIf,\n \"radio\": applyChangeToRadio,\n \"checkbox\": applyChangeToCheckbox,\n};\n\nconst fnByBinding: WeakMap<IBindingInfo, ApplyChangeFn> = new WeakMap();\nconst deferredSelectBindingByBinding: WeakMap<IBindingInfo, boolean> = new WeakMap();\n\nfunction _applyChange(binding: IBindingInfo, context: IApplyContext): void {\n const value = getValue(context.state, binding);\n const filteredValue = getFilteredValue(value, binding.outFilters);\n\n if (deferredSelectBindingByBinding.get(binding) === true) {\n context.deferredSelectBindings.push({ binding, value: filteredValue });\n return;\n }\n let fn = fnByBinding.get(binding);\n if (typeof fn !== 'undefined') {\n fn(binding, context, filteredValue);\n return;\n }\n if (fnByBinding.has(binding)) {\n if (isWebComponentComplete(binding.replaceNode as Element, context.stateElement)) {\n fn = applyChangeToWebComponent;\n fnByBinding.set(binding, fn); // 確定したのでキャッシュ\n } else {\n fn = applyChangeToProperty;\n }\n fn(binding, context, filteredValue);\n return;\n }\n\n fn = applyChangeByBindingType[binding.bindingType];\n if (typeof fn === 'undefined') {\n const firstSegment = binding.propSegments[0];\n fn = applyChangeByFirstSegment[firstSegment];\n fnByBinding.set(binding, fn);\n if (typeof fn === 'undefined') {\n const customTag = getCustomElement(binding.replaceNode);\n if (customTag) {\n if (isWebComponentComplete(binding.replaceNode as Element, context.stateElement)) {\n fn = applyChangeToWebComponent;\n fnByBinding.set(binding, fn); // 確定したのでキャッシュ\n } else {\n fn = applyChangeToProperty;\n }\n } else {\n fn = applyChangeToProperty;\n fnByBinding.set(binding, fn);\n }\n }\n }\n if (fn === applyChangeToProperty) {\n const element = binding.node as Element;\n if (element.tagName === 'SELECT') {\n const propName = binding.propSegments[0];\n if (propName === 'value' || propName === 'selectedIndex') {\n context.deferredSelectBindings.push({ binding, value: filteredValue });\n deferredSelectBindingByBinding.set(binding, true);\n return;\n }\n }\n }\n fn(binding, context, filteredValue);\n}\n\nexport function applyChange(binding: IBindingInfo, context: IApplyContext): void {\n if (context.appliedBindingSet.has(binding)) {\n return;\n }\n context.appliedBindingSet.add(binding);\n // $updatedCallback が定義されていない state では、更新アドレスの集計自体が\n // 不要(drain 終端の呼び出しごと省略される)。大量バインディング適用時の\n // Set 蓄積を避ける。undefined(テスト用モック等)は従来通り集計する。\n if (context.stateElement.hasUpdatedCallback !== false) {\n const absAddress = getAbsoluteStateAddressByBinding(binding);\n if (context.updatedAbsAddressSetByStateElement.has(context.stateElement)) {\n const addressSet = context.updatedAbsAddressSetByStateElement.get(context.stateElement)!;\n addressSet.add(absAddress);\n } else {\n context.updatedAbsAddressSetByStateElement.set(context.stateElement, new Set([\n absAddress\n ]));\n }\n }\n if (binding.bindingType === \"event\") {\n return;\n }\n const customTag = getCustomElement(binding.replaceNode);\n if (customTag) {\n if (customElements.get(customTag) === undefined) {\n // 未 define のカスタム要素へは今は適用できない(accessor 未確立の要素に\n // 素の own property を書くと upgrade 後に class accessor を隠してしまう)。\n // whenDefined 後に最新 state 値で再適用する(two-way attach / deferred\n // spread と対称。docs/state-binding-init-races.md §2)。\n scheduleDeferredApply(binding, customTag);\n return;\n }\n }\n // applyChangeFromBindings のグループ化ループが解決済みルートの一致を検証済みの\n // 場合、stateName さえ一致すれば getRootNode の再解決(native 呼び出し)を省略\n // できる。activateContent 経由(フラグメント内の新規 content)も、フラグメントは\n // setRootNodeByFragment で context.rootNode に解決されるため同じ不変条件が成り立つ。\n if (context.sameRootVerified === true && binding.stateName === context.stateName) {\n _applyChange(binding, context);\n return;\n }\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n if (rootNode instanceof DocumentFragment && !(rootNode instanceof ShadowRoot)) {\n rootNode = getRootNodeByFragment(rootNode);\n if (rootNode === null) {\n raiseError(`Root node for fragment not found for binding.`);\n }\n }\n if (binding.stateName !== context.stateName || rootNode !== context.rootNode) {\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n stateElement.createState(\"readonly\", (targetState) => {\n const newContext = {\n stateName: binding.stateName,\n rootNode: rootNode,\n stateElement: stateElement,\n state: targetState,\n appliedBindingSet: context.appliedBindingSet,\n newListValueByAbsAddress: context.newListValueByAbsAddress,\n updatedAbsAddressSetByStateElement: context.updatedAbsAddressSetByStateElement,\n deferredSelectBindings: context.deferredSelectBindings,\n }\n _applyChange(binding, newContext);\n });\n } else {\n _applyChange(binding, context);\n }\n}\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { setLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { updatedCallbackSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo } from \"../types\";\nimport { applyChange } from \"./applyChange\";\nimport { applyChangeToProperty } from \"./applyChangeToProperty\";\nimport { getRootNodeByFragment } from \"./rootNodeByFragment\";\nimport { IApplyContext, IDeferredSelectBinding } from \"./types\";\n\n/**\n * バインディング情報の配列を処理し、各バインディングに対して状態の変更を適用する。\n *\n * 2フェーズで処理:\n * Phase 1: 構造的更新(for/if) + 値更新(select以外) — select.value/selectedIndex は遅延収集\n * Phase 2: 遅延されたselect.value/selectedIndex を適用(option要素の生成後)\n *\n * 最適化のため、以下のグループ化を行う:\n * 同じ stateNameとrootNode を持つバインディングをグループ化 → createState の呼び出しを削減\n */\nexport function applyChangeFromBindings(bindings: IBindingInfo[]): void {\n let bindingIndex = 0;\n const appliedBindingSet: Set<IBindingInfo> = new Set();\n const newListValueByAbsAddress: Map<IAbsoluteStateAddress, readonly unknown[]> = new Map();\n const updatedAbsAddressSetByStateElement: Map<IStateElement, Set<IAbsoluteStateAddress>> = new Map();\n const deferredSelectBindings: IDeferredSelectBinding[] = [];\n\n // Phase 1: 構造的更新 + 値更新(select.value/selectedIndex は遅延)\n while(bindingIndex < bindings.length) {\n let binding = bindings[bindingIndex];\n const stateName = binding.stateName;\n if (binding.replaceNode.isConnected === false) {\n // 切断されているバインディングは無視、本来は事前に除去されているはず\n if (config.debug) {\n console.log(`applyChangeFromBindings: skip disconnected binding: ${binding.bindingType} ${binding.statePathName} on ${binding.node.nodeName}`, binding);\n }\n bindingIndex++;\n continue;\n }\n let rootNode: Node | null = binding.replaceNode.getRootNode() as Node;\n if (rootNode instanceof DocumentFragment && !(rootNode instanceof ShadowRoot)) {\n rootNode = getRootNodeByFragment(rootNode);\n if (rootNode === null) {\n raiseError(`Root node for fragment not found for binding.`);\n }\n }\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for binding.`);\n }\n\n stateElement.createState(\"readonly\", (state) => {\n const context: IApplyContext = {\n rootNode: rootNode,\n stateName: stateName,\n stateElement: stateElement,\n state: state,\n appliedBindingSet: appliedBindingSet,\n newListValueByAbsAddress: newListValueByAbsAddress,\n updatedAbsAddressSetByStateElement: updatedAbsAddressSetByStateElement,\n deferredSelectBindings: deferredSelectBindings,\n // グループ内の binding は下の do/while が「解決済みルート === rootNode」を\n // 検証してから applyChange に渡す(applyChange 側の getRootNode 省略の根拠)\n sameRootVerified: true,\n };\n\n do {\n applyChange(binding, context);\n bindingIndex++;\n\n const nextBindingInfo: IBindingInfo | undefined = bindings[bindingIndex];\n if (!nextBindingInfo) break; // 終端に到達\n const nextRootNode = nextBindingInfo.replaceNode.getRootNode() as Node;\n if (nextBindingInfo.stateName !== stateName || nextRootNode !== context.rootNode) break; // stateName が変わった\n binding = nextBindingInfo;\n } while(true); // eslint-disable-line no-constant-condition\n });\n }\n // Phase 2: 遅延されたselect.value/selectedIndex を適用\n // applyChangeToProperty は context を参照しないため null を渡す\n for (const { binding, value } of deferredSelectBindings) {\n applyChangeToProperty(binding, null as unknown as IApplyContext, value);\n }\n\n for(const [ absAddress, newListValue ] of newListValueByAbsAddress.entries()) {\n setLastListValueByAbsoluteStateAddress(absAddress, newListValue);\n }\n for(const [ stateElement, absAddressSet ] of updatedAbsAddressSetByStateElement.entries()) {\n stateElement.createState(\"writable\", (state) => {\n state[updatedCallbackSymbol](Array.from(absAddressSet));\n });\n }\n}\n","import { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { createHandlerBindingRegistry } from \"./handlerBindingRegistry\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\n// binding を強参照しない台帳(handlerBindingRegistry.ts のリーク解説を参照)\nconst bindingRegistry = createHandlerBindingRegistry();\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.statePathName}::${eventName}::${filterKey}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n let eventName = 'input';\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nconst radioEventHandlerFunction = (\n stateName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n) => (event: Event): any => {\n const node = event.target as HTMLInputElement;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n if (node.type !== 'radio') {\n console.warn(`[@wcstack/state] event.target is not a radio input element.`);\n return;\n }\n if (node.checked === false) {\n return;\n }\n const newValue = node.value;\n let filteredNewValue: unknown = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[statePathName] = filteredNewValue;\n });\n });\n}\n\nexport function attachRadioEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"radio\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n let radioEventHandler = handlerByHandlerKey.get(key);\n if (typeof radioEventHandler === \"undefined\") {\n radioEventHandler = radioEventHandlerFunction(\n binding.stateName,\n binding.statePathName,\n binding.inFilters\n );\n handlerByHandlerKey.set(key, radioEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, radioEventHandler);\n bindingRegistry.add(key, binding);\n return true;\n }\n return false;\n}\n\nexport function detachRadioEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"radio\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n const radioEventHandler = handlerByHandlerKey.get(key);\n if (typeof radioEventHandler === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(eventName, radioEventHandler);\n\n if (bindingRegistry.countOf(key) === 0) {\n return false;\n }\n if (bindingRegistry.remove(key, binding)) {\n handlerByHandlerKey.delete(key);\n }\n return true;\n }\n return false;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingRegistry,\n getHandlerKey,\n getEventName,\n radioEventHandlerFunction,\n};\n","import { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IBindingInfo, IFilterInfo } from \"../types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { createHandlerBindingRegistry } from \"./handlerBindingRegistry\";\n\nconst handlerByHandlerKey: Map<string, (event: Event) => any> = new Map();\n// binding を強参照しない台帳(handlerBindingRegistry.ts のリーク解説を参照)\nconst bindingRegistry = createHandlerBindingRegistry();\n\nfunction getHandlerKey(binding: IBindingInfo, eventName: string): string {\n const filterKey = binding.inFilters.map(f => f.filterName + '(' + f.args.join(',') + ')').join('|');\n return `${binding.stateName}::${binding.statePathName}::${eventName}::${filterKey}`;\n}\n\nfunction getEventName(binding: IBindingInfo): string {\n let eventName = 'input';\n for(const modifier of binding.propModifiers) {\n if (modifier.startsWith('on')) {\n eventName = modifier.slice(2);\n }\n }\n return eventName;\n}\n\nconst checkboxEventHandlerFunction = (\n stateName: string,\n statePathName: string,\n inFilters: IFilterInfo[],\n) => (event: Event): any => {\n const node = event.target as HTMLInputElement;\n if (node === null) {\n console.warn(`[@wcstack/state] event.target is null.`);\n return;\n }\n if (node.type !== 'checkbox') {\n console.warn(`[@wcstack/state] event.target is not a checkbox input element.`);\n return;\n }\n const checked = node.checked;\n const newValue = node.value;\n let filteredNewValue: unknown = newValue;\n for(const filter of inFilters) {\n filteredNewValue = filter.filterFn(filteredNewValue);\n }\n\n const rootNode = node.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${stateName}\" not found for two-way binding.`);\n }\n\n const loopContext = getLoopContextByNode(node);\n stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n let currentValue = state[statePathName];\n if (Array.isArray(currentValue)) {\n if (checked) {\n if (currentValue.indexOf(filteredNewValue) === -1) {\n state[statePathName] = currentValue.concat(filteredNewValue);\n }\n } else {\n const index = currentValue.indexOf(filteredNewValue);\n if (index !== -1) {\n state[statePathName] = currentValue.toSpliced(index, 1);\n }\n }\n } else {\n if (checked) {\n state[statePathName] = [filteredNewValue];\n } else {\n state[statePathName] = [];\n }\n }\n });\n });\n}\n\nexport function attachCheckboxEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"checkbox\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n let checkboxEventHandler = handlerByHandlerKey.get(key);\n if (typeof checkboxEventHandler === \"undefined\") {\n checkboxEventHandler = checkboxEventHandlerFunction(\n binding.stateName,\n binding.statePathName,\n binding.inFilters\n );\n handlerByHandlerKey.set(key, checkboxEventHandler);\n }\n (binding.node as Element).addEventListener(eventName, checkboxEventHandler);\n bindingRegistry.add(key, binding);\n return true;\n }\n return false;\n}\n\nexport function detachCheckboxEventHandler(binding: IBindingInfo): boolean {\n if (binding.bindingType === \"checkbox\" && binding.propModifiers.indexOf('ro') === -1) {\n const eventName = getEventName(binding);\n const key = getHandlerKey(binding, eventName);\n const checkboxEventHandler = handlerByHandlerKey.get(key);\n if (typeof checkboxEventHandler === \"undefined\") {\n return false;\n }\n (binding.node as Element).removeEventListener(eventName, checkboxEventHandler);\n\n if (bindingRegistry.countOf(key) === 0) {\n return false;\n }\n if (bindingRegistry.remove(key, binding)) {\n handlerByHandlerKey.delete(key);\n }\n return true;\n }\n return false;\n}\n\nexport const __private__ = {\n handlerByHandlerKey,\n bindingRegistry,\n getHandlerKey,\n getEventName,\n checkboxEventHandlerFunction,\n};\n","import { ILoopContext } from \"../list/types\";\nimport { IBindingInfo } from \"../types\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { raiseError } from \"../raiseError\";\nimport { replaceToReplaceNode } from \"./replaceToReplaceNode\";\nimport {\n collectNodesAndBindingInfos,\n collectNodesAndBindingInfosByFragment,\n IDeferredSpreadEntry,\n processDeferredNode,\n} from \"./collectNodesAndBindingInfos\";\nimport { IFragmentNodeInfo } from \"../structural/types\";\nimport { attachEventHandler } from \"../event/handler\";\nimport { attachEventTokenHandler } from \"../event/eventTokenHandler\";\nimport { attachTwowayEventHandler } from \"../event/twowayHandler\";\nimport { setLoopContextByNode } from \"../list/loopContextByNode\";\nimport { applyChangeFromBindings } from \"../apply/applyChangeFromBindings\";\nimport { IInitialBindingInfo } from \"./types\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { attachRadioEventHandler } from \"../event/radioHandler\";\nimport { attachCheckboxEventHandler } from \"../event/checkboxHandler\";\n\nfunction _initializeBindings(\n allBindings: IBindingInfo[],\n): void {\n for(const binding of allBindings) {\n\n // replace node\n replaceToReplaceNode(binding);\n\n // event\n if (attachEventHandler(binding)) {\n continue;\n }\n\n // event token (element → state)\n if (attachEventTokenHandler(binding)) {\n continue;\n }\n\n // two-way binding\n attachTwowayEventHandler(binding);\n // radio binding\n attachRadioEventHandler(binding);\n // checkbox binding\n attachCheckboxEventHandler(binding);\n\n }\n}\n\nfunction _registerAbsoluteAddresses(allBindings: IBindingInfo[]): void {\n for(const binding of allBindings) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n if (binding.bindingType !== 'event') {\n stateElement.setPathInfo(binding.statePathName, binding.bindingType);\n }\n }\n}\n\nfunction _scheduleDeferredSpreads(\n deferredSpreads: IDeferredSpreadEntry[],\n parentLoopContext: ILoopContext | null,\n): void {\n for (const entry of deferredSpreads) {\n customElements.whenDefined(entry.tagName).then(() => {\n if (!entry.node.isConnected) return; // node was removed before class became ready\n const bindings = processDeferredNode(entry);\n if (bindings.length === 0) return;\n setLoopContextByNode(entry.node, parentLoopContext);\n _initializeBindings(bindings);\n _registerAbsoluteAddresses(bindings);\n applyChangeFromBindings(bindings);\n }).catch((error: unknown) => {\n console.error(`[@wcstack/state] deferred spread failed for <${entry.tagName}>.`, error);\n });\n }\n}\n\nexport function initializeBindings(\n root: Document | DocumentFragment |Element, parentLoopContext: ILoopContext | null\n): void {\n const [subscriberNodes, allBindings, deferredSpreads] = collectNodesAndBindingInfos(root);\n for(const node of subscriberNodes) {\n setLoopContextByNode(node, parentLoopContext);\n }\n _initializeBindings(allBindings);\n _registerAbsoluteAddresses(allBindings);\n // apply all at once\n applyChangeFromBindings(allBindings);\n _scheduleDeferredSpreads(deferredSpreads, parentLoopContext);\n}\n\nexport function initializeBindingsByFragment(\n root: DocumentFragment,\n nodeInfos: IFragmentNodeInfo[],\n): IInitialBindingInfo {\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfosByFragment(root, nodeInfos);\n _initializeBindings(allBindings);\n return {\n nodes: subscriberNodes,\n bindingInfos: allBindings,\n };\n}\n","import { config } from \"../config.js\";\nimport { SVG_NAMESPACE } from \"../define.js\";\n\nconst MUSTACHE_REGEX = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\nconst SKIP_TAGS = new Set([\"SCRIPT\", \"STYLE\"]);\n\nexport function convertMustacheToComments(root: Document | Element | DocumentFragment): void {\n if (!config.enableMustache) {\n return;\n }\n\n convertTextNodes(root);\n\n const templates = Array.from(root.querySelectorAll(\"template\"));\n\n for (const template of templates) {\n if (template.namespaceURI === SVG_NAMESPACE) {\n const newTemplate = document.createElement(\"template\");\n const childNodes = Array.from(template.childNodes);\n for(let i = 0; i < childNodes.length; i++) {\n const childNode = childNodes[i];\n newTemplate.content.appendChild(childNode);\n }\n for(const attr of template.attributes) {\n newTemplate.setAttribute(attr.name, attr.value);\n }\n template.replaceWith(newTemplate);\n convertMustacheToComments(newTemplate.content);\n } else {\n convertMustacheToComments(template.content);\n }\n }\n}\n\nfunction convertTextNodes(root: Document | Element | DocumentFragment): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n const textNodes: Text[] = [];\n\n while (walker.nextNode()) {\n textNodes.push(walker.currentNode as Text);\n }\n\n for (const textNode of textNodes) {\n if (textNode.parentElement && SKIP_TAGS.has(textNode.parentElement.tagName)) {\n continue;\n }\n replaceTextNode(textNode);\n }\n}\n\nfunction replaceTextNode(textNode: Text): void {\n const text = textNode.data;\n MUSTACHE_REGEX.lastIndex = 0;\n\n if (!MUSTACHE_REGEX.test(text)) {\n return;\n }\n\n MUSTACHE_REGEX.lastIndex = 0;\n const fragment = document.createDocumentFragment();\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = MUSTACHE_REGEX.exec(text)) !== null) {\n if (match.index > lastIndex) {\n fragment.appendChild(document.createTextNode(text.slice(lastIndex, match.index)));\n }\n\n const bindText = match[1];\n fragment.appendChild(document.createComment(`@@: ${bindText}`));\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n fragment.appendChild(document.createTextNode(text.slice(lastIndex)));\n }\n\n textNode.parentNode!.replaceChild(fragment, textNode);\n}\n","import { builtinFilterFn, outputBuiltinFilters } from \"../filters/builtinFilters\";\nimport { IFilterInfo } from \"../types\";\n\nlet _notFilterInfo: IFilterInfo | undefined = undefined;\n\nexport function createNotFilter(): IFilterInfo {\n if (_notFilterInfo) {\n return _notFilterInfo;\n }\n const filterName = \"not\"\n const args: string[] = [];\n const filterFn = builtinFilterFn(filterName, args)(outputBuiltinFilters);\n _notFilterInfo = {\n filterName,\n args,\n filterFn,\n }\n return _notFilterInfo;\n}\n","import { config } from \"../config.js\";\nimport { DELIMITER, WILDCARD } from \"../define.js\";\n\nconst COMMENT_REGEX = /^(\\s*@@\\s*(?:.*?)\\s*:\\s*)(.+?)(\\s*)$/;\n\nfunction expandShorthandInStatePart(statePart: string, forPath: string): string {\n const prefix = forPath + DELIMITER + WILDCARD;\n const pipeIndex = statePart.indexOf('|');\n const atIndex = statePart.indexOf('@');\n let pathPart: string;\n let suffix: string;\n if (pipeIndex !== -1) {\n pathPart = statePart.slice(0, pipeIndex).trim();\n suffix = statePart.slice(pipeIndex);\n } else if (atIndex !== -1) {\n pathPart = statePart.slice(0, atIndex).trim();\n suffix = statePart.slice(atIndex);\n } else {\n pathPart = statePart.trim();\n suffix = '';\n }\n if (pathPart === '.') {\n pathPart = prefix;\n } else if (pathPart.startsWith('.')) {\n pathPart = prefix + DELIMITER + pathPart.slice(1);\n } else {\n return statePart;\n }\n if (suffix.length > 0) {\n return pathPart + suffix;\n }\n return pathPart;\n}\n\nfunction expandCommentData(data: string, forPath: string): string {\n const match = COMMENT_REGEX.exec(data);\n if (match === null) {\n return data;\n }\n const commentPrefix = match[1];\n const bindText = match[2];\n const commentSuffix = match[3];\n const expanded = expandShorthandInStatePart(bindText, forPath);\n return commentPrefix + expanded + commentSuffix;\n}\n\nfunction expandBindAttribute(attrValue: string, forPath: string): string {\n const parts = attrValue.split(';');\n let changed = false;\n const result = parts.map(part => {\n const trimmed = part.trim();\n if (trimmed.length === 0) return part;\n const colonIndex = trimmed.indexOf(':');\n if (colonIndex === -1) return part;\n const propPart = trimmed.slice(0, colonIndex).trim();\n const statePart = trimmed.slice(colonIndex + 1).trim();\n const expanded = expandShorthandInStatePart(statePart, forPath);\n if (expanded !== statePart) {\n changed = true;\n return `${propPart}: ${expanded}`;\n }\n return part;\n });\n if (!changed) return attrValue;\n return result.join(';');\n}\n\nexport function expandShorthandInBindAttribute(attrValue: string, forPath: string): string {\n return expandBindAttribute(attrValue, forPath);\n}\n\nexport function expandShorthandPaths(root: DocumentFragment, forPath: string): void {\n const bindAttr = config.bindAttributeName;\n const walker = document.createTreeWalker(\n root,\n NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_ELEMENT,\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n if (node.nodeType === Node.COMMENT_NODE) {\n const comment = node as Comment;\n comment.data = expandCommentData(comment.data, forPath);\n continue;\n }\n const element = node as Element;\n if (element instanceof HTMLTemplateElement) {\n continue;\n }\n const attr = element.getAttribute(bindAttr);\n if (attr !== null) {\n const expanded = expandBindAttribute(attr, forPath);\n if (expanded !== attr) {\n element.setAttribute(bindAttr, expanded);\n }\n }\n }\n}\n","\nexport function getNodePath(node: Node): number[] {\n let currentNode: Node | null = node;\n const path: number[] = [];\n while(currentNode.parentNode !== null) {\n const nodes: Node[] = Array.from(currentNode.parentNode.childNodes);\n const index = nodes.indexOf(currentNode);\n path.unshift(index);\n currentNode = currentNode.parentNode;\n }\n return path;\n}\n","import { getParseBindTextResults } from \"../bindings/getParseBindTextResults\";\nimport { getSubscriberNodes } from \"../bindings/getSubscriberNodes\";\nimport { getNodePath } from \"./getNodePath\";\nimport { IFragmentNodeInfo } from \"./types\";\n\nexport function getFragmentNodeInfos(fragment: DocumentFragment): IFragmentNodeInfo[] {\n const fragmnentNodeInfos: IFragmentNodeInfo[] = [];\n const subscriberNodes = getSubscriberNodes(fragment);\n for(const subscriberNode of subscriberNodes) {\n const parseBindingTextResults = getParseBindTextResults(subscriberNode);\n fragmnentNodeInfos.push({\n nodePath: getNodePath(subscriberNode),\n parseBindTextResults: parseBindingTextResults,\n });\n }\n return fragmnentNodeInfos;\n}","\nexport function optimizeFragment(fragment: DocumentFragment): void {\n const childNodes = Array.from(fragment.childNodes);\n for(const childNode of childNodes) {\n if (childNode.nodeType === Node.TEXT_NODE) {\n const textContent = childNode.textContent || '';\n if (textContent.trim() === '') {\n // Remove empty text nodes\n fragment.removeChild(childNode);\n }\n }\n }\n}\n","import { getParseBindTextResults } from \"../bindings/getParseBindTextResults\";\nimport { parseBindTextsForElement } from \"../bindTextParser/parseBindTextsForElement\";\nimport { ParseBindTextResult } from \"../bindTextParser/types\";\nimport { config } from \"../config\";\nimport { getUUID } from \"../getUUID\";\nimport { raiseError } from \"../raiseError\";\nimport { BindingType } from \"../types\";\nimport { createNotFilter } from \"./createNotFilter\";\nimport { expandShorthandInBindAttribute, expandShorthandPaths } from \"./expandShorthandPaths\";\nimport { setFragmentInfoByUUID } from \"./fragmentInfoByUUID\";\nimport { getFragmentNodeInfos } from \"./getFragmentNodeInfos\";\nimport { getNodePath } from \"./getNodePath\";\nimport { optimizeFragment } from \"./optimizeFragment\";\nimport { IFragmentInfo } from \"./types\";\n\nconst keywordByBindingType: Map<BindingType, string> = new Map<BindingType, string>([\n [\"for\", config.commentForPrefix],\n [\"if\", config.commentIfPrefix],\n [\"elseif\", config.commentElseIfPrefix],\n [\"else\", config.commentElsePrefix],\n]);\n\nconst notFilter = createNotFilter();\n\nfunction cloneNotParseBindTextResult(\n bindingType: BindingType,\n parseBindTextResult: ParseBindTextResult\n): ParseBindTextResult {\n const filters = parseBindTextResult.outFilters;\n return {\n ...parseBindTextResult,\n outFilters: [...filters, notFilter],\n bindingType: bindingType,\n };\n}\n\nfunction _getFragmentInfo(\n rootNode: Node,\n fragment: DocumentFragment,\n parseBindingTextResult: ParseBindTextResult,\n forPath?: string\n): IFragmentInfo {\n optimizeFragment(fragment);\n if (typeof forPath === \"string\") {\n expandShorthandPaths(fragment, forPath);\n }\n collectStructuralFragments(rootNode, fragment, forPath);\n // after replacing and collect node infos on child fragment\n const fragmentInfo = {\n fragment: fragment,\n parseBindTextResult: parseBindingTextResult,\n nodeInfos: getFragmentNodeInfos(fragment),\n }\n return fragmentInfo;\n}\n\n\nexport function collectStructuralFragments(rootNode: Node, walkRoot: Document | Element | DocumentFragment, forPath?: string): void {\n const elseKeyword = config.commentElsePrefix;\n const walker = document.createTreeWalker(\n walkRoot, \n NodeFilter.SHOW_ELEMENT, \n {\n acceptNode(node: Node) {\n const element = node as Element;\n if (element.tagName.toLowerCase() === 'template') {\n const bindText = element.getAttribute(config.bindAttributeName) || '';\n if (bindText.length > 0) {\n return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n let lastIfFragmentInfo: IFragmentInfo | null = null; // for elseif chaining\n const elseFragmentInfos: IFragmentInfo[] = []; // for elseif chaining\n const templates: HTMLTemplateElement[] = [];\n while (walker.nextNode()) {\n const template = walker.currentNode as HTMLTemplateElement;\n templates.push(template);\n }\n\n for(const template of templates) {\n let bindText = template.getAttribute(config.bindAttributeName) || '';\n if (typeof forPath === \"string\") {\n bindText = expandShorthandInBindAttribute(bindText, forPath);\n }\n const parseBindTextResults = parseBindTextsForElement(bindText);\n let parseBindTextResult = parseBindTextResults[0];\n const keyword = keywordByBindingType.get(parseBindTextResult.bindingType);\n if (typeof keyword === 'undefined') {\n continue;\n }\n\n const bindingType = parseBindTextResult.bindingType;\n const fragment = template.content;\n const uuid = getUUID();\n let fragmentInfo: IFragmentInfo | null = null;\n\n // Determine childForPath for shorthand expansion\n const childForPath = bindingType === \"for\"\n ? parseBindTextResult.statePathName\n : forPath;\n\n if (bindingType === \"else\") {\n // check last 'if' or 'elseif' fragment info\n if (lastIfFragmentInfo === null) {\n raiseError(`'else' binding found without preceding 'if' or 'elseif' binding.`);\n }\n // else condition\n parseBindTextResult = cloneNotParseBindTextResult(\"else\", lastIfFragmentInfo.parseBindTextResult);\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n\n const lastElseFragmentInfo = elseFragmentInfos.at(-1);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n if (typeof lastElseFragmentInfo !== \"undefined\") {\n template.remove();\n lastElseFragmentInfo.fragment.appendChild(placeHolder);\n lastElseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(placeHolder),\n parseBindTextResults: getParseBindTextResults(placeHolder),\n });\n } else {\n template.replaceWith(placeHolder);\n }\n } else if (bindingType === \"elseif\") {\n // check last 'if' or 'elseif' fragment info\n if (lastIfFragmentInfo === null) {\n raiseError(`'elseif' binding found without preceding 'if' or 'elseif' binding.`);\n }\n\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n\n // create else fragment\n const elseUUID = getUUID();\n const elseFragmentInfo: IFragmentInfo = {\n fragment: document.createDocumentFragment(),\n parseBindTextResult: cloneNotParseBindTextResult(\"else\", lastIfFragmentInfo.parseBindTextResult),\n nodeInfos: [],\n };\n elseFragmentInfo.fragment.appendChild(placeHolder);\n elseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(placeHolder),\n parseBindTextResults: getParseBindTextResults(placeHolder),\n });\n setFragmentInfoByUUID(elseUUID, rootNode, elseFragmentInfo);\n const lastElseFragmentInfo = elseFragmentInfos.at(-1);\n elseFragmentInfos.push(elseFragmentInfo);\n const elsePlaceHolder = document.createComment(`@@${elseKeyword}:${elseUUID}`);\n\n if (typeof lastElseFragmentInfo !== \"undefined\") {\n template.remove();\n lastElseFragmentInfo.fragment.appendChild(elsePlaceHolder);\n lastElseFragmentInfo.nodeInfos.push({\n nodePath: getNodePath(elsePlaceHolder),\n parseBindTextResults: getParseBindTextResults(elsePlaceHolder),\n });\n } else {\n template.replaceWith(elsePlaceHolder);\n }\n\n } else {\n fragmentInfo = _getFragmentInfo(rootNode, fragment, parseBindTextResult, childForPath);\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n const placeHolder = document.createComment(`@@${keyword}:${uuid}`);\n template.replaceWith(placeHolder);\n }\n\n // Update lastIfFragmentInfo for if/elseif/else chaining\n if (bindingType === \"if\") {\n elseFragmentInfos.length = 0; // start new if chain\n lastIfFragmentInfo = fragmentInfo;\n } else if (bindingType === \"elseif\") {\n lastIfFragmentInfo = fragmentInfo;\n } else if (bindingType === \"else\") {\n lastIfFragmentInfo = null;\n elseFragmentInfos.length = 0; // end if chain\n }\n }\n}\n","import { State } from \"./components/State\";\nimport { IStateElement } from \"./components/types\";\nimport { config } from \"./config\";\n\nexport async function waitForStateInitialize(root: Document | Element | DocumentFragment): Promise<void> {\n const elements = root.querySelectorAll(config.tagNames.state);\n const promises: Promise<void>[] = [];\n await customElements.whenDefined(config.tagNames.state);\n for(const element of elements) {\n const stateElement = element as State as IStateElement;\n promises.push(stateElement.initializePromise);\n }\n await Promise.all(promises);\n}\n","import { waitInitializeBinding } from \"./bindings/initializeBindingPromiseByNode\";\nimport { initializeBindings } from \"./bindings/initializeBindings\";\nimport { config } from \"./config\";\nimport { convertMustacheToComments } from \"./mustache/convertMustacheToComments\";\nimport { collectStructuralFragments } from \"./structural/collectStructuralFragments\";\nimport { waitForStateInitialize } from \"./waitForStateInitialize\";\n\nexport async function buildBindings(root: Document | ShadowRoot): Promise<void> {\n if (root === document) {\n // document配下のwcs-stateの初期化(connectedCallbackの完了)を待機する\n await waitForStateInitialize(document);\n // baindingを取得して、初期値をセットする\n convertMustacheToComments(document);\n collectStructuralFragments(document, document);\n initializeBindings(document.body, null);\n } else {\n const shadowRoot = root as ShadowRoot;\n if (shadowRoot.host.hasAttribute(config.bindAttributeName)) {\n // data-wcsを持つWebComponentは、WebComponentのbindingが完了するまで待機する。\n await waitInitializeBinding(shadowRoot.host);\n }\n // shadowRoot配下のwcs-stateの初期化(connectedCallbackの完了)を待機する\n await waitForStateInitialize(shadowRoot);\n // baindingを取得して、初期値をセットする\n convertMustacheToComments(shadowRoot);\n collectStructuralFragments(shadowRoot, shadowRoot);\n initializeBindings(shadowRoot, null);\n }\n}\n","import { getAbsoluteStateAddressByBinding } from \"./binding/getAbsoluteStateAddressByBinding\";\nimport { addBindingByAbsoluteStateAddress } from \"./binding/getBindingSetByAbsoluteStateAddress\";\nimport { setLastListValueByAbsoluteStateAddress } from \"./list/lastListValueByAbsoluteStateAddress\";\nimport { parseBindTextsForElement } from \"./bindTextParser/parseBindTextsForElement\";\nimport { ParseBindTextResult } from \"./bindTextParser/types\";\nimport { collectNodesAndBindingInfos } from \"./bindings/collectNodesAndBindingInfos\";\nimport { setBindingsByContent } from \"./bindings/bindingsByContent\";\nimport { setIndexBindingsByContent } from \"./bindings/indexBindingsByContent\";\nimport { setNodesByContent } from \"./bindings/nodesByContent\";\nimport { bindLoopContextToContent } from \"./bindings/bindLoopContextToContent\";\nimport { config } from \"./config\";\nimport { WILDCARD, INDEX_BY_INDEX_NAME } from \"./define\";\nimport { Ssr, SSR_BLOCK_START } from \"./components/Ssr\";\nimport { getStateElementByName } from \"./stateElementByName\";\nimport { raiseError } from \"./raiseError\";\nimport { setLoopContextByNode } from \"./list/loopContextByNode\";\nimport { replaceToReplaceNode } from \"./bindings/replaceToReplaceNode\";\nimport { attachEventHandler } from \"./event/handler\";\nimport { attachEventTokenHandler } from \"./event/eventTokenHandler\";\nimport { attachTwowayEventHandler } from \"./event/twowayHandler\";\nimport { attachRadioEventHandler } from \"./event/radioHandler\";\nimport { attachCheckboxEventHandler } from \"./event/checkboxHandler\";\nimport { applyChangeFromBindings } from \"./apply/applyChangeFromBindings\";\nimport { hydrateSetContent, hydrateSetLastNode } from \"./apply/applyChangeToFor\";\nimport { waitForStateInitialize } from \"./waitForStateInitialize\";\nimport { setFragmentInfoByUUID, getFragmentInfoByUUID } from \"./structural/fragmentInfoByUUID\";\nimport { setContentByNode } from \"./structural/contentsByNode\";\nimport { createContentFromNodes } from \"./structural/createContent\";\nimport { collectStructuralFragments } from \"./structural/collectStructuralFragments\";\nimport { createNotFilter } from \"./structural/createNotFilter\";\nimport { getFragmentNodeInfos } from \"./structural/getFragmentNodeInfos\";\nimport { optimizeFragment } from \"./structural/optimizeFragment\";\nimport { expandShorthandPaths } from \"./structural/expandShorthandPaths\";\nimport { createListIndex } from \"./list/createListIndex\";\nimport { IListIndex } from \"./list/types\";\nimport { setListIndexesByList } from \"./list/listIndexesByList\";\nimport { getPathInfo } from \"./address/PathInfo\";\nimport { createStateAddress } from \"./address/StateAddress\";\nimport { IBindingInfo } from \"./types\";\nimport { VERSION } from \"./version\";\n\n// ハイドレーション時にスキップするバインディングタイプ\nconst STRUCTURAL_TYPES = new Set(['for', 'if', 'elseif', 'else']);\n\n\ninterface ISsrBlock {\n type: string; // for, if, elseif, else\n uuid: string;\n path: string;\n index: number | null; // for のみ\n nodes: Node[]; // start〜end 間のノード\n}\n\n/**\n * SSR ブロック境界コメントを走査して、start〜end 間のノードを収集する\n */\nfunction collectSsrBlocks(root: Node): ISsrBlock[] {\n const blocks: ISsrBlock[] = [];\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const startComments: Comment[] = [];\n\n // まず全コメントを収集\n while (walker.nextNode()) {\n startComments.push(walker.currentNode as Comment);\n }\n\n for (const comment of startComments) {\n const startMatch = SSR_BLOCK_START.exec(comment.data);\n if (!startMatch) continue;\n\n const type = startMatch[1];\n const info = startMatch[2]; // \"uuid:path:index\" or \"uuid:path\"\n const parts = info.split(':');\n\n let uuid: string;\n let path: string;\n let index: number | null = null;\n\n if (type === 'for') {\n // uuid:path:index\n uuid = parts[0];\n path = parts[1];\n index = parseInt(parts[2], 10);\n } else {\n // uuid:path\n uuid = parts[0];\n path = parts.slice(1).join(':');\n }\n\n // start と end の間のノードを収集\n const nodes: Node[] = [];\n let sibling = comment.nextSibling;\n const endPattern = `@@wcs-${type}-end:${info}`;\n while (sibling) {\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n break;\n }\n nodes.push(sibling);\n sibling = sibling.nextSibling;\n }\n\n blocks.push({ type, uuid, path, index, nodes });\n }\n\n return blocks;\n}\n\n/**\n * live DOM ノード群からバインディングを収集する。\n * ノードを一時的に DocumentFragment に移動して collectNodesAndBindingInfos を実行し、\n * 元の位置に戻す。\n */\nfunction collectBindingsFromLiveNodes(\n nodes: Node[],\n): { bindingInfos: IBindingInfo[], subscriberNodes: Node[] } {\n if (nodes.length === 0) return { bindingInfos: [], subscriberNodes: [] };\n\n // ノードの元の位置を記録\n const parent = nodes[0].parentNode;\n const nextSibling = nodes[nodes.length - 1].nextSibling;\n\n // 一時的に wrapper 要素に移動(collectNodesAndBindingInfos は Element を受け付ける)\n const wrapper = document.createElement('div');\n for (const node of nodes) {\n wrapper.appendChild(node);\n }\n\n // バインディング収集\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfos(wrapper);\n\n // _initializeBindings 相当の処理\n for (const binding of allBindings) {\n replaceToReplaceNode(binding);\n if (attachEventHandler(binding)) continue;\n if (attachEventTokenHandler(binding)) continue;\n attachTwowayEventHandler(binding);\n attachRadioEventHandler(binding);\n attachCheckboxEventHandler(binding);\n }\n\n // 元の位置に戻す\n if (parent) {\n while (wrapper.firstChild) {\n parent.insertBefore(wrapper.firstChild, nextSibling);\n }\n }\n\n return {\n bindingInfos: allBindings,\n subscriberNodes,\n };\n}\n\n/**\n * SSR ブロックの DOM ノードを Content 化し、バインディングを登録する。\n */\nfunction hydrateBlocks(root: Node, blocks: ISsrBlock[]): void {\n // for ブロックの listIndex を UUID ごとに収集\n const listIndexesByUuid: Map<string, IListIndex[]> = new Map();\n\n for (const block of blocks) {\n if (block.nodes.length === 0) continue;\n\n const content = createContentFromNodes(block.nodes);\n\n // Content のバインディングを収集\n const { bindingInfos, subscriberNodes } = collectBindingsFromLiveNodes(block.nodes);\n\n // Content 内のノードに data-wcs-completed を付与\n // (メインの collectNodesAndBindingInfos で重複登録されないようにする)\n for (const node of subscriberNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n (node as Element).setAttribute('data-wcs-completed', '');\n }\n }\n setBindingsByContent(content, bindingInfos);\n setNodesByContent(content, subscriberNodes);\n\n const indexBindings: IBindingInfo[] = [];\n for (const binding of bindingInfos) {\n if (binding.statePathName in INDEX_BY_INDEX_NAME) {\n indexBindings.push(binding);\n }\n }\n setIndexBindingsByContent(content, indexBindings);\n\n if (block.type === 'for' && block.index !== null) {\n const placeholderComment = findPlaceholderComment(root, 'for', block.uuid);\n if (placeholderComment) {\n const listIndex = createListIndex(null, block.index);\n hydrateSetContent(placeholderComment, listIndex, content);\n const lastNode = block.nodes[block.nodes.length - 1];\n hydrateSetLastNode(placeholderComment, lastNode);\n setContentByNode(placeholderComment, content);\n\n // ループコンテキストをバインドし、バインディングをアドレスに登録\n const pathInfo = getPathInfo(block.path + '.' + WILDCARD);\n const stateAddress = createStateAddress(pathInfo, listIndex);\n // ILoopContext は IStateAddress + listIndex なので、stateAddress をそのまま使う\n bindLoopContextToContent(content, stateAddress as any);\n\n for (const binding of bindingInfos) {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absAddr, binding);\n }\n\n // listIndex を UUID ごとに収集(後で setListIndexesByList に渡す)\n let indexes = listIndexesByUuid.get(block.uuid);\n if (!indexes) {\n indexes = [];\n listIndexesByUuid.set(block.uuid, indexes);\n }\n indexes.push(listIndex);\n }\n } else {\n const placeholderComment = findPlaceholderComment(root, block.type, block.uuid);\n if (placeholderComment) {\n setContentByNode(placeholderComment, content);\n\n // バインディングをアドレスに登録\n for (const binding of bindingInfos) {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absAddr, binding);\n }\n }\n }\n }\n\n // for ブロックの listIndex を state のリスト値に紐づける\n for (const [uuid, indexes] of listIndexesByUuid) {\n const placeholderComment = findPlaceholderComment(root, 'for', uuid);\n if (!placeholderComment) continue;\n // state から現在のリスト値を取得して listIndexes を設定\n const rootNode = placeholderComment.getRootNode() as Node;\n // structuralBindings はまだ登録前なので、getParseBindTextResults を直接使う\n const fragmentInfo = getFragmentInfoByUUID(uuid);\n if (!fragmentInfo) continue;\n const stateName = fragmentInfo.parseBindTextResult.stateName;\n const statePathName = fragmentInfo.parseBindTextResult.statePathName;\n const stateElement = getStateElementByName(rootNode, stateName);\n if (!stateElement) continue;\n stateElement.createState(\"readonly\", (state) => {\n const list = state[statePathName];\n if (Array.isArray(list)) {\n setListIndexesByList(list, indexes);\n }\n });\n }\n}\n\nfunction findPlaceholderComment(root: Node, type: string, uuid: string): Comment | null {\n const keywordMap: Record<string, string> = {\n 'for': config.commentForPrefix,\n 'if': config.commentIfPrefix,\n 'elseif': config.commentElseIfPrefix,\n 'else': config.commentElsePrefix,\n };\n const keyword = keywordMap[type];\n if (!keyword) return null;\n\n const pattern = `@@${keyword}:${uuid}`;\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (comment.data === pattern) {\n return comment;\n }\n }\n return null;\n}\n\n/**\n * <wcs-ssr> 内のテンプレートを fragmentInfoByUUID に復帰させる。\n */\nfunction restoreFragments(root: Document, ssrEl: Ssr): void {\n const rootNode = root as Node;\n let lastIfParseResult: ParseBindTextResult | null = null;\n\n for (const [uuid, tpl] of ssrEl.templates) {\n const bindText = tpl.getAttribute(config.bindAttributeName) || '';\n const parseBindTextResults = parseBindTextsForElement(bindText);\n let parseBindTextResult = parseBindTextResults[0];\n const bindingType = parseBindTextResult.bindingType;\n\n // else: 直前の if 条件の not → 条件反転\n // elseif: 独自条件を持つが stateName は if から引き継ぐ\n if (bindingType === 'else' && lastIfParseResult) {\n parseBindTextResult = {\n ...lastIfParseResult,\n outFilters: [...lastIfParseResult.outFilters, createNotFilter()],\n bindingType: 'else',\n };\n } else if (bindingType === 'elseif' && lastIfParseResult) {\n parseBindTextResult = {\n ...parseBindTextResult,\n stateName: lastIfParseResult.stateName,\n };\n }\n\n // if chain の追跡\n if (bindingType === 'if') {\n lastIfParseResult = parseBindTextResult;\n } else if (bindingType === 'elseif') {\n lastIfParseResult = parseBindTextResult;\n } else if (bindingType === 'else') {\n lastIfParseResult = null;\n }\n\n const fragment = document.importNode(tpl.content, true);\n const forPath = bindingType === \"for\" ? parseBindTextResult.statePathName : undefined;\n optimizeFragment(fragment);\n if (typeof forPath === \"string\") {\n expandShorthandPaths(fragment, forPath);\n }\n collectStructuralFragments(rootNode, fragment, forPath);\n\n const fragmentInfo = {\n fragment,\n parseBindTextResult,\n nodeInfos: getFragmentNodeInfos(fragment),\n };\n setFragmentInfoByUUID(uuid, rootNode, fragmentInfo);\n }\n}\n\n/**\n * SSR ハイドレーション用バインディング初期化。\n * バージョン不一致時は DOM をクリーンアップして false を返す\n * (呼び出し元で buildBindings にフォールバック)。\n */\nexport async function hydrateBindings(root: Document): Promise<boolean> {\n await waitForStateInitialize(root);\n\n // バージョン検証\n const ssrElements = root.querySelectorAll(config.tagNames.ssr);\n for (const ssrNode of ssrElements) {\n const ssrEl = ssrNode as Ssr;\n if (!ssrEl.verifyVersion()) {\n console.warn(\n `[@wcstack/state] SSR version mismatch: server=\"${ssrEl.version}\", client=\"${VERSION}\". Falling back to full render.`\n );\n Ssr.cleanupDom(root);\n return false;\n }\n }\n\n // <wcs-ssr> からテンプレートを fragmentInfoByUUID に復帰\n for (const ssrNode of ssrElements) {\n restoreFragments(root, ssrNode as Ssr);\n }\n\n // SSR ブロック境界コメントから既存 DOM を Content 化\n const blocks = collectSsrBlocks(document.body);\n hydrateBlocks(document.body, blocks);\n\n // ブロック境界コメント (start/end) を除去\n Ssr.removeBlockBoundaryComments(document.body);\n\n // <wcs-ssr> を一時除去(バインディング走査に含めない)\n const ssrParents: { el: Element, parent: Node, next: Node | null }[] = [];\n for (const el of ssrElements) {\n if (el.parentNode) {\n ssrParents.push({ el, parent: el.parentNode, next: el.nextSibling });\n el.remove();\n }\n }\n\n // 構造プレースホルダーコメント (@@wcs-for:uuid 等) は残す\n // → バインディング走査で拾われ、状態変化時の再レンダリングに使われる\n\n // SSR テキストバインディングを @@: 形式に復元\n Ssr.restoreTextBindings(document.body);\n\n // ノードとバインディングを収集\n const [subscriberNodes, allBindings] = collectNodesAndBindingInfos(document.body);\n\n // 収集完了したノードに data-wcs-completed 属性を付与\n // for ブロック内ノード(hydrateBlocks で登録済み)にはループコンテキストをリセットしない\n for (const node of subscriberNodes) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n if (!el.hasAttribute('data-wcs-completed')) {\n setLoopContextByNode(node, null);\n el.setAttribute('data-wcs-completed', '');\n }\n } else {\n // コメントノード等\n setLoopContextByNode(node, null);\n }\n }\n\n // バインディングを構造系とそれ以外に分離\n const normalBindings: IBindingInfo[] = [];\n const structuralBindings: IBindingInfo[] = [];\n\n for (const binding of allBindings) {\n replaceToReplaceNode(binding);\n if (attachEventHandler(binding)) {\n continue;\n }\n if (attachEventTokenHandler(binding)) {\n continue;\n }\n attachTwowayEventHandler(binding);\n attachRadioEventHandler(binding);\n attachCheckboxEventHandler(binding);\n\n if (STRUCTURAL_TYPES.has(binding.bindingType)) {\n structuralBindings.push(binding);\n } else if (binding.statePathName.includes(WILDCARD)) {\n // for ブロック内のバインディング → Content のバインディングとして登録済み\n continue;\n } else {\n normalBindings.push(binding);\n }\n }\n\n // 全バインディング(通常 + 構造)をアドレスに登録\n for (const binding of [...normalBindings, ...structuralBindings]) {\n const absoluteStateAddress = getAbsoluteStateAddressByBinding(binding);\n addBindingByAbsoluteStateAddress(absoluteStateAddress, binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${binding.stateName}\" not found for binding.`);\n }\n if (binding.bindingType !== 'event') {\n stateElement.setPathInfo(binding.statePathName, binding.bindingType);\n }\n }\n\n // for バインディングの lastListValue を初期値として設定\n // (次回の状態変化時に差分計算の基準になる)\n for (const binding of structuralBindings) {\n if (binding.bindingType === 'for') {\n const absAddr = getAbsoluteStateAddressByBinding(binding);\n const rootNode = binding.replaceNode.getRootNode() as Node;\n const stateElement = getStateElementByName(rootNode, binding.stateName);\n if (stateElement) {\n stateElement.createState(\"readonly\", (state) => {\n const value = state[binding.statePathName];\n if (Array.isArray(value)) {\n setLastListValueByAbsoluteStateAddress(absAddr, value);\n }\n });\n }\n }\n }\n\n // 通常バインディングのみ初回値適用(構造バインディングはSSR描画済み)\n applyChangeFromBindings(normalBindings);\n\n // <wcs-ssr> を元に戻す\n for (const { el, parent, next } of ssrParents) {\n parent.insertBefore(el, next);\n }\n\n // hydrateProps 復元\n const restoredSsrElements = root.querySelectorAll(config.tagNames.ssr);\n for (const ssrNode of restoredSsrElements) {\n const ssrEl = ssrNode as Ssr;\n const props = ssrEl.hydrateProps;\n for (const [id, propMap] of Object.entries(props)) {\n const target = root.querySelector(`[data-wcs-ssr-id=\"${id}\"]`);\n if (!target) continue;\n for (const [propName, value] of Object.entries(propMap)) {\n (target as any)[propName] = value;\n }\n }\n }\n\n // ハイドレーション中の重複登録防止用属性を除去\n const completedEls = root.querySelectorAll('[data-wcs-completed]');\n for (const el of completedEls) {\n el.removeAttribute('data-wcs-completed');\n }\n\n return true;\n}\n\n/** @internal テスト用 */\nexport const __test = {\n collectSsrBlocks,\n collectBindingsFromLiveNodes,\n hydrateBlocks,\n findPlaceholderComment,\n restoreFragments,\n};\n","import { buildBindings } from \"./buildBindings\";\nimport { hydrateBindings } from \"./hydrateBindings\";\nimport { IStateElement } from \"./components/types\";\nimport { config, inSsr } from \"./config\";\nimport { raiseError } from \"./raiseError\";\n\nconst stateElementByNameByNode: WeakMap<Node, Map<string, IStateElement>> = new WeakMap();\nconst bindingsReadyByNode: WeakMap<Node, Promise<void>> = new WeakMap();\n\nexport function getStateElementByName(rootNode:Node, name: string): IStateElement | null {\n let stateElementByName = stateElementByNameByNode.get(rootNode);\n if (!stateElementByName) {\n return null;\n }\n return stateElementByName.get(name) || null;\n}\n\n/**\n * 指定された rootNode のバインディング初期化が完了するまで待機する Promise を返す。\n */\nexport function getBindingsReady(rootNode: Node): Promise<void> {\n return bindingsReadyByNode.get(rootNode) ?? Promise.resolve();\n}\n\nexport function setStateElementByName(rootNode:Node, name: string, element: IStateElement | null): void {\n\n let stateElementByName = stateElementByNameByNode.get(rootNode);\n\n if (element === null) {\n // 削除の場合、Mapが存在しない場合は何もしない\n if (!stateElementByName) {\n return;\n }\n stateElementByName.delete(name);\n if (stateElementByName.size === 0) {\n stateElementByNameByNode.delete(rootNode);\n }\n if (config.debug) {\n console.debug(`State element unregistered: name=\"${name}\"`);\n }\n } else {\n // 登録の場合\n if (!stateElementByName) {\n stateElementByName = new Map<string, IStateElement>();\n stateElementByNameByNode.set(rootNode, stateElementByName);\n // 初めてルートノードに登録する場合\n // enable-ssr 属性があり、サーバーサイドでない場合はハイドレーション\n const enableSsr = !inSsr() && (element as unknown as Element).hasAttribute?.('enable-ssr');\n if (rootNode.constructor.name === 'HTMLDocument' || rootNode.constructor.name === 'Document') {\n const ready = new Promise<void>((resolve) => {\n queueMicrotask(async () => {\n if (enableSsr) {\n const success = await hydrateBindings(rootNode as Document);\n if (!success) {\n await buildBindings(rootNode as Document);\n }\n } else {\n await buildBindings(rootNode as Document);\n }\n resolve();\n });\n });\n bindingsReadyByNode.set(rootNode, ready);\n } else if (rootNode.constructor.name === 'ShadowRoot') {\n const ready = new Promise<void>((resolve) => {\n queueMicrotask(async () => {\n await buildBindings(rootNode as ShadowRoot);\n resolve();\n });\n });\n bindingsReadyByNode.set(rootNode, ready);\n }\n }\n if (stateElementByName.has(name)) {\n raiseError(`State element with name \"${name}\" is already registered.`);\n }\n stateElementByName.set(name, element);\n if (config.debug) {\n console.debug(`State element registered: name=\"${name}\"`, element);\n }\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IFragmentInfo } from \"./types\";\n\nconst fragmentInfoByUUID = new Map<string, IFragmentInfo>();\n\nexport function setFragmentInfoByUUID(uuid: string, rootNode: Node, fragmentInfo: IFragmentInfo | null): void {\n if (fragmentInfo === null) {\n fragmentInfoByUUID.delete(uuid);\n } else {\n fragmentInfoByUUID.set(uuid, fragmentInfo);\n const bindingPartial = fragmentInfo.parseBindTextResult;\n const stateElement = getStateElementByName(rootNode, bindingPartial.stateName);\n if (stateElement === null) {\n raiseError(`State element with name \"${bindingPartial.stateName}\" not found for fragment info.`);\n }\n stateElement.setPathInfo(bindingPartial.statePathName, bindingPartial.bindingType);\n for(const nodeInfo of fragmentInfo.nodeInfos) {\n for(const nodeBindingPartial of nodeInfo.parseBindTextResults) {\n const nodeStateElement = getStateElementByName(rootNode, nodeBindingPartial.stateName);\n if (nodeStateElement === null) {\n raiseError(`State element with name \"${nodeBindingPartial.stateName}\" not found for fragment info node.`);\n }\n nodeStateElement.setPathInfo(nodeBindingPartial.statePathName, nodeBindingPartial.bindingType);\n }\n }\n }\n}\n\nexport function getFragmentInfoByUUID(uuid: string): IFragmentInfo | null {\n return fragmentInfoByUUID.get(uuid) || null;\n}\n\nexport function getAllFragmentUUIDs(): string[] {\n return Array.from(fragmentInfoByUUID.keys());\n}","import { config } from \"../config\";\nimport { IState } from \"../types\";\nimport { VERSION } from \"../version\";\nimport { getAllFragmentUUIDs, getFragmentInfoByUUID } from \"../structural/fragmentInfoByUUID\";\nimport { getAllSsrPropertyNodes, getSsrProperties, clearSsrPropertyStore } from \"../apply/ssrPropertyStore\";\n\nexport interface ISsrElement {\n readonly name: string;\n readonly version: string;\n readonly stateData: IState;\n readonly templates: Map<string, HTMLTemplateElement>;\n readonly hydrateProps: Record<string, Record<string, unknown>>;\n getTemplate(uuid: string): HTMLTemplateElement | null;\n verifyVersion(): boolean;\n}\n\n// SSR コメントパターン\nconst SSR_PLACEHOLDER_COMMENT = /^@@wcs-(?:for|if|elseif|else):[^-]/;\nconst SSR_BLOCK_START = /^@@wcs-(for|if|elseif|else)-start:(.+)$/;\nconst SSR_BLOCK_END = /^@@wcs-(for|if|elseif|else)-end:(.+)$/;\nconst SSR_TEXT_START = /^@@wcs-text-start:(.+)$/;\n\nexport {\n SSR_PLACEHOLDER_COMMENT,\n SSR_BLOCK_START,\n SSR_BLOCK_END,\n SSR_TEXT_START,\n};\n\n/**\n * script 要素へ埋め込む JSON を HTML パーサから保護する。\n * HTML 直列化時、script の中身は生のまま出力されるため、state 値に\n * \"</script>\" や \"<!--\" を含む文字列があると script を脱出できてしまう。\n * \"<\" \">\" \"&\" と U+2028/U+2029 を JSON の \\uXXXX エスケープへ置換する\n * (JSON.parse では元の文字列と等価に復元される)。\n */\nfunction escapeJsonForScript(json: string): string {\n return json\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nexport class Ssr extends HTMLElement implements ISsrElement {\n private _stateData: IState | null = null;\n private _templates: Map<string, HTMLTemplateElement> | null = null;\n private _hydrateProps: Record<string, Record<string, unknown>> | null = null;\n\n get name(): string {\n return this.getAttribute('name') || 'default';\n }\n\n get version(): string {\n return this.getAttribute('version') || '';\n }\n\n get stateData(): IState {\n if (this._stateData === null) {\n this._stateData = this._loadStateData();\n }\n return this._stateData;\n }\n\n get templates(): Map<string, HTMLTemplateElement> {\n if (this._templates === null) {\n this._templates = this._loadTemplates();\n }\n return this._templates;\n }\n\n get hydrateProps(): Record<string, Record<string, unknown>> {\n if (this._hydrateProps === null) {\n this._hydrateProps = this._loadHydrateProps();\n }\n return this._hydrateProps;\n }\n\n getTemplate(uuid: string): HTMLTemplateElement | null {\n return this.templates.get(uuid) ?? null;\n }\n\n /**\n * サーバーの SSR バージョンとクライアントの state バージョンを検証する。\n * メジャー・マイナーバージョンが一致すればtrue。\n * version 属性がない場合は検証スキップ(true)。\n */\n verifyVersion(): boolean {\n const serverVersion = this.version;\n if (!serverVersion) return true;\n const serverParts = serverVersion.split('.');\n const clientParts = VERSION.split('.');\n // メジャー・マイナーが一致すれば互換\n return serverParts[0] === clientParts[0] && serverParts[1] === clientParts[1];\n }\n\n setStateData(data: IState): void {\n this._stateData = data;\n }\n\n setHydrateProps(props: Record<string, Record<string, unknown>>): void {\n this._hydrateProps = props;\n }\n\n private _loadStateData(): IState {\n const script = this.querySelector(\n `script[type=\"application/json\"]:not([data-wcs-ssr-props])`\n );\n if (!script) return {};\n try {\n return JSON.parse(script.textContent || '{}');\n } catch {\n return {};\n }\n }\n\n private _loadTemplates(): Map<string, HTMLTemplateElement> {\n const map = new Map<string, HTMLTemplateElement>();\n const templates = this.querySelectorAll<HTMLTemplateElement>('template[id]');\n for (const tpl of templates) {\n const id = tpl.getAttribute('id');\n if (id) {\n map.set(id, tpl);\n }\n }\n return map;\n }\n\n private _loadHydrateProps(): Record<string, Record<string, unknown>> {\n const script = this.querySelector('script[data-wcs-ssr-props]');\n if (!script) return {};\n try {\n return JSON.parse(script.textContent || '{}');\n } catch {\n return {};\n }\n }\n\n static findByName(root: Node, name: string): ISsrElement | null {\n const tagName = config.tagNames.ssr;\n const parentEl = root instanceof Element\n ? root\n : root instanceof Document\n ? root.documentElement\n : null;\n if (!parentEl) return null;\n const el = parentEl.querySelector(`${tagName}[name=\"${name}\"]`);\n return el as ISsrElement | null;\n }\n\n /**\n * stateData と構造テンプレート・プロパティから <wcs-ssr> の中身を構築する。\n * server パッケージの renderToString から呼ばれる。\n */\n /**\n * wcs-state 要素から $ プレフィックスや関数を除いたデータを抽出する。\n */\n static extractStateData(stateEl: Element): Record<string, any> {\n const raw = (stateEl as any).__state;\n if (!raw || typeof raw !== 'object') return {};\n const data: Record<string, any> = {};\n for (const [key, value] of Object.entries(raw)) {\n if (!key.startsWith('$') && typeof value !== 'function') {\n data[key] = value;\n }\n }\n return data;\n }\n\n static buildContent(ssrEl: Element, stateData: Record<string, any>): void {\n // 初期データ JSON\n const jsonScript = document.createElement('script');\n jsonScript.setAttribute('type', 'application/json');\n jsonScript.textContent = escapeJsonForScript(JSON.stringify(stateData));\n ssrEl.appendChild(jsonScript);\n\n // UUID で管理されているテンプレートを復元して格納\n const uuids = getAllFragmentUUIDs();\n for (const uuid of uuids) {\n const fragmentInfo = getFragmentInfoByUUID(uuid);\n if (!fragmentInfo) continue;\n\n const tpl = document.createElement('template');\n tpl.setAttribute('id', uuid);\n\n const bindResult = fragmentInfo.parseBindTextResult;\n const bindText = bindResult.bindingType === 'else'\n ? 'else:'\n : `${bindResult.bindingType}: ${bindResult.statePathName}`;\n tpl.setAttribute(config.bindAttributeName, bindText);\n\n const content = fragmentInfo.fragment.cloneNode(true) as DocumentFragment;\n tpl.content.appendChild(content);\n\n ssrEl.appendChild(tpl);\n }\n\n // 属性で代替不可なプロパティをハイドレーション用に格納\n const ssrNodes = getAllSsrPropertyNodes();\n if (ssrNodes.length > 0) {\n const propsData: Record<string, Record<string, unknown>> = {};\n for (let i = 0; i < ssrNodes.length; i++) {\n const node = ssrNodes[i];\n const entries = getSsrProperties(node);\n if (entries.length === 0) continue;\n const id = `wcs-ssr-${i}`;\n (node as Element).setAttribute('data-wcs-ssr-id', id);\n const props: Record<string, unknown> = {};\n for (const entry of entries) {\n props[entry.propName] = entry.value;\n }\n propsData[id] = props;\n }\n if (Object.keys(propsData).length > 0) {\n const propsScript = document.createElement('script');\n propsScript.setAttribute('type', 'application/json');\n propsScript.setAttribute('data-wcs-ssr-props', '');\n propsScript.textContent = escapeJsonForScript(JSON.stringify(propsData));\n ssrEl.appendChild(propsScript);\n }\n }\n\n clearSsrPropertyStore();\n }\n\n /**\n * SSR ブロック境界コメント (@@wcs-*-start/end) を除去する\n */\n static removeBlockBoundaryComments(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const toRemove: Comment[] = [];\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (SSR_BLOCK_START.test(comment.data) || SSR_BLOCK_END.test(comment.data)) {\n toRemove.push(comment);\n }\n }\n for (const comment of toRemove) {\n comment.remove();\n }\n }\n\n /**\n * SSR の構造プレースホルダーコメント (@@wcs-for:uuid 等) を除去する\n */\n static removeStructuralComments(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const toRemove: Comment[] = [];\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n if (SSR_PLACEHOLDER_COMMENT.test(comment.data)) {\n toRemove.push(comment);\n }\n }\n for (const comment of toRemove) {\n comment.remove();\n }\n }\n\n /**\n * SSR テキストバインディングコメントを復元する。\n * <!--@@wcs-text-start:path-->text<!--@@wcs-text-end:path-->\n * → <!--@@: path--> (バインディングシステムが認識する形式)\n */\n static restoreTextBindings(root: Node): void {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);\n const startComments: { comment: Comment, path: string }[] = [];\n\n while (walker.nextNode()) {\n const comment = walker.currentNode as Comment;\n const match = SSR_TEXT_START.exec(comment.data);\n if (match) {\n startComments.push({ comment, path: match[1] });\n }\n }\n\n for (const { comment, path } of startComments) {\n const bindComment = document.createComment(`@@: ${path}`);\n comment.parentNode!.insertBefore(bindComment, comment);\n\n let sibling: Node | null = comment.nextSibling;\n comment.remove();\n\n const endPattern = `@@wcs-text-end:${path}`;\n while (sibling) {\n const next: Node | null = sibling.nextSibling;\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n sibling.parentNode!.removeChild(sibling);\n break;\n }\n sibling.parentNode!.removeChild(sibling);\n sibling = next;\n }\n }\n }\n\n /**\n * SSR DOM をクリーンアップし、buildBindings が動作できる状態に戻す。\n * バージョン不一致時のフォールバック用。\n *\n * 1. SSR ブロック境界コメント間のレンダリング済みノードを除去\n * 2. SSR テキストバインディングを @@: 形式に復元\n * 3. プレースホルダーコメントを <wcs-ssr> 内のテンプレートで差し替え\n * 4. data-wcs-ssr-id 属性を除去\n * 5. <wcs-ssr> を除去\n */\n static cleanupDom(root: Document): void {\n const body = document.body;\n\n // <wcs-ssr> からテンプレート UUID マップを構築(カスタム要素未定義でも動作するよう DOM 直接走査)\n const ssrElements = root.querySelectorAll(config.tagNames.ssr);\n const templateByUuid = new Map<string, HTMLTemplateElement>();\n for (const ssrNode of ssrElements) {\n const templates = ssrNode.querySelectorAll<HTMLTemplateElement>('template[id]');\n for (const tpl of templates) {\n const id = tpl.getAttribute('id');\n if (id) {\n templateByUuid.set(id, tpl);\n }\n }\n }\n\n // SSR ブロック境界コメント間のレンダリング済みノードと境界コメントを除去\n const walker1 = document.createTreeWalker(body, NodeFilter.SHOW_COMMENT);\n const startComments: Comment[] = [];\n while (walker1.nextNode()) {\n const comment = walker1.currentNode as Comment;\n if (SSR_BLOCK_START.test(comment.data)) {\n startComments.push(comment);\n }\n }\n for (const startComment of startComments) {\n const match = SSR_BLOCK_START.exec(startComment.data)!;\n const type = match[1];\n const info = match[2];\n const endPattern = `@@wcs-${type}-end:${info}`;\n let sibling = startComment.nextSibling;\n while (sibling) {\n const next = sibling.nextSibling;\n if (sibling.nodeType === Node.COMMENT_NODE && (sibling as Comment).data === endPattern) {\n sibling.remove();\n break;\n }\n sibling.remove();\n sibling = next;\n }\n startComment.remove();\n }\n\n // SSR テキストバインディングを @@: 形式に復元\n Ssr.restoreTextBindings(body);\n\n // プレースホルダーコメント (@@wcs-for:uuid 等) をテンプレートに差し替え\n const walker2 = document.createTreeWalker(body, NodeFilter.SHOW_COMMENT);\n const placeholders: { comment: Comment, uuid: string }[] = [];\n while (walker2.nextNode()) {\n const comment = walker2.currentNode as Comment;\n if (SSR_PLACEHOLDER_COMMENT.test(comment.data)) {\n const uuid = comment.data.split(':')[1];\n placeholders.push({ comment, uuid });\n }\n }\n for (const { comment, uuid } of placeholders) {\n const tpl = templateByUuid.get(uuid);\n if (tpl) {\n const restored = document.createElement('template') as HTMLTemplateElement;\n const bindAttr = tpl.getAttribute(config.bindAttributeName);\n if (bindAttr) restored.setAttribute(config.bindAttributeName, bindAttr);\n const imported = document.importNode(tpl.content, true);\n if (imported.childNodes.length > 0) {\n restored.content.appendChild(imported);\n } else {\n for (const child of Array.from(tpl.childNodes)) {\n restored.content.appendChild(document.importNode(child, true));\n }\n }\n comment.parentNode!.replaceChild(restored, comment);\n }\n }\n\n // data-wcs-ssr-id 属性を除去\n const ssrIdElements = root.querySelectorAll('[data-wcs-ssr-id]');\n for (const el of ssrIdElements) {\n el.removeAttribute('data-wcs-ssr-id');\n }\n\n // <wcs-ssr> を除去\n for (const el of ssrElements) {\n el.remove();\n }\n }\n}\n","import { IState } from \"../types\";\n\ntype ScriptModule = { default?: unknown };\n\nexport async function loadFromInnerScript(script: HTMLScriptElement, name: string): Promise<IState> {\n let scriptModule: ScriptModule | null = null;\n const uniq_comment = `\\n//# sourceURL=${name}\\n`;\n if (typeof URL.createObjectURL === 'function') {\n // Create a blob URL for the script and dynamically import it\n const blob = new Blob([script.text + uniq_comment], { type: \"application/javascript\" });\n const url = URL.createObjectURL(blob);\n try {\n scriptModule = await import(url) as ScriptModule;\n } finally {\n // Clean up blob URL to prevent memory leak\n URL.revokeObjectURL(url);\n }\n } else {\n // Fallback: Base64 encoding method (for test environment)\n // Convert script to Base64 and import via data: URL\n const b64 = btoa(String.fromCodePoint(...new TextEncoder().encode(script.text + uniq_comment)));\n scriptModule = await import(`data:application/javascript;base64,${b64}`) as ScriptModule;\n }\n return (scriptModule && typeof scriptModule.default === 'object') ? scriptModule.default as IState : {};\n}\n","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport async function loadFromJsonFile(url: string): Promise<IState> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n raiseError(`Failed to fetch JSON file: ${response.statusText}`);\n }\n const data = await response.json();\n return data;\n } catch (e) {\n console.error('Failed to load JSON file:', e);\n return {};\n }\n}","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport async function loadFromScriptFile(url: string): Promise<IState> {\n try {\n const module = await import(/* @vite-ignore */ url);\n return module.default || {};\n } catch (e) {\n raiseError(`Failed to load script file: ${e}`);\n }\n}\n","import { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\n\nexport function loadFromScriptJson(id: string): IState {\n const script = document.getElementById(id) as HTMLScriptElement;\n if (script && script.type === 'application/json') {\n try {\n const data = JSON.parse(script.textContent || '{}');\n return data;\n } catch (e) {\n raiseError('Failed to parse JSON from script element:' + e);\n }\n }\n return {};\n}","import { IStateAddress } from \"../address/types\";\nimport { MAX_LOOP_DEPTH } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { ILoopContext, ILoopContextStack } from \"./types\";\n\ntype LoopContextCallback<T> = (loopContext: ILoopContext) => T | Promise<T>;\n\nclass LoopContextStack {\n private _loopContextStack: (ILoopContext | undefined)[] = Array(MAX_LOOP_DEPTH).fill(undefined);\n private _length: number = 0;\n\n createLoopContext(\n elementStateAddress: IStateAddress,\n callback: LoopContextCallback<void>\n ): void | Promise<void> {\n if (elementStateAddress.listIndex === null) {\n raiseError(`Cannot create loop context for a state address that does not have a list index.`);\n }\n const loopContext = elementStateAddress as ILoopContext;\n if (this._length >= MAX_LOOP_DEPTH) {\n raiseError(`Exceeded maximum loop context stack depth of ${MAX_LOOP_DEPTH}. Possible infinite loop.`);\n }\n const lastLoopContext = this._loopContextStack[this._length - 1];\n if (typeof lastLoopContext !== \"undefined\" ) {\n if (lastLoopContext.pathInfo.wildcardCount + 1 !== loopContext.pathInfo.wildcardCount) {\n raiseError(`Cannot push loop context for a list whose wildcard count is not exactly one more than the current active loop context.`);\n }\n // \n const prevWildcardPathInfo = loopContext.pathInfo.wildcardPathInfos[loopContext.pathInfo.wildcardPathInfos.length - 2];\n if (lastLoopContext.pathInfo !== prevWildcardPathInfo) {\n raiseError(`Cannot push loop context for a list whose parent wildcard path info does not match the current active loop context.`);\n }\n } else {\n // With no active loop context the address must be self-contained: the\n // listIndex chain supplies one index per wildcard. Top-level lists\n // (wildcardCount 1) always satisfy this. A nested list re-rendered\n // directly (e.g. replaced via $resolve from outside the loop) also\n // satisfies it — the for binding's listIndex carries the full ancestor\n // chain.\n if (loopContext.listIndex.length !== loopContext.pathInfo.wildcardCount) {\n raiseError(`Cannot push loop context when there is no active loop context: the list index chain (length ${loopContext.listIndex.length}) does not cover the wildcard path (wildcard count ${loopContext.pathInfo.wildcardCount}).`);\n }\n }\n this._loopContextStack[this._length] = loopContext;\n this._length++;\n let retValue : void | Promise<void> = void 0;\n try {\n retValue = callback(loopContext);\n } finally {\n if (retValue instanceof Promise) {\n retValue.finally(() => {\n this._length--;\n this._loopContextStack[this._length] = undefined;\n });\n } else {\n this._length--;\n this._loopContextStack[this._length] = undefined;\n }\n }\n return retValue;\n } \n}\n\nexport function createLoopContextStack(): ILoopContextStack {\n return new LoopContextStack();\n}\n\n","/**\n * `$commandTokens: [\"a\", \"b\", ...]` 配列宣言を解析し、宣言された名前群を Set で返す。\n *\n * 注入は行わず、proxy 側で `state.$command.<name>` として token を解決する設計。\n * (以前の実装は state 直下に各名前の getter を注入していたが、リアクティブ値との\n * 名前空間衝突を避け識別性を上げるため `$command` ネームスペース集約に切り替え。)\n *\n * 対応している宣言形式は **オブジェクトリテラル** のみ。\n * クラス本体に `static $commandTokens = [...]` を書く形式や、\n * クラスのプロトタイプ上の同名コマンドの検出は現状サポートしない。\n */\n\nimport { STATE_COMMAND_NAMESPACE_NAME, STATE_COMMAND_TOKENS_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport function processCommandTokensDeclaration(state: IState): Set<string> {\n const names = new Set<string>();\n const declared = (state as Record<string, unknown>)[STATE_COMMAND_TOKENS_NAME];\n if (typeof declared === \"undefined\") {\n return names;\n }\n if (!Array.isArray(declared)) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} must be an array of strings.`);\n }\n for (const name of declared) {\n if (typeof name !== \"string\" || name.length === 0) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entries must be non-empty strings.`);\n }\n if (name === STATE_COMMAND_NAMESPACE_NAME) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entry \"${name}\" conflicts with the reserved namespace name \"${STATE_COMMAND_NAMESPACE_NAME}\".`);\n }\n if (names.has(name)) {\n raiseError(`${STATE_COMMAND_TOKENS_NAME} entry \"${name}\" is duplicated.`);\n }\n names.add(name);\n }\n return names;\n}\n","import { IStateElement } from \"../components/types\";\nimport { CommandToken } from \"./CommandToken\";\nimport { ICommandToken } from \"./types\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, ICommandToken>> = new WeakMap();\n\nexport function getOrCreateCommandToken(stateElement: IStateElement, name: string): ICommandToken {\n let registry = registryByStateElement.get(stateElement);\n if (typeof registry === \"undefined\") {\n registry = new Map<string, ICommandToken>();\n registryByStateElement.set(stateElement, registry);\n }\n let token = registry.get(name);\n if (typeof token === \"undefined\") {\n token = new CommandToken(name);\n registry.set(name, token);\n }\n return token;\n}\n\nexport function clearCommandTokenRegistry(stateElement: IStateElement): void {\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * `state.$command` でアクセスされる command token の namespace proxy を提供する。\n *\n * - state element 単位で memo 化し、同一 stateElement なら同じ proxy が返る。\n * - 宣言された名前 (`$commandTokens` に列挙されたもの) のみ token を返す。\n * 宣言外の名前にアクセスした場合は undefined を返す。\n * (`constructor` / `Symbol.toPrimitive` / `then` など内部システムが触るキーで\n * 例外を投げないため。typo は subsequent な `.emit()` 呼び出しで TypeError として\n * 間接的に表面化する。)\n * - token そのものの memo は `getOrCreateCommandToken` 側に集約されており、\n * namespace proxy は薄いゲートウェイとして振る舞う。\n */\n\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getOrCreateCommandToken } from \"./commandTokenRegistry\";\nimport { ICommandToken } from \"./types\";\n\nconst namespaceProxyByStateElement: WeakMap<IStateElement, object> = new WeakMap();\n\nexport function getCommandNamespace(stateElement: IStateElement): object {\n const cached = namespaceProxyByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = new Proxy(Object.create(null), {\n get(_target: object, prop: PropertyKey): ICommandToken | undefined {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n if (!stateElement.commandTokenNames.has(prop)) {\n return undefined;\n }\n return getOrCreateCommandToken(stateElement, prop);\n },\n has(_target: object, prop: PropertyKey): boolean {\n return typeof prop === \"string\" && stateElement.commandTokenNames.has(prop);\n },\n ownKeys(): string[] {\n return Array.from(stateElement.commandTokenNames);\n },\n getOwnPropertyDescriptor(_target: object, prop: PropertyKey): PropertyDescriptor | undefined {\n if (typeof prop === \"string\" && stateElement.commandTokenNames.has(prop)) {\n return {\n configurable: true,\n enumerable: true,\n value: getOrCreateCommandToken(stateElement, prop),\n };\n }\n return undefined;\n },\n set(): boolean {\n raiseError(`$command namespace is read-only; assigning to it is not allowed.`);\n },\n deleteProperty(): boolean {\n raiseError(`$command namespace is read-only; deleting from it is not allowed.`);\n },\n });\n namespaceProxyByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\nexport function clearCommandNamespace(stateElement: IStateElement): void {\n namespaceProxyByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n namespaceProxyByStateElement,\n};\n","/**\n * `$eventTokens: [\"a\", \"b\", ...]` 配列宣言を解析し、宣言された名前群を Set で返す。\n *\n * event-token は command-token の双対(element→state 方向)。要素が dispatch する\n * イベントを `eventToken.<prop>: <name>` で token に流し、state 側は `$on` マップで受ける。\n * ここで宣言された名前のみが `eventToken.X` / `$on` の有効なチャネル名になる(typo 耐性)。\n *\n * 対応している宣言形式は **オブジェクトリテラル** のみ。\n */\n\nimport { STATE_EVENT_TOKENS_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\n\nexport function processEventTokensDeclaration(state: IState): Set<string> {\n const names = new Set<string>();\n const declared = (state as Record<string, unknown>)[STATE_EVENT_TOKENS_NAME];\n if (typeof declared === \"undefined\") {\n return names;\n }\n if (!Array.isArray(declared)) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} must be an array of strings.`);\n }\n for (const name of declared) {\n if (typeof name !== \"string\" || name.length === 0) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} entries must be non-empty strings.`);\n }\n if (names.has(name)) {\n raiseError(`${STATE_EVENT_TOKENS_NAME} entry \"${name}\" is duplicated.`);\n }\n names.add(name);\n }\n return names;\n}\n","/**\n * `$on: { <name>: (state, event, ...listIndexes) => {...} }` マップを解析し、\n * 各ハンドラを対応する event-token に subscribe する(state 側の受信配線)。\n *\n * - `$on` のキーは `$eventTokens` で宣言済みでなければならない(typo 耐性)。\n * - 各値は関数でなければならない。\n * - 引数規約は `(state, event, ...listIndexes)`。`this` 束縛は行わず引数で state を渡すため\n * アロー関数で書ける(command-token の emit 規約と対称)。\n *\n * `$eventTokens` で宣言されたが `$on` に対応が無い token は subscriber ゼロ(emit は no-op)。\n */\n\nimport { IStateElement } from \"../components/types\";\nimport { STATE_ON_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { IState } from \"../types\";\nimport { TokenSubscriber } from \"../token/Token\";\nimport { getOrCreateEventToken } from \"./eventTokenRegistry\";\n\nexport function processOnDeclaration(\n stateElement: IStateElement,\n state: IState,\n eventTokenNames: ReadonlySet<string>,\n): void {\n const declared = (state as Record<string, unknown>)[STATE_ON_NAME];\n if (typeof declared === \"undefined\") {\n return;\n }\n if (typeof declared !== \"object\" || declared === null) {\n raiseError(`${STATE_ON_NAME} must be an object mapping event-token names to handler functions.`);\n }\n for (const [name, handler] of Object.entries(declared as Record<string, unknown>)) {\n if (!eventTokenNames.has(name)) {\n raiseError(`${STATE_ON_NAME} entry \"${name}\" is not declared in $eventTokens.`);\n }\n if (typeof handler !== \"function\") {\n raiseError(`${STATE_ON_NAME} entry \"${name}\" must be a function.`);\n }\n const token = getOrCreateEventToken(stateElement, name);\n token.subscribe(handler as TokenSubscriber);\n }\n}\n","/**\n * stream/lastNotified.ts\n *\n * 「最後に通知した観測値」台帳 — DOM binding / $updatedCallback(観測層)が\n * 最後に見た status・error(docs/state-streams-design.md §4-3)。\n *\n * 通知の same-value 判定を entry フィールドとの比較で行うと、再 set\n * (clearStreamRegistry → 新 entry 生成)を跨いだ陳腐化を検出できない\n * (error 表示中に再 set すると新 entry は error=null で生まれるため\n * null → null と誤判定して $postUpdate が落ち、DOM に旧 error が残る)。\n * そのため通知 dedup は entry の寿命ではなく stateElement の寿命で持つ\n * (ただし再 set で新宣言から消えた名前のエントリは pruneLastNotified で削除する —\n * 同名にしか dedup は要らず、放置すると台帳が単調増加するため)。\n * 未通知(初回)の基準値は宣言直後の観測初期値と同じ { idle, null }。\n *\n * さらに abortAllStreams(§5-1)は registry entry を通知なしで idle / null に\n * 直接ミューテーションするため、観測層が「台帳の値」と「idle / null」の\n * どちらを見たか確定できなくなる(binding / computed の fresh 読みは通知が\n * なくても他パスの drain で走る)。その乖離フィールドは invalidateLastNotified\n * で UNCERTAIN に無効化し、次回 updateStreamStatus の同値判定が必ず\n * 「変化あり」になるようにする(再接続ウィンドウ内の idle 描画が恒久陳腐化\n * しないための不変条件、§4-3)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport type { StreamStatus } from \"./types\";\n\n/**\n * 無通知ミューテーション後の「観測値が確定できない」印。\n * どの実値とも一致しないため、次回の通知 dedup(`!==` / `Object.is`)を強制的に解除する。\n */\nconst UNCERTAIN: unique symbol = Symbol(\"wcs-stream-last-notified-uncertain\");\n\nexport interface ILastNotified {\n status: StreamStatus | typeof UNCERTAIN;\n error: unknown;\n}\n\nconst lastNotifiedByStateElement = new WeakMap<IStateElement, Map<string, ILastNotified>>();\n\n/**\n * 最後に通知した観測値を返す。未通知なら基準値 { idle, null }。\n */\nexport function getLastNotified(stateElement: IStateElement, name: string): ILastNotified {\n return (\n lastNotifiedByStateElement.get(stateElement)?.get(name) ?? { status: \"idle\", error: null }\n );\n}\n\n/**\n * 通知した観測値を記録する(updateStreamStatus が $postUpdate 発行と同時に呼ぶ)。\n */\nexport function setLastNotified(\n stateElement: IStateElement,\n name: string,\n status: StreamStatus,\n error: unknown,\n): void {\n let lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n lastMap = new Map();\n lastNotifiedByStateElement.set(stateElement, lastMap);\n }\n lastMap.set(name, { status, error });\n}\n\n/**\n * 再 set(clearStreamRegistry → processStreamsDeclaration)後に呼び、新宣言に\n * 存在しない名前の台帳エントリを削除する。台帳は stateElement の寿命で生存するが\n * (§4-3 の再 set・再接続跨ぎ dedup)、それが必要なのは同名エントリのみで、\n * 旧宣言にしか無い名前は以後どの通知経路(updateStreamStatus)からも参照されない。\n * prune しないと、再 set のたびに異なる stream 名を使うステートで台帳が\n * stateElement の寿命の間単調増加する。\n * 既知の許容: prune 後に同名を再宣言した場合、dedup は基準値 { idle, null } から\n * やり直しになる(宣言削除時の binding 陳腐化が §4-4 の既知エッジである以上、\n * 再宣言は新規宣言と同じ扱いでよい)。\n */\nexport function pruneLastNotified(stateElement: IStateElement, liveNames: ReadonlySet<string>): void {\n const lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n return;\n }\n for (const name of lastMap.keys()) {\n if (!liveNames.has(name)) {\n lastMap.delete(name);\n }\n }\n}\n\n/**\n * 無通知ミューテーション(abortAllStreams の idle / null 直接書き換え)の直後に呼び、\n * 台帳のうちミューテーション後の値と一致しないフィールドを UNCERTAIN に無効化する。\n * 一致しているフィールド(観測層がどちらを見ても同じ値)は dedup を維持する\n * (例: error が null のままなら再接続時に $streamError.<name> の余計な通知は出ない)。\n */\nexport function invalidateLastNotified(stateElement: IStateElement, name: string): void {\n const lastMap = lastNotifiedByStateElement.get(stateElement);\n if (typeof lastMap === \"undefined\") {\n return;\n }\n const last = lastMap.get(name);\n if (typeof last === \"undefined\") {\n // 未通知: 基準値 { idle, null } はミューテーション後の値と一致するため乖離しない\n return;\n }\n lastMap.set(name, {\n status: last.status === \"idle\" ? last.status : UNCERTAIN,\n error: Object.is(last.error, null) ? null : UNCERTAIN,\n });\n}\n\nexport const __private__ = {\n lastNotifiedByStateElement,\n UNCERTAIN,\n};\n","/**\n * stream/activeStateElements.ts\n *\n * 起動中(startStreams 済み・未切断)の stateElement の列挙用 Set\n * (docs/state-streams-design.md §3-2)。\n *\n * streamRegistry の WeakMap は列挙不能のため、updater の drain リスナーが\n * 「どの stateElement の entry と batch を交差させるか」を知るには\n * 列挙可能な strong Set が別途必要になる。lastNotified.ts と同じ\n * 「import 循環回避の小モジュール」パターン\n * (streamRegistry → activeStateElements ← streamRuntime の一方向依存に保つ)。\n *\n * リーク防止の不変条件(strong Set が切断済み要素の GC を妨げないための連動):\n * - add は startStreams(streamRuntime.ts)だけが行う\n * (eager 起動=connect 時、および接続中の `_state` 再 set 時の再起動)。\n * - delete は abortAllStreams / clearStreamRegistry(streamRegistry.ts)が行う。\n * disconnect(disconnectedCallback → abortAllStreams)と `_state` 再 set\n * (clearStreamRegistry → processStreamsDeclaration → 接続中なら startStreams で\n * 再 add)の両経路が必ずここを通るため、「Set に居る = 接続中かつ起動済み」が\n * 常に保たれ、切断済み stateElement への強参照は残らない。\n * 設計書 §3-2 の「未接続(disconnect 済み)の stateElement の entry は restart\n * しない」はこの不変条件で担保される。\n */\n\nimport type { IStateElement } from \"../components/types\";\n\nconst activeStateElements = new Set<IStateElement>();\n\n/**\n * 起動中 stateElement として登録する(startStreams 専用。不変条件はモジュールヘッダ参照)。\n */\nexport function addActiveStateElement(stateElement: IStateElement): void {\n activeStateElements.add(stateElement);\n}\n\n/**\n * 起動中 stateElement から外す(abortAllStreams / clearStreamRegistry 専用)。\n */\nexport function deleteActiveStateElement(stateElement: IStateElement): void {\n activeStateElements.delete(stateElement);\n}\n\n/**\n * 起動中 stateElement を列挙する(drain リスナーの交差判定用)。\n */\nexport function getActiveStateElements(): ReadonlySet<IStateElement> {\n return activeStateElements;\n}\n\nexport const __private__ = {\n activeStateElements,\n};\n","/**\n * stream/streamRegistry.ts\n *\n * `$streams` の registry(docs/state-streams-design.md §2-1 / §5)。\n * eventTokenRegistry と対称の WeakMap registry。\n *\n * - status / error の正本は registry entry(state オブジェクト上に実プロパティは持たない)。\n * - disconnect 時は abortAllStreams(abort のみ・registry 保持)、\n * `_state` 再 set 時のみ clearStreamRegistry(abort + 全削除)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport { deleteActiveStateElement } from \"./activeStateElements\";\nimport { invalidateLastNotified } from \"./lastNotified\";\nimport type { IStreamEntry } from \"./types\";\n\nconst registryByStateElement: WeakMap<IStateElement, Map<string, IStreamEntry>> = new WeakMap();\n\n/**\n * stream entry 群を置換登録する(`_state` セッターからの再構築で丸ごと差し替える)。\n */\nexport function setStreamEntries(stateElement: IStateElement, entries: Map<string, IStreamEntry>): void {\n registryByStateElement.set(stateElement, entries);\n}\n\n/**\n * 登録済みの stream entry 群を返す。未登録なら空 Map を返す(registry への登録はしない)。\n */\nexport function getStreamEntries(stateElement: IStateElement): Map<string, IStreamEntry> {\n return registryByStateElement.get(stateElement) ?? new Map<string, IStreamEntry>();\n}\n\n/**\n * 全 stream を abort して idle に戻す(設計書 §5-1)。registry は保持する。\n *\n * disconnectedCallback(切断時)に呼ばれるため、status / error の反映は\n * proxy / $postUpdate を使わず entry への直接ミューテーションで行う\n * (切断済みで binding 更新は不要かつ rootNode が無い)。\n *\n * 無通知ミューテーションは「最後に通知した観測値」台帳(stream/lastNotified.ts)\n * と registry を乖離させるため、同時に台帳側を invalidate する。これを怠ると\n * 再接続ウィンドウ内の fresh 読み(他パスの drain での getter 再計算など)が\n * 描画した idle に対し、restart の updateStreamStatus(\"active\") が切断前の\n * 通知値と同値判定されて skip され、DOM が恒久的に陳腐化する(設計書 §4-3)。\n */\nexport function abortAllStreams(stateElement: IStateElement): void {\n // 依存駆動 restart の対象から外す(切断済み stateElement は restart しない、\n // 設計書 §3-2。add 側は startStreams — stream/activeStateElements.ts の\n // リーク防止不変条件を参照)。registry の有無に関わらず必ず外す。\n deleteActiveStateElement(stateElement);\n const entries = registryByStateElement.get(stateElement);\n if (typeof entries === \"undefined\") {\n return;\n }\n for (const entry of entries.values()) {\n entry.controller?.abort();\n entry.controller = null;\n entry.status = \"idle\";\n entry.error = null;\n invalidateLastNotified(stateElement, entry.name);\n }\n}\n\n/**\n * 全 stream を abort したうえで registry から削除する(`_state` 再 set 時の再配線用、設計書 §5-2)。\n */\nexport function clearStreamRegistry(stateElement: IStateElement): void {\n abortAllStreams(stateElement);\n // abortAllStreams が既に delete 済みだが、「clear = 全削除でも必ず restart 対象から\n // 外れる」不変条件を将来の abortAllStreams の変更から独立に保証するため明示的に呼ぶ。\n deleteActiveStateElement(stateElement);\n registryByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n registryByStateElement,\n};\n","/**\n * stream/processStreamsDeclaration.ts\n *\n * `$streams: { <name>: { args?, source, fold?, initial? } }` 宣言マップを解析し、\n * IStreamEntry を構築して streamRegistry に一括登録する\n * (docs/state-streams-design.md §1-1 / §1-2 / §1-3)。\n *\n * - バリデーション(§1-2): 違反は raiseError。\n * - 名前はフラットなプロパティ名のみ(空文字 / `.`(DELIMITER)/ `*`(WILDCARD)/ 先頭 `$` を禁止)。\n * - Object.prototype の継承名(`__proto__` / `constructor` / `toString` 等)を禁止\n * (own key でなくても `in` 判定が真になり、実体化 skip + 起動時 Reflect.set の\n * 継承 setter 化 — `__proto__` は prototype 差し替え — を引き起こすため)。\n * - getter / setter として宣言済みのパスとの衝突を禁止(getterPaths / setterPaths を検査)。\n * - `source` は関数必須。`fold` は(あれば)関数。`fold` があるのに `initial` が無ければエラー\n * (reduce は initial 必須。`initial` の有無は in 演算子で判定)。`args` は(あれば)関数。\n * - fold 省略時は latest(`(_acc, chunk) => chunk`)を注入する(§0 決定レコード)。\n * - 値プロパティ実体化(§1-3): `state[name]` が未定義なら `initial`\n * (fold 無しなら undefined)でデータプロパティとして初期化する。\n * ユーザーが同名プロパティを先に宣言していた場合は上書きしない\n * (起動時の initial リセットは streamRuntime 側の責務)。\n * - 通知 dedup 台帳の prune(§4-3): 新宣言に存在しない名前の lastNotified エントリを\n * 削除する(台帳は stateElement 寿命 — 再 set 跨ぎ dedup が必要なのは同名のみ)。\n *\n * 呼び出しは stateElement.getterPaths / setterPaths の確定後であること\n * (State の `_state` セッターが getStateInfo の反映より後に呼ぶことで保証する)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport { DELIMITER, STATE_STREAMS_NAME, WILDCARD } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport type { IState } from \"../types\";\nimport { pruneLastNotified } from \"./lastNotified\";\nimport { setStreamEntries } from \"./streamRegistry\";\nimport type { IStreamDefinition, IStreamEntry, StreamFold, StreamSource } from \"./types\";\n\n/** fold 省略時に注入される既定 fold(latest = 最新チャンクで置換) */\nconst latestFold: StreamFold = (_acc, chunk) => chunk;\n\n/** `$streams` 無し宣言の prune 用(旧宣言の全名前が残骸になる) */\nconst NO_STREAM_NAMES: ReadonlySet<string> = new Set<string>();\n\nexport function processStreamsDeclaration(stateElement: IStateElement, state: IState): void {\n const declared = (state as Record<string, unknown>)[STATE_STREAMS_NAME];\n if (typeof declared === \"undefined\") {\n // $streams 無しの再 set でも旧宣言の名前は通知 dedup 台帳の残骸になるため prune する\n pruneLastNotified(stateElement, NO_STREAM_NAMES);\n return;\n }\n if (typeof declared !== \"object\" || declared === null) {\n raiseError(`${STATE_STREAMS_NAME} must be an object mapping stream names to stream definitions.`);\n }\n const entries = new Map<string, IStreamEntry>();\n for (const [name, def] of Object.entries(declared as Record<string, unknown>)) {\n if (name.length === 0) {\n raiseError(`${STATE_STREAMS_NAME} entry name must be a non-empty string.`);\n }\n if (name.includes(DELIMITER)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be a flat property name (\"${DELIMITER}\" is not allowed).`);\n }\n if (name.includes(WILDCARD)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be a flat property name (\"${WILDCARD}\" is not allowed).`);\n }\n if (name.startsWith(\"$\")) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must not start with \"$\" (reserved namespace).`);\n }\n // Object.prototype の継承名(__proto__ / constructor / toString 等)は一律拒否する。\n // own key でないのに `name in state` が真になるため実体化(§1-3)が skip され、\n // 起動時の initial リセット(Reflect.set)が継承 setter に化ける\n // (特に __proto__ は state の prototype を差し替える)ため、名前検査の防衛線で落とす(§1-2)。\n if (name in Object.prototype) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must not be a property name inherited from Object.prototype (e.g. \"__proto__\", \"constructor\").`);\n }\n if (stateElement.getterPaths.has(name)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" conflicts with a getter declared on the state.`);\n }\n if (stateElement.setterPaths.has(name)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" conflicts with a setter declared on the state.`);\n }\n if (typeof def !== \"object\" || def === null) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" must be an object ({ args?, source, fold?, initial? }).`);\n }\n const definition = def as Record<string, unknown>;\n if (typeof definition.source !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" source must be a function.`);\n }\n const hasFold = typeof definition.fold !== \"undefined\";\n if (hasFold && typeof definition.fold !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" fold must be a function.`);\n }\n if (hasFold && !(\"initial\" in definition)) {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" requires \"initial\" when fold is specified (reduce needs a seed value).`);\n }\n const hasArgs = typeof definition.args !== \"undefined\";\n if (hasArgs && typeof definition.args !== \"function\") {\n raiseError(`${STATE_STREAMS_NAME} entry \"${name}\" args must be a function.`);\n }\n const entry: IStreamEntry = {\n name,\n definition: {\n args: (definition.args as IStreamDefinition[\"args\"] | undefined) ?? null,\n source: definition.source as StreamSource,\n fold: (definition.fold as StreamFold | undefined) ?? latestFold,\n initial: definition.initial,\n },\n status: \"idle\",\n error: null,\n controller: null,\n depAddresses: new Set(),\n };\n // 値プロパティ実体化(§1-3): ユーザーが同名プロパティを先に宣言していたら上書きしない\n if (!(name in state)) {\n state[name] = entry.definition.initial;\n }\n entries.set(name, entry);\n }\n setStreamEntries(stateElement, entries);\n // 新宣言に存在しない名前の通知 dedup 台帳エントリを prune する\n // (同名は保持 = §4-3 の再 set 跨ぎ dedup 契約を維持。stream/lastNotified.ts 参照)\n pruneLastNotified(stateElement, new Set(entries.keys()));\n}\n","/**\n * stream/streamNamespace.ts\n *\n * `$streamStatus` / `$streamError` の read-only namespace proxy\n * (docs/state-streams-design.md §4-1 / §4-2)。commandNamespace と対称。\n *\n * - state element 単位で memo 化し、同一 stateElement なら同じ proxy が返る。\n * - 宣言された stream 名(`$streams` に列挙されたもの)のみ registry entry の\n * status / error を返す。宣言外の名前・Symbol キーは undefined\n * (`then` / `constructor` 等を内部機構が触っても throw しない寛容規約、\n * $command と同じ)。\n * - 値は memo しない: proxy は getStreamEntries を毎回読む thin gateway\n * (status / error は runtime が随時書き換えるため。registry entry が正本、§2-1)。\n * - set / deleteProperty は raiseError。setByAddress の親走査が namespace proxy に\n * 到達したときの Reflect.set もここで落ちる(書き込み防御 S11 の終端)。\n */\n\nimport type { IStateElement } from \"../components/types\";\nimport {\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { getStreamEntries } from \"./streamRegistry\";\nimport type { IStreamEntry } from \"./types\";\n\nconst statusNamespaceByStateElement: WeakMap<IStateElement, object> = new WeakMap();\nconst errorNamespaceByStateElement: WeakMap<IStateElement, object> = new WeakMap();\n\nfunction createStreamNamespaceProxy(\n stateElement: IStateElement,\n namespaceName: string,\n pick: (entry: IStreamEntry) => unknown,\n): object {\n return new Proxy(Object.create(null), {\n get(_target: object, prop: PropertyKey): unknown {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n const entry = getStreamEntries(stateElement).get(prop);\n if (typeof entry === \"undefined\") {\n return undefined;\n }\n return pick(entry);\n },\n has(_target: object, prop: PropertyKey): boolean {\n return typeof prop === \"string\" && getStreamEntries(stateElement).has(prop);\n },\n ownKeys(): string[] {\n return Array.from(getStreamEntries(stateElement).keys());\n },\n getOwnPropertyDescriptor(_target: object, prop: PropertyKey): PropertyDescriptor | undefined {\n if (typeof prop !== \"string\") {\n return undefined;\n }\n const entry = getStreamEntries(stateElement).get(prop);\n if (typeof entry === \"undefined\") {\n return undefined;\n }\n return {\n configurable: true,\n enumerable: true,\n value: pick(entry),\n };\n },\n set(): boolean {\n raiseError(`${namespaceName} namespace is read-only; assigning to it is not allowed.`);\n },\n deleteProperty(): boolean {\n raiseError(`${namespaceName} namespace is read-only; deleting from it is not allowed.`);\n },\n });\n}\n\nexport function getStreamStatusNamespace(stateElement: IStateElement): object {\n const cached = statusNamespaceByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = createStreamNamespaceProxy(\n stateElement,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n (entry) => entry.status,\n );\n statusNamespaceByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\nexport function getStreamErrorNamespace(stateElement: IStateElement): object {\n const cached = errorNamespaceByStateElement.get(stateElement);\n if (typeof cached !== \"undefined\") {\n return cached;\n }\n const proxy = createStreamNamespaceProxy(\n stateElement,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n (entry) => entry.error,\n );\n errorNamespaceByStateElement.set(stateElement, proxy);\n return proxy;\n}\n\n/**\n * 両 namespace proxy の memo を破棄する(clearCommandNamespace と対称)。\n * disconnectedCallback と `_state` 再 set 時に呼ばれる。\n */\nexport function clearStreamNamespace(stateElement: IStateElement): void {\n statusNamespaceByStateElement.delete(stateElement);\n errorNamespaceByStateElement.delete(stateElement);\n}\n\nexport const __private__ = {\n statusNamespaceByStateElement,\n errorNamespaceByStateElement,\n};\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { applyChangeFromBindings } from \"../apply/applyChangeFromBindings\";\nimport { peekBindingSetByAbsoluteStateAddress } from \"../binding/getBindingSetByAbsoluteStateAddress\";\nimport { IBindingInfo } from \"../types\";\n\n/**\n * drain(_applyChange)終了通知のリスナー(docs/state-streams-design.md §3-2)。\n * バッチ内の更新アドレス(AbsoluteStateAddress のインスタンス同一性で\n * dedup 済みの Set)を受け取る。stream runtime の依存駆動 restart が\n * この通知を交差判定の入力にする。\n */\nexport type UpdateBatchListener = (batch: ReadonlySet<IAbsoluteStateAddress>) => void;\n\nconst updateBatchListeners: Set<UpdateBatchListener> = new Set();\n\n/**\n * drain 終了リスナーを登録する。\n */\nexport function registerUpdateBatchListener(listener: UpdateBatchListener): void {\n updateBatchListeners.add(listener);\n}\n\n/**\n * drain 終了リスナーを解除する(テスト間の分離用)。\n */\nexport function unregisterUpdateBatchListener(listener: UpdateBatchListener): void {\n updateBatchListeners.delete(listener);\n}\n\n/**\n * 全リスナーに drain のバッチを通知する。\n * リスナーの throw は握りつぶさない(内部バグの隠蔽防止)。\n * stream 側リスナーが entry ごとに自前で try/catch する契約(設計書 §3-2)。\n */\nfunction notifyUpdateBatchListeners(batch: ReadonlySet<IAbsoluteStateAddress>): void {\n for (const listener of updateBatchListeners) {\n listener(batch);\n }\n}\n\nclass Updater {\n private _queueAbsoluteAddresses: IAbsoluteStateAddress[] = [];\n constructor() {\n }\n\n enqueueAbsoluteAddress(absoluteAddress: IAbsoluteStateAddress): void {\n const requireStartProcess = this._queueAbsoluteAddresses.length === 0;\n this._queueAbsoluteAddresses.push(absoluteAddress);\n if (requireStartProcess) {\n queueMicrotask(() => {\n const absoluteAddresses = this._queueAbsoluteAddresses;\n this._queueAbsoluteAddresses = [];\n this._applyChange(absoluteAddresses);\n });\n }\n }\n\n // テスト用に公開\n testApplyChange(absoluteAddresses: IAbsoluteStateAddress[]): void {\n this._applyChange(absoluteAddresses);\n }\n\n private _applyChange(absoluteAddresses: IAbsoluteStateAddress[]): void {\n // Note: AbsoluteStateAddress はキャッシュされているため、\n // 同一の (stateName, address) は同じインスタンスとなり、\n // Set による重複排除が正しく機能する \n const absoluteAddressSet = new Set(absoluteAddresses);\n const processBindings: IBindingInfo[] = [];\n for (const absoluteAddress of absoluteAddressSet) {\n // peek: バインディングの無いアドレス(リスト置換で enqueue される中間\n // アドレス等)に空 Set を生成・蓄積しない\n const bindings = peekBindingSetByAbsoluteStateAddress(absoluteAddress);\n if (bindings === undefined) {\n continue;\n }\n for(const binding of bindings) {\n if (binding.replaceNode.isConnected === false) {\n // 切断されているバインディングは無視\n continue;\n }\n processBindings.push(binding);\n }\n }\n applyChangeFromBindings(\n processBindings\n );\n // drain 終了フック: binding 適用後に dedup 済みバッチを通知する(設計書 §3-2)。\n // testApplyChange も同じ _applyChange を通るため、テストから同期に駆動できる。\n notifyUpdateBatchListeners(absoluteAddressSet);\n }\n\n}\n\nconst updater = new Updater();\n\nexport function getUpdater(): Updater {\n return updater;\n}\n\n// テスト用にprivateメソッドを公開\nexport const __private__ = {\n Updater,\n};\n","/**\n * stream/argsTrace.ts\n *\n * `$streams` の args トレース(依存捕捉、docs/state-streams-design.md §3-1)。\n *\n * - モジュールスコープの collector を立てて readonly proxy 上で args を評価し、\n * getByAddress を通った読みを絶対アドレス(IAbsoluteStateAddress)として捕捉する。\n * AbsolutePathInfo / AbsoluteStateAddress は両方キャッシュ済みのため、捕捉した\n * アドレスは drain バッチと Set.has のインスタンス同一性で O(1) 照合できる(§2-1)。\n * - collectStreamDependency は getByAddress のホットパスから毎読み呼ばれるため、\n * collector === null なら即 return し、それ以外の計算を一切しない。\n * - 起動・restart のたびに traceArgs が呼ばれ、成功時は entry.depAddresses を\n * 丸ごと置換する(per-run の動的再捕捉)。失敗時は前回成功 run の検証済み\n * 捕捉を保持する(§2-2 の「error からも依存変化で restart」を保つ)。\n * - lastNotified.ts と同じく import 循環回避のための小モジュール\n * (getByAddress → argsTrace ← streamRuntime の一方向依存に保つ)。\n */\n\nimport { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport type { IAbsoluteStateAddress, IStateAddress } from \"../address/types\";\nimport type { IStateElement } from \"../components/types\";\nimport {\n DELIMITER,\n STATE_STREAMS_NAME,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport type { IStreamEntry } from \"./types\";\n\n/** トレース中のみ非 null。getByAddress を通った読みの絶対アドレスが溜まる。 */\nlet collector: Set<IAbsoluteStateAddress> | null = null;\n\n/**\n * getByAddress の入口(checkDependency 直後)から毎読み呼ばれるフック。\n * トレース外(collector === null)では何もしない。\n */\nexport function collectStreamDependency(stateElement: IStateElement, address: IStateAddress): void {\n if (collector === null) {\n return;\n }\n const absolutePathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n collector.add(createAbsoluteStateAddress(absolutePathInfo, address.listIndex));\n}\n\n/**\n * args を readonly proxy で同期評価し、読まれたパスを entry.depAddresses に\n * 丸ごと置換で再捕捉する(§3-1)。評価値(source の第 1 引数になる)を返す。\n *\n * - args === null(宣言で省略)なら depAddresses を clear して undefined\n * (依存なし = 起動後 restart しない)。\n * - 検査(違反は raiseError):\n * (a) 評価値が Promise(同期契約違反)\n * (b) 自己依存 — `<name>` / `$streamStatus.<name>` / `$streamError.<name>` の読み\n * (restart の自己書き込みで再発火する無限ループ、S8)\n * (c) wildcard を含むパスの読み(`$getAll` 等も同様。第 1 段スコープ外)\n * - 失敗時(args のユーザー例外・検査違反)は今回の捕捉(captured)を採用せず\n * 伝播し、entry.depAddresses には**前回成功 run の検証済み捕捉を保持する**。\n * これにより drain リスナーが throw を error 経路に正規化したあとも、依存の\n * 書き込みで再試行できる(§2-2「done / error からも依存変化で restart」——\n * 一時的な args throw で stream が恒久固着しない)。ループ安全性:\n * 保持されるのは前回**成功** run の捕捉のみ(自己依存・wildcard 検査済み)で\n * 自分の `<name>` / `$streamStatus.<name>` / `$streamError.<name>` を含み得ず、\n * traceArgs throw 時の startStream は initial リセットに到達しないため、\n * error 正規化の書き込みが保持 deps に再 hit することはない。再試行は依存\n * 書き込み 1 回につき高々 1 回で有界。未検査の captured を採用しないことが\n * ループ防止の要件であり、前回検証済み捕捉の保持はそれを侵さない。\n * - collector は finally で必ず復元する(例外・再入安全。ネスト評価は想定しないが\n * 防御的に「前の collector を復元」の形にしておく — コストは同等)。\n */\nexport function traceArgs(stateElement: IStateElement, entry: IStreamEntry): unknown {\n const argsFn = entry.definition.args;\n if (argsFn === null) {\n entry.depAddresses.clear();\n return undefined;\n }\n const previousCollector = collector;\n const captured = new Set<IAbsoluteStateAddress>();\n collector = captured;\n let argsValue: unknown = undefined;\n try {\n stateElement.createState(\"readonly\", (state) => {\n argsValue = argsFn(state);\n });\n } finally {\n // args のユーザー例外時は captured を採用せずそのまま伝播する\n // (entry.depAddresses は前回成功 run の検証済み捕捉を保持)\n collector = previousCollector;\n }\n if (argsValue instanceof Promise) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must be synchronous (it returned a Promise).`,\n );\n }\n const selfStatusPath = `${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}${entry.name}`;\n const selfErrorPath = `${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}${entry.name}`;\n for (const dep of captured) {\n const pathInfo = dep.absolutePathInfo.pathInfo;\n if (\n dep.absolutePathInfo.stateElement === stateElement &&\n (pathInfo.path === entry.name || pathInfo.path === selfStatusPath || pathInfo.path === selfErrorPath)\n ) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must not read the stream itself (\"${pathInfo.path}\"): a self-dependency would restart the stream on its own writes (infinite loop).`,\n );\n }\n if (pathInfo.wildcardCount > 0) {\n raiseError(\n `${STATE_STREAMS_NAME} entry \"${entry.name}\" args must not read wildcard paths (\"${pathInfo.path}\"): wildcard dependencies are out of scope.`,\n );\n }\n }\n entry.depAddresses = captured;\n return argsValue;\n}\n","/**\n * stream/consumeSource.ts\n *\n * `$streams` のチャンク消費ループ(docs/state-streams-design.md §3-3)。\n * packages/signals/src/streamResource.ts の consume / iterate /\n * readableToAsyncIterable の移植(パッケージ間依存は持たない自己完結原則)。\n *\n * 唯一の構造差分は状態書き込みの IConsumeSink への委譲:\n * value.set(fold(value.peek(), chunk)) → sink.fold(chunk)\n * status.set(\"done\") → sink.done()\n * error.set(e) + status.set(\"error\") → sink.fail(e)\n *\n * sink.fold() が throw した場合(fold throw)もループ内の throw として\n * 既存の catch に流れ、signal.aborted なら return、でなければ sink.fail(e)。\n * consumeSource 自体は fold throw と source throw を区別しない\n * (producer の掃除 = controller.abort() は呼び出し側 runtime が fail 内で行う)。\n * consumeSource は reject しない(全経路 catch 済み)。\n *\n * ---------------------------------------------------------------------------\n * 以下、移植元モジュールヘッダの契約(原文英語のまま維持):\n *\n * CONTRACT (cooperative cancellation — STRONG REQUIREMENT): the `source` MUST honor\n * the `AbortSignal` it is given. Honoring it is what drives switchMap restart/dispose;\n * a source that ignores it cannot be reliably cancelled.\n *\n * Rescue levels on abort:\n * - ReadableStream: FULLY rescued. A parked read() is force-unwound via\n * reader.cancel(), which both releases the underlying source and settles the\n * pending read() so the loop unwinds.\n * - AsyncIterable / async generator: PARTIALLY rescued. On abort we call\n * iterator.return() to trigger the generator's finally/cleanup. But a parked\n * `await` (the producer stalling before its next yield while IGNORING `signal`)\n * cannot be force-unwound from outside — return() only takes effect when the\n * generator next resumes. So a source that parks forever and never observes\n * `signal` still leaks its consume task. Honor `signal` to bound this.\n * The `if (signal.aborted) return` check only runs after a chunk arrives, not while\n * parked — it drops stale chunks but is not, by itself, a cancellation mechanism.\n */\n\nimport type { IConsumeSink, StreamProducer, StreamSource } from \"./types\";\n\nexport async function consumeSource(\n source: StreamSource,\n args: unknown,\n signal: AbortSignal,\n sink: IConsumeSink,\n): Promise<void> {\n // Obtain the iterator EXPLICITLY (not via `for await`'s implicit one) so abort can\n // call `iterator.return()` to trigger an AsyncIterable / async generator's\n // `finally`/cleanup. A `for await` only calls `.return()` when the loop itself exits;\n // if the producer is PARKED (awaiting before the next yield while ignoring `signal`),\n // the loop never advances, so the implicit `.return()` never runs and the task leaks\n // past restart/dispose. Calling `.return()` on abort is the PARTIAL rescue: the\n // parked `await` cannot be force-unwound from outside, but once the generator resumes\n // (its next tick), `.return()` makes it run its `finally` and stop — recovering the\n // common \"generator wakes up after abort\" case. The ReadableStream path is fully\n // rescued via `reader.cancel()` (see `readableToAsyncIterable`).\n let iterator: AsyncIterator<unknown> | null = null;\n // Guard against returning the SAME iterator twice. `onAbort` is reachable two ways:\n // the abort listener, and the explicit call below when abort raced the\n // `await source(...)`. The guard keys on the iterator instance (not a plain \"ran\"\n // flag): the listener firing with iterator still null must NOT consume the single\n // real cleanup that the explicit call performs once the iterator exists. So we only\n // mark an iterator returned once we have actually called `.return()` on it.\n let returned: AsyncIterator<unknown> | null = null;\n const onAbort = (): void => {\n if (!iterator || iterator === returned) {\n return; // nothing to release yet, or already released this iterator\n }\n returned = iterator;\n // Fire the iterator's cleanup. Swallow any throw/rejection from `.return()` — we\n // are tearing down; a producer that rejects on return must not surface here.\n try {\n void iterator.return?.()?.then?.(undefined, () => {});\n } catch {\n // `.return()` threw synchronously while tearing down — ignore.\n }\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n const produced = await source(args, signal);\n iterator = iterate(produced, signal)[Symbol.asyncIterator]();\n if (signal.aborted) {\n // Aborted while awaiting the source: the abort listener already ran (iterator\n // was still null then), so explicitly release the just-produced iterator now —\n // this fires a generator's finally / a ReadableStream's cancel for the\n // resource we created but will never iterate.\n onAbort();\n return;\n }\n for (;;) {\n const result = await iterator.next();\n if (result.done) {\n break;\n }\n if (signal.aborted) {\n return; // stale chunk from a superseded/disposed run — drop it\n }\n sink.fold(result.value);\n }\n if (signal.aborted) {\n return; // stream ended but this run was aborted — don't mark done\n }\n sink.done();\n } catch (e) {\n if (signal.aborted) {\n return; // an abort that surfaced as a throw is not an error\n }\n sink.fail(e); // keep the last folded value (do not reset)\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nfunction iterate(produced: StreamProducer, signal: AbortSignal): AsyncIterable<unknown> {\n // Optional chaining: a null/undefined source return value must fall through to the\n // explicit TypeError below (symmetric with the `?.` on the getReader probe), not\n // throw an opaque \"Cannot read properties of null\" from this property access.\n if (typeof (produced as AsyncIterable<unknown>)?.[Symbol.asyncIterator] === \"function\") {\n return produced as AsyncIterable<unknown>;\n }\n // Not async-iterable: must be a ReadableStream (read via getReader). Validate so\n // a wrong source value yields a clear error instead of an opaque \"getReader is\n // not a function\" from inside the generator.\n if (typeof (produced as ReadableStream<unknown>)?.getReader !== \"function\") {\n throw new TypeError(\n \"[@wcstack/state] $streams: source must return an AsyncIterable or a ReadableStream (got neither).\",\n );\n }\n return readableToAsyncIterable(produced as ReadableStream<unknown>, signal);\n}\n\nasync function* readableToAsyncIterable(\n stream: ReadableStream<unknown>,\n signal: AbortSignal,\n): AsyncGenerator<unknown> {\n const reader = stream.getReader();\n // A ReadableStream read() does NOT observe an AbortSignal on its own. Without\n // this, a switchMap restart / dispose leaves the previous reader parked in a\n // pending read() forever, leaking the underlying source. Cancelling on abort\n // both releases the source AND settles the pending read() so the for-await\n // unwinds and the finally below can release the lock. Abort is the only\n // early-exit path for this generator (the consumer never calls .return()\n // without aborting), so this is the sole place a non-drained stream is cancelled.\n const onAbort = (): void => {\n void reader.cancel().catch(() => {}); // tearing down; swallow a rejected cancel\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n yield value;\n }\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n reader.releaseLock();\n }\n}\n","/**\n * stream/streamRuntime.ts\n *\n * `$streams` の起動・チャンク反映・status 遷移(docs/state-streams-design.md\n * §2-2 / §3-3 / §4-3)。\n *\n * スコープ:\n * - eager 起動(startStreams)と start = restart の共通手順(startStream)。\n * - args は traceArgs(stream/argsTrace.ts)で readonly proxy 評価と同時に依存を\n * per-run 再捕捉する(§3-1)。\n * - 依存駆動 restart(§3-2): モジュール初期化時に updater の drain 終了リスナーを\n * 1 つ登録し(restartStreamsOnUpdateBatch)、起動中 stateElement\n * (stream/activeStateElements.ts — startStreams で add・abortAllStreams /\n * clearStreamRegistry で delete)の各 entry について depAddresses と batch を\n * 交差させ、hit した entry を restart する。\n *\n * 切断後の後始末について(不変条件):\n * - disconnect(abortAllStreams)は registry entry を直接ミューテーションして\n * idle に戻す($postUpdate は呼ばない — 切断済みで binding 更新は不要かつ\n * rootNode が無い)。\n * - abort 済み run の sink コールバック(fold / done / fail)は consumeSource の\n * stale-drop(全経路の signal.aborted チェック)が createState 到達前に\n * 落とすため、runtime 側に切断後ガードは不要。\n * 「runtime が createState を呼ぶのは自分の controller が生きている間だけ」が\n * この 2 つの組み合わせで常に保たれる。\n */\n\nimport type { IAbsoluteStateAddress } from \"../address/types\";\nimport type { IStateElement } from \"../components/types\";\nimport {\n DELIMITER,\n STATE_STREAM_ERROR_NAMESPACE_NAME,\n STATE_STREAM_STATUS_NAMESPACE_NAME,\n} from \"../define\";\nimport { registerUpdateBatchListener } from \"../updater/updater\";\nimport { addActiveStateElement, getActiveStateElements } from \"./activeStateElements\";\nimport { traceArgs } from \"./argsTrace\";\nimport { consumeSource } from \"./consumeSource\";\nimport { getLastNotified, setLastNotified } from \"./lastNotified\";\nimport { getStreamEntries } from \"./streamRegistry\";\nimport type { IConsumeSink, IStreamEntry, StreamStatus } from \"./types\";\n\n/**\n * 登録済みの全 stream を起動する(eager 起動、設計書 §2-3)。\n * State.connectedCallback($connectedCallback 完了後)と接続中の `_state` 再 set\n * から呼ばれる想定。\n *\n * 同時に依存駆動 restart(§3-2)の対象として activeStateElements に登録する\n * (delete 側は abortAllStreams / clearStreamRegistry —\n * stream/activeStateElements.ts のリーク防止不変条件を参照)。\n * eager 起動の throw(args のユーザー例外等)はここでは正規化せず loud fail のまま\n * (既存の $connectedCallback と同じ扱い。正規化は drain リスナー側の restart のみ)。\n */\nexport function startStreams(stateElement: IStateElement): void {\n const entries = getStreamEntries(stateElement);\n if (entries.size === 0) {\n return;\n }\n addActiveStateElement(stateElement);\n for (const entry of entries.values()) {\n startStream(stateElement, entry);\n }\n}\n\n/**\n * stream を起動する。start = restart の共通手順(設計書 §2-2):\n *\n * 1. 旧 run を abort(restart 時)→ 新 AbortController\n * 2. traceArgs で args を readonly proxy 評価し依存を丸ごと再捕捉\n * (Promise / 自己依存 / wildcard 読みは raiseError、§3-1)\n * 3. 値を initial にリセット(起動 = 最初の run も restart と同一セマンティクス、§1-3)\n * 4. status=\"active\"・error=null を反映\n * 5. consumeSource で消費開始\n */\nexport function startStream(stateElement: IStateElement, entry: IStreamEntry): void {\n entry.controller?.abort();\n const controller = new AbortController();\n entry.controller = controller;\n\n // args 評価 + 依存の per-run 再捕捉(args === null なら depAddresses を clear して\n // undefined。Promise / 自己依存 / wildcard 読みは raiseError、§3-1)\n const argsValue = traceArgs(stateElement, entry);\n\n // 値リセット: setByAddress を通すことで updater coalesce・sameValueGuard・\n // walkDependency(stream 値に依存する computed の dirty 化)がすべて乗る(§3-3)\n stateElement.createState(\"writable\", (state) => {\n state[entry.name] = entry.definition.initial;\n });\n\n updateStreamStatus(stateElement, entry, \"active\", null);\n\n const definition = entry.definition;\n const sink: IConsumeSink = {\n fold(chunk: unknown): void {\n // fold の throw はそのまま伝播させる(consumeSource が fail 経路に回す)\n stateElement.createState(\"writable\", (state) => {\n state[entry.name] = definition.fold(state[entry.name], chunk);\n });\n },\n done(): void {\n updateStreamStatus(stateElement, entry, \"done\", null);\n },\n fail(error: unknown): void {\n // 値は直前の fold 結果を保持(リセットしない)\n updateStreamStatus(stateElement, entry, \"error\", error);\n // fold-throw 時の producer 掃除(iterator.return() / reader.cancel() を発火)。\n // source-throw 時は producer が既に終了しているので abort は無害(§3-3)。\n controller.abort();\n },\n };\n void consumeSource(definition.source, argsValue, controller.signal, sink);\n}\n\n/**\n * status / error の反映ヘルパ(設計書 §4-3)。\n *\n * - registry entry が正本。常に最新値へ書き換える。\n * - 「最後に通知した観測値」(stream/lastNotified.ts — 再 set・再接続を跨いで\n * stateElement の寿命で生存する台帳)から変化した項目に対応する名前空間パス\n * (`$streamStatus.<name>` / `$streamError.<name>`)だけを writable proxy の\n * $postUpdate で通知する(updater enqueue + walkDependency)。\n * - 両方不変なら通知しない(名前空間パスは setByAddress を通らないため\n * sameValueGuard が効かず、同等の same-value 判定を runtime 側が持つ)。\n * abortAllStreams の無通知ミューテーションで台帳が invalidate されている場合は\n * 同値扱いにならず必ず通知される(再接続ウィンドウ内の fresh 読みが描画した\n * idle の恒久陳腐化を防ぐ、§4-3)。\n */\nexport function updateStreamStatus(\n stateElement: IStateElement,\n entry: IStreamEntry,\n status: StreamStatus,\n error: unknown,\n): void {\n entry.status = status;\n entry.error = error;\n const last = getLastNotified(stateElement, entry.name);\n const statusChanged = last.status !== status;\n const errorChanged = !Object.is(last.error, error);\n if (!statusChanged && !errorChanged) {\n return;\n }\n setLastNotified(stateElement, entry.name, status, error);\n stateElement.createState(\"writable\", (state) => {\n if (statusChanged) {\n state.$postUpdate(`${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}${entry.name}`);\n }\n if (errorChanged) {\n state.$postUpdate(`${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}${entry.name}`);\n }\n });\n}\n\n/**\n * 依存駆動 restart の drain リスナー(設計書 §3-2)。\n * モジュール初期化時に registerUpdateBatchListener で 1 つだけ登録される。\n *\n * - 起動中の各 stateElement の各 entry について、depAddresses と batch の交差を\n * Set.has のインスタンス同一性で判定する(小さい方 = depAddresses を回して\n * batch.has(dep)。AbsoluteStateAddress はキャッシュにより同一 (stateName, path,\n * listIndex) が同一インスタンス、§2-1)。args なし(depAddresses 空)の entry は\n * 自然にスキップされる。\n * - status は問わず restart する(done / error からも依存の叩き直しで再試行、§2-2)。\n * - hit は収集してから一括で restart する(イテレーション中の registry 変更を避ける。\n * entry ごとに最初の hit で break するため「1 drain につき 1 entry 最大 1 restart」\n * もここで自然に成立する — 同一 tick 内の複数依存書き込みは 1 restart に畳まれる)。\n * - hits の実行時にも active + entry identity を再チェックする: 先行 restart の\n * source / args は consumeSource / traceArgs の同期プレフィックスで同期実行される\n * ため、そこで (a) 他の stateElement(や自分自身のホスト)の同期切断、(b) 同一要素の\n * _state 同期再 set(clearStreamRegistry → startStreams で Set に再 add される)が\n * 起こり得る。(a) は切断済み要素への startStream が rootNode 不在で throw する経路、\n * (b) は registry から置換済みの旧 entry を restart して到達不能な孤児 consume run を\n * リークする経路(§3-2「未接続の stateElement の entry は restart しない」・\n * §5-1「切断後は idle」に違反)で、いずれも「entry が現行 registry の live entry で\n * あること」の再検証で skip する。startStream **実行中**の自己切断・再 set は事前\n * チェックではガードできないため、catch 側でも同じ再検証を行ってから error に\n * 正規化する(切断済みでの正規化は createState が再 throw して drain リスナー外へ\n * 漏れ、後続 hits の restart を巻き添えにするため)。\n * - restart(startStream)は entry ごとに try/catch し、throw(args のユーザー例外・\n * Promise 同期契約違反等)は controller.abort() → status=\"error\"・$streamError 格納\n * に正規化する(§3-2 規範 3)。updater の drain を壊さず、他 entry の restart も\n * 継続する。eager 起動(connect 時の startStreams)の throw は従来どおり loud fail。\n * - restart 内の書き込み(initial リセット・status 通知)は updater への enqueue のみで\n * 新しい microtask バッチを作る(drain 再入ではない)。自己依存は traceArgs が\n * 宣言時に raiseError で検出するため、restart 書き込みが自分の依存に再 hit する\n * ループは起きない(§3-1)。\n */\nfunction restartStreamsOnUpdateBatch(batch: ReadonlySet<IAbsoluteStateAddress>): void {\n const activeStateElements = getActiveStateElements();\n if (activeStateElements.size === 0) {\n // stream 未使用アプリの drain に配列・イテレータ割り当てのコストを載せない\n return;\n }\n const hits: { stateElement: IStateElement; entry: IStreamEntry }[] = [];\n for (const stateElement of activeStateElements) {\n for (const entry of getStreamEntries(stateElement).values()) {\n for (const dep of entry.depAddresses) {\n if (batch.has(dep)) {\n hits.push({ stateElement, entry });\n break;\n }\n }\n }\n }\n for (const { stateElement, entry } of hits) {\n // 先行 restart の source / args 同期実行は他要素の切断や同一要素の _state 同期再 set を\n // 行い得るため、実行時に再チェックする(live な Set / registry ビューで即時反映):\n // - 切断済み要素は skip(§3-2「未接続の stateElement の entry は restart しない」)\n // - entry が現行 registry のものでなければ skip — 同期再 set で置換された旧 entry を\n // restart すると、registry から到達不能なため abortAllStreams でも止められない\n // 孤児 consume run がリークする\n if (\n !activeStateElements.has(stateElement) ||\n getStreamEntries(stateElement).get(entry.name) !== entry\n ) {\n continue;\n }\n try {\n startStream(stateElement, entry);\n } catch (e) {\n entry.controller?.abort();\n // startStream 実行中(args / source の同期プレフィックス)の自己切断・同期再 set は\n // 上の再チェックではガードできない。切断済みだと updateStreamStatus の createState が\n // rootNode 不在で再 throw して drain リスナー外へ漏れる(後続 hits の restart を\n // 巻き添えにする)ため、entry がまだ現行の live entry である場合のみ error に\n // 正規化する(切断済みなら abortAllStreams が idle に戻し済み。§3-2 規範 3 / §5-1)。\n if (\n activeStateElements.has(stateElement) &&\n getStreamEntries(stateElement).get(entry.name) === entry\n ) {\n updateStreamStatus(stateElement, entry, \"error\", e);\n }\n }\n }\n}\n\nregisterUpdateBatchListener(restartStreamsOnUpdateBatch);\n","import { IStateElement } from \"../components/types\";\n\ninterface IDCCElement extends HTMLElement {\n readonly stateElement: IStateElement | null;\n}\n\nexport function getterFn(name: string) {\n return function (this: IDCCElement) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n let value: any;\n try {\n stateEl.createState(\"readonly\", (state) => {\n value = state[name];\n });\n } catch (e) {\n console.warn(`[@wcstack/state] DCC getter \"${name}\" failed:`, e);\n return undefined;\n }\n return value;\n };\n}\n\nexport function setterFn(name: string) {\n return function (this: IDCCElement, value: any) {\n const stateEl = this.stateElement;\n if (!stateEl) return;\n stateEl.initializePromise.then(() => {\n stateEl.createState(\"writable\", (state) => {\n state[name] = value;\n });\n });\n };\n}\n\nexport function callFn(name: string, isAsync: boolean) {\n if (isAsync) {\n return function (this: IDCCElement, ...args: any[]) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n return stateEl.initializePromise.then(() => {\n let result: any;\n return stateEl.createStateAsync(\"writable\", async (state) => {\n result = await state[name](...args);\n }).then(() => result);\n });\n };\n }\n return function (this: IDCCElement, ...args: any[]) {\n const stateEl = this.stateElement;\n if (!stateEl) return undefined;\n return stateEl.initializePromise.then(() => {\n let result: any;\n stateEl.createState(\"writable\", (state) => {\n result = state[name](...args);\n });\n return result;\n });\n };\n}\n\nexport function isInternalProperty(name: string): boolean {\n return name.startsWith(\"$\");\n}\n","// wc-bindable protocol manifest types — single source of truth in /protocol/wc-bindable.ts.\nexport type {\n IWcBindable, IWcBindableProperty, IWcBindableInput, IWcBindableCommand,\n} from \"../protocol/wcBindable.js\";\n// This module also uses the types in its runtime helpers below, so import them into scope.\nimport type { IWcBindable, IWcBindableProperty } from \"../protocol/wcBindable.js\";\n\nexport function createWcBindable(tagName: string, bindables: string[]): IWcBindable {\n const properties: IWcBindableProperty[] = bindables.map((propName) => ({\n name: propName,\n event: `${tagName}:${propName}-changed`,\n }));\n return {\n protocol: \"wc-bindable\",\n version: 1,\n properties,\n };\n}\n\nexport function createBindableEventMap(tagName: string, bindables: string[]): Record<string, string> {\n const map: Record<string, string> = {};\n for (const propName of bindables) {\n map[propName] = `${tagName}:${propName}-changed`;\n }\n return map;\n}\n","import { IState } from \"../types\";\nimport { DCC_DEFINITION_ATTRIBUTE, STATE_BINDABLES_NAME } from \"../define\";\nimport { config } from \"../config\";\nimport { raiseError } from \"../raiseError\";\nimport { getterFn, setterFn, callFn, isInternalProperty } from \"./dccPropertyFactories\";\nimport { createWcBindable, createBindableEventMap, IWcBindable } from \"./wcBindable\";\nimport { State } from \"../components/State\";\n\nexport function defineDCC(hostElement: Element, shadowRoot: ShadowRoot, state: IState): void {\n const tagName = hostElement.tagName.toLowerCase();\n\n // バリデーション\n if (!tagName.includes(\"-\")) {\n raiseError(`DCC: \"${tagName}\" is not a valid custom element name (must contain a hyphen).`);\n }\n if (customElements.get(tagName)) {\n // 既に登録済みならスキップ(重複定義の検知のため警告は出す)\n console.warn(`[@wcstack/state] DCC: \"${tagName}\" is already registered. Skipping redefinition.`);\n return;\n }\n\n // ShadowRoot は cloneNode 不可のため、template 経由で内容をクローン\n const template = document.createElement(\"template\");\n template.innerHTML = shadowRoot.innerHTML;\n const shadowRootMode = shadowRoot.mode as ShadowRootMode;\n\n // $bindables から wcBindable + bindableEventMap を生成\n const bindables: string[] = Array.isArray(state[STATE_BINDABLES_NAME])\n ? state[STATE_BINDABLES_NAME]\n : [];\n const wcBindable: IWcBindable | null = bindables.length > 0\n ? createWcBindable(tagName, bindables)\n : null;\n const bindableEventMap: Record<string, string> = bindables.length > 0\n ? createBindableEventMap(tagName, bindables)\n : {};\n\n // DCC クラス生成\n const stateTagSelector = `${config.tagNames.state}:not([name])` as const;\n\n const DCCElement = class extends HTMLElement {\n static template = template;\n static shadowRootMode = shadowRootMode;\n static wcBindable = wcBindable;\n static bindableEventMap = bindableEventMap;\n\n private _shadow: ShadowRoot | null = null;\n\n connectedCallback() {\n if (this.hasAttribute(DCC_DEFINITION_ATTRIBUTE)) return;\n this._shadow = this.attachShadow({ mode: DCCElement.shadowRootMode });\n this._shadow.appendChild(DCCElement.template.content.cloneNode(true));\n\n // bindableEventMap の設定\n if (Object.keys(DCCElement.bindableEventMap).length > 0) {\n const stateEl = this._shadow.querySelector(stateTagSelector) as State | null;\n if (stateEl) {\n stateEl.initializePromise.then(() => {\n stateEl.setBindableEventMap(DCCElement.bindableEventMap);\n });\n }\n }\n }\n\n get stateElement() {\n return this._shadow?.querySelector(stateTagSelector) as State | null;\n }\n };\n\n // state プロパティを走査して DCC クラスのプロトタイプにgetter/setter/methodを定義\n const descriptors = Object.getOwnPropertyDescriptors(state);\n for (const [name, desc] of Object.entries(descriptors)) {\n if (isInternalProperty(name)) continue;\n\n const newDesc: PropertyDescriptor = { configurable: true, enumerable: true };\n if (typeof desc.value === \"function\") {\n const isAsync = desc.value.constructor?.name === \"AsyncFunction\";\n newDesc.value = callFn(name, isAsync);\n } else {\n newDesc.get = getterFn(name);\n newDesc.set = setterFn(name);\n }\n Object.defineProperty(DCCElement.prototype, name, newDesc);\n }\n\n // カスタム要素登録\n customElements.define(tagName, DCCElement);\n}\n","/**\n * getResolvedPathInfo.ts\n *\n * Utility for parsing and generating detailed path information (IResolvedPathInfo)\n * from State property names (path strings), including wildcard and index information.\n *\n * Main responsibilities:\n * - Breaks down property names to determine presence and type of wildcards and indexes\n * - Automatically determines wildcard type: context/all/partial/none\n * - Caches by path for reusability and performance\n * - Retrieves structured path information via getStructuredPathInfo\n *\n * Design points:\n * - Caches using Map to handle reserved words like \"constructor\" and \"toString\"\n * - Flexibly determines wildcards (*) and numeric indexes, storing them in wildcardIndexes\n * - context type indicates unresolved indexes, all type indicates all resolved indexes, partial type indicates mixed\n * - ResolvedPathInfo class centralizes path parsing and information management\n */\nimport { IResolvedAddress, WildcardType } from './types';\nimport { getPathInfo } from './PathInfo';\n\n/**\n * Cache for resolved path information.\n * Uses Map to safely handle property names including reserved words like \"constructor\" and \"toString\".\n */\nconst _cache: Map<string, IResolvedAddress> = new Map();\n\n/**\n * Class that parses and stores resolved path information.\n * \n * Analyzes property path strings to extract:\n * - Path segments and their hierarchy\n * - Wildcard locations and types\n * - Numeric indexes vs unresolved wildcards\n * - Wildcard type classification (none/context/all/partial)\n */\nclass ResolvedAddress implements IResolvedAddress {\n readonly path;\n readonly segments;\n readonly paths;\n readonly wildcardCount;\n readonly wildcardType;\n readonly wildcardIndexes;\n readonly pathInfo;\n \n /**\n * Constructs resolved path information from a property path string.\n * \n * Parses the path to identify wildcards (*) and numeric indexes,\n * classifies the wildcard type, and generates structured path information.\n * \n * @param name - Property path string (e.g., \"items.*.name\" or \"data.0.value\")\n */\n constructor(path: string) {\n // Split path into individual segments\n const segments = path.split(\".\");\n const tmpPatternSegments = segments.slice();\n const paths = [];\n let incompleteCount = 0; // Count of unresolved wildcards (*)\n let completeCount = 0; // Count of resolved wildcards (numeric indexes)\n let lastPath = \"\";\n let wildcardCount = 0;\n let wildcardType: WildcardType = \"none\";\n const wildcardIndexes: (number | null)[] = [];\n \n // Process each segment to identify wildcards and indexes\n for(let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (segment === \"*\") {\n // Unresolved wildcard\n tmpPatternSegments[i] = \"*\";\n wildcardIndexes.push(null);\n incompleteCount++;\n wildcardCount++;\n } else {\n const number = Number(segment);\n if (!Number.isNaN(number)) {\n // Numeric index - treat as resolved wildcard\n tmpPatternSegments[i] = \"*\";\n wildcardIndexes.push(number);\n completeCount++;\n wildcardCount++;\n }\n }\n // Build cumulative path array\n lastPath += segment;\n paths.push(lastPath);\n lastPath += (i < segment.length - 1 ? \".\" : \"\");\n }\n // Generate pattern string with wildcards normalized\n const structuredPath = tmpPatternSegments.join(\".\");\n const pathInfo = getPathInfo(structuredPath);\n \n // Classify wildcard type based on resolved vs unresolved counts\n if (incompleteCount > 0 || completeCount > 0) {\n if (incompleteCount === wildcardCount) {\n // All wildcards are unresolved - need context to resolve\n wildcardType = \"context\";\n } else if (completeCount === wildcardCount) {\n // All wildcards are resolved with numeric indexes\n wildcardType = \"all\";\n } else {\n // Mix of resolved and unresolved wildcards\n wildcardType = \"partial\";\n }\n }\n this.path = path;\n this.segments = segments;\n this.paths = paths;\n this.wildcardCount = wildcardCount;\n this.wildcardType = wildcardType;\n this.wildcardIndexes = wildcardIndexes;\n this.pathInfo = pathInfo;\n }\n}\n\n/**\n * Retrieves or creates resolved path information for a property path.\n * \n * This function caches resolved path information for performance.\n * On first access, it parses the path and creates a ResolvedPathInfo instance.\n * Subsequent accesses return the cached result.\n * \n * @param name - Property path string (e.g., \"items.*.name\", \"data.0.value\")\n * @returns Resolved path information containing segments, wildcards, and type classification\n */\nexport function getResolvedAddress(name:string):IResolvedAddress {\n let nameInfo: IResolvedAddress | undefined;\n // Return cached value or create, cache, and return new instance\n return _cache.get(name) ?? (_cache.set(name, nameInfo = new ResolvedAddress(name)), nameInfo);\n}","/**\n * connectedCallback.ts\n *\n * StateClassのライフサイクルフック「$connectedCallback」を呼び出すユーティリティ関数です。\n *\n * 主な役割:\n * - オブジェクト(target)に$connectedCallbackメソッドが定義されていれば呼び出す\n * - コールバックはtargetのthisコンテキストで呼び出し、IReadonlyStateProxy(receiver)を引数として渡す\n * - 非同期関数として実行可能(await対応)\n *\n * 設計ポイント:\n * - Reflect.getで$connectedCallbackプロパティを安全に取得\n * - 存在しない場合は何もしない\n * - ライフサイクル管理やカスタム初期化処理に利用\n */\n\nimport { STATE_CONNECTED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\nexport async function connectedCallback(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n _handler: IStateHandler\n):Promise<void> {\n const callback = Reflect.get(target, STATE_CONNECTED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n await callback.call(receiver);\n }\n}","/**\n * disconnectedCallback.ts\n *\n * StateClassのライフサイクルフック「$disconnectedCallback」を呼び出すユーティリティ関数です。\n *\n * 主な役割:\n * - オブジェクト(target)に$disconnectedCallbackメソッドが定義されていれば呼び出す\n * - コールバックはtargetのthisコンテキストで呼び出し、IReadonlyStateProxy(receiver)を引数として渡す\n *\n * 設計ポイント:\n * - Reflect.getで$disconnectedCallbackプロパティを安全に取得\n * - 存在しない場合は何もしない\n * - ライフサイクル管理やクリーンアップ処理に利用\n */\n\nimport { STATE_DISCONNECTED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\nexport function disconnectedCallback(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n _handler: IStateHandler\n): void {\n const callback = Reflect.get(target, STATE_DISCONNECTED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n callback.call(receiver);\n }\n}\n","import { IAbsoluteStateAddress } from \"../address/types\";\nimport { ICacheEntry } from \"./types\";\n\nconst cacheEntryByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, ICacheEntry> = new WeakMap();\n\nexport function getCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress\n): ICacheEntry | null {\n return cacheEntryByAbsoluteStateAddress.get(address) ?? null;\n}\n\nexport function setCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress,\n cacheEntry: ICacheEntry | null\n): void {\n if (cacheEntry === null) {\n cacheEntryByAbsoluteStateAddress.delete(address);\n } else {\n cacheEntryByAbsoluteStateAddress.set(address, cacheEntry);\n }\n}\n\nexport function dirtyCacheEntryByAbsoluteStateAddress(\n address: IAbsoluteStateAddress\n): void {\n const cacheEntry = cacheEntryByAbsoluteStateAddress.get(address);\n if (cacheEntry) {\n cacheEntry.dirty = true;\n }\n}","import { calcWildcardLen } from \"../../address/calcWildcardLen\";\nimport { IStateAddress } from \"../../address/types\";\nimport { IStateHandler } from \"../types\";\n\nexport function checkDependency(\n handler: IStateHandler,\n address: IStateAddress,\n): void {\n // 動的依存関係の登録\n if (handler.addressStackLength > 0) {\n const lastAddress = handler.lastAddressStack;\n const lastInfo = lastAddress?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null) {\n if (stateElement.getterPaths.has(lastInfo.path) &&\n lastInfo.path !== address.pathInfo.path) {\n // lastInfo.pathはgetterの名前であり、address.pathInfo.pathは\n // そのgetterが参照している値のパスである\n stateElement.addDynamicDependency(address.pathInfo.path, lastInfo.path);\n // 他行読み取りの検出: 評価中の getter と読み取り先が同じワイルドカード親\n // (リスト)を共有し、その階層の listIndex が異なる場合、この getter は\n // 自行の外に依存する(隣接項目参照など)。該当リストを crossRowListPaths に\n // 記録し、walkDependency の diff-filter 展開を全行展開へフォールバックさせる。\n if (address.pathInfo.wildcardCount > 0 && lastInfo.wildcardCount > 0) {\n const sharedLen = calcWildcardLen(address.pathInfo, lastInfo);\n if (sharedLen > 0) {\n let crossRow = false;\n for (let level = 0; level < sharedLen; level++) {\n if (address.listIndex?.at(level) !== lastAddress!.listIndex?.at(level)) {\n crossRow = true;\n break;\n }\n }\n if (crossRow) {\n for (let level = 0; level < sharedLen; level++) {\n stateElement.addCrossRowListPath?.(address.pathInfo.wildcardParentPaths[level]);\n }\n }\n }\n }\n }\n }\n }\n}","/**\n * getByAddress.ts\n *\n * StateClassの内部APIとして、構造化パス情報(IStructuredPathInfo)とリストインデックス(IListIndex)を指定して\n * 状態オブジェクト(target)から値を取得するための関数(getByAddress)の実装です。\n *\n * 主な役割:\n * - 指定されたパス・インデックスに対応するState値を取得(多重ループやワイルドカードにも対応)\n * - 依存関係の自動登録(checkDependencyで登録)\n * - キャッシュ機構(リストもキャッシュ対象)\n * - getter経由で値取得時はpushAddressでスコープを一時設定\n * - 存在しない場合は親pathAddressやlistIndexを辿って再帰的に値を取得\n *\n * 設計ポイント:\n * - checkDependencyで依存追跡を実行 \n * - キャッシュ有効時はstateAddressで値をキャッシュし、取得・再利用を最適化\n * - ワイルドカードや多重ループにも柔軟に対応し、再帰的な値取得を実現\n * - finallyでキャッシュへの格納を保証\n */\n\nimport { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { IStateAddress } from \"../../address/types\";\nimport { getCacheEntryByAbsoluteStateAddress, setCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { getCommandNamespace } from \"../../command/commandNamespace\";\nimport { IStateElement } from \"../../components/types\";\nimport { STATE_COMMAND_NAMESPACE_NAME, STATE_STREAM_ERROR_NAMESPACE_NAME, STATE_STREAM_STATUS_NAMESPACE_NAME, WILDCARD } from \"../../define\";\nimport { raiseError } from \"../../raiseError\";\nimport { collectStreamDependency } from \"../../stream/argsTrace\";\nimport { getStreamErrorNamespace, getStreamStatusNamespace } from \"../../stream/streamNamespace\";\nimport { IStateHandler } from \"../types\";\nimport { checkDependency } from \"./checkDependency\";\n\n/**\n * namespace 配下のパスは raw state を持たないため、proxy の get トラップと同じ\n * namespace オブジェクトを辿る。1セグメント目は namespace 本体、2セグメント目以降は\n * namespace 上のキーを順に走査する。走査値が object / function 以外(null /\n * undefined / primitive の葉)になったら undefined を返す — 葉より深い読み\n * (例: `$streamStatus.<name>.<key>`、error が primitive throw のときの\n * `$streamError.<name>.message`)は宣言外アクセスと同じ undefined 解決とし、\n * Reflect.get の non-object TypeError を updater の drain に漏らさない\n * (§4-1 の throw しない寛容規約)。\n */\nfunction walkNamespace(namespace: object, segments: string[]): any {\n let value: any = namespace;\n for (let i = 1; i < segments.length; i++) {\n // Object(v) !== v は「v が object / function でない」(= primitive / null / undefined)判定\n if (Object(value) !== value) {\n return undefined;\n }\n value = Reflect.get(value, segments[i]);\n }\n return value;\n}\n\nfunction _getByAddress(\n target : object,\n address : IStateAddress,\n receiver : any,\n handler : IStateHandler,\n stateElement: IStateElement,\n): any {\n const firstSegment = address.pathInfo.segments[0];\n if (firstSegment === STATE_COMMAND_NAMESPACE_NAME) {\n // $command 名前空間: キーは宣言済み command token 名\n return walkNamespace(getCommandNamespace(stateElement), address.pathInfo.segments);\n }\n if (firstSegment === STATE_STREAM_STATUS_NAMESPACE_NAME) {\n // $streamStatus / $streamError 名前空間: キーは宣言済み stream 名\n // (registry entry が正本の thin gateway、docs/state-streams-design.md §4-2)。\n // setByAddress の親走査もここを通るため、子への Reflect.set が namespace proxy の\n // raiseError に到達する = 書き込み防御(S11)もこの分岐で成立する。\n return walkNamespace(getStreamStatusNamespace(stateElement), address.pathInfo.segments);\n }\n if (firstSegment === STATE_STREAM_ERROR_NAMESPACE_NAME) {\n return walkNamespace(getStreamErrorNamespace(stateElement), address.pathInfo.segments);\n }\n if (address.pathInfo.path in target) {\n // getterの中で参照の可能性があるので、addressをプッシュする\n if (stateElement.getterPaths.has(address.pathInfo.path)) {\n handler.pushAddress(address);\n try {\n return Reflect.get(target, address.pathInfo.path, receiver);\n } finally {\n handler.popAddress();\n }\n } else {\n return Reflect.get(target, address.pathInfo.path);\n }\n } else {\n const parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n const parentValue = getByAddress(target, parentAddress, receiver, handler);\n const lastSegment = address.pathInfo.segments[address.pathInfo.segments.length - 1];\n if (lastSegment === WILDCARD) {\n const index = address.listIndex?.index ?? raiseError(`address.listIndex?.index is undefined path: ${address.pathInfo.path}`);\n return Reflect.get(parentValue, index);\n } else {\n return Reflect.get(parentValue, lastSegment);\n }\n }\n}\n\nfunction _getByAddressWithCache(\n target : object, \n address : IStateAddress,\n receiver : any,\n handler : IStateHandler,\n stateElement: IStateElement\n): any {\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const cacheEntry = getCacheEntryByAbsoluteStateAddress(absAddress);\n if (cacheEntry !== null && cacheEntry.dirty === false) {\n return cacheEntry.value;\n }\n const value = _getByAddress(target, address, receiver, handler, stateElement);\n setCacheEntryByAbsoluteStateAddress(absAddress, {\n value: value,\n dirty: false\n });\n return value;\n}\n\nexport function getByAddress(\n target : object,\n address : IStateAddress,\n receiver : any,\n handler : IStateHandler\n): any {\n checkDependency(handler, address);\n // $streams の args トレース中のみ絶対アドレスを捕捉(collector 非活性なら即 return)\n collectStreamDependency(handler.stateElement, address);\n const stateElement = handler.stateElement;\n const cacheable = address.pathInfo.wildcardCount > 0 || \n stateElement.getterPaths.has(address.pathInfo.path);\n if (cacheable) {\n return _getByAddressWithCache(target, address, receiver, handler, stateElement);\n } else {\n return _getByAddress(target, address, receiver, handler, stateElement);\n }\n}\n","/**\n * getContextListIndex.ts\n *\n * Stateの内部APIとして、現在のプロパティ参照スコープにおける\n * 指定したstructuredPath(ワイルドカード付きプロパティパス)に対応する\n * リストインデックス(IListIndex)を取得する関数です。\n *\n * 主な役割:\n * - handlerの最後にアクセスされたAddressから、指定パスに対応するリストインデックスを取得\n * - ワイルドカード階層に対応し、多重ループやネストした配列バインディングにも利用可能\n *\n * 設計ポイント:\n * - 直近のプロパティ参照情報を取得\n * - info.indexByWildcardPathからstructuredPathのインデックスを特定\n * - listIndex.at(index)で該当階層のリストインデックスを取得\n * - パスが一致しない場合や参照が存在しない場合はnullを返す\n */\n\nimport { IListIndex } from \"../../list/types\";\nimport { IStateHandler } from \"../types\";\n\nexport function getContextListIndex(\n handler: IStateHandler,\n structuredPath: string\n): IListIndex | null {\n if (handler.addressStackLength === 0) {\n return null;\n }\n const address = handler.lastAddressStack;\n if (address === null) {\n return null;\n }\n const index: number | undefined = address.pathInfo.indexByWildcardPath[structuredPath];\n if (typeof index === \"undefined\") {\n return null;\n }\n return address.listIndex?.at(index) ?? null;\n}\n","import { IStateAddress } from \"../../address/types\";\nimport { ISwapInfo } from \"./types\";\n\nconst swapInfoByStateAddress: WeakMap<IStateAddress, ISwapInfo> = new WeakMap();\n\nexport function getSwapInfoByAddress(address: IStateAddress): ISwapInfo | null {\n return swapInfoByStateAddress.get(address) ?? null;\n}\n\nexport function setSwapInfoByAddress(address: IStateAddress, swapInfo: ISwapInfo | null): void {\n if (swapInfo === null) {\n swapInfoByStateAddress.delete(address);\n } else {\n swapInfoByStateAddress.set(address, swapInfo);\n }\n}\n","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { calcWildcardLen } from \"../address/calcWildcardLen\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { createStateAddress } from \"../address/StateAddress\";\nimport { IPathInfo, IStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { WILDCARD } from \"../define\";\nimport { createListDiff } from \"../list/createListDiff\";\nimport { getLastListValueByAbsoluteStateAddress } from \"../list/lastListValueByAbsoluteStateAddress\";\nimport { IListDiff, IListIndex } from \"../list/types\";\nimport { getByAddressSymbol } from \"../proxy/symbols\";\nimport { IStateProxy } from \"../proxy/types\";\nimport { raiseError } from \"../raiseError\";\nimport { SearchType } from \"./types\";\n\nconst MAX_DEPENDENCY_DEPTH = 1000;\n\nfunction getIndexes(listDiff: IListDiff, searchType: SearchType): Iterable<IListIndex> {\n switch (searchType) {\n case \"old\":\n return listDiff.oldIndexes;\n case \"new\":\n return listDiff.newIndexes;\n case \"add\":\n return listDiff.addIndexSet;\n case \"change\":\n return listDiff.changeIndexSet;\n case \"delete\":\n return listDiff.deleteIndexSet;\n default: \n if (config.debug) {\n console.log(`Invalid search type: ${searchType}`);\n }\n return [];\n }\n}\n\ntype ExpandContext = {\n readonly stateName: string,\n readonly stateElement: IStateElement,\n readonly targetPathInfo: IPathInfo,\n readonly targetListIndexes: IListIndex[],\n readonly wildcardPaths: string[],\n readonly wildcardParentPaths: string[],\n readonly stateProxy: IStateProxy,\n readonly searchType: SearchType\n}\n\nfunction _walkExpandWildcard(\n context: ExpandContext, \n currentWildcardIndex: number,\n parentListIndex: IListIndex | null\n): void {\n const parentPath = context.wildcardParentPaths[currentWildcardIndex];\n const parentPathInfo = getPathInfo(parentPath);\n const parentAbsPathInfo = getAbsolutePathInfo(context.stateElement, parentPathInfo);\n const parentAddress = createStateAddress(parentPathInfo, parentListIndex);\n const parentAbsAddress = createAbsoluteStateAddress(parentAbsPathInfo, parentListIndex);\n const lastValue = getLastListValueByAbsoluteStateAddress(parentAbsAddress);\n const newValue = context.stateProxy[getByAddressSymbol](parentAddress);\n const listDiff = createListDiff(parentAddress.listIndex, lastValue, newValue);\n\n const loopIndexes = getIndexes(listDiff, context.searchType);\n if (currentWildcardIndex === context.wildcardPaths.length - 1) {\n context.targetListIndexes.push(...loopIndexes);\n } else {\n for(const listIndex of loopIndexes) {\n _walkExpandWildcard(\n context,\n currentWildcardIndex + 1,\n listIndex\n );\n }\n }\n}\n\n/**\n * 静的子展開(list → list.*)の展開範囲。\n * - \"full\": 新リストの全行を展開する(従来挙動)。\n * - \"diff\": 追加行(addIndexSet)と位置が変わった行(changeIndexSet)のみ展開する。\n * 未変更行は値が変わらないため dirty 化・再適用が不要(リスト置換のコストが\n * 既存行数に比例するスケーリング欠陥の解消。docs/list-replacement-dependency-scaling.md)。\n * 削除時の集計 getter は $getAll / $resolve がリスト本体(コンテナ)を読むことで\n * 登録される動的エッジ(list → 集計 getter)が担う。\n */\nexport type ListExpansion = \"full\" | \"diff\";\n\ntype Context = {\n readonly stateName: string,\n readonly stateElement: IStateElement,\n readonly staticMap: Map<string, string[]>,\n readonly dynamicMap: Map<string, string[]>,\n readonly result: Set<IStateAddress>,\n readonly listPathSet: Set<string>,\n readonly visited: Set<IStateAddress>,\n readonly stateProxy: IStateProxy,\n readonly searchType: SearchType,\n readonly listExpansion: ListExpansion,\n}\n\n/**\n * 静的子展開で訪問する listIndex 群を選ぶ。\"diff\" でも次の場合は全行に倒す:\n * - diff に変化が一切見えない再代入(同一参照および内容同一コピーの再代入。\n * `arr[0].v = 5; s.items = [...arr]` のような in-place 変異後のリフレッシュ\n * イディオムは diff に映らないため、全行展開で従来挙動を保つ。\n * 削除だけの置換は除く — 残存行に変化は無く、集計はコンテナ動的エッジが担う)\n * - 他行を読む getter が検出されたリスト(隣接項目参照など。未変更行の派生値も変わりうる)\n */\nfunction selectExpansionIndexes(\n context: Context,\n sourcePath: string,\n _lastValue: unknown,\n _newValue: unknown,\n listDiff: IListDiff,\n): Iterable<IListIndex> {\n if (context.listExpansion === \"full\") {\n return listDiff.newIndexes;\n }\n if (context.stateElement.crossRowListPaths?.has(sourcePath)) {\n return listDiff.newIndexes;\n }\n if (listDiff.addIndexSet.size === 0 && listDiff.changeIndexSet.size === 0) {\n // 追加も移動も無い。削除も無ければ「変化が見えない再代入」= リフレッシュ意図\n if (listDiff.deleteIndexSet.size === 0) {\n return listDiff.newIndexes;\n }\n // 削除のみ: 残存行は位置も値も不変なので展開しない\n return listDiff.changeIndexSet;\n }\n if (listDiff.addIndexSet.size === 0) {\n return listDiff.changeIndexSet;\n }\n if (listDiff.changeIndexSet.size === 0) {\n return listDiff.addIndexSet;\n }\n return [...listDiff.addIndexSet, ...listDiff.changeIndexSet];\n}\n\ntype StackEntry = { address: IStateAddress, depth: number };\n\nfunction _walkDependency(\n context: Context,\n startAddress: IStateAddress,\n callback: (address: IStateAddress) => void\n): void {\n const stack: StackEntry[] = [{ address: startAddress, depth: 0 }];\n\n while (stack.length > 0) {\n const { address, depth } = stack.pop()!;\n if (depth > MAX_DEPENDENCY_DEPTH) {\n raiseError(`Maximum dependency depth of ${MAX_DEPENDENCY_DEPTH} exceeded. Possible circular dependency detected at path: ${address.pathInfo.path}`);\n }\n if (context.visited.has(address)) {\n continue;\n }\n context.visited.add(address);\n callback(address);\n const sourcePath = address.pathInfo.path;\n const nextDepth = depth + 1;\n\n // 依存アドレスを逆順でpushするための一時バッファ\n const nextEntries: StackEntry[] = [];\n\n /**\n * パスから依存関係をたどる\n * users.*.name <= users.* <= users\n * ただし、users がリストであれば users.* の依存関係は展開する\n */\n const staticDeps = context.staticMap.get(sourcePath);\n if (staticDeps) {\n for(const dep of staticDeps) {\n const depPathInfo = getPathInfo(dep);\n if (context.listPathSet.has(sourcePath) && depPathInfo.lastSegment === WILDCARD) {\n //expand indexes\n const newValue = context.stateProxy[getByAddressSymbol](address);\n const absPathInfo = getAbsolutePathInfo(context.stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const lastValue = getLastListValueByAbsoluteStateAddress(absAddress);\n const listDiff = createListDiff(address.listIndex, lastValue, newValue);\n for(const listIndex of selectExpansionIndexes(context, sourcePath, lastValue, newValue, listDiff)) {\n const depAddress = createStateAddress(depPathInfo, listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n } else {\n const depAddress = createStateAddress(depPathInfo, address.listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n }\n }\n /**\n * 動的依存関係をたどる\n * 動的依存関係は、getterの実行時に決定される\n *\n * source, target\n *\n * products.*.price => products.*.tax\n * get \"products.*.tax\"() { return this[\"products.*.price\"] * 0.1; }\n *\n * products.*.price => products.summary\n * get \"products.summary\"() { return this.$getAll(\"products.*.price\", []).reduce(sum); }\n *\n * categories.*.name => categories.*.products.*.categoryName\n * get \"categories.*.products.*.categoryName\"() { return this[\"categories.*.name\"]; }\n */\n const dynamicDeps = context.dynamicMap.get(sourcePath);\n if (dynamicDeps) {\n for(const dep of dynamicDeps) {\n const depPathInfo = getPathInfo(dep);\n const listIndexes: (IListIndex | null)[] = [];\n if (depPathInfo.wildcardCount > 0) {\n // ワイルドカードを含む依存関係の処理\n // 同じ親を持つかをパスの集合積で判定する\n // polyfills.tsにてSetのintersectionメソッドを定義している\n const wildcardLen = calcWildcardLen(address.pathInfo, depPathInfo);\n const expandable = (depPathInfo.wildcardCount - wildcardLen) >= 1;\n if (expandable) {\n let listIndex: IListIndex | null;\n if (wildcardLen > 0) {\n // categories.*.name => categories.*.products.*.categoryName\n // ワイルドカードを含む同じ親(products.*)を持つのが、\n // さらに下位にワイルドカードがあるので展開する\n if (address.listIndex === null) {\n raiseError(`Cannot expand dynamic dependency with wildcard for non-list address: ${address.pathInfo.path}`);\n }\n listIndex = address.listIndex!.at(wildcardLen - 1);\n } else {\n // selectedIndex => items.*.selected\n // 同じ親を持たない場合はnullから開始\n listIndex = null;\n }\n const expandContext: ExpandContext = {\n stateName: context.stateName,\n stateElement: context.stateElement,\n targetPathInfo: depPathInfo,\n targetListIndexes: [],\n wildcardPaths: depPathInfo.wildcardPaths,\n wildcardParentPaths: depPathInfo.wildcardParentPaths,\n stateProxy: context.stateProxy,\n searchType: context.searchType,\n };\n _walkExpandWildcard(expandContext, wildcardLen, listIndex);\n listIndexes.push(...expandContext.targetListIndexes);\n } else {\n // products.*.price => products.*.tax\n // ワイルドカードを含む同じ親(products.*)を持つので、リストインデックスは引き継ぐ\n if (address.listIndex === null) {\n raiseError(`Cannot expand dynamic dependency with wildcard for non-list address: ${address.pathInfo.path}`);\n }\n const listIndex = address.listIndex.at(wildcardLen - 1);\n listIndexes.push(listIndex);\n }\n } else {\n // products.*.tax => currentTaxRate\n // 同じ親を持たないので、リストインデックスはnull\n listIndexes.push(null);\n }\n for(const listIndex of listIndexes) {\n const depAddress = createStateAddress(depPathInfo, listIndex);\n context.result.add(depAddress);\n nextEntries.push({ address: depAddress, depth: nextDepth });\n }\n }\n }\n\n // 逆順でpushして、元の再帰と同じ探索順序を保つ\n for(let i = nextEntries.length - 1; i >= 0; i--) {\n stack.push(nextEntries[i]);\n }\n }\n}\n\nexport function walkDependency(\n stateName: string,\n stateElement: IStateElement,\n startAddress: IStateAddress,\n staticDependency: Map<string, string[]>,\n dynamicDependency: Map<string, string[]>,\n listPathSet: Set<string>,\n stateProxy: IStateProxy,\n searchType: SearchType,\n callback: (address: IStateAddress) => void,\n options?: { listExpansion?: ListExpansion }\n): IStateAddress[] {\n const context: Context = {\n stateName: stateName,\n stateElement: stateElement,\n staticMap: staticDependency,\n dynamicMap: dynamicDependency,\n result: new Set<IStateAddress>(),\n listPathSet: listPathSet,\n visited: new Set<IStateAddress>(),\n stateProxy: stateProxy,\n searchType: searchType,\n listExpansion: options?.listExpansion ?? \"full\",\n };\n _walkDependency(context, startAddress, callback);\n return Array.from(context.result);\n}\n","/**\n * setByAddress.ts\n *\n * Stateの内部APIとして、アドレス情報(IStateAddress)を指定して\n * 状態オブジェクト(target)に値を設定するための関数(setByAddress)の実装です。\n *\n * 主な役割:\n * - 指定されたパス・インデックスに対応するState値を設定(多重ループやワイルドカードにも対応)\n * - getter/setter経由で値設定時はpushAddressでスコープを一時設定\n * - 存在しない場合は親pathInfoやlistIndexを辿って再帰的に値を設定\n * - 設定後はupdater.enqueueUpdateAddressで更新情報を登録\n *\n * 設計ポイント:\n * - ワイルドカードや多重ループにも柔軟に対応し、再帰的な値設定を実現\n * - finallyで必ず更新情報を登録し、再描画や依存解決に利用\n * - getter/setter経由のスコープ切り替えも考慮した設計\n */\n\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { IAbsoluteStateAddress, IStateAddress } from \"../../address/types\";\nimport { WILDCARD } from \"../../define\";\nimport { createListIndex } from \"../../list/createListIndex\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { raiseError } from \"../../raiseError\";\nimport { getUpdater } from \"../../updater/updater\";\nimport { IStateHandler, IStateProxy } from \"../types\";\nimport { getByAddress } from \"./getByAddress\";\nimport { getSwapInfoByAddress, setSwapInfoByAddress } from \"./swapInfo\";\nimport { walkDependency } from \"../../dependency/walkDependency\";\nimport { dirtyCacheEntryByAbsoluteStateAddress, setCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { config } from \"../../config\";\n\nfunction _setByAddress(\n target : object, \n address : IStateAddress,\n absAddress: IAbsoluteStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n): any {\n try {\n if (address.pathInfo.path in target) {\n if (handler.stateElement.setterPaths.has(address.pathInfo.path)) {\n // setterの中で参照の可能性があるので、addressをプッシュする\n handler.pushAddress(address);\n try {\n return Reflect.set(target, address.pathInfo.path, value, receiver);\n } finally {\n handler.popAddress();\n }\n } else {\n return Reflect.set(target, address.pathInfo.path, value);\n }\n } else {\n const parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n const parentValue = getByAddress(target, parentAddress, receiver, handler);\n const lastSegment = address.pathInfo.segments[address.pathInfo.segments.length - 1];\n if (lastSegment === WILDCARD) {\n const index = address.listIndex?.index ?? raiseError(`address.listIndex?.index is undefined path: ${address.pathInfo.path}`);\n return Reflect.set(parentValue, index, value);\n } else {\n return Reflect.set(parentValue, lastSegment, value);\n }\n }\n } finally {\n const updater = getUpdater();\n updater.enqueueAbsoluteAddress(absAddress);\n // 依存関係のあるキャッシュを無効化(ダーティ)、更新対象として登録\n walkDependency(\n handler.stateName,\n handler.stateElement,\n address,\n handler.stateElement.staticDependency,\n handler.stateElement.dynamicDependency,\n handler.stateElement.listPaths,\n receiver as IStateProxy,\n \"new\",\n (depAddress: IStateAddress) => {\n // キャッシュを無効化(ダーティ)\n if (depAddress === address) return;\n const absDepPathInfo = getAbsolutePathInfo(handler.stateElement, depAddress.pathInfo);\n const absDepAddress = createAbsoluteStateAddress(absDepPathInfo, depAddress.listIndex);\n dirtyCacheEntryByAbsoluteStateAddress(absDepAddress);\n // 更新対象として登録\n updater.enqueueAbsoluteAddress(absDepAddress);\n },\n // リスト置換時は追加行・位置変更行のみ展開する(未変更行の再訪を省く。\n // $postUpdate の手動リフレッシュは従来通り全行展開のまま)\n { listExpansion: \"diff\" }\n )\n }\n}\n\nfunction _setByAddressWithSwap(\n target : object, \n address : IStateAddress,\n absAddress: IAbsoluteStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n) {\n // elementsの場合はswapInfoを準備\n let parentAddress = address.parentAddress ?? raiseError(`address.parentAddress is undefined path: ${address.pathInfo.path}`);\n let swapInfo = getSwapInfoByAddress(parentAddress);\n if (swapInfo === null) {\n const parentValue = getByAddress(target, parentAddress, receiver, handler) ?? [];\n const listIndexes = getListIndexesByList(parentValue) ?? [];\n swapInfo = {\n value: [...parentValue], listIndexes: [...listIndexes]\n }\n setSwapInfoByAddress(parentAddress, swapInfo);\n }\n try {\n return _setByAddress(target, address, absAddress, value, receiver, handler);\n } finally {\n const index = swapInfo.value.indexOf(value);\n const currentParentValue = getByAddress(target, parentAddress, receiver, handler) ?? [];\n const currentListIndexes = Array.isArray(currentParentValue) ? (getListIndexesByList(currentParentValue) ?? []) : [];\n const curIndex = address.listIndex!.index;\n const listIndex = (index !== -1) ? \n swapInfo!.listIndexes[index] : \n createListIndex(parentAddress.listIndex, -1);\n currentListIndexes[curIndex] = listIndex;\n // 重複チェック\n // 重複していない場合、swapが完了したとみなし、インデックスを更新\n const listValueSet = new Set(currentParentValue);\n if (listValueSet.size === swapInfo!.value.length) {\n for(let i = 0; i < currentListIndexes.length; i++) {\n currentListIndexes[i].index = i;\n }\n // 完了したのでswapInfoを削除\n setSwapInfoByAddress(parentAddress, null);\n }\n }\n}\n\nexport function setByAddress(\n target : object, \n address : IStateAddress,\n value : any, \n receiver : any,\n handler : IStateHandler\n): any {\n const stateElement = handler.stateElement;\n // --- same-value guard (config.sameValueGuard・既定 ON) ---\n // primitive 値かつ Object.is 同値なら、set / enqueue / walkDependency / DOM 適用 /\n // $updatedCallback / DCC イベントを丸ごとスキップ(標準的なリアクティブ no-op)。\n // 参照型(object/array)は in-place mutation 取りこぼし防止のため素通し(ガードしない)。\n if (config.sameValueGuard && (value === null || typeof value !== \"object\")) {\n const oldValue = getByAddress(target, address, receiver, handler);\n if (Object.is(oldValue, value)) {\n return true;\n }\n }\n // --- end same-value guard ---\n const isSwappable = stateElement.elementPaths.has(address.pathInfo.path);\n const cacheable = address.pathInfo.wildcardCount > 0 || \n stateElement.getterPaths.has(address.pathInfo.path);\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n try {\n if (isSwappable) {\n return _setByAddressWithSwap(target, address, absAddress, value, receiver, handler);\n } else {\n return _setByAddress(target, address, absAddress, value, receiver, handler);\n }\n } finally {\n if (cacheable) {\n setCacheEntryByAbsoluteStateAddress(absAddress, {\n value: value,\n dirty: false\n });\n }\n // DCC bindable イベントディスパッチ\n const eventName = stateElement.bindableEventMap[address.pathInfo.path];\n if (eventName) {\n const rootNode = stateElement.rootNode;\n if (rootNode instanceof ShadowRoot) {\n rootNode.host.dispatchEvent(new CustomEvent(eventName, {\n detail: value,\n bubbles: true,\n }));\n }\n }\n }\n}\n\n","/**\n * resolve.ts\n *\n * StateClassのAPIとして、パス(path)とインデックス(indexes)を指定して\n * Stateの値を取得・設定するための関数(resolve)の実装です。\n *\n * 主な役割:\n * - 文字列パス(path)とインデックス配列(indexes)から、該当するState値の取得・設定を行う\n * - ワイルドカードや多重ループを含むパスにも対応\n * - value未指定時は取得(getByRef)、指定時は設定(setByRef)を実行\n *\n * 設計ポイント:\n * - getStructuredPathInfoでパスを解析し、ワイルドカード階層ごとにリストインデックスを解決\n * - handler.engine.getListIndexesSetで各階層のリストインデックス集合を取得\n * - getByRef/setByRefで値の取得・設定を一元的に処理\n * - 柔軟なバインディングやAPI経由での利用が可能\n */\n\nimport { getPathInfo } from \"../../address/PathInfo\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { setByAddress } from \"../methods/setByAddress\";\nimport { IStateHandler } from \"../types\";\n\ntype ResolveFunction = (path: string, indexes: number[], value?: any) => any;\n\nexport function resolve(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): ResolveFunction {\n return (path: string, indexes: number[], value?: any): any => {\n const pathInfo = getPathInfo(path);\n if (handler.addressStackLength > 0) {\n const lastInfo = handler.lastAddressStack?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null && lastInfo.path !== pathInfo.path) {\n // gettersに含まれる場合は依存関係を登録\n if (stateElement.getterPaths.has(lastInfo.path)) {\n stateElement.addDynamicDependency(pathInfo.path, lastInfo.path);\n }\n }\n }\n\n if (pathInfo.wildcardParentPathInfos.length > indexes.length) {\n raiseError(`indexes length is insufficient: ${path}`);\n }\n // ワイルドカード階層ごとにListIndexを解決していく\n let listIndex: IListIndex | null = null;\n for(let i = 0; i < pathInfo.wildcardParentPathInfos.length; i++) {\n const wildcardParentPathInfo = pathInfo.wildcardParentPathInfos[i];\n const wildcardAddress = createStateAddress(wildcardParentPathInfo, listIndex);\n const tmpValue = getByAddress(target, wildcardAddress, receiver, handler);\n const listIndexes = getListIndexesByList(tmpValue);\n if (listIndexes == null) {\n raiseError(`ListIndexes not found: ${wildcardParentPathInfo.path}`);\n }\n const index = indexes[i];\n listIndex = listIndexes[index] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n }\n\n // ToDo:WritableかReadonlyかを判定して適切なメソッドを呼び出す\n const address = createStateAddress(pathInfo, listIndex);\n const hasSetValue = typeof value !== \"undefined\";\n if (!hasSetValue) {\n return getByAddress(target, address, receiver, handler);\n } else {\n setByAddress(target, address, value, receiver, handler);\n }\n };\n} ","/**\n * getAllReadonly\n *\n * ワイルドカードを含む State パスから、対象となる全要素を配列で取得する。\n * Throws: LIST-201(インデックス未解決)、BIND-201(ワイルドカード情報不整合)\n */\n\nimport { getPathInfo } from \"../../address/PathInfo\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IPathInfo, IStateAddress } from \"../../address/types\";\nimport { createListDiff } from \"../../list/createListDiff\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { getContextListIndex } from \"../methods/getContextListIndex\";\nimport { IStateHandler } from \"../types\";\nimport { resolve } from \"./resolve\";\n\n// ToDo: IAbsoluteStateAddressに変更する\nconst lastValueByListAddress = new WeakMap<IStateAddress, unknown[]>();\n\ntype GetAllFunction = (path: string, indexes?: number[]) => any[];\n\nexport function getAll(\n target: object, \n prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): GetAllFunction {\n const resolveFn = resolve(target, prop, receiver, handler);\n return (path: string, indexes?: number[]): any[] => {\n const newValueByAddress: Map<IStateAddress, any> = new Map();\n const pathInfo = getPathInfo(path);\n if (handler.addressStackLength > 0) {\n const lastInfo = handler.lastAddressStack?.pathInfo ?? null;\n const stateElement = handler.stateElement;\n if (lastInfo !== null && lastInfo.path !== pathInfo.path) {\n // gettersに含まれる場合は依存関係を登録\n if (stateElement.getterPaths.has(lastInfo.path)) {\n stateElement.addDynamicDependency(pathInfo.path, lastInfo.path);\n }\n }\n }\n \n if (typeof indexes === \"undefined\") {\n for(let i = 0; i < pathInfo.wildcardParentPathInfos.length; i++) {\n const wildcardPattern = pathInfo.wildcardParentPathInfos[i];\n const listIndex = getContextListIndex(handler, wildcardPattern.path);\n if (listIndex) {\n indexes = listIndex.indexes;\n break;\n }\n }\n if (typeof indexes === \"undefined\") {\n indexes = [];\n }\n }\n const walkWildcardPattern = (\n wildcardParentPathInfos: IPathInfo[],\n wildcardIndexPos: number,\n listIndex: IListIndex | null,\n indexes: number[],\n indexPos: number,\n parentIndexes: number[],\n results: number[][]\n ) => {\n const wildcardParentPathInfo = wildcardParentPathInfos[wildcardIndexPos] ?? null;\n if (wildcardParentPathInfo === null) {\n results.push(parentIndexes);\n return;\n }\n const wildcardAddress = createStateAddress(wildcardParentPathInfo, listIndex);\n const oldValue = lastValueByListAddress.get(wildcardAddress);\n const newValue = getByAddress(target, wildcardAddress, receiver, handler);\n const listDiff = createListDiff(listIndex, oldValue, newValue);\n const listIndexes = listDiff.newIndexes;\n const index = indexes[indexPos] ?? null;\n newValueByAddress.set(wildcardAddress, newValue);\n if (index === null) {\n for(let i = 0; i < listIndexes.length; i++) {\n const listIndex = listIndexes[i];\n walkWildcardPattern(\n wildcardParentPathInfos, \n wildcardIndexPos + 1, \n listIndex, \n indexes, \n indexPos + 1, \n parentIndexes.concat(listIndex.index),\n results);\n }\n } else {\n const listIndex = listIndexes[index] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n if ((wildcardIndexPos + 1) < wildcardParentPathInfos.length) {\n walkWildcardPattern(\n wildcardParentPathInfos, \n wildcardIndexPos + 1, \n listIndex, \n indexes, \n indexPos + 1, \n parentIndexes.concat(listIndex.index),\n results\n );\n } else {\n // 最終ワイルドカード層まで到達しているので、結果を確定\n results.push(parentIndexes.concat(listIndex.index));\n }\n }\n }\n const resultIndexes: number[][] = [];\n walkWildcardPattern(\n pathInfo.wildcardParentPathInfos, \n 0, \n null, \n indexes, \n 0, \n [], \n resultIndexes\n );\n const resultValues: any[] = [];\n for(let i = 0; i < resultIndexes.length; i++) {\n resultValues.push(resolveFn(\n pathInfo.path,\n resultIndexes[i]\n ));\n }\n for(const [address, newValue] of newValueByAddress.entries()) {\n lastValueByListAddress.set(address, newValue);\n }\n return resultValues;\n }\n }\n","/**\n * getListIndex.ts\n *\n * StateClassの内部APIとして、パス情報(IResolvedAddress)から\n * 対応するリストインデックス(IListIndex)を取得する関数です。\n *\n * 主な役割:\n * - パスのワイルドカード種別(context/all/partial/none)に応じてリストインデックスを解決\n * - context型は現在のループコンテキストからリストインデックスを取得\n * - all型は各階層のリストインデックス集合からインデックスを辿って取得\n * - partial型やnone型は未実装またはnullを返す\n *\n * 設計ポイント:\n * - ワイルドカードや多重ループ、ネストした配列バインディングに柔軟に対応\n * - getListIndexesByListで各階層のリストインデックス集合を取得\n * - エラー時はraiseErrorで例外を投げる\n */\n\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IResolvedAddress } from \"../../address/types\";\nimport { getListIndexesByList } from \"../../list/listIndexesByList\";\nimport { IListIndex } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\nimport { getByAddress } from \"./getByAddress\";\nimport { getContextListIndex } from \"./getContextListIndex\";\n\nexport function getListIndex(\n target : object, \n resolvedAddress: IResolvedAddress, \n receiver: any,\n handler: IStateHandler\n): IListIndex | null {\n const pathInfo = resolvedAddress.pathInfo;\n switch (resolvedAddress.wildcardType) {\n case \"none\":\n return null;\n case \"context\": {\n const lastWildcardPath = pathInfo.wildcardPaths.at(-1) ?? \n raiseError(`lastWildcardPath is null: ${resolvedAddress.pathInfo.path}`);\n return getContextListIndex(handler, lastWildcardPath) ?? \n raiseError(`ListIndex not found: ${resolvedAddress.pathInfo.path}`);\n }\n case \"all\": {\n let parentListIndex: IListIndex | null = null;\n for(let i = 0; i < resolvedAddress.pathInfo.wildcardCount; i++) {\n const wildcardParentPathInfo = resolvedAddress.pathInfo.wildcardParentPathInfos[i] ?? \n raiseError(`wildcardParentPathInfo is null: ${resolvedAddress.pathInfo.path}`);\n const wildcardParentAddress = createStateAddress(wildcardParentPathInfo, parentListIndex);\n const wildcardParentValue = getByAddress(target, wildcardParentAddress, receiver, handler);\n const wildcardParentListIndexes: IListIndex[] = getListIndexesByList(wildcardParentValue) ?? \n raiseError( `ListIndex not found: ${wildcardParentPathInfo.path}`);\n const wildcardIndex = resolvedAddress.wildcardIndexes[i] ?? \n raiseError(`wildcardIndex is null: ${resolvedAddress.pathInfo.path}`);\n parentListIndex = wildcardParentListIndexes[wildcardIndex] ?? \n raiseError(`ListIndex not found: ${wildcardParentPathInfo.path}`);\n }\n return parentListIndex;\n }\n case \"partial\": {\n raiseError(`Partial wildcard type is not supported yet: ${resolvedAddress.pathInfo.path}`);\n }\n }\n}\n","import { getAbsolutePathInfo } from \"../../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../../address/AbsoluteStateAddress\";\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IStateAddress } from \"../../address/types\";\nimport { dirtyCacheEntryByAbsoluteStateAddress } from \"../../cache/cacheEntryByAbsoluteStateAddress\";\nimport { walkDependency } from \"../../dependency/walkDependency\";\nimport { getUpdater } from \"../../updater/updater\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { IStateHandler, IStateProxy } from \"../types\";\n\n\ntype PostFunction = (path: string) => void;\n\nexport function postUpdate(\n target: object, \n _prop: PropertyKey, \n receiver: any,\n handler: IStateHandler\n): PostFunction {\n const stateElement = handler.stateElement;\n return (path: string): void => {\n const resolvedAddress = getResolvedAddress(path);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const address = createStateAddress(resolvedAddress.pathInfo, listIndex);\n const absPathInfo = getAbsolutePathInfo(stateElement, address.pathInfo);\n const absAddress = createAbsoluteStateAddress(absPathInfo, address.listIndex);\n const updater = getUpdater();\n updater.enqueueAbsoluteAddress(absAddress);\n // 依存関係のあるキャッシュを無効化(ダーティ)、更新対象として登録\n walkDependency(\n handler.stateName,\n handler.stateElement,\n address,\n handler.stateElement.staticDependency,\n handler.stateElement.dynamicDependency,\n handler.stateElement.listPaths,\n receiver as IStateProxy,\n \"new\",\n (depAddress: IStateAddress) => {\n // キャッシュを無効化(ダーティ)\n const absDepPathInfo = getAbsolutePathInfo(stateElement, depAddress.pathInfo);\n const absDepAddress = createAbsoluteStateAddress(absDepPathInfo, depAddress.listIndex);\n dirtyCacheEntryByAbsoluteStateAddress(absDepAddress);\n // 更新対象として登録\n updater.enqueueAbsoluteAddress(absDepAddress);\n }\n );\n }\n}","/**\n * trackDependency.ts\n *\n * StateClassのAPIとして、getterチェーン中に参照されたパス間の\n * 依存関係を動的に登録するための関数(trackDependency)の実装です。\n *\n * 主な役割:\n * - 現在解決中のStatePropertyRef(lastRefStack)を取得\n * - pathManager.gettersに登録されているgetterの場合のみ依存を追跡\n * - 自身と同一パターンでない参照に対してaddDynamicDependencyを呼び出す\n *\n * 設計ポイント:\n * - lastRefStackが存在しない場合はSTATE-202エラーを発生させる\n * - getter同士の再帰(自己依存)は登録しない\n * - 動的依存はpathManagerに集約し、キャッシュの無効化に利用する\n */\n\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\n\n/**\n * 現在解決中のgetterから、指定されたパスへの動的依存を登録する関数を返します。\n *\n * - pathManager.gettersに登録されているgetterのみ依存追跡を行う\n * - 自己参照は除外し、異なるパターン間の依存だけを記録\n * - 動的依存はpathManager.addDynamicDependencyで集中管理される\n *\n * @param target プロキシ対象オブジェクト\n * @param prop アクセスされたプロパティキー\n * @param receiver プロキシレシーバ\n * @param handler StateClassハンドラ\n * @returns 引数pathで指定されたパターンへの依存を登録する無名関数\n */\n\ntype TrackDependencyFunction = (path: string) => void;\n\nexport function trackDependency(\n _target: object, \n _prop: PropertyKey, \n _receiver: any,\n handler: IStateHandler\n): TrackDependencyFunction {\n return (path: string): void => {\n if (handler.addressStackLength === 0) {\n raiseError(`No active state reference to track dependency for path \"${path}\".`);\n }\n const lastInfo = handler.lastAddressStack?.pathInfo ?? \n raiseError('Internal error: lastAddressStack is null');\n const stateElement = handler.stateElement;\n if (handler.stateElement.getterPaths.has(lastInfo.path) &&\n lastInfo.path !== path) {\n stateElement.addDynamicDependency(path, lastInfo.path);\n }\n };\n}\n","/**\n * updatedCallback.ts\n *\n * Utility function to invoke the StateClass lifecycle hook \"$updatedCallback\".\n *\n * Main responsibilities:\n * - Invokes $updatedCallback method if defined on the object (target)\n * - Callback is invoked with target's this context, passing IReadonlyStateProxy (receiver) as argument\n * - Executable as async function (await compatible)\n *\n * Design points:\n * - Safely retrieves $updatedCallback property using Reflect.get\n * - Does nothing if the callback doesn't exist\n * - Used for lifecycle management and update handling logic\n */\n\nimport { IAbsoluteStateAddress } from \"../../address/types\";\nimport { STATE_UPDATED_CALLBACK_NAME } from \"../../define\";\nimport { IStateHandler } from \"../types\";\n\n/**\n * Invokes the $updatedCallback lifecycle hook if defined on the target.\n * Aggregates updated paths and their indexes before passing to the callback.\n * @param target - Target object to check for callback\n * @param refs - Array of state property references that were updated\n * @param receiver - State proxy to pass as this context\n * @param handler - State handler (unused but part of signature)\n * @returns Promise or void depending on callback implementation\n */\nexport function updatedCallback(\n target: object, \n refs: IAbsoluteStateAddress[], \n receiver: any,\n handler: IStateHandler\n): unknown {\n const callback: unknown = Reflect.get(target, STATE_UPDATED_CALLBACK_NAME);\n if (typeof callback === \"function\") {\n const paths: Set<string> = new Set();\n // ToDo:現状では1階層のみのワイルドカードに対応。多階層対応は後回し\n const indexesListByPath: Record<string, Array<number[]>> = {};\n for (const ref of refs) {\n const pathInfo = ref.absolutePathInfo.pathInfo;\n let pathName;\n if (ref.absolutePathInfo.stateName === handler.stateName) {\n pathName = pathInfo.path;\n } else {\n pathName = pathInfo.path + \"@\" + ref.absolutePathInfo.stateName;\n }\n paths.add(pathName);\n if (pathInfo.wildcardCount > 0) {\n const indexes = ref.listIndex!.indexes ?? [];\n const indexesList = indexesListByPath[pathName];\n if (typeof indexesList === \"undefined\") {\n indexesListByPath[pathName] = [indexes];\n } else {\n indexesList.push(indexes);\n }\n }\n }\n return callback.call(receiver, Array.from(paths), indexesListByPath);\n }\n}","/**\n * setLoopContext.ts\n *\n * StateClassの内部APIとして、ループコンテキスト(ILoopContext)を一時的に設定し、\n * 指定した同期/非同期コールバックをそのスコープ内で実行するための関数です。\n *\n * 主な役割:\n * - handler.loopContextにループコンテキストを一時的に設定\n * - 既にループコンテキストが設定されている場合はエラーを投げる\n * - 常にスコープを設定しコールバックを実行\n * - finallyで必ずloopContextをnullに戻し、スコープ外への影響を防止\n *\n * 設計ポイント:\n * - ループバインディングや多重ループ時のスコープ管理を安全に行う\n * - finallyで状態復元を保証し、例外発生時も安全\n * - 非同期処理にも対応\n */\n\nimport { ILoopContext } from \"../../list/types\";\nimport { raiseError } from \"../../raiseError\";\nimport { IStateHandler } from \"../types\";\n\nfunction _setLoopContext<T>(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => T\n): T {\n if (typeof handler.loopContext !== \"undefined\") {\n raiseError('already in loop context');\n }\n handler.setLoopContext(loopContext);\n try {\n handler.pushAddress(loopContext);\n try {\n return callback();\n } finally {\n handler.popAddress();\n }\n } finally {\n handler.clearLoopContext();\n }\n}\n\nexport function setLoopContext(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => any\n): any {\n return _setLoopContext(handler, loopContext, callback);\n}\n\nexport async function setLoopContextAsync(\n handler: IStateHandler,\n loopContext: ILoopContext | null,\n callback: () => Promise<any>\n): Promise<any> {\n return await _setLoopContext(handler, loopContext, callback);\n}\n","/**\n * get.ts\n *\n * StateClassのProxyトラップとして、プロパティアクセス時の値取得処理を担う関数(get)の実装です。\n *\n * 主な役割:\n * - 文字列プロパティの場合、特殊プロパティ($1〜$9, $resolve, $getAll, $navigate)に応じた値やAPIを返却\n * - 通常のプロパティはgetResolvedPathInfoでパス情報を解決し、getListIndexでリストインデックスを取得\n * - getByRefで構造化パス・リストインデックスに対応した値を取得\n * - シンボルプロパティの場合はhandler.callableApi経由でAPIを呼び出し\n * - それ以外はReflect.getで通常のプロパティアクセスを実行\n *\n * 設計ポイント:\n * - $1〜$9は直近のStatePropertyRefのリストインデックス値を返す特殊プロパティ\n * - $resolve, $getAll, $navigateはAPI関数やルーターインスタンスを返す\n * - 通常のプロパティアクセスもバインディングや多重ループに対応\n * - シンボルAPIやReflect.getで拡張性・互換性も確保\n */\n\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { IAbsoluteStateAddress, IStateAddress } from \"../../address/types\";\nimport { getCommandNamespace } from \"../../command/commandNamespace\";\nimport { DELIMITER, INDEX_BY_INDEX_NAME, STATE_COMMAND_NAMESPACE_NAME, STATE_STREAM_ERROR_NAMESPACE_NAME, STATE_STREAM_STATUS_NAMESPACE_NAME } from \"../../define\";\nimport { raiseError } from \"../../raiseError\";\nimport { getStreamErrorNamespace, getStreamStatusNamespace } from \"../../stream/streamNamespace\";\nimport { connectedCallback } from \"../apis/connectedCallback\";\nimport { disconnectedCallback } from \"../apis/disconnectedCallback\";\nimport { getAll } from \"../apis/getAll\";\nimport { postUpdate } from \"../apis/postUpdate\";\nimport { resolve } from \"../apis/resolve\";\nimport { trackDependency } from \"../apis/trackDependency\";\nimport { updatedCallback } from \"../apis/updatedCallback\";\nimport { getByAddress } from \"../methods/getByAddress\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { setByAddress } from \"../methods/setByAddress\";\nimport { setLoopContext, setLoopContextAsync } from \"../methods/setLoopContext\";\nimport { connectedCallbackSymbol, disconnectedCallbackSymbol, getByAddressSymbol, setByAddressSymbol, setLoopContextAsyncSymbol, setLoopContextSymbol, updatedCallbackSymbol } from \"../symbols\";\nimport { IStateHandler } from \"../types\";\n\n// `$streamStatus.<name>` / `$streamError.<name>` の dotted パス判定用プレフィックス\nconst STREAM_STATUS_PATH_PREFIX = `${STATE_STREAM_STATUS_NAMESPACE_NAME}${DELIMITER}`;\nconst STREAM_ERROR_PATH_PREFIX = `${STATE_STREAM_ERROR_NAMESPACE_NAME}${DELIMITER}`;\n\nexport function get(\n target : object, \n prop : PropertyKey, \n receiver: any,\n handler : IStateHandler\n): any {\n const index = INDEX_BY_INDEX_NAME[prop];\n if (typeof index !== \"undefined\") {\n if (handler.addressStackLength === 0) {\n raiseError(`No active state reference to get list index for \"${prop.toString()}\".`);\n }\n const listIndex = handler.lastAddressStack?.listIndex;\n return listIndex?.indexes[index] ?? raiseError(`ListIndex not found: ${prop.toString()}`);\n }\n if (typeof prop === \"string\") {\n if (prop[0] === '$') {\n switch (prop) {\n case \"$stateElement\": {\n return handler.stateElement;\n }\n case \"$getAll\": {\n return (path: string, indexes?: number[]): any[] => {\n return getAll(\n target, \n prop, \n receiver,\n handler\n )(path, indexes);\n }\n }\n case \"$postUpdate\": {\n return (path: string): void => {\n return postUpdate(\n target, \n prop, \n receiver,\n handler\n )(path);\n }\n }\n case \"$resolve\": {\n return (path: string, indexes: number[], value?: any): any => {\n return resolve(\n target, \n prop, \n receiver,\n handler\n )(path, indexes, value);\n }\n }\n case \"$trackDependency\": {\n return (path: string): void => {\n return trackDependency(\n target,\n prop,\n receiver,\n handler\n )(path);\n }\n }\n case STATE_COMMAND_NAMESPACE_NAME: {\n return getCommandNamespace(handler.stateElement);\n }\n case STATE_STREAM_STATUS_NAMESPACE_NAME: {\n return getStreamStatusNamespace(handler.stateElement);\n }\n case STATE_STREAM_ERROR_NAMESPACE_NAME: {\n return getStreamErrorNamespace(handler.stateElement);\n }\n }\n // switch 不一致の $ プロパティのうち、`$streamStatus.<name>` / `$streamError.<name>`\n // の dotted パスだけは通常のパス解決(getByAddress)へフォールスルーさせる。\n // これが computed(getter)内での依存追跡付き読み取りの正規形\n // (checkDependency が getter スコープで動的依存を登録し、$postUpdate の\n // walkDependency で computed が無効化される、docs/state-streams-design.md §4-3)。\n // それ以外の未知 $ プロパティは従来どおり undefined を返す。\n if (!prop.startsWith(STREAM_STATUS_PATH_PREFIX) && !prop.startsWith(STREAM_ERROR_PATH_PREFIX)) {\n return undefined;\n }\n }\n const resolvedAddress = getResolvedAddress(prop);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const stateAddress = createStateAddress(resolvedAddress.pathInfo, listIndex);\n return getByAddress(\n target,\n stateAddress,\n receiver,\n handler\n );\n } else if (typeof prop === \"symbol\") {\n switch (prop) {\n case setLoopContextAsyncSymbol: {\n return (loopContext: any, callback = async (): Promise<any> => {}): Promise<any> => {\n return setLoopContextAsync(handler, loopContext, callback);\n };\n }\n case setLoopContextSymbol: {\n return (loopContext: any, callback = (): any => {}): any => {\n return setLoopContext(handler, loopContext, callback);\n };\n }\n case getByAddressSymbol: {\n return (address: IStateAddress): any => {\n return getByAddress(\n target,\n address,\n receiver,\n handler\n );\n }\n }\n case setByAddressSymbol: {\n return (address: IStateAddress, value: any): void => {\n return setByAddress(\n target,\n address,\n value,\n receiver,\n handler\n );\n }\n }\n case connectedCallbackSymbol: {\n return (): Promise<void> => {\n return connectedCallback(\n target,\n prop,\n receiver,\n handler\n );\n }\n }\n case disconnectedCallbackSymbol: {\n return (): void => {\n return disconnectedCallback(\n target,\n prop,\n receiver,\n handler\n );\n }\n }\n case updatedCallbackSymbol: {\n return (\n refs: IAbsoluteStateAddress[]\n ): unknown => {\n return updatedCallback(\n target,\n refs,\n receiver,\n handler\n );\n }\n }\n }\n\n return Reflect.get(\n target, \n prop, \n receiver\n );\n }\n}\n","/**\n * set.ts\n *\n * StateClassのProxyトラップとして、プロパティ設定時の値セット処理を担う関数(set)の実装です。\n *\n * 主な役割:\n * - 文字列プロパティの場合、getResolvedPathInfoでパス情報を解決し、getListIndexでリストインデックスを取得\n * - setByRefで構造化パス・リストインデックスに対応した値設定を実行\n * - それ以外(シンボル等)の場合はReflect.setで通常のプロパティ設定を実行\n *\n * 設計ポイント:\n * - バインディングや多重ループ、ワイルドカードを含むパスにも柔軟に対応\n * - setByRefを利用することで、依存解決や再描画などの副作用も一元管理\n * - Reflect.setで標準的なプロパティ設定の互換性も確保\n */\n\nimport { getResolvedAddress } from \"../../address/ResolvedAddress\";\nimport { IStateHandler } from \"../types\";\nimport { getListIndex } from \"../methods/getListIndex\";\nimport { createStateAddress } from \"../../address/StateAddress\";\nimport { setByAddress } from \"../methods/setByAddress\";\n\nexport function set(\n target : object, \n prop : PropertyKey, \n value : any, \n receiver: any,\n handler : IStateHandler\n): boolean {\n if (typeof prop === \"string\") {\n const resolvedAddress = getResolvedAddress(prop);\n const listIndex = getListIndex(target, resolvedAddress, receiver, handler);\n const stateAddress = createStateAddress(resolvedAddress.pathInfo, listIndex);\n return setByAddress(\n target, \n stateAddress,\n value, \n receiver,\n handler\n );\n } else {\n return Reflect.set(\n target, \n prop, \n value, \n receiver\n );\n }\n}\n","import { IStateAddress } from \"../address/types\";\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { IStateHandler, IStateProxy, Mutability } from \"./types\";\nimport { get as trapGet } from \"./traps/get\";\nimport { set as trapSet } from \"./traps/set\";\nimport { ILoopContext } from \"../list/types\";\nimport { IState } from \"../types\";\nimport { MAX_LOOP_DEPTH } from \"../define\";\n\nclass StateHandler implements IStateHandler {\n private _stateElement: IStateElement;\n private _stateName: string;\n private _addressStack: (IStateAddress | null | undefined)[] = Array(MAX_LOOP_DEPTH).fill(undefined);\n private _addressStackIndex: number = -1;\n private _loopContext: ILoopContext | null | undefined;\n private _mutability: Mutability;\n \n constructor(\n rootNode: Node,\n stateName: string,\n mutability: Mutability\n ) {\n this._stateName = stateName;\n const stateElement = getStateElementByName(rootNode, this._stateName);\n if (stateElement === null) {\n raiseError(`StateHandler: State element with name \"${this._stateName}\" not found.`);\n }\n this._stateElement = stateElement;\n this._mutability = mutability;\n }\n\n get stateName(): string {\n return this._stateName;\n }\n\n get stateElement(): IStateElement {\n return this._stateElement;\n }\n\n get lastAddressStack(): IStateAddress | null {\n let address: IStateAddress | null | undefined = undefined;\n if (this._addressStackIndex >= 0) {\n address = this._addressStack[this._addressStackIndex];\n }\n if (typeof address === \"undefined\") {\n raiseError(`Last address stack is undefined.`);\n }\n return address;\n }\n\n get addressStackLength(): number {\n return this._addressStackIndex + 1;\n }\n\n get loopContext(): ILoopContext | null | undefined {\n return this._loopContext;\n }\n\n pushAddress(address: IStateAddress | null): void {\n this._addressStackIndex++;\n if (this._addressStackIndex >= MAX_LOOP_DEPTH) {\n raiseError(`Exceeded maximum address stack depth of ${MAX_LOOP_DEPTH}. Possible infinite loop.`);\n }\n this._addressStack[this._addressStackIndex] = address;\n }\n\n popAddress(): IStateAddress | null {\n if (this._addressStackIndex < 0) {\n return null;\n }\n const address = this._addressStack[this._addressStackIndex];\n if (typeof address === \"undefined\") {\n raiseError(`Address stack at index ${this._addressStackIndex} is undefined.`);\n }\n this._addressStack[this._addressStackIndex] = undefined;\n this._addressStackIndex--;\n return address;\n }\n\n setLoopContext(loopContext: ILoopContext | null): void {\n this._loopContext = loopContext;\n }\n\n clearLoopContext(): void {\n this._loopContext = undefined;\n }\n\n get(\n target : object, \n prop : PropertyKey, \n receiver: any\n ): any {\n return trapGet(target, prop, receiver, this);\n }\n\n set(\n target : object, \n prop : PropertyKey, \n value : any, \n receiver: any\n ): boolean {\n if (this._mutability === \"readonly\") {\n raiseError(`State \"${this._stateName}\" is readonly.`);\n }\n return trapSet(target, prop, value, receiver, this);\n }\n\n has(\n target: object, \n prop : PropertyKey\n ): boolean {\n return Reflect.has(target, prop);\n// return Reflect.has(target, prop) || this.symbols.has(prop) || this.apis.has(prop);\n }\n\n}\n\nexport function createStateProxy(\n rootNode: Node,\n state: IState,\n stateName: string,\n mutability: Mutability\n): IStateProxy {\n const handler = new StateHandler(rootNode, stateName, mutability);\n const stateProxy = new Proxy<IStateProxy>(state as IStateProxy, handler);\n return stateProxy;\n}\n\nexport const __private__ = {\n StateHandler,\n};","\n// WebComponent専用のキャッシュ\n// outerState.tsからのアクセスで、これを返す\n\nimport { IAbsoluteStateAddress } from \"../address/types\";\n\nconst lastValueByAbsoluteStateAddress: WeakMap<IAbsoluteStateAddress, any> = new WeakMap();\n\nexport function setLastValueByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress, value: any): void {\n lastValueByAbsoluteStateAddress.set(absoluteStateAddress, value);\n}\n\nexport function getLastValueByAbsoluteStateAddress(absoluteStateAddress: IAbsoluteStateAddress): any {\n return lastValueByAbsoluteStateAddress.get(absoluteStateAddress);\n}\n","import { IStateElement } from \"../components/types\";\n\nconst stateElementByWebComponent: WeakMap<Element, Map<string, IStateElement>> = new WeakMap();\n\nexport function setStateElementByWebComponent(webComponent: Element, stateName: string, stateElement: IStateElement): void {\n let stateMap = stateElementByWebComponent.get(webComponent);\n if (!stateMap) {\n stateMap = new Map();\n stateElementByWebComponent.set(webComponent, stateMap);\n }\n stateMap.set(stateName, stateElement);\n}\n\nexport function getStateElementByWebComponent(webComponent: Element, stateName: string): IStateElement | null {\n const stateMap = stateElementByWebComponent.get(webComponent);\n if (!stateMap) {\n return null;\n }\n return stateMap.get(stateName) ?? null;\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IAbsolutePathInfo } from \"../address/types\";\nimport { getAbsoluteStateAddressByBinding } from \"../binding/getAbsoluteStateAddressByBinding\";\nimport { IBindingInfo } from \"../binding/types\";\nimport { addBindingByNode } from \"../bindings/getBindingsByNode\";\nimport { IStateElement } from \"../components/types\";\nimport { DELIMITER } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByName } from \"../stateElementByName\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\n\nexport interface IMappingRule {\n innerAbsPathInfo: IAbsolutePathInfo;\n outerAbsPathInfo: IAbsolutePathInfo;\n}\n\nconst innerMappingByElement: WeakMap<Element, Map<IAbsolutePathInfo, IAbsolutePathInfo>> = new WeakMap();\nconst outerMappingByElement: WeakMap<Element, Map<IAbsolutePathInfo, IAbsolutePathInfo>> = new WeakMap();\nconst primaryMappingRuleSetByElement: WeakMap<Element, Set<IMappingRule>> = new WeakMap();\nconst primaryBindingByMappingRule: WeakMap<IMappingRule, IBindingInfo> = new WeakMap();\n\nfunction createMappingRuleByBinding(innerState: IStateElement, binding: IBindingInfo): IMappingRule {\n const innerPathInfo = getPathInfo(binding.propSegments.slice(1).join(DELIMITER));\n const innerAbsPathInfo = getAbsolutePathInfo(innerState, innerPathInfo);\n const outerAbsStateAddress = getAbsoluteStateAddressByBinding(binding);\n const outerAbsPathInfo = outerAbsStateAddress.absolutePathInfo;\n return { innerAbsPathInfo, outerAbsPathInfo };\n}\n\nexport function buildPrimaryMappingRule(webComponent: Element, stateName: string, bindings: IBindingInfo[]): void {\n if (bindings.length === 0) {\n return;\n }\n const innerState = getStateElementByWebComponent(webComponent, stateName);\n if (innerState === null) {\n raiseError('State element not found for web component.');\n }\n const innerMappingRule = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n const outerMappingRule = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n for (const binding of bindings) {\n const mappingRule = createMappingRuleByBinding(innerState, binding);\n let primaryMappingRuleSet = primaryMappingRuleSetByElement.get(webComponent);\n if (typeof primaryMappingRuleSet === 'undefined') {\n primaryMappingRuleSetByElement.set(webComponent, new Set([mappingRule]));\n } else {\n primaryMappingRuleSet.add(mappingRule);\n }\n const innerAbsPathInfo = mappingRule.innerAbsPathInfo;\n const outerAbsPathInfo = mappingRule.outerAbsPathInfo;\n primaryBindingByMappingRule.set(mappingRule, binding);\n innerMappingRule.set(innerAbsPathInfo, outerAbsPathInfo);\n outerMappingRule.set(outerAbsPathInfo, innerAbsPathInfo);\n }\n innerMappingByElement.set(webComponent, innerMappingRule);\n outerMappingByElement.set(webComponent, outerMappingRule);\n}\n\nexport function getInnerAbsolutePathInfo(webComponent: Element, outerAbsPathInfo: IAbsolutePathInfo): IAbsolutePathInfo | null {\n const mapping = outerMappingByElement.get(webComponent);\n if (typeof mapping === 'undefined') {\n return null;\n }\n return mapping.get(outerAbsPathInfo) ?? null;\n}\n\nexport function getOuterAbsolutePathInfo(webComponent: Element, innerAbsPathInfo: IAbsolutePathInfo): IAbsolutePathInfo | null {\n let innerMapping = innerMappingByElement.get(webComponent);\n if (typeof innerMapping === 'undefined') {\n innerMapping = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n innerMappingByElement.set(webComponent, innerMapping);\n }\n if (innerMapping.has(innerAbsPathInfo)) {\n return innerMapping.get(innerAbsPathInfo)!\n }\n let outerMapping = outerMappingByElement.get(webComponent);\n if (typeof outerMapping === 'undefined') {\n outerMapping = new Map<IAbsolutePathInfo, IAbsolutePathInfo>();\n outerMappingByElement.set(webComponent, outerMapping);\n }\n // 内側からのアクセスの場合、ルールがなければプライマリルールから新たにルールとバインディングを生成する\n const primaryMappingRuleSet = primaryMappingRuleSetByElement.get(webComponent);\n if (typeof primaryMappingRuleSet === 'undefined') {\n // マッピングルールが存在しない場合はnullを返し、ローカル状態へのフォールバックを許可する\n return null;\n }\n let primaryMappingRule: IMappingRule | null = null;\n for(const currentPrimaryMappingRule of primaryMappingRuleSet) {\n // innerPathInfoがprimaryMappingRuleのinnerPathInfoを包含しているか\n if (!innerAbsPathInfo.pathInfo.cumulativePathInfoSet.has(currentPrimaryMappingRule.innerAbsPathInfo.pathInfo)) {\n continue;\n }\n if (currentPrimaryMappingRule.innerAbsPathInfo.pathInfo.segments.length === innerAbsPathInfo.pathInfo.segments.length) {\n raiseError('Duplicate mapping rule for web component.');\n }\n primaryMappingRule = currentPrimaryMappingRule;\n break;\n }\n if (primaryMappingRule === null) {\n // マッピングルールに一致しない場合はnullを返し、ローカル状態へのフォールバックを許可する\n return null;\n }\n // マッチした残りのパスをouterPathInfoに付与して新たなルールを生成\n const primaryBinding = primaryBindingByMappingRule.get(primaryMappingRule);\n /* c8 ignore start */\n if (typeof primaryBinding === 'undefined') {\n raiseError('Binding not found for primary mapping rule on web component.');\n }\n /* c8 ignore stop */\n const outerRemainingSegments = innerAbsPathInfo.pathInfo.segments.slice(primaryMappingRule.innerAbsPathInfo.pathInfo.segments.length);\n const outerSegments = primaryMappingRule.outerAbsPathInfo.pathInfo.segments.concat(outerRemainingSegments);\n const outerPathInfo = getPathInfo(outerSegments.join(DELIMITER));\n const rootNode = webComponent.getRootNode() as Node;\n const outerStateElement = getStateElementByName(rootNode, primaryBinding.stateName);\n if (outerStateElement === null) {\n raiseError(`State element with name \"${primaryBinding.stateName}\" not found for web component.`);\n }\n const outerAbsPathInfo = getAbsolutePathInfo(outerStateElement, outerPathInfo);\n innerMapping.set(innerAbsPathInfo, outerAbsPathInfo);\n outerMapping.set(outerAbsPathInfo, innerAbsPathInfo);\n\n // ルールに対応するバインディングを生成\n const newBinding: IBindingInfo = {\n ...primaryBinding,\n propName: innerAbsPathInfo.pathInfo.path,\n propSegments: innerAbsPathInfo.pathInfo.segments,\n statePathName: outerAbsPathInfo.pathInfo.path,\n statePathInfo: outerAbsPathInfo.pathInfo,\n }\n addBindingByNode(webComponent, newBinding);\n\n return outerAbsPathInfo;\n}","\nfunction cloneWithDescriptors(obj: object) {\n const proto = Object.getPrototypeOf(obj);\n const clone = Object.create(proto);\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n for(const key in descriptors) {\n const descriptor = descriptors[key];\n if (descriptor.writable === false) {\n descriptor.writable = true;\n }\n }\n Object.defineProperties(clone, descriptors);\n return clone;\n}\n\nexport function meltFrozenObject(frozenObj: object) {\n return cloneWithDescriptors(frozenObj);\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateElement } from \"../components/types\";\nimport { getLoopContextByNode } from \"../list/loopContextByNode\";\nimport { IListIndex } from \"../list/types\";\nimport { setLoopContextSymbol } from \"../proxy/symbols\";\nimport { raiseError } from \"../raiseError\";\nimport { setLastValueByAbsoluteStateAddress } from \"./lastValueByAbsoluteStateAddress\";\nimport { getOuterAbsolutePathInfo } from \"./MappingRule\";\nimport { meltFrozenObject } from \"./meltFrozenObject\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IInnerState } from \"./types\";\n\nclass InnerStateProxyHandler implements ProxyHandler<IInnerState> {\n private _webComponent: Element;\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._webComponent = webComponent;\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IInnerState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n if (prop === \"then\") {\n // Promiseのthenと誤認識されるのを防ぐため、Promiseに存在するプロパティはProxyのgetで処理しない\n return undefined;\n }\n if (prop[0] === '$') {\n return undefined;\n }\n // 1. getter完全一致 → ローカル計算(this = receiverで依存自動追跡)\n if (this._innerStateElement.getterPaths.has(prop) && prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // 2 & 3. マッピング完全一致 / サブパス → 親の状態\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n const loopContext = getLoopContextByNode(this._webComponent);\n let value = undefined;\n outerAbsPathInfo.stateElement.createState(\"readonly\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n value = state[outerAbsPathInfo.pathInfo.path];\n let listIndex: IListIndex | null = null;\n if (loopContext !== null && loopContext.listIndex !== null) {\n if (outerAbsPathInfo.pathInfo.wildcardCount > 0) {\n // wildcardPathSetとloopContextのpathInfoSetのintersectionのうち、segment数が最も多いものをouterAbsPathInfoにする\n // 例: outerPathInfoが \"todos.*.name\"で、loopContextのpathInfoSetに \"todos.0.name\", \"todos.1.name\"がある場合、\"todos.0.name\"や\"todos.1.name\"をouterAbsPathInfoにする\n listIndex = loopContext.listIndex.at(outerAbsPathInfo.pathInfo.wildcardCount - 1);\n }\n }\n const absStateAddress = createAbsoluteStateAddress(outerAbsPathInfo, listIndex);\n setLastValueByAbsoluteStateAddress(absStateAddress, value);\n });\n });\n return value;\n }\n // 4. ローカルデータプロパティ → ローカル値\n if (prop in target) {\n return Reflect.get(target, prop, receiver);\n }\n // 5. エラー\n raiseError(`Property \"${prop}\" not found in inner state: no mapping rule and no local state property.`);\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IInnerState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n // 1. setter完全一致 → ローカル処理(this = receiverで親への書き込み可能)\n if (this._innerStateElement.setterPaths.has(prop) && prop in target) {\n return Reflect.set(target, prop, value, receiver);\n }\n // 2 & 3. マッピング完全一致 / サブパス → 親に書く\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n const loopContext = getLoopContextByNode(this._webComponent);\n outerAbsPathInfo.stateElement.createState(\"writable\", (state) => {\n state[setLoopContextSymbol](loopContext, () => {\n state[outerAbsPathInfo.pathInfo.path] = value;\n });\n });\n return true;\n }\n // 4. ローカルデータプロパティ → ローカルに書く\n if (prop in target) {\n return Reflect.set(target, prop, value, receiver);\n }\n // 5. エラー\n raiseError(`Property \"${prop}\" not found in inner state: no mapping rule and no local state property.`);\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n\n has(target: IInnerState, prop: string | symbol): boolean {\n if (typeof prop === 'string') {\n if (prop[0] === '$') {\n return false;\n }\n // 1. getter/setter完全一致\n if ((this._innerStateElement.getterPaths.has(prop) || this._innerStateElement.setterPaths.has(prop)) && prop in target) {\n return true;\n }\n // 2 & 3. マッピング\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const outerAbsPathInfo = getOuterAbsolutePathInfo(this._webComponent, innerAbsPathInfo);\n if (outerAbsPathInfo !== null) {\n return true;\n }\n // 4. ローカルデータ\n if (prop in target) {\n return true;\n }\n // 5. 存在しない\n return false;\n } else {\n return Reflect.has(target, prop);\n }\n }\n\n}\n\nexport function createInnerState(webComponent: Element, stateName: string): IInnerState {\n const handler = new InnerStateProxyHandler(webComponent, stateName);\n const innerState = getStateElementByWebComponent(webComponent, stateName);\n /* c8 ignore start */\n if (innerState === null) {\n raiseError('State element not found for web component.');\n }\n /* c8 ignore stop */\n if (innerState.boundComponentStateProp === null) {\n raiseError('State element is not bound to any component state prop.');\n }\n if (!(innerState.boundComponentStateProp in webComponent)) {\n raiseError(`State element is not bound to a valid component state prop: ${innerState.boundComponentStateProp}`);\n }\n const state = (webComponent as any)[innerState.boundComponentStateProp];\n if (typeof state !== 'object' || state === null) {\n raiseError(`Invalid state object for component state prop: ${innerState.boundComponentStateProp}`);\n }\n return new Proxy(meltFrozenObject(state), handler);\n}","import { getAbsolutePathInfo } from \"../address/AbsolutePathInfo\";\nimport { createAbsoluteStateAddress } from \"../address/AbsoluteStateAddress\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getLastValueByAbsoluteStateAddress } from \"./lastValueByAbsoluteStateAddress\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nclass OuterStateProxyHandler implements ProxyHandler<IOuterState> {\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IOuterState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n const absStateAddress = createAbsoluteStateAddress(innerAbsPathInfo, null);\n return getLastValueByAbsoluteStateAddress(absStateAddress);\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IOuterState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n const innerPathInfo = getPathInfo(prop);\n const innerAbsPathInfo = getAbsolutePathInfo(this._innerStateElement, innerPathInfo);\n this._innerStateElement.createState(\"readonly\", (state) => {\n state.$postUpdate(innerAbsPathInfo.pathInfo.path);\n });\n return true;\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n}\n\nexport function createOuterState(webComponent: Element, stateName: string): IOuterState {\n const handler = new OuterStateProxyHandler(webComponent, stateName);\n return new Proxy({}, handler);\n}\n","import { IStateElement } from \"../components/types\";\nimport { raiseError } from \"../raiseError\";\nimport { getStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nclass PlainOuterStateProxyHandler implements ProxyHandler<IOuterState> {\n private _innerStateElement: IStateElement;\n constructor(webComponent: Element, stateName: string) {\n this._innerStateElement = getStateElementByWebComponent(webComponent, stateName) ?? raiseError('State element not found for web component.');\n }\n\n get(target: IOuterState, prop: string | symbol, receiver: any): any {\n if (typeof prop === 'string') {\n let value;\n this._innerStateElement.createState(\"readonly\", (state) => {\n value = state[prop];\n });\n return value;\n } else {\n return Reflect.get(target, prop, receiver);\n }\n }\n\n set(target: IOuterState, prop: string | symbol, value: any, receiver: any): boolean {\n if (typeof prop === 'string') {\n this._innerStateElement.createState(\"writable\", (state) => {\n state[prop] = value;\n });\n return true;\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n }\n}\n\nexport function createPlainOuterState(webComponent: Element, stateName: string): IOuterState {\n const handler = new PlainOuterStateProxyHandler(webComponent, stateName);\n return new Proxy({}, handler);\n}\n","import { getBindingsByNode } from \"../bindings/getBindingsByNode\";\nimport { IStateElement } from \"../components/types\";\nimport { config } from \"../config\";\nimport { WEBCOMPONENT_STATE_READY_CALLBACK_NAME } from \"../define\";\nimport { raiseError } from \"../raiseError\";\nimport { markWebComponentAsComplete } from \"./completeWebComponent\";\nimport { createInnerState } from \"./innerState\";\nimport { buildPrimaryMappingRule } from \"./MappingRule\";\nimport { meltFrozenObject } from \"./meltFrozenObject\";\nimport { createOuterState } from \"./outerState\";\nimport { createPlainOuterState } from \"./plainOuterState\";\nimport { setStateElementByWebComponent } from \"./stateElementByWebComponent\";\nimport { IOuterState } from \"./types\";\n\nconst getOuter = (outerState: IOuterState) => (): IOuterState => outerState;\n\nexport function bindWebComponent(\n innerStateElement: IStateElement,\n component: Element,\n stateProp: string,\n state: Record<string, any>\n): void {\n setStateElementByWebComponent(component, stateProp, innerStateElement);\n if (component.hasAttribute(config.bindAttributeName)) {\n const bindings = (getBindingsByNode(component) ?? []).filter(\n binding => binding.propSegments[0] === stateProp\n );\n buildPrimaryMappingRule(component, stateProp, bindings);\n const outerState = createOuterState(component, stateProp);\n const innerState = createInnerState(component, stateProp);\n innerStateElement.setInitialState(innerState);\n Object.defineProperty(component, stateProp, {\n get: getOuter(outerState),\n enumerable: true,\n configurable: true,\n });\n } else {\n innerStateElement.setInitialState(meltFrozenObject(state));\n const outerState = createPlainOuterState(component, stateProp);\n Object.defineProperty(component, stateProp, {\n get: getOuter(outerState),\n enumerable: true,\n configurable: true,\n });\n }\n markWebComponentAsComplete(component, innerStateElement);\n if (WEBCOMPONENT_STATE_READY_CALLBACK_NAME in component) {\n const func = (component as any)[WEBCOMPONENT_STATE_READY_CALLBACK_NAME];\n if (typeof func === 'function') {\n func.call(component, stateProp).catch((error: any) => {\n raiseError(`Error in ${WEBCOMPONENT_STATE_READY_CALLBACK_NAME}: ${error instanceof Error ? error.message : String(error)}`);\n });\n } else {\n raiseError(`${WEBCOMPONENT_STATE_READY_CALLBACK_NAME} is not a function.`);\n }\n }\n}\n","import { config, inSsr } from \"../config\";\nimport { loadFromInnerScript } from \"../stateLoader/loadFromInnerScript\";\nimport { loadFromJsonFile } from \"../stateLoader/loadFromJsonFile\";\nimport { loadFromScriptFile } from \"../stateLoader/loadFromScriptFile\";\nimport { loadFromScriptJson } from \"../stateLoader/loadFromScriptJson\";\nimport { raiseError } from \"../raiseError\";\nimport { BindingType, IState } from \"../types\";\nimport { IStateElement } from \"./types\";\nimport { setStateElementByName, getStateElementByName, getBindingsReady } from \"../stateElementByName\";\nimport { ILoopContextStack } from \"../list/types\";\nimport { createLoopContextStack } from \"../list/loopContext\";\nimport { DCC_DEFINITION_ATTRIBUTE, NO_SET_TIMEOUT, STATE_CONNECTED_CALLBACK_NAME, STATE_DISCONNECTED_CALLBACK_NAME, STATE_UPDATED_CALLBACK_NAME, WILDCARD } from \"../define\";\nimport { processCommandTokensDeclaration } from \"../command/processCommandTokensDeclaration\";\nimport { clearCommandTokenRegistry } from \"../command/commandTokenRegistry\";\nimport { clearCommandNamespace } from \"../command/commandNamespace\";\nimport { processEventTokensDeclaration } from \"../event/processEventTokensDeclaration\";\nimport { clearEventTokenRegistry } from \"../event/eventTokenRegistry\";\nimport { processOnDeclaration } from \"../event/processOnDeclaration\";\nimport { processStreamsDeclaration } from \"../stream/processStreamsDeclaration\";\nimport { clearStreamNamespace } from \"../stream/streamNamespace\";\nimport { abortAllStreams, clearStreamRegistry } from \"../stream/streamRegistry\";\nimport { startStreams } from \"../stream/streamRuntime\";\nimport { defineDCC } from \"../dcc/defineDCC\";\nimport { getPathInfo } from \"../address/PathInfo\";\nimport { IStateProxy, Mutability } from \"../proxy/types\";\nimport { createStateProxy } from \"../proxy/StateHandler\";\nimport { bindWebComponent } from \"../webComponent/bindWebComponent\";\nimport { connectedCallbackSymbol, disconnectedCallbackSymbol } from \"../proxy/symbols\";\nimport { waitInitializeBinding } from \"../bindings/initializeBindingPromiseByNode\";\nimport { getCustomElement } from \"../getCustomElement\";\nimport { Ssr } from \"./Ssr\";\nimport { VERSION } from \"../version\";\n\ntype Descriptors = Record<string, PropertyDescriptor>;\n\nfunction getAllPropertyDescriptors(obj: object): Descriptors {\n let descriptors: Descriptors = {};\n let proto = obj;\n while (proto && proto !== Object.prototype) {\n Object.assign(descriptors, Object.getOwnPropertyDescriptors(proto));\n proto = Object.getPrototypeOf(proto);\n }\n return descriptors;\n}\n\nfunction getStateInfo(\n state: IState\n): {\n getterPaths: Set<string>,\n setterPaths: Set<string>,\n} {\n const getterPaths: Set<string> = new Set<string>();\n const setterPaths: Set<string> = new Set<string>();\n const descriptors = getAllPropertyDescriptors(state);\n for(const [ key, descriptor ] of Object.entries(descriptors)) {\n if (typeof descriptor.get === \"function\") {\n getterPaths.add(key);\n }\n if (typeof descriptor.set === \"function\") {\n setterPaths.add(key);\n }\n }\n return {\n getterPaths, setterPaths\n };\n}\n\nexport class State extends HTMLElement implements IStateElement {\n static hasConnectedCallbackPromise = true;\n\n static getBindingsReady(rootNode: Node): Promise<void> {\n return getBindingsReady(rootNode);\n }\n\n private __state: IState | undefined;\n private _hasUpdatedCallback: boolean = false;\n // 他行を読む getter が検出されたリストパス(diff-filter 展開の全行フォールバック対象)。\n // 依存マップ(static/dynamic)と同様に追加のみ・クリアしない(安全側に固定される)。\n private _crossRowListPaths: Set<string> = new Set<string>();\n private _name: string = 'default';\n private _initialized: boolean = false;\n private _initializePromise: Promise<void>;\n private _resolveInitialize: (() => void) | null = null;\n private _connectedCallbackPromise: Promise<void>;\n private _resolveConnectedCallback: (() => void) | null = null;\n private _loadingPromise: Promise<void>;\n private _resolveLoading: (() => void) | null = null;\n private _setStatePromise: Promise<Record<string, any>> | null = null;\n private _resolveSetState: ((value: Record<string, any>) => void) | null = null;\n private _listPaths: Set<string> = new Set<string>();\n private _elementPaths: Set<string> = new Set<string>();\n private _getterPaths: Set<string> = new Set<string>();\n private _setterPaths: Set<string> = new Set<string>();\n private _loopContextStack: ILoopContextStack = createLoopContextStack();\n private _dynamicDependency: Map<string, string[]> = new Map<string, string[]>();\n private _staticDependency: Map<string, string[]> = new Map<string, string[]>();\n private _pathSet: Set<string> = new Set<string>();\n private _version = 0;\n private _rootNode: Node | null = null;\n private _boundComponent: Element | null = null;\n private _boundComponentStateProp: string | null = null;\n private _bindableEventMap: Record<string, string> = {};\n private _commandTokenNames: Set<string> = new Set<string>();\n private _eventTokenNames: Set<string> = new Set<string>();\n private _dcc: boolean = false;\n // connect サイクルの世代カウンタ(connectedCallback 冒頭でインクリメント)。\n // $connectedCallback の await 中の「切断 → 即再接続」では、新 connect が\n // _rootNode を再設定済みのため陳腐化した旧 connect の再開が _rootNode ガードを\n // 素通りして startStreams に到達し、同一の再接続に対して source が二重起動する。\n // 末尾で冒頭に捕捉した世代と照合し、陳腐 connect からの起動を skip する(設計書 §2-3)。\n private _connectGeneration: number = 0;\n // _state セッター側の startStreams が走った connect 世代\n // (connectedCallback 末尾の startStreams との二重起動防止、設計書 §2-3。\n // 世代が進めば不一致となり自然に無効化される — サイクル単位のフラグリセット相当)\n private _streamsStartedGeneration: number = 0;\n\n constructor() {\n super();\n this._initializePromise = new Promise<void>((resolve) => {\n this._resolveInitialize = resolve;\n });\n this._connectedCallbackPromise = new Promise<void>((resolve) => {\n this._resolveConnectedCallback = resolve;\n });\n this._loadingPromise = new Promise<void>((resolve) => {\n this._resolveLoading = resolve;\n });\n this._setStatePromise = new Promise<Record<string, any>>((resolve) => {\n this._resolveSetState = resolve;\n });\n }\n\n private get _state(): IState {\n if (typeof this.__state === \"undefined\") {\n raiseError(`${config.tagNames.state} _state is not initialized yet.`);\n }\n return this.__state;\n }\n\n private set _state(value: IState) {\n this._commandTokenNames = processCommandTokensDeclaration(value);\n this._eventTokenNames = processEventTokensDeclaration(value);\n this.__state = value;\n // $updatedCallback の有無を state セット時に確定しておく(in はプロトタイプ\n // チェーンも見る・getter を評価しない)。drain 側はこのフラグで更新アドレスの\n // 集計と writable createState をスキップできる。\n // 注: state セット後に生オブジェクトへ直接 $updatedCallback を後付けする\n // パターンは検知できない(bindProperty / _state 再セットは検知する)。\n // ライフサイクルフックは宣言時に定義するのが規約。\n this._hasUpdatedCallback = STATE_UPDATED_CALLBACK_NAME in value;\n // 再 set 時に二重 subscribe しないよう registry をクリアしてから $on を配線し直す。\n clearEventTokenRegistry(this);\n processOnDeclaration(this, value, this._eventTokenNames);\n this._listPaths.clear();\n this._elementPaths.clear();\n this._getterPaths.clear();\n // 再 set 時の残骸が $streams の衝突検査(processStreamsDeclaration)に\n // 偽陽性で命中しないよう getterPaths と対称にクリアする。\n this._setterPaths.clear();\n this._pathSet.clear();\n const stateInfo = getStateInfo(value);\n for(const path of stateInfo.getterPaths) {\n this._getterPaths.add(path);\n }\n for(const path of stateInfo.setterPaths) {\n this._setterPaths.add(path);\n }\n // $streams: 再 set 時の二重起動防止のため旧 stream を abort + registry 全削除してから\n // 新宣言をパースする(clearEventTokenRegistry → processOnDeclaration と同じ再配線パターン)。\n // getterPaths / setterPaths の収集後であること(宣言バリデーションが衝突検査で参照する)。\n // namespace proxy の memo も破棄して古い proxy を捨てる(clearCommandNamespace と対称)。\n clearStreamNamespace(this);\n clearStreamRegistry(this);\n processStreamsDeclaration(this, value);\n // 接続中の再 set(S13)は新宣言で即再起動する。\n // 初回(_initialize 中)は _initialized が false なのでここでは起動されず、\n // connectedCallback 側の startStreams($connectedCallback 完了後)が担う。\n if (this._initialized && this._rootNode !== null && !inSsr()) {\n startStreams(this);\n // $connectedCallback 実行中の再 set(setInitialState)では、ここで新宣言が\n // 起動済みのため connectedCallback 末尾の startStreams を skip させる。\n // skip しないと同一 connect サイクルで新宣言の source が 2 回起動する\n // (1 回目は即 abort — switchMap 意味論で状態は壊れないが、副作用を持つ\n // source が 2 回発火してしまう)。\n this._streamsStartedGeneration = this._connectGeneration;\n }\n this._resolveLoading?.();\n }\n\n get name(): string {\n return this._name;\n }\n\n private _loadFromSsrElement(): IState | null {\n if (!this.hasAttribute('enable-ssr')) return null;\n const name = this.getAttribute('name') || 'default';\n const root = this.parentNode;\n if (!root) return null;\n const ssrEl = Ssr.findByName(root, name);\n if (!ssrEl) return null;\n const data = ssrEl.stateData;\n return Object.keys(data).length > 0 ? data : null;\n }\n\n private async _initialize() {\n // enable-ssr (クライアント側のみ): <wcs-ssr> から初期データを取得\n const ssrState = !inSsr() ? this._loadFromSsrElement() : null;\n try {\n if (this.hasAttribute('state')) {\n const state = this.getAttribute('state');\n this._state = loadFromScriptJson(state!);\n } else if (this.hasAttribute('src')) {\n const src = this.getAttribute('src');\n if (src && src.endsWith('.json')) {\n this._state = await loadFromJsonFile(src);\n } else if (src && src.endsWith('.js')) {\n this._state = await loadFromScriptFile(src);\n } else {\n raiseError(`Unsupported src file type: ${src}`);\n }\n } else if (this.hasAttribute('json')) {\n const json = this.getAttribute('json');\n this._state = JSON.parse(json!);\n } else {\n const script = this.querySelector<HTMLScriptElement>('script[type=\"module\"]');\n if (script) {\n this._state = await loadFromInnerScript(script, `${this._name}`);\n } else {\n const timerId = setTimeout(() => {\n console.warn(`[@wcstack/state] Warning: No state source found for <${config.tagNames.state}> element with name=\"${this._name}\".`);\n }, NO_SET_TIMEOUT);\n // 要注意!!!APIでセットする場合はここで待機する必要がある --(1)\n this._state = await this._setStatePromise!;\n clearTimeout(timerId);\n }\n }\n } catch(e) {\n raiseError(`Failed to initialize state: ${e}`);\n }\n // SSR データがある場合、state 定義(メソッド/getter)を維持しつつデータ値を上書き\n if (ssrState !== null && this.__state) {\n for (const [key, value] of Object.entries(ssrState)) {\n if (key in this.__state) {\n const desc = Object.getOwnPropertyDescriptor(this.__state, key);\n // getter/setter はスキップ(定義側を優先)\n if (desc && (desc.get || desc.set)) continue;\n // 関数はスキップ\n if (typeof this.__state[key] === 'function') continue;\n }\n this.__state[key] = value;\n }\n }\n await this._loadingPromise;\n this._name = this.getAttribute('name') || 'default';\n setStateElementByName(this.rootNode!, this._name, this);\n }\n\n private async _initializeBindWebComponent() {\n if (this.hasAttribute(\"bind-component\")) {\n // wcs-stateはコンポーネントのトップレベル要素であること\n // ShadowDOM直下: parentNodeがShadowRoot → hostが親コンポーネント\n // LightDOM/ShadowDOM内のLightDOM: parentNodeがElement → それが親コンポーネント\n const parentNode = this.parentNode;\n const boundComponent = parentNode instanceof ShadowRoot\n ? parentNode.host\n : parentNode instanceof Element\n ? parentNode\n : null;\n const customTagName = boundComponent ? getCustomElement(boundComponent) : null;\n if (boundComponent === null || customTagName === null) {\n raiseError(`\"bind-component\" requires <${config.tagNames.state}> to be a direct child of a custom element.`);\n }\n // LightDOMの場合、名前空間が上位スコープと共有されるためnameが必須\n if (!(parentNode instanceof ShadowRoot) && !this.hasAttribute(\"name\")) {\n raiseError(`\"bind-component\" in Light DOM requires a \"name\" attribute to avoid namespace conflicts with the parent scope.`);\n }\n const boundComponentStateProp = this.getAttribute(\"bind-component\")!;\n await customElements.whenDefined(customTagName.toLowerCase());\n // data-wcs属性がある場合は、上位の状態によりbinding情報の設定が完了するまで待機する\n if (boundComponent.hasAttribute(config.bindAttributeName)) {\n await waitInitializeBinding(boundComponent);\n }\n if (!(boundComponentStateProp in boundComponent)) {\n raiseError(`Component does not have property \"${boundComponentStateProp}\" for state binding.`);\n }\n const state = (boundComponent as any)[boundComponentStateProp] as Record<string, any>;\n if (typeof state !== 'object' || state === null) {\n raiseError(`Component property \"${boundComponentStateProp}\" is not an object for state binding.`);\n }\n this._boundComponent = boundComponent;\n this._boundComponentStateProp = boundComponentStateProp;\n bindWebComponent(this, this._boundComponent, this._boundComponentStateProp, state);\n }\n }\n\n private async _callStateConnectedCallback(): Promise<void> {\n await this.createStateAsync(\"writable\", async (state) => {\n // stateに\"$connectedCallback\"があるか確認し、connectedCallbackAPIを呼び出す\n if (STATE_CONNECTED_CALLBACK_NAME in state) {\n await state[connectedCallbackSymbol]();\n }\n });\n }\n\n private async _initializeDCC(hostElement: Element, shadowRoot: ShadowRoot): Promise<void> {\n let state: IState;\n try {\n if (this.hasAttribute('src')) {\n const src = this.getAttribute('src')!;\n if (src.endsWith('.js')) {\n state = await loadFromScriptFile(src);\n } else {\n raiseError(`DCC: Unsupported src type: ${src}`);\n }\n } else {\n const script = this.querySelector<HTMLScriptElement>('script[type=\"module\"]');\n if (script) {\n state = await loadFromInnerScript(script, hostElement.tagName.toLowerCase());\n } else {\n raiseError(`DCC: No state source found for \"${hostElement.tagName.toLowerCase()}\".`);\n }\n }\n } catch (e) {\n raiseError(`DCC: Failed to load state: ${e}`);\n }\n defineDCC(hostElement, shadowRoot, state!);\n this._dcc = true;\n this._initialized = true;\n this._rootNode = null; // disconnectedCallbackでのstate参照を防止\n this._resolveInitialize?.();\n this._resolveConnectedCallback?.();\n }\n\n private _callStateDisconnectedCallback(): void {\n this.createState(\"writable\", (state) => {\n // stateに\"$disconnectedCallback\"があるか確認し、disconnectedCallbackAPIを呼び出す\n if (STATE_DISCONNECTED_CALLBACK_NAME in state) {\n state[disconnectedCallbackSymbol]();\n }\n });\n }\n\n async connectedCallback() {\n this._rootNode = this.getRootNode() as Node;\n // connect 世代を進めて冒頭で捕捉する(末尾の startStreams 前に照合し、\n // $connectedCallback の await 中に「切断 → 即再接続」された陳腐 connect の\n // 再開からの起動を防ぐ)。前回接続中の再 set(S13)で立った\n // _streamsStartedGeneration も世代不一致となり自然に無効化される。\n const connectGeneration = ++this._connectGeneration;\n if (!this._initialized) {\n // DCC 検出: ShadowRoot 内かつホストに data-wc-definition がある場合\n const parentNode = this.parentNode;\n if (parentNode instanceof ShadowRoot &&\n parentNode.host.hasAttribute(DCC_DEFINITION_ATTRIBUTE)) {\n await this._initializeDCC(parentNode.host, parentNode);\n return;\n }\n await this._initializeBindWebComponent();\n await this._initialize();\n this._initialized = true;\n this._resolveInitialize?.();\n } else if (!this._dcc && getStateElementByName(this._rootNode, this._name) !== this) {\n // 再接続(disconnect で名前登録が解除された後の再 connect): 登録を復元する。\n // createState が rootNode 経由でこの要素を解決できるようにするために必要\n // ($connectedCallback の再実行と $streams の initial からの再起動が依存する、設計書 §2-3)。\n setStateElementByName(this._rootNode, this._name, this);\n }\n // enable-ssr (クライアント側): SSR で $connectedCallback 済みなのでスキップ\n // inSsr() (サーバー側): レンダリング中なので実行する\n if (!this.hasAttribute('enable-ssr') || inSsr()) {\n await this._callStateConnectedCallback();\n }\n\n // サーバーモード + enable-ssr: バインディング完了後に <wcs-ssr> を生成\n if (inSsr() && this.hasAttribute('enable-ssr')) {\n await getBindingsReady(this.rootNode);\n\n const name = this.getAttribute('name') || 'default';\n const stateData = Ssr.extractStateData(this);\n const ssrEl = document.createElement(config.tagNames.ssr);\n ssrEl.setAttribute('name', name);\n ssrEl.setAttribute('version', VERSION);\n Ssr.buildContent(ssrEl, stateData);\n this.parentNode?.insertBefore(ssrEl, this);\n }\n\n // $streams の eager 起動($connectedCallback 完了後、設計書 §2-3)。\n // inSsr() 時は起動しない(SSR 出力には initial が乗る、§7-1)。\n // enable-ssr のクライアント側は $connectedCallback をスキップしても起動する\n // (stream はシリアライズ不能なランタイム副作用のため)。\n // _rootNode ガード: $connectedCallback の await 中に切断された場合は起動しない。\n // ガードなしだと startStream 内の createState が rootNode 解決(disconnectedCallback\n // で null 化済み)の raiseError で throw し、connectedCallbackPromise が永遠に\n // 未解決になる。「未接続の entry は restart しない」設計書 §3-2 とも整合し、\n // _state セッター側の startStreams 前ガード(_rootNode !== null)と対称。\n // 世代ガード(connectGeneration 照合): await 中に「切断 → 即再接続」された場合、\n // 新 connect が _rootNode を再設定済みで上のガードを素通りするため、世代不一致で\n // 陳腐化した connect の再開を検出して skip する。起動点が新 connect の末尾に\n // 一本化され、「$connectedCallback 完了後に起動」(S1)の順序保証も保たれる。\n // _streamsStartedGeneration ガード: $connectedCallback 内の setInitialState\n // (接続中の再 set)で _state セッター側が新宣言を起動済みの場合は skip する\n // (skip しないと同一 connect サイクルで source が 2 回起動する、設計書 §2-3)。\n if (\n !inSsr() &&\n this._rootNode !== null &&\n connectGeneration === this._connectGeneration &&\n this._streamsStartedGeneration !== connectGeneration\n ) {\n startStreams(this);\n }\n\n this._resolveConnectedCallback?.();\n }\n\n disconnectedCallback() {\n if (this._rootNode !== null) {\n // try/finally: ユーザーの $disconnectedCallback が throw しても後続の後始末を\n // 必ず実行する。特に abortAllStreams が飛ぶと stream が消費を続け(ゾンビ I/O)、\n // activeStateElements の強参照残留で GC が妨げられ、切断済み要素が依存駆動\n // restart の対象にも残る(設計書 §3-2 / §5-1 違反)。throw 自体は従来どおり\n // 呼び出し元へ伝播させる(変わるのは後始末の保証のみ)。\n try {\n this._callStateDisconnectedCallback();\n } finally {\n setStateElementByName(this.rootNode, this._name, null);\n clearCommandTokenRegistry(this);\n clearCommandNamespace(this);\n clearEventTokenRegistry(this);\n // stream は abort のみで registry は保持する(再接続時に同じ宣言から\n // initial で再起動できる、設計書 §5-1 / §5-2)。\n // namespace proxy の memo は破棄する(clearCommandNamespace と対称。\n // registry は残るため再接続後の初回アクセスで同内容の proxy が再生成される)。\n abortAllStreams(this);\n clearStreamNamespace(this);\n this._rootNode = null;\n }\n }\n }\n\n get initializePromise(): Promise<void> {\n return this._initializePromise;\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get listPaths(): Set<string> {\n return this._listPaths;\n }\n\n get elementPaths(): Set<string> {\n return this._elementPaths;\n }\n\n get getterPaths(): Set<string> {\n return this._getterPaths;\n }\n\n get setterPaths(): Set<string> {\n return this._setterPaths;\n }\n\n get loopContextStack(): ILoopContextStack {\n return this._loopContextStack;\n }\n\n get dynamicDependency(): Map<string, string[]> {\n return this._dynamicDependency;\n }\n\n get staticDependency(): Map<string, string[]> {\n return this._staticDependency;\n }\n\n get version(): number {\n return this._version;\n }\n\n get rootNode(): Node {\n if (this._rootNode === null) {\n raiseError('State rootNode is not available.');\n }\n return this._rootNode;\n }\n\n get boundComponentStateProp(): string | null {\n return this._boundComponentStateProp;\n }\n\n get bindableEventMap(): Record<string, string> {\n return this._bindableEventMap;\n }\n\n get commandTokenNames(): ReadonlySet<string> {\n return this._commandTokenNames;\n }\n\n get eventTokenNames(): ReadonlySet<string> {\n return this._eventTokenNames;\n }\n\n setBindableEventMap(map: Record<string, string>): void {\n this._bindableEventMap = map;\n }\n\n private _addDependency(\n map: Map<string, string[]>,\n sourcePath: string,\n targetPath: string\n ): boolean {\n const deps = map.get(sourcePath);\n if (deps === undefined) {\n map.set(sourcePath, [targetPath]);\n return true;\n } else if (!deps.includes(targetPath)) {\n deps.push(targetPath);\n return true;\n }\n return false;\n }\n\n /**\n * source, target\n *\n * products.*.price => products.*.tax\n * get \"products.*.tax\"() { return this[\"products.*.price\"] * 0.1; }\n *\n * products.*.price => products.summary\n * get \"products.summary\"() { return this.$getAll(\"products.*.price\", []).reduce(sum); }\n *\n * categories.*.name => categories.*.products.*.categoryName\n * get \"categories.*.products.*.categoryName\"() { return this[\"categories.*.name\"]; }\n *\n * @param sourcePath\n * @param targetPath\n */\n addDynamicDependency(sourcePath: string, targetPath: string): boolean {\n return this._addDependency(this._dynamicDependency, sourcePath, targetPath);\n }\n\n /**\n * source, target\n * products => products.*\n * products.* => products.*.price\n * products.* => products.*.name\n *\n * @param sourcePath\n * @param targetPath\n */\n addStaticDependency(sourcePath: string, targetPath: string): boolean {\n return this._addDependency(this._staticDependency, sourcePath, targetPath);\n }\n\n setPathInfo(path: string, bindingType: BindingType): void {\n if (bindingType === \"for\") {\n this._listPaths.add(path);\n this._elementPaths.add(path + '.' + WILDCARD);\n }\n if (!this._pathSet.has(path)) {\n const pathInfo = getPathInfo(path);\n this._pathSet.add(path);\n if (pathInfo.parentPath !== null) {\n let currentPathInfo = pathInfo;\n while(currentPathInfo.parentPath !== null) {\n if (!this.addStaticDependency(currentPathInfo.parentPath, currentPathInfo.path)) {\n break;\n }\n currentPathInfo = getPathInfo(currentPathInfo.parentPath);\n }\n }\n }\n }\n\n private _createState<T>(rootNode: Node, mutability: Mutability, callback: (state: IStateProxy) => T): T {\n try {\n const stateProxy = createStateProxy(rootNode, this._state, this._name, mutability);\n return callback(stateProxy);\n } finally {\n // cleanup if needed\n }\n }\n\n async createStateAsync(mutability: Mutability, callback: (state: IStateProxy) => Promise<void>): Promise<void> {\n return await this._createState(this.rootNode, mutability, callback);\n }\n\n createState(mutability: Mutability, callback: (state: IStateProxy) => void): void {\n this._createState(this.rootNode, mutability, callback);\n }\n\n nextVersion(): number {\n this._version++;\n return this._version;\n }\n\n get hasUpdatedCallback(): boolean {\n return this._hasUpdatedCallback;\n }\n\n get crossRowListPaths(): ReadonlySet<string> {\n return this._crossRowListPaths;\n }\n\n addCrossRowListPath(path: string): void {\n this._crossRowListPaths.add(path);\n }\n\n bindProperty(prop: string, desc: PropertyDescriptor): void {\n Object.defineProperty(this._state, prop, desc);\n if (prop === STATE_UPDATED_CALLBACK_NAME) {\n this._hasUpdatedCallback = true;\n }\n }\n\n setInitialState(state: Record<string, any>): void {\n if (!this._initialized) {\n this._resolveSetState?.(state);\n } else {\n this._state = state;\n }\n }\n}\n","import { Ssr } from \"./components/Ssr\";\nimport { State } from \"./components/State\";\nimport { config } from \"./config\";\n\nexport function registerComponents() {\n if (!customElements.get(config.tagNames.ssr)) {\n customElements.define(config.tagNames.ssr, Ssr);\n }\n if (!customElements.get(config.tagNames.state)) {\n customElements.define(config.tagNames.state, State);\n }\n}\n","import { setConfig } from \"./config\";\nimport { registerComponents } from \"./registerComponents\";\nimport { IWritableConfig } from \"./types\";\n\nexport function bootstrapState(config?: IWritableConfig): void {\n if (config) {\n setConfig(config);\n }\n registerComponents();\n}","/**\n * defineState.ts\n *\n * 状態オブジェクトに型付けを提供するためのユーティリティ。\n * defineState() はアイデンティティ関数で、ThisType<> を付与することで\n * メソッド・computed getter 内の this に型補完を提供する。\n *\n * テンプレートリテラル型によるドットパスの型解決:\n * - WcsPaths<T> : T から生成される全ドットパスの union\n * - WcsPathValue<T,P>: パス P に対応する値の型\n * - WcsPathAccessor<T>: ブラケットアクセス用マップ型\n */\n\n// ============================================================\n// Internal helper types\n// ============================================================\n\n/**\n * `any` 型を検出する。\n * `0 extends (1 & T)` は T が `any` の場合のみ true になる。\n */\ntype IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/**\n * T がドットパス再帰の対象となる「プレーンなデータオブジェクト」かどうかを判定する。\n * プリミティブ、組み込みオブジェクト (Date, Map 等)、関数、配列、any は除外。\n */\ntype IsPlainObject<T> =\n IsAny<T> extends true ? false :\n T extends\n | string | number | boolean | null | undefined | symbol | bigint\n | ((...args: any[]) => any) | Date | RegExp | Error\n | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any>\n | Promise<any> | readonly any[]\n ? false\n : T extends Record<string, any>\n ? true\n : false;\n\n/**\n * T のキーのうち、関数でないもの(データプロパティ・computed getter)を抽出する。\n * メソッド(イベントハンドラ等)はドットパスの対象外。\n * any 型のプロパティは除外せず保持する。\n */\ntype DataKeys<T> = {\n [K in keyof T & string]: IsAny<T[K]> extends true ? K : T[K] extends (...args: any[]) => any ? never : K;\n}[keyof T & string];\n\n// ============================================================\n// WcsPaths — ドットパスの union 生成\n// ============================================================\n\n/**\n * 型 T から生成される全てのドットパスの union。\n * 配列プロパティはワイルドカード `*` を使用: `items.*.name`\n *\n * 再帰の深さは最大4レベルに制限(コンパイル性能の確保)。\n *\n * @example\n * ```ts\n * type S = {\n * count: number;\n * users: { name: string; age: number }[];\n * cart: { items: { price: number }[] };\n * };\n * type P = WcsPaths<S>;\n * // = \"count\" | \"users\" | \"users.*\" | \"users.*.name\" | \"users.*.age\"\n * // | \"cart\" | \"cart.items\" | \"cart.items.*\" | \"cart.items.*.price\"\n * ```\n */\nexport type WcsPaths<T, Depth extends readonly any[] = []> =\n Depth[\"length\"] extends 4 ? never :\n {\n [K in DataKeys<T>]:\n | K\n | (T[K] extends readonly (infer E)[]\n ? IsPlainObject<E> extends true\n ? `${K}.*` | WcsSubPaths<E, `${K}.*.`, [...Depth, 0]>\n : `${K}.*`\n : IsPlainObject<T[K]> extends true\n ? WcsSubPaths<T[K], `${K}.`, [...Depth, 0]>\n : never)\n }[DataKeys<T>];\n\n/** @internal プレフィックス付きサブパスの生成ヘルパー */\ntype WcsSubPaths<T, Prefix extends string, Depth extends readonly any[]> =\n WcsPaths<T, Depth> extends infer P extends string\n ? `${Prefix}${P}`\n : never;\n\n// ============================================================\n// WcsPathValue — パスから値の型を解決\n// ============================================================\n\n/**\n * ドットパス P に対応する値の型を T から解決する。\n *\n * 解決順序:\n * 1. T の直接キー(computed getter 含む)\n * 2. `K.*` → 配列要素型\n * 3. `K.rest` → オブジェクト/配列のネストを再帰的に辿る\n *\n * @example\n * ```ts\n * type S = { cart: { items: { price: number; qty: number }[] } };\n * type V1 = WcsPathValue<S, \"cart.items.*.price\">; // number\n * type V2 = WcsPathValue<S, \"cart.items.*\">; // { price: number; qty: number }\n * type V3 = WcsPathValue<S, \"cart\">; // { items: ... }\n * ```\n */\nexport type WcsPathValue<T, P extends string> =\n // 1. Direct key (includes computed getters like \"users.*.ageCategory\")\n P extends keyof T\n ? T[P]\n // 2. K.* → array element type\n : P extends `${infer K}.*`\n ? K extends keyof T\n ? T[K] extends readonly (infer E)[] ? E : never\n : never\n // 3. K.rest → recurse into nested structure\n : P extends `${infer K}.${infer Rest}`\n ? K extends keyof T\n ? T[K] extends readonly (infer E)[]\n // Array: expect *.subpath or *\n ? Rest extends `*.${infer SubRest}`\n ? WcsPathValue<E, SubRest>\n : Rest extends \"*\"\n ? E\n : never\n // Object: recurse\n : T[K] extends Record<string, any>\n ? WcsPathValue<T[K], Rest>\n : never\n : never\n : never;\n\n// ============================================================\n// WcsPathAccessor — ブラケットアクセス用マップ型\n// ============================================================\n\n/**\n * 全ドットパスに対する型付きブラケットアクセスを提供するマップ型。\n *\n * `this[\"users.*.name\"]` のようなアクセスに対して、\n * WcsPaths で生成されたパスに対応する値の型を返す。\n */\ntype WcsPathAccessor<T> = {\n [P in WcsPaths<T>]: WcsPathValue<T, P>;\n};\n\n// ============================================================\n// State Proxy API — this 経由でアクセスできるAPI\n// ============================================================\n\n/**\n * `<wcs-state>` の Proxy 経由で提供されるAPIメソッド。\n * state定義オブジェクト内のメソッド・getter で `this.` 経由で利用可能。\n */\nexport interface WcsStateApi {\n /**\n * ワイルドカードを含むパスにマッチする全要素を配列で取得する。\n *\n * @example\n * ```ts\n * get \"cart.totalPrice\"() {\n * return this.$getAll(\"cart.items.*.price\", []).reduce((sum, v) => sum + v, 0);\n * }\n * ```\n */\n $getAll<V = any>(path: string, defaultValue?: V[]): V[];\n\n /**\n * 指定パスの更新を手動でトリガーする。\n * Proxy の set トラップを経由せずに内部状態を変更した場合に使用。\n */\n $postUpdate(path: string): void;\n\n /**\n * パスとインデックス配列を指定して、ワイルドカードを解決した値を取得・設定する。\n *\n * @param path - ワイルドカードを含むパス\n * @param indexes - 各ワイルドカード階層のインデックス\n * @param value - 設定する値(省略時は取得)\n */\n $resolve(path: string, indexes: number[], value?: any): any;\n\n /**\n * 指定パスへの依存関係を明示的に登録する。\n * computed getter 内で動的にパスを組み立てる場合に使用。\n */\n $trackDependency(path: string): void;\n\n /** `<wcs-state>` 要素への参照 */\n readonly $stateElement: HTMLElement;\n\n // ループインデックス変数 ($1〜$9)\n // for テンプレート内のイベントハンドラで、ネストされたループの\n // 各階層のインデックスにアクセスするために使用。\n readonly $1: number;\n readonly $2: number;\n readonly $3: number;\n readonly $4: number;\n readonly $5: number;\n readonly $6: number;\n readonly $7: number;\n readonly $8: number;\n readonly $9: number;\n}\n\n// ============================================================\n// WcsThis — state メソッド/getter 内の this の型\n// ============================================================\n\n/**\n * state定義オブジェクト内の `this` の型。\n *\n * - `T` のプロパティに型付きでアクセス可能(直接キー)\n * - `WcsPathAccessor<T>` によるネストされたドットパスの型付きアクセス\n * - `WcsStateApi` のメソッド ($getAll, $postUpdate 等) にアクセス可能\n * - 動的パス (`this[\\`items.${i}.name\\`]`) は型チェック対象外(キャストが必要)\n *\n * @example\n * ```ts\n * defineState({\n * count: 0,\n * users: [] as { name: string; age: number }[],\n * increment() {\n * this.count++; // number\n * this[\"users.*.name\"]; // string (パス型解決)\n * this.$getAll(\"path\", []); // API\n * }\n * });\n * ```\n */\nexport type WcsThis<T> = T & WcsStateApi & WcsPathAccessor<T>;\n\n// ============================================================\n// defineState — 型付き状態定義関数\n// ============================================================\n\n/**\n * `<wcs-state>` 用の型付き状態オブジェクトを定義する。\n *\n * ランタイムではアイデンティティ関数(引数をそのまま返す)として動作し、\n * コストはゼロ。TypeScript の `ThisType<>` を利用して、メソッド・getter 内の\n * `this` に型補完を提供する。\n *\n * ### 基本的な使い方 (TypeScript)\n * ```ts\n * import { defineState } from '@wcstack/state';\n *\n * export default defineState({\n * count: 0,\n * users: [] as { name: string; age: number }[],\n *\n * increment() {\n * this.count++; // ✅ number\n * this[\"users.*.name\"]; // ✅ string (ドットパス型解決)\n * },\n *\n * get \"users.*.ageCategory\"() {\n * return this[\"users.*.age\"] < 25 ? \"Young\" : \"Adult\";\n * }\n * });\n * ```\n *\n * ### JavaScript (JSDoc)\n * ```js\n * import { defineState } from '@wcstack/state';\n *\n * export default defineState({\n * count: 0,\n * increment() {\n * this.count++; // ✅ JSDoc + tsconfig checkJs で型補完\n * }\n * });\n * ```\n *\n * ### HTML インラインスクリプト\n * ```html\n * <wcs-state>\n * <script type=\"module\">\n * import { defineState } from '@wcstack/state';\n * export default defineState({\n * count: 0,\n * increment() { this.count++; }\n * });\n * </script>\n * </wcs-state>\n * ```\n *\n * ### ライフサイクルコールバック\n * ```ts\n * export default defineState({\n * data: null,\n * async $connectedCallback() {\n * this.data = await fetch('/api/data').then(r => r.json());\n * },\n * $disconnectedCallback() {\n * // cleanup\n * },\n * $updatedCallback() {\n * // called after DOM update\n * }\n * });\n * ```\n */\nexport function defineState<T extends Record<string, any>>(\n definition: T & ThisType<WcsThis<T>>\n): T {\n return definition;\n}\n","/**\n * filterMeta.ts — 組み込みフィルタの構造化メタデータ(単一正本・route-a A2-1)。\n *\n * これまで vscode-wcs(completionData.ts BUILTIN_FILTERS)が手で持っていたフィルタの\n * 引数仕様・型・説明を、実装側(@wcstack/state)に**正本として移設**したもの。\n * manifest.ts がこれを公開し、vscode-wcs はそれを消費して手リストを撤去できる。\n *\n * 完全性は __tests__/manifest.test.ts のドリフト検出が保証する\n * (filterMeta のキー集合 == builtinFilters のキー集合)。フィルタを追加して meta を\n * 書き忘れると CI が落ちる。\n */\n\nexport type FilterResultType = \"boolean\" | \"number\" | \"string\" | \"passthrough\";\nexport type FilterArgType = \"number\" | \"string\" | \"any\";\n\nexport interface IFilterMeta {\n /** 説明(補完・ホバー用) */\n description: string;\n /** 引数を取るか */\n hasArgs: boolean;\n /** 適用後の結果型(passthrough は入力型をそのまま返す) */\n resultType: FilterResultType;\n /** 受け入れ可能な入力型('any' は任意) */\n acceptTypes: \"any\" | readonly string[];\n /** 引数の最小数 */\n minArgs: number;\n /** 引数の最大数 */\n maxArgs: number;\n /** 各引数の期待型(省略時はチェックしない) */\n argTypes?: readonly FilterArgType[];\n}\n\n/** 組み込みフィルタ名 → 構造化メタデータ。キー集合は builtinFilters と一致しなければならない。 */\nexport const builtinFilterMeta: Record<string, IFilterMeta> = {\n // 比較・論理\n eq: { description: \"等しいか比較\", hasArgs: true, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n ne: { description: \"異なるか比較\", hasArgs: true, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n not: { description: \"ブール値を反転\", hasArgs: false, resultType: \"boolean\", acceptTypes: [\"boolean\"], minArgs: 0, maxArgs: 0 },\n lt: { description: \"より小さいか\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n le: { description: \"以下か\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n gt: { description: \"より大きいか\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n ge: { description: \"以上か\", hasArgs: true, resultType: \"boolean\", acceptTypes: [\"number\", \"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n // 算術\n inc: { description: \"加算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n dec: { description: \"減算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n mul: { description: \"乗算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n div: { description: \"除算\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n mod: { description: \"剰余\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n // 数値フォーマット\n fix: { description: \"固定小数点表記\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n locale: { description: \"ロケール形式で数値フォーマット\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"string\"] },\n // 文字列\n uc: { description: \"大文字に変換\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n lc: { description: \"小文字に変換\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n cap: { description: \"先頭文字を大文字に\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n trim: { description: \"前後の空白を削除\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n slice: { description: \"部分文字列 (start[,end])\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"number\"] },\n substr: { description: \"部分文字列 (pos,len)\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"number\"] },\n pad: { description: \"パディング (length[,char])\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 2, argTypes: [\"number\", \"string\"] },\n rep: { description: \"繰り返し (count)\", hasArgs: true, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 1, maxArgs: 1, argTypes: [\"number\"] },\n rev: { description: \"文字順を反転\", hasArgs: false, resultType: \"string\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n // 数値パース・丸め\n int: { description: \"整数にパース\", hasArgs: false, resultType: \"number\", acceptTypes: [\"string\", \"number\"], minArgs: 0, maxArgs: 0 },\n float: { description: \"浮動小数点数にパース\", hasArgs: false, resultType: \"number\", acceptTypes: [\"string\", \"number\"], minArgs: 0, maxArgs: 0 },\n round: { description: \"四捨五入\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n floor: { description: \"切り下げ\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n ceil: { description: \"切り上げ\", hasArgs: true, resultType: \"number\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n percent: { description: \"パーセンテージ形式\", hasArgs: true, resultType: \"string\", acceptTypes: [\"number\"], minArgs: 0, maxArgs: 1, argTypes: [\"number\"] },\n // 日付・時刻\n date: { description: \"ロケール形式の日付\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n time: { description: \"ロケール形式の時刻\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n datetime: { description: \"ロケール形式の日時\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n ymd: { description: \"YYYY-MM-DD 形式\", hasArgs: true, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 1, argTypes: [\"string\"] },\n // 真偽値・変換\n falsy: { description: \"偽値か判定\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n truthy: { description: \"真値か判定\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n defaults: { description: \"偽値の場合デフォルト値\", hasArgs: true, resultType: \"passthrough\", acceptTypes: \"any\", minArgs: 1, maxArgs: 1, argTypes: [\"any\"] },\n boolean: { description: \"ブール値に変換\", hasArgs: false, resultType: \"boolean\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n number: { description: \"数値に変換\", hasArgs: false, resultType: \"number\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n string: { description: \"文字列に変換\", hasArgs: false, resultType: \"string\", acceptTypes: \"any\", minArgs: 0, maxArgs: 0 },\n null: { description: \"空文字列をnullに変換\", hasArgs: false, resultType: \"passthrough\", acceptTypes: [\"string\"], minArgs: 0, maxArgs: 0 },\n};\n","/**\n * manifest.ts — `<wcs-state>` の構文・フィルタ・予約名を機械可読な単一正本として公開する。\n *\n * 目的(route-a A2-1): vscode-wcs(wcstack-intellisense)が現在ハードコードで二重実装している\n * 「フィルタ一覧・構文区切り・予約名」を、state 側の実装から導出した manifest に一本化し、\n * 手作業同期によるドリフトを構造的に断つための土台。\n *\n * 設計:\n * - `filters` は実装(builtinFilters の Record キー)から **自動導出**=実装が唯一の正本。\n * - 構文・予約名は config / define.ts の定数から導出。\n * - 将来 `dist/wcs-manifest.json` としてビルド時に書き出し、vscode-wcs がそれを読む形に発展させる。\n * - ドリフト検出テスト(__tests__/manifest.test.ts)が、フィルタ集合の golden と実装の一致を CI で保証する。\n */\nimport { config } from \"./config.js\";\nimport { outputBuiltinFilters } from \"./filters/builtinFilters.js\";\nimport { builtinFilterMeta, IFilterMeta } from \"./filters/filterMeta.js\";\nimport { STRUCTURAL_BINDING_TYPE_SET } from \"./structural/define.js\";\nimport {\n DELIMITER,\n WILDCARD,\n BINDING_SEPARATOR,\n PROP_VALUE_SEPARATOR,\n MODIFIER_SEPARATOR,\n STATE_NAME_SEPARATOR,\n FILTER_SEPARATOR,\n STATE_CONNECTED_CALLBACK_NAME,\n STATE_DISCONNECTED_CALLBACK_NAME,\n STATE_UPDATED_CALLBACK_NAME,\n WEBCOMPONENT_STATE_READY_CALLBACK_NAME,\n STATE_BINDABLES_NAME,\n STATE_COMMAND_TOKENS_NAME,\n STATE_COMMAND_NAMESPACE_NAME,\n STATE_EVENT_TOKENS_NAME,\n STATE_ON_NAME,\n} from \"./define.js\";\n\n// 消費側(vscode-wcs 等)が `@wcstack/state/manifest` から正本を直接引けるよう再エクスポート。\nexport { builtinFilterMeta } from \"./filters/filterMeta.js\";\nexport type { IFilterMeta, FilterResultType, FilterArgType } from \"./filters/filterMeta.js\";\nexport { STRUCTURAL_BINDING_TYPE_SET } from \"./structural/define.js\";\n\n/** マニフェストのバージョン(構造を変えたら上げる)。 */\nexport const WCS_MANIFEST_VERSION = 1;\n\nexport interface IWcsManifest {\n version: number;\n syntax: {\n /** バインド属性名(既定 data-wcs) */\n bindAttribute: string;\n /** タグ名(既定 wcs-state) */\n tagName: string;\n /** パス区切り(`.`) */\n pathDelimiter: string;\n /** ワイルドカード(`*`) */\n wildcard: string;\n /** バインディング構文 `[prop][#mod]: [path][@state][|filter...]` の区切り文字 */\n delimiters: {\n binding: string; // ; 複数バインディングの区切り\n propValue: string; // : prop と path の区切り\n modifier: string; // # prop と修飾子の区切り\n stateName: string; // @ path と stateName の区切り\n filter: string; // | フィルタパイプの区切り\n };\n /** 構造ディレクティブ(`<template data-wcs=\"for: ...\">` 等) */\n structuralDirectives: readonly string[];\n };\n /** 組み込みフィルタ名(builtinFilters から自動導出=実装が正本) */\n filters: string[];\n /** 組み込みフィルタの構造化メタデータ(説明・引数仕様・型)。vscode-wcs の手リスト撤去用。 */\n filterMeta: Record<string, IFilterMeta>;\n /** 予約ライフサイクルフック名 */\n reservedLifecycle: readonly string[];\n /** 予約 state API(プロトコル系の `$` 名前空間) */\n reservedStateApi: readonly string[];\n}\n\n/** 機械可読な単一正本を返す。vscode-wcs はこれを消費する想定。 */\nexport function getWcsManifest(): IWcsManifest {\n return {\n version: WCS_MANIFEST_VERSION,\n syntax: {\n bindAttribute: config.bindAttributeName,\n tagName: config.tagNames.state,\n pathDelimiter: DELIMITER,\n wildcard: WILDCARD,\n delimiters: {\n binding: BINDING_SEPARATOR,\n propValue: PROP_VALUE_SEPARATOR,\n modifier: MODIFIER_SEPARATOR,\n stateName: STATE_NAME_SEPARATOR,\n filter: FILTER_SEPARATOR,\n },\n // 正本 STRUCTURAL_BINDING_TYPE_SET から導出(手書きの二重定義を排除)。\n structuralDirectives: Array.from(STRUCTURAL_BINDING_TYPE_SET),\n },\n // 実装(Record のキー)から自動導出。手リストを持たない=ドリフトの構造的排除。\n filters: Object.keys(outputBuiltinFilters),\n filterMeta: builtinFilterMeta,\n reservedLifecycle: [\n STATE_CONNECTED_CALLBACK_NAME,\n STATE_DISCONNECTED_CALLBACK_NAME,\n STATE_UPDATED_CALLBACK_NAME,\n WEBCOMPONENT_STATE_READY_CALLBACK_NAME,\n ],\n reservedStateApi: [\n STATE_BINDABLES_NAME,\n STATE_COMMAND_TOKENS_NAME,\n STATE_COMMAND_NAMESPACE_NAME,\n STATE_EVENT_TOKENS_NAME,\n STATE_ON_NAME,\n ],\n };\n}\n"],"names":["id","_cache","cacheFilterInfos","_cacheNullListIndex","handlerByHandlerKey","bindingRegistry","getHandlerKey","registryByStateElement","getWcBindable","getEventName","EMPTY_SET","trapGet","trapSet"],"mappings":"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"}
|