@b9g/revise 0.1.0 → 0.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"contentarea.js","sources":["../src/contentarea.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\nimport {Edit} from \"./edit\";\n\nexport interface ContentEventDetail {\n\tedit: Edit;\n\tsource: string | null;\n\t// TODO: add information about changed ranges\n}\n\nexport interface ContentEventInit extends CustomEventInit<ContentEventDetail> {}\n\nexport class ContentEvent extends CustomEvent<ContentEventDetail> {\n\tconstructor(typeArg: string, eventInit: ContentEventInit) {\n\t\t// Maybe we should do some runtime eventInit validation.\n\t\tsuper(typeArg, {bubbles: true, ...eventInit});\n\t}\n}\n\n/** Whether the node’s info is up to date. */\nconst IS_VALID = 1 << 0;\n/** Whether the node is responsible for the newline before it. */\nconst PREPENDS_NEWLINE = 1 << 1;\n/** Whether the node is responsible for the newline after it. */\nconst APPENDS_NEWLINE = 1 << 2;\n\nclass NodeInfo {\n\t/** A bitmask (see flags above) */\n\tflags: number;\n\t/** The string length of this node’s contents. */\n\tsize: number;\n\t/** The start of this node’s contents relative to the start of the parent. */\n\toffset: number;\n\n\tconstructor(offset: number) {\n\t\tthis.flags = 0;\n\t\tthis.size = 0;\n\t\tthis.offset = offset;\n\t}\n}\n\ntype NodeInfoCache = Map<Node, NodeInfo>;\n\n/********************************************/\n/*** ContentAreaElement symbol properties ***/\n/********************************************/\nconst $slot = Symbol.for(\"revise$slot\");\nconst $cache = Symbol.for(\"revise$cache\");\nconst $value = Symbol.for(\"revise$value\");\nconst $observer = Symbol.for(\"revise$observer\");\nconst $selectionStart = Symbol.for(\"revise$selectionStart\");\nconst $onselectionchange = Symbol.for(\"revise$onselectionchange\");\n\nconst css = `:host {\n\tdisplay: contents;\n\twhite-space: pre-wrap;\n\twhite-space: break-spaces;\n\toverflow-wrap: break-word;\n}`;\n\nexport class ContentAreaElement extends HTMLElement implements SelectionRange {\n\t[$slot]: HTMLSlotElement;\n\t[$cache]: NodeInfoCache;\n\t[$value]: string;\n\t[$observer]: MutationObserver;\n\t// For the most part, we compute selection info on the fly, because of weird\n\t// race conditions. However, we need to retain the previous selectionStart\n\t// when building edits so that we can disambiguate edits to runs of\n\t// characters. See the Edit.diff call below.\n\t[$selectionStart]: number;\n\t[$onselectionchange]: () => void;\n\tconstructor() {\n\t\tsuper();\n\t\t{\n\t\t\t// Creating the shadow DOM.\n\t\t\tconst slot = document.createElement(\"slot\");\n\t\t\tconst shadow = this.attachShadow({mode: \"closed\"});\n\t\t\tconst style = document.createElement(\"style\");\n\t\t\tstyle.textContent = css;\n\t\t\tshadow.appendChild(style);\n\t\t\tslot.contentEditable = this.contentEditable;\n\t\t\tshadow.appendChild(slot);\n\t\t\tthis[$slot] = slot;\n\t\t}\n\n\t\tthis[$cache] = new Map();\n\t\tthis[$value] = \"\";\n\t\tthis[$observer] = new MutationObserver((records) => {\n\t\t\tvalidate(this, null, records);\n\t\t});\n\t\tthis[$selectionStart] = 0;\n\t\tthis[$onselectionchange] = () => {\n\t\t\tvalidate(this);\n\t\t\tthis[$selectionStart] = getSelectionRange(\n\t\t\t\tthis,\n\t\t\t\tthis[$cache],\n\t\t\t).selectionStart;\n\t\t};\n\t}\n\n\t/******************************/\n\t/*** Custom Element methods ***/\n\t/******************************/\n\tstatic get observedAttributes(): Array<string> {\n\t\treturn [\"contenteditable\"];\n\t}\n\n\tconnectedCallback() {\n\t\tthis[$observer].observe(this, {\n\t\t\tsubtree: true,\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [\n\t\t\t\t\"data-content\",\n\t\t\t\t\"data-contentbefore\",\n\t\t\t\t\"data-contentafter\",\n\t\t\t],\n\t\t});\n\n\t\tthis[$value] = getValue(this, this[$cache], \"\");\n\t\tthis[$selectionStart] = getSelectionRange(\n\t\t\tthis,\n\t\t\tthis[$cache],\n\t\t).selectionStart;\n\t\tdocument.addEventListener(\n\t\t\t\"selectionchange\",\n\t\t\tthis[$onselectionchange],\n\t\t\t// We use capture in an attempt to run before other event listeners.\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis[$cache].clear();\n\t\tthis[$value] = \"\";\n\t\tthis[$observer].disconnect();\n\t\t// JSDOM-based environments like Jest will make the global document null\n\t\t// before calling the disconnectedCallback for some reason.\n\t\tif (document) {\n\t\t\tdocument.removeEventListener(\n\t\t\t\t\"selectionchange\",\n\t\t\t\tthis[$onselectionchange],\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\t}\n\n\tattributeChangedCallback(name: string) {\n\t\tswitch (name) {\n\t\t\tcase \"contenteditable\": {\n\t\t\t\tconst slot = this[$slot];\n\t\t\t\t// We have to set slot.contentEditable to this.contentEditable because\n\t\t\t\t// Chrome has trouble selecting elements across shadow DOM boundaries.\n\t\t\t\t// See https://bugs.chromium.org/p/chromium/issues/detail?id=1175930\n\n\t\t\t\t// Chrome has additional issues with using the host element as a\n\t\t\t\t// contenteditable element but this normalizes some of the behavior.\n\t\t\t\tslot.contentEditable = this.contentEditable;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/***********************/\n\t/*** Content methods ***/\n\t/***********************/\n\tget value(): string {\n\t\tvalidate(this);\n\t\treturn this[$value];\n\t}\n\n\tget selectionStart(): number {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this, this[$cache]).selectionStart;\n\t}\n\n\tset selectionStart(selectionStart: number) {\n\t\tvalidate(this);\n\n\t\tconst selectionRange = getSelectionRange(this, this[$cache]);\n\t\tsetSelectionRange(\n\t\t\tthis,\n\t\t\tthis[$cache],\n\t\t\tselectionStart,\n\t\t\tselectionRange.selectionEnd,\n\t\t\tselectionRange.selectionDirection,\n\t\t);\n\t}\n\n\tget selectionEnd(): number {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this, this[$cache]).selectionEnd;\n\t}\n\n\tset selectionEnd(selectionEnd: number) {\n\t\tvalidate(this);\n\t\tconst selectionRange = getSelectionRange(this, this[$cache]);\n\t\tsetSelectionRange(\n\t\t\tthis,\n\t\t\tthis[$cache],\n\t\t\tselectionRange.selectionStart,\n\t\t\tselectionEnd,\n\t\t\tselectionRange.selectionDirection,\n\t\t);\n\t}\n\n\tget selectionDirection(): SelectionDirection {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this, this[$cache]).selectionDirection;\n\t}\n\n\tset selectionDirection(selectionDirection: SelectionDirection) {\n\t\tvalidate(this);\n\t\tconst selectionRange = getSelectionRange(this, this[$cache]);\n\t\tsetSelectionRange(\n\t\t\tthis,\n\t\t\tthis[$cache],\n\t\t\tselectionRange.selectionStart,\n\t\t\tselectionRange.selectionEnd,\n\t\t\tselectionDirection,\n\t\t);\n\t}\n\n\tgetSelectionRange(): SelectionRange {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this, this[$cache]);\n\t}\n\n\tsetSelectionRange(\n\t\tselectionStart: number,\n\t\tselectionEnd: number,\n\t\tselectionDirection: SelectionDirection = \"none\",\n\t): void {\n\t\tvalidate(this);\n\t\tsetSelectionRange(\n\t\t\tthis,\n\t\t\tthis[$cache],\n\t\t\tselectionStart,\n\t\t\tselectionEnd,\n\t\t\tselectionDirection,\n\t\t);\n\t}\n\n\tindexAt(node: Node | null, offset: number): number {\n\t\tvalidate(this);\n\t\tconst cache = this[$cache];\n\t\treturn indexAt(this, cache, node, offset);\n\t}\n\n\tnodeOffsetAt(index: number): [Node | null, number] {\n\t\tvalidate(this);\n\t\tconst cache = this[$cache];\n\t\treturn nodeOffsetAt(this, cache, index);\n\t}\n\n\tsource(source: string): boolean {\n\t\treturn validate(this, source, this[$observer].takeRecords());\n\t}\n}\n\n// TODO: custom newlines?\nconst NEWLINE = \"\\n\";\n\n// TODO: Try using getComputedStyle\nconst BLOCKLIKE_ELEMENTS = new Set([\n\t\"ADDRESS\",\n\t\"ARTICLE\",\n\t\"ASIDE\",\n\t\"BLOCKQUOTE\",\n\t\"CAPTION\",\n\t\"DETAILS\",\n\t\"DIALOG\",\n\t\"DD\",\n\t\"DIV\",\n\t\"DL\",\n\t\"DT\",\n\t\"FIELDSET\",\n\t\"FIGCAPTION\",\n\t\"FIGURE\",\n\t\"FOOTER\",\n\t\"FORM\",\n\t\"H1\",\n\t\"H2\",\n\t\"H3\",\n\t\"H4\",\n\t\"H5\",\n\t\"H6\",\n\t\"HEADER\",\n\t\"HGROUP\",\n\t\"HR\",\n\t\"LI\",\n\t\"MAIN\",\n\t\"NAV\",\n\t\"OL\",\n\t\"P\",\n\t\"PRE\",\n\t\"SECTION\",\n\t\"TABLE\",\n\t\"TR\",\n\t\"UL\",\n]);\n\nfunction validate(\n\troot: ContentAreaElement,\n\tsource: string | null = null,\n\trecords?: Array<MutationRecord> | undefined,\n): boolean {\n\tconst cache = root[$cache];\n\t// We use the existence of records to determine whether\n\t// contentchange events should be fired synchronously.\n\tlet delay = false;\n\tif (records === undefined) {\n\t\tdelay = true;\n\t\trecords = root[$observer].takeRecords();\n\t}\n\n\tif (!invalidate(root, cache, records)) {\n\t\treturn false;\n\t}\n\n\tconst oldValue = root[$value];\n\tconst oldSelectionStart = root[$selectionStart];\n\tconst value = (root[$value] = getValue(root, cache, oldValue));\n\tconst selectionStart = getSelectionRange(root, cache).selectionStart;\n\n\tconst hint = Math.min(oldSelectionStart, selectionStart);\n\t// TODO: This call is expensive. If we have getValue return an edit instead\n\t// of a string, we might be able to save a lot in CPU time.\n\tconst edit = Edit.diff(oldValue, value, hint);\n\tconst ev = new ContentEvent(\"contentchange\", {detail: {edit, source}});\n\tif (delay) {\n\t\tPromise.resolve().then(() => root.dispatchEvent(ev));\n\t} else {\n\t\troot.dispatchEvent(ev);\n\t}\n\n\treturn true;\n}\n\nfunction invalidate(\n\troot: ContentAreaElement,\n\tcache: NodeInfoCache,\n\trecords: Array<MutationRecord>,\n): boolean {\n\tif (!cache.get(root)) {\n\t\treturn true;\n\t}\n\n\tlet invalid = false;\n\tfor (let i = 0; i < records.length; i++) {\n\t\tconst record = records[i];\n\t\t// We make sure all added and removed nodes are cleared from the cache just\n\t\t// in case of any MutationObserver weirdness.\n\t\tfor (let j = 0; j < record.addedNodes.length; j++) {\n\t\t\tclear(record.addedNodes[j], cache);\n\t\t}\n\n\t\tfor (let j = 0; j < record.removedNodes.length; j++) {\n\t\t\tclear(record.removedNodes[j], cache);\n\t\t}\n\n\t\t// TODO: invalidate data-content nodes correctly.\n\t\tlet node = record.target;\n\t\tif (node === root) {\n\t\t\tinvalid = true;\n\t\t\tcontinue;\n\t\t} else if (!root.contains(node)) {\n\t\t\tclear(node, cache);\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (; node !== root; node = node.parentNode!) {\n\t\t\tif (!cache.has(node)) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst info = cache.get(node);\n\t\t\tif (info) {\n\t\t\t\tinfo.flags &= ~IS_VALID;\n\t\t\t}\n\n\t\t\tinvalid = true;\n\t\t}\n\t}\n\n\tif (invalid) {\n\t\tconst info = cache.get(root)!;\n\t\tinfo.flags &= ~IS_VALID;\n\t}\n\n\treturn invalid;\n}\n\n// This is the single most complicated function in the library!!!\n/**\n * This function both returns the content of the root (always a content-area\n * element, and populates the cache with info about the contents of nodes for\n * future reads.\n * @param root - The root element (usually a content-area element)\n * @param cache - The nodeInfo cache associated with the root\n * @param oldContent - The previous content of the root.\n */\nfunction getValue(\n\troot: Element,\n\tcache: NodeInfoCache,\n\toldContent: string,\n): string {\n\tconst walker = document.createTreeWalker(\n\t\troot,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\t// TODO: It might be faster to construct and return a edit rather than\n\t// concatenating a giant string.\n\tlet content = \"\";\n\t// Because the content variable is a heavily concatenated string and likely\n\t// inferred by most engines as requiring a “rope-like” data structure for\n\t// performance, reading from the end of the string to detect newlines can be\n\t// a bottleneck. Therefore, we store that info in this boolean instead.\n\t/** A boolean which indicates whether content currently ends in a newline. */\n\tlet hasNewline = false;\n\t/** The start of the current node relative to its parent. */\n\tlet offset = 0;\n\t// The current index into oldContent. We use this to copy unchanged text over\n\t// and track deletions.\n\t// If there are nodes which have cached start and length information, we get\n\t// their contents from oldContent string using oldIndex so we don’t have to\n\t// read it from the DOM.\n\tlet oldIndex = 0;\n\t// The current index into oldContent of the current node’s parent. We can get\n\t// the expected start of a node if none of the nodes before it were deleted\n\t// by finding the difference between oldIndex and relativeOldIndex. We can\n\t// compare this difference to the cached start information to detect\n\t// deletions.\n\tlet relativeOldIndex = 0;\n\tlet info: NodeInfo = cache.get(root)!;\n\tif (info === undefined) {\n\t\tinfo = new NodeInfo(offset);\n\t\tcache.set(root, info);\n\t}\n\n\t// A stack to save some variables as we walk up and down the tree.\n\tconst stack: Array<{relativeOldIndex: number; info: NodeInfo}> = [];\n\tfor (let node: Node | null = root, descending = true; node !== null; ) {\n\t\t// A loop to descend into the DOM tree.\n\t\twhile (descending && !(info.flags & IS_VALID)) {\n\t\t\tif (\n\t\t\t\tnode.nodeType === Node.TEXT_NODE ||\n\t\t\t\t// We treat elements with data-content attributes as opaque.\n\t\t\t\t(node as Element).hasAttribute(\"data-content\")\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// If the current node is a block-like element, and the previous\n\t\t\t// node/elements did not end with a newline, then the current element\n\t\t\t// would introduce a linebreak before its contents.\n\t\t\t// We check that the offset is non-zero so that the first child of a\n\t\t\t// parent does not introduce a newline before it.\n\t\t\tconst prependsNewline =\n\t\t\t\t!!offset && !hasNewline && isBlocklikeElement(node);\n\t\t\tif (prependsNewline) {\n\t\t\t\tcontent += NEWLINE;\n\t\t\t\thasNewline = true;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\tinfo.offset += NEWLINE.length;\n\t\t\t\tinfo.flags |= PREPENDS_NEWLINE;\n\t\t\t} else {\n\t\t\t\tinfo.flags &= ~PREPENDS_NEWLINE;\n\t\t\t}\n\n\t\t\tif ((node = walker.firstChild())) {\n\t\t\t\tdescending = true;\n\t\t\t} else {\n\t\t\t\tnode = walker.currentNode;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstack.push({relativeOldIndex, info});\n\t\t\trelativeOldIndex = oldIndex;\n\t\t\toffset = 0;\n\t\t\t// getNodeInfo\n\t\t\tinfo = cache.get(node)!;\n\t\t\tif (info === undefined) {\n\t\t\t\tinfo = new NodeInfo(offset);\n\t\t\t\tcache.set(node, info);\n\t\t\t} else {\n\t\t\t\tif (info.offset > 0) {\n\t\t\t\t\t// deletion detected\n\t\t\t\t\toldIndex += info.offset;\n\t\t\t\t}\n\n\t\t\t\tinfo.offset = offset;\n\t\t\t}\n\t\t}\n\n\t\tif (info.flags & IS_VALID) {\n\t\t\t// The node has been seen before.\n\t\t\t// Reading from oldContent because length hasn’t been invalidated.\n\t\t\tconst length = info.size;\n\t\t\tif (oldIndex + info.size > oldContent.length) {\n\t\t\t\t// This should never happen\n\t\t\t\tthrow new Error(\"String length mismatch\");\n\t\t\t}\n\n\t\t\tconst prependsNewline =\n\t\t\t\t!!offset && !hasNewline && isBlocklikeElement(node);\n\t\t\tif (prependsNewline) {\n\t\t\t\tcontent += NEWLINE;\n\t\t\t\thasNewline = true;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\tinfo.offset += NEWLINE.length;\n\t\t\t\tinfo.flags |= PREPENDS_NEWLINE;\n\t\t\t} else {\n\t\t\t\tinfo.flags &= ~PREPENDS_NEWLINE;\n\t\t\t}\n\n\t\t\tconst oldContent1 = oldContent.slice(oldIndex, oldIndex + length);\n\t\t\tcontent += oldContent1;\n\t\t\toffset += length;\n\t\t\toldIndex += length;\n\t\t\thasNewline = oldContent1.endsWith(NEWLINE);\n\t\t} else {\n\t\t\t// The node hasn’t been seen before.\n\t\t\tlet appendsNewline = false;\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst content1 = (node as Text).data;\n\t\t\t\tcontent += content1;\n\t\t\t\toffset += content1.length;\n\t\t\t\thasNewline = content1.endsWith(NEWLINE);\n\t\t\t} else if ((node as Element).hasAttribute(\"data-content\")) {\n\t\t\t\tconst content1 = (node as Element).getAttribute(\"data-content\") || \"\";\n\t\t\t\tcontent += content1;\n\t\t\t\toffset += content1.length;\n\t\t\t\thasNewline = content1.endsWith(NEWLINE);\n\t\t\t} else if (!hasNewline && isBlocklikeElement(node)) {\n\t\t\t\tcontent += NEWLINE;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\thasNewline = true;\n\t\t\t\tappendsNewline = true;\n\t\t\t} else if (node.nodeName === \"BR\") {\n\t\t\t\tcontent += NEWLINE;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\thasNewline = true;\n\t\t\t}\n\n\t\t\tinfo.size = offset - info.offset;\n\t\t\tinfo.flags |= IS_VALID;\n\t\t\tinfo.flags = appendsNewline\n\t\t\t\t? info.flags | APPENDS_NEWLINE\n\t\t\t\t: info.flags & ~APPENDS_NEWLINE;\n\t\t}\n\n\t\tif ((node = walker.nextSibling())) {\n\t\t\tdescending = true;\n\t\t\t// getNodeInfo\n\t\t\tinfo = cache.get(node)!;\n\t\t\tif (info === undefined) {\n\t\t\t\tinfo = new NodeInfo(offset);\n\t\t\t\tcache.set(node, info);\n\t\t\t} else {\n\t\t\t\tconst oldOffset = oldIndex - relativeOldIndex;\n\t\t\t\tif (info.offset > oldOffset) {\n\t\t\t\t\t// deletion detected\n\t\t\t\t\toldIndex += info.offset - oldOffset;\n\t\t\t\t} else if (info.offset < oldOffset) {\n\t\t\t\t\t// This should never happen\n\t\t\t\t\tthrow new Error(\"Offset is before old offset\");\n\t\t\t\t}\n\n\t\t\t\tinfo.offset = offset;\n\t\t\t}\n\t\t} else {\n\t\t\tdescending = false;\n\t\t\tif (walker.currentNode !== root) {\n\t\t\t\tif (!stack.length) {\n\t\t\t\t\t// This should never happen\n\t\t\t\t\tthrow new Error(\"Stack is empty\");\n\t\t\t\t}\n\n\t\t\t\t({relativeOldIndex, info} = stack.pop()!);\n\t\t\t\toffset = info.offset + offset;\n\t\t\t\tnode = walker.parentNode();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn content;\n}\n\nfunction isBlocklikeElement(node: Node): node is Element {\n\treturn (\n\t\tnode.nodeType === Node.ELEMENT_NODE && BLOCKLIKE_ELEMENTS.has(node.nodeName)\n\t);\n}\n\n/**\n * For a given parent node and node info cache, clear info for the node and all\n * child nodes from the cache.\n */\nfunction clear(parent: Node, cache: NodeInfoCache): void {\n\tconst walker = document.createTreeWalker(\n\t\tparent,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\tfor (\n\t\tlet node: Node | null = parent;\n\t\tnode !== null;\n\t\tnode = walker.nextNode()\n\t) {\n\t\tcache.delete(node);\n\t}\n}\n\n/***********************/\n/*** Selection Logic ***/\n/***********************/\nexport type SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\n/**\n * Properties which mirror the API provided by HTMLInputElement and\n * HTMLTextAreaElement.\n */\nexport interface SelectionRange {\n\tselectionStart: number;\n\tselectionEnd: number;\n\tselectionDirection: SelectionDirection;\n}\n\n/**\n * Finds the string index of a node and offset pair provided by a browser API\n * like window.getSelection() for a given root and cache.\n */\nfunction indexAt(\n\troot: Element,\n\tcache: NodeInfoCache,\n\tnode: Node | null,\n\toffset: number,\n): number {\n\tif (node == null || !root.contains(node)) {\n\t\treturn -1;\n\t}\n\n\tif (!cache.has(node)) {\n\t\t// If the node is not found in the cache but is contained in the root,\n\t\t// then it is probably the child of an element with a data-content\n\t\t// attribute.\n\t\t// TODO: Maybe a non-zero offset should put the index at the end of\n\t\t// the data-content node.\n\t\toffset = 0;\n\t\twhile (!cache.has(node)) {\n\t\t\tnode = node.parentNode!;\n\t\t}\n\t}\n\n\tlet index: number;\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\tconst info = cache.get(node)!;\n\t\tindex = offset + info.offset;\n\t\tnode = node.parentNode!;\n\t} else {\n\t\tif (offset <= 0) {\n\t\t\tindex = 0;\n\t\t} else if (offset >= node.childNodes.length) {\n\t\t\tconst info = cache.get(node)!;\n\t\t\tindex = info.size;\n\t\t\tif (info.flags & APPENDS_NEWLINE) {\n\t\t\t\tindex -= NEWLINE.length;\n\t\t\t}\n\t\t} else {\n\t\t\tlet child: Node | null = node.childNodes[offset];\n\t\t\twhile (child !== null && !cache.has(child)) {\n\t\t\t\tchild = child.previousSibling;\n\t\t\t}\n\n\t\t\tif (child === null) {\n\t\t\t\tindex = 0;\n\t\t\t} else {\n\t\t\t\tnode = child;\n\t\t\t\tconst info = cache.get(node)!;\n\t\t\t\t// If the offset references an element which prepends a newline\n\t\t\t\t// (\"hello<div>world</div>\"), we have to start from -1 because the\n\t\t\t\t// element’s info.offset will not account for the newline.\n\t\t\t\tindex = info.flags & PREPENDS_NEWLINE ? -1 : 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (; node !== root; node = node.parentNode!) {\n\t\tconst info = cache.get(node)!;\n\t\tindex += info.offset;\n\t}\n\n\treturn index;\n}\n\n/**\n * Finds the node and offset pair to use with browser APIs like\n * selection.collapse() from a given string index.\n */\nfunction nodeOffsetAt(\n\troot: Element,\n\tcache: NodeInfoCache,\n\tindex: number,\n): [Node | null, number] {\n\tconst [node, offset] = findNodeOffset(root, cache, index);\n\tif (node && node.nodeName === \"BR\") {\n\t\t// Different browsers can have trouble when calling `selection.collapse()`\n\t\t// with a BR element, so we try to avoid returning them from this function.\n\t\treturn nodeOffsetFromChild(node);\n\t}\n\n\treturn [node, offset];\n}\n\nfunction findNodeOffset(\n\troot: Element,\n\tcache: NodeInfoCache,\n\tindex: number,\n): [Node | null, number] {\n\tif (index < 0) {\n\t\treturn [null, 0];\n\t}\n\n\tconst walker = document.createTreeWalker(\n\t\troot,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\tfor (let node: Node | null = root; node !== null; ) {\n\t\tconst info = cache.get(node);\n\t\tif (info == null) {\n\t\t\treturn nodeOffsetFromChild(node, index > 0);\n\t\t} else if (info.flags & PREPENDS_NEWLINE) {\n\t\t\tindex -= NEWLINE.length;\n\t\t}\n\n\t\tif (index < 0) {\n\t\t\t// This branch should only run when an element prepends an newline\n\t\t\tconst previousSibling = walker.previousSibling();\n\t\t\tif (!previousSibling) {\n\t\t\t\t// This should never happen\n\t\t\t\tthrow new Error(\"Previous sibling missing\");\n\t\t\t}\n\n\t\t\treturn [previousSibling, getNodeLength(previousSibling)];\n\t\t} else if (index === info.size && node.nodeType === Node.TEXT_NODE) {\n\t\t\treturn [node, (node as Text).data.length];\n\t\t} else if (index >= info.size) {\n\t\t\tindex -= info.size;\n\t\t\tconst nextSibling = walker.nextSibling();\n\t\t\tif (nextSibling === null) {\n\t\t\t\t// This branch seems necessary mainly when working with data-content\n\t\t\t\t// nodes.\n\t\t\t\tif (node === root) {\n\t\t\t\t\treturn [node, getNodeLength(node)];\n\t\t\t\t}\n\n\t\t\t\treturn nodeOffsetFromChild(walker.currentNode, true);\n\t\t\t}\n\n\t\t\tnode = nextSibling;\n\t\t} else {\n\t\t\tif (\n\t\t\t\tnode.nodeType === Node.ELEMENT_NODE &&\n\t\t\t\t(node as Element).hasAttribute(\"data-content\")\n\t\t\t) {\n\t\t\t\treturn nodeOffsetFromChild(node, index > 0);\n\t\t\t}\n\n\t\t\tconst firstChild = walker.firstChild();\n\t\t\tif (firstChild === null) {\n\t\t\t\tconst offset =\n\t\t\t\t\tnode.nodeType === Node.TEXT_NODE ? index : index > 0 ? 1 : 0;\n\t\t\t\treturn [node, offset];\n\t\t\t} else {\n\t\t\t\tnode = firstChild;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst node = walker.currentNode;\n\treturn [node, getNodeLength(node)];\n}\n\nfunction getNodeLength(node: Node) {\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\treturn (node as Text).data.length;\n\t}\n\n\treturn node.childNodes.length;\n}\n\nfunction nodeOffsetFromChild(\n\tnode: Node,\n\tafter: boolean = false,\n): [Node | null, number] {\n\tconst parentNode = node.parentNode;\n\tif (parentNode === null) {\n\t\treturn [null, 0];\n\t}\n\n\tlet offset = Array.from(parentNode.childNodes).indexOf(node as ChildNode);\n\tif (after) {\n\t\toffset++;\n\t}\n\n\treturn [parentNode, offset];\n}\n\nfunction getSelectionRange(\n\troot: Element,\n\tcache: NodeInfoCache,\n): SelectionRange {\n\tconst selection = window.getSelection();\n\tif (!selection) {\n\t\treturn {selectionStart: 0, selectionEnd: 0, selectionDirection: \"none\"};\n\t}\n\n\tconst {\n\t\tfocusNode,\n\t\tfocusOffset,\n\t\tanchorNode,\n\t\tanchorOffset,\n\t\tisCollapsed,\n\t} = selection;\n\tconst focus = Math.max(0, indexAt(root, cache, focusNode, focusOffset));\n\tconst anchor = isCollapsed\n\t\t? focus\n\t\t: Math.max(0, indexAt(root, cache, anchorNode, anchorOffset));\n\treturn {\n\t\tselectionStart: Math.min(focus, anchor),\n\t\tselectionEnd: Math.max(focus, anchor),\n\t\tselectionDirection:\n\t\t\tfocus < anchor ? \"backward\" : focus > anchor ? \"forward\" : \"none\",\n\t};\n}\n\nfunction setSelectionRange(\n\troot: Element,\n\tcache: NodeInfoCache,\n\tselectionStart: number,\n\tselectionEnd: number,\n\tselectionDirection: SelectionDirection,\n): void {\n\tconst selection = window.getSelection();\n\tif (!selection) {\n\t\treturn;\n\t}\n\n\tselectionStart = Math.max(0, selectionStart || 0);\n\tselectionEnd = Math.max(0, selectionEnd || 0);\n\tif (selectionEnd < selectionStart) {\n\t\tselectionStart = selectionEnd;\n\t}\n\n\tconst [focusIndex, anchorIndex] =\n\t\tselectionDirection === \"backward\"\n\t\t\t? [selectionStart, selectionEnd]\n\t\t\t: [selectionEnd, selectionStart];\n\n\tif (focusIndex === anchorIndex) {\n\t\tconst [node, offset] = nodeOffsetAt(root, cache, focusIndex);\n\t\tselection.collapse(node, offset);\n\t} else {\n\t\tconst [anchorNode, anchorOffset] = nodeOffsetAt(root, cache, anchorIndex);\n\t\tconst [focusNode, focusOffset] = nodeOffsetAt(root, cache, focusIndex);\n\t\tif (anchorNode === null && focusNode === null) {\n\t\t\tselection.collapse(null);\n\t\t} else if (anchorNode === null) {\n\t\t\tselection.collapse(focusNode, focusOffset);\n\t\t} else if (focusNode === null) {\n\t\t\tselection.collapse(anchorNode, anchorOffset);\n\t\t} else {\n\t\t\t// This is not a method in IE. We don’t care.\n\t\t\tselection.setBaseAndExtent(\n\t\t\t\tanchorNode,\n\t\t\t\tanchorOffset,\n\t\t\t\tfocusNode,\n\t\t\t\tfocusOffset,\n\t\t\t);\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contentarea.js","sources":["../src/contentarea.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\nimport {Edit} from \"./edit.js\";\n\n// TODO: custom newlines?\nconst NEWLINE = \"\\n\";\n\nexport interface ContentEventDetail {\n\tedit: Edit;\n\tsource: string | null;\n}\n\nexport interface ContentEventInit extends CustomEventInit<ContentEventDetail> {}\n\nexport class ContentEvent extends CustomEvent<ContentEventDetail> {\n\tconstructor(typeArg: string, eventInit: ContentEventInit) {\n\t\t// Maybe we should do some runtime eventInit validation.\n\t\tsuper(typeArg, {bubbles: true, ...eventInit});\n\t}\n}\n\nexport type SelectionDirection = \"forward\" | \"backward\" | \"none\";\n\n/********************************************/\n/*** ContentAreaElement private property symbols ***/\n/********************************************/\nconst _cache = Symbol.for(\"ContentAreaElement._cache\");\nconst _value = Symbol.for(\"ContentAreaElement._value\");\nconst _observer = Symbol.for(\"ContentAreaElement._observer\");\nconst _onselectionchange = Symbol.for(\"ContentAreaElement._onselectionchange\");\nconst _selectionStart = Symbol.for(\"ContentAreaElement._selectionStart\");\n\nexport class ContentAreaElement extends HTMLElement {\n\tdeclare [_cache]: NodeInfoCache;\n\tdeclare [_value]: string;\n\tdeclare [_observer]: MutationObserver;\n\tdeclare [_onselectionchange]: () => void;\n\tdeclare [_selectionStart]: number;\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis[_cache] = new Map();\n\t\tthis[_value] = \"\";\n\t\tthis[_observer] = new MutationObserver((records) => {\n\t\t\tvalidate(this, records);\n\t\t});\n\n\t\tthis[_selectionStart] = 0;\n\t\tthis[_onselectionchange] = () => {\n\t\t\t// We keep track of the starting node offset pair to accurately diff\n\t\t\t// edits to text nodes.\n\t\t\tvalidate(this);\n\t\t\tthis[_selectionStart] = getSelectionRange(this).start;\n\t\t};\n\n\t\tthis.addEventListener(\"input\", () => {\n\t\t\t// This is necessary for Safari bugs where fast-repeating edits which\n\t\t\t// cause >40ms of execution cause the selection to lag and make pending\n\t\t\t// edits appear elsewhere in the DOM.\n\t\t\tvalidate(this);\n\t\t});\n\t}\n\n\t/******************************/\n\t/*** Custom Element methods ***/\n\t/******************************/\n\tconnectedCallback() {\n\t\tthis[_observer].observe(this, {\n\t\t\tsubtree: true,\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [\n\t\t\t\t\"data-content\",\n\t\t\t\t// TODO: implement these attributes\n\t\t\t\t//\"data-contentbefore\",\n\t\t\t\t//\"data-contentafter\",\n\t\t\t],\n\t\t});\n\n\t\tvalidate(this);\n\t\tdocument.addEventListener(\n\t\t\t\"selectionchange\",\n\t\t\tthis[_onselectionchange],\n\t\t\t// We use capture in an attempt to run before other event listeners.\n\t\t\ttrue,\n\t\t);\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis[_cache].clear();\n\t\tthis[_value] = \"\";\n\t\tthis[_observer].disconnect();\n\t\t// JSDOM-based environments like Jest sometimes make the global document\n\t\t// null before calling the disconnectedCallback for some reason.\n\t\tif (document) {\n\t\t\tdocument.removeEventListener(\n\t\t\t\t\"selectionchange\",\n\t\t\t\tthis[_onselectionchange],\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\t}\n\n\tget value(): string {\n\t\tvalidate(this);\n\t\treturn this[_value];\n\t}\n\n\tget selectionStart(): number {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this).start;\n\t}\n\n\tset selectionStart(start: number) {\n\t\tvalidate(this);\n\n\t\tconst {end, direction} = getSelectionRange(this);\n\t\tsetSelectionRange(this, {start, end, direction});\n\t}\n\n\tget selectionEnd(): number {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this).end;\n\t}\n\n\tset selectionEnd(end: number) {\n\t\tvalidate(this);\n\t\tconst {start, direction} = getSelectionRange(this);\n\t\tsetSelectionRange(this, {start, end, direction});\n\t}\n\n\tget selectionDirection(): SelectionDirection {\n\t\tvalidate(this);\n\t\treturn getSelectionRange(this).direction;\n\t}\n\n\tset selectionDirection(direction: SelectionDirection) {\n\t\tvalidate(this);\n\t\tconst {start, end} = getSelectionRange(this);\n\t\tsetSelectionRange(this, {start, end, direction});\n\t}\n\n\tsetSelectionRange(\n\t\tstart: number,\n\t\tend: number,\n\t\tdirection: SelectionDirection = \"none\",\n\t): void {\n\t\tvalidate(this);\n\t\tsetSelectionRange(this, {start, end, direction});\n\t}\n\n\tindexAt(node: Node | null, offset: number): number {\n\t\tvalidate(this);\n\t\treturn indexAt(this, node, offset);\n\t}\n\n\tnodeOffsetAt(index: number): [Node | null, number] {\n\t\tvalidate(this);\n\t\treturn nodeOffsetAt(this, index);\n\t}\n\n\tsource(source: string): boolean {\n\t\treturn validate(this, this[_observer].takeRecords(), source);\n\t}\n}\n\n/*** NodeInfo.flags ***/\n/** Whether the node is old. */\nconst IS_OLD = 1 << 0;\n/** Whether the node’s info is still up-to-date. */\nconst IS_VALID = 1 << 1;\n/** Whether the node has a styling of type display: block or similar. */\nconst IS_BLOCKLIKE = 1 << 2;\n/** Whether the node is responsible for the newline before it. */\nconst PREPENDS_NEWLINE = 1 << 3;\n/** Whether the node is responsible for the newline after it. */\nconst APPENDS_NEWLINE = 1 << 4;\n\n/** Data associated with the child nodes of a ContentAreaElement. */\nclass NodeInfo {\n\t// TODO: explain the relationship of these numbers to newline stuff\n\t/** The start of this node’s contents relative to the start of the parent. */\n\tdeclare offset: number;\n\t/** The string length of this node’s contents. */\n\tdeclare length: number;\n\t/** A bitmask (see flags above) */\n\tdeclare flags: number;\n\n\tconstructor(offset: number) {\n\t\tthis.offset = offset;\n\t\tthis.length = 0;\n\t\tthis.flags = 0;\n\t}\n}\n\n/** Each ContentAreaElement is associated with its own private cache. */\ntype NodeInfoCache = Map<Node, NodeInfo>;\n\n/**\n * Should be called before calling any ContentAreaElement methods.\n *\n * This function ensures the cache is up to date.\n *\n * Dispatches \"contentchange\" events.\n *\n * @returns whether a change was detected\n */\nfunction validate(\n\t_this: ContentAreaElement,\n\trecords: Array<MutationRecord> = _this[_observer].takeRecords(),\n\tsource: string | null = null,\n): boolean {\n\tif (typeof _this !== \"object\" || _this[_cache] == null) {\n\t\tthrow new TypeError(\"this is not a ContentAreaElement\");\n\t}\n\n\tif (!invalidate(_this, records)) {\n\t\treturn false;\n\t}\n\n\tconst oldValue = _this[_value];\n\tconst edit = diff(_this, oldValue, _this[_selectionStart]);\n\t_this[_value] = edit.apply(oldValue);\n\tconst ev = new ContentEvent(\"contentchange\", {detail: {edit, source}});\n\tPromise.resolve().then(() => _this.dispatchEvent(ev));\n\treturn true;\n}\n\nfunction invalidate(\n\t_this: ContentAreaElement,\n\trecords: Array<MutationRecord>,\n): boolean {\n\tconst cache = _this[_cache];\n\tif (!cache.get(_this)) {\n\t\t// The root ContentAreaElement will not be deleted from the cache until the\n\t\t// element is removed from the DOM, so this is the first time the\n\t\t// ContentAreaElement is being validated.\n\t\treturn true;\n\t}\n\n\tlet invalid = false;\n\tfor (let i = 0; i < records.length; i++) {\n\t\tconst record = records[i];\n\t\t// We make sure all added and removed nodes and their children are deleted\n\t\t// from the cache in case of any weirdness where nodes have been moved.\n\t\tfor (let j = 0; j < record.addedNodes.length; j++) {\n\t\t\tclear(record.addedNodes[j], cache);\n\t\t}\n\n\t\tfor (let j = 0; j < record.removedNodes.length; j++) {\n\t\t\tclear(record.removedNodes[j], cache);\n\t\t}\n\n\t\tlet node = record.target;\n\t\tif (node === _this) {\n\t\t\tinvalid = true;\n\t\t\tcontinue;\n\t\t} else if (!_this.contains(node)) {\n\t\t\tclear(node, cache);\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (; node !== _this; node = node.parentNode!) {\n\t\t\tif (!cache.has(node)) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst nodeInfo = cache.get(node);\n\t\t\tif (nodeInfo) {\n\t\t\t\tnodeInfo.flags &= ~IS_VALID;\n\t\t\t}\n\n\t\t\tinvalid = true;\n\t\t}\n\t}\n\n\tif (invalid) {\n\t\tconst nodeInfo = cache.get(_this)!;\n\t\tnodeInfo.flags &= ~IS_VALID;\n\t}\n\n\treturn invalid;\n}\n\n/**\n * For a given parent node and node info cache, clear the info for the node and\n * all of its child nodes from the cache.\n */\nfunction clear(parent: Node, cache: NodeInfoCache): void {\n\tconst walker = document.createTreeWalker(\n\t\tparent,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\tfor (\n\t\tlet node: Node | null = parent;\n\t\tnode !== null;\n\t\tnode = walker.nextNode()\n\t) {\n\t\tcache.delete(node);\n\t}\n}\n\n// THIS IS THE MOST COMPLICATED FUNCTION IN THE LIBRARY!\n/**\n * This function both returns an edit which represents changes to the\n * ContentAreaElement, and populates the cache with info about nodes for future\n * reads.\n */\nfunction diff(\n\t_this: ContentAreaElement,\n\toldValue: string,\n\toldSelectionStart: number,\n): Edit {\n\tconst walker = document.createTreeWalker(\n\t\t_this,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\tconst cache = _this[_cache];\n\tconst stack: Array<{nodeInfo: NodeInfo; oldIndexRelative: number}> = [];\n\tlet nodeInfo: NodeInfo;\n\tlet value = \"\";\n\tfor (\n\t\tlet node: Node = _this,\n\t\t\tdescending = true,\n\t\t\t/** the current offset relative to the parent */\n\t\t\toffset = 0,\n\t\t\t/** the index into the old string */\n\t\t\toldIndex = 0,\n\t\t\t/** the index into the old string of the parent */\n\t\t\toldIndexRelative = 0,\n\t\t\t/** Whether or not the value being built currently ends with a newline */\n\t\t\thasNewline = false;\n\t\t;\n\t\tnode = walker.currentNode\n\t) {\n\t\tif (descending) {\n\t\t\t// PRE-ORDER LOGIC\n\t\t\tnodeInfo = cache.get(node)!;\n\t\t\tif (nodeInfo === undefined) {\n\t\t\t\tcache.set(node, (nodeInfo = new NodeInfo(offset)));\n\t\t\t\tif (isBlocklikeElement(node)) {\n\t\t\t\t\tnodeInfo.flags |= IS_BLOCKLIKE;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst expectedOffset = oldIndex - oldIndexRelative;\n\t\t\t\tconst deleteLength = nodeInfo.offset - expectedOffset;\n\t\t\t\tif (deleteLength < 0) {\n\t\t\t\t\t// this should never happen\n\t\t\t\t\tthrow new Error(\"cache offset error\");\n\t\t\t\t} else if (deleteLength > 0) {\n\t\t\t\t\t// deletion detected\n\t\t\t\t\toldIndex += deleteLength;\n\t\t\t\t}\n\n\t\t\t\tnodeInfo.offset = offset;\n\t\t\t}\n\n\t\t\tif (offset && !hasNewline && nodeInfo.flags & IS_BLOCKLIKE) {\n\t\t\t\t// Block-like elements prepend a newline when they appear after text or\n\t\t\t\t// inline elements.\n\t\t\t\thasNewline = true;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\tvalue += NEWLINE;\n\t\t\t\tif (nodeInfo.flags & PREPENDS_NEWLINE) {\n\t\t\t\t\toldIndex += NEWLINE.length;\n\t\t\t\t}\n\n\t\t\t\tnodeInfo.flags |= PREPENDS_NEWLINE;\n\t\t\t} else {\n\t\t\t\tif (nodeInfo.flags & PREPENDS_NEWLINE) {\n\t\t\t\t\t// deletion detected\n\t\t\t\t\toldIndex += NEWLINE.length;\n\t\t\t\t}\n\n\t\t\t\tnodeInfo.flags &= ~PREPENDS_NEWLINE;\n\t\t\t}\n\n\t\t\tdescending = false;\n\t\t\tif (nodeInfo.flags & IS_VALID) {\n\t\t\t\t// The node and its children are unchanged, so we read from the length.\n\t\t\t\tif (nodeInfo.length) {\n\t\t\t\t\tvalue += oldValue.slice(oldIndex, oldIndex + nodeInfo.length);\n\t\t\t\t\toldIndex += nodeInfo.length;\n\t\t\t\t\toffset += nodeInfo.length;\n\t\t\t\t\thasNewline =\n\t\t\t\t\t\toldValue.slice(Math.max(0, oldIndex - NEWLINE.length), oldIndex) ===\n\t\t\t\t\t\tNEWLINE;\n\t\t\t\t}\n\t\t\t} else if (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = (node as Text).data;\n\t\t\t\tif (text.length) {\n\t\t\t\t\tvalue += text;\n\t\t\t\t\toffset += text.length;\n\t\t\t\t\thasNewline = text.endsWith(NEWLINE);\n\t\t\t\t}\n\n\t\t\t\tif (nodeInfo.flags & IS_OLD) {\n\t\t\t\t\toldIndex += nodeInfo.length;\n\t\t\t\t}\n\t\t\t} else if ((node as Element).hasAttribute(\"data-content\")) {\n\t\t\t\tconst text = (node as Element).getAttribute(\"data-content\") || \"\";\n\t\t\t\tif (text.length) {\n\t\t\t\t\tvalue += text;\n\t\t\t\t\toffset += text.length;\n\t\t\t\t\thasNewline = text.endsWith(NEWLINE);\n\t\t\t\t}\n\n\t\t\t\tif (nodeInfo.flags & IS_OLD) {\n\t\t\t\t\toldIndex += nodeInfo.length;\n\t\t\t\t}\n\t\t\t} else if (node.nodeName === \"BR\") {\n\t\t\t\tvalue += NEWLINE;\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t\thasNewline = true;\n\t\t\t\tif (nodeInfo.flags & IS_OLD) {\n\t\t\t\t\toldIndex += nodeInfo.length;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdescending = !!walker.firstChild();\n\t\t\t\tif (descending) {\n\t\t\t\t\tstack.push({nodeInfo, oldIndexRelative});\n\t\t\t\t\toffset = 0;\n\t\t\t\t\toldIndexRelative = oldIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!stack.length) {\n\t\t\t\t// This should never happen.\n\t\t\t\tthrow new Error(\"Stack is empty\");\n\t\t\t}\n\n\t\t\t// If the child node prepends a newline, add to offset to increase the\n\t\t\t// length of the parent node.\n\t\t\tif (nodeInfo!.flags & PREPENDS_NEWLINE) {\n\t\t\t\toffset += NEWLINE.length;\n\t\t\t}\n\n\t\t\t({nodeInfo, oldIndexRelative} = stack.pop()!);\n\t\t\toffset = nodeInfo.offset + offset;\n\t\t}\n\n\t\tif (!descending) {\n\t\t\t// POST-ORDER LOGIC\n\t\t\tif (!(nodeInfo.flags & IS_VALID)) {\n\t\t\t\t// TODO: Figure out if we should always recalculate APPENDS_NEWLINE???\n\t\t\t\tif (!hasNewline && nodeInfo.flags & IS_BLOCKLIKE) {\n\t\t\t\t\tvalue += NEWLINE;\n\t\t\t\t\toffset += NEWLINE.length;\n\t\t\t\t\thasNewline = true;\n\t\t\t\t\tnodeInfo.flags |= APPENDS_NEWLINE;\n\t\t\t\t} else {\n\t\t\t\t\tnodeInfo.flags &= ~APPENDS_NEWLINE;\n\t\t\t\t}\n\n\t\t\t\tnodeInfo.length = offset - nodeInfo.offset;\n\t\t\t\tnodeInfo.flags |= IS_VALID;\n\t\t\t}\n\n\t\t\tnodeInfo.flags |= IS_OLD;\n\n\t\t\tdescending = !!walker.nextSibling();\n\t\t\tif (!descending) {\n\t\t\t\tif (walker.currentNode === _this) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\twalker.parentNode();\n\t\t\t}\n\t\t}\n\n\t\tif (oldIndex > oldValue.length) {\n\t\t\t// This should never happen.\n\t\t\tthrow new Error(\"cache length error\");\n\t\t}\n\t}\n\n\tconst selectionStart = getSelectionRange(_this).start;\n\t// TODO: Doing a diff over the entirety of both oldValue and value is a\n\t// performance bottleneck. Figure out how to reduce the search for changed\n\t// values.\n\treturn Edit.diff(\n\t\toldValue,\n\t\tvalue,\n\t\tMath.min(oldSelectionStart, selectionStart),\n\t);\n}\n\nfunction getStartNodeOffset(): [Node | null, number] {\n\tconst selection = document.getSelection();\n\tif (selection && selection.rangeCount) {\n\t\tconst range = selection.getRangeAt(0);\n\t\treturn [range.startContainer, range.startOffset];\n\t}\n\n\treturn [null, 0];\n}\n\nconst BLOCKLIKE_DISPLAYS = new Set([\n\t\"block\",\n\t\"flex\",\n\t\"grid\",\n\t\"flow-root\",\n\t\"list-item\",\n\t\"table\",\n\t\"table-row-group\",\n\t\"table-header-group\",\n\t\"table-footer-group\",\n\t\"table-row\",\n\t\"table-caption\",\n]);\n\nfunction isBlocklikeElement(node: Node): node is Element {\n\treturn (\n\t\tnode.nodeType === Node.ELEMENT_NODE &&\n\t\tBLOCKLIKE_DISPLAYS.has(\n\t\t\t// handle two-value display syntax like `display: block flex`\n\t\t\tgetComputedStyle(node as Element).display.split(\" \")[0],\n\t\t)\n\t);\n}\n\n/***********************/\n/*** Selection Logic ***/\n/***********************/\n/**\n * Finds the string index of a node and offset pair provided by a browser API\n * like document.getSelection() for a given root and cache.\n */\nfunction indexAt(\n\t_this: ContentAreaElement,\n\tnode: Node | null,\n\toffset: number,\n): number {\n\tconst cache = _this[_cache];\n\tif (node == null || !_this.contains(node)) {\n\t\treturn -1;\n\t}\n\n\tif (!cache.has(node)) {\n\t\t// If the node is not found in the cache but is contained in the root, then\n\t\t// it is the child of an element with a data-content attribute.\n\t\toffset = 0;\n\t\twhile (!cache.has(node)) {\n\t\t\tnode = node.parentNode!;\n\t\t}\n\t}\n\n\tlet index: number;\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\tconst nodeInfo = cache.get(node)!;\n\t\tindex = offset + nodeInfo.offset;\n\t\tnode = node.parentNode!;\n\t} else {\n\t\tif (offset <= 0) {\n\t\t\tindex = 0;\n\t\t} else if (offset >= node.childNodes.length) {\n\t\t\tconst nodeInfo = cache.get(node)!;\n\t\t\tindex =\n\t\t\t\tnodeInfo.flags & APPENDS_NEWLINE\n\t\t\t\t\t? nodeInfo.length - NEWLINE.length\n\t\t\t\t\t: nodeInfo.length;\n\t\t} else {\n\t\t\tlet child: Node | null = node.childNodes[offset];\n\t\t\twhile (child !== null && !cache.has(child)) {\n\t\t\t\tchild = child.previousSibling;\n\t\t\t}\n\n\t\t\tif (child === null) {\n\t\t\t\tindex = 0;\n\t\t\t} else {\n\t\t\t\tnode = child;\n\t\t\t\tconst nodeInfo = cache.get(node)!;\n\t\t\t\t// If the offset references an element which prepends a newline\n\t\t\t\t// (\"hello<div>world</div>\"), we have to start from -1 because the\n\t\t\t\t// element’s info.offset will not account for the newline.\n\t\t\t\tindex = nodeInfo.flags & PREPENDS_NEWLINE ? -1 : 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (; node !== _this; node = node.parentNode!) {\n\t\tconst nodeInfo = cache.get(node)!;\n\t\tindex += nodeInfo.offset;\n\t\tif (nodeInfo.flags & PREPENDS_NEWLINE) {\n\t\t\tindex += NEWLINE.length;\n\t\t}\n\t}\n\n\treturn index;\n}\n\n/**\n * Finds the node and offset pair to use with browser APIs like\n * selection.collapse() from a given string index.\n */\nfunction nodeOffsetAt(\n\t_this: ContentAreaElement,\n\tindex: number,\n): [Node | null, number] {\n\tif (index < 0) {\n\t\treturn [null, 0];\n\t}\n\n\tconst [node, offset] = findNodeOffset(_this, index);\n\tif (node && node.nodeName === \"BR\") {\n\t\t// Some browsers seem to have trouble when calling `selection.collapse()`\n\t\t// with a BR element, so we try to avoid returning them from this function.\n\t\treturn nodeOffsetFromChild(node);\n\t}\n\n\treturn [node, offset];\n}\n\n// TODO: Can this function be inlined?\nfunction findNodeOffset(\n\t_this: ContentAreaElement,\n\tindex: number,\n): [Node | null, number] {\n\tconst cache = _this[_cache];\n\tconst walker = document.createTreeWalker(\n\t\t_this,\n\t\tNodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,\n\t);\n\n\tfor (let node: Node | null = _this; node !== null; ) {\n\t\tconst nodeInfo = cache.get(node);\n\t\tif (nodeInfo == null) {\n\t\t\treturn nodeOffsetFromChild(node, index > 0);\n\t\t}\n\n\t\tif (nodeInfo.flags & PREPENDS_NEWLINE) {\n\t\t\tindex -= 1;\n\t\t}\n\n\t\tif (index === nodeInfo.length && node.nodeType === Node.TEXT_NODE) {\n\t\t\treturn [node, (node as Text).data.length];\n\t\t} else if (index >= nodeInfo.length) {\n\t\t\tindex -= nodeInfo.length;\n\t\t\tconst nextSibling = walker.nextSibling();\n\t\t\tif (nextSibling === null) {\n\t\t\t\t// This branch seems necessary mainly when working with data-content\n\t\t\t\t// nodes.\n\t\t\t\tif (node === _this) {\n\t\t\t\t\treturn [node, getNodeLength(node)];\n\t\t\t\t}\n\n\t\t\t\treturn nodeOffsetFromChild(walker.currentNode, true);\n\t\t\t}\n\n\t\t\tnode = nextSibling;\n\t\t} else {\n\t\t\tif (\n\t\t\t\tnode.nodeType === Node.ELEMENT_NODE &&\n\t\t\t\t(node as Element).hasAttribute(\"data-content\")\n\t\t\t) {\n\t\t\t\treturn nodeOffsetFromChild(node, index > 0);\n\t\t\t}\n\n\t\t\tconst firstChild = walker.firstChild();\n\t\t\tif (firstChild === null) {\n\t\t\t\tconst offset =\n\t\t\t\t\tnode.nodeType === Node.TEXT_NODE ? index : index > 0 ? 1 : 0;\n\t\t\t\treturn [node, offset];\n\t\t\t} else {\n\t\t\t\tnode = firstChild;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst node = walker.currentNode;\n\treturn [node, getNodeLength(node)];\n}\n\nfunction getNodeLength(node: Node) {\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\treturn (node as Text).data.length;\n\t}\n\n\treturn node.childNodes.length;\n}\n\nfunction nodeOffsetFromChild(\n\tnode: Node,\n\tafter: boolean = false,\n): [Node | null, number] {\n\tconst parentNode = node.parentNode;\n\tif (parentNode === null) {\n\t\treturn [null, 0];\n\t}\n\n\tlet offset = Array.from(parentNode.childNodes).indexOf(node as ChildNode);\n\tif (after) {\n\t\toffset++;\n\t}\n\n\treturn [parentNode, offset];\n}\n\ninterface SelectionRange {\n\tstart: number;\n\tend: number;\n\tdirection: SelectionDirection;\n}\n\nfunction getSelectionRange(_this: ContentAreaElement): SelectionRange {\n\tconst selection = document.getSelection();\n\tif (!selection) {\n\t\treturn {start: 0, end: 0, direction: \"none\"};\n\t}\n\n\tconst {\n\t\tfocusNode,\n\t\tfocusOffset,\n\t\tanchorNode,\n\t\tanchorOffset,\n\t\tisCollapsed,\n\t} = selection;\n\tconst focus = Math.max(0, indexAt(_this, focusNode, focusOffset));\n\tconst anchor = isCollapsed\n\t\t? focus\n\t\t: Math.max(0, indexAt(_this, anchorNode, anchorOffset));\n\treturn {\n\t\tstart: Math.min(focus, anchor),\n\t\tend: Math.max(focus, anchor),\n\t\tdirection:\n\t\t\tfocus < anchor ? \"backward\" : focus > anchor ? \"forward\" : \"none\",\n\t};\n}\n\nfunction setSelectionRange(\n\t_this: ContentAreaElement,\n\t{start, end, direction}: SelectionRange,\n): void {\n\tconst selection = document.getSelection();\n\tif (!selection) {\n\t\treturn;\n\t}\n\n\tstart = Math.max(0, start || 0);\n\tend = Math.max(0, end || 0);\n\tif (end < start) {\n\t\tstart = end;\n\t}\n\n\t// Focus is the side of the selection where the pointer is released.\n\tconst [focus, anchor] =\n\t\tdirection === \"backward\" ? [start, end] : [end, start];\n\n\tif (focus === anchor) {\n\t\tconst [node, offset] = nodeOffsetAt(_this, focus);\n\t\tselection.collapse(node, offset);\n\t} else {\n\t\tconst [anchorNode, anchorOffset] = nodeOffsetAt(_this, anchor);\n\t\tconst [focusNode, focusOffset] = nodeOffsetAt(_this, focus);\n\t\tif (anchorNode === null && focusNode === null) {\n\t\t\tselection.collapse(null);\n\t\t} else if (anchorNode === null) {\n\t\t\tselection.collapse(focusNode, focusOffset);\n\t\t} else if (focusNode === null) {\n\t\t\tselection.collapse(anchorNode, anchorOffset);\n\t\t} else {\n\t\t\t// This method is not implemented in IE.\n\t\t\tselection.setBaseAndExtent(\n\t\t\t\tanchorNode,\n\t\t\t\tanchorOffset,\n\t\t\t\tfocusNode,\n\t\t\t\tfocusOffset,\n\t\t\t);\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AASf,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+B,CAAA,CAAA,CAAA;IAChE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,SAA2B,CAAA,CAAA,CAAA,CAAA;;AAEvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAG,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;CAC9C,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA;AAID,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAC,CAAC,CAAA;AACvD,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAC,CAAC,CAAA;AACvD,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA8B,CAAC,CAAC,CAAA;AAC7D,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuC,CAAC,CAAC,CAAA;AAC/E,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoC,CAAC,CAAC,CAAA;AAEnE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA;AAMlD,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAC,CAAA;AAER,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAE,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAG,EAAE,CAAC,CAAA;CAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAG,IAAI,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;AAEH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;YAG/B,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAAA,CAAA,CAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;YAInC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;CACH,CAAA,CAAA,CAAA,CAAA,CAAA;;;;IAKD,iBAAiB,CAAA,CAAA,CAAA,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,eAAe,CAAE,CAAA,CAAA,CAAA;gBAChB,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;AAId,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QAEH,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACxB,iBAAiB,CACjB,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA;;AAExB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CACJ,CAAC,CAAA;CACF,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,oBAAoB,CAAA,CAAA,CAAA,CAAA,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAC,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAG,EAAE,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAC,CAAA;;;AAG7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,QAAQ,CAAE,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3B,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjB,CAAI,CAAA,CAAA,CAAA,CAAC,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CACxB,CAAA,CAAA,CAAA,CAAA,CAAI,CACJ,CAAC,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACD,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA;QACR,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;CACpB,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,cAAc,CAAA,CAAA,CAAA,CAAA,CAAA;QACjB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA;CACrC,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA;QAC/B,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CAEf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QACjD,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAC,CAAC,CAAA;CACjD,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,YAAY,CAAA,CAAA,CAAA,CAAA,CAAA;QACf,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;CACnC,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA;QAC3B,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QACnD,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAC,CAAC,CAAA;CACjD,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,kBAAkB,CAAA,CAAA,CAAA,CAAA,CAAA;QACrB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAA;CACzC,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6B,CAAA,CAAA,CAAA,CAAA;QACnD,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAG,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QAC7C,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAC,CAAC,CAAA;CACjD,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAChB,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CACb,GAAW,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA;QAEtC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QACf,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAC,CAAC,CAAA;CACjD,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAE,MAAc,CAAA,CAAA,CAAA,CAAA;QACxC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;CACnC,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA;QACzB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA;CACjC,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;CAC7D,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AAE/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAA,CAAA,CAAA;AASb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA;AAKD,CAAA,CAAA,CAAA,CAAA;;;;;;;;AAQG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,QAAQ,CAChB,CAAA,CAAA,CAAA,CAAA,CAAyB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAiC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAC/D,SAAwB,IAAI,CAAA,CAAA,CAAA,CAAA;IAE5B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkC,CAAC,CAAC,CAAA;AACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAE,CAAA,CAAA,CAAA;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAC,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,MAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;CAC3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA,CAAG,IAAI,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,eAAe,CAAE,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,EAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;AACvE,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC,CAAA;AACb,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAClB,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,OAA8B,CAAA,CAAA,CAAA,CAAA;AAE9B,CAAA,CAAA,CAAA,CAAA,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAE,CAAA,CAAA,CAAA;;;;AAItB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;;AAG1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,EAAE,CAAC,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA,CAAA,CAAA;CAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,EAAE,CAAC,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,YAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAC,EAAE,CAAE,CAAA,CAAA,CAAA;CACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAC,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;QACzB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA;CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;YACf,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA;YACnB,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAA,CAAA;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAA,CAAA;gBACrB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,QAAQ,CAAE,CAAA,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAE,CAAA,CAAA,CAAA;CACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAO,CAAC,CAAA;AAChB,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA;;;AAGG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,KAAoB,CAAA,CAAA,CAAA,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,gBAAgB,CACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,UAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAC9C,CAAC,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,KACC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAC9B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CACb,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CACvB,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA;;;;AAIG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,IAAI,CACZ,CAAA,CAAA,CAAA,CAAA,CAAyB,EACzB,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChB,iBAAyB,CAAA,CAAA,CAAA,CAAA;AAEzB,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,gBAAgB,CACvC,CAAA,CAAA,CAAA,CAAA,CAAK,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,UAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAC9C,CAAC,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;IAC5B,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAA0D,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AACxE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,QAAkB,CAAC,CAAA;IACvB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACC,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,KAAK,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAC,CAAA,CAAA,CAAA;;AAEV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAC,CAAA,CAAA,CAAA;;AAEZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,GAAG,CAAC,CAAA,CAAA,CAAA;;CAEpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEnB,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CACxB,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,UAAU,CAAE,CAAA,CAAA,CAAA;;AAEf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAC,CAAA;YAC5B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAE,CAAA,CAAA,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,EAAE,CAAC,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,YAAY,CAAC,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAC,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAY,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,cAAc,CAAC,CAAA;gBACtD,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAG,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;;AAErB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAC,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;qBAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAG,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;;CAE5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA;;;CAG3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAE,CAAA,CAAA,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,gBAAgB,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAE,CAAA,CAAA,CAAA;;AAEtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,gBAAgB,CAAC,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,QAAQ,CAAE,CAAA,CAAA,CAAA;;gBAE9B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;oBAC1B,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,SAAS,CAAE,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAa,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA;gBACjC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA;CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAE,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAK,CAAgB,CAAA,CAAA,CAAA,CAAC,YAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAE,CAAA,CAAA,CAAA;CAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAgB,CAAA,CAAA,CAAA,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;gBAClE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA;CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAE,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAE,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,UAAU,CAAE,CAAA,CAAA,CAAA;CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAC,QAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAAC,CAAC,CAAA;CACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA;CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAE,CAAA,CAAA,CAAA;;AAElB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;AAID,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAE,CAAA,CAAA,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAA,CAAA,CAAA;;CAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,EAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAE,CAAA,CAAA,CAAA;;CAEjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAE,CAAA,CAAA,CAAA;CACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,eAAe,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,eAAe,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,QAAQ,CAAC,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,MAAM,CAAC,CAAA;AAEzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAC,CAAA;CACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAA,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;oBACjC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;gBAED,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAE,CAAA,CAAA,CAAA;;AAE/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAC,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,cAAc,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;;;;AAItD,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA,CAAC,IAAI,CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EACR,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAI,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,EAAE,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAC3C,CAAC,CAAA;AACH,CAAC,CAAA;AAYD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;IAClC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACX,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACX,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACjB,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACpB,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACpB,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACX,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA,CAAC,CAAC,CAAA;AAEH,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,QACC,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;;AAErB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAe,CAAA,CAAA,CAAA,CAAC,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACvD,CACA,CAAA,CAAA;AACH,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA;;;AAGG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,OAAO,CACf,CAAA,CAAA,CAAA,CAAA,CAAyB,EACzB,CAAiB,CAAA,CAAA,CAAA,CAAA,CACjB,MAAc,CAAA,CAAA,CAAA,CAAA;AAEd,CAAA,CAAA,CAAA,CAAA,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;IAC5B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAA,CAAA;;;CAGrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAW,CAAC,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAa,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,SAAS,CAAE,CAAA,CAAA,CAAA;CACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAW,CAAC,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACN,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAE,CAAA,CAAA,CAAA;CAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;YAClC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;gBACJ,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAK,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;YACjD,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,eAAe,CAAC,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAED,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;;;;AAIlC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAA,CAAA;CAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAE,CAAA,CAAA,CAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAC,CAAA;AACd,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA;;;AAGG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACpB,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,KAAa,CAAA,CAAA,CAAA,CAAA;IAEb,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;;;AAGnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtB,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,KAAa,CAAA,CAAA,CAAA,CAAA;AAEb,CAAA,CAAA,CAAA,CAAA,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,MAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,gBAAgB,CACvC,CAAA,CAAA,CAAA,CAAA,CAAK,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,UAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAC9C,CAAC,CAAA;CAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA;CACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;QACjC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,mBAAmB,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,gBAAgB,CAAE,CAAA,CAAA,CAAA;CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAC,SAAS,CAAE,CAAA,CAAA,CAAA;CAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAE,CAAA,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAC,CAAA;YACzC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;;;gBAGzB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA;CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,aAAa,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,mBAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;AACrD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IACC,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAC7C,CAAA,CAAA,CAAA;CACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,mBAAmB,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAC,CAAA;YACvC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,MAAM,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAG,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AAC9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,MAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,WAAW,CAAC,CAAA;CAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,aAAa,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC,CAAA;AAED,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAK,CAAI,CAAA,CAAA,CAAA,CAAC,SAAS,CAAE,CAAA,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAQ,CAAa,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,OAAO,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,mBAAmB,CAC3B,CAAA,CAAA,CAAA,CAAU,EACV,QAAiB,KAAK,CAAA,CAAA,CAAA,CAAA;AAEtB,CAAA,CAAA,CAAA,CAAA,MAAM,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,UAAU,CAAC,CAAA;IACnC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,IAAI,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAC,CAAA;AAC1E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAK,CAAE,CAAA,CAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAC,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAQD,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAyB,CAAA,CAAA,CAAA,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAC,CAAA;CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAE,CAAA,CAAA,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAC,CAAC,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,WAAW,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CACX,CAAA,CAAA,CAAA,CAAA,CAAG,SAAS,CAAC,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;CAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA;IACzD,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA;CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAE,CAAI,CAAA,CAAA,CAAA,CAAC,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA;QAC5B,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACR,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,MAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;KAClE,CAAC,CAAA;AACH,CAAC,CAAA;AAED,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAyB,CACzB,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAE,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA;AAEvC,CAAA,CAAA,CAAA,CAAA,MAAM,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAC,CAAA;CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAE,CAAA,CAAA,CAAA;QACf,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IAED,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAC,CAAA;IAChC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA;CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;CAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CACpB,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAG,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;IAExD,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,UAAU,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;aAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,SAAS,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAC,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;aAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,UAAU,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAC,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;YAEN,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,CAAC,CAAA;AACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA;;"}