{"version":3,"file":"taiga-ui-editor-extensions-markdown.mjs","sources":["../../../projects/editor/extensions/markdown/util/dom.ts","../../../projects/editor/extensions/markdown/clipboard/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/bold/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/code/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/html/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/italic/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/link/index.ts","../../../projects/editor/extensions/markdown/extensions/marks/strike/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/blockquote/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/bullet-list/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/code-block/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/html/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/hard-break/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/heading/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/horizontal-rule/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/image/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/list-item/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/ordered-list/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/paragraph/index.ts","../../../projects/editor/extensions/markdown/util/prosemirror.ts","../../../projects/editor/extensions/markdown/extensions/nodes/table/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/task-item/index.ts","../../../projects/editor/extensions/markdown/util/markdown-it-task-lists.ts","../../../projects/editor/extensions/markdown/extensions/nodes/task-list/index.ts","../../../projects/editor/extensions/markdown/extensions/nodes/text/index.ts","../../../projects/editor/extensions/markdown/extensions/util/index.ts","../../../projects/editor/extensions/markdown/parse/index.ts","../../../projects/editor/extensions/markdown/util/markdown.ts","../../../projects/editor/extensions/markdown/serialize/state.ts","../../../projects/editor/extensions/markdown/serialize/markdown-serializer.ts","../../../projects/editor/extensions/markdown/tight-lists/index.ts","../../../projects/editor/extensions/markdown/extension/index.ts","../../../projects/editor/extensions/markdown/taiga-ui-editor-extensions-markdown.ts"],"sourcesContent":["export function tuiElementFromString(value: any): HTMLElement {\n    return new window.DOMParser().parseFromString(`<body>${value}</body>`, 'text/html')\n        .body;\n}\n\nexport function tuiExtractElement(node: Node): void {\n    const parent = node.parentElement;\n\n    const prepend = parent?.cloneNode();\n\n    while (parent?.firstChild && parent.firstChild !== node) {\n        prepend?.appendChild(parent.firstChild);\n    }\n\n    if ((prepend?.childNodes.length ?? 0) > 0 && prepend) {\n        parent?.parentElement?.insertBefore(prepend, parent);\n    }\n\n    parent?.parentElement?.insertBefore(node, parent);\n\n    if (parent?.childNodes.length === 0) {\n        parent.remove();\n    }\n}\n\nexport function tuiUnwrapElement(node: Node): void {\n    const parent = node.parentNode;\n\n    while (node.firstChild) {\n        parent?.insertBefore(node.firstChild, node);\n    }\n\n    parent?.removeChild(node);\n}\n\nexport function tuiEscapeHTML(value?: string): string {\n    return value?.replaceAll('<', '&lt;').replaceAll('>', '&gt;') ?? '';\n}\n","import {Extension} from '@tiptap/core';\nimport {DOMParser, type Slice} from '@tiptap/pm/model';\nimport {Plugin, PluginKey} from '@tiptap/pm/state';\n\nimport {tuiElementFromString} from '../util/dom';\n\nexport const TuiMarkdownClipboard = Extension.create({\n    name: 'markdownClipboard',\n    addOptions() {\n        return {\n            transformPastedText: false,\n            transformCopiedText: false,\n        };\n    },\n    addProseMirrorPlugins() {\n        return [\n            new Plugin({\n                key: new PluginKey('markdownClipboard'),\n                props: {\n                    clipboardTextParser: (text, context, plainText): Slice => {\n                        if (plainText || !this.options.transformPastedText) {\n                            return null as any; // pasting with shift key prevents formatting\n                        }\n\n                        const parsed = this.editor.storage.markdown.parser.parse(text, {\n                            inline: true,\n                        });\n\n                        return DOMParser.fromSchema(this.editor.schema).parseSlice(\n                            tuiElementFromString(parsed),\n                            {\n                                preserveWhitespace: true,\n                                context,\n                            },\n                        );\n                    },\n                    clipboardTextSerializer: (slice) => {\n                        if (!this.options.transformCopiedText) {\n                            return null;\n                        }\n\n                        return this.editor.storage.markdown.serializer.serialize(\n                            slice.content,\n                        );\n                    },\n                },\n            }),\n        ];\n    },\n});\n","import {Mark} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Mark.create({name: 'bold'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.marks.strong,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Mark} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Mark.create({name: 'code'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.marks.code,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {type Editor, getHTMLFromFragment, Mark} from '@tiptap/core';\nimport {Fragment, type Mark as ProseMark} from '@tiptap/pm/model';\n\nfunction getMarkTags(mark: ProseMark): [string, string] | null {\n    const schema = mark.type.schema;\n    const node = schema.text(' ', [mark]);\n    const html = getHTMLFromFragment(Fragment.from(node), schema);\n    const match = /^(<.*?>) (<\\/.*?>)$/.exec(html);\n\n    return match ? [match[1] ?? '', match[2] ?? ''] : null;\n}\n\nexport default Mark.create({\n    name: 'markdownHTMLMark',\n    addStorage() {\n        return {\n            markdown: {\n                serialize: {\n                    open(_: any, mark: ProseMark) {\n                        if (\n                            !((this as any).editor as Editor | undefined)?.storage\n                                .markdown.options.html\n                        ) {\n                            console.warn(\n                                `Tiptap Markdown: \"${mark.type.name}\" mark is only available in html mode`,\n                            );\n\n                            return '';\n                        }\n\n                        return getMarkTags(mark)?.[0] ?? '';\n                    },\n                    close(_: any, mark: ProseMark): string {\n                        if (\n                            !((this as any).editor as Editor | undefined)?.storage\n                                .markdown.options.html\n                        ) {\n                            return '';\n                        }\n\n                        return getMarkTags(mark)?.[1] ?? '';\n                    },\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Mark} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Mark.create({name: 'italic'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.marks.em,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Mark} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Mark.create({name: 'link'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.marks.link,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Mark} from '@tiptap/core';\n\nexport default Mark.create({name: 'strike'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: {open: '~~', close: '~~', expelEnclosingWhitespace: true},\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'blockquote'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.blockquote,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {type Editor, Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nexport default Node.create({name: 'bulletList'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode) {\n                    return state.renderList(\n                        node,\n                        '  ',\n                        () =>\n                            `${\n                                ((this as any)?.editor as Editor | undefined)?.storage\n                                    .markdown.options.bulletListMarker || '-'\n                            } `,\n                    );\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\nimport type MarkdownIt from 'markdown-it';\n\nexport default Node.create({name: 'codeBlock'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode) {\n                    state.write(`\\`\\`\\`${node.attrs.language || ''}\\n`);\n                    state.text(node.textContent, false);\n                    state.ensureNewLine();\n                    state.write('```');\n                    state.closeBlock(node);\n                },\n                parse: {\n                    setup(markdown: MarkdownIt) {\n                        markdown.set({\n                            langPrefix:\n                                (this as any).options?.languageClassPrefix ?? 'language-',\n                        });\n                    },\n                    updateDOM(element: Element) {\n                        element.innerHTML = element.innerHTML.replaceAll(\n                            '\\n</code></pre>',\n                            '</code></pre>',\n                        );\n                    },\n                },\n            },\n        };\n    },\n});\n","import {type Editor, getHTMLFromFragment, Node} from '@tiptap/core';\nimport {Fragment, type Node as ProseNode} from '@tiptap/pm/model';\n\nimport {tuiElementFromString} from '../../../util/dom';\n\nexport default Node.create({\n    name: 'markdownHTMLNode',\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode, parent: ProseNode) {\n                    if (((this as any).editor as Editor).storage.markdown.options.html) {\n                        state.write(serializeHTML(node, parent));\n                    } else {\n                        console.warn(\n                            `Tiptap Markdown: \"${node.type.name}\" node is only available in html mode`,\n                        );\n                        state.write(`[${node.type.name}]`);\n                    }\n\n                    if (node.isBlock) {\n                        state.closeBlock(node);\n                    }\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n\nfunction serializeHTML(node: ProseNode, parent: ProseNode): string {\n    const schema = node.type.schema;\n    const html = getHTMLFromFragment(Fragment.from(node), schema);\n\n    if (\n        node.isBlock &&\n        (parent instanceof Fragment || parent.type.name === schema.topNodeType.name)\n    ) {\n        return formatBlock(html);\n    }\n\n    return html;\n}\n\nfunction formatBlock(html: string): string {\n    const dom = tuiElementFromString(html);\n    const element = dom.firstElementChild;\n\n    if (element) {\n        element.innerHTML = element.innerHTML.trim() ? `\\n${element.innerHTML}\\n` : '\\n';\n    }\n\n    return element?.outerHTML ?? '';\n}\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nimport HTMLNode from '../html';\n\nexport default Node.create({name: 'hardBreak'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode, parent: ProseNode, index: number) {\n                    for (let i = index + 1; i < parent.childCount; i++) {\n                        if (parent.child(i).type !== node.type) {\n                            state.write(\n                                state.inTable\n                                    ? HTMLNode.storage.markdown.serialize.call(\n                                          this,\n                                          state,\n                                          node,\n                                          parent,\n                                      )\n                                    : '\\\\\\n',\n                            );\n\n                            return;\n                        }\n                    }\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'heading'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.heading,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'horizontalRule'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.horizontal_rule,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'image'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.image,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'listItem'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.list_item,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nfunction findIndexOfAdjacentNode(\n    node: ProseNode,\n    parent: ProseNode,\n    index: number,\n): number {\n    let i = 0;\n\n    for (; index - i > 0; i++) {\n        if (parent.child(index - i - 1).type.name !== node.type.name) {\n            break;\n        }\n    }\n\n    return i;\n}\n\nexport default Node.create({name: 'orderedList'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode, parent: ProseNode, index: number) {\n                    const start = node.attrs.start || 1;\n                    const maxW = String(start + node.childCount - 1).length;\n                    const space = state.repeat(' ', maxW + 2);\n                    const adjacentIndex = findIndexOfAdjacentNode(node, parent, index);\n                    const separator = adjacentIndex % 2 ? ') ' : '. ';\n\n                    state.renderList(node, space, (i: number) => {\n                        const nStr = String(start + i);\n\n                        return state.repeat(' ', maxW - nStr.length) + nStr + separator;\n                    });\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {defaultMarkdownSerializer} from '@tiptap/pm/markdown';\n\nexport default Node.create({name: 'paragraph'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: defaultMarkdownSerializer.nodes.paragraph,\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","export function tuiChildNodes(node: any): any[] {\n    return node?.content?.content ?? [];\n}\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nimport {tuiChildNodes} from '../../../util/prosemirror';\nimport HTMLNode from '../html';\n\nexport default Node.create({name: 'table'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode, parent: ProseNode) {\n                    if (!isMarkdownSerializable(node)) {\n                        HTMLNode.storage.markdown.serialize.call(\n                            this,\n                            state,\n                            node,\n                            parent,\n                        );\n\n                        return;\n                    }\n\n                    state.inTable = true;\n\n                    node.forEach((row: ProseNode, _p: number, i: number) => {\n                        state.write('| ');\n\n                        row.forEach((col: ProseNode, __p: number, j: number) => {\n                            if (j) {\n                                state.write(' | ');\n                            }\n\n                            const cellContent = col.firstChild;\n\n                            if (cellContent?.textContent.trim()) {\n                                state.renderInline(cellContent);\n                            }\n                        });\n\n                        state.write(' |');\n                        state.ensureNewLine();\n\n                        if (!i) {\n                            const delimiterRow = Array.from({length: row.childCount})\n                                .map(() => '---')\n                                .join(' | ');\n\n                            state.write(`| ${delimiterRow} |`);\n                            state.ensureNewLine();\n                        }\n                    });\n\n                    state.closeBlock(node);\n                    state.inTable = false;\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n\nfunction hasSpan(node: ProseNode): boolean {\n    return node.attrs.colspan > 1 || node.attrs.rowspan > 1;\n}\n\nfunction isMarkdownSerializable(node: ProseNode): boolean {\n    const rows = tuiChildNodes(node);\n    const firstRow = rows[0];\n    const bodyRows = rows.slice(1);\n\n    if (\n        tuiChildNodes(firstRow).some(\n            (cell) =>\n                cell.type.name !== 'tableHeader' || hasSpan(cell) || cell.childCount > 1,\n        )\n    ) {\n        return false;\n    }\n\n    return !bodyRows.some((row) =>\n        tuiChildNodes(row).some(\n            (cell) =>\n                cell.type.name === 'tableHeader' || hasSpan(cell) || cell.childCount > 1,\n        ),\n    );\n}\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nexport default Node.create({name: 'taskItem'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode) {\n                    const check = node.attrs.checked ? '[x]' : '[ ]';\n\n                    state.write(`${check} `);\n                    state.renderContent(node);\n                },\n                parse: {\n                    updateDOM(element: Element) {\n                        Array.from(element.querySelectorAll('.task-list-item')).forEach(\n                            (item) => {\n                                const input = item.querySelector('input');\n\n                                item.setAttribute('data-type', 'taskItem');\n\n                                if (input) {\n                                    item.setAttribute(\n                                        'data-checked',\n                                        input.checked.toString(),\n                                    );\n                                    input.remove();\n                                }\n                            },\n                        );\n                    },\n                },\n            },\n        };\n    },\n});\n","import type MarkdownIt from 'markdown-it';\n\nlet disableCheckboxes = true;\nlet useLabelWrapper = false;\nlet useLabelAfter = false;\n\nexport function tuiMarkdownItTaskList(md: any, options: any): void {\n    if (options) {\n        disableCheckboxes = !options.enabled;\n        useLabelWrapper = !!options.label;\n        useLabelAfter = !!options.labelAfter;\n    }\n\n    md.core.ruler.after('inline', 'github-task-lists', (state: any) => {\n        const tokens = state.tokens;\n\n        for (let i = 2; i < tokens.length; i++) {\n            if (isTodoItem(tokens, i)) {\n                todoify(tokens[i], state.Token);\n                attrSet(\n                    tokens[i - 2],\n                    'class',\n                    `task-list-item${!disableCheckboxes ? ' enabled' : ''}`,\n                );\n                attrSet(\n                    tokens[parentToken(tokens, i - 2)],\n                    'class',\n                    'contains-task-list',\n                );\n            }\n        }\n    });\n}\n\nfunction attrSet(token: MarkdownIt.Token, name: string, value: string): void {\n    const index = token.attrIndex(name);\n    const attr: [string, string] = [name, value];\n\n    if (index < 0) {\n        token.attrPush(attr);\n    } else if (token.attrs) {\n        token.attrs[index] = attr;\n    }\n}\n\nfunction parentToken(tokens: MarkdownIt.Token[], index: number): number {\n    const targetLevel = (tokens[index]?.level ?? 0) - 1;\n\n    for (let i = index - 1; i >= 0; i--) {\n        if (tokens[i]?.level === targetLevel) {\n            return i;\n        }\n    }\n\n    return -1;\n}\n\nfunction isTodoItem(tokens: MarkdownIt.Token[], index: number): boolean {\n    return (\n        (tokens[index] &&\n            isInline(tokens[index]!) &&\n            tokens[index - 1] &&\n            isParagraph(tokens[index - 1]!) &&\n            tokens[index - 2] &&\n            isListItem(tokens[index - 2]!) &&\n            startsWithTodoMarkdown(tokens[index]!)) ??\n        false\n    );\n}\n\nfunction todoify(token: MarkdownIt.Token, TokenConstructor: any): void {\n    token.children?.unshift(makeCheckbox(token, TokenConstructor));\n\n    if (token.children?.[1]) {\n        token.children[1].content = token.children[1].content.slice(3);\n    }\n\n    if (token.content) {\n        token.content = token.content.slice(3);\n    }\n\n    if (useLabelWrapper) {\n        if (useLabelAfter) {\n            token.children?.pop();\n\n            // Use large random number as id property of the checkbox.\n            const id = `task-item-${Math.ceil(Math.random() * (10000 * 1000) - 1000)}`;\n\n            if (token.children?.[0]) {\n                token.children[0].content = `${token.children[0].content.slice(\n                    0,\n                    -1,\n                )} id=\"${id}\">`;\n            }\n\n            token.children?.push(afterLabel(token.content, id, TokenConstructor));\n        } else {\n            token.children?.unshift(beginLabel(TokenConstructor));\n            token.children?.push(endLabel(TokenConstructor));\n        }\n    }\n}\n\nfunction makeCheckbox(token: MarkdownIt.Token, TokenConstructor: any): any {\n    const checkbox = new TokenConstructor('html_inline', '', 0);\n    const disabledAttr = disableCheckboxes ? ' disabled=\"\" ' : '';\n\n    if (token.content.startsWith('[ ] ')) {\n        checkbox.content = `<input class=\"task-list-item-checkbox\"${disabledAttr}type=\"checkbox\">`;\n    } else if (token.content.startsWith('[x] ') || token.content.startsWith('[X] ')) {\n        checkbox.content = `<input class=\"task-list-item-checkbox\" checked=\"\"${disabledAttr}type=\"checkbox\">`;\n    }\n\n    return checkbox;\n}\n\n// these next two functions are kind of hacky; probably should really be a\n// true block-level token with .tag=='label'\nfunction beginLabel(TokenConstructor: any): MarkdownIt.Token {\n    const token = new TokenConstructor('html_inline', '', 0);\n\n    token.content = '<label>';\n\n    return token;\n}\n\nfunction endLabel(TokenConstructor: any): MarkdownIt.Token {\n    const token = new TokenConstructor('html_inline', '', 0);\n\n    token.content = '</label>';\n\n    return token;\n}\n\nfunction afterLabel(\n    content: string,\n    id: string,\n    TokenConstructor: any,\n): MarkdownIt.Token {\n    const token = new TokenConstructor('html_inline', '', 0);\n\n    token.content = `<label class=\"task-list-item-label\" for=\"${id}\">${content}</label>`;\n    token.attrs = [{for: id}];\n\n    return token;\n}\n\nfunction isInline(token: MarkdownIt.Token): boolean {\n    return token.type === 'inline';\n}\n\nfunction isParagraph(token: MarkdownIt.Token): boolean {\n    return token.type === 'paragraph_open';\n}\n\nfunction isListItem(token: MarkdownIt.Token): boolean {\n    return token.type === 'list_item_open';\n}\n\nfunction startsWithTodoMarkdown(token: MarkdownIt.Token): boolean {\n    // leading whitespace in a list item is already trimmed off by markdown-it\n    return (\n        token.content.startsWith('[ ] ') ||\n        token.content.startsWith('[x] ') ||\n        token.content.startsWith('[X] ')\n    );\n}\n","import {Node} from '@tiptap/core';\nimport type MarkdownIt from 'markdown-it';\n\nimport {tuiMarkdownItTaskList} from '../../../util/markdown-it-task-lists';\nimport BulletList from '../bullet-list';\n\nexport default Node.create({name: 'taskList'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize: BulletList.storage.markdown.serialize,\n                parse: {\n                    setup(markdown: MarkdownIt) {\n                        markdown.use(tuiMarkdownItTaskList);\n                    },\n                    updateDOM(element: Element) {\n                        Array.from(\n                            element.querySelectorAll('.contains-task-list'),\n                        ).forEach((list) => {\n                            list.setAttribute('data-type', 'taskList');\n                        });\n                    },\n                },\n            },\n        };\n    },\n});\n","import {Node} from '@tiptap/core';\nimport {type Node as ProseNode} from '@tiptap/pm/model';\n\nimport {tuiEscapeHTML} from '../../../util/dom';\n\nexport default Node.create({name: 'text'}).extend({\n    addStorage() {\n        return {\n            markdown: {\n                serialize(state: any, node: ProseNode) {\n                    state.text(tuiEscapeHTML(node.text));\n                },\n                parse: {\n                    // handled by markdown-it\n                },\n            },\n        };\n    },\n});\n","import Bold from '../marks/bold';\nimport Code from '../marks/code';\nimport HTMLMark from '../marks/html';\nimport Italic from '../marks/italic';\nimport Link from '../marks/link';\nimport Strike from '../marks/strike';\nimport Blockquote from '../nodes/blockquote';\nimport BulletList from '../nodes/bullet-list';\nimport CodeBlock from '../nodes/code-block';\nimport HardBreak from '../nodes/hard-break';\nimport Heading from '../nodes/heading';\nimport HorizontalRule from '../nodes/horizontal-rule';\nimport HTMLNode from '../nodes/html';\nimport Image from '../nodes/image';\nimport ListItem from '../nodes/list-item';\nimport OrderedList from '../nodes/ordered-list';\nimport Paragraph from '../nodes/paragraph';\nimport Table from '../nodes/table';\nimport TaskItem from '../nodes/task-item';\nimport TaskList from '../nodes/task-list';\nimport Text from '../nodes/text';\n\nconst extensions = [\n    Blockquote,\n    BulletList,\n    CodeBlock,\n    HardBreak,\n    Heading,\n    HorizontalRule,\n    HTMLNode,\n    Image,\n    ListItem,\n    OrderedList,\n    Paragraph,\n    Table,\n    TaskItem,\n    TaskList,\n    Text,\n    Bold,\n    Code,\n    HTMLMark,\n    Italic,\n    Link,\n    Strike,\n] as const;\n\nexport function tuiGetMarkdownSpec(extension: any): any {\n    const markdownSpec = extension.storage?.markdown;\n    const defaultMarkdownSpec = extensions.find((e) => e.name === extension.name)?.storage\n        .markdown;\n\n    if (markdownSpec || defaultMarkdownSpec) {\n        return {\n            ...defaultMarkdownSpec,\n            ...markdownSpec,\n        };\n    }\n\n    return null;\n}\n","import {type Editor} from '@tiptap/core';\nimport MarkdownIt from 'markdown-it';\n\nimport {tuiGetMarkdownSpec} from '../extensions/util';\nimport {tuiElementFromString, tuiExtractElement, tuiUnwrapElement} from '../util/dom';\n\nexport class TuiEditorMarkdownParser {\n    protected readonly md: MarkdownIt;\n\n    constructor(\n        protected readonly editor: Editor,\n        {html, linkify, breaks}: MarkdownIt.Options,\n    ) {\n        this.md = this.withPatchedRenderer(\n            MarkdownIt({\n                html,\n                linkify,\n                breaks,\n            }),\n        );\n    }\n\n    protected parse(content: unknown, {inline}: Record<string, any> = {}): string {\n        if (typeof content === 'string') {\n            this.editor.extensionManager.extensions.forEach((extension) => {\n                tuiGetMarkdownSpec(extension)?.parse?.setup?.call(\n                    {editor: this.editor, options: extension.options},\n                    this.md,\n                );\n            });\n\n            const renderedHTML = this.md.render(content);\n            const element = tuiElementFromString(renderedHTML);\n\n            this.editor.extensionManager.extensions.forEach((extension) => {\n                tuiGetMarkdownSpec(extension)?.parse?.updateDOM?.call(\n                    {editor: this.editor, options: extension.options},\n                    element,\n                );\n            });\n\n            this.normalizeDOM(element, {inline, content});\n\n            return element.innerHTML;\n        }\n\n        return content as string;\n    }\n\n    protected normalizeDOM(\n        node: Element,\n        {inline, content}: Record<string, any>,\n    ): Element {\n        this.normalizeBlocks(node);\n\n        // remove all \\n appended by markdown-it\n        node.querySelectorAll('*').forEach((el) => {\n            if (el.nextSibling?.nodeType === Node.TEXT_NODE && !el.closest('pre')) {\n                el.nextSibling.textContent =\n                    el.nextSibling.textContent?.replace(/^\\n/, '') ?? '';\n            }\n        });\n\n        if (inline) {\n            this.normalizeInline(node, content);\n        }\n\n        return node;\n    }\n\n    protected normalizeBlocks(node: Element): void {\n        const blocks = Object.values(this.editor.schema.nodes).filter(\n            (node) => node.isBlock,\n        );\n\n        const selector = blocks\n            .map((block) => block.spec.parseDOM?.map((spec) => spec.tag))\n            .flat()\n            .filter(Boolean)\n            .join(',');\n\n        if (!selector) {\n            return;\n        }\n\n        Array.from(node.querySelectorAll(selector)).forEach((el) => {\n            if (el.parentElement?.matches('p')) {\n                tuiExtractElement(el);\n            }\n        });\n    }\n\n    protected normalizeInline(node: Element, content: string): void {\n        if (node.firstElementChild?.matches('p')) {\n            const firstParagraph = node.firstElementChild;\n            const {nextElementSibling, innerHTML} = firstParagraph;\n            const startSpaces = /^\\s+/.exec(content)?.[0] ?? '';\n            const endSpaces = !nextElementSibling\n                ? (/\\s+$/.exec(content)?.[0] ?? '')\n                : '';\n\n            if (/^\\n\\n/.exec(content)) {\n                firstParagraph.innerHTML = `${innerHTML}${endSpaces}`;\n\n                return;\n            }\n\n            tuiUnwrapElement(firstParagraph);\n\n            node.innerHTML = `${startSpaces}${node.innerHTML}${endSpaces}`;\n        }\n    }\n\n    protected withPatchedRenderer(md: MarkdownIt): MarkdownIt {\n        const withoutNewLine =\n            (renderer: MarkdownIt.Renderer.RenderRule | undefined) =>\n            (...args: any[]): string => {\n                // @ts-ignore\n                const rendered = renderer?.(...args);\n\n                if (rendered === '\\n') {\n                    return rendered;\n                }\n\n                if (rendered?.endsWith('\\n')) {\n                    return rendered.slice(0, -1);\n                }\n\n                return rendered ?? '';\n            };\n\n        md.renderer.rules.hardbreak = withoutNewLine(md.renderer.rules.hardbreak);\n        md.renderer.rules.softbreak = withoutNewLine(md.renderer.rules.softbreak);\n        md.renderer.rules.fence = withoutNewLine(md.renderer.rules.fence);\n        md.renderer.rules.code_block = withoutNewLine(md.renderer.rules.code_block);\n        md.renderer.renderToken = withoutNewLine(\n            md.renderer.renderToken.bind(md.renderer),\n        );\n\n        return md;\n    }\n}\n","import markdownIt, {type StateInline} from 'markdown-it';\n\nconst md = markdownIt();\n\ninterface TrimOptions {\n    text: string;\n    delim: string;\n    from: number;\n    to: number;\n}\n\nfunction scanDelims(text: string, pos: number): StateInline.Scanned {\n    // @ts-ignore\n    md.inline.State.prototype.scanDelims.call({src: text, posMax: text.length});\n    // @ts-ignore\n    const state = new md.inline.State(text, null, null, []);\n\n    return state.scanDelims(pos, true);\n}\n\nfunction trimStart(options: TrimOptions): any {\n    const {text, delim, from, to} = options;\n    let pos = from;\n    let res = text;\n\n    while (pos < to) {\n        if (scanDelims(res, pos).can_open) {\n            break;\n        }\n\n        res = tuiShiftDelim({text: res, delim, start: pos, offset: 1});\n        pos++;\n    }\n\n    return {text: res, from: pos, to};\n}\n\nfunction trimEnd(options: TrimOptions): any {\n    const {text, delim, from, to} = options;\n\n    let pos = to;\n    let res = text;\n\n    while (pos > from) {\n        if (scanDelims(res, pos).can_close) {\n            break;\n        }\n\n        res = tuiShiftDelim({text: res, delim, start: pos, offset: -1});\n        pos--;\n    }\n\n    return {text: res, from, to: pos};\n}\n\nexport function tuiTrimInline(options: TrimOptions): string {\n    const {text, delim, from, to} = options;\n    let state = {\n        text,\n        from,\n        to,\n    };\n\n    state = trimStart({text: state.text, delim, from: state.from, to: state.to});\n    state = trimEnd({text: state.text, delim, from: state.from, to: state.to});\n\n    if (state.to - state.from < delim.length + 1) {\n        state.text =\n            state.text.slice(0, Math.max(0, state.from)) +\n            state.text.slice(Math.max(0, state.to + delim.length));\n    }\n\n    return state.text;\n}\n\ninterface Options {\n    text: string;\n    delim: string;\n    start: number;\n    offset: number;\n}\n\nexport function tuiShiftDelim(options: Options): string {\n    const {text, delim, start, offset} = options;\n    let res =\n        text.slice(0, Math.max(0, start)) + text.slice(Math.max(0, start + delim.length));\n\n    res =\n        res.slice(0, Math.max(0, start + offset)) +\n        delim +\n        res.slice(Math.max(0, start + offset));\n\n    return res;\n}\n","import {MarkdownSerializerState as BaseMarkdownSerializerState} from '@tiptap/pm/markdown';\nimport {type Mark, type Node} from '@tiptap/pm/model';\n\nimport {tuiTrimInline} from '../util/markdown';\n\nexport class TuiMarkdownSerializerState extends BaseMarkdownSerializerState {\n    public inTable = false;\n    public inlines: any[];\n    public out: any;\n    public marks: any;\n\n    constructor(\n        nodes: readonly Node[],\n        marks: readonly Mark[],\n        options: BaseMarkdownSerializerState['options'] | undefined,\n    ) {\n        // @ts-ignore\n        super(nodes, marks, options ?? {});\n\n        this.inlines = [];\n    }\n\n    public override render(node: Node, parent: Node, index: number): void {\n        super.render(node, parent, index);\n        const top = this.inlines[this.inlines.length - 1];\n\n        if (top?.start && top?.end) {\n            const {delimiter, start, end} = this.normalizeInline(top);\n\n            this.out = tuiTrimInline({\n                text: this.out,\n                delim: delimiter,\n                from: start,\n                to: end,\n            });\n            this.inlines.pop();\n        }\n    }\n\n    public override markString(\n        mark: Mark,\n        open: boolean,\n        parent: Node,\n        index: number,\n    ): string {\n        const info = this.marks[mark.type.name];\n\n        if (info.expelEnclosingWhitespace) {\n            if (open) {\n                this.inlines.push({\n                    start: this.out.length,\n                    delimiter: info.open,\n                });\n            } else {\n                const top = this.inlines.pop();\n\n                this.inlines.push({\n                    ...top,\n                    end: this.out.length,\n                });\n            }\n        }\n\n        return super.markString(mark, open, parent, index);\n    }\n\n    protected normalizeInline(inline: any): any {\n        let {start} = inline;\n\n        while (this.out.charAt(start).match(/\\s/)) {\n            start++;\n        }\n\n        return {...inline, start};\n    }\n}\n","import {type Editor, type Mark as Mark2, type Node as Node2} from '@tiptap/core';\nimport {type Mark, type Node} from '@tiptap/pm/model';\n\nimport HTMLMark from '../extensions/marks/html';\nimport HardBreak from '../extensions/nodes/hard-break';\nimport HTMLNode from '../extensions/nodes/html';\nimport {tuiGetMarkdownSpec} from '../extensions/util';\nimport {TuiMarkdownSerializerState} from './state';\n\nexport class TuiMarkdownSerializer {\n    constructor(protected readonly editor: Editor) {}\n\n    public get nodes(): readonly Node[] {\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        return {\n            ...Object.fromEntries(\n                Object.keys(this.editor.schema.nodes).map((name) => [\n                    name,\n                    this.serializeNode(HTMLNode),\n                ]),\n            ),\n            ...Object.fromEntries(\n                this.editor.extensionManager.extensions\n                    .filter(\n                        (extension) =>\n                            extension.type === 'node' &&\n                            this.serializeNode(extension as any),\n                    )\n                    .map((extension) => [\n                        extension.name,\n                        this.serializeNode(extension as any),\n                    ]),\n            ),\n        } as Node[];\n    }\n\n    public get marks(): readonly Mark[] {\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        return {\n            ...Object.fromEntries(\n                Object.keys(this.editor.schema.marks).map((name) => [\n                    name,\n                    this.serializeMark(HTMLMark),\n                ]),\n            ),\n            ...Object.fromEntries(\n                this.editor.extensionManager.extensions\n                    .filter(\n                        (extension) =>\n                            extension.type === 'mark' &&\n                            this.serializeMark(extension as any),\n                    )\n                    .map((extension) => [\n                        extension.name,\n                        this.serializeMark(extension as any),\n                    ]),\n            ),\n        } as Mark[];\n    }\n\n    public serialize(content: Node): any {\n        const state = new TuiMarkdownSerializerState(this.nodes, this.marks, {\n            hardBreakNodeName: HardBreak.name,\n        });\n\n        state.renderContent(content);\n\n        return state.out;\n    }\n\n    public serializeNode(node: Node2): any {\n        return tuiGetMarkdownSpec(node)?.serialize?.bind({\n            editor: this.editor,\n            options: node.options,\n        });\n    }\n\n    public serializeMark(mark: Mark2): any {\n        const serialize = tuiGetMarkdownSpec(mark)?.serialize;\n\n        return serialize\n            ? {\n                  ...serialize,\n                  open:\n                      typeof serialize.open === 'function'\n                          ? serialize.open.bind({\n                                editor: this.editor,\n                                options: mark.options,\n                            })\n                          : serialize.open,\n                  close:\n                      typeof serialize.close === 'function'\n                          ? serialize.close.bind({\n                                editor: this.editor,\n                                options: mark.options,\n                            })\n                          : serialize.close,\n              }\n            : null;\n    }\n}\n","import {Extension} from '@tiptap/core';\n\nexport const TuiMarkdownTightLists = Extension.create({\n    name: 'markdownTightLists',\n    addOptions: () => ({\n        tight: true,\n        tightClass: 'tight',\n        listTypes: ['bulletList', 'orderedList'],\n    }),\n    addGlobalAttributes() {\n        return [\n            {\n                types: this.options.listTypes,\n                attributes: {\n                    tight: {\n                        default: this.options.tight,\n                        parseHTML: (element) =>\n                            element.getAttribute('data-tight') === 'true' ||\n                            !element.querySelector('p'),\n                        renderHTML: (attributes) => ({\n                            class: attributes.tight ? this.options.tightClass : null,\n                            'data-tight': attributes.tight ? 'true' : null,\n                        }),\n                    },\n                },\n            },\n        ];\n    },\n    addCommands(): any {\n        return {\n            toggleTight:\n                (tight: boolean | null = null) =>\n                ({editor, commands}: any) =>\n                    this.options.listTypes.some((name) => {\n                        if (!editor.isActive(name)) {\n                            return false;\n                        }\n\n                        const attrs = editor.getAttributes(name);\n\n                        return commands.updateAttributes(name, {\n                            tight: tight ?? !attrs?.tight,\n                        });\n                    }),\n        };\n    },\n});\n","import {Extension, extensions} from '@tiptap/core';\n\nimport {TuiMarkdownClipboard} from '../clipboard';\nimport {TuiEditorMarkdownParser} from '../parse';\nimport {TuiMarkdownSerializer} from '../serialize';\nimport {TuiMarkdownTightLists} from '../tight-lists';\n\nexport const TuiMarkdown = Extension.create({\n    name: 'markdown',\n    priority: 50,\n    addOptions() {\n        return {\n            html: true,\n            tightLists: true,\n            tightListClass: 'tight',\n            bulletListMarker: '-',\n            linkify: false,\n            breaks: false,\n            transformPastedText: false,\n            transformCopiedText: false,\n        };\n    },\n    addCommands() {\n        const commands = (extensions.Commands.config as any)?.addCommands?.();\n\n        return {\n            setContent: (content, emitUpdate, parseOptions) => (props) =>\n                commands?.setContent?.(\n                    props.editor.storage.markdown.parser.parse(content),\n                    emitUpdate,\n                    parseOptions,\n                )(props),\n            insertContentAt: (range, content, options) => (props) =>\n                commands?.insertContentAt?.(\n                    range,\n                    props.editor.storage.markdown.parser.parse(content, {inline: true}),\n                    options,\n                )(props),\n        };\n    },\n    onBeforeCreate() {\n        this.editor.storage.markdown = {\n            options: {...this.options},\n            parser: new TuiEditorMarkdownParser(this.editor, this.options),\n            serializer: new TuiMarkdownSerializer(this.editor),\n            getMarkdown: () =>\n                this.editor.storage.markdown.serializer.serialize(this.editor.state.doc),\n        };\n        (this.editor.options as any).initialContent = this.editor.options.content;\n        this.editor.options.content = this.editor.storage.markdown.parser.parse(\n            this.editor.options.content,\n        );\n    },\n    onCreate() {\n        this.editor.options.content = (this.editor.options as any).initialContent;\n        delete (this.editor.options as any).initialContent;\n    },\n    addStorage() {\n        return {\n            /// storage will be defined in onBeforeCreate() to prevent initial object overriding\n        };\n    },\n    addExtensions() {\n        return [\n            TuiMarkdownTightLists.configure({\n                tight: this.options.tightLists,\n                tightClass: this.options.tightListClass,\n            }),\n            TuiMarkdownClipboard.configure({\n                transformPastedText: this.options.transformPastedText,\n                transformCopiedText: this.options.transformCopiedText,\n            }),\n        ];\n    },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Node","markdownIt","BaseMarkdownSerializerState","extensions"],"mappings":";;;;;;AAAM,SAAU,oBAAoB,CAAC,KAAU,EAAA;AAC3C,IAAA,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,CAAS,MAAA,EAAA,KAAK,CAAS,OAAA,CAAA,EAAE,WAAW,CAAC;AAC9E,SAAA,IAAI,CAAC;AACd,CAAC;AAEK,SAAU,iBAAiB,CAAC,IAAU,EAAA;AACxC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AAElC,IAAA,MAAM,OAAO,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;IAEpC,OAAO,MAAM,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;AACrD,QAAA,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3C,KAAA;AAED,IAAA,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE;QAClD,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxD,KAAA;IAED,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAElD,IAAA,IAAI,MAAM,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC;AACnB,KAAA;AACL,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAU,EAAA;AACvC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAE/B,OAAO,IAAI,CAAC,UAAU,EAAE;QACpB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC/C,KAAA;AAED,IAAA,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAEK,SAAU,aAAa,CAAC,KAAc,EAAA;AACxC,IAAA,OAAO,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACxE;;AC/Ba,MAAA,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAAC;AACjD,IAAA,IAAI,EAAE,mBAAmB;IACzB,UAAU,GAAA;QACN,OAAO;AACH,YAAA,mBAAmB,EAAE,KAAK;AAC1B,YAAA,mBAAmB,EAAE,KAAK;SAC7B,CAAC;KACL;IACD,qBAAqB,GAAA;QACjB,OAAO;AACH,YAAA,IAAI,MAAM,CAAC;AACP,gBAAA,GAAG,EAAE,IAAI,SAAS,CAAC,mBAAmB,CAAC;AACvC,gBAAA,KAAK,EAAE;oBACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,KAAW;wBACrD,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;4BAChD,OAAO,IAAW,CAAC;AACtB,yBAAA;AAED,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3D,4BAAA,MAAM,EAAE,IAAI;AACf,yBAAA,CAAC,CAAC;AAEH,wBAAA,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CACtD,oBAAoB,CAAC,MAAM,CAAC,EAC5B;AACI,4BAAA,kBAAkB,EAAE,IAAI;4BACxB,OAAO;AACV,yBAAA,CACJ,CAAC;qBACL;AACD,oBAAA,uBAAuB,EAAE,CAAC,KAAK,KAAI;AAC/B,wBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;AACnC,4BAAA,OAAO,IAAI,CAAC;AACf,yBAAA;AAED,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CACpD,KAAK,CAAC,OAAO,CAChB,CAAC;qBACL;AACJ,iBAAA;aACJ,CAAC;SACL,CAAC;KACL;AACJ,CAAA;;AC9CD,WAAe,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,MAAM;AACjD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,WAAe,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,IAAI;AAC/C,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,SAAS,WAAW,CAAC,IAAe,EAAA;AAChC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/C,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AAC3D,CAAC;AAED,eAAe,IAAI,CAAC,MAAM,CAAC;AACvB,IAAA,IAAI,EAAE,kBAAkB;IACxB,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE;oBACP,IAAI,CAAC,CAAM,EAAE,IAAe,EAAA;AACxB,wBAAA,IACI,CAAG,IAAY,CAAC,MAA6B,EAAE,OAAO;AACjD,6BAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,EAC5B;4BACE,OAAO,CAAC,IAAI,CACR,CAAqB,kBAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAuC,qCAAA,CAAA,CAC7E,CAAC;AAEF,4BAAA,OAAO,EAAE,CAAC;AACb,yBAAA;wBAED,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;qBACvC;oBACD,KAAK,CAAC,CAAM,EAAE,IAAe,EAAA;AACzB,wBAAA,IACI,CAAG,IAAY,CAAC,MAA6B,EAAE,OAAO;AACjD,6BAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,EAC5B;AACE,4BAAA,OAAO,EAAE,CAAC;AACb,yBAAA;wBAED,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;qBACvC;AACJ,iBAAA;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;AC9CF,aAAe,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC;IAChD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,EAAE;AAC7C,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,WAAe,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,IAAI;AAC/C,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACZF,aAAe,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC;IAChD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;AACpE,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACVF,iBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC,MAAM,CAAC;IACpD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,UAAU;AACrD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,iBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC,MAAM,CAAC;IACpD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;gBACN,SAAS,CAAC,KAAU,EAAE,IAAe,EAAA;AACjC,oBAAA,OAAO,KAAK,CAAC,UAAU,CACnB,IAAI,EACJ,IAAI,EACJ,MACI,CACM,EAAA,IAAY,EAAE,MAA6B,EAAE,OAAO;yBACjD,QAAQ,CAAC,OAAO,CAAC,gBAAgB,IAAI,GAC9C,CAAA,CAAA,CAAG,CACV,CAAC;iBACL;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACpBF,gBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;gBACN,SAAS,CAAC,KAAU,EAAE,IAAe,EAAA;AACjC,oBAAA,KAAK,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAA,EAAA,CAAI,CAAC,CAAC;oBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBACpC,KAAK,CAAC,aAAa,EAAE,CAAC;AACtB,oBAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnB,oBAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAC1B;AACD,gBAAA,KAAK,EAAE;AACH,oBAAA,KAAK,CAAC,QAAoB,EAAA;wBACtB,QAAQ,CAAC,GAAG,CAAC;AACT,4BAAA,UAAU,EACL,IAAY,CAAC,OAAO,EAAE,mBAAmB,IAAI,WAAW;AAChE,yBAAA,CAAC,CAAC;qBACN;AACD,oBAAA,SAAS,CAAC,OAAgB,EAAA;AACtB,wBAAA,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAC5C,iBAAiB,EACjB,eAAe,CAClB,CAAC;qBACL;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;AC3BF,eAAeA,MAAI,CAAC,MAAM,CAAC;AACvB,IAAA,IAAI,EAAE,kBAAkB;IACxB,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,CAAC,KAAU,EAAE,IAAe,EAAE,MAAiB,EAAA;oBACpD,IAAM,IAAY,CAAC,MAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE;wBAChE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5C,qBAAA;AAAM,yBAAA;wBACH,OAAO,CAAC,IAAI,CACR,CAAqB,kBAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAuC,qCAAA,CAAA,CAC7E,CAAC;wBACF,KAAK,CAAC,KAAK,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;AACtC,qBAAA;oBAED,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,wBAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,qBAAA;iBACJ;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,IAAe,EAAE,MAAiB,EAAA;AACrD,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,IAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAE9D,IACI,IAAI,CAAC,OAAO;AACZ,SAAC,MAAM,YAAY,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAC9E;AACE,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC5B,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAA;AAC7B,IAAA,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACvC,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC;AAEtC,IAAA,IAAI,OAAO,EAAE;QACT,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAA,EAAA,EAAK,OAAO,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC;AACpF,KAAA;AAED,IAAA,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AACpC;;AClDA,gBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,CAAC,KAAU,EAAE,IAAe,EAAE,MAAiB,EAAE,KAAa,EAAA;AACnE,oBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAChD,wBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACpC,4BAAA,KAAK,CAAC,KAAK,CACP,KAAK,CAAC,OAAO;AACT,kCAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CACpC,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,CACT;kCACD,MAAM,CACf,CAAC;4BAEF,OAAO;AACV,yBAAA;AACJ,qBAAA;iBACJ;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;AC9BF,cAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC,MAAM,CAAC;IACjD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,OAAO;AAClD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,qBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAC,CAAC,MAAM,CAAC;IACxD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,eAAe;AAC1D,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,YAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,KAAK;AAChD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,eAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,SAAS;AACpD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACXF,SAAS,uBAAuB,CAC5B,IAAe,EACf,MAAiB,EACjB,KAAa,EAAA;IAEb,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1D,MAAM;AACT,SAAA;AACJ,KAAA;AAED,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAED,kBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,aAAa,EAAC,CAAC,CAAC,MAAM,CAAC;IACrD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,CAAC,KAAU,EAAE,IAAe,EAAE,MAAiB,EAAE,KAAa,EAAA;oBACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACpC,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACxD,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC1C,MAAM,aAAa,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACnE,oBAAA,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;oBAElD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAS,KAAI;wBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAE/B,wBAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AACpE,qBAAC,CAAC,CAAC;iBACN;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACvCF,gBAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,yBAAyB,CAAC,KAAK,CAAC,SAAS;AACpD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACdI,SAAU,aAAa,CAAC,IAAS,EAAA;AACnC,IAAA,OAAO,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;AACxC;;ACIA,YAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,CAAC,KAAU,EAAE,IAAe,EAAE,MAAiB,EAAA;AACpD,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;AAC/B,wBAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CACpC,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,CACT,CAAC;wBAEF,OAAO;AACV,qBAAA;AAED,oBAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;oBAErB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,EAAU,EAAE,CAAS,KAAI;AACnD,wBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAElB,GAAG,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,GAAW,EAAE,CAAS,KAAI;AACnD,4BAAA,IAAI,CAAC,EAAE;AACH,gCAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,6BAAA;AAED,4BAAA,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC;AAEnC,4BAAA,IAAI,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE;AACjC,gCAAA,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACnC,6BAAA;AACL,yBAAC,CAAC,CAAC;AAEH,wBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAClB,KAAK,CAAC,aAAa,EAAE,CAAC;wBAEtB,IAAI,CAAC,CAAC,EAAE;AACJ,4BAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC;AACpD,iCAAA,GAAG,CAAC,MAAM,KAAK,CAAC;iCAChB,IAAI,CAAC,KAAK,CAAC,CAAC;AAEjB,4BAAA,KAAK,CAAC,KAAK,CAAC,KAAK,YAAY,CAAA,EAAA,CAAI,CAAC,CAAC;4BACnC,KAAK,CAAC,aAAa,EAAE,CAAC;AACzB,yBAAA;AACL,qBAAC,CAAC,CAAC;AAEH,oBAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;iBACzB;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC,CAAC;AAEH,SAAS,OAAO,CAAC,IAAe,EAAA;AAC5B,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAe,EAAA;AAC3C,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACjC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE/B,IAAA,IACI,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxB,CAAC,IAAI,KACD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAC/E,EACH;AACE,QAAA,OAAO,KAAK,CAAC;AAChB,KAAA;AAED,IAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KACtB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CACnB,CAAC,IAAI,KACD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAC/E,CACJ,CAAC;AACN;;ACpFA,eAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;gBACN,SAAS,CAAC,KAAU,EAAE,IAAe,EAAA;AACjC,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAEjD,oBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;AACzB,oBAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;iBAC7B;AACD,gBAAA,KAAK,EAAE;AACH,oBAAA,SAAS,CAAC,OAAgB,EAAA;AACtB,wBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAC3D,CAAC,IAAI,KAAI;4BACL,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAE1C,4BAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAE3C,4BAAA,IAAI,KAAK,EAAE;AACP,gCAAA,IAAI,CAAC,YAAY,CACb,cAAc,EACd,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAC3B,CAAC;gCACF,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB,6BAAA;AACL,yBAAC,CACJ,CAAC;qBACL;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACjCF,IAAI,iBAAiB,GAAG,IAAI,CAAC;AAC7B,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;AAEV,SAAA,qBAAqB,CAAC,EAAO,EAAE,OAAY,EAAA;AACvD,IAAA,IAAI,OAAO,EAAE;AACT,QAAA,iBAAiB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC,QAAA,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;AACxC,KAAA;AAED,IAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,KAAU,KAAI;AAC9D,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;gBACvB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,CACH,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EACb,OAAO,EACP,CAAA,cAAA,EAAiB,CAAC,iBAAiB,GAAG,UAAU,GAAG,EAAE,CAAE,CAAA,CAC1D,CAAC;AACF,gBAAA,OAAO,CACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAClC,OAAO,EACP,oBAAoB,CACvB,CAAC;AACL,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,OAAO,CAAC,KAAuB,EAAE,IAAY,EAAE,KAAa,EAAA;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpC,IAAA,MAAM,IAAI,GAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,KAAA;SAAM,IAAI,KAAK,CAAC,KAAK,EAAE;AACpB,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC7B,KAAA;AACL,CAAC;AAED,SAAS,WAAW,CAAC,MAA0B,EAAE,KAAa,EAAA;AAC1D,IAAA,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AAEpD,IAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,WAAW,EAAE;AAClC,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AACJ,KAAA;IAED,OAAO,CAAC,CAAC,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,MAA0B,EAAE,KAAa,EAAA;AACzD,IAAA,QACI,CAAC,MAAM,CAAC,KAAK,CAAC;AACV,QAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;AACxB,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,QAAA,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;AAC/B,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;AAC9B,QAAA,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;AAC1C,QAAA,KAAK,EACP;AACN,CAAC;AAED,SAAS,OAAO,CAAC,KAAuB,EAAE,gBAAqB,EAAA;AAC3D,IAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE/D,IAAA,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;QACrB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,KAAA;IAED,IAAI,KAAK,CAAC,OAAO,EAAE;QACf,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAA;AAED,IAAA,IAAI,eAAe,EAAE;AACjB,QAAA,IAAI,aAAa,EAAE;AACf,YAAA,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;;YAGtB,MAAM,EAAE,GAAG,CAAa,UAAA,EAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA,CAAE,CAAC;AAE3E,YAAA,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;AACrB,gBAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAG,EAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAC1D,CAAC,EACD,CAAC,CAAC,CACL,CAAA,KAAA,EAAQ,EAAE,CAAA,EAAA,CAAI,CAAC;AACnB,aAAA;AAED,YAAA,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzE,SAAA;AAAM,aAAA;YACH,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACtD,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpD,SAAA;AACJ,KAAA;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB,EAAE,gBAAqB,EAAA;IAChE,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,EAAE,CAAC;IAE9D,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAClC,QAAA,QAAQ,CAAC,OAAO,GAAG,CAAyC,sCAAA,EAAA,YAAY,kBAAkB,CAAC;AAC9F,KAAA;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC7E,QAAA,QAAQ,CAAC,OAAO,GAAG,CAAoD,iDAAA,EAAA,YAAY,kBAAkB,CAAC;AACzG,KAAA;AAED,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;AACA;AACA,SAAS,UAAU,CAAC,gBAAqB,EAAA;IACrC,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzD,IAAA,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;AAE1B,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,gBAAqB,EAAA;IACnC,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzD,IAAA,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;AAE3B,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CACf,OAAe,EACf,EAAU,EACV,gBAAqB,EAAA;IAErB,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEzD,KAAK,CAAC,OAAO,GAAG,CAAA,yCAAA,EAA4C,EAAE,CAAK,EAAA,EAAA,OAAO,UAAU,CAAC;IACrF,KAAK,CAAC,KAAK,GAAG,CAAC,EAAC,GAAG,EAAE,EAAE,EAAC,CAAC,CAAC;AAE1B,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB,EAAA;AACrC,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB,EAAA;AACxC,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,KAAuB,EAAA;AACvC,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC3C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAuB,EAAA;;IAEnD,QACI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;AAChC,QAAA,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAClC;AACN;;AChKA,eAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;AACN,gBAAA,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;AAChD,gBAAA,KAAK,EAAE;AACH,oBAAA,KAAK,CAAC,QAAoB,EAAA;AACtB,wBAAA,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;qBACvC;AACD,oBAAA,SAAS,CAAC,OAAgB,EAAA;AACtB,wBAAA,KAAK,CAAC,IAAI,CACN,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAClD,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACf,4BAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC/C,yBAAC,CAAC,CAAC;qBACN;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACrBF,WAAeA,MAAI,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,GAAA;QACN,OAAO;AACH,YAAA,QAAQ,EAAE;gBACN,SAAS,CAAC,KAAU,EAAE,IAAe,EAAA;oBACjC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACxC;AACD,gBAAA,KAAK,EAAE;;AAEN,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACJ,CAAA,CAAC;;ACIF,MAAM,UAAU,GAAG;IACf,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,OAAO;IACP,cAAc;IACd,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,WAAW;IACX,SAAS;IACT,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,MAAM;CACA,CAAC;AAEL,SAAU,kBAAkB,CAAC,SAAc,EAAA;AAC7C,IAAA,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjD,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO;AACjF,SAAA,QAAQ,CAAC;IAEd,IAAI,YAAY,IAAI,mBAAmB,EAAE;QACrC,OAAO;AACH,YAAA,GAAG,mBAAmB;AACtB,YAAA,GAAG,YAAY;SAClB,CAAC;AACL,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AAChB;;MCrDa,uBAAuB,CAAA;IAGhC,WACuB,CAAA,MAAc,EACjC,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAqB,EAAA;QADxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAGjC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAC9B,UAAU,CAAC;YACP,IAAI;YACJ,OAAO;YACP,MAAM;AACT,SAAA,CAAC,CACL,CAAC;KACL;AAES,IAAA,KAAK,CAAC,OAAgB,EAAE,EAAC,MAAM,KAAyB,EAAE,EAAA;AAChE,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC1D,gBAAA,kBAAkB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAC7C,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAC,EACjD,IAAI,CAAC,EAAE,CACV,CAAC;AACN,aAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAEnD,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC1D,kBAAkB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CACjD,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAC,EACjD,OAAO,CACV,CAAC;AACN,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;YAE9C,OAAO,OAAO,CAAC,SAAS,CAAC;AAC5B,SAAA;AAED,QAAA,OAAO,OAAiB,CAAC;KAC5B;AAES,IAAA,YAAY,CAClB,IAAa,EACb,EAAC,MAAM,EAAE,OAAO,EAAsB,EAAA;AAEtC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;QAG3B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACtC,YAAA,IAAI,EAAE,CAAC,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnE,EAAE,CAAC,WAAW,CAAC,WAAW;AACtB,oBAAA,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAC5D,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAES,IAAA,eAAe,CAAC,IAAa,EAAA;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CACzD,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CACzB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM;aAClB,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,aAAA,IAAI,EAAE;aACN,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;AACV,SAAA;AAED,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACvD,IAAI,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACzB,aAAA;AACL,SAAC,CAAC,CAAC;KACN;IAES,eAAe,CAAC,IAAa,EAAE,OAAe,EAAA;QACpD,IAAI,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC9C,YAAA,MAAM,EAAC,kBAAkB,EAAE,SAAS,EAAC,GAAG,cAAc,CAAC;AACvD,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,CAAC,kBAAkB;AACjC,mBAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;kBAChC,EAAE,CAAC;AAET,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACvB,cAAc,CAAC,SAAS,GAAG,CAAA,EAAG,SAAS,CAAG,EAAA,SAAS,EAAE,CAAC;gBAEtD,OAAO;AACV,aAAA;YAED,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAEjC,YAAA,IAAI,CAAC,SAAS,GAAG,CAAA,EAAG,WAAW,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,EAAG,SAAS,CAAA,CAAE,CAAC;AAClE,SAAA;KACJ;AAES,IAAA,mBAAmB,CAAC,EAAc,EAAA;QACxC,MAAM,cAAc,GAChB,CAAC,QAAoD,KACrD,CAAC,GAAG,IAAW,KAAY;;YAEvB,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,IAAI,CAAC,CAAC;YAErC,IAAI,QAAQ,KAAK,IAAI,EAAE;AACnB,gBAAA,OAAO,QAAQ,CAAC;AACnB,aAAA;AAED,YAAA,IAAI,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChC,aAAA;YAED,OAAO,QAAQ,IAAI,EAAE,CAAC;AAC1B,SAAC,CAAC;AAEN,QAAA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1E,QAAA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1E,QAAA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5E,EAAE,CAAC,QAAQ,CAAC,WAAW,GAAG,cAAc,CACpC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAC5C,CAAC;AAEF,QAAA,OAAO,EAAE,CAAC;KACb;AACJ;;AC3ID,MAAM,EAAE,GAAGC,UAAU,EAAE,CAAC;AASxB,SAAS,UAAU,CAAC,IAAY,EAAE,GAAW,EAAA;;IAEzC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;;AAE5E,IAAA,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAExD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,OAAoB,EAAA;IACnC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,OAAO,CAAC;IACxC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,GAAG,GAAG,IAAI,CAAC;IAEf,OAAO,GAAG,GAAG,EAAE,EAAE;QACb,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;YAC/B,MAAM;AACT,SAAA;AAED,QAAA,GAAG,GAAG,aAAa,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;AAC/D,QAAA,GAAG,EAAE,CAAC;AACT,KAAA;IAED,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAC,CAAC;AACtC,CAAC;AAED,SAAS,OAAO,CAAC,OAAoB,EAAA;IACjC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,OAAO,CAAC;IAExC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,GAAG,GAAG,IAAI,CAAC;IAEf,OAAO,GAAG,GAAG,IAAI,EAAE;QACf,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE;YAChC,MAAM;AACT,SAAA;QAED,GAAG,GAAG,aAAa,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAChE,QAAA,GAAG,EAAE,CAAC;AACT,KAAA;IAED,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAC,CAAC;AACtC,CAAC;AAEK,SAAU,aAAa,CAAC,OAAoB,EAAA;IAC9C,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,OAAO,CAAC;AACxC,IAAA,IAAI,KAAK,GAAG;QACR,IAAI;QACJ,IAAI;QACJ,EAAE;KACL,CAAC;IAEF,KAAK,GAAG,SAAS,CAAC,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAC,CAAC,CAAC;IAC7E,KAAK,GAAG,OAAO,CAAC,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAC,CAAC,CAAC;AAE3E,IAAA,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,QAAA,KAAK,CAAC,IAAI;AACN,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,KAAA;IAED,OAAO,KAAK,CAAC,IAAI,CAAC;AACtB,CAAC;AASK,SAAU,aAAa,CAAC,OAAgB,EAAA;IAC1C,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC;AAC7C,IAAA,IAAI,GAAG,GACH,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtF,GAAG;AACC,QAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;YACzC,KAAK;AACL,YAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AAE3C,IAAA,OAAO,GAAG,CAAC;AACf;;ACxFM,MAAO,0BAA2B,SAAQC,uBAA2B,CAAA;AAMvE,IAAA,WAAA,CACI,KAAsB,EACtB,KAAsB,EACtB,OAA2D,EAAA;;QAG3D,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAXhC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAanB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACrB;AAEe,IAAA,MAAM,CAAC,IAAU,EAAE,MAAY,EAAE,KAAa,EAAA;QAC1D,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAElD,QAAA,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE;AACxB,YAAA,MAAM,EAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAE1D,YAAA,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;gBACrB,IAAI,EAAE,IAAI,CAAC,GAAG;AACd,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,EAAE,EAAE,GAAG;AACV,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACtB,SAAA;KACJ;AAEe,IAAA,UAAU,CACtB,IAAU,EACV,IAAa,EACb,MAAY,EACZ,KAAa,EAAA;AAEb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACd,oBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;oBACtB,SAAS,EAAE,IAAI,CAAC,IAAI;AACvB,iBAAA,CAAC,CAAC;AACN,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAE/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACd,oBAAA,GAAG,GAAG;AACN,oBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;AACvB,iBAAA,CAAC,CAAC;AACN,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACtD;AAES,IAAA,eAAe,CAAC,MAAW,EAAA;AACjC,QAAA,IAAI,EAAC,KAAK,EAAC,GAAG,MAAM,CAAC;AAErB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACvC,YAAA,KAAK,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,EAAC,GAAG,MAAM,EAAE,KAAK,EAAC,CAAC;KAC7B;AACJ;;MClEY,qBAAqB,CAAA;AAC9B,IAAA,WAAA,CAA+B,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;AAEjD,IAAA,IAAW,KAAK,GAAA;;QAEZ,OAAO;YACH,GAAG,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;gBAChD,IAAI;AACJ,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/B,aAAA,CAAC,CACL;YACD,GAAG,MAAM,CAAC,WAAW,CACjB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU;iBAClC,MAAM,CACH,CAAC,SAAS,KACN,SAAS,CAAC,IAAI,KAAK,MAAM;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAgB,CAAC,CAC3C;AACA,iBAAA,GAAG,CAAC,CAAC,SAAS,KAAK;AAChB,gBAAA,SAAS,CAAC,IAAI;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAgB,CAAC;AACvC,aAAA,CAAC,CACT;SACM,CAAC;KACf;AAED,IAAA,IAAW,KAAK,GAAA;;QAEZ,OAAO;YACH,GAAG,MAAM,CAAC,WAAW,CACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;gBAChD,IAAI;AACJ,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/B,aAAA,CAAC,CACL;YACD,GAAG,MAAM,CAAC,WAAW,CACjB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU;iBAClC,MAAM,CACH,CAAC,SAAS,KACN,SAAS,CAAC,IAAI,KAAK,MAAM;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAgB,CAAC,CAC3C;AACA,iBAAA,GAAG,CAAC,CAAC,SAAS,KAAK;AAChB,gBAAA,SAAS,CAAC,IAAI;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAgB,CAAC;AACvC,aAAA,CAAC,CACT;SACM,CAAC;KACf;AAEM,IAAA,SAAS,CAAC,OAAa,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACjE,iBAAiB,EAAE,SAAS,CAAC,IAAI;AACpC,SAAA,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC,GAAG,CAAC;KACpB;AAEM,IAAA,aAAa,CAAC,IAAW,EAAA;QAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC;YAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,SAAA,CAAC,CAAC;KACN;AAEM,IAAA,aAAa,CAAC,IAAW,EAAA;QAC5B,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;AAEtD,QAAA,OAAO,SAAS;AACZ,cAAE;AACI,gBAAA,GAAG,SAAS;AACZ,gBAAA,IAAI,EACA,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU;AAChC,sBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;wBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;qBACxB,CAAC;sBACF,SAAS,CAAC,IAAI;AACxB,gBAAA,KAAK,EACD,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;AACjC,sBAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;wBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;qBACxB,CAAC;sBACF,SAAS,CAAC,KAAK;AAC5B,aAAA;cACD,IAAI,CAAC;KACd;AACJ;;AClGY,MAAA,qBAAqB,GAAG,SAAS,CAAC,MAAM,CAAC;AAClD,IAAA,IAAI,EAAE,oBAAoB;AAC1B,IAAA,UAAU,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,SAAS,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;KAC3C,CAAC;IACF,mBAAmB,GAAA;QACf,OAAO;AACH,YAAA;AACI,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;AAC7B,gBAAA,UAAU,EAAE;AACR,oBAAA,KAAK,EAAE;AACH,wBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC3B,wBAAA,SAAS,EAAE,CAAC,OAAO,KACf,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,MAAM;AAC7C,4BAAA,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/B,wBAAA,UAAU,EAAE,CAAC,UAAU,MAAM;AACzB,4BAAA,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI;4BACxD,YAAY,EAAE,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI;yBACjD,CAAC;AACL,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;IACD,WAAW,GAAA;QACP,OAAO;YACH,WAAW,EACP,CAAC,KAAA,GAAwB,IAAI,KAC7B,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAM,KACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,OAAO,KAAK,CAAC;AAChB,iBAAA;gBAED,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAEzC,gBAAA,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACnC,oBAAA,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK;AAChC,iBAAA,CAAC,CAAC;AACP,aAAC,CAAC;SACb,CAAC;KACL;AACJ,CAAA;;ACvCY,MAAA,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;AACxC,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,QAAQ,EAAE,EAAE;IACZ,UAAU,GAAA;QACN,OAAO;AACH,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE,OAAO;AACvB,YAAA,gBAAgB,EAAE,GAAG;AACrB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,mBAAmB,EAAE,KAAK;AAC1B,YAAA,mBAAmB,EAAE,KAAK;SAC7B,CAAC;KACL;IACD,WAAW,GAAA;QACP,MAAM,QAAQ,GAAIC,YAAU,CAAC,QAAQ,CAAC,MAAc,EAAE,WAAW,IAAI,CAAC;QAEtE,OAAO;AACH,YAAA,UAAU,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,KAAK,CAAC,KAAK,KACrD,QAAQ,EAAE,UAAU,GAChB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EACnD,UAAU,EACV,YAAY,CACf,CAAC,KAAK,CAAC;YACZ,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,KAAK,KAChD,QAAQ,EAAE,eAAe,GACrB,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,EACnE,OAAO,CACV,CAAC,KAAK,CAAC;SACf,CAAC;KACL;IACD,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG;AAC3B,YAAA,OAAO,EAAE,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC;YAC1B,MAAM,EAAE,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AAC9D,YAAA,UAAU,EAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;YAClD,WAAW,EAAE,MACT,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC/E,CAAC;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAe,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CACnE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAC9B,CAAC;KACL;IACD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAI,IAAI,CAAC,MAAM,CAAC,OAAe,CAAC,cAAc,CAAC;AAC1E,QAAA,OAAQ,IAAI,CAAC,MAAM,CAAC,OAAe,CAAC,cAAc,CAAC;KACtD;IACD,UAAU,GAAA;QACN,OAAO;;SAEN,CAAC;KACL;IACD,aAAa,GAAA;QACT,OAAO;YACH,qBAAqB,CAAC,SAAS,CAAC;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;AAC9B,gBAAA,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;aAC1C,CAAC;YACF,oBAAoB,CAAC,SAAS,CAAC;AAC3B,gBAAA,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;AACrD,gBAAA,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;aACxD,CAAC;SACL,CAAC;KACL;AACJ,CAAA;;AC1ED;;AAEG;;;;"}