bobe 0.0.37 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bobe.cjs.js +95 -34
- package/dist/bobe.cjs.js.map +1 -1
- package/dist/bobe.compiler.cjs.js +95 -34
- package/dist/bobe.compiler.cjs.js.map +1 -1
- package/dist/bobe.compiler.esm.js +95 -34
- package/dist/bobe.compiler.esm.js.map +1 -1
- package/dist/bobe.esm.js +95 -34
- package/dist/bobe.esm.js.map +1 -1
- package/dist/index.d.ts +20 -8
- package/dist/index.umd.js +95 -34
- package/dist/index.umd.js.map +1 -1
- package/package.json +3 -3
package/dist/bobe.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bobe.esm.js","sources":["../src/type.ts","../src/tokenizer.ts","../src/type-ast.ts","../src/compiler.ts","../src/typed.ts","../src/util.ts","../src/global.ts","../src/terp.ts","../src/render.ts"],"sourcesContent":["import { Computed, Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n /** 仅编译时可解析 */\n StaticInsExp = 0b0000_0000_0000_0000_0000_0010_0000_0000\n}\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport type SourceLocation = {\n start: Position;\n end: Position;\n source: string;\n}\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n loc: SourceLocation;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport enum ParseErrorCode {\n UNCLOSED_BRACE = 9001,\n UNCLOSED_STRING,\n UNCLOSED_STATIC_INS,\n INCONSISTENT_INDENT,\n INDENT_MISMATCH,\n MISSING_ASSIGN,\n INVALID_TAG_NAME,\n ELSE_WITHOUT_IF,\n EMPTY_IF_BODY,\n EMPTY_FOR_BODY,\n MISSING_FOR_COLLECTION,\n MISSING_FOR_SEMICOLON,\n MISSING_FOR_ITEM,\n PIPE_IN_WRONG_CONTEXT,\n}\nexport type ParseError = {\n code: ParseErrorCode;\n message: string;\n loc: SourceLocation;\n};\n\n/** tokenizer 抛出的带位置信息的语法错误 */\nexport class ParseSyntaxError extends SyntaxError {\n code: ParseErrorCode;\n loc: SourceLocation;\n constructor(code: ParseErrorCode, message: string, loc: SourceLocation) {\n super(message);\n this.code = code;\n this.loc = loc;\n }\n}\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n data: any;\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = Omit<LogicNode, 'data'> & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n arrSignal: Signal<any[]>|Computed<any[]>;\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n vars: string[];\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {\n};","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport {\n BaseType,\n Hook,\n HookProps,\n HookType,\n ParseErrorCode,\n ParseSyntaxError,\n Position,\n SourceLocation,\n Token,\n TokenType\n} from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n line = 0;\n column = 0;\n preCol = 0;\n preI = 0;\n needLoc = false;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n /** 当前文件路径 */\n source = '';\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n private next() {\n if (__IS_COMPILER__) {\n const char = this.code[this.i];\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n }\n this.i++;\n }\n\n getCurrentPos(): Position {\n return {\n offset: this.i,\n line: this.line,\n column: this.column\n };\n }\n\n /** 构造从当前扫描起始位置到模板结尾的 SourceLocation,用于未闭合错误 */\n private unclosedLoc(startOffset: number, startLine: number, startCol: number): SourceLocation {\n const end = this.code.length - 1; // 去掉末尾 EofId 前的位置\n return {\n start: { offset: startOffset, line: startLine, column: startCol },\n end: { offset: end, line: this.line, column: this.column },\n source: this.code.slice(startOffset, end)\n };\n }\n\n private throwUnclosed(\n code: ParseErrorCode,\n message: string,\n startOffset: number,\n startLine: number,\n startCol: number\n ): never {\n throw new ParseSyntaxError(code, message, this.unclosedLoc(startOffset, startLine, startCol));\n }\n\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.next();\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.next();\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value,\n loc:\n __IS_COMPILER__ && this.needLoc\n ? {\n start: {\n offset: this.preI,\n line: this.line,\n column: this.preCol\n },\n end: {\n offset: this.i + 1,\n line: this.line,\n column: this.column + 1\n },\n // TODO: 文件名\n source: this.code.slice(this.preI, this.i + 1)\n }\n : null\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n /*----------------- 需要 loc 的 token -----------------*/\n default:\n if (__IS_COMPILER__) {\n this.preI = this.i;\n this.preCol = this.column;\n this.needLoc = true;\n }\n switch (char) {\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.staticIns();\n if (handled) break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n break;\n }\n // 指向下一个字符\n this.next();\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n throw error;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n let value = '';\n this.token = null;\n try {\n if (this.code[this.i] === '\\n') {\n this.setToken(TokenType.Identifier, true);\n return this.token;\n }\n while (this.code[this.i + 1] !== '\\n') {\n value += this.code[this.i];\n this.next();\n }\n value += this.code[this.i];\n const trimmed = value.trim();\n this.setToken(TokenType.Identifier, trimmed ? value : true);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n this.token = null;\n let value = '';\n\n try {\n const char = this.code[this.i];\n if (char === ';' || char === '\\n') {\n this.setToken(TokenType.Identifier, value);\n return this.token;\n }\n let nextC = this.code[this.i + 1];\n while (nextC !== ';' && nextC !== '\\n') {\n value += this.code[this.i];\n this.next();\n nextC = this.code[this.i + 1];\n }\n value += this.code[this.i];\n this.setToken(TokenType.Identifier, value);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n public peekChar() {\n let i = this.i;\n while (this.code[i] === ' ' || this.code[i] === '\\t') {\n i++;\n }\n return this.code[i];\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private staticIns() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.next();\n let value = '';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STATIC_INS, '未闭合的 \"${...}\"', startOffset, startLine, startCol);\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.StaticInsExp, value.slice(0, -1));\n return true;\n }\n\n private brace() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n if (char === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_BRACE, '未闭合的 \"{\"', startOffset, startLine, startCol);\n }\n const nextChar = this.code[this.i + 1];\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.next();\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.next();\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.next();\n }\n return {\n value,\n isEmptyLine\n };\n }\n\n emptyLoc(): SourceLocation {\n const pos = this.getCurrentPos();\n return { start: pos, end: { offset: pos.offset + 1, line: pos.line, column: pos.column + 1 }, source: ' ' };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: '',\n // TODO: 暂时不做缩进位置\n loc: null\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId,\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.next();\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue =\n value === 'null'\n ? null\n : value === 'undefined'\n ? undefined\n : value === 'false'\n ? false\n : value === 'true'\n ? true\n : value;\n this.setToken(TokenType.Identifier, realValue);\n }\n private str(char: string) {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STRING, '未闭合的字符串字面量', startOffset, startLine, startCol);\n }\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.next();\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.Identifier, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.next();\n }\n this.setToken(TokenType.Identifier, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n let isStaticHook: boolean;\n if (__IS_COMPILER__) {\n isStaticHook = Boolean(this.token.type & TokenType.StaticInsExp);\n } else {\n isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n }\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number((value as any as string).slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { SourceLocation } from \"./type\";\n\n// NodeType包含所有节点类型,包括属性、值等\nenum NodeType {\n // 真实节点类型\n Element = 'Element', // 真实DOM节点\n Text = 'Text', // 文本节点\n Interpolation = 'Interpolation', // 插值节点\n\n // 属性相关类型\n Property = 'Property', // 属性节点\n PropertyKey = 'PropertyKey', // 属性节点\n StaticValue = 'StaticValue', // 静态值\n DynamicValue = 'DynamicValue', // 动态值(JS表达式)\n\n // 程序入口\n Program = 'Program', // 程序根节点\n\n // 逻辑节点类型\n If='If',\n Else='Else',\n Fail='Fail',\n For='For',\n Component='Component',\n Fragment='Fragment'\n}\n\n// 扩展类型联合,包括FakeType和NodeType\ntype ASTNodeType = NodeType;\n\n// 基础节点接口\ninterface BaseNode {\n type: ASTNodeType; // 直接使用FakeType或NodeType作为类型\n loc?: SourceLocation;\n}\n\n\n\n// 程序根节点\ninterface Program extends BaseNode {\n type: NodeType.Program;\n body: TemplateNode[];\n}\n\n// 模板节点类型\ntype TemplateNode =\n | ElementNode // 真实DOM元素节点\n | TextNode // 文本节点\n | InterpolationNode // 插值节点\n | ConditionalNode // 条件节点(复用NodeType.If)\n | LoopNode // 循环节点(复用NodeType.For)\n | ComponentNode // 组件节点(复用NodeType.Component)\n | FragmentNode; // 片段节点(复用NodeType.Fragment)\n\n// 真实DOM元素节点(使用NodeType.Element)\ninterface ElementNode extends BaseNode {\n type: NodeType.Element;\n tagName: string;\n props: Property[];\n children: TemplateNode[];\n}\n\n// 文本节点(使用NodeType.Text)\ninterface TextNode extends BaseNode {\n type: NodeType.Text;\n value: string;\n}\n\n// 插值节点(使用NodeType.Interpolation)\ninterface InterpolationNode extends BaseNode {\n type: NodeType.Interpolation;\n expression: string;\n}\n\n// 属性节点(使用NodeType.Property)\ninterface Property extends BaseNode {\n type: NodeType.Property;\n key: PropertyKeyNode;\n value?: PropertyValue;\n}\n\n// 属性值类型 - 区分静态和动态\ntype PropertyValue = StaticValue | DynamicValue;\n\n// 静态值(使用NodeType.StaticValue)\ninterface StaticValue extends BaseNode {\n type: NodeType.StaticValue;\n value: string | number | boolean;\n}\n\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface PropertyKeyNode extends BaseNode {\n type: NodeType.PropertyKey;\n key: string;\n}\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface DynamicValue extends BaseNode {\n type: NodeType.DynamicValue;\n value: string;\n}\n\n// 条件节点(复用NodeType.If)\ninterface ConditionalNode extends BaseNode {\n type: NodeType.If | NodeType.Else | NodeType.Fail;\n condition: PropertyValue;\n consequent: TemplateNode[];\n children?: TemplateNode[];\n}\n\n// 循环节点(复用NodeType.For)\ninterface LoopNode extends BaseNode {\n type: NodeType.For;\n collection: PropertyValue; // 被迭代的集合\n item: PropertyValue; // 项变量名\n index?: PropertyValue; // 索引变量名\n key?: PropertyValue; // 键名\n children: TemplateNode[]; // 循环体\n}\n\n// 组件节点(复用NodeType.Component)\ninterface ComponentNode extends BaseNode {\n type: NodeType.Component;\n componentName: PropertyValue; // 组件名称\n props: Property[]; // 组件属性\n children?: TemplateNode[]; // 组件插槽内容\n}\n\n// 片段节点(复用NodeType.Fragment)\ninterface FragmentNode extends BaseNode {\n type: NodeType.Fragment;\n nodes: TemplateNode[];\n}\n\n// 导出所有类型\nexport {\n NodeType,\n ASTNodeType,\n BaseNode,\n Program,\n TemplateNode,\n ElementNode,\n TextNode,\n InterpolationNode,\n Property,\n PropertyValue,\n StaticValue,\n PropertyKeyNode,\n DynamicValue,\n ConditionalNode,\n LoopNode,\n ComponentNode,\n FragmentNode\n};\n","import { Tokenizer } from './tokenizer';\nimport {\n NodeType,\n Program,\n TemplateNode,\n ElementNode,\n Property,\n PropertyValue,\n ConditionalNode,\n LoopNode,\n PropertyKeyNode,\n BaseNode,\n ComponentNode\n} from './type-ast';\nimport { TokenType, ParseError, ParseErrorCode, ParseSyntaxError, SourceLocation } from './type';\n\nexport class Compiler {\n errors: ParseError[] = [];\n\n constructor(\n public tokenizer: Tokenizer,\n public hooks: ParseHooks = {}\n ) {}\n\n private addError(code: ParseErrorCode, message: string, loc: SourceLocation) {\n this.errors.push({ code, message, loc });\n }\n\n /**\n * 编译程序入口,生成AST\n */\n @NodeHook\n parseProgram(): Program {\n const body: TemplateNode[] = [];\n try {\n this.tokenizer.nextToken();\n\n // 解析文档主体内容\n while (!this.tokenizer.isEof()) {\n const node = this.templateNode(body);\n if (node) {\n body.push(node);\n }\n }\n } catch (error) {\n if (error instanceof ParseSyntaxError) {\n this.addError(error.code, error.message, error.loc);\n } else {\n this.addError(error.toString() as any, '未知错误', this.tokenizer.emptyLoc());\n }\n }\n\n return {\n type: NodeType.Program,\n body,\n loc: {\n start: { offset: 0, line: 1, column: 0 },\n end: { offset: this.tokenizer.preI, line: this.tokenizer.line, column: this.tokenizer.column },\n source: this.tokenizer.code\n }\n };\n }\n\n handleChildren(): TemplateNode[] {\n const children: TemplateNode[] = [];\n if (this.tokenizer.token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // 跳过缩进\n while (!(this.tokenizer.token.type & TokenType.Dedent) && !this.tokenizer.isEof()) {\n const child = this.templateNode(children);\n if (child) {\n children.push(child);\n }\n }\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // 跳过去缩进\n }\n }\n return children;\n }\n\n /**\n * 解析模板节点\n */\n private templateNode(siblings: TemplateNode[]): TemplateNode | null {\n const token = this.tokenizer.token;\n\n // Pipe 出现在非属性扩展行上下文中\n if (token.type & TokenType.Pipe) {\n this.addError(\n ParseErrorCode.PIPE_IN_WRONG_CONTEXT,\n '\"|\" 只能出现在元素属性扩展行中',\n token.loc ?? this.tokenizer.emptyLoc()\n );\n this.tokenizer.nextToken(); // 跳过 |\n return null;\n }\n\n const [hookType, value] = this.tokenizer._hook({});\n\n const isElseOrFail = value === 'else' || value === 'fail';\n // 检查是否为特殊关键字\n if (value === 'if' || isElseOrFail) {\n if (isElseOrFail) {\n const lastSibling = siblings[siblings.length - 1];\n const lastType = lastSibling?.type;\n if (lastType !== NodeType.If && lastType !== NodeType.Else && lastType !== NodeType.Fail) {\n this.addError(\n ParseErrorCode.ELSE_WITHOUT_IF,\n `\"${value}\" 前必须有 \"if\" 或 \"else\" 节点`,\n token.loc ?? this.tokenizer.emptyLoc()\n );\n }\n }\n return this.parseConditionalNode();\n }\n if (value === 'for') {\n return this.parseLoopNode();\n }\n if (hookType) {\n return this.parseComponentNode();\n }\n // 解析普通元素节点\n return this.parseElementNode();\n }\n\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseComponentNode(node?: ComponentNode) {\n const name = this.parseName();\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Component;\n node.componentName = name;\n node.props = props;\n this.hooks.parseComponentNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseElementNode(node?: ElementNode) {\n const tagToken = this.tokenizer.token;\n // 验证标签名\n if (!(tagToken.type & TokenType.Identifier)) {\n this.addError(\n ParseErrorCode.INVALID_TAG_NAME,\n `无效的标签名,期望标识符但得到 \"${tagToken.value}\"`,\n tagToken.loc ?? this.tokenizer.emptyLoc()\n );\n // 跳到下一个 NewLine 恢复\n while (!(this.tokenizer.token.type & TokenType.NewLine) && !this.tokenizer.isEof()) {\n this.tokenizer.nextToken();\n }\n return null;\n }\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Element;\n node.tagName = tagName;\n node.props = props;\n this.hooks.parseElementNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n\n /**\n * 解析条件节点(if/else/fail)\n */\n @NodeHook\n @NodeLoc\n parseConditionalNode(node?: ConditionalNode) {\n const keyword = this.tokenizer.token.value as string;\n\n // 获取条件表达式\n this.tokenizer.condExp();\n const condition = this.parsePropertyValue();\n this.tokenizer.nextToken(); // 跳过 cond\n this.tokenizer.nextToken(); // 跳过 \\n\n node.type = keyword === 'if' ? NodeType.If : keyword === 'else' ? NodeType.Else : NodeType.Fail;\n node.condition = condition;\n this.hooks.parseConditionalNode?.propsAdded?.call(this, node);\n // 解析条件成立时的内容\n const children = this.handleChildren();\n\n // if (children.length === 0) {\n // this.addError('EMPTY_IF_BODY', `\"${keyword}\" 块没有子节点`, keywordLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析循环节点(for)\n */\n @NodeHook\n @NodeLoc\n parseLoopNode(node?: LoopNode) {\n const forLoc = this.tokenizer.token.loc ?? this.tokenizer.emptyLoc();\n // 跳过 'for' 关键字,解析循环表达式\n this.tokenizer.nextToken();\n const collection = this.parsePropertyValue();\n\n if (!collection.value && collection.value !== 0) {\n this.addError(ParseErrorCode.MISSING_FOR_COLLECTION, '\"for\" 缺少集合表达式', forLoc);\n }\n\n const semicolonToken = this.tokenizer.nextToken(); // 期望分号\n if (!(semicolonToken.type & TokenType.Semicolon)) {\n this.addError(\n ParseErrorCode.MISSING_FOR_SEMICOLON,\n '\"for\" 语法:for <集合>; <item> [index][; key],缺少第一个 \";\"',\n semicolonToken.loc ?? this.tokenizer.emptyLoc()\n );\n }\n\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n if (isDestruct) {\n itemToken.value = '{' + itemToken.value + '}';\n }\n const item = this.parsePropertyValue();\n\n if (!item.value && item.value !== 0) {\n this.addError(\n ParseErrorCode.MISSING_FOR_ITEM,\n '\"for\" 缺少 item 变量名',\n itemToken.loc ?? this.tokenizer.emptyLoc()\n );\n }\n\n let char = this.tokenizer.peekChar(),\n key: PropertyValue | undefined,\n index: PropertyValue | undefined;\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parsePropertyValue();\n }\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n this.tokenizer.nextToken();\n index = this.parsePropertyValue();\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parsePropertyValue();\n }\n }\n }\n // 跳过最后一个表达式\n this.tokenizer.nextToken();\n // 跳过回车\n this.tokenizer.nextToken();\n node.type = NodeType.For;\n node.collection = collection;\n node.item = item;\n node.index = index;\n node.key = key;\n this.hooks.parseLoopNode?.propsAdded?.call(this, node);\n\n // 解析循环体\n const children = this.handleChildren();\n\n // if (children.length === 0) {\n // this.addError('EMPTY_FOR_BODY', '\"for\" 块没有子节点', forLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析首行和扩展行的属性\n */\n private headerLineAndExtensions(): Property[] {\n const props: Property[] = [];\n\n // 解析首行属性\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n\n // 解析扩展行属性\n while (this.tokenizer.token.type & TokenType.Pipe) {\n this.tokenizer.nextToken(); // 跳过管道符\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n }\n\n return props;\n }\n\n /**\n * 解析属性列表\n */\n private attributeList(): Property[] {\n const props: Property[] = [];\n\n while (\n !(this.tokenizer.token.type & TokenType.NewLine) &&\n !(this.tokenizer.token.type & TokenType.Pipe) &&\n !this.tokenizer.isEof()\n ) {\n props.push(this.parseProperty());\n }\n\n return props;\n }\n\n @NodeHook\n parseProperty(node?: Property) {\n node.type = NodeType.Property;\n node.key = this.parsePropertyKey();\n const token = this.tokenizer.nextToken(); // 跳过key\n // 需要赋值\n if (token.value === '=') {\n this.tokenizer.nextToken(); // 跳过等号\n\n node.value = this.parsePropertyValue();\n this.tokenizer.nextToken();\n } else {\n this.addError(\n ParseErrorCode.MISSING_ASSIGN,\n `属性 \"${node.key.key}\" 缺少 \"=\" 赋值符号`,\n node.key.loc ?? this.tokenizer.emptyLoc()\n );\n }\n node.loc.start = node.key.loc.start;\n node.loc.end = node.value ? node.value.loc.end : node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n return node;\n }\n\n /**\n * 根据值类型创建属性 key 节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyKey(node?: PropertyKeyNode) {\n node.type = NodeType.PropertyKey;\n node.key = this.tokenizer.token.value as string;\n return node;\n }\n /**\n * 根据值类型创建属性值节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyValue(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n /**\n * 根据值类型创建名称\n */\n @NodeHook\n @TokenLoc\n parseName(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n}\n\nfunction NodeLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n _node.loc.start = this.tokenizer.token.loc.start;\n const result = target.call(this, _node);\n _node.loc.end = this.tokenizer.token.loc ? this.tokenizer.token.loc.start : this.tokenizer.getCurrentPos();\n _node.loc.source = this.tokenizer.code.slice(_node.loc.start.offset, _node.loc.end.offset);\n return result;\n };\n}\nfunction TokenLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const result = target.call(this, _node);\n _node.loc = this.tokenizer.token.loc;\n return result;\n };\n}\n\nfunction NodeHook(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const hook = this.hooks[context.name as keyof typeof this.hooks];\n const node = { loc: {} } as BaseNode;\n hook?.enter?.call(this, node);\n const result = target.call(this, node);\n hook?.leave?.call(this, node);\n return result;\n };\n}\n\ntype PickParseProps<T> = {\n [K in keyof T as K extends `parse${string}` ? K : never]: T[K];\n};\n\ntype ParseProps = PickParseProps<Compiler>;\n\ntype ParseHooks = Partial<{\n [K in keyof ParseProps]: {\n enter?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n leave?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n propsAdded?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n };\n}>;\n","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","export function macInc(arr: number[]) {\n const len = arr.length;\n /** 候选者数组的尾项在 arr 中的 index */\n let candyLast = [],\n i = 0;\n while (i < len) {\n const it = arr[i];\n if (it !== -1) {\n candyLast = [i];\n break;\n }\n i++;\n }\n // i 为第一项不为 -1 的项,如果其是最后一项,直接返回,因为此时数组只有一个元素\n if (i + 1 >= len) return candyLast;\n\n /** 反向链表 */\n const toPrev = new Int32Array(len);\n\n while (i < len) {\n const target = arr[i];\n // -1 为新增项直接跳过\n if (target === -1) continue;\n // 二分查找,找到在 candyLast 中 item 的插入位置\n // 维持 0,start 小于 target, end, len-1 大于等于 target\n let start = -1,\n end = candyLast.length;\n while (start + 1 < end) {\n const mid = (start + end) >> 1;\n if (arr[candyLast[mid]] < target) {\n start = mid;\n } else {\n end = mid;\n }\n }\n // 最终 end 替换为 target\n candyLast[end] = i;\n // 匹配 i 的前项索引\n toPrev[i] = candyLast[start];\n i++;\n }\n\n let length = candyLast.length;\n for (let j = length - 1; j > 0; j--) {\n const prev = toPrev[candyLast[j]];\n candyLast[j - 1] = prev;\n }\n return candyLast;\n}\n","export const KEY_INDEX = '__BOBE_KEY_INDEX';","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n clean,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { macInc } from './util';\nimport { KEY_INDEX } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n const rootLen = stack.length;\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === rootLen && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.current = forNode.children[++forNode.i];\n ctx.prevSibling = ctx.current.realBefore;\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string,\n vars: string[];\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n vars = itemExp.match(jsVarRegexp);\n const varStr = vars.join(',');\n itemExp = new Function(itemExp, `return {${varStr}};`) as any;\n }\n let indexName: string,\n keyExp: string,\n char = this.tokenizer.peekChar();\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n indexName = this.tokenizer.nextToken().value as string;\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n }\n }\n\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n arrSignal: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n vars,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n forNode.arrSignal = arrSignal;\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new Effect(() => {\n let arr: any[] = arrSignal.get();\n // 订阅 iter\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // 使用原始数组避免 index 依赖\n forNode.arr = arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const item = this.createForItem(forNode, i, data);\n item.realAfter = this.insertAfterAnchor('for-item-after');\n item.realBefore = this.insertAfterAnchor('for-item-before');\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n this.removeForItem(children, i);\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n this.insertForItem(forNode, i, data, newChildren, lastAfter, snapshotForUpdate);\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n this.reuseForItem(child, arr[i], itemExp, i, indexName);\n }\n }\n // 带 key 列表\n else {\n let s = 0,\n e1 = oldLen - 1,\n e2 = newLen - 1;\n // 掐头\n while (s <= e1 && s <= e2) {\n const child = children[s];\n const old = child.key;\n const itemData = this.getItemData(forNode, s, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[s] = child;\n this.reuseForItem(child, arr[s], itemExp, s, indexName);\n s++;\n } else {\n break;\n }\n }\n // 去尾\n while (s <= e1 && s <= e2) {\n const child = children[e1];\n const old = child.key;\n const itemData = this.getItemData(forNode, e2, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[e2] = child;\n this.reuseForItem(child, arr[e2], itemExp, e2, indexName);\n e1--;\n e2--;\n } else {\n break;\n }\n }\n // 纯新增\n if (s > e1) {\n if (s <= e2) {\n // s > 0 纯尾增\n // 否则 纯尾增\n const firstBefore = s > 0 ? children[s - 1]?.realAfter || forNode.realBefore : forNode.realBefore;\n for (let i = e2; i >= s; i--) {\n this.insertForItem(forNode, i, data, newChildren, firstBefore, snapshotForUpdate);\n }\n }\n }\n // 纯尾删\n else if (s > e2) {\n if (s <= e1) {\n for (let i = e1; i >= s; i--) {\n this.removeForItem(children, i);\n }\n }\n }\n // 混合\n else {\n let s1 = s,\n s2 = s;\n const mixLen = e2 - s2 + 1;\n /** key -> 旧 index */\n const key2new = new Map<any, number>();\n for (let i = s2; i <= e2; i++) {\n // TODO: 这里只求 key 可以不用响应式\n const itemData = this.getItemData(forNode, i, data);\n const key = forNode.getKey(itemData);\n key2new.set(key, i);\n }\n /*----------------- 构建 new2oldI -----------------*/\n let maxIncNewI = -1;\n let hasMove = false;\n const new2oldI = new Array<number>(mixLen).fill(-1);\n for (let i = s1; i <= e1; i++) {\n const key = children[i].key;\n const newI = key2new.get(key);\n // 不在新列表中,删除\n if (newI == null) {\n this.removeForItem(children, i);\n continue;\n }\n const child = children[i];\n // 复用\n newChildren[newI] = child;\n this.reuseForItem(child, arr[newI], itemExp, newI, indexName);\n new2oldI[newI - s2] = i;\n // 剩余的 key 是新增\n key2new.delete(key);\n // 如果 newI 比已处理的最大 newI 要小,说明索引较小的项反而靠后,即发生移动\n if (newI < maxIncNewI) {\n hasMove = true;\n } else {\n maxIncNewI = newI;\n }\n }\n /*----------------- 纯增删 -----------------*/\n if (!hasMove) {\n // 按顺序从前往后插入即可\n key2new.forEach((i, key) => {\n const before = i === 0 ? forNode.realBefore : newChildren[i - 1].realAfter;\n this.insertForItem(forNode, i, data, newChildren, before, snapshotForUpdate);\n });\n } else {\n /*----------------- 增删移 -----------------*/\n const incI = macInc(new2oldI),\n incLen = incI.length;\n /** p1 表示新数组中的索引 */\n let p1: number,\n /** p2 表示最长递增子序列的索引 */\n p2: number;\n // 从 s2 开始对比\n for (p1 = s2, p2 = 0; p1 <= e2; p1++) {\n const oldI = new2oldI[p1];\n /** 新增 */\n if (oldI === -1) {\n const before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n this.insertForItem(forNode, p1, data, newChildren, before, snapshotForUpdate);\n continue;\n }\n\n /** 锚点在 new2oldI 组中的索引 */\n const staticIdx = incI[p2] + s2;\n // 匹配到锚点,复用节点,已在构建 new2oldI 时完成\n if (p1 === staticIdx) {\n p2 <= incLen && p2++;\n continue;\n }\n\n // p1 点位需要移动, 数据复用在 new2oldI 构建时已完成,这里处理 dom 移动即可\n let before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n const child = newChildren[p1];\n\n const { realBefore, realAfter, realParent } = child;\n\n let point = realBefore,\n next: any;\n do {\n next = this.nextSib(point);\n this.insertAfter(realParent, point, before);\n // this.handleInsert(realParent, point, before);\n before = point;\n if (point === realAfter) break;\n point = next;\n } while (true);\n }\n }\n }\n }\n forNode.children = newChildren;\n }\n isFirstRender = false;\n setPulling(prevCtx);\n\n return isDestroy => {\n if (isDestroy) {\n for (let i = 0; i < forNode.children.length; i++) {\n const item = forNode.children[i];\n item.effect.dispose();\n }\n }\n };\n });\n return forNode.children[0] || forNode;\n }\n\n insertForItem(\n forNode: ForNode,\n i: number,\n parentData: any,\n newChildren: ForItemNode[],\n before: any,\n snapshotForUpdate: any\n ) {\n const item = this.createForItem(forNode, i, parentData);\n newChildren[i] = item;\n let realAfter = this.createAnchor('for-item-after');\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before');\n this.handleInsert(forNode.realParent, realBefore, before);\n\n item.realBefore = realBefore;\n item.realAfter = realAfter;\n\n this.tokenizer = forNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, realBefore, item);\n }, item.effect);\n }\n\n removeForItem(children: ForItemNode[], i: number) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realBefore);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n\n reuseForItem(child: ForItemNode, data: any, itemExp: string | ((value: any) => any), i: number, indexName?: string) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = i;\n }\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n let data: Record<any, any>;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n // 考虑到生成每项数据需要依赖原始响应式数组,因此无法放在 scope 里\n // 使得 for effect 依赖原响应式数组,每一项\n data = this.getItemData(forNode, i, parentData);\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: forNode.getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getItemData(forNode: ForNode, i: number, parentData: any) {\n const { arr, itemExp, vars, arrSignal, getKey } = forNode;\n let indexName = forNode.indexName;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: i };\n data = deepSignal(rawData, getPulling());\n const computedData = new Computed(() => itemExp(arrSignal.get()[getKey ? data[indexName] : i]));\n const cells = data[Keys.Meta].cells;\n for (let i = 0; i < vars.length; i++) {\n const name = vars[i];\n rawData[name] = undefined;\n cells.set(name, new Computed(() => computedData.get()[name]));\n }\n }\n\n Object.setPrototypeOf(data, parentData);\n return data;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner,\n data,\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { Store } from \"aoye\";\nimport { Interpreter } from \"./terp\";\nimport { Tokenizer } from \"./tokenizer\";\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from \"./type\";\n\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}"],"names":["TokenType","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","ParseErrorCode","ParseSyntaxError","SyntaxError","constructor","code","message","loc","Tokenizer","TabSize","Tab","Array","from","length","join","EofId","Date","now","DedentId","needIndent","isFirstToken","dentStack","i","line","column","preCol","preI","needLoc","handledTokens","waitingTokens","Queue","source","hook","useDedentAsEof","setToken","Indent","next","getCurrentPos","offset","unclosedLoc","startOffset","startLine","startCol","end","start","slice","throwUnclosed","resume","_snapshot","token","undefined","Object","assign","snapshot","keys","snap","clone","k","skip","logicDentLen","skipFragment","char","_this$getDentValue","getDentValue","value","isEmptyLine","currLen","expLen","INCONSISTENT_INDENT","emptyLoc","shorterThanBaseDentEof","pop","Dedent","String","push","type","typeName","nextToken","setCode","trimEnd","tokenize","console","log","JSON","stringify","isEof","Identifier","len","item","shift","outer","dent","newLine","assignment","pipe","Semicolon","__IS_COMPILER__","str","braceToken","brace","InsertionExp","handled","staticIns","isNum","number","matchIdStart2","identifier","error","condExp","trimmed","trim","jsExp","nextC","peekChar","Assign","Pipe","innerBrace","UNCLOSED_STATIC_INS","StaticInsExp","inComment","inString","count","backslashCount","UNCLOSED_BRACE","nextChar","NewLine","pos","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","continuousBackslashCount","UNCLOSED_STRING","memoCount","Number","eof","Eof","HookId","hookI","_hook","props","isDynamicHook","isStaticHook","indexOf","hookType","res","init","fragments","fragment","NodeType","Compiler","_applyDecs$e","_slicedToArray","_applyDecs","NodeHook","NodeLoc","TokenLoc","e","_initProto","errors","tokenizer","hooks","addError","parseProgram","body","node","templateNode","toString","Program","handleChildren","children","child","siblings","PIPE_IN_WRONG_CONTEXT","_this$tokenizer$_hook","_this$tokenizer$_hook2","isElseOrFail","lastSibling","lastType","ELSE_WITHOUT_IF","parseConditionalNode","parseLoopNode","parseComponentNode","parseElementNode","name","parseName","headerLineAndExtensions","componentName","propsAdded","call","tagToken","INVALID_TAG_NAME","tagName","Element","keyword","condition","parsePropertyValue","forLoc","collection","MISSING_FOR_COLLECTION","semicolonToken","MISSING_FOR_SEMICOLON","itemToken","isDestruct","MISSING_FOR_ITEM","key","index","attributeList","parseProperty","Property","parsePropertyKey","MISSING_ASSIGN","PropertyKey","_this$tokenizer$_hook3","_this$tokenizer$_hook4","DynamicValue","StaticValue","_this$tokenizer$_hook5","_this$tokenizer$_hook6","target","context","_node","result","enter","leave","MultiTypeStack","typeTops","stack","bits","newNode","types","prevByType","bit","poppedNode","peekByType","cat","peekType","at","peek","macInc","arr","candyLast","it","toPrev","Int32Array","mid","j","prev","KEY_INDEX","Interpreter","isLogicNode","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","Real","CtxProvider","TokenizerSwitcher","Logic","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","handleInsert","setPulling","effect","realBefore","declaration","_stack$pop","_stack$pop2","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","insertAfterAnchor","_this$ctx","afterAnchor","createAnchor","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","valueIsMapKey","Reflect","has","Keys","Raw","val","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemExp","vars","match","jsVarRegexp","varStr","Function","indexName","keyExp","owner","arrSignal","getKey","window","cells","Meta","hasArrExpKey","get","Computed","_forNode$snapshot","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","prevCtx","toRaw","createForItem","firstInsert","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","old","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","Map","set","maxIncNewI","hasMove","new2oldI","fill","newI","delete","forEach","incI","incLen","p1","p2","oldI","staticIdx","nextSib","isDestroy","dispose","parentData","runWithPulling","removeLogicNode","remove","forItemId","forItemNode","scope","Scope","id","deepSignal","rawData","computedData","setPrototypeOf","_this$ctx$stack$peekB","isFn","setProp","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","expression","keyWord","expToken","isElse","isIf","preIsCond","noCond","ifNode","preCond","signal","fn","ef","firstChild","eq","rawVal","config","opt","nextSibling","defaultInsert","defaultRemove","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bobe.esm.js","sources":["../src/type.ts","../src/tokenizer.ts","../src/type-ast.ts","../src/compiler.ts","../src/typed.ts","../src/util.ts","../src/global.ts","../src/terp.ts","../src/render.ts"],"sourcesContent":["import { Computed, Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n /** 仅编译时可解析 */\n StaticInsExp = 0b0000_0000_0000_0000_0000_0010_0000_0000,\n String = 0b0000_0000_0000_0000_0000_0100_0000_0000,\n Number = 0b0000_0000_0000_0000_0000_1000_0000_0000,\n Boolean = 0b0000_0000_0000_0000_0001_0000_0000_0000,\n Null = 0b0000_0000_0000_0000_0010_0000_0000_0000,\n Undefined = 0b0000_0000_0000_0000_0100_0000_0000_0000\n}\n\nexport const BaseTokenType =\n TokenType.String | TokenType.Number | TokenType.Boolean | TokenType.Null | TokenType.Undefined;\nexport const ValueTokenType = BaseTokenType | TokenType.InsertionExp | TokenType.StaticInsExp;\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport type SourceLocation = {\n start: Position;\n end: Position;\n source: string;\n};\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n loc: SourceLocation;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport enum ParseErrorCode {\n UNCLOSED_BRACE = 9001,\n UNCLOSED_STRING,\n UNCLOSED_STATIC_INS,\n INCONSISTENT_INDENT,\n INDENT_MISMATCH,\n MISSING_ASSIGN,\n INVALID_TAG_NAME,\n INVALID_PROP_KEY,\n ELSE_WITHOUT_IF,\n EMPTY_IF_BODY,\n EMPTY_FOR_BODY,\n MISSING_FOR_COLLECTION,\n MISSING_FOR_SEMICOLON,\n MISSING_FOR_ITEM,\n MISSING_PROP_ASSIGNMENT,\n PIPE_IN_WRONG_CONTEXT\n}\nexport type ParseError = {\n code: ParseErrorCode;\n message: string;\n loc: SourceLocation;\n};\n\n/** tokenizer 抛出的带位置信息的语法错误 */\nexport class ParseSyntaxError extends SyntaxError {\n code: ParseErrorCode;\n loc: SourceLocation;\n constructor(code: ParseErrorCode, message: string, loc: SourceLocation) {\n super(message);\n this.code = code;\n this.loc = loc;\n }\n}\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n data: any;\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = Omit<LogicNode, 'data'> & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n arrSignal: Signal<any[]> | Computed<any[]>;\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n vars: string[];\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {};\n","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport {\n BaseType,\n Hook,\n HookProps,\n HookType,\n ParseErrorCode,\n ParseSyntaxError,\n Position,\n SourceLocation,\n Token,\n TokenType\n} from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n line = 0;\n column = 0;\n preCol = 0;\n preI = 0;\n needLoc = false;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n /** 当前文件路径 */\n source = '';\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n private next() {\n if (__IS_COMPILER__) {\n const char = this.code[this.i];\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n }\n this.i++;\n }\n\n getCurrentPos(): Position {\n return {\n offset: this.i,\n line: this.line,\n column: this.column\n };\n }\n\n /** 构造从当前扫描起始位置到模板结尾的 SourceLocation,用于未闭合错误 */\n private unclosedLoc(startOffset: number, startLine: number, startCol: number): SourceLocation {\n const end = this.code.length - 1; // 去掉末尾 EofId 前的位置\n return {\n start: { offset: startOffset, line: startLine, column: startCol },\n end: { offset: end, line: this.line, column: this.column },\n source: this.code.slice(startOffset, end)\n };\n }\n\n private throwUnclosed(\n code: ParseErrorCode,\n message: string,\n startOffset: number,\n startLine: number,\n startCol: number\n ): never {\n throw new ParseSyntaxError(code, message, this.unclosedLoc(startOffset, startLine, startCol));\n }\n\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.next();\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.next();\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value,\n loc:\n __IS_COMPILER__ && this.needLoc\n ? {\n start: {\n offset: this.preI,\n line: this.line,\n column: this.preCol\n },\n end: {\n offset: this.i + 1,\n line: this.line,\n column: this.column + 1\n },\n // TODO: 文件名\n source: this.code.slice(this.preI, this.i + 1)\n }\n : null\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n /*----------------- 需要 loc 的 token -----------------*/\n default:\n if (__IS_COMPILER__) {\n this.preI = this.i;\n this.preCol = this.column;\n this.needLoc = true;\n }\n switch (char) {\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.staticIns();\n if (handled) break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n break;\n }\n // 指向下一个字符\n this.next();\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n throw error;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n let value = '';\n this.token = null;\n try {\n if (this.code[this.i] === '\\n') {\n this.setToken(TokenType.Identifier, true);\n return this.token;\n }\n while (this.code[this.i + 1] !== '\\n') {\n value += this.code[this.i];\n this.next();\n }\n value += this.code[this.i];\n const trimmed = value.trim();\n this.setToken(TokenType.Identifier, trimmed ? value : true);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n this.token = null;\n let value = '';\n\n try {\n const char = this.code[this.i];\n if (char === ';' || char === '\\n') {\n this.setToken(TokenType.Identifier, value);\n return this.token;\n }\n let nextC = this.code[this.i + 1];\n while (nextC !== ';' && nextC !== '\\n') {\n value += this.code[this.i];\n this.next();\n nextC = this.code[this.i + 1];\n }\n value += this.code[this.i];\n this.setToken(TokenType.Identifier, value);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n public peekChar() {\n let i = this.i;\n while (this.code[i] === ' ' || this.code[i] === '\\t') {\n i++;\n }\n return this.code[i];\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private staticIns() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.next();\n let value = '';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STATIC_INS, '未闭合的 \"${...}\"', startOffset, startLine, startCol);\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.StaticInsExp, value.slice(0, -1));\n return true;\n }\n\n private brace() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n if (char === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_BRACE, '未闭合的 \"{\"', startOffset, startLine, startCol);\n }\n const nextChar = this.code[this.i + 1];\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.next();\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.next();\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.next();\n }\n return {\n value,\n isEmptyLine\n };\n }\n\n emptyLoc(): SourceLocation {\n const pos = this.getCurrentPos();\n return { start: pos, end: { offset: pos.offset + 1, line: pos.line, column: pos.column + 1 }, source: ' ' };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: '',\n // TODO: 暂时不做缩进位置\n loc: null\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId,\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.next();\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue: any, tokenType: TokenType;\n\n switch (value) {\n case 'null':\n realValue = null;\n tokenType = TokenType.Null;\n break;\n case 'undefined':\n realValue = undefined;\n tokenType = TokenType.Undefined;\n break;\n case 'false':\n realValue = false;\n tokenType = TokenType.Boolean;\n break;\n case 'true':\n realValue = true;\n tokenType = TokenType.Boolean;\n break;\n default:\n realValue = value;\n tokenType = TokenType.Identifier;\n break;\n }\n this.setToken(tokenType, realValue);\n }\n private str(char: string) {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STRING, '未闭合的字符串字面量', startOffset, startLine, startCol);\n }\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.next();\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.String, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.next();\n }\n this.setToken(TokenType.Number, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n let isStaticHook: boolean;\n if (__IS_COMPILER__) {\n isStaticHook = Boolean(this.token.type & TokenType.StaticInsExp);\n } else {\n isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n }\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number((value as any as string).slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { SourceLocation } from \"./type\";\n\n// NodeType包含所有节点类型,包括属性、值等\nenum NodeType {\n // 真实节点类型\n Element = 'Element', // 真实DOM节点\n Text = 'Text', // 文本节点\n Interpolation = 'Interpolation', // 插值节点\n\n // 属性相关类型\n Property = 'Property', // 属性节点\n PropertyKey = 'PropertyKey', // 属性节点\n StaticValue = 'StaticValue', // 静态值\n DynamicValue = 'DynamicValue', // 动态值(JS表达式)\n\n // 程序入口\n Program = 'Program', // 程序根节点\n\n // 逻辑节点类型\n If='If',\n Else='Else',\n Fail='Fail',\n For='For',\n Component='Component',\n Fragment='Fragment'\n}\n\n// 扩展类型联合,包括FakeType和NodeType\ntype ASTNodeType = NodeType;\n\n// 基础节点接口\ninterface BaseNode {\n type: ASTNodeType; // 直接使用FakeType或NodeType作为类型\n loc?: SourceLocation;\n hasError?: boolean;\n}\n\n\n\n// 程序根节点\ninterface Program extends BaseNode {\n type: NodeType.Program;\n body: TemplateNode[];\n}\n\n// 模板节点类型\ntype TemplateNode =\n | ElementNode // 真实DOM元素节点\n | TextNode // 文本节点\n | InterpolationNode // 插值节点\n | ConditionalNode // 条件节点(复用NodeType.If)\n | LoopNode // 循环节点(复用NodeType.For)\n | ComponentNode // 组件节点(复用NodeType.Component)\n | FragmentNode; // 片段节点(复用NodeType.Fragment)\n\n// 真实DOM元素节点(使用NodeType.Element)\ninterface ElementNode extends BaseNode {\n type: NodeType.Element;\n tagName: string;\n props: Property[];\n children: TemplateNode[];\n}\n\n// 文本节点(使用NodeType.Text)\ninterface TextNode extends BaseNode {\n type: NodeType.Text;\n value: string;\n}\n\n// 插值节点(使用NodeType.Interpolation)\ninterface InterpolationNode extends BaseNode {\n type: NodeType.Interpolation;\n expression: string;\n}\n\n// 属性节点(使用NodeType.Property)\ninterface Property extends BaseNode {\n type: NodeType.Property;\n key: PropertyKeyNode;\n value?: PropertyValue;\n}\n\n// 属性值类型 - 区分静态和动态\ntype PropertyValue = StaticValue | DynamicValue;\n\n// 静态值(使用NodeType.StaticValue)\ninterface StaticValue extends BaseNode {\n type: NodeType.StaticValue;\n value: string | number | boolean;\n}\n\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface PropertyKeyNode extends BaseNode {\n type: NodeType.PropertyKey;\n key: string;\n}\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface DynamicValue extends BaseNode {\n type: NodeType.DynamicValue;\n value: string;\n}\n\n// 条件节点(复用NodeType.If)\ninterface ConditionalNode extends BaseNode {\n type: NodeType.If | NodeType.Else | NodeType.Fail;\n condition: PropertyValue;\n consequent: TemplateNode[];\n children?: TemplateNode[];\n}\n\n// 循环节点(复用NodeType.For)\ninterface LoopNode extends BaseNode {\n type: NodeType.For;\n collection: PropertyValue; // 被迭代的集合\n item: PropertyValue; // 项变量名\n index?: PropertyValue; // 索引变量名\n key?: PropertyValue; // 键名\n children: TemplateNode[]; // 循环体\n}\n\n// 组件节点(复用NodeType.Component)\ninterface ComponentNode extends BaseNode {\n type: NodeType.Component;\n componentName: PropertyValue; // 组件名称\n props: Property[]; // 组件属性\n children?: TemplateNode[]; // 组件插槽内容\n}\n\n// 片段节点(复用NodeType.Fragment)\ninterface FragmentNode extends BaseNode {\n type: NodeType.Fragment;\n nodes: TemplateNode[];\n}\n\n// 导出所有类型\nexport {\n NodeType,\n ASTNodeType,\n BaseNode,\n Program,\n TemplateNode,\n ElementNode,\n TextNode,\n InterpolationNode,\n Property,\n PropertyValue,\n StaticValue,\n PropertyKeyNode,\n DynamicValue,\n ConditionalNode,\n LoopNode,\n ComponentNode,\n FragmentNode\n};\n","import { Tokenizer } from './tokenizer';\nimport {\n NodeType,\n Program,\n TemplateNode,\n ElementNode,\n Property,\n PropertyValue,\n ConditionalNode,\n LoopNode,\n PropertyKeyNode,\n BaseNode,\n ComponentNode\n} from './type-ast';\nimport {\n TokenType,\n ParseError,\n ParseErrorCode,\n ParseSyntaxError,\n SourceLocation,\n BaseTokenType,\n ValueTokenType\n} from './type';\n\nexport class Compiler {\n errors: ParseError[] = [];\n\n constructor(\n public tokenizer: Tokenizer,\n public hooks: ParseHooks = {}\n ) {}\n\n private addError(code: ParseErrorCode, message: string, loc: SourceLocation, node?: BaseNode) {\n if(node) {\n node.hasError = true;\n }\n this.errors.push({ code, message, loc });\n }\n\n /**\n * 编译程序入口,生成AST\n */\n @NodeHook\n parseProgram(): Program {\n const body: TemplateNode[] = [];\n try {\n this.tokenizer.nextToken();\n\n // 解析文档主体内容\n while (!this.tokenizer.isEof()) {\n const node = this.templateNode(body);\n if (node) {\n body.push(node);\n }\n }\n } catch (error) {\n if (error instanceof ParseSyntaxError) {\n this.addError(error.code, error.message, error.loc);\n } else {\n this.addError(error.toString() as any, '未知错误', this.tokenizer.emptyLoc());\n }\n }\n\n return {\n type: NodeType.Program,\n body,\n loc: {\n start: { offset: 0, line: 1, column: 0 },\n end: { offset: this.tokenizer.preI, line: this.tokenizer.line, column: this.tokenizer.column },\n source: this.tokenizer.code\n }\n };\n }\n\n handleChildren(): TemplateNode[] {\n const children: TemplateNode[] = [];\n if (this.tokenizer.token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // 跳过缩进\n while (!(this.tokenizer.token.type & TokenType.Dedent) && !this.tokenizer.isEof()) {\n const child = this.templateNode(children);\n if (child) {\n children.push(child);\n }\n }\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // 跳过去缩进\n }\n }\n return children;\n }\n\n /**\n * 解析模板节点\n */\n private templateNode(siblings: TemplateNode[]): TemplateNode | null {\n const token = this.tokenizer.token;\n\n // Pipe 出现在非属性扩展行上下文中\n if (token.type & TokenType.Pipe) {\n this.addError(\n ParseErrorCode.PIPE_IN_WRONG_CONTEXT,\n '\"|\" 只能出现在元素属性扩展行中',\n token.loc ?? this.tokenizer.emptyLoc()\n );\n this.tokenizer.nextToken(); // 跳过 |\n return null;\n }\n\n const [hookType, value] = this.tokenizer._hook({});\n\n const isElseOrFail = value === 'else' || value === 'fail';\n // 检查是否为特殊关键字\n if (value === 'if' || isElseOrFail) {\n if (isElseOrFail) {\n const lastSibling = siblings[siblings.length - 1];\n const lastType = lastSibling?.type;\n if (lastType !== NodeType.If && lastType !== NodeType.Else && lastType !== NodeType.Fail) {\n this.addError(\n ParseErrorCode.ELSE_WITHOUT_IF,\n `\"${value}\" 前必须有 \"if\" 或 \"else\" 节点`,\n token.loc ?? this.tokenizer.emptyLoc()\n );\n }\n }\n return this.parseConditionalNode();\n }\n if (value === 'for') {\n return this.parseLoopNode();\n }\n if (hookType) {\n return this.parseComponentNode();\n }\n // 解析普通元素节点\n return this.parseElementNode();\n }\n\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseComponentNode(node?: ComponentNode) {\n const name = this.parseName();\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Component;\n node.componentName = name;\n node.props = props;\n this.hooks.parseComponentNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseElementNode(node?: ElementNode) {\n const tagToken = this.tokenizer.token;\n // 验证标签名\n if (!(tagToken.type & TokenType.Identifier)) {\n this.addError(\n ParseErrorCode.INVALID_TAG_NAME,\n `无效的标签名,期望标识符但得到 \"${tagToken.value}\"`,\n tagToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n // 跳到下一个 NewLine 恢复\n while (!(this.tokenizer.token.type & TokenType.NewLine) && !this.tokenizer.isEof()) {\n this.tokenizer.nextToken();\n }\n return null;\n }\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Element;\n node.tagName = tagName;\n node.props = props;\n this.hooks.parseElementNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n\n /**\n * 解析条件节点(if/else/fail)\n */\n @NodeHook\n @NodeLoc\n parseConditionalNode(node?: ConditionalNode) {\n const keyword = this.tokenizer.token.value as string;\n\n // 获取条件表达式\n this.tokenizer.condExp();\n const condition = this.parseJsExp();\n this.tokenizer.nextToken(); // 跳过 cond\n this.tokenizer.nextToken(); // 跳过 \\n\n node.type = keyword === 'if' ? NodeType.If : keyword === 'else' ? NodeType.Else : NodeType.Fail;\n node.condition = condition;\n this.hooks.parseConditionalNode?.propsAdded?.call(this, node);\n // 解析条件成立时的内容\n const children = this.handleChildren();\n\n // if (children.length === 0) {\n // this.addError('EMPTY_IF_BODY', `\"${keyword}\" 块没有子节点`, keywordLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析循环节点(for)\n */\n @NodeHook\n @NodeLoc\n parseLoopNode(node?: LoopNode) {\n const forLoc = this.tokenizer.token.loc ?? this.tokenizer.emptyLoc();\n // 跳过 'for' 关键字,解析循环表达式\n this.tokenizer.nextToken();\n const collection = this.parseJsExp();\n\n if (!collection.value && collection.value !== 0) {\n this.addError(ParseErrorCode.MISSING_FOR_COLLECTION, '\"for\" 缺少集合表达式', forLoc, node);\n }\n\n const semicolonToken = this.tokenizer.nextToken(); // 期望分号\n if (!(semicolonToken.type & TokenType.Semicolon)) {\n this.addError(\n ParseErrorCode.MISSING_FOR_SEMICOLON,\n '\"for\" 语法:for <集合>; <item> [index][; key],缺少第一个 \";\"',\n semicolonToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\n\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n if (isDestruct) {\n itemToken.value = '{' + itemToken.value + '}';\n }\n const item = this.parseJsExp();\n\n if (!item.value && item.value !== 0) {\n this.addError(\n ParseErrorCode.MISSING_FOR_ITEM,\n '\"for\" 缺少 item 变量名',\n itemToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\n\n let char = this.tokenizer.peekChar(),\n key: PropertyValue | undefined,\n index: PropertyValue | undefined;\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parseJsExp();\n }\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n this.tokenizer.nextToken();\n index = this.parseJsExp();\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parseJsExp();\n }\n }\n }\n // 跳过最后一个表达式\n this.tokenizer.nextToken();\n // 跳过回车\n this.tokenizer.nextToken();\n node.type = NodeType.For;\n node.collection = collection;\n node.item = item;\n node.index = index;\n node.key = key;\n this.hooks.parseLoopNode?.propsAdded?.call(this, node);\n\n // 解析循环体\n const children = this.handleChildren();\n\n // if (children.length === 0) {\n // this.addError('EMPTY_FOR_BODY', '\"for\" 块没有子节点', forLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析首行和扩展行的属性\n */\n private headerLineAndExtensions(): Property[] {\n const props: Property[] = [];\n\n // 解析首行属性\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n\n // 解析扩展行属性\n while (this.tokenizer.token.type & TokenType.Pipe) {\n this.tokenizer.nextToken(); // 跳过管道符\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n }\n\n return props;\n }\n\n /**\n * 解析属性列表\n */\n private attributeList(): Property[] {\n const props: Property[] = [];\n\n while (\n !(this.tokenizer.token.type & TokenType.NewLine) &&\n !(this.tokenizer.token.type & TokenType.Pipe) &&\n !this.tokenizer.isEof()\n ) {\n const prop = this.parseProperty();\n if (prop) {\n props.push(prop);\n }\n }\n\n return props;\n }\n\n @NodeHook\n parseProperty(node?: Property) {\n node.type = NodeType.Property;\n if (this.tokenizer.token.type !== TokenType.Identifier) {\n this.addError(\n ParseErrorCode.INVALID_PROP_KEY,\n `属性名 \"${this.tokenizer.token.value}\" 不合法`,\n this.tokenizer.token.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n this.tokenizer.nextToken(); // 跳过key\n return null;\n }\n\n node.key = this.parsePropertyKey();\n const token = this.tokenizer.nextToken(); // 跳过key\n if (token.value !== '=') {\n this.addError(\n ParseErrorCode.MISSING_ASSIGN,\n `属性 \"${node.key.key}\" 缺少 \"=\" 赋值符号`,\n node.key.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n node.loc.start = node.key.loc.start;\n node.loc.end = node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n return node;\n }\n\n const valueToken = this.tokenizer.nextToken(); // 跳过等号\n if ((valueToken.type & ValueTokenType) === 0) {\n this.addError(\n ParseErrorCode.MISSING_PROP_ASSIGNMENT,\n `属性值不合法, \"${valueToken.value}\" 不合法`,\n valueToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n \n node.loc.start = node.key.loc.start;\n node.loc.end = node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n return node;\n }\n\n node.value = this.parsePropertyValue();\n this.tokenizer.nextToken();\n node.loc.start = node.key.loc.start;\n node.loc.end = node.value.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n return node;\n }\n\n /**\n * 根据值类型创建属性 key 节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyKey(node?: PropertyKeyNode) {\n node.type = NodeType.PropertyKey;\n node.key = this.tokenizer.token.value as string;\n return node;\n }\n /**\n * 根据值类型创建属性值节点\n */\n @NodeHook\n @TokenLoc\n parseJsExp(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n /**\n * 根据值类型创建属性值节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyValue(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n /**\n * 根据值类型创建名称\n */\n @NodeHook\n @TokenLoc\n parseName(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n}\n\nfunction NodeLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n _node.loc.start = this.tokenizer.token.loc.start;\n const result = target.call(this, _node);\n _node.loc.end = this.tokenizer.token.loc ? this.tokenizer.token.loc.start : this.tokenizer.getCurrentPos();\n _node.loc.source = this.tokenizer.code.slice(_node.loc.start.offset, _node.loc.end.offset);\n return result;\n };\n}\nfunction TokenLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const result = target.call(this, _node);\n _node.loc = this.tokenizer.token.loc;\n return result;\n };\n}\n\nfunction NodeHook(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const hook = this.hooks[context.name as keyof typeof this.hooks];\n const node = { loc: {} } as BaseNode;\n hook?.enter?.call(this, node);\n const result = target.call(this, node);\n hook?.leave?.call(this, node);\n return result;\n };\n}\n\ntype PickParseProps<T> = {\n [K in keyof T as K extends `parse${string}` ? K : never]: T[K];\n};\n\ntype ParseProps = PickParseProps<Compiler>;\n\ntype ParseHooks = Partial<{\n [K in keyof ParseProps]: {\n enter?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n leave?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n propsAdded?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n };\n}>;\n","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","export function macInc(arr: number[]) {\n const len = arr.length;\n /** 候选者数组的尾项在 arr 中的 index */\n let candyLast = [],\n i = 0;\n while (i < len) {\n const it = arr[i];\n if (it !== -1) {\n candyLast = [i];\n break;\n }\n i++;\n }\n // i 为第一项不为 -1 的项,如果其是最后一项,直接返回,因为此时数组只有一个元素\n if (i + 1 >= len) return candyLast;\n\n /** 反向链表 */\n const toPrev = new Int32Array(len);\n\n while (i < len) {\n const target = arr[i];\n // -1 为新增项直接跳过\n if (target === -1) continue;\n // 二分查找,找到在 candyLast 中 item 的插入位置\n // 维持 0,start 小于 target, end, len-1 大于等于 target\n let start = -1,\n end = candyLast.length;\n while (start + 1 < end) {\n const mid = (start + end) >> 1;\n if (arr[candyLast[mid]] < target) {\n start = mid;\n } else {\n end = mid;\n }\n }\n // 最终 end 替换为 target\n candyLast[end] = i;\n // 匹配 i 的前项索引\n toPrev[i] = candyLast[start];\n i++;\n }\n\n let length = candyLast.length;\n for (let j = length - 1; j > 0; j--) {\n const prev = toPrev[candyLast[j]];\n candyLast[j - 1] = prev;\n }\n return candyLast;\n}\n","export const KEY_INDEX = '__BOBE_KEY_INDEX';","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n clean,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { macInc } from './util';\nimport { KEY_INDEX } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n const rootLen = stack.length;\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === rootLen && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.current = forNode.children[++forNode.i];\n ctx.prevSibling = ctx.current.realBefore;\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string,\n vars: string[];\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n vars = itemExp.match(jsVarRegexp);\n const varStr = vars.join(',');\n itemExp = new Function(itemExp, `return {${varStr}};`) as any;\n }\n let indexName: string,\n keyExp: string,\n char = this.tokenizer.peekChar();\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n indexName = this.tokenizer.nextToken().value as string;\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n }\n }\n\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n arrSignal: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n vars,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n forNode.arrSignal = arrSignal;\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new Effect(() => {\n let arr: any[] = arrSignal.get();\n // 订阅 iter\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // 使用原始数组避免 index 依赖\n forNode.arr = arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const item = this.createForItem(forNode, i, data);\n item.realAfter = this.insertAfterAnchor('for-item-after');\n item.realBefore = this.insertAfterAnchor('for-item-before');\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n this.removeForItem(children, i);\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n this.insertForItem(forNode, i, data, newChildren, lastAfter, snapshotForUpdate);\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n this.reuseForItem(child, arr[i], itemExp, i, indexName);\n }\n }\n // 带 key 列表\n else {\n let s = 0,\n e1 = oldLen - 1,\n e2 = newLen - 1;\n // 掐头\n while (s <= e1 && s <= e2) {\n const child = children[s];\n const old = child.key;\n const itemData = this.getItemData(forNode, s, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[s] = child;\n this.reuseForItem(child, arr[s], itemExp, s, indexName);\n s++;\n } else {\n break;\n }\n }\n // 去尾\n while (s <= e1 && s <= e2) {\n const child = children[e1];\n const old = child.key;\n const itemData = this.getItemData(forNode, e2, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[e2] = child;\n this.reuseForItem(child, arr[e2], itemExp, e2, indexName);\n e1--;\n e2--;\n } else {\n break;\n }\n }\n // 纯新增\n if (s > e1) {\n if (s <= e2) {\n // s > 0 纯尾增\n // 否则 纯尾增\n const firstBefore = s > 0 ? children[s - 1]?.realAfter || forNode.realBefore : forNode.realBefore;\n for (let i = e2; i >= s; i--) {\n this.insertForItem(forNode, i, data, newChildren, firstBefore, snapshotForUpdate);\n }\n }\n }\n // 纯尾删\n else if (s > e2) {\n if (s <= e1) {\n for (let i = e1; i >= s; i--) {\n this.removeForItem(children, i);\n }\n }\n }\n // 混合\n else {\n let s1 = s,\n s2 = s;\n const mixLen = e2 - s2 + 1;\n /** key -> 旧 index */\n const key2new = new Map<any, number>();\n for (let i = s2; i <= e2; i++) {\n // TODO: 这里只求 key 可以不用响应式\n const itemData = this.getItemData(forNode, i, data);\n const key = forNode.getKey(itemData);\n key2new.set(key, i);\n }\n /*----------------- 构建 new2oldI -----------------*/\n let maxIncNewI = -1;\n let hasMove = false;\n const new2oldI = new Array<number>(mixLen).fill(-1);\n for (let i = s1; i <= e1; i++) {\n const key = children[i].key;\n const newI = key2new.get(key);\n // 不在新列表中,删除\n if (newI == null) {\n this.removeForItem(children, i);\n continue;\n }\n const child = children[i];\n // 复用\n newChildren[newI] = child;\n this.reuseForItem(child, arr[newI], itemExp, newI, indexName);\n new2oldI[newI - s2] = i;\n // 剩余的 key 是新增\n key2new.delete(key);\n // 如果 newI 比已处理的最大 newI 要小,说明索引较小的项反而靠后,即发生移动\n if (newI < maxIncNewI) {\n hasMove = true;\n } else {\n maxIncNewI = newI;\n }\n }\n /*----------------- 纯增删 -----------------*/\n if (!hasMove) {\n // 按顺序从前往后插入即可\n key2new.forEach((i, key) => {\n const before = i === 0 ? forNode.realBefore : newChildren[i - 1].realAfter;\n this.insertForItem(forNode, i, data, newChildren, before, snapshotForUpdate);\n });\n } else {\n /*----------------- 增删移 -----------------*/\n const incI = macInc(new2oldI),\n incLen = incI.length;\n /** p1 表示新数组中的索引 */\n let p1: number,\n /** p2 表示最长递增子序列的索引 */\n p2: number;\n // 从 s2 开始对比\n for (p1 = s2, p2 = 0; p1 <= e2; p1++) {\n const oldI = new2oldI[p1];\n /** 新增 */\n if (oldI === -1) {\n const before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n this.insertForItem(forNode, p1, data, newChildren, before, snapshotForUpdate);\n continue;\n }\n\n /** 锚点在 new2oldI 组中的索引 */\n const staticIdx = incI[p2] + s2;\n // 匹配到锚点,复用节点,已在构建 new2oldI 时完成\n if (p1 === staticIdx) {\n p2 <= incLen && p2++;\n continue;\n }\n\n // p1 点位需要移动, 数据复用在 new2oldI 构建时已完成,这里处理 dom 移动即可\n let before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n const child = newChildren[p1];\n\n const { realBefore, realAfter, realParent } = child;\n\n let point = realBefore,\n next: any;\n do {\n next = this.nextSib(point);\n this.insertAfter(realParent, point, before);\n // this.handleInsert(realParent, point, before);\n before = point;\n if (point === realAfter) break;\n point = next;\n } while (true);\n }\n }\n }\n }\n forNode.children = newChildren;\n }\n isFirstRender = false;\n setPulling(prevCtx);\n\n return isDestroy => {\n if (isDestroy) {\n for (let i = 0; i < forNode.children.length; i++) {\n const item = forNode.children[i];\n item.effect.dispose();\n }\n }\n };\n });\n return forNode.children[0] || forNode;\n }\n\n insertForItem(\n forNode: ForNode,\n i: number,\n parentData: any,\n newChildren: ForItemNode[],\n before: any,\n snapshotForUpdate: any\n ) {\n const item = this.createForItem(forNode, i, parentData);\n newChildren[i] = item;\n let realAfter = this.createAnchor('for-item-after');\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before');\n this.handleInsert(forNode.realParent, realBefore, before);\n\n item.realBefore = realBefore;\n item.realAfter = realAfter;\n\n this.tokenizer = forNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, realBefore, item);\n }, item.effect);\n }\n\n removeForItem(children: ForItemNode[], i: number) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realBefore);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n\n reuseForItem(child: ForItemNode, data: any, itemExp: string | ((value: any) => any), i: number, indexName?: string) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = i;\n }\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n let data: Record<any, any>;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n // 考虑到生成每项数据需要依赖原始响应式数组,因此无法放在 scope 里\n // 使得 for effect 依赖原响应式数组,每一项\n data = this.getItemData(forNode, i, parentData);\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: forNode.getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getItemData(forNode: ForNode, i: number, parentData: any) {\n const { arr, itemExp, vars, arrSignal, getKey } = forNode;\n let indexName = forNode.indexName;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: i };\n data = deepSignal(rawData, getPulling());\n const computedData = new Computed(() => itemExp(arrSignal.get()[getKey ? data[indexName] : i]));\n const cells = data[Keys.Meta].cells;\n for (let i = 0; i < vars.length; i++) {\n const name = vars[i];\n rawData[name] = undefined;\n cells.set(name, new Computed(() => computedData.get()[name]));\n }\n }\n\n Object.setPrototypeOf(data, parentData);\n return data;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner,\n data,\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { Store } from \"aoye\";\nimport { Interpreter } from \"./terp\";\nimport { Tokenizer } from \"./tokenizer\";\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from \"./type\";\n\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}"],"names":["TokenType","BaseTokenType","String","Number","Boolean","Null","Undefined","ValueTokenType","InsertionExp","StaticInsExp","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","ParseErrorCode","ParseSyntaxError","SyntaxError","constructor","code","message","loc","Tokenizer","TabSize","Tab","Array","from","length","join","EofId","Date","now","DedentId","needIndent","isFirstToken","dentStack","i","line","column","preCol","preI","needLoc","handledTokens","waitingTokens","Queue","source","hook","useDedentAsEof","setToken","Indent","next","getCurrentPos","offset","unclosedLoc","startOffset","startLine","startCol","end","start","slice","throwUnclosed","resume","_snapshot","token","undefined","Object","assign","snapshot","keys","snap","clone","k","skip","logicDentLen","skipFragment","char","_this$getDentValue","getDentValue","value","isEmptyLine","currLen","expLen","INCONSISTENT_INDENT","emptyLoc","shorterThanBaseDentEof","pop","Dedent","push","type","typeName","nextToken","setCode","trimEnd","tokenize","console","log","JSON","stringify","isEof","Identifier","len","item","shift","outer","dent","newLine","assignment","pipe","Semicolon","__IS_COMPILER__","str","braceToken","brace","handled","staticIns","isNum","number","matchIdStart2","identifier","error","condExp","trimmed","trim","jsExp","nextC","peekChar","Assign","Pipe","innerBrace","UNCLOSED_STATIC_INS","inComment","inString","count","backslashCount","UNCLOSED_BRACE","nextChar","NewLine","pos","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","tokenType","continuousBackslashCount","UNCLOSED_STRING","memoCount","eof","Eof","HookId","hookI","_hook","props","isDynamicHook","isStaticHook","indexOf","hookType","res","init","fragments","fragment","NodeType","Compiler","_applyDecs$e","_slicedToArray","_applyDecs","NodeHook","NodeLoc","TokenLoc","e","_initProto","errors","tokenizer","hooks","addError","node","hasError","parseProgram","body","templateNode","toString","Program","handleChildren","children","child","siblings","PIPE_IN_WRONG_CONTEXT","_this$tokenizer$_hook","_this$tokenizer$_hook2","isElseOrFail","lastSibling","lastType","ELSE_WITHOUT_IF","parseConditionalNode","parseLoopNode","parseComponentNode","parseElementNode","name","parseName","headerLineAndExtensions","componentName","propsAdded","call","tagToken","INVALID_TAG_NAME","tagName","Element","keyword","condition","parseJsExp","forLoc","collection","MISSING_FOR_COLLECTION","semicolonToken","MISSING_FOR_SEMICOLON","itemToken","isDestruct","MISSING_FOR_ITEM","key","index","attributeList","prop","parseProperty","Property","INVALID_PROP_KEY","parsePropertyKey","MISSING_ASSIGN","valueToken","MISSING_PROP_ASSIGNMENT","parsePropertyValue","PropertyKey","_this$tokenizer$_hook3","_this$tokenizer$_hook4","DynamicValue","StaticValue","_this$tokenizer$_hook5","_this$tokenizer$_hook6","_this$tokenizer$_hook7","_this$tokenizer$_hook8","target","context","_node","result","enter","leave","MultiTypeStack","typeTops","stack","bits","newNode","types","prevByType","bit","poppedNode","peekByType","cat","peekType","at","peek","macInc","arr","candyLast","it","toPrev","Int32Array","mid","j","prev","KEY_INDEX","Interpreter","isLogicNode","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","Real","CtxProvider","TokenizerSwitcher","Logic","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","handleInsert","setPulling","effect","realBefore","declaration","_stack$pop","_stack$pop2","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","insertAfterAnchor","_this$ctx","afterAnchor","createAnchor","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","valueIsMapKey","Reflect","has","Keys","Raw","val","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemExp","vars","match","jsVarRegexp","varStr","Function","indexName","keyExp","owner","arrSignal","getKey","window","cells","Meta","hasArrExpKey","get","Computed","_forNode$snapshot","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","prevCtx","toRaw","createForItem","firstInsert","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","old","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","Map","set","maxIncNewI","hasMove","new2oldI","fill","newI","delete","forEach","incI","incLen","p1","p2","oldI","staticIdx","nextSib","isDestroy","dispose","parentData","runWithPulling","removeLogicNode","remove","forItemId","forItemNode","scope","Scope","id","deepSignal","rawData","computedData","setPrototypeOf","_this$ctx$stack$peekB","isFn","setProp","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","expression","keyWord","expToken","isElse","isIf","preIsCond","noCond","ifNode","preCond","signal","fn","ef","firstChild","eq","rawVal","config","opt","nextSibling","defaultInsert","defaultRemove","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":";;;;AAKA,IAAYA,SAAS,aAATA,SAAS,EAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,cAAA,CAAA,GAAA,GAAA,CAAA,GAAA,cAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,WAAA,CAAA,GAAA,GAAA,CAAA,GAAA,WAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,cAAA,CAAA,GAAA,GAAA,CAAA,GAAA,cAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,SAAA,CAAA,GAAA,IAAA,CAAA,GAAA,SAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,MAAA,CAAA,GAAA,IAAA,CAAA,GAAA,MAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,WAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAA;AAAA,EAAA,OAATA,SAAS;AAAA,CAAA,CAAA,EAAA,CAAA;AAmBd,MAAMC,aAAa,GACxBD,SAAS,CAACE,MAAM,GAAGF,SAAS,CAACG,MAAM,GAAGH,SAAS,CAACI,OAAO,GAAGJ,SAAS,CAACK,IAAI,GAAGL,SAAS,CAACM,SAAS;AACzF,MAAMC,cAAc,GAAGN,aAAa,GAAGD,SAAS,CAACQ,YAAY,GAAGR,SAAS,CAACS,YAAY;AAE7F,IAAYC,QAAQ,aAARA,QAAQ,EAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AAAA,EAAA,OAARA,QAAQ;AAAA,CAAA,CAAA,EAAA,CAAA;AAUb,MAAMC,OAAO,GAAGD,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI,GAAGH,QAAQ,CAACI,IAAI;AAC3D,MAAMC,UAAU,GAAGL,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI,GAAGH,QAAQ,CAACI,IAAI,GAAGJ,QAAQ,CAACM,GAAG,GAAGN,QAAQ,CAACO,OAAO;AAErGP,QAAQ,CAACE,EAAE,GACXF,QAAQ,CAACG,IAAI,GACbH,QAAQ,CAACI,IAAI,GACbJ,QAAQ,CAACM,GAAG,GACZN,QAAQ,CAACO,OAAO,GAChBP,QAAQ,CAACQ,SAAS,GAClBR,QAAQ,CAACS;AAEJ,MAAMC,oBAAoB,GAAGV,QAAQ,CAACQ,SAAS,GAAGR,QAAQ,CAACS,QAAQ;AAK1E,IAAYE,QAAQ,aAARA,QAAQ,EAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAA;AAAA,EAAA,OAARA,QAAQ;AAAA,CAAA,CAAA,EAAA,CAAA;WAaRC,OAAO,EAAA;EAAPA,OAAO,CAAA,YAAA,CAAA,GAAA,cAAA;EAAPA,OAAO,CAAA,sBAAA,CAAA,GAAA,wBAAA;AAAA,EAAA,OAAPA,OAAO;AAAA,EAAA,CAAA,EAAA;AAkDnB,IAAYC,cAAc,aAAdA,cAAc,EAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,gBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,iBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,iBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,qBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,qBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,qBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,qBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,iBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,iBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,gBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,kBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,kBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,iBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,iBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,eAAA,CAAA,GAAA,IAAA,CAAA,GAAA,eAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,gBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,wBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,wBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,uBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,uBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,kBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,kBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,yBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,yBAAA;AAAdA,EAAAA,cAAc,CAAdA,cAAc,CAAA,uBAAA,CAAA,GAAA,IAAA,CAAA,GAAA,uBAAA;AAAA,EAAA,OAAdA,cAAc;AAAA,CAAA,CAAA,EAAA,CAAA;AAyBnB,MAAMC,gBAAgB,SAASC,WAAW,CAAC;AAGhDC,EAAAA,WAAWA,CAACC,IAAoB,EAAEC,OAAe,EAAEC,GAAmB,EAAE;IACtE,KAAK,CAACD,OAAO,CAAC;IACd,IAAI,CAACD,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACE,GAAG,GAAGA,GAAG;AAChB,EAAA;AACF;;ACxIO,MAAMC,SAAS,CAAC;AAErBC,EAAAA,OAAO,GAAG,CAAC;AAEXC,EAAAA,GAAG,GAAGC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE,IAAI,CAACJ;GAAS,EAAE,MAAM,GAAG,CAAC,CAACK,IAAI,CAAC,EAAE,CAAC;EAE9D,OAAOC,KAAK,GAAG,CAAA,OAAA,EAAUC,IAAI,CAACC,GAAG,EAAE,CAAA,CAAE;EACrC,OAAOC,QAAQ,GAAG,CAAA,UAAA,EAAaF,IAAI,CAACC,GAAG,EAAE,CAAA,CAAE;AAK3CE,EAAAA,UAAU,GAAG,KAAK;AAElBC,EAAAA,YAAY,GAAG,IAAI;EAInBC,SAAS,GAAa,CAAC,CAAC,CAAC;AAEzBC,EAAAA,CAAC,GAAG,CAAC;AACLC,EAAAA,IAAI,GAAG,CAAC;AACRC,EAAAA,MAAM,GAAG,CAAC;AACVC,EAAAA,MAAM,GAAG,CAAC;AACVC,EAAAA,IAAI,GAAG,CAAC;AACRC,EAAAA,OAAO,GAAG,KAAK;AAEfC,EAAAA,aAAa,GAAY,EAAE;AAS3BC,EAAAA,aAAa,GAAG,IAAIC,KAAK,EAAS;AAElCC,EAAAA,MAAM,GAAG,EAAE;AAEX3B,EAAAA,WAAWA,CACD4B,IAAU,EACXC,cAAuB,EAC9B;IAAA,IAAA,CAFQD,IAAU,GAAVA,IAAU;IAAA,IAAA,CACXC,cAAuB,GAAvBA,cAAuB;AAE9B,IAAA,IAAIA,cAAc,EAAE;MAClB,IAAI,CAACC,QAAQ,CAACxD,SAAS,CAACyD,MAAM,EAAE,EAAE,CAAC;MACnC,IAAI,CAACf,YAAY,GAAG,IAAI;AAM1B,IAAA;AACF,EAAA;AACQgB,EAAAA,IAAIA,GAAG;IAUb,IAAI,CAACd,CAAC,EAAE;AACV,EAAA;AAEAe,EAAAA,aAAaA,GAAa;IACxB,OAAO;MACLC,MAAM,EAAE,IAAI,CAAChB,CAAC;MACdC,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,MAAM,EAAE,IAAI,CAACA;KACd;AACH,EAAA;AAGQe,EAAAA,WAAWA,CAACC,WAAmB,EAAEC,SAAiB,EAAEC,QAAgB,EAAkB;IAC5F,MAAMC,GAAG,GAAG,IAAI,CAACtC,IAAI,CAACQ,MAAM,GAAG,CAAC;IAChC,OAAO;AACL+B,MAAAA,KAAK,EAAE;AAAEN,QAAAA,MAAM,EAAEE,WAAW;AAAEjB,QAAAA,IAAI,EAAEkB,SAAS;AAAEjB,QAAAA,MAAM,EAAEkB;OAAU;AACjEC,MAAAA,GAAG,EAAE;AAAEL,QAAAA,MAAM,EAAEK,GAAG;QAAEpB,IAAI,EAAE,IAAI,CAACA,IAAI;QAAEC,MAAM,EAAE,IAAI,CAACA;OAAQ;MAC1DO,MAAM,EAAE,IAAI,CAAC1B,IAAI,CAACwC,KAAK,CAACL,WAAW,EAAEG,GAAG;KACzC;AACH,EAAA;EAEQG,aAAaA,CACnBzC,IAAoB,EACpBC,OAAe,EACfkC,WAAmB,EACnBC,SAAiB,EACjBC,QAAgB,EACT;AACP,IAAA,MAAM,IAAIxC,gBAAgB,CAACG,IAAI,EAAEC,OAAO,EAAE,IAAI,CAACiC,WAAW,CAACC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,CAAC,CAAC;AAC/F,EAAA;EAGAK,MAAMA,CAACC,SAA4C,EAAE;IACnD,IAAI,CAACC,KAAK,GAAGC,SAAS;IACtB,IAAI,CAAC/B,UAAU,GAAG,KAAK;IACvB,IAAI,CAACC,YAAY,GAAG,IAAI;AACxB,IAAA,IAAI,CAACC,SAAS,GAAG,CAAC,CAAC,CAAC;AACpB8B,IAAAA,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEJ,SAAS,CAAC;AAChC,EAAA;EACAK,QAAQA,CAACC,IAA0B,EAAsB;AACvD,IAAA,MAAMC,IAAI,GAAG;MACXjC,CAAC,EAAE,IAAI,CAACA,CAAC;AACTO,MAAAA,aAAa,EAAE,IAAI,CAACA,aAAa,CAAC2B,KAAK;KACxC;AACD,IAAA,IAAIF,IAAI,EAAE;AACR,MAAA,KAAK,MAAMG,CAAC,IAAIH,IAAI,EAAE;AACpBC,QAAAA,IAAI,CAACE,CAAC,CAAC,GAAG,IAAI,CAACA,CAAC,CAAC;QACjB,IAAIA,CAAC,KAAK,WAAW,EAAE;UACrBF,IAAI,CAACE,CAAC,CAAC,GAAG,IAAI,CAACA,CAAC,CAAC,CAACZ,KAAK,EAAE;AAC3B,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAOU,IAAI;AACb,EAAA;AAEAG,EAAAA,IAAIA,GAAG;AACL,IAAA,MAAMC,YAAY,GAAG,IAAI,CAACtC,SAAS,CAAC,IAAI,CAACA,SAAS,CAACR,MAAM,GAAG,CAAC,CAAC;IAC9D,IAAIM,UAAU,GAAG,KAAK;IAEtB,IAAIyC,YAAY,GAAG,CAAA,CAAE;IACrB,IAAI,CAACX,KAAK,GAAGC,SAAS;AACtB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMW,IAAI,GAAG,IAAI,CAACxD,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;MAE9B,IAAIuC,IAAI,KAAK,IAAI,EAAE;AACjB1C,QAAAA,UAAU,GAAG,IAAI;AACjByC,QAAAA,YAAY,IAAIC,IAAI;QACpB,IAAI,CAACzB,IAAI,EAAE;AACX,QAAA;AACF,MAAA;MAEA,IAAI,CAACjB,UAAU,EAAE;AACfyC,QAAAA,YAAY,IAAIC,IAAI;QACpB,IAAI,CAACzB,IAAI,EAAE;AACX,QAAA;AACF,MAAA;AAEAjB,MAAAA,UAAU,GAAG,KAAK;AAElB,MAAA,MAAA2C,kBAAA,GAA+B,IAAI,CAACC,YAAY,EAAE;QAA1CC,KAAK,GAAAF,kBAAA,CAALE,KAAK;QAAEC,WAAW,GAAAH,kBAAA,CAAXG,WAAW;AAC1B,MAAA,MAAMC,OAAO,GAAGF,KAAK,CAACnD,MAAM;AAC5B,MAAA,IAAIoD,WAAW,EAAE;MACjB,IAAIC,OAAO,GAAGP,YAAY,EAAE;AAC1BC,QAAAA,YAAY,IAAII,KAAK;AACvB,MAAA,CAAC,MAEI;AAGH,QAAA,KAAK,IAAI1C,CAAC,GAAG,IAAI,CAACD,SAAS,CAACR,MAAM,GAAG,CAAC,EAAES,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AACnD,UAAA,MAAM6C,MAAM,GAAG,IAAI,CAAC9C,SAAS,CAACC,CAAC,CAAC;UAEhC,IAAI4C,OAAO,KAAKC,MAAM,EAAE;UAGxB,IAAID,OAAO,GAAGC,MAAM,EAAE;AACpB,YAAA,MAAM,IAAIjE,gBAAgB,CAACD,cAAc,CAACmE,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAACC,QAAQ,EAAE,CAAC;AAC5F,UAAA;AAGA,UAAA,IAAI,IAAI,CAACC,sBAAsB,EAAE,EAAE;AACjC,YAAA;AACF,UAAA;AAEA,UAAA,IAAI,CAACjD,SAAS,CAACkD,GAAG,EAAE;AAEpB,UAAA,IAAI,CAAC,IAAI,CAACtB,KAAK,EAAE;YACf,IAAI,CAACf,QAAQ,CAACxD,SAAS,CAAC8F,MAAM,EAAE5F,MAAM,CAACuF,MAAM,CAAC,CAAC;AACjD,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAACtC,aAAa,CAAC4C,IAAI,CAAC;cACtBC,IAAI,EAAEhG,SAAS,CAAC8F,MAAM;AACtBG,cAAAA,QAAQ,EAAEjG,SAAS,CAACA,SAAS,CAAC8F,MAAM,CAAC;AACrCR,cAAAA,KAAK,EAAEpF,MAAM,CAACuF,MAAM,CAAC;AAErB5D,cAAAA,GAAG,EAAE;AACP,aAAC,CAAC;AACJ,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAAC,IAAI,CAAC0C,KAAK,EAAE;MACf,IAAI,CAAC2B,SAAS,EAAE;AAClB,IAAA;AACA,IAAA,OAAOhB,YAAY;AACrB,EAAA;EAEAiB,OAAOA,CAACxE,IAAY,EAAE;AAEpB,IAAA,IAAI,CAACA,IAAI,GAAG,IAAI,GAAGA,IAAI,CAACyE,OAAO,EAAE,GAAG,CAAA,EAAA,EAAKtE,SAAS,CAACO,KAAK,CAAA,CAAE;AAC5D,EAAA;AAEAgE,EAAAA,QAAQA,GAAG;IACT,GAAG;MACD,IAAI,CAACH,SAAS,EAAE;MAChBI,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEvG,SAAS,CAAC,IAAI,CAACuE,KAAK,EAAEyB,IAAI,CAAC,EAAEQ,IAAI,CAACC,SAAS,CAAC,IAAI,CAAClC,KAAK,EAAEe,KAAK,IAAI,EAAE,CAAC,CAAC;AAC7F,IAAA,CAAC,QAAQ,CAAC,IAAI,CAACoB,KAAK,EAAE;AACxB,EAAA;AAEAA,EAAAA,KAAKA,GAAG;AAEN,IAAA,IAAI,CAAC,IAAI,CAACnC,KAAK,EAAE,OAAO,KAAK;AAC7B,IAAA,OAAO,IAAI,CAACA,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAAC2G,UAAU,IAAI,IAAI,CAACpC,KAAK,CAACe,KAAK,KAAKxD,SAAS,CAACO,KAAK;AAEvF,EAAA;AAEQmB,EAAAA,QAAQA,CAACwC,IAAe,EAAEV,KAAe,EAAE;IACjD,IAAI,CAACf,KAAK,GAAG;MACXyB,IAAI;AACJC,MAAAA,QAAQ,EAAEjG,SAAS,CAACgG,IAAI,CAAC;MACzBV,KAAK;AACLzD,MAAAA,GAAG,EAgBG;KACP;IACD,IAAI,CAACa,YAAY,GAAG,KAAK;AAC3B,EAAA;AAEOwD,EAAAA,SAASA,GAAU;IACxB,IAAI;AAEF,MAAA,IAAI,IAAI,CAACQ,KAAK,EAAE,EAAE;QAChB,OAAO,IAAI,CAACnC,KAAK;AACnB,MAAA;MACA,IAAI,CAACA,KAAK,GAAGC,SAAgB;AAC7B,MAAA,IAAI,IAAI,CAACrB,aAAa,CAACyD,GAAG,EAAE;QAC1B,MAAMC,IAAI,GAAG,IAAI,CAAC1D,aAAa,CAAC2D,KAAK,EAAG;QACxC,IAAI,CAACtD,QAAQ,CAACqD,IAAI,CAACb,IAAI,EAAEa,IAAI,CAACvB,KAAK,CAAC;QACpC,OAAO,IAAI,CAACf,KAAK;AACnB,MAAA;MACAwC,KAAK,EAAE,OAAO,CAAC,EAAE;QACf,IAAI,IAAI,CAACtE,UAAU,EAAE;UACnB,IAAI,CAACuE,IAAI,EAAE;AAEb,QAAA,CAAC,MAAM;UACL,MAAM7B,IAAI,GAAG,IAAI,CAACxD,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;AAC9B,UAAA,QAAQuC,IAAI;AACV,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,GAAG;AAEN,cAAA;AAEF,YAAA,KAAK,IAAI;cACP,IAAI,CAAC8B,OAAO,EAAE;cAEd,IAAI,CAACxE,UAAU,GAAG,IAAI;AACtB,cAAA;AACF,YAAA,KAAK,GAAG;cACN,IAAI,CAACyE,UAAU,EAAE;AACjB,cAAA;AACF,YAAA,KAAK,GAAG;cACN,IAAI,CAACC,IAAI,EAAE;AACX,cAAA;AACF,YAAA,KAAK,GAAG;cACN,IAAI,CAAC3D,QAAQ,CAACxD,SAAS,CAACoH,SAAS,EAAE,GAAG,CAAC;AACvC,cAAA;AAEF,YAAA;AACE,cAAA,IAAIC,KAAe,EAAE;AAKrB,cAAA,QAAQlC,IAAI;AACV,gBAAA,KAAK,GAAG;AACR,gBAAA,KAAK,GAAG;AACN,kBAAA,IAAI,CAACmC,GAAG,CAACnC,IAAI,CAAC;AACd,kBAAA;AACF,gBAAA,KAAK,GAAG;AACN,kBAAA,MAAMoC,UAAU,GAAG,IAAI,CAACC,KAAK,EAAE;kBAC/B,IAAI,CAAChE,QAAQ,CAACxD,SAAS,CAACQ,YAAY,EAAE+G,UAAU,CAAC;AACjD,kBAAA;AACF,gBAAA,KAAK,GAAG;AACN,kBAAA,MAAME,OAAO,GAAG,IAAI,CAACC,SAAS,EAAE;AAChC,kBAAA,IAAID,OAAO,EAAE;AACf,gBAAA;AACE,kBAAA,IAAIE,KAAK,CAACxC,IAAI,CAAC,EAAE;AACf,oBAAA,IAAI,CAACyC,MAAM,CAACzC,IAAI,CAAC;AACjB,oBAAA;AACF,kBAAA;kBACA,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI0C,aAAa,CAAC1C,IAAI,EAAE,CAAC,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC2C,UAAU,CAAC3C,IAAI,CAAC;AACvB,kBAAA;AACA,kBAAA;AACJ;AACA,cAAA,IAAIkC,KAAe,EAAE;AAGrB,cAAA;AACJ;UAEA,IAAI,CAAC3D,IAAI,EAAE;AACb,QAAA;QAGA,IAAI,IAAI,CAACa,KAAK,EAAE;AACd,UAAA;AACF,QAAA;AACF,MAAA;MACA,OAAO,IAAI,CAACA,KAAK;IACnB,CAAC,CAAC,OAAOwD,KAAK,EAAE;AACd,MAAA,MAAMA,KAAK;AACb,IAAA,CAAC,SAAS;MACR,IAAI,CAAC7E,aAAa,CAAC6C,IAAI,CAAC,IAAI,CAACxB,KAAK,CAAC;AACrC,IAAA;AACF,EAAA;AAEAyD,EAAAA,OAAOA,GAAG;IAOR,IAAI1C,KAAK,GAAG,EAAE;IACd,IAAI,CAACf,KAAK,GAAG,IAAI;IACjB,IAAI;MACF,IAAI,IAAI,CAAC5C,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAACY,QAAQ,CAACxD,SAAS,CAAC2G,UAAU,EAAE,IAAI,CAAC;QACzC,OAAO,IAAI,CAACpC,KAAK;AACnB,MAAA;AACA,MAAA,OAAO,IAAI,CAAC5C,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QACrC0C,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;QAC1B,IAAI,CAACc,IAAI,EAAE;AACb,MAAA;MACA4B,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;AAC1B,MAAA,MAAMqF,OAAO,GAAG3C,KAAK,CAAC4C,IAAI,EAAE;AAC5B,MAAA,IAAI,CAAC1E,QAAQ,CAACxD,SAAS,CAAC2G,UAAU,EAAEsB,OAAO,GAAG3C,KAAK,GAAG,IAAI,CAAC;MAC3D,OAAO,IAAI,CAACf,KAAK;AACnB,IAAA,CAAC,SAAS;MACR,IAAI,CAACb,IAAI,EAAE;MACX,IAAI,CAACR,aAAa,CAAC6C,IAAI,CAAC,IAAI,CAACxB,KAAK,CAAC;AAIrC,IAAA;AACF,EAAA;AASO4D,EAAAA,KAAKA,GAAG;IAOb,IAAI,CAAC5D,KAAK,GAAG,IAAI;IACjB,IAAIe,KAAK,GAAG,EAAE;IAEd,IAAI;MACF,MAAMH,IAAI,GAAG,IAAI,CAACxD,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;AAC9B,MAAA,IAAIuC,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,IAAI,EAAE;QACjC,IAAI,CAAC3B,QAAQ,CAACxD,SAAS,CAAC2G,UAAU,EAAErB,KAAK,CAAC;QAC1C,OAAO,IAAI,CAACf,KAAK;AACnB,MAAA;MACA,IAAI6D,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;AACjC,MAAA,OAAOwF,KAAK,KAAK,GAAG,IAAIA,KAAK,KAAK,IAAI,EAAE;QACtC9C,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;QAC1B,IAAI,CAACc,IAAI,EAAE;QACX0E,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;AAC/B,MAAA;MACA0C,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;MAC1B,IAAI,CAACY,QAAQ,CAACxD,SAAS,CAAC2G,UAAU,EAAErB,KAAK,CAAC;MAC1C,OAAO,IAAI,CAACf,KAAK;AACnB,IAAA,CAAC,SAAS;MACR,IAAI,CAACb,IAAI,EAAE;MACX,IAAI,CAACR,aAAa,CAAC6C,IAAI,CAAC,IAAI,CAACxB,KAAK,CAAC;AAIrC,IAAA;AACF,EAAA;AAEO8D,EAAAA,QAAQA,GAAG;AAChB,IAAA,IAAIzF,CAAC,GAAG,IAAI,CAACA,CAAC;AACd,IAAA,OAAO,IAAI,CAACjB,IAAI,CAACiB,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAACjB,IAAI,CAACiB,CAAC,CAAC,KAAK,IAAI,EAAE;AACpDA,MAAAA,CAAC,EAAE;AACL,IAAA;AACA,IAAA,OAAO,IAAI,CAACjB,IAAI,CAACiB,CAAC,CAAC;AACrB,EAAA;AAEQsE,EAAAA,UAAUA,GAAG;IACnB,IAAI,CAAC1D,QAAQ,CAACxD,SAAS,CAACsI,MAAM,EAAE,GAAG,CAAC;AACtC,EAAA;AACQnB,EAAAA,IAAIA,GAAG;IACb,IAAI,CAAC3D,QAAQ,CAACxD,SAAS,CAACuI,IAAI,EAAE,GAAG,CAAC;AACpC,EAAA;AACQb,EAAAA,SAASA,GAAG;AAClB,IAAA,MAAM5D,WAAW,GAAG,IAAI,CAACd,IAAI;MAC3Be,SAAS,GAAG,IAAI,CAAClB,IAAI;MACrBmB,QAAQ,GAAG,IAAI,CAACjB,MAAM;IACxB,IAAIqF,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAIwF,KAAK,KAAK,GAAG,EAAE;AACjB,MAAA,OAAO,KAAK;AACd,IAAA;IACA,IAAI,CAAC1E,IAAI,EAAE;IACX,IAAI4B,KAAK,GAAG,EAAE;IACd,IAAIkD,UAAU,GAAG,CAAC;AAClB,IAAA,OAAO,CAAC,EAAE;MACRJ,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;MAC7B,IAAIwF,KAAK,KAAK5D,SAAS,EAAE;AACvB,QAAA,IAAI,CAACJ,aAAa,CAAC7C,cAAc,CAACkH,mBAAmB,EAAE,eAAe,EAAE3E,WAAW,EAAEC,SAAS,EAAEC,QAAQ,CAAC;AAC3G,MAAA;AACAsB,MAAAA,KAAK,IAAI8C,KAAK;MAEd,IAAI,CAAC1E,IAAI,EAAE;MACX,IAAI0E,KAAK,KAAK,GAAG,EAAE;AACjBI,QAAAA,UAAU,EAAE;AACd,MAAA;MAEA,IAAIJ,KAAK,KAAK,GAAG,EAAE;QAEjB,IAAI,CAACI,UAAU,EAAE;AACf,UAAA;AACF,QAAA;AACAA,QAAAA,UAAU,EAAE;AACd,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAAChF,QAAQ,CAACxD,SAAS,CAACS,YAAY,EAAE6E,KAAK,CAACnB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,IAAA,OAAO,IAAI;AACb,EAAA;AAEQqD,EAAAA,KAAKA,GAAG;AACd,IAAA,MAAM1D,WAAW,GAAG,IAAI,CAACd,IAAI;MAC3Be,SAAS,GAAG,IAAI,CAAClB,IAAI;MACrBmB,QAAQ,GAAG,IAAI,CAACjB,MAAM;AACxB,IAAA,IAAI2F,SAAiB;MACnBC,QAAgB;AAChBC,MAAAA,KAAK,GAAG,CAAC;AACTtD,MAAAA,KAAK,GAAG,EAAE;AACVuD,MAAAA,cAAc,GAAG,CAAC;AACpB,IAAA,OAAO,CAAC,EAAE;MACR,MAAM1D,IAAI,GAAG,IAAI,CAACxD,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;MAC9B,IAAIuC,IAAI,KAAKX,SAAS,EAAE;AACtB,QAAA,IAAI,CAACJ,aAAa,CAAC7C,cAAc,CAACuH,cAAc,EAAE,UAAU,EAAEhF,WAAW,EAAEC,SAAS,EAAEC,QAAQ,CAAC;AACjG,MAAA;MACA,MAAM+E,QAAQ,GAAG,IAAI,CAACpH,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;AACtC,MAAA,IAAI8F,SAAS,KAAK,QAAQ,IAAIvD,IAAI,KAAK,IAAI,EAAE;AAC3CuD,QAAAA,SAAS,GAAG,IAAI;AAClB,MAAA,CAAC,MAAM,IAAIA,SAAS,KAAK,OAAO,IAAIvD,IAAI,KAAK,GAAG,IAAI4D,QAAQ,KAAK,GAAG,EAAE;AACpEL,QAAAA,SAAS,GAAG,IAAI;QAChBpD,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;QAC1B,IAAI,CAACc,IAAI,EAAE;MACb,CAAC,MAEI,IAAIiF,QAAQ,EAAE;QAEjB,IAAIxD,IAAI,KAAKwD,QAAQ,IAAIE,cAAc,GAAG,CAAC,KAAK,CAAC,EAAE;AACjDF,UAAAA,QAAQ,GAAG,IAAI;AACjB,QAAA;QACAE,cAAc,GAAG1D,IAAI,KAAK,IAAI,GAAG0D,cAAc,GAAG,CAAC,GAAG,CAAC;AACzD,MAAA,CAAC,MAAM;AAEL,QAAA,IAAI1D,IAAI,KAAK,GAAG,IAAI4D,QAAQ,KAAK,GAAG,EAAE;AACpCL,UAAAA,SAAS,GAAG,QAAQ;UACpBpD,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;UAC1B,IAAI,CAACc,IAAI,EAAE;QACb,CAAC,MAAM,IAAIyB,IAAI,KAAK,GAAG,IAAI4D,QAAQ,KAAK,GAAG,EAAE;AAC3CL,UAAAA,SAAS,GAAG,OAAO;UACnBpD,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;UAC1B,IAAI,CAACc,IAAI,EAAE;AACb,QAAA,CAAC,MAAM,IAAIyB,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,GAAG,EAAE;AACvDwD,UAAAA,QAAQ,GAAGxD,IAAI;AACjB,QAAA,CAAC,MAEI,IAAIA,IAAI,KAAK,GAAG,EAAE;AACrByD,UAAAA,KAAK,EAAE;AACT,QAAA,CAAC,MAAM,IAAIzD,IAAI,KAAK,GAAG,EAAE;AACvByD,UAAAA,KAAK,EAAE;AACT,QAAA;AACF,MAAA;MAEA,IAAIA,KAAK,KAAK,CAAC,IAAID,QAAQ,IAAI,IAAI,IAAID,SAAS,IAAI,IAAI,EAAE;AACxD,QAAA,OAAOpD,KAAK,CAACnB,KAAK,CAAC,CAAC,CAAC;AACvB,MAAA;MACAmB,KAAK,IAAI,IAAI,CAAC3D,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;MAC1B,IAAI,CAACc,IAAI,EAAE;AACb,IAAA;AACF,EAAA;AAEQuD,EAAAA,OAAOA,GAAG;IAChB,IAAI3B,KAAK,GAAG,IAAI;AAChB,IAAA,IAAI8C,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;MAC7B,IAAIwF,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA;AACF,MAAA;AACA9C,MAAAA,KAAK,IAAI8C,KAAK;MAEd,IAAI,CAAC1E,IAAI,EAAE;AACb,IAAA;IAEA,IAAI,IAAI,CAAChB,YAAY,EAAE;AACrB,MAAA;AACF,IAAA;IACA,IAAI,CAACc,QAAQ,CAACxD,SAAS,CAACgJ,OAAO,EAAE1D,KAAK,CAAC;AACzC,EAAA;AACQD,EAAAA,YAAYA,GAAG;IACrB,IAAIC,KAAK,GAAG,EAAE;AACd,IAAA,IAAI8C,KAAK;IACT,IAAI7C,WAAW,GAAG,KAAK;AAEvB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMwD,QAAQ,GAAG,IAAI,CAACpH,IAAI,CAAC,IAAI,CAACiB,CAAC,CAAC;AAElC,MAAA,QAAQmG,QAAQ;AACd,QAAA,KAAK,IAAI;UACPX,KAAK,GAAG,IAAI,CAACpG,GAAG;AAChB,UAAA;AACF,QAAA,KAAK,GAAG;AACNoG,UAAAA,KAAK,GAAG,GAAG;AACX,UAAA;AACF,QAAA,KAAK,IAAI;AACPA,UAAAA,KAAK,GAAG,IAAI;AACZ,UAAA;AACF,QAAA;AACEA,UAAAA,KAAK,GAAG,EAAE;AACV,UAAA;AACJ;MAGA,IAAIA,KAAK,KAAK,IAAI,EAAE;AAClB7C,QAAAA,WAAW,GAAG,IAAI;AAClB,QAAA;AACF,MAAA;MACA,IAAI,CAAC6C,KAAK,EAAE;AACV,QAAA;AACF,MAAA;AACA9C,MAAAA,KAAK,IAAI8C,KAAK;MACd,IAAI,CAAC1E,IAAI,EAAE;AACb,IAAA;IACA,OAAO;MACL4B,KAAK;AACLC,MAAAA;KACD;AACH,EAAA;AAEAI,EAAAA,QAAQA,GAAmB;AACzB,IAAA,MAAMsD,GAAG,GAAG,IAAI,CAACtF,aAAa,EAAE;IAChC,OAAO;AAAEO,MAAAA,KAAK,EAAE+E,GAAG;AAAEhF,MAAAA,GAAG,EAAE;AAAEL,QAAAA,MAAM,EAAEqF,GAAG,CAACrF,MAAM,GAAG,CAAC;QAAEf,IAAI,EAAEoG,GAAG,CAACpG,IAAI;AAAEC,QAAAA,MAAM,EAAEmG,GAAG,CAACnG,MAAM,GAAG;OAAG;AAAEO,MAAAA,MAAM,EAAE;KAAK;AAC7G,EAAA;AACQ2D,EAAAA,IAAIA,GAAG;AACb,IAAA,MAAAkC,mBAAA,GAA+B,IAAI,CAAC7D,YAAY,EAAE;MAA1CC,KAAK,GAAA4D,mBAAA,CAAL5D,KAAK;MAAEC,WAAW,GAAA2D,mBAAA,CAAX3D,WAAW;AAC1B,IAAA,IAAIA,WAAW,EAAE;MAEf,IAAI,CAAC9C,UAAU,GAAG,IAAI;AACtB,MAAA;AACF,IAAA;IAEA,IAAI,CAACA,UAAU,GAAG,KAAK;IAEvB,IAAI,IAAI,CAACC,YAAY,EAAE;MACrB,IAAI,CAACC,SAAS,CAAC,CAAC,CAAC,GAAG2C,KAAK,CAACnD,MAAM;AAChC,MAAA;AACF,IAAA;AACA,IAAA,IAAIqD,OAAO,GAAGF,KAAK,CAACnD,MAAM;AAC1B,IAAA,MAAMgH,YAAY,GAAG3D,OAAO,GAAG,CAAC;AAChC,IAAA,MAAM4D,OAAO,GAAG,IAAI,CAACzG,SAAS,CAAC,IAAI,CAACA,SAAS,CAACR,MAAM,GAAG,CAAC,CAAC;IACzD,IAAIqD,OAAO,GAAG4D,OAAO,EAAE;AACrB,MAAA,IAAI,CAACzG,SAAS,CAACoD,IAAI,CAACP,OAAO,CAAC;MAC5B,IAAI,CAAChC,QAAQ,CAACxD,SAAS,CAACyD,MAAM,EAAE+B,OAAO,CAAC;AACxC,MAAA,OAAO2D,YAAY;AACrB,IAAA;IACA,IAAI3D,OAAO,GAAG4D,OAAO,EAAE;MAErB,KAAK,IAAIxG,CAAC,GAAG,IAAI,CAACD,SAAS,CAACR,MAAM,EAAES,CAAC,EAAE,GAAI;AACzC,QAAA,MAAM6C,MAAM,GAAG,IAAI,CAAC9C,SAAS,CAACC,CAAC,CAAC;QAEhC,IAAI4C,OAAO,KAAKC,MAAM,EAAE;QAExB,IAAID,OAAO,GAAGC,MAAM,EAAE;AACpB,UAAA,MAAM,IAAIjE,gBAAgB,CAACD,cAAc,CAACmE,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAACC,QAAQ,EAAE,CAAC;AAC5F,QAAA;AAEA,QAAA,IAAI,IAAI,CAACC,sBAAsB,EAAE,EAAE;AACjC,UAAA;AACF,QAAA;AACA,QAAA,IAAI,CAACjD,SAAS,CAACkD,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAACtB,KAAK,EAAE;UACf,IAAI,CAACf,QAAQ,CAACxD,SAAS,CAAC8F,MAAM,EAAE5F,MAAM,CAACuF,MAAM,CAAC,CAAC;AACjD,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAACtC,aAAa,CAAC4C,IAAI,CAAC;YACtBC,IAAI,EAAEhG,SAAS,CAAC8F,MAAM;AACtBG,YAAAA,QAAQ,EAAEjG,SAAS,CAACA,SAAS,CAAC8F,MAAM,CAAC;AACrCR,YAAAA,KAAK,EAAEpF,MAAM,CAACuF,MAAM,CAAC;AAErB5D,YAAAA,GAAG,EAAE;AACP,WAAC,CAAC;AACJ,QAAA;AACF,MAAA;AACA,MAAA,OAAOsH,YAAY;AACrB,IAAA;AAEA,IAAA,OAAOA,YAAY;AACrB,EAAA;AAEQvD,EAAAA,sBAAsBA,GAAG;IAC/B,MAAMyD,GAAG,GAAG,IAAI,CAAC1G,SAAS,CAACR,MAAM,KAAK,CAAC;AACvC,IAAA,IAAIkH,GAAG,EAAE;AACP,MAAA,IAAI,CAAC,IAAI,CAAC9E,KAAK,EAAE;QAEf,IAAI,IAAI,CAAChB,cAAc,EAAE;UACvB,IAAI,CAACC,QAAQ,CAACxD,SAAS,CAAC8F,MAAM,EAAE,EAAE,CAAC;AACrC,QAAA,CAAC,MAAM;UACL,IAAI,CAACtC,QAAQ,CAACxD,SAAS,CAAC2G,UAAU,EAAE7E,SAAS,CAACO,KAAK,CAAC;AACtD,QAAA;AACF,MAAA,CAAC,MAAM;QACL,IAAI,IAAI,CAACkB,cAAc,EAAE;AACvB,UAAA,IAAI,CAACJ,aAAa,CAAC4C,IAAI,CAAC;YACtBC,IAAI,EAAEhG,SAAS,CAAC8F,MAAM;AACtBG,YAAAA,QAAQ,EAAEjG,SAAS,CAACA,SAAS,CAAC8F,MAAM,CAAC;AACrCR,YAAAA,KAAK,EAAE,EAAE;AAETzD,YAAAA,GAAG,EAAE;AACP,WAAC,CAAC;AACJ,QAAA,CAAC,MAAM;AACL,UAAA,IAAI,CAACsB,aAAa,CAAC4C,IAAI,CAAC;YACtBC,IAAI,EAAEhG,SAAS,CAAC2G,UAAU;AAC1BV,YAAAA,QAAQ,EAAEjG,SAAS,CAACA,SAAS,CAAC2G,UAAU,CAAC;YACzCrB,KAAK,EAAExD,SAAS,CAACO,KAAK;AAEtBR,YAAAA,GAAG,EAAE;AACP,WAAC,CAAC;AACJ,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAOwH,GAAG;AACZ,EAAA;EAEQvB,UAAUA,CAAC3C,IAAY,EAAE;IAC/B,IAAIG,KAAK,GAAGH,IAAI;AAChB,IAAA,IAAIiD,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAA,IAAI,OAAOwF,KAAK,KAAK,QAAQ,IAAI,CAACP,aAAa,CAACO,KAAK,EAAE,CAAC,CAAC,EAAE;AACzD,QAAA;AACF,MAAA;AACA9C,MAAAA,KAAK,IAAI8C,KAAK;MACd,IAAI,CAAC1E,IAAI,EAAE;AACb,IAAA;IACA,IAAI4B,KAAK,KAAKxD,SAAS,CAACO,KAAK,IAAI,IAAI,CAACkB,cAAc,EAAE;MACpD,IAAI,CAACC,QAAQ,CAACxD,SAAS,CAAC8F,MAAM,EAAE,EAAE,CAAC;AACnC,MAAA;AACF,IAAA;IAEA,IAAIwD,SAAc,EAAEC,SAAoB;AAExC,IAAA,QAAQjE,KAAK;AACX,MAAA,KAAK,MAAM;AACTgE,QAAAA,SAAS,GAAG,IAAI;QAChBC,SAAS,GAAGvJ,SAAS,CAACK,IAAI;AAC1B,QAAA;AACF,MAAA,KAAK,WAAW;AACdiJ,QAAAA,SAAS,GAAG9E,SAAS;QACrB+E,SAAS,GAAGvJ,SAAS,CAACM,SAAS;AAC/B,QAAA;AACF,MAAA,KAAK,OAAO;AACVgJ,QAAAA,SAAS,GAAG,KAAK;QACjBC,SAAS,GAAGvJ,SAAS,CAACI,OAAO;AAC7B,QAAA;AACF,MAAA,KAAK,MAAM;AACTkJ,QAAAA,SAAS,GAAG,IAAI;QAChBC,SAAS,GAAGvJ,SAAS,CAACI,OAAO;AAC7B,QAAA;AACF,MAAA;AACEkJ,QAAAA,SAAS,GAAGhE,KAAK;QACjBiE,SAAS,GAAGvJ,SAAS,CAAC2G,UAAU;AAChC,QAAA;AACJ;AACA,IAAA,IAAI,CAACnD,QAAQ,CAAC+F,SAAS,EAAED,SAAS,CAAC;AACrC,EAAA;EACQhC,GAAGA,CAACnC,IAAY,EAAE;AACxB,IAAA,MAAMrB,WAAW,GAAG,IAAI,CAACd,IAAI;MAC3Be,SAAS,GAAG,IAAI,CAAClB,IAAI;MACrBmB,QAAQ,GAAG,IAAI,CAACjB,MAAM;IACxB,IAAIuC,KAAK,GAAG,EAAE;AACd,IAAA,IAAI8C,KAAK;IACT,IAAIoB,wBAAwB,GAAG,CAAC;AAChC,IAAA,OAAO,CAAC,EAAE;MACRpB,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;MAC7B,IAAIwF,KAAK,KAAK5D,SAAS,EAAE;AACvB,QAAA,IAAI,CAACJ,aAAa,CAAC7C,cAAc,CAACkI,eAAe,EAAE,YAAY,EAAE3F,WAAW,EAAEC,SAAS,EAAEC,QAAQ,CAAC;AACpG,MAAA;MACA,MAAM0F,SAAS,GAAGF,wBAAwB;MAC1C,IAAIpB,KAAK,KAAK,IAAI,EAAE;AAClBoB,QAAAA,wBAAwB,EAAE;AAC5B,MAAA,CAAC,MAAM;AACLA,QAAAA,wBAAwB,GAAG,CAAC;AAC9B,MAAA;MACA,IAAI,CAAC9F,IAAI,EAAE;MAIX,IAAI0E,KAAK,KAAKjD,IAAI,IAAIuE,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;AACzC,QAAA;AACF,MAAA;AACApE,MAAAA,KAAK,IAAI8C,KAAK;AAChB,IAAA;IACA,IAAI,CAAC5E,QAAQ,CAACxD,SAAS,CAACE,MAAM,EAAEoF,KAAK,CAAC;AACxC,EAAA;EACQsC,MAAMA,CAACzC,IAAY,EAAE;IAC3B,IAAIG,KAAK,GAAGH,IAAI;AAChB,IAAA,IAAIiD,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACzG,IAAI,CAAC,IAAI,CAACiB,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAA,IAAI,CAAC+E,KAAK,CAACS,KAAK,CAAC,EAAE;AACjB,QAAA;AACF,MAAA;AACA9C,MAAAA,KAAK,IAAI8C,KAAK;MACd,IAAI,CAAC1E,IAAI,EAAE;AACb,IAAA;IACA,IAAI,CAACF,QAAQ,CAACxD,SAAS,CAACG,MAAM,EAAEA,MAAM,CAACmF,KAAK,CAAC,CAAC;AAChD,EAAA;AACQqE,EAAAA,GAAGA,GAAG;IACZ,IAAI,CAACnG,QAAQ,CAACxD,SAAS,CAAC4J,GAAG,EAAE,aAAa,CAAC;AAC7C,EAAA;AAEAC,EAAAA,MAAM,GAAG,WAAW;AAEpBC,EAAAA,KAAK,GAAG,CAAC;EACTC,KAAK,GAAIC,KAAyB,IAA+C;AAC/E,IAAA,MAAM1E,KAAK,GAAG,IAAI,CAACf,KAAK,CAACe,KAAK;IAC9B,MAAM2E,aAAa,GAAG,IAAI,CAAC1F,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACQ,YAAY;AAC9D,IAAA,IAAI0J,YAAqB;AACzB,IAEO;AACLA,MAAAA,YAAY,GAAG,OAAO5E,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAAC6E,OAAO,CAAC,IAAI,CAACN,MAAM,CAAC,KAAK,CAAC;AAC9E,IAAA;IACA,MAAMO,QAAkB,GAAGH,aAAa,GAAG,SAAS,GAAGC,YAAY,GAAG,QAAQ,GAAG1F,SAAS;AAE1F,IAAA,IAAI,IAAI,CAAClB,IAAI,IAAI4G,YAAY,EAAE;AAC7B,MAAA,MAAMJ,KAAK,GAAG3J,MAAM,CAAEmF,KAAK,CAAmBnB,KAAK,CAAC,IAAI,CAAC0F,MAAM,CAAC1H,MAAM,CAAC,CAAC;AACxE,MAAA,MAAMkI,GAAG,GAAG,IAAI,CAAC/G,IAAI,CAAC;AACpB,QAAA,GAAG0G,KAAK;QACRH,MAAM,EAAE,IAAI,CAACA,MAAM;AACnBjH,QAAAA,CAAC,EAAEkH;AACL,OAAC,CAAC;AAEF,MAAA,OAAO,CAACM,QAAQ,EAAEC,GAAG,EAAEP,KAAK,CAAC;IAC/B,CAAC,MAEI,IAAIG,aAAa,EAAE;AACtB,MAAA,OAAO,CAACG,QAAQ,EAAE9E,KAAK,CAAC;AAC1B,IAAA;AAEA,IAAA,OAAO,CAAC8E,QAAQ,EAAE9E,KAAK,CAAC;EAC1B,CAAC;EAEDgF,IAAIA,CAACC,SAA4B,EAAE;AACjC,IAAA,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;AACjC,MAAA,IAAI,CAACpE,OAAO,CAACoE,SAAS,CAAC;AACzB,IAAA,CAAC,MAAM;MACL,IAAI5I,IAAI,GAAG,EAAE;AACb,MAAA,KAAK,IAAIiB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2H,SAAS,CAACpI,MAAM,GAAG,CAAC,EAAES,CAAC,EAAE,EAAE;AAC7C,QAAA,MAAM4H,QAAQ,GAAGD,SAAS,CAAC3H,CAAC,CAAC;QAC7BjB,IAAI,IAAI6I,QAAQ,GAAG,CAAA,EAAG,IAAI,CAACX,MAAM,CAAA,EAAGjH,CAAC,CAAA,CAAE;AACzC,MAAA;AACA,MAAA,IAAI,CAACuD,OAAO,CAACxE,IAAI,GAAG4I,SAAS,CAACA,SAAS,CAACpI,MAAM,GAAG,CAAC,CAAC,CAAC;AACtD,IAAA;AACF,EAAA;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChyBKsI,IAAAA,QAAQ,aAARA,QAAQ,EAAA;EAARA,QAAQ,CAAA,SAAA,CAAA,GAAA,SAAA;EAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,MAAA;EAARA,QAAQ,CAAA,eAAA,CAAA,GAAA,eAAA;EAARA,QAAQ,CAAA,UAAA,CAAA,GAAA,UAAA;EAARA,QAAQ,CAAA,aAAA,CAAA,GAAA,aAAA;EAARA,QAAQ,CAAA,aAAA,CAAA,GAAA,aAAA;EAARA,QAAQ,CAAA,cAAA,CAAA,GAAA,cAAA;EAARA,QAAQ,CAAA,SAAA,CAAA,GAAA,SAAA;EAARA,QAAQ,CAAA,IAAA,CAAA,GAAA,IAAA;EAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,MAAA;EAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,MAAA;EAARA,QAAQ,CAAA,KAAA,CAAA,GAAA,KAAA;EAARA,QAAQ,CAAA,WAAA,CAAA,GAAA,WAAA;EAARA,QAAQ,CAAA,UAAA,CAAA,GAAA,UAAA;AAAA,EAAA,OAARA,QAAQ;AAAA,CAAA,CAARA,QAAQ,IAAA,EAAA;;;ACqBN,MAAMC,QAAQ,CAAC;AAAA,EAAA;AAAA,IAAA,IAAAC,YAAA,GAAAC,cAAA,CAAAC,cAAA,CAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAkBnBC,QAAQ,EAAA,CAAA,EAAA,cAAA,CAAA,EAAA,CAAA,CAiGRA,QAAQ,EACRC,OAAO,CAAA,EAAA,CAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CAqBPD,QAAQ,EACRC,OAAO,6BAsCPD,QAAQ,EACRC,OAAO,CAAA,EAAA,CAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,CA2BPD,QAAQ,EACRC,OAAO,yBAmIPD,QAAQ,EAAA,CAAA,EAAA,eAAA,CAAA,EAAA,CAAA,CAuDRA,QAAQ,EACRE,QAAQ,6BASRF,QAAQ,EACRE,QAAQ,CAAA,EAAA,CAAA,EAAA,YAAA,CAAA,EAAA,CAAA,CAURF,QAAQ,EACRE,QAAQ,CAAA,EAAA,CAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,CAURF,QAAQ,EACRE,QAAQ,qBAAAC,CAAA,EAAA,CAAA,CAAA;AAAAC,IAAAA,UAAA,GAAAP,YAAA,CAAA,CAAA,CAAA;AAAA;EAvaTQ,MAAM,IAAAD,UAAA,CAAA,IAAA,CAAA,EAAiB,EAAE;AAEzBxJ,EAAAA,WAAWA,CACF0J,SAAoB,EACpBC,KAAiB,GAAG,EAAE,EAC7B;IAAA,IAAA,CAFOD,SAAoB,GAApBA,SAAoB;IAAA,IAAA,CACpBC,KAAiB,GAAjBA,KAAiB;AACvB,EAAA;EAEKC,QAAQA,CAAC3J,IAAoB,EAAEC,OAAe,EAAEC,GAAmB,EAAE0J,IAAe,EAAE;AAC5F,IAAA,IAAGA,IAAI,EAAE;MACPA,IAAI,CAACC,QAAQ,GAAG,IAAI;AACtB,IAAA;AACA,IAAA,IAAI,CAACL,MAAM,CAACpF,IAAI,CAAC;MAAEpE,IAAI;MAAEC,OAAO;AAAEC,MAAAA;AAAI,KAAC,CAAC;AAC1C,EAAA;AAMA4J,EAAAA,YAAYA,GAAY;IACtB,MAAMC,IAAoB,GAAG,EAAE;IAC/B,IAAI;AACF,MAAA,IAAI,CAACN,SAAS,CAAClF,SAAS,EAAE;MAG1B,OAAO,CAAC,IAAI,CAACkF,SAAS,CAAC1E,KAAK,EAAE,EAAE;AAC9B,QAAA,MAAM6E,IAAI,GAAG,IAAI,CAACI,YAAY,CAACD,IAAI,CAAC;AACpC,QAAA,IAAIH,IAAI,EAAE;AACRG,UAAAA,IAAI,CAAC3F,IAAI,CAACwF,IAAI,CAAC;AACjB,QAAA;AACF,MAAA;IACF,CAAC,CAAC,OAAOxD,KAAK,EAAE;MACd,IAAIA,KAAK,YAAYvG,gBAAgB,EAAE;AACrC,QAAA,IAAI,CAAC8J,QAAQ,CAACvD,KAAK,CAACpG,IAAI,EAAEoG,KAAK,CAACnG,OAAO,EAAEmG,KAAK,CAAClG,GAAG,CAAC;AACrD,MAAA,CAAC,MAAM;AACL,QAAA,IAAI,CAACyJ,QAAQ,CAACvD,KAAK,CAAC6D,QAAQ,EAAE,EAAS,MAAM,EAAE,IAAI,CAACR,SAAS,CAACzF,QAAQ,EAAE,CAAC;AAC3E,MAAA;AACF,IAAA;IAEA,OAAO;MACLK,IAAI,EAAEyE,QAAQ,CAACoB,OAAO;MACtBH,IAAI;AACJ7J,MAAAA,GAAG,EAAE;AACHqC,QAAAA,KAAK,EAAE;AAAEN,UAAAA,MAAM,EAAE,CAAC;AAAEf,UAAAA,IAAI,EAAE,CAAC;AAAEC,UAAAA,MAAM,EAAE;SAAG;AACxCmB,QAAAA,GAAG,EAAE;AAAEL,UAAAA,MAAM,EAAE,IAAI,CAACwH,SAAS,CAACpI,IAAI;AAAEH,UAAAA,IAAI,EAAE,IAAI,CAACuI,SAAS,CAACvI,IAAI;AAAEC,UAAAA,MAAM,EAAE,IAAI,CAACsI,SAAS,CAACtI;SAAQ;AAC9FO,QAAAA,MAAM,EAAE,IAAI,CAAC+H,SAAS,CAACzJ;AACzB;KACD;AACH,EAAA;AAEAmK,EAAAA,cAAcA,GAAmB;IAC/B,MAAMC,QAAwB,GAAG,EAAE;IACnC,IAAI,IAAI,CAACX,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACyD,MAAM,EAAE;AAChD,MAAA,IAAI,CAAC2H,SAAS,CAAClF,SAAS,EAAE;MAC1B,OAAO,EAAE,IAAI,CAACkF,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAAC8F,MAAM,CAAC,IAAI,CAAC,IAAI,CAACsF,SAAS,CAAC1E,KAAK,EAAE,EAAE;AACjF,QAAA,MAAMsF,KAAK,GAAG,IAAI,CAACL,YAAY,CAACI,QAAQ,CAAC;AACzC,QAAA,IAAIC,KAAK,EAAE;AACTD,UAAAA,QAAQ,CAAChG,IAAI,CAACiG,KAAK,CAAC;AACtB,QAAA;AACF,MAAA;MACA,IAAI,IAAI,CAACZ,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAAC8F,MAAM,EAAE;AAChD,QAAA,IAAI,CAACsF,SAAS,CAAClF,SAAS,EAAE;AAC5B,MAAA;AACF,IAAA;AACA,IAAA,OAAO6F,QAAQ;AACjB,EAAA;EAKQJ,YAAYA,CAACM,QAAwB,EAAuB;AAClE,IAAA,MAAM1H,KAAK,GAAG,IAAI,CAAC6G,SAAS,CAAC7G,KAAK;AAGlC,IAAA,IAAIA,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACuI,IAAI,EAAE;MAC/B,IAAI,CAAC+C,QAAQ,CACX/J,cAAc,CAAC2K,qBAAqB,EACpC,mBAAmB,EACnB3H,KAAK,CAAC1C,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EACtC,CAAC;AACD,MAAA,IAAI,CAACyF,SAAS,CAAClF,SAAS,EAAE;AAC1B,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,MAAAiG,qBAAA,GAA0B,IAAI,CAACf,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;MAAAqC,sBAAA,GAAAxB,cAAA,CAAAuB,qBAAA,EAAA,CAAA,CAAA;AAA3C/B,MAAAA,QAAQ,GAAAgC,sBAAA,CAAA,CAAA,CAAA;AAAE9G,MAAAA,KAAK,GAAA8G,sBAAA,CAAA,CAAA,CAAA;IAEtB,MAAMC,YAAY,GAAG/G,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,MAAM;AAEzD,IAAA,IAAIA,KAAK,KAAK,IAAI,IAAI+G,YAAY,EAAE;AAClC,MAAA,IAAIA,YAAY,EAAE;QAChB,MAAMC,WAAW,GAAGL,QAAQ,CAACA,QAAQ,CAAC9J,MAAM,GAAG,CAAC,CAAC;AACjD,QAAA,MAAMoK,QAAQ,GAAGD,WAAW,EAAEtG,IAAI;AAClC,QAAA,IAAIuG,QAAQ,KAAK9B,QAAQ,CAAC7J,EAAE,IAAI2L,QAAQ,KAAK9B,QAAQ,CAAC3J,IAAI,IAAIyL,QAAQ,KAAK9B,QAAQ,CAAC5J,IAAI,EAAE;UACxF,IAAI,CAACyK,QAAQ,CACX/J,cAAc,CAACiL,eAAe,EAC9B,CAAA,CAAA,EAAIlH,KAAK,CAAA,uBAAA,CAAyB,EAClCf,KAAK,CAAC1C,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EACtC,CAAC;AACH,QAAA;AACF,MAAA;AACA,MAAA,OAAO,IAAI,CAAC8G,oBAAoB,EAAE;AACpC,IAAA;IACA,IAAInH,KAAK,KAAK,KAAK,EAAE;AACnB,MAAA,OAAO,IAAI,CAACoH,aAAa,EAAE;AAC7B,IAAA;AACA,IAAA,IAAItC,QAAQ,EAAE;AACZ,MAAA,OAAO,IAAI,CAACuC,kBAAkB,EAAE;AAClC,IAAA;AAEA,IAAA,OAAO,IAAI,CAACC,gBAAgB,EAAE;AAChC,EAAA;EAOAD,kBAAkBA,CAACpB,IAAoB,EAAE;AACvC,IAAA,MAAMsB,IAAI,GAAG,IAAI,CAACC,SAAS,EAAE;AAC7B,IAAA,IAAI,CAAC1B,SAAS,CAAClF,SAAS,EAAE;AAG1B,IAAA,MAAM8D,KAAiB,GAAG,IAAI,CAAC+C,uBAAuB,EAAE;AACxDxB,IAAAA,IAAI,CAACvF,IAAI,GAAGyE,QAAQ,CAACvJ,SAAS;IAC9BqK,IAAI,CAACyB,aAAa,GAAGH,IAAI;IACzBtB,IAAI,CAACvB,KAAK,GAAGA,KAAK;AAClB,IAAA,IAAI,CAACqB,KAAK,CAACsB,kBAAkB,EAAEM,UAAU,EAAEC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;AAG3D,IAAA,MAAMQ,QAAQ,GAAG,IAAI,CAACD,cAAc,EAAE;IAEtCP,IAAI,CAACQ,QAAQ,GAAGA,QAAQ;AACxB,IAAA,OAAOR,IAAI;AACb,EAAA;EAMAqB,gBAAgBA,CAACrB,IAAkB,EAAE;AACnC,IAAA,MAAM4B,QAAQ,GAAG,IAAI,CAAC/B,SAAS,CAAC7G,KAAK;IAErC,IAAI,EAAE4I,QAAQ,CAACnH,IAAI,GAAGhG,SAAS,CAAC2G,UAAU,CAAC,EAAE;MAC3C,IAAI,CAAC2E,QAAQ,CACX/J,cAAc,CAAC6L,gBAAgB,EAC/B,CAAA,iBAAA,EAAoBD,QAAQ,CAAC7H,KAAK,CAAA,CAAA,CAAG,EACrC6H,QAAQ,CAACtL,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EACzC4F,IACF,CAAC;MAED,OAAO,EAAE,IAAI,CAACH,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAACoC,SAAS,CAAC1E,KAAK,EAAE,EAAE;AAClF,QAAA,IAAI,CAAC0E,SAAS,CAAClF,SAAS,EAAE;AAC5B,MAAA;AACA,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,MAAMmH,OAAO,GAAGF,QAAQ,CAAC7H,KAAe;AACxC,IAAA,IAAI,CAAC8F,SAAS,CAAClF,SAAS,EAAE;AAG1B,IAAA,MAAM8D,KAAiB,GAAG,IAAI,CAAC+C,uBAAuB,EAAE;AACxDxB,IAAAA,IAAI,CAACvF,IAAI,GAAGyE,QAAQ,CAAC6C,OAAO;IAC5B/B,IAAI,CAAC8B,OAAO,GAAGA,OAAO;IACtB9B,IAAI,CAACvB,KAAK,GAAGA,KAAK;AAClB,IAAA,IAAI,CAACqB,KAAK,CAACuB,gBAAgB,EAAEK,UAAU,EAAEC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;AAGzD,IAAA,MAAMQ,QAAQ,GAAG,IAAI,CAACD,cAAc,EAAE;IAEtCP,IAAI,CAACQ,QAAQ,GAAGA,QAAQ;AACxB,IAAA,OAAOR,IAAI;AACb,EAAA;EAOAkB,oBAAoBA,CAAClB,IAAsB,EAAE;IAC3C,MAAMgC,OAAO,GAAG,IAAI,CAACnC,SAAS,CAAC7G,KAAK,CAACe,KAAe;AAGpD,IAAA,IAAI,CAAC8F,SAAS,CAACpD,OAAO,EAAE;AACxB,IAAA,MAAMwF,SAAS,GAAG,IAAI,CAACC,UAAU,EAAE;AACnC,IAAA,IAAI,CAACrC,SAAS,CAAClF,SAAS,EAAE;AAC1B,IAAA,IAAI,CAACkF,SAAS,CAAClF,SAAS,EAAE;IAC1BqF,IAAI,CAACvF,IAAI,GAAGuH,OAAO,KAAK,IAAI,GAAG9C,QAAQ,CAAC7J,EAAE,GAAG2M,OAAO,KAAK,MAAM,GAAG9C,QAAQ,CAAC3J,IAAI,GAAG2J,QAAQ,CAAC5J,IAAI;IAC/F0K,IAAI,CAACiC,SAAS,GAAGA,SAAS;AAC1B,IAAA,IAAI,CAACnC,KAAK,CAACoB,oBAAoB,EAAEQ,UAAU,EAAEC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;AAE7D,IAAA,MAAMQ,QAAQ,GAAG,IAAI,CAACD,cAAc,EAAE;IAMtCP,IAAI,CAACQ,QAAQ,GAAGA,QAAQ;AAExB,IAAA,OAAOR,IAAI;AACb,EAAA;EAOAmB,aAAaA,CAACnB,IAAe,EAAE;AAC7B,IAAA,MAAMmC,MAAM,GAAG,IAAI,CAACtC,SAAS,CAAC7G,KAAK,CAAC1C,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE;AAEpE,IAAA,IAAI,CAACyF,SAAS,CAAClF,SAAS,EAAE;AAC1B,IAAA,MAAMyH,UAAU,GAAG,IAAI,CAACF,UAAU,EAAE;IAEpC,IAAI,CAACE,UAAU,CAACrI,KAAK,IAAIqI,UAAU,CAACrI,KAAK,KAAK,CAAC,EAAE;AAC/C,MAAA,IAAI,CAACgG,QAAQ,CAAC/J,cAAc,CAACqM,sBAAsB,EAAE,eAAe,EAAEF,MAAM,EAAEnC,IAAI,CAAC;AACrF,IAAA;IAEA,MAAMsC,cAAc,GAAG,IAAI,CAACzC,SAAS,CAAClF,SAAS,EAAE;IACjD,IAAI,EAAE2H,cAAc,CAAC7H,IAAI,GAAGhG,SAAS,CAACoH,SAAS,CAAC,EAAE;MAChD,IAAI,CAACkE,QAAQ,CACX/J,cAAc,CAACuM,qBAAqB,EACpC,oDAAoD,EACpDD,cAAc,CAAChM,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EAC/C4F,IACF,CAAC;AACH,IAAA;IAEA,MAAMwC,SAAS,GAAG,IAAI,CAAC3C,SAAS,CAAClF,SAAS,EAAE;IAC5C,MAAM8H,UAAU,GAAGD,SAAS,CAAC/H,IAAI,KAAKhG,SAAS,CAACQ,YAAY;AAC5D,IAAA,IAAIwN,UAAU,EAAE;MACdD,SAAS,CAACzI,KAAK,GAAG,GAAG,GAAGyI,SAAS,CAACzI,KAAK,GAAG,GAAG;AAC/C,IAAA;AACA,IAAA,MAAMuB,IAAI,GAAG,IAAI,CAAC4G,UAAU,EAAE;IAE9B,IAAI,CAAC5G,IAAI,CAACvB,KAAK,IAAIuB,IAAI,CAACvB,KAAK,KAAK,CAAC,EAAE;MACnC,IAAI,CAACgG,QAAQ,CACX/J,cAAc,CAAC0M,gBAAgB,EAC/B,mBAAmB,EACnBF,SAAS,CAAClM,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EAC1C4F,IACF,CAAC;AACH,IAAA;IAEA,IAAIpG,IAAI,GAAG,IAAI,CAACiG,SAAS,CAAC/C,QAAQ,EAAE;MAClC6F,GAA8B;MAC9BC,KAAgC;IAClC,IAAIhJ,IAAI,KAAK,GAAG,EAAE;AAChB,MAAA,IAAI,CAACiG,SAAS,CAAClF,SAAS,EAAE;MAC1B,IAAI,IAAI,CAACkF,SAAS,CAAC/C,QAAQ,EAAE,KAAK,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC+C,SAAS,CAACjD,KAAK,EAAE;AACtB+F,QAAAA,GAAG,GAAG,IAAI,CAACT,UAAU,EAAE;AACzB,MAAA;IACF,CAAC,MAAM,IAAItI,IAAI,KAAK,IAAI,EAAE,CACzB,MAEI;AACH,MAAA,IAAI,CAACiG,SAAS,CAAClF,SAAS,EAAE;AAC1BiI,MAAAA,KAAK,GAAG,IAAI,CAACV,UAAU,EAAE;MACzB,IAAI,IAAI,CAACrC,SAAS,CAAC/C,QAAQ,EAAE,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC+C,SAAS,CAAClF,SAAS,EAAE;QAC1B,IAAI,IAAI,CAACkF,SAAS,CAAC/C,QAAQ,EAAE,KAAK,IAAI,EAAE;AACtC,UAAA,IAAI,CAAC+C,SAAS,CAACjD,KAAK,EAAE;AACtB+F,UAAAA,GAAG,GAAG,IAAI,CAACT,UAAU,EAAE;AACzB,QAAA;AACF,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAACrC,SAAS,CAAClF,SAAS,EAAE;AAE1B,IAAA,IAAI,CAACkF,SAAS,CAAClF,SAAS,EAAE;AAC1BqF,IAAAA,IAAI,CAACvF,IAAI,GAAGyE,QAAQ,CAACzJ,GAAG;IACxBuK,IAAI,CAACoC,UAAU,GAAGA,UAAU;IAC5BpC,IAAI,CAAC1E,IAAI,GAAGA,IAAI;IAChB0E,IAAI,CAAC4C,KAAK,GAAGA,KAAK;IAClB5C,IAAI,CAAC2C,GAAG,GAAGA,GAAG;AACd,IAAA,IAAI,CAAC7C,KAAK,CAACqB,aAAa,EAAEO,UAAU,EAAEC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;AAGtD,IAAA,MAAMQ,QAAQ,GAAG,IAAI,CAACD,cAAc,EAAE;IAMtCP,IAAI,CAACQ,QAAQ,GAAGA,QAAQ;AAExB,IAAA,OAAOR,IAAI;AACb,EAAA;AAKQwB,EAAAA,uBAAuBA,GAAe;IAC5C,MAAM/C,KAAiB,GAAG,EAAE;IAG5BA,KAAK,CAACjE,IAAI,CAAC,GAAG,IAAI,CAACqI,aAAa,EAAE,CAAC;IAGnC,IAAI,IAAI,CAAChD,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,EAAE;AACjD,MAAA,IAAI,CAACoC,SAAS,CAAClF,SAAS,EAAE;AAC5B,IAAA;IAGA,OAAO,IAAI,CAACkF,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACuI,IAAI,EAAE;AACjD,MAAA,IAAI,CAAC6C,SAAS,CAAClF,SAAS,EAAE;MAC1B8D,KAAK,CAACjE,IAAI,CAAC,GAAG,IAAI,CAACqI,aAAa,EAAE,CAAC;MAGnC,IAAI,IAAI,CAAChD,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,EAAE;AACjD,QAAA,IAAI,CAACoC,SAAS,CAAClF,SAAS,EAAE;AAC5B,MAAA;AACF,IAAA;AAEA,IAAA,OAAO8D,KAAK;AACd,EAAA;AAKQoE,EAAAA,aAAaA,GAAe;IAClC,MAAMpE,KAAiB,GAAG,EAAE;AAE5B,IAAA,OACE,EAAE,IAAI,CAACoB,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,CAAC,IAChD,EAAE,IAAI,CAACoC,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACuI,IAAI,CAAC,IAC7C,CAAC,IAAI,CAAC6C,SAAS,CAAC1E,KAAK,EAAE,EACvB;AACA,MAAA,MAAM2H,IAAI,GAAG,IAAI,CAACC,aAAa,EAAE;AACjC,MAAA,IAAID,IAAI,EAAE;AACRrE,QAAAA,KAAK,CAACjE,IAAI,CAACsI,IAAI,CAAC;AAClB,MAAA;AACF,IAAA;AAEA,IAAA,OAAOrE,KAAK;AACd,EAAA;EAGAsE,aAAaA,CAAC/C,IAAe,EAAE;AAC7BA,IAAAA,IAAI,CAACvF,IAAI,GAAGyE,QAAQ,CAAC8D,QAAQ;IAC7B,IAAI,IAAI,CAACnD,SAAS,CAAC7G,KAAK,CAACyB,IAAI,KAAKhG,SAAS,CAAC2G,UAAU,EAAE;AACtD,MAAA,IAAI,CAAC2E,QAAQ,CACX/J,cAAc,CAACiN,gBAAgB,EAC/B,CAAA,KAAA,EAAQ,IAAI,CAACpD,SAAS,CAAC7G,KAAK,CAACe,KAAK,CAAA,KAAA,CAAO,EACzC,IAAI,CAAC8F,SAAS,CAAC7G,KAAK,CAAC1C,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EACrD4F,IACF,CAAC;AACD,MAAA,IAAI,CAACH,SAAS,CAAClF,SAAS,EAAE;AAC1B,MAAA,OAAO,IAAI;AACb,IAAA;AAEAqF,IAAAA,IAAI,CAAC2C,GAAG,GAAG,IAAI,CAACO,gBAAgB,EAAE;IAClC,MAAMlK,KAAK,GAAG,IAAI,CAAC6G,SAAS,CAAClF,SAAS,EAAE;AACxC,IAAA,IAAI3B,KAAK,CAACe,KAAK,KAAK,GAAG,EAAE;AACvB,MAAA,IAAI,CAACgG,QAAQ,CACX/J,cAAc,CAACmN,cAAc,EAC7B,CAAA,IAAA,EAAOnD,IAAI,CAAC2C,GAAG,CAACA,GAAG,CAAA,aAAA,CAAe,EAClC3C,IAAI,CAAC2C,GAAG,CAACrM,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EACzC4F,IACF,CAAC;MACDA,IAAI,CAAC1J,GAAG,CAACqC,KAAK,GAAGqH,IAAI,CAAC2C,GAAG,CAACrM,GAAG,CAACqC,KAAK;MACnCqH,IAAI,CAAC1J,GAAG,CAACoC,GAAG,GAAGsH,IAAI,CAAC2C,GAAG,CAACrM,GAAG,CAACoC,GAAG;AAC/BsH,MAAAA,IAAI,CAAC1J,GAAG,CAACwB,MAAM,GAAG,IAAI,CAAC+H,SAAS,CAACzJ,IAAI,CAACwC,KAAK,CAACoH,IAAI,CAAC1J,GAAG,CAACqC,KAAK,CAACN,MAAM,EAAE2H,IAAI,CAAC1J,GAAG,CAACoC,GAAG,CAACL,MAAM,CAAC;AACvF,MAAA,OAAO2H,IAAI;AACb,IAAA;IAEA,MAAMoD,UAAU,GAAG,IAAI,CAACvD,SAAS,CAAClF,SAAS,EAAE;IAC7C,IAAI,CAACyI,UAAU,CAAC3I,IAAI,GAAGzF,cAAc,MAAM,CAAC,EAAE;MAC5C,IAAI,CAAC+K,QAAQ,CACX/J,cAAc,CAACqN,uBAAuB,EACtC,CAAA,SAAA,EAAYD,UAAU,CAACrJ,KAAK,CAAA,KAAA,CAAO,EACnCqJ,UAAU,CAAC9M,GAAG,IAAI,IAAI,CAACuJ,SAAS,CAACzF,QAAQ,EAAE,EAC3C4F,IACF,CAAC;MAEDA,IAAI,CAAC1J,GAAG,CAACqC,KAAK,GAAGqH,IAAI,CAAC2C,GAAG,CAACrM,GAAG,CAACqC,KAAK;MACnCqH,IAAI,CAAC1J,GAAG,CAACoC,GAAG,GAAGsH,IAAI,CAAC2C,GAAG,CAACrM,GAAG,CAACoC,GAAG;AAC/BsH,MAAAA,IAAI,CAAC1J,GAAG,CAACwB,MAAM,GAAG,IAAI,CAAC+H,SAAS,CAACzJ,IAAI,CAACwC,KAAK,CAACoH,IAAI,CAAC1J,GAAG,CAACqC,KAAK,CAACN,MAAM,EAAE2H,IAAI,CAAC1J,GAAG,CAACoC,GAAG,CAACL,MAAM,CAAC;AACvF,MAAA,OAAO2H,IAAI;AACb,IAAA;AAEAA,IAAAA,IAAI,CAACjG,KAAK,GAAG,IAAI,CAACuJ,kBAAkB,EAAE;AACtC,IAAA,IAAI,CAACzD,SAAS,CAAClF,SAAS,EAAE;IAC1BqF,IAAI,CAAC1J,GAAG,CAACqC,KAAK,GAAGqH,IAAI,CAAC2C,GAAG,CAACrM,GAAG,CAACqC,KAAK;IACnCqH,IAAI,CAAC1J,GAAG,CAACoC,GAAG,GAAGsH,IAAI,CAACjG,KAAK,CAACzD,GAAG,CAACoC,GAAG;AACjCsH,IAAAA,IAAI,CAAC1J,GAAG,CAACwB,MAAM,GAAG,IAAI,CAAC+H,SAAS,CAACzJ,IAAI,CAACwC,KAAK,CAACoH,IAAI,CAAC1J,GAAG,CAACqC,KAAK,CAACN,MAAM,EAAE2H,IAAI,CAAC1J,GAAG,CAACoC,GAAG,CAACL,MAAM,CAAC;AACvF,IAAA,OAAO2H,IAAI;AACb,EAAA;EAOAkD,gBAAgBA,CAAClD,IAAsB,EAAE;AACvCA,IAAAA,IAAI,CAACvF,IAAI,GAAGyE,QAAQ,CAACqE,WAAW;IAChCvD,IAAI,CAAC2C,GAAG,GAAG,IAAI,CAAC9C,SAAS,CAAC7G,KAAK,CAACe,KAAe;AAC/C,IAAA,OAAOiG,IAAI;AACb,EAAA;EAMAkC,UAAUA,CAAClC,IAAoB,EAAE;IAC/B,MAAAwD,sBAAA,GAA0B,IAAI,CAAC3D,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;MAAAiF,sBAAA,GAAApE,cAAA,CAAAmE,sBAAA,EAAA,CAAA,CAAA;AAA3C3E,MAAAA,QAAQ,GAAA4E,sBAAA,CAAA,CAAA,CAAA;AAAE1J,MAAAA,KAAK,GAAA0J,sBAAA,CAAA,CAAA,CAAA;AACtBzD,IAAAA,IAAI,CAACvF,IAAI,GAAGoE,QAAQ,KAAK,SAAS,GAAGK,QAAQ,CAACwE,YAAY,GAAGxE,QAAQ,CAACyE,WAAW;IACjF3D,IAAI,CAACjG,KAAK,GAAGA,KAAK;AAClB,IAAA,OAAOiG,IAAI;AACb,EAAA;EAMAsD,kBAAkBA,CAACtD,IAAoB,EAAE;IACvC,MAAA4D,sBAAA,GAA0B,IAAI,CAAC/D,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;MAAAqF,sBAAA,GAAAxE,cAAA,CAAAuE,sBAAA,EAAA,CAAA,CAAA;AAA3C/E,MAAAA,QAAQ,GAAAgF,sBAAA,CAAA,CAAA,CAAA;AAAE9J,MAAAA,KAAK,GAAA8J,sBAAA,CAAA,CAAA,CAAA;AACtB7D,IAAAA,IAAI,CAACvF,IAAI,GAAGoE,QAAQ,KAAK,SAAS,GAAGK,QAAQ,CAACwE,YAAY,GAAGxE,QAAQ,CAACyE,WAAW;IACjF3D,IAAI,CAACjG,KAAK,GAAGA,KAAK;AAClB,IAAA,OAAOiG,IAAI;AACb,EAAA;EAMAuB,SAASA,CAACvB,IAAoB,EAAE;IAC9B,MAAA8D,sBAAA,GAA0B,IAAI,CAACjE,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;MAAAuF,sBAAA,GAAA1E,cAAA,CAAAyE,sBAAA,EAAA,CAAA,CAAA;AAA3CjF,MAAAA,QAAQ,GAAAkF,sBAAA,CAAA,CAAA,CAAA;AAAEhK,MAAAA,KAAK,GAAAgK,sBAAA,CAAA,CAAA,CAAA;AACtB/D,IAAAA,IAAI,CAACvF,IAAI,GAAGoE,QAAQ,KAAK,SAAS,GAAGK,QAAQ,CAACwE,YAAY,GAAGxE,QAAQ,CAACyE,WAAW;IACjF3D,IAAI,CAACjG,KAAK,GAAGA,KAAK;AAClB,IAAA,OAAOiG,IAAI;AACb,EAAA;AACF;AAEA,SAASR,OAAOA,CAACwE,MAAgB,EAAEC,OAA8C,EAAE;EACjF,OAAO,UAA0BC,KAAgB,EAAE;AACjDA,IAAAA,KAAK,CAAC5N,GAAG,CAACqC,KAAK,GAAG,IAAI,CAACkH,SAAS,CAAC7G,KAAK,CAAC1C,GAAG,CAACqC,KAAK;IAChD,MAAMwL,MAAM,GAAGH,MAAM,CAACrC,IAAI,CAAC,IAAI,EAAEuC,KAAK,CAAC;AACvCA,IAAAA,KAAK,CAAC5N,GAAG,CAACoC,GAAG,GAAG,IAAI,CAACmH,SAAS,CAAC7G,KAAK,CAAC1C,GAAG,GAAG,IAAI,CAACuJ,SAAS,CAAC7G,KAAK,CAAC1C,GAAG,CAACqC,KAAK,GAAG,IAAI,CAACkH,SAAS,CAACzH,aAAa,EAAE;AAC1G8L,IAAAA,KAAK,CAAC5N,GAAG,CAACwB,MAAM,GAAG,IAAI,CAAC+H,SAAS,CAACzJ,IAAI,CAACwC,KAAK,CAACsL,KAAK,CAAC5N,GAAG,CAACqC,KAAK,CAACN,MAAM,EAAE6L,KAAK,CAAC5N,GAAG,CAACoC,GAAG,CAACL,MAAM,CAAC;AAC1F,IAAA,OAAO8L,MAAM;EACf,CAAC;AACH;AACA,SAAS1E,QAAQA,CAACuE,MAAgB,EAAEC,OAA8C,EAAE;EAClF,OAAO,UAA0BC,KAAgB,EAAE;IACjD,MAAMC,MAAM,GAAGH,MAAM,CAACrC,IAAI,CAAC,IAAI,EAAEuC,KAAK,CAAC;IACvCA,KAAK,CAAC5N,GAAG,GAAG,IAAI,CAACuJ,SAAS,CAAC7G,KAAK,CAAC1C,GAAG;AACpC,IAAA,OAAO6N,MAAM;EACf,CAAC;AACH;AAEA,SAAS5E,QAAQA,CAACyE,MAAgB,EAAEC,OAA8C,EAAE;EAClF,OAAO,UAA0BC,KAAgB,EAAE;IACjD,MAAMnM,IAAI,GAAG,IAAI,CAAC+H,KAAK,CAACmE,OAAO,CAAC3C,IAAI,CAA4B;AAChE,IAAA,MAAMtB,IAAI,GAAG;AAAE1J,MAAAA,GAAG,EAAE;KAAgB;IACpCyB,IAAI,EAAEqM,KAAK,EAAEzC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;IAC7B,MAAMmE,MAAM,GAAGH,MAAM,CAACrC,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;IACtCjI,IAAI,EAAEsM,KAAK,EAAE1C,IAAI,CAAC,IAAI,EAAE3B,IAAI,CAAC;AAC7B,IAAA,OAAOmE,MAAM;EACf,CAAC;AACH;;ACrdO,MAAMG,cAAc,CAAI;EAKrBC,QAAQ,GAA0C,EAAE;AAE5D3N,EAAAA,MAAM,GAAG,CAAC;AACV4N,EAAAA,KAAK,GAAmB,EAAE;AAM1BhK,EAAAA,IAAIA,CAACT,KAAQ,EAAE0K,IAAiB,EAAQ;AACtC,IAAA,MAAMC,OAAqB,GAAG;MAC5B3K,KAAK;AACL4K,MAAAA,KAAK,EAAEF,IAAI;AACXG,MAAAA,UAAU,EAAE;KACb;AAED,IAAA,IAAIC,GAAW;AACf,IAAA,OAAO,CAAC,EAAE;AAERA,MAAAA,GAAG,GAAGJ,IAAI,GAAI,CAACA,IAAI,GAAG,CAAE;MACxB,IAAI,CAACI,GAAG,EAAE;MAEVJ,IAAI,IAAI,CAACI,GAAG;AAEZH,MAAAA,OAAO,CAACE,UAAU,CAACC,GAAG,CAAC,GAAG,IAAI,CAACN,QAAQ,CAACM,GAAG,CAAC,IAAI5L,SAAS;AACzD,MAAA,IAAI,CAACsL,QAAQ,CAACM,GAAG,CAAC,GAAGH,OAAO;AAC9B,IAAA;IACA,IAAI,CAACF,KAAK,CAAC,IAAI,CAAC5N,MAAM,EAAE,CAAC,GAAG8N,OAAO;AACrC,EAAA;AAKApK,EAAAA,GAAGA,GAAG;IACJ,MAAMwK,UAAU,GAAG,IAAI,CAACN,KAAK,CAAC,IAAI,CAAC5N,MAAM,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC4N,KAAK,CAAC,EAAE,IAAI,CAAC5N,MAAM,CAAC,GAAG,IAAI;AAChC,IAAA,IAAI,CAACkO,UAAU,EAAE,OAAO7L,SAAS;AAEjC,IAAA,IAAawL,IAAI,GAAKK,UAAU,CAA1BH,KAAK;AAEX,IAAA,IAAIE,GAAW;AACf,IAAA,OAAO,CAAC,EAAE;AAERA,MAAAA,GAAG,GAAGJ,IAAI,GAAI,CAACA,IAAI,GAAG,CAAE;MACxB,IAAI,CAACI,GAAG,EAAE;MAEVJ,IAAI,IAAI,CAACI,GAAG;MAEZ,IAAI,CAACN,QAAQ,CAACM,GAAG,CAAC,GAAGC,UAAU,CAACF,UAAU,CAACC,GAAG,CAAC;AACjD,IAAA;IAGA,OAAO,CAACC,UAAU,CAAC/K,KAAK,EAAE+K,UAAU,CAACH,KAAK,CAAC;AAC7C,EAAA;EAKAI,UAAUA,CAACC,GAAW,EAAiB;AACrC,IAAA,OAAO,IAAI,CAACT,QAAQ,CAACS,GAAG,CAAC,EAAEjL,KAAK;AAClC,EAAA;AAEAkL,EAAAA,QAAQA,GAAuB;IAC7B,OAAO,IAAI,CAACT,KAAK,CAACU,EAAE,CAAC,EAAE,CAAC,CAACP,KAAK;AAChC,EAAA;AAKAQ,EAAAA,IAAIA,GAAkB;IACpB,OAAO,IAAI,CAACX,KAAK,CAACU,EAAE,CAAC,EAAE,CAAC,CAACnL,KAAK;AAChC,EAAA;AAmCF;;AC7HO,SAASqL,MAAMA,CAACC,GAAa,EAAE;AACpC,EAAA,MAAMhK,GAAG,GAAGgK,GAAG,CAACzO,MAAM;EAEtB,IAAI0O,SAAS,GAAG,EAAE;AAChBjO,IAAAA,CAAC,GAAG,CAAC;EACP,OAAOA,CAAC,GAAGgE,GAAG,EAAE;AACd,IAAA,MAAMkK,EAAE,GAAGF,GAAG,CAAChO,CAAC,CAAC;AACjB,IAAA,IAAIkO,EAAE,KAAK,EAAE,EAAE;MACbD,SAAS,GAAG,CAACjO,CAAC,CAAC;AACf,MAAA;AACF,IAAA;AACAA,IAAAA,CAAC,EAAE;AACL,EAAA;AAEA,EAAA,IAAIA,CAAC,GAAG,CAAC,IAAIgE,GAAG,EAAE,OAAOiK,SAAS;AAGlC,EAAA,MAAME,MAAM,GAAG,IAAIC,UAAU,CAACpK,GAAG,CAAC;EAElC,OAAOhE,CAAC,GAAGgE,GAAG,EAAE;AACd,IAAA,MAAM2I,MAAM,GAAGqB,GAAG,CAAChO,CAAC,CAAC;AAErB,IAAA,IAAI2M,MAAM,KAAK,EAAE,EAAE;IAGnB,IAAIrL,KAAK,GAAG,EAAE;MACZD,GAAG,GAAG4M,SAAS,CAAC1O,MAAM;AACxB,IAAA,OAAO+B,KAAK,GAAG,CAAC,GAAGD,GAAG,EAAE;AACtB,MAAA,MAAMgN,GAAG,GAAI/M,KAAK,GAAGD,GAAG,IAAK,CAAC;MAC9B,IAAI2M,GAAG,CAACC,SAAS,CAACI,GAAG,CAAC,CAAC,GAAG1B,MAAM,EAAE;AAChCrL,QAAAA,KAAK,GAAG+M,GAAG;AACb,MAAA,CAAC,MAAM;AACLhN,QAAAA,GAAG,GAAGgN,GAAG;AACX,MAAA;AACF,IAAA;AAEAJ,IAAAA,SAAS,CAAC5M,GAAG,CAAC,GAAGrB,CAAC;AAElBmO,IAAAA,MAAM,CAACnO,CAAC,CAAC,GAAGiO,SAAS,CAAC3M,KAAK,CAAC;AAC5BtB,IAAAA,CAAC,EAAE;AACL,EAAA;AAEA,EAAA,IAAIT,MAAM,GAAG0O,SAAS,CAAC1O,MAAM;AAC7B,EAAA,KAAK,IAAI+O,CAAC,GAAG/O,MAAM,GAAG,CAAC,EAAE+O,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IACnC,MAAMC,IAAI,GAAGJ,MAAM,CAACF,SAAS,CAACK,CAAC,CAAC,CAAC;AACjCL,IAAAA,SAAS,CAACK,CAAC,GAAG,CAAC,CAAC,GAAGC,IAAI;AACzB,EAAA;AACA,EAAA,OAAON,SAAS;AAClB;;AChDO,MAAMO,SAAS,GAAG,kBAAkB;;;ACyCpC,MAAMC,WAAW,CAAC;EAEvB3P,WAAWA,CAAS0J,SAAoB,EAAE;IAAA,IAAA,CAAtBA,SAAoB,GAApBA,SAAoB;AAAG,EAAA;EAC3CkG,WAAWA,CAAC/F,IAAS,EAAE;AACrB,IAAA,OAAOA,IAAI,IAAIA,IAAI,CAACgG,WAAW,GAAGxQ,UAAU;AAC9C,EAAA;AAGAyQ,EAAAA,aAAa,GAAyB,IAAI;EAE1CC,OAAOA,CAACC,IAAS,EAAEC,aAA6B,EAAEC,MAAY,EAAEC,WAAiB,EAAE;IAEjF,IAAI,CAACL,aAAa,GAAGG,aAAa;AAElC,IAAA,IAAI,CAACvG,SAAS,CAAClF,SAAS,EAAE;AAC1B,IAAA,MAAM6J,KAAK,GAAG,IAAIF,cAAc,EAAa;IAC7CE,KAAK,CAAChK,IAAI,CAAC;AAAEwF,MAAAA,IAAI,EAAEmG,IAAI;AAAEP,MAAAA,IAAI,EAAE;AAAK,KAAC,EAAE9P,QAAQ,CAACyQ,IAAI,CAAC;IACrD/B,KAAK,CAAChK,IAAI,CACR;AAAEwF,MAAAA,IAAI,EAAEoG,aAAa;AAAER,MAAAA,IAAI,EAAE;AAAK,KAAC,EACnC9P,QAAQ,CAACH,SAAS,GAAGG,QAAQ,CAAC0Q,WAAW,GAAG1Q,QAAQ,CAAC2Q,iBACvD,CAAC;AACD,IAAA,IAAIH,WAAW,EAAE;MACf9B,KAAK,CAAChK,IAAI,CACR;AAAEwF,QAAAA,IAAI,EAAEsG,WAAW;AAAEV,QAAAA,IAAI,EAAE;AAAK,OAAC,EACjC,CAACU,WAAW,CAACN,WAAW,GAAGxQ,UAAU,GAAGM,QAAQ,CAAC4Q,KAAK,GAAG,CAAC,IAAI5Q,QAAQ,CAAC0Q,WACzE,CAAC;AACH,IAAA;AACA,IAAA,MAAMG,OAAO,GAAGnC,KAAK,CAAC5N,MAAM;AAE5B,IAAA,MAAMgQ,GAAG,GAAI,IAAI,CAACA,GAAG,GAAG;AACtBC,MAAAA,UAAU,EAAEV,IAAI;AAChBW,MAAAA,WAAW,EAAET,MAAM;AACnBU,MAAAA,OAAO,EAAE,IAAI;MACbvC,KAAK;AACL6B,MAAAA;KACA;AAEF,IAAA,MAAMW,WAAW,GAAGC,UAAU,EAAE;AAChC,IAAA,OAAO,CAAC,EAAE;AAER,MAAA,IAAI,IAAI,CAACpH,SAAS,CAAC1E,KAAK,EAAE,EAAE;QAC1B,IAAI,CAACyL,GAAG,CAACE,WAAW,EAAEF,GAAG,CAACE,WAAW,GAAGT,MAAM;AAC9C,QAAA,IAAI,CAACa,YAAY,CAACf,IAAI,EAAES,GAAG,CAACG,OAAO,EAAEH,GAAG,CAACE,WAAW,EAAEV,aAAa,CAAC;AACpE,QAAA;AACF,MAAA;AAEA,MAAA,MAAMpN,KAAK,GAAG,IAAI,CAAC6G,SAAS,CAAC7G,KAAK;AAElC,MAAA,IAAIA,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACyD,MAAM,EAAE;AACjC,QAAA,IAAI,CAAC2H,SAAS,CAAClF,SAAS,EAAE;QAC1B,MAAMoL,WAAW,GAAG,IAAI,CAACA,WAAW,CAACa,GAAG,CAACG,OAAO,CAAC;QACjDvC,KAAK,CAAChK,IAAI,CACR;UACEwF,IAAI,EAAE4G,GAAG,CAACG,OAAO;UACjBnB,IAAI,EAAEgB,GAAG,CAACE;AACZ,SAAC,EACD,CAACF,GAAG,CAACG,OAAO,CAACf,WAAW,GACpBlQ,QAAQ,CAACyQ,IAAI,GACb,CAACK,GAAG,CAACG,OAAO,CAACf,WAAW,GAAGxQ,UAAU,GAAGM,QAAQ,CAAC4Q,KAAK,GAAG,CAAC,KACvDE,GAAG,CAACG,OAAO,CAACf,WAAW,GAAGnQ,oBAAoB,GAAGC,QAAQ,CAAC2Q,iBAAiB,GAAG,CAAC,CAAC,IAChFG,GAAG,CAACG,OAAO,CAACf,WAAW,KAAK7Q,QAAQ,CAACQ,SAAS,GAAGG,QAAQ,CAACH,SAAS,GAAG,CAAC,CAAC,GACzEG,QAAQ,CAAC0Q,WACjB,CAAC;AACD,QAAA,IAAII,GAAG,CAACG,OAAO,CAACf,WAAW,EAAE;AAE3B,UAAA,IAAID,WAAW,EAAE;AAEfoB,YAAAA,UAAU,CAACP,GAAG,CAACG,OAAO,CAACK,MAAM,CAAC;YAC9B,IAAIR,GAAG,CAACG,OAAO,CAACf,WAAW,GAAG7Q,QAAQ,CAACO,OAAO,EAAE;AAC9CkR,cAAAA,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,CAACM,UAAU;AAC1C,YAAA;AACF,UAAA;AACF,QAAA,CAAC,MAEI;UACH,IAAIT,GAAG,CAACG,OAAO,EAAE;AACfH,YAAAA,GAAG,CAACC,UAAU,GAAGD,GAAG,CAACG,OAAO;AAC9B,UAAA;UACAH,GAAG,CAACE,WAAW,GAAG,IAAI;AACxB,QAAA;QACAF,GAAG,CAACG,OAAO,GAAG,IAAI,CAACO,WAAW,CAACV,GAAG,CAAC;AACnC,QAAA;AACF,MAAA;MAEA,IAAIA,GAAG,CAACG,OAAO,EAAE;QAEf,IAAIvC,KAAK,CAAC5N,MAAM,KAAK+P,OAAO,IAAI,CAACC,GAAG,CAACE,WAAW,EAAE;UAChDF,GAAG,CAACE,WAAW,GAAGT,MAAM;AAC1B,QAAA;AACA,QAAA,IAAI,CAACa,YAAY,CAACN,GAAG,CAACC,UAAU,EAAED,GAAG,CAACG,OAAO,EAAEH,GAAG,CAACE,WAAW,CAAC;AACjE,MAAA;MAEA,IAAI,IAAI,CAACjH,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAAC8F,MAAM,EAAE;AAChD,QAAA,IAAI,CAACsF,SAAS,CAAClF,SAAS,EAAE;AAC1B,QAAA,MAAA4M,UAAA,GAAuC/C,KAAK,CAAClK,GAAG,EAAE;UAAAkN,WAAA,GAAAnI,cAAA,CAAAkI,UAAA,EAAA,CAAA,CAAA;AAAAE,UAAAA,YAAA,GAAAD,WAAA,CAAA,CAAA,CAAA;UAAnCE,MAAM,GAAAD,YAAA,CAAZzH,IAAI;UAAU4F,IAAI,GAAA6B,YAAA,CAAJ7B,IAAI;AAAI+B,UAAAA,IAAI,GAAAH,WAAA,CAAA,CAAA,CAAA;AAEnC,QAAA,IAAI,CAACE,MAAM,CAAC1B,WAAW,EAAE;UACvB,MAAM4B,YAAY,GAAGpD,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAACyQ,IAAI,CAAC;AACpDK,UAAAA,GAAG,CAACC,UAAU,GAAGe,YAAY,EAAE5H,IAAI,IAAImG,IAAI;AAC7C,QAAA,CAAC,MAEI;AAEH,UAAA,IAAIwB,IAAI,GAAG7R,QAAQ,CAAC4Q,KAAK,EAAE;YAEzB,MAAMmB,WAAW,GAAGrD,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAAC4Q,KAAK,CAAC,EAAE1G,IAAI;AAC1D,YAAA,IAAI6H,WAAW,EAAE;AACfV,cAAAA,UAAU,CAACU,WAAW,CAACT,MAAM,CAAC;AAChC,YAAA,CAAC,MAAM;cACLD,UAAU,CAACH,WAAW,CAAC;AACzB,YAAA;AACF,UAAA;AAEA,UAAA,IAAIW,IAAI,GAAG7R,QAAQ,CAAC2Q,iBAAiB,EAAE;YACrC,MAAMqB,QAAQ,GAAGtD,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAAC2Q,iBAAiB,CAAC,EAAEzG,IAAI;AACnE,YAAA,IAAI,CAACH,SAAS,GAAGiI,QAAQ,CAACjI,SAAS;AACrC,UAAA;AAGA,UAAA,IAAI6H,MAAM,CAAC1B,WAAW,KAAK7Q,QAAQ,CAACO,OAAO,EAAE;YAC3C,MAAAqS,IAAA,GAAoBL,MAAM;cAAlBM,OAAO,GAAAD,IAAA,CAAPC,OAAO;AACf,YAAA,MAAQ3Q,CAAC,GAAoB2Q,OAAO,CAA5B3Q,CAAC;cAAEgO,GAAG,GAAe2C,OAAO,CAAzB3C,GAAG;cAAEjM,QAAQ,GAAK4O,OAAO,CAApB5O,QAAQ;AACxB,YAAA,IAAI/B,CAAC,GAAG,CAAC,GAAGgO,GAAG,CAACzO,MAAM,EAAE;AAEtB,cAAA,IAAI,CAACiJ,SAAS,CAAC/G,MAAM,CAACM,QAAQ,CAAC;AAC/B,cAAA,IAAI,CAACyG,SAAS,CAAClF,SAAS,EAAE;AAC1B,cAAA,IAAI,CAACkF,SAAS,CAAClF,SAAS,EAAE;cAC1BiM,GAAG,CAACG,OAAO,GAAGiB,OAAO,CAACxH,QAAQ,CAAC,EAAEwH,OAAO,CAAC3Q,CAAC,CAAC;AAC3CuP,cAAAA,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,CAACM,UAAU;AACxC,cAAA;AACF,YAAA;AAEAT,YAAAA,GAAG,CAACE,WAAW,GAAGkB,OAAO,CAAClB,WAAW;YACrCF,GAAG,CAACG,OAAO,GAAGiB,OAAO;AACrB,YAAA;AACF,UAAA;AACF,QAAA;QACApB,GAAG,CAACE,WAAW,GAAGlB,IAAI;QACtBgB,GAAG,CAACG,OAAO,GAAGW,MAAM;AACtB,MAAA,CAAC,MAEI;QACHd,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACE,WAAW;QAChDF,GAAG,CAACG,OAAO,GAAG,IAAI,CAACO,WAAW,CAACV,GAAG,CAAC;AACrC,MAAA;AACF,IAAA;AACA,IAAA,OAAOR,aAAa;AACtB,EAAA;AAEA6B,EAAAA,iBAAiBA,CAAC3G,IAAI,GAAG,QAAQ,EAAE;AACjC,IAAA,MAAA4G,SAAA,GAAmD,IAAI,CAACtB,GAAG;MAAnDC,UAAU,GAAAqB,SAAA,CAAVrB,UAAU;MAAEC,WAAW,GAAAoB,SAAA,CAAXpB,WAAW;MAAEtC,KAAK,GAAA0D,SAAA,CAAL1D,KAAK;MAAE6B,MAAM,GAAA6B,SAAA,CAAN7B,MAAM;AAE9C,IAAA,MAAM8B,WAAW,GAAG,IAAI,CAACC,YAAY,CAAC9G,IAAI,CAAC;AAC3C,IAAA,IAAI,CAACsF,GAAG,CAACE,WAAW,GAAGtC,KAAK,CAAC5N,MAAM,KAAK,CAAC,IAAI,CAACkQ,WAAW,GAAGT,MAAM,GAAGS,WAAW;IAChF,IAAI,CAACI,YAAY,CAACL,UAAU,EAAEsB,WAAW,EAAErB,WAAW,CAAC;AACvD,IAAA,OAAOqB,WAAW;AACpB,EAAA;EAQAjB,YAAYA,CAACQ,MAAW,EAAEjH,KAAU,EAAEmF,IAAS,EAAEyC,eAAqB,EAAE;AAMtE,IAAA,IAAI,CAAC5H,KAAK,CAACuF,WAAW,EAAE;AAEtB,MAAA,IAAI,CAACJ,IAAI,IAAI,CAACA,IAAI,CAACI,WAAW,EAAE;QAC9B,IAAI,CAACsC,WAAW,CAACZ,MAAM,EAAEjH,KAAK,EAAEmF,IAAI,CAAC;AACvC,MAAA,CAAC,MAEI;AACH,QAAA,MAAMS,MAAM,GAAGT,IAAI,CAAC2C,SAAS;QAC7B,IAAI,CAACD,WAAW,CAACZ,MAAM,EAAEjH,KAAK,EAAE4F,MAAM,CAAC;AACzC,MAAA;AACF,IAAA,CAAC,MAEI;MACH,MAAMmC,QAAmB,GAAG/H,KAAK;MACjC+H,QAAQ,CAAC3B,UAAU,GAAGa,MAAM;MAE5B,IAAI9B,IAAI,EAAEI,WAAW,EAAE;AAErBwC,QAAAA,QAAQ,CAACnB,UAAU,GAAGzB,IAAI,CAACoC,OAAO,GAAGpC,IAAI,CAACoC,OAAO,CAACO,SAAS,GAAG3C,IAAI,CAAC2C,SAAS;AAC9E,MAAA,CAAC,MAEI;QACHC,QAAQ,CAACnB,UAAU,GAAGzB,IAAI;AAC5B,MAAA;AACF,IAAA;AACF,EAAA;EAGA6C,kBAAkBA,CAAC3B,WAAgB,EAAE;AAEnC,IAAA,IAAI,CAACA,WAAW,IAAI,CAACA,WAAW,CAACd,WAAW,EAAE;AAC5C,MAAA,OAAOc,WAAW;AACpB,IAAA;IACA,IAAI4B,KAAK,GAAG5B,WAAW;IACvB,OAAO4B,KAAK,IAAI,IAAI,EAAE;MACpB,IAAIA,KAAK,CAACC,SAAS,EAAE;AACnB,QAAA,OAAOD,KAAK,CAACC,SAAS,CAAC5O,KAAK;AAC9B,MAAA;MACA2O,KAAK,GAAGA,KAAK,CAACE,MAAM;AACtB,IAAA;AACF,EAAA;EAOAtB,WAAWA,CAACV,GAAe,EAAE;IAC3B,MAAAhG,qBAAA,GAA0B,IAAI,CAACf,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;MAAAqC,sBAAA,GAAAxB,cAAA,CAAAuB,qBAAA,EAAA,CAAA,CAAA;AAA3C/B,MAAAA,QAAQ,GAAAgC,sBAAA,CAAA,CAAA,CAAA;AAAE9G,MAAAA,KAAK,GAAA8G,sBAAA,CAAA,CAAA,CAAA;AACtB,IAAA,IAAIqD,KAAU;IACd,IAAInK,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,MAAM,EAAE;AAC1D,MAAA,OAAO,IAAI,CAAC8O,eAAe,CAACjC,GAAG,CAAC;AAClC,IAAA,CAAC,MAAM,IAAI7M,KAAK,KAAK,KAAK,EAAE;AAC1B,MAAA,OAAO,IAAI,CAAC+O,cAAc,EAAE;IAC9B,CAAC,MAAM,IAAIjK,QAAQ,EAAE;AACnB,MAAA,MAAMkK,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;MAE3B,IAAInK,QAAQ,KAAK,QAAQ,EAAE;AAEzB,QAAA,IAAI,OAAO9E,KAAK,KAAK,UAAU,EAAE;UAC/BmK,KAAK,GAAG,IAAI,CAAC+E,8BAA8B,CAAClP,KAAK,EAAE6M,GAAG,CAAC;AACzD,QAAA,CAAC,MAEI;AACH,UAAA,MAAM,IAAI1Q,WAAW,CAAC,CAAA,gBAAA,EAAmB6D,KAAK,UAAU,CAAC;AAC3D,QAAA;AACF,MAAA,CAAC,MAOI;AACH,QAAA,MAAMmP,aAAa,GAAGC,OAAO,CAACC,GAAG,CAACL,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,EAAEvP,KAAK,CAAC;QACxD,MAAMwP,GAAG,GAAGR,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,CAACvP,KAAK,CAAC;AACjC,QAAA,IAAI,OAAOwP,GAAG,KAAK,UAAU,EAAE;UAC7BrF,KAAK,GAAG,IAAI,CAAC+E,8BAA8B,CAACM,GAAG,EAAE3C,GAAG,CAAC;AACvD,QAAA,CAAC,MAEI;AACH,UAAA,MAAM7K,GAAG,GAAGmN,aAAa,GAAGnP,KAAK,GAAG,IAAI,CAACyP,KAAK,CAACT,IAAI,EAAEhP,KAAK,CAAC;AAC3DmK,UAAAA,KAAK,GAAG,IAAI,CAACuF,UAAU,CAAC,MAAM,CAAC;AAC/B,UAAA,IAAI,CAACC,aAAa,CAACX,IAAI,EAAE7E,KAAK,EAAE,MAAM,EAAEnI,GAAG,EAAEmN,aAAa,EAAE,KAAK,CAAC;AACpE,QAAA;AACF,MAAA;AACF,IAAA,CAAC,MAAM;AACLhF,MAAAA,KAAK,GAAG,IAAI,CAACuF,UAAU,CAAC1P,KAAK,CAAC;AAChC,IAAA;AACA,IAAA,IAAI,CAAC8F,SAAS,CAAClF,SAAS,EAAE;AAC1B,IAAA,IAAI,CAACgP,UAAU,CAACzF,KAAK,CAAC;AACtB,IAAA,IAAI,CAAC0F,cAAc,CAAC1F,KAAK,CAAC;AAE1B,IAAA,IAAIA,KAAK,CAAC8B,WAAW,GAAGnQ,oBAAoB,EAAE;AAC5C,MAAA,IAAI,CAAC6T,aAAa,GAAG,IAAI,CAACG,iBAAiB;AAC3C,MAAA,IAAI,CAAChK,SAAS,GAAGqE,KAAK,CAACrE,SAAS;AAClC,IAAA;AACA,IAAA,OAAOqE,KAAK;AACd,EAAA;AAEA4E,EAAAA,cAAcA,GAAG;IACf,MAAMgB,MAAM,GAAG,IAAI,CAACjK,SAAS,CAAClF,SAAS,EAAE,CAACZ,KAAe;AACzD,IAAA,IAAI,CAAC8F,SAAS,CAAClF,SAAS,EAAE;IAC1B,MAAM6H,SAAS,GAAG,IAAI,CAAC3C,SAAS,CAAClF,SAAS,EAAE;IAC5C,MAAM8H,UAAU,GAAGD,SAAS,CAAC/H,IAAI,KAAKhG,SAAS,CAACQ,YAAY;AAC5D,IAAA,IAAI8U,OAAuC,GAAGvH,SAAS,CAACzI,KAAe;MACrEiQ,IAAc;AAChB,IAAA,IAAIvH,UAAU,EAAE;AACdsH,MAAAA,OAAO,GAAG,GAAG,GAAGA,OAAO,GAAG,GAAG;AAC7BC,MAAAA,IAAI,GAAGD,OAAO,CAACE,KAAK,CAACC,WAAW,CAAC;AACjC,MAAA,MAAMC,MAAM,GAAGH,IAAI,CAACnT,IAAI,CAAC,GAAG,CAAC;MAC7BkT,OAAO,GAAG,IAAIK,QAAQ,CAACL,OAAO,EAAE,CAAA,QAAA,EAAWI,MAAM,CAAA,EAAA,CAAI,CAAQ;AAC/D,IAAA;AACA,IAAA,IAAIE,SAAiB;MACnBC,MAAc;AACd1Q,MAAAA,IAAI,GAAG,IAAI,CAACiG,SAAS,CAAC/C,QAAQ,EAAE;IAClC,IAAIlD,IAAI,KAAK,GAAG,EAAE;AAChB,MAAA,IAAI,CAACiG,SAAS,CAAClF,SAAS,EAAE;MAC1B,IAAI,IAAI,CAACkF,SAAS,CAAC/C,QAAQ,EAAE,KAAK,IAAI,EAAEwN,MAAM,GAAG,IAAI,CAACzK,SAAS,CAACjD,KAAK,EAAE,CAAC7C,KAAe;IACzF,CAAC,MAAM,IAAIH,IAAI,KAAK,IAAI,EAAE,CACzB,MAEI;MACHyQ,SAAS,GAAG,IAAI,CAACxK,SAAS,CAAClF,SAAS,EAAE,CAACZ,KAAe;MACtD,IAAI,IAAI,CAAC8F,SAAS,CAAC/C,QAAQ,EAAE,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC+C,SAAS,CAAClF,SAAS,EAAE;QAC1B,IAAI,IAAI,CAACkF,SAAS,CAAC/C,QAAQ,EAAE,KAAK,IAAI,EAAEwN,MAAM,GAAG,IAAI,CAACzK,SAAS,CAACjD,KAAK,EAAE,CAAC7C,KAAe;AACzF,MAAA;AACF,IAAA;AAEA,IAAA,MAAMwQ,KAAK,GAAG,IAAI,CAAC3D,GAAG,CAACpC,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAAC2Q,iBAAiB,CAAC,EAAEzG,IAAI;AACzE,IAAA,MAAM8G,WAAW,GAAG,IAAI,CAACF,GAAG,CAACE,WAAW;AACxC,IAAA,MAAMkB,OAAgB,GAAG;MACvBhC,WAAW,EAAE7Q,QAAQ,CAACM,GAAG;AACzB2D,MAAAA,QAAQ,EAAE,IAAI,CAACyG,SAAS,CAACzG,QAAQ,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAChEyN,MAAAA,UAAU,EAAE,IAAI,CAACD,GAAG,CAACC,UAAU;MAC/BC,WAAW;AACXO,MAAAA,UAAU,EAAEP,WAAW,EAAEyB,SAAS,IAAIzB,WAAW;AACjDyB,MAAAA,SAAS,EAAE,IAAI;AACflD,MAAAA,GAAG,EAAE,IAAI;AACTmF,MAAAA,SAAS,EAAE,IAAI;MACfT,OAAO;MACPM,SAAS;AACTI,MAAAA,MAAM,EAAE,IAAI;AACZjK,MAAAA,QAAQ,EAAE,EAAE;AACZ4G,MAAAA,MAAM,EAAE,IAAI;MACZmD,KAAK;MACLP,IAAI;AACJ3S,MAAAA,CAAC,EAAE;KACJ;AACD,IAAA,IAAIiT,MAAM,EAAE;MACVtC,OAAO,CAACyC,MAAM,GAAG,IAAIL,QAAQ,CAAC,MAAM,EAAE,CAAA,mBAAA,EAAsBE,MAAM,CAAA,WAAA,CAAa,CAAQ;AACzF,IAAA;AACAI,IAAAA,MAAM,CAAC,MAAM,CAAC,GAAG1C,OAAO;AAExB,IAAA,MAAMe,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;IAE3B,MAAM2B,KAAK,GAAG5B,IAAI,CAACM,IAAI,CAACuB,IAAI,CAAC,CAACD,KAAK;AACnC,IAAA,MAAME,YAAY,GAAG1B,OAAO,CAACC,GAAG,CAACL,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,EAAEQ,MAAM,CAAC;IACxD,MAAMU,SAAS,GAAGK,YAAY,IAEzB9B,IAAI,CAACe,MAAM,CAAC,EAAEa,KAAK,CAACG,GAAG,CAAChB,MAAM,CAAC,IAEhC,IAAIiB,QAAQ,CAAC,IAAI,CAACvB,KAAK,CAACT,IAAI,EAAEe,MAAM,CAAC,CAAC;IAC1C9B,OAAO,CAACwC,SAAS,GAAGA,SAAS;IAE7BxC,OAAO,CAACO,SAAS,GAAG,IAAI,CAACN,iBAAiB,CAAC,WAAW,CAAC;AAGvD,IAAA,MAAA+C,iBAAA,GAA0DhD,OAAO,CAAC5O,QAAQ;MAAzD4R,iBAAA,CAAT5T,SAAS;MAAc4T,iBAAA,CAAZ7T,YAAY;AAAK8T,YAAAA,iBAAiB,GAAAC,wBAAA,CAAAF,iBAAA,EAAAG,SAAA;IAErD,IAAIC,aAAa,GAAG,IAAI;AACxBpD,IAAAA,OAAO,CAACZ,MAAM,GAAG,IAAIiE,MAAM,CAAC,MAAM;AAChC,MAAA,IAAIhG,GAAU,GAAGmF,SAAS,CAACM,GAAG,EAAE;AAEhCzF,MAAAA,GAAG,CAACgE,IAAI,CAACiC,QAAQ,CAAC;AAClB,MAAA,MAAMC,OAAO,GAAGtE,UAAU,EAAE;MAC5BE,UAAU,CAAC,IAAI,CAAC;MAEhBa,OAAO,CAAC3C,GAAG,GAAGA,GAAG,GAAGmG,KAAK,CAACnG,GAAG,CAAC;AAC9B,MAAA,MAAM7E,QAAQ,GAAGwH,OAAO,CAACxH,QAAQ;AAEjC,MAAA,IAAI4K,aAAa,EAAE;AACjB,QAAA,MAAM/P,GAAG,GAAGgK,GAAG,CAACzO,MAAM;AACtB,QAAA,KAAK,IAAIS,CAAC,GAAGgE,GAAG,EAAEhE,CAAC,EAAE,GAAI;UACvB,MAAMiE,IAAI,GAAG,IAAI,CAACmQ,aAAa,CAACzD,OAAO,EAAE3Q,CAAC,EAAE0R,IAAI,CAAC;UACjDzN,IAAI,CAACiN,SAAS,GAAG,IAAI,CAACN,iBAAiB,CAAC,gBAAgB,CAAC;UACzD3M,IAAI,CAAC+L,UAAU,GAAG,IAAI,CAACY,iBAAiB,CAAC,iBAAiB,CAAC;AAC3D3M,UAAAA,IAAI,CAACuL,UAAU,GAAGmB,OAAO,CAACnB,UAAU;AACpCrG,UAAAA,QAAQ,CAACnJ,CAAC,CAAC,GAAGiE,IAAI;AACpB,QAAA;AACA,QAAA,MAAMoQ,WAAW,GAAGlL,QAAQ,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAIkL,WAAW,EAAE;AACf,UAAA,IAAI,CAAC7L,SAAS,CAAClF,SAAS,EAAE;AAC1B,UAAA,IAAI,CAACkF,SAAS,CAAClF,SAAS,EAAE;AAC5B,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAACkF,SAAS,CAACpG,IAAI,EAAE;AACvB,QAAA;AACF,MAAA,CAAC,MAEI;AACH,QAAA,MAAMkS,MAAM,GAAGnL,QAAQ,CAAC5J,MAAM;AAC9B,QAAA,MAAMgV,MAAM,GAAGvG,GAAG,CAACzO,MAAM;QACzB,MAAMiV,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACJ,MAAM,EAAEC,MAAM,CAAC;QACvC,MAAMI,WAA0B,GAAG,EAAE;AACrC,QAAA,IAAI,CAAChE,OAAO,CAACyC,MAAM,EAAE;UAEnB,IAAImB,MAAM,GAAGD,MAAM,EAAE;AACnB,YAAA,KAAK,IAAItU,CAAC,GAAGsU,MAAM,GAAG,CAAC,EAAEtU,CAAC,IAAIuU,MAAM,EAAEvU,CAAC,EAAE,EAAE;AACzC,cAAA,IAAI,CAAC4U,aAAa,CAACzL,QAAQ,EAAEnJ,CAAC,CAAC;AACjC,YAAA;AACF,UAAA;UAEA,IAAIsU,MAAM,GAAGC,MAAM,EAAE;AACnB,YAAA,MAAMM,SAAS,GAAG1L,QAAQ,CAAC0E,EAAE,CAAC,EAAE,CAAC,EAAEqD,SAAS,IAAIP,OAAO,CAACX,UAAU;AAClE,YAAA,KAAK,IAAIhQ,CAAC,GAAGuU,MAAM,GAAG,CAAC,EAAEvU,CAAC,IAAIsU,MAAM,EAAEtU,CAAC,EAAE,EAAE;AACzC,cAAA,IAAI,CAAC8U,aAAa,CAACnE,OAAO,EAAE3Q,CAAC,EAAE0R,IAAI,EAAEiD,WAAW,EAAEE,SAAS,EAAEjB,iBAAiB,CAAC;AACjF,YAAA;AACF,UAAA;AACA,UAAA,KAAK,IAAI5T,CAAC,GAAGwU,MAAM,EAAExU,CAAC,EAAE,GAAI;AAC1B,YAAA,MAAMoJ,KAAK,GAAGD,QAAQ,CAACnJ,CAAC,CAAC;AACzB2U,YAAAA,WAAW,CAAC3U,CAAC,CAAC,GAAGoJ,KAAK;AACtB,YAAA,IAAI,CAAC2L,YAAY,CAAC3L,KAAK,EAAE4E,GAAG,CAAChO,CAAC,CAAC,EAAE0S,OAAO,EAAE1S,CAAC,EAAEgT,SAAS,CAAC;AACzD,UAAA;AACF,QAAA,CAAC,MAEI;UACH,IAAIgC,CAAC,GAAG,CAAC;YACPC,EAAE,GAAGX,MAAM,GAAG,CAAC;YACfY,EAAE,GAAGX,MAAM,GAAG,CAAC;AAEjB,UAAA,OAAOS,CAAC,IAAIC,EAAE,IAAID,CAAC,IAAIE,EAAE,EAAE;AACzB,YAAA,MAAM9L,KAAK,GAAGD,QAAQ,CAAC6L,CAAC,CAAC;AACzB,YAAA,MAAMG,GAAG,GAAG/L,KAAK,CAACkC,GAAG;YACrB,MAAM8J,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC1E,OAAO,EAAEqE,CAAC,EAAEtD,IAAI,CAAC;AACnD,YAAA,MAAMpG,GAAG,GAAGqF,OAAO,CAACyC,MAAM,CAACgC,QAAQ,CAAC;YACpC,IAAID,GAAG,KAAK7J,GAAG,EAAE;AACfqJ,cAAAA,WAAW,CAACK,CAAC,CAAC,GAAG5L,KAAK;AACtB,cAAA,IAAI,CAAC2L,YAAY,CAAC3L,KAAK,EAAE4E,GAAG,CAACgH,CAAC,CAAC,EAAEtC,OAAO,EAAEsC,CAAC,EAAEhC,SAAS,CAAC;AACvDgC,cAAAA,CAAC,EAAE;AACL,YAAA,CAAC,MAAM;AACL,cAAA;AACF,YAAA;AACF,UAAA;AAEA,UAAA,OAAOA,CAAC,IAAIC,EAAE,IAAID,CAAC,IAAIE,EAAE,EAAE;AACzB,YAAA,MAAM9L,KAAK,GAAGD,QAAQ,CAAC8L,EAAE,CAAC;AAC1B,YAAA,MAAME,GAAG,GAAG/L,KAAK,CAACkC,GAAG;YACrB,MAAM8J,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC1E,OAAO,EAAEuE,EAAE,EAAExD,IAAI,CAAC;AACpD,YAAA,MAAMpG,GAAG,GAAGqF,OAAO,CAACyC,MAAM,CAACgC,QAAQ,CAAC;YACpC,IAAID,GAAG,KAAK7J,GAAG,EAAE;AACfqJ,cAAAA,WAAW,CAACO,EAAE,CAAC,GAAG9L,KAAK;AACvB,cAAA,IAAI,CAAC2L,YAAY,CAAC3L,KAAK,EAAE4E,GAAG,CAACkH,EAAE,CAAC,EAAExC,OAAO,EAAEwC,EAAE,EAAElC,SAAS,CAAC;AACzDiC,cAAAA,EAAE,EAAE;AACJC,cAAAA,EAAE,EAAE;AACN,YAAA,CAAC,MAAM;AACL,cAAA;AACF,YAAA;AACF,UAAA;UAEA,IAAIF,CAAC,GAAGC,EAAE,EAAE;YACV,IAAID,CAAC,IAAIE,EAAE,EAAE;cAGX,MAAMI,WAAW,GAAGN,CAAC,GAAG,CAAC,GAAG7L,QAAQ,CAAC6L,CAAC,GAAG,CAAC,CAAC,EAAE9D,SAAS,IAAIP,OAAO,CAACX,UAAU,GAAGW,OAAO,CAACX,UAAU;cACjG,KAAK,IAAIhQ,CAAC,GAAGkV,EAAE,EAAElV,CAAC,IAAIgV,CAAC,EAAEhV,CAAC,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC8U,aAAa,CAACnE,OAAO,EAAE3Q,CAAC,EAAE0R,IAAI,EAAEiD,WAAW,EAAEW,WAAW,EAAE1B,iBAAiB,CAAC;AACnF,cAAA;AACF,YAAA;AACF,UAAA,CAAC,MAEI,IAAIoB,CAAC,GAAGE,EAAE,EAAE;YACf,IAAIF,CAAC,IAAIC,EAAE,EAAE;cACX,KAAK,IAAIjV,CAAC,GAAGiV,EAAE,EAAEjV,CAAC,IAAIgV,CAAC,EAAEhV,CAAC,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC4U,aAAa,CAACzL,QAAQ,EAAEnJ,CAAC,CAAC;AACjC,cAAA;AACF,YAAA;AACF,UAAA,CAAC,MAEI;YACH,IAAIuV,EAAE,GAAGP,CAAC;AACRQ,cAAAA,EAAE,GAAGR,CAAC;AACR,YAAA,MAAMS,MAAM,GAAGP,EAAE,GAAGM,EAAE,GAAG,CAAC;AAE1B,YAAA,MAAME,OAAO,GAAG,IAAIC,GAAG,EAAe;YACtC,KAAK,IAAI3V,CAAC,GAAGwV,EAAE,EAAExV,CAAC,IAAIkV,EAAE,EAAElV,CAAC,EAAE,EAAE;cAE7B,MAAMoV,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC1E,OAAO,EAAE3Q,CAAC,EAAE0R,IAAI,CAAC;AACnD,cAAA,MAAMpG,GAAG,GAAGqF,OAAO,CAACyC,MAAM,CAACgC,QAAQ,CAAC;AACpCM,cAAAA,OAAO,CAACE,GAAG,CAACtK,GAAG,EAAEtL,CAAC,CAAC;AACrB,YAAA;YAEA,IAAI6V,UAAU,GAAG,EAAE;YACnB,IAAIC,OAAO,GAAG,KAAK;AACnB,YAAA,MAAMC,QAAQ,GAAG,IAAI1W,KAAK,CAASoW,MAAM,CAAC,CAACO,IAAI,CAAC,EAAE,CAAC;YACnD,KAAK,IAAIhW,CAAC,GAAGuV,EAAE,EAAEvV,CAAC,IAAIiV,EAAE,EAAEjV,CAAC,EAAE,EAAE;AAC7B,cAAA,MAAMsL,GAAG,GAAGnC,QAAQ,CAACnJ,CAAC,CAAC,CAACsL,GAAG;AAC3B,cAAA,MAAM2K,IAAI,GAAGP,OAAO,CAACjC,GAAG,CAACnI,GAAG,CAAC;cAE7B,IAAI2K,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAACrB,aAAa,CAACzL,QAAQ,EAAEnJ,CAAC,CAAC;AAC/B,gBAAA;AACF,cAAA;AACA,cAAA,MAAMoJ,KAAK,GAAGD,QAAQ,CAACnJ,CAAC,CAAC;AAEzB2U,cAAAA,WAAW,CAACsB,IAAI,CAAC,GAAG7M,KAAK;AACzB,cAAA,IAAI,CAAC2L,YAAY,CAAC3L,KAAK,EAAE4E,GAAG,CAACiI,IAAI,CAAC,EAAEvD,OAAO,EAAEuD,IAAI,EAAEjD,SAAS,CAAC;AAC7D+C,cAAAA,QAAQ,CAACE,IAAI,GAAGT,EAAE,CAAC,GAAGxV,CAAC;AAEvB0V,cAAAA,OAAO,CAACQ,MAAM,CAAC5K,GAAG,CAAC;cAEnB,IAAI2K,IAAI,GAAGJ,UAAU,EAAE;AACrBC,gBAAAA,OAAO,GAAG,IAAI;AAChB,cAAA,CAAC,MAAM;AACLD,gBAAAA,UAAU,GAAGI,IAAI;AACnB,cAAA;AACF,YAAA;YAEA,IAAI,CAACH,OAAO,EAAE;AAEZJ,cAAAA,OAAO,CAACS,OAAO,CAAC,CAACnW,CAAC,EAAEsL,GAAG,KAAK;AAC1B,gBAAA,MAAM0D,MAAM,GAAGhP,CAAC,KAAK,CAAC,GAAG2Q,OAAO,CAACX,UAAU,GAAG2E,WAAW,CAAC3U,CAAC,GAAG,CAAC,CAAC,CAACkR,SAAS;AAC1E,gBAAA,IAAI,CAAC4D,aAAa,CAACnE,OAAO,EAAE3Q,CAAC,EAAE0R,IAAI,EAAEiD,WAAW,EAAE3F,MAAM,EAAE4E,iBAAiB,CAAC;AAC9E,cAAA,CAAC,CAAC;AACJ,YAAA,CAAC,MAAM;AAEL,cAAA,MAAMwC,IAAI,GAAGrI,MAAM,CAACgI,QAAQ,CAAC;gBAC3BM,MAAM,GAAGD,IAAI,CAAC7W,MAAM;cAEtB,IAAI+W,EAAU,EAEZC,EAAU;AAEZ,cAAA,KAAKD,EAAE,GAAGd,EAAE,EAAEe,EAAE,GAAG,CAAC,EAAED,EAAE,IAAIpB,EAAE,EAAEoB,EAAE,EAAE,EAAE;AACpC,gBAAA,MAAME,IAAI,GAAGT,QAAQ,CAACO,EAAE,CAAC;AAEzB,gBAAA,IAAIE,IAAI,KAAK,EAAE,EAAE;AACf,kBAAA,MAAMxH,MAAM,GAAGsH,EAAE,KAAK,CAAC,GAAG3F,OAAO,CAACX,UAAU,GAAG2E,WAAW,CAAC2B,EAAE,GAAG,CAAC,CAAC,CAACpF,SAAS;AAC5E,kBAAA,IAAI,CAAC4D,aAAa,CAACnE,OAAO,EAAE2F,EAAE,EAAE5E,IAAI,EAAEiD,WAAW,EAAE3F,MAAM,EAAE4E,iBAAiB,CAAC;AAC7E,kBAAA;AACF,gBAAA;AAGA,gBAAA,MAAM6C,SAAS,GAAGL,IAAI,CAACG,EAAE,CAAC,GAAGf,EAAE;gBAE/B,IAAIc,EAAE,KAAKG,SAAS,EAAE;AACpBF,kBAAAA,EAAE,IAAIF,MAAM,IAAIE,EAAE,EAAE;AACpB,kBAAA;AACF,gBAAA;AAGA,gBAAA,IAAIvH,MAAM,GAAGsH,EAAE,KAAK,CAAC,GAAG3F,OAAO,CAACX,UAAU,GAAG2E,WAAW,CAAC2B,EAAE,GAAG,CAAC,CAAC,CAACpF,SAAS;AAC1E,gBAAA,MAAM9H,KAAK,GAAGuL,WAAW,CAAC2B,EAAE,CAAC;AAE7B,gBAAA,MAAQtG,UAAU,GAA4B5G,KAAK,CAA3C4G,UAAU;kBAAEkB,SAAS,GAAiB9H,KAAK,CAA/B8H,SAAS;kBAAE1B,UAAU,GAAKpG,KAAK,CAApBoG,UAAU;gBAEzC,IAAI6B,KAAK,GAAGrB,UAAU;kBACpBlP,IAAS;gBACX,GAAG;AACDA,kBAAAA,IAAI,GAAG,IAAI,CAAC4V,OAAO,CAACrF,KAAK,CAAC;kBAC1B,IAAI,CAACJ,WAAW,CAACzB,UAAU,EAAE6B,KAAK,EAAErC,MAAM,CAAC;AAE3CA,kBAAAA,MAAM,GAAGqC,KAAK;kBACd,IAAIA,KAAK,KAAKH,SAAS,EAAE;AACzBG,kBAAAA,KAAK,GAAGvQ,IAAI;AACd,gBAAA,CAAC,QAAQ,IAAI;AACf,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;QACA6P,OAAO,CAACxH,QAAQ,GAAGwL,WAAW;AAChC,MAAA;AACAZ,MAAAA,aAAa,GAAG,KAAK;MACrBjE,UAAU,CAACoE,OAAO,CAAC;AAEnB,MAAA,OAAOyC,SAAS,IAAI;AAClB,QAAA,IAAIA,SAAS,EAAE;AACb,UAAA,KAAK,IAAI3W,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2Q,OAAO,CAACxH,QAAQ,CAAC5J,MAAM,EAAES,CAAC,EAAE,EAAE;AAChD,YAAA,MAAMiE,IAAI,GAAG0M,OAAO,CAACxH,QAAQ,CAACnJ,CAAC,CAAC;AAChCiE,YAAAA,IAAI,CAAC8L,MAAM,CAAC6G,OAAO,EAAE;AACvB,UAAA;AACF,QAAA;MACF,CAAC;AACH,IAAA,CAAC,CAAC;AACF,IAAA,OAAOjG,OAAO,CAACxH,QAAQ,CAAC,CAAC,CAAC,IAAIwH,OAAO;AACvC,EAAA;AAEAmE,EAAAA,aAAaA,CACXnE,OAAgB,EAChB3Q,CAAS,EACT6W,UAAe,EACflC,WAA0B,EAC1B3F,MAAW,EACX4E,iBAAsB,EACtB;IACA,MAAM3P,IAAI,GAAG,IAAI,CAACmQ,aAAa,CAACzD,OAAO,EAAE3Q,CAAC,EAAE6W,UAAU,CAAC;AACvDlC,IAAAA,WAAW,CAAC3U,CAAC,CAAC,GAAGiE,IAAI;AACrB,IAAA,IAAIiN,SAAS,GAAG,IAAI,CAACH,YAAY,CAAC,gBAAgB,CAAC;IACnD,IAAI,CAAClB,YAAY,CAACc,OAAO,CAACnB,UAAU,EAAE0B,SAAS,EAAElC,MAAM,CAAC;AAExD,IAAA,IAAIgB,UAAU,GAAG,IAAI,CAACe,YAAY,CAAC,iBAAiB,CAAC;IACrD,IAAI,CAAClB,YAAY,CAACc,OAAO,CAACnB,UAAU,EAAEQ,UAAU,EAAEhB,MAAM,CAAC;IAEzD/K,IAAI,CAAC+L,UAAU,GAAGA,UAAU;IAC5B/L,IAAI,CAACiN,SAAS,GAAGA,SAAS;AAE1B,IAAA,IAAI,CAAC1I,SAAS,GAAGmI,OAAO,CAACuC,KAAK,CAAC1K,SAAS;AAIxC,IAAA,IAAI,CAACA,SAAS,CAAC/G,MAAM,CAACmS,iBAAiB,CAAC;AAExC,IAAA,IAAI,CAACpL,SAAS,CAAC7H,cAAc,GAAG,KAAK;AACrCmW,IAAAA,cAAc,CAAC,MAAM;AACnB,MAAA,IAAI,CAACjI,OAAO,CAAC8B,OAAO,CAACnB,UAAU,EAAEmB,OAAO,CAACuC,KAAK,EAAElD,UAAU,EAAE/L,IAAI,CAAC;AACnE,IAAA,CAAC,EAAEA,IAAI,CAAC8L,MAAM,CAAC;AACjB,EAAA;AAEA6E,EAAAA,aAAaA,CAACzL,QAAuB,EAAEnJ,CAAS,EAAE;AAChD,IAAA,MAAMoJ,KAAK,GAAGD,QAAQ,CAACnJ,CAAC,CAAC;AACzB,IAAA,IAAI,CAAC+W,eAAe,CAAC3N,KAAK,CAAC;AAC3B,IAAA,IAAI,CAAC4N,MAAM,CAAC5N,KAAK,CAAC4G,UAAU,CAAC;AAC7B,IAAA,IAAI,CAACgH,MAAM,CAAC5N,KAAK,CAAC8H,SAAS,CAAC;AAE5B9H,IAAAA,KAAK,CAAC2G,MAAM,CAAC6G,OAAO,EAAE;AACxB,EAAA;EAEA7B,YAAYA,CAAC3L,KAAkB,EAAEsI,IAAS,EAAEgB,OAAuC,EAAE1S,CAAS,EAAEgT,SAAkB,EAAE;AAClH,IAAA,IAAI,OAAON,OAAO,KAAK,QAAQ,EAAE;AAC/BtJ,MAAAA,KAAK,CAACsI,IAAI,CAACgB,OAAO,CAAC,GAAGhB,IAAI;AAC1B,MAAA,IAAIsB,SAAS,EAAE;AACb5J,QAAAA,KAAK,CAACsI,IAAI,CAACsB,SAAS,CAAC,GAAGhT,CAAC;AAC3B,MAAA;AACF,IAAA,CAAC,MAAM;MACLgT,SAAS,GAAGA,SAAS,IAAIxE,SAAS;AAClCpF,MAAAA,KAAK,CAACsI,IAAI,CAACsB,SAAS,CAAC,GAAGhT,CAAC;AAC3B,IAAA;AACF,EAAA;AAEAiX,EAAAA,SAAS,GAAG,CAAC;AACb7C,EAAAA,aAAaA,CAACzD,OAAgB,EAAE3Q,CAAS,EAAE6W,UAAe,EAAE;AAC1D,IAAA,IAAIK,WAAwB;AAC5B,IAAA,IAAIxF,IAAsB;IAsB1B,MAAMyF,KAAK,GAAG,IAAIC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjCD,KAAK,CAACA,KAAK,GAAG,IAAI;AAClBL,IAAAA,cAAc,CAAC,MAAM;MACnBK,KAAK,CAAC1D,GAAG,EAAE;IACb,CAAC,EAAE,IAAI,CAAC;IAGR/B,IAAI,GAAG,IAAI,CAAC2D,WAAW,CAAC1E,OAAO,EAAE3Q,CAAC,EAAE6W,UAAU,CAAC;AAC/CK,IAAAA,WAAW,GAAG;AACZG,MAAAA,EAAE,EAAE,IAAI,CAACJ,SAAS,EAAE;MACpBtI,WAAW,EAAE7Q,QAAQ,CAACO,OAAO;AAC7BmR,MAAAA,UAAU,EAAE,IAAI;AAChBQ,MAAAA,UAAU,EAAE,IAAI;AAChBkB,MAAAA,SAAS,EAAE,IAAI;MACfP,OAAO;AACPrF,MAAAA,GAAG,EAAEqF,OAAO,CAACyC,MAAM,GAAG1B,IAAI,CAAC;AAC3B3B,MAAAA,MAAM,EAAE,IAAI;AACZ2B,MAAAA;KACD;IACDwF,WAAW,CAACnH,MAAM,GAAGoH,KAAK;AAC1B,IAAA,OAAOD,WAAW;AACpB,EAAA;AAEA7B,EAAAA,WAAWA,CAAC1E,OAAgB,EAAE3Q,CAAS,EAAE6W,UAAe,EAAE;AACxD,IAAA,MAAQ7I,GAAG,GAAuC2C,OAAO,CAAjD3C,GAAG;MAAE0E,OAAO,GAA8B/B,OAAO,CAA5C+B,OAAO;MAAEC,IAAI,GAAwBhC,OAAO,CAAnCgC,IAAI;MAAEQ,SAAS,GAAaxC,OAAO,CAA7BwC,SAAS;MAAEC,MAAM,GAAKzC,OAAO,CAAlByC,MAAM;AAC7C,IAAA,IAAIJ,SAAS,GAAGrC,OAAO,CAACqC,SAAS;AACjC,IAAA,IAAItB,IAAsB;AAC1B,IAAA,IAAI,OAAOgB,OAAO,KAAK,QAAQ,EAAE;AAC/BhB,MAAAA,IAAI,GAAG4F,UAAU,CACftE,SAAS,GACL;AACE,QAAA,CAACN,OAAO,GAAG1E,GAAG,CAAChO,CAAC,CAAC;AACjB,QAAA,CAACgT,SAAS,GAAGhT;AACf,OAAC,GACD;AACE,QAAA,CAAC0S,OAAO,GAAG1E,GAAG,CAAChO,CAAC;AAClB,OAAC,EACL4P,UAAU,EACZ,CAAC;AACH,IAAA,CAAC,MAAM;MACLoD,SAAS,GAAGA,SAAS,IAAIxE,SAAS;AAClC,MAAA,MAAM+I,OAAO,GAAG;AAAE,QAAA,CAACvE,SAAS,GAAGhT;OAAG;MAClC0R,IAAI,GAAG4F,UAAU,CAACC,OAAO,EAAE3H,UAAU,EAAE,CAAC;MACxC,MAAM4H,YAAY,GAAG,IAAI9D,QAAQ,CAAC,MAAMhB,OAAO,CAACS,SAAS,CAACM,GAAG,EAAE,CAACL,MAAM,GAAG1B,IAAI,CAACsB,SAAS,CAAC,GAAGhT,CAAC,CAAC,CAAC,CAAC;MAC/F,MAAMsT,KAAK,GAAG5B,IAAI,CAACM,IAAI,CAACuB,IAAI,CAAC,CAACD,KAAK;AACnC,MAAA,KAAK,IAAItT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2S,IAAI,CAACpT,MAAM,EAAES,CAAC,EAAE,EAAE;AACpC,QAAA,MAAMiK,IAAI,GAAG0I,IAAI,CAAC3S,CAAC,CAAC;AACpBuX,QAAAA,OAAO,CAACtN,IAAI,CAAC,GAAGrI,SAAS;AACzB0R,QAAAA,KAAK,CAACsC,GAAG,CAAC3L,IAAI,EAAE,IAAIyJ,QAAQ,CAAC,MAAM8D,YAAY,CAAC/D,GAAG,EAAE,CAACxJ,IAAI,CAAC,CAAC,CAAC;AAC/D,MAAA;AACF,IAAA;AAEApI,IAAAA,MAAM,CAAC4V,cAAc,CAAC/F,IAAI,EAAEmF,UAAU,CAAC;AACvC,IAAA,OAAOnF,IAAI;AACb,EAAA;AAEAC,EAAAA,OAAOA,GAAG;AACR,IAAA,MAAA+F,qBAAA,GAAiB,IAAI,CAACnI,GAAG,CAACpC,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAAC0Q,WAAW,CAAC;MAAxDxG,IAAI,GAAA+O,qBAAA,CAAJ/O,IAAI;IACZ,OAAOA,IAAI,CAAC+I,IAAI;AAClB,EAAA;AAUAW,EAAAA,aAAaA,CACXX,IAAW,EACX/I,IAAS,EACT2C,GAAW,EACX5I,KAAU,EACVmP,aAAsB,EACtB8F,IAAa,EACbzQ,KAAc,EACd;AACA,IAAA,IAAIyQ,IAAI,EAAE;MACR,IAAI,CAACC,OAAO,CAACjP,IAAI,EAAE2C,GAAG,EAAE5I,KAAK,EAAEwE,KAAK,CAAC;AACvC,IAAA,CAAC,MAAM,IAAI,OAAOxE,KAAK,KAAK,UAAU,EAAE;MACtC,IAAIsR,MAAM,CAAC,MAAM;AACf,QAAA,MAAMvM,GAAG,GAAG/E,KAAK,EAAE;QACnB,IAAI,CAACkV,OAAO,CAACjP,IAAI,EAAE2C,GAAG,EAAE7D,GAAG,EAAEP,KAAK,CAAC;AACrC,MAAA,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI2K,aAAa,EAAE;MACxB,IAAImC,MAAM,CAAC,MAAM;AACf,QAAA,MAAMvM,GAAG,GAAGiK,IAAI,CAAChP,KAAK,CAAC;QACvB,IAAI,CAACkV,OAAO,CAACjP,IAAI,EAAE2C,GAAG,EAAE7D,GAAG,EAAEP,KAAK,CAAC;AACrC,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,MAEI;MACH,IAAI,CAAC0Q,OAAO,CAACjP,IAAI,EAAE2C,GAAG,EAAE5I,KAAK,EAAEwE,KAAK,CAAC;AACvC,IAAA;AACF,EAAA;EAEAsL,iBAAiB,GAAiC,IAAI,CAACH,aAAa,CAACwF,IAAI,CAAC,IAAI,CAAC;AAE/EjG,EAAAA,8BAA8BA,CAACkG,iBAAwC,EAAEvI,GAAe,EAAE;AAGxF,IAAA,IAAIjR,SAAuB,EAAEyZ,MAAc,EAAE3O,KAAU;AAEvD,IAAA,MAAM4O,IAAI,GAAIF,iBAAiB,CAASG,SAAS,YAAYC,KAAK;AAClE,IAAA,IAAIF,IAAI,EAAE;AACR1Z,MAAAA,SAAS,GAAGwZ,iBAAwB;AACpC1O,MAAAA,KAAK,GAAG9K,SAAS,CAAC6Z,GAAG,EAAE;AACzB,IAAA,CAAC,MAAM;AACLJ,MAAAA,MAAM,GAAGD,iBAA2B;AACpC,MAAA,MAAMM,UAAU,GAAGL,MAAM,CAACK,UAAU;MAEpChP,KAAK,GAAGkO,UAAU,CAAC,EAAE,EAAE1H,UAAU,EAAE,EAAE,IAAI,CAAC;AAC1C/N,MAAAA,MAAM,CAAC4V,cAAc,CAACrO,KAAK,EAAEgP,UAAU,CAAC;AAC1C,IAAA;AAEA,IAAA,MAAMzP,IAAmB,GAAG;MAC1BgG,WAAW,EAAEqJ,IAAI,GAAGla,QAAQ,CAACQ,SAAS,GAAGR,QAAQ,CAACS,QAAQ;MAC1DiR,UAAU,EAAED,GAAG,CAACC,UAAU;AAC1BQ,MAAAA,UAAU,EAAE,IAAI;AAChBkB,MAAAA,SAAS,EAAE,IAAI;AACfQ,MAAAA,IAAI,EAAEtI,KAAK;AACXZ,MAAAA,SAAS,EAAEuP,MAAM,GAAGA,MAAM,CAAC,IAAI,CAAC,GAAI3O,KAAK,CAAC,IAAI,CAAC,CAAY,IAAI;KAChE;AACD,IAAA,IAAI,CAACiJ,aAAa,GAAG,CAACX,IAAI,EAAE2G,CAAC,EAAE/M,GAAG,EAAE5I,KAAK,EAAEmP,aAAa,EAAE8F,IAAI,EAAEzQ,KAAK,KAAK;AACxE,MAAA,IAAIyQ,IAAI,EAAE;QACRvO,KAAK,CAAC4I,IAAI,CAACC,GAAG,CAAC,CAAC3G,GAAG,CAAC,GAAG5I,KAAK;MAC9B,CAAC,MAEI,IAAImP,aAAa,EAAE;QACtByG,WAAW,CAAC5G,IAAI,EAAEhP,KAAK,EAAE0G,KAAK,EAAEkC,GAAG,CAAC;AACtC,MAAA,CAAC,MAEI;AACH,QAAA,MAAMiN,IAAI,GAAGnP,KAAK,CAAC4I,IAAI,CAACuB,IAAI,CAAC;AAC7B,QAAA,MAAMD,KAA0B,GAAGiF,IAAI,CAACjF,KAAK;AAC7C,QAAA,IAAI,OAAO5Q,KAAK,KAAK,UAAU,EAAE;AAC/B,UAAA,MAAM8V,QAAQ,GAAG,IAAI9E,QAAQ,CAAChR,KAAK,CAAC;AACpC4Q,UAAAA,KAAK,CAACsC,GAAG,CAACtK,GAAG,EAAEkN,QAAe,CAAC;UAC/BpP,KAAK,CAAC4I,IAAI,CAACC,GAAG,CAAC,CAAC3G,GAAG,CAAC,GAAG1J,SAAS;AAClC,QAAA,CAAC,MAEI;AACH0R,UAAAA,KAAK,CAACsC,GAAG,CAACtK,GAAG,EAAE;YAAEmI,GAAG,EAAEA,MAAM/Q;AAAM,WAAW,CAAC;UAC9C0G,KAAK,CAAC4I,IAAI,CAACC,GAAG,CAAC,CAAC3G,GAAG,CAAC,GAAG5I,KAAK;AAC9B,QAAA;AACF,MAAA;IACF,CAAC;IACDiG,IAAI,CAACuI,SAAS,GAAG,IAAI,CAACN,iBAAiB,CAAC,iBAAiB,CAAC;AAC1D,IAAA,OAAOjI,IAAI;AACb,EAAA;AACAwJ,EAAAA,KAAKA,CAACT,IAAS,EAAE+G,UAA2B,EAAE;AAC5C,IAAA,OAAO,IAAI1F,QAAQ,CAAC,MAAM,EAAE,CAAA,mBAAA,EAAsB0F,UAAU,CAAA,WAAA,CAAa,CAAC,CAACZ,IAAI,CAACjW,SAAS,EAAE8P,IAAI,CAAC;AAClG,EAAA;EAEAF,eAAeA,CAACjC,GAAe,EAAE;AAC/B,IAAA,MAAQE,WAAW,GAAKF,GAAG,CAAnBE,WAAW;AACnB,IAAA,MAAMiJ,OAAO,GAAG,IAAI,CAAClQ,SAAS,CAAC7G,KAAK;IACpC,MAAMgX,QAAQ,GAAG,IAAI,CAACnQ,SAAS,CAACpD,OAAO,EAAE;AACzC,IAAA,MAAM1C,KAAK,GAAGiW,QAAQ,CAACjW,KAAwB;AAC/C,IAAA,MAAMkW,MAAM,GAAGF,OAAO,CAAChW,KAAK,KAAK,MAAM;AACvC,IAAA,MAAMmW,IAAI,GAAGH,OAAO,CAAChW,KAAK,KAAK,IAAI;AACnC,IAAA,MAAMoW,SAAS,GAAGrJ,WAAW,EAAEd,WAAW,GAAG5Q,OAAO;AACpD,IAAA,MAAM2T,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;AAE3B,IAAA,MAAMoH,MAAM,GAAGrW,KAAK,KAAK,IAAI;AAC7B,IAAA,MAAMmP,aAAa,GAAG,CAACkH,MAAM,IAAIjH,OAAO,CAACC,GAAG,CAACL,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,EAAEvP,KAAK,CAAC;AACnE,IAAA,MAAMwQ,KAAK,GAAG3D,GAAG,CAACpC,KAAK,CAACO,UAAU,CAACjP,QAAQ,CAAC2Q,iBAAiB,CAAC,EAAEzG,IAAI;AACpE,IAAA,MAAMqQ,MAAc,GAAG;AACrBrK,MAAAA,WAAW,EAAEiK,MAAM,GAAG9a,QAAQ,CAACI,IAAI,GAAG2a,IAAI,GAAG/a,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI;AAExE8D,MAAAA,QAAQ,EAAE,IAAI,CAACyG,SAAS,CAACzG,QAAQ,EAAE;AACnCyN,MAAAA,UAAU,EAAE,IAAI;AAChBQ,MAAAA,UAAU,EAAE,IAAI;AAChBkB,MAAAA,SAAS,EAAE,IAAI;AACftG,MAAAA,SAAS,EAAE,IAAI;AACfqO,MAAAA,OAAO,EAAEH,SAAS,GAAGrJ,WAAW,GAAG,IAAI;AACvCsE,MAAAA,aAAa,EAAE,IAAI;AACnBhE,MAAAA,MAAM,EAAE,IAAI;MACZmD,KAAK;AACLxB,MAAAA;KACD;AACD,IAAA,IAAIwH,MAAkB;IAEtB,QAAQR,OAAO,CAAChW,KAAK;AACnB,MAAA,KAAK,IAAI;AACP,QAAA,IAAImP,aAAa,EAAE;UAEjBiF,cAAc,CAAC,MAAMpF,IAAI,CAAChP,KAAK,CAAC,EAAE,IAAI,CAAC;UAEvC,MAAQ4Q,KAAK,GAAK5B,IAAI,CAACM,IAAI,CAACuB,IAAI,CAAC,CAAzBD,KAAK;AACb4F,UAAAA,MAAM,GAAG5F,KAAK,CAACG,GAAG,CAAC/Q,KAAK,CAAC;AAC3B,QAAA,CAAC,MAAM;UACL,MAAMyW,EAAE,GAAG,IAAI,CAAChH,KAAK,CAACT,IAAI,EAAEhP,KAAK,CAAC;AAElCwW,UAAAA,MAAM,GAAG,IAAIxF,QAAQ,CAACyF,EAAE,CAAC;AAC3B,QAAA;AACA,QAAA;AACF,MAAA,KAAK,MAAM;AAET,QAAA,IAAIJ,MAAM,EAAE;AACVG,UAAAA,MAAM,GAAG,IAAIxF,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAIrC,KAAK,GAAG2H,MAAM,CAACC,OAAO;AAC1B,YAAA,OAAO5H,KAAK,EAAE;AACZ,cAAA,IAAIA,KAAK,CAACzG,SAAS,CAAC6I,GAAG,EAAE,EAAE;AACzB,gBAAA,OAAO,KAAK;AACd,cAAA;AAEA,cAAA,IAAIpC,KAAK,CAAC1C,WAAW,KAAK7Q,QAAQ,CAACE,EAAE,EAAE;AACrC,gBAAA;AACF,cAAA;cACAqT,KAAK,GAAGA,KAAK,CAAC4H,OAAO;AACvB,YAAA;AACA,YAAA,OAAO,IAAI;AACb,UAAA,CAAC,CAAC;AACJ,QAAA,CAAC,MAEI;AACH,UAAA,MAAME,EAAE,GAAGtH,aAAa,GAAG,IAAI,GAAG,IAAI,CAACM,KAAK,CAACT,IAAI,EAAEhP,KAAK,CAAC;AACzDwW,UAAAA,MAAM,GAAG,IAAIxF,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAIrC,KAAK,GAAG2H,MAAM,CAACC,OAAO;AAC1B,YAAA,OAAO5H,KAAK,EAAE;AACZ,cAAA,IAAIA,KAAK,CAACzG,SAAS,CAAC6I,GAAG,EAAE,EAAE;AACzB,gBAAA,OAAO,KAAK;AACd,cAAA;AAEA,cAAA,IAAIpC,KAAK,CAAC1C,WAAW,KAAK7Q,QAAQ,CAACE,EAAE,EAAE;AACrC,gBAAA;AACF,cAAA;cACAqT,KAAK,GAAGA,KAAK,CAAC4H,OAAO;AACvB,YAAA;YACA,OAAOpH,aAAa,GAAGH,IAAI,CAAChP,KAAK,CAAC,GAAGyW,EAAE,EAAE;AAC3C,UAAA,CAAC,CAAC;AACJ,QAAA;AACA,QAAA;AACF,MAAA,KAAK,MAAM;AACTD,QAAAA,MAAM,GAAG,IAAIxF,QAAQ,CAAC,MAAM;AAC1B,UAAA,IAAIrC,KAAK,GAAG2H,MAAM,CAACC,OAAO;AAC1B,UAAA,OAAO5H,KAAK,EAAE;AACZ,YAAA,IAAIA,KAAK,CAACzG,SAAS,CAAC6I,GAAG,EAAE,EAAE;AACzB,cAAA,OAAO,KAAK;AACd,YAAA;YACApC,KAAK,GAAGA,KAAK,CAAC4H,OAAO;AACvB,UAAA;AACA,UAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA;AAGJ;IAEAD,MAAM,CAACpO,SAAS,GAAGsO,MAAM;AAEzBF,IAAAA,MAAM,CAAC9H,SAAS,GAAG,IAAI,CAACN,iBAAiB,CAAC,CAAA,EAAG8H,OAAO,CAAChW,KAAK,CAAA,MAAA,CAAQ,CAAC;AAEnE,IAAA,MAAM0W,EAAE,GAAGrJ,MAAM,CACf,CAAC;AAAEmC,MAAAA;AAAI,KAAC,KAAK;AAEX,MAAA,IAAIA,GAAG,EAAE;QACP,IAAI8G,MAAM,CAACjF,aAAa,EAAE;AACxB,UAAA,IAAI,CAACvL,SAAS,CAAClF,SAAS,EAAE;AAC1B,UAAA,IAAI,CAACkF,SAAS,CAAClF,SAAS,EAAE;AAC5B,QAAA,CAAC,MAEI;AAEH,UAAA,IAAI,CAACkF,SAAS,GAAGwQ,MAAM,CAAC9F,KAAK,CAAC1K,SAAS;UAIvC,IAAI,CAACA,SAAS,CAAC/G,MAAM,CAACuX,MAAM,CAACjX,QAAQ,CAAC;AACtC,UAAA,IAAI,CAACyG,SAAS,CAAC7H,cAAc,GAAG,KAAK;AAOrC,UAAA,IAAI,CAACkO,OAAO,CAACmK,MAAM,CAACxJ,UAAU,EAAEwJ,MAAM,CAAC9F,KAAK,EAAE8F,MAAM,CAAChJ,UAAU,EAAEgJ,MAAM,CAAC;AAC1E,QAAA;AACF,MAAA,CAAC,MAEI;QACH,IAAIA,MAAM,CAACjF,aAAa,EAAE;AAExB,UAAA,IAAI,CAACvL,SAAS,CAACpG,IAAI,EAAE;AACvB,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAAC2U,eAAe,CAACiC,MAAM,CAAC;AAC9B,QAAA;AACF,MAAA;MACAA,MAAM,CAACjF,aAAa,GAAG,KAAK;AAC9B,IAAA,CAAC,EACD,CAACmF,MAAM,CACT,CAAC;IACDF,MAAM,CAACjJ,MAAM,GAAGqJ,EAAE;AAClB,IAAA,OAAOJ,MAAM;AACf,EAAA;EAEAjC,eAAeA,CAACpO,IAAe,EAAE;AAC/B,IAAA,MAAQqH,UAAU,GAA4BrH,IAAI,CAA1CqH,UAAU;MAAEkB,SAAS,GAAiBvI,IAAI,CAA9BuI,SAAS;MAAE1B,UAAU,GAAK7G,IAAI,CAAnB6G,UAAU;AACzC,IAAA,IAAI6B,KAAK,GAAGrB,UAAU,GAAG,IAAI,CAAC0G,OAAO,CAAC1G,UAAU,CAAC,GAAG,IAAI,CAACqJ,UAAU,CAAC7J,UAAU,CAAC;IAC/E,OAAO6B,KAAK,KAAKH,SAAS,EAAE;AAC1B,MAAA,MAAMpQ,IAAI,GAAG,IAAI,CAAC4V,OAAO,CAACrF,KAAK,CAAC;MAChC,IAAI,CAAC2F,MAAM,CAAC3F,KAAK,EAAE7B,UAAU,EAAEQ,UAAU,CAAC;AAC1CqB,MAAAA,KAAK,GAAGvQ,IAAI;AACd,IAAA;AACF,EAAA;EAKAyR,cAAcA,CAAC1F,KAAU,EAAE;AACzB,IAAA,OAAO,CAAC,EAAE;AAER,MAAA,IAAI,CAAC,IAAI,CAACrE,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACuI,IAAI,MAAM,CAAC,EAAE;AACtD,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,CAAC6C,SAAS,CAAClF,SAAS,EAAE;AAC1B,MAAA,IAAI,CAACkI,aAAa,CAACqB,KAAK,CAAC;AAEzB,MAAA,IAAI,CAAC,IAAI,CAACrE,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,MAAM,CAAC,EAAE;AACzD,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,CAACoC,SAAS,CAAClF,SAAS,EAAE;AAC5B,IAAA;AACF,EAAA;EAOAgP,UAAUA,CAACzF,KAAU,EAAE;AACrB,IAAA,IAAI,CAACrB,aAAa,CAACqB,KAAK,CAAC;AACzB,IAAA,IAAI,CAACrE,SAAS,CAAClF,SAAS,EAAE;AAC5B,EAAA;EAYAkI,aAAaA,CAACqB,KAAU,EAAE;IACxB,IAAIvB,GAAW,EAAEgO,EAAO;AACxB,IAAA,MAAM5H,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;AAC3B,IAAA,OAAO,CAAC,IAAI,CAACnJ,SAAS,CAAC7G,KAAK,CAACyB,IAAI,GAAGhG,SAAS,CAACgJ,OAAO,MAAM,CAAC,EAAE;MAE5D,IAAIkF,GAAG,IAAI,IAAI,EAAE;AACfA,QAAAA,GAAG,GAAG,IAAI,CAAC9C,SAAS,CAAC7G,KAAK,CAACe,KAAY;AACzC,MAAA,CAAC,MAEI,IAAI4W,EAAE,IAAI,IAAI,EAAE;AACnBA,QAAAA,EAAE,GAAG,GAAG;AACV,MAAA,CAAC,MAEI;QACH,MAAAnN,sBAAA,GAAiC,IAAI,CAAC3D,SAAS,CAACrB,KAAK,CAAC,EAAE,CAAC;UAAAiF,sBAAA,GAAApE,cAAA,CAAAmE,sBAAA,EAAA,CAAA,CAAA;AAAlD3E,UAAAA,QAAQ,GAAA4E,sBAAA,CAAA,CAAA,CAAA;AAAE1J,UAAAA,KAAK,GAAA0J,sBAAA,CAAA,CAAA,CAAA;AAAElF,UAAAA,KAAK,GAAAkF,sBAAA,CAAA,CAAA,CAAA;QAC7B,MAAMmN,MAAM,GAAG7H,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,CAACvP,KAAK,CAAC;AACpC,QAAA,MAAMiV,IAAI,GAAG,OAAO4B,MAAM,KAAK,UAAU;QAEzC,IAAI/R,QAAQ,KAAK,SAAS,EAAE;AAC1B,UAAA,MAAMqK,aAAa,GAAGC,OAAO,CAACC,GAAG,CAACL,IAAI,CAACM,IAAI,CAACC,GAAG,CAAC,EAAEvP,KAAK,CAAC;AACxD,UAAA,MAAMyW,EAAE,GAAGxB,IAAI,GAAG4B,MAAM,GAAG1H,aAAa,GAAGnP,KAAK,GAAG,IAAI,CAACyP,KAAK,CAACT,IAAI,EAAEhP,KAAK,CAAC;AAC1E,UAAA,IAAI,CAAC2P,aAAa,CAACX,IAAI,EAAE7E,KAAK,EAAEvB,GAAG,EAAE6N,EAAE,EAAEtH,aAAa,EAAE8F,IAAI,EAAEzQ,KAAK,CAAC;AACtE,QAAA,CAAC,MAEI,IAAIM,QAAQ,KAAK,QAAQ,EAAE;AAC9B,UAAA,IAAI,CAAC6K,aAAa,CAACX,IAAI,EAAE7E,KAAK,EAAEvB,GAAG,EAAE5I,KAAK,EAAE,KAAK,EAAEiV,IAAI,EAAEzQ,KAAK,CAAC;AACjE,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAACmL,aAAa,CAACX,IAAI,EAAE7E,KAAK,EAAEvB,GAAG,EAAE5I,KAAK,EAAE,KAAK,EAAEiV,IAAI,EAAEzQ,KAAK,CAAC;AACjE,QAAA;AACAoE,QAAAA,GAAG,GAAG,IAAI;AACVgO,QAAAA,EAAE,GAAG,IAAI;AACX,MAAA;AACA,MAAA,IAAI,CAAC9Q,SAAS,CAAClF,SAAS,EAAE;AAC5B,IAAA;AACF,EAAA;EACAkW,MAAMA,CAACC,GAAa,EAAE;AACpB5X,IAAAA,MAAM,CAACC,MAAM,CAAC,IAAI,EAAE2X,GAAG,CAAC;IACxB,IAAI,CAACA,GAAG,GAAGA,GAAG;AAChB,EAAA;EAEArH,UAAUA,CAACnI,IAAY,EAAE;IACvB,OAAO;MACLA,IAAI;MACJ7C,KAAK,EAAE,EAAE;AACTsS,MAAAA,WAAW,EAAE;KACd;AACH,EAAA;EAEAhD,OAAOA,CAAC/N,IAAS,EAAE;IACjB,OAAOA,IAAI,CAAC+Q,WAAW;AACzB,EAAA;EAEAL,UAAUA,CAAC1Q,IAAS,EAAE;IACpB,OAAOA,IAAI,CAAC0Q,UAAU;AACxB,EAAA;EAEAtI,YAAYA,CAAC9G,IAAY,EAAE;IACzB,OAAO;MACLA,IAAI;AACJyP,MAAAA,WAAW,EAAE;KACd;AACH,EAAA;AAEAzI,EAAAA,WAAWA,CAACZ,MAAW,EAAE1H,IAAS,EAAE4F,IAAS,EAAE;IAC7C,OAAO,IAAI,CAACoL,aAAa,CAACtJ,MAAM,EAAE1H,IAAI,EAAE4F,IAAI,CAAC;AAC/C,EAAA;AACAoL,EAAAA,aAAaA,CAACtJ,MAAW,EAAE1H,IAAS,EAAE4F,IAAS,EAAE;AAC/C,IAAA,IAAIA,IAAI,EAAE;AACR,MAAA,MAAMzN,IAAI,GAAGyN,IAAI,CAACmL,WAAW;MAC7BnL,IAAI,CAACmL,WAAW,GAAG/Q,IAAI;MACvBA,IAAI,CAAC+Q,WAAW,GAAG5Y,IAAI;AACzB,IAAA,CAAC,MAAM;AACL,MAAA,MAAMA,IAAI,GAAGuP,MAAM,CAACgJ,UAAU;MAC9BhJ,MAAM,CAACgJ,UAAU,GAAG1Q,IAAI;MACxBA,IAAI,CAAC+Q,WAAW,GAAG5Y,IAAI;AACzB,IAAA;AACF,EAAA;AAEAkW,EAAAA,MAAMA,CAACrO,IAAS,EAAE0H,MAAY,EAAE9B,IAAU,EAAE;IAC1C,OAAO,IAAI,CAACqL,aAAa,CAACjR,IAAI,EAAE0H,MAAM,EAAE9B,IAAI,CAAC;AAC/C,EAAA;AAEAqL,EAAAA,aAAaA,CAACjR,IAAS,EAAE0H,MAAW,EAAEZ,WAAgB,EAAE;AACtD,IAAA,MAAM3O,IAAI,GAAG6H,IAAI,CAAC+Q,WAAW;AAC7B,IAAA,IAAIjK,WAAW,EAAE;MACfA,WAAW,CAACiK,WAAW,GAAG5Y,IAAI;AAChC,IAAA;AACA,IAAA,IAAIuP,MAAM,CAACgJ,UAAU,KAAK1Q,IAAI,EAAE;MAC9B0H,MAAM,CAACgJ,UAAU,GAAGvY,IAAI;AAC1B,IAAA;AACF,EAAA;EAEA8W,OAAOA,CAACjP,IAAS,EAAE2C,GAAW,EAAE5I,KAAU,EAAEwE,KAAc,EAAE;AAC1DyB,IAAAA,IAAI,CAACvB,KAAK,CAACkE,GAAG,CAAC,GAAG5I,KAAK;AACzB,EAAA;AACF;;ACjmCO,SAASmX,IAAIA,CAAClS,SAA+B,EAAE,GAAGmS,MAAa,EAAE;AACtE,EAAA,MAAMC,EAAU,GAAG,SAASA,EAAEA,CAACC,KAAc,EAAE;AAC7C,IAAA,MAAMxR,SAAS,GAAG,IAAItJ,SAAS,CAAC,CAAC;AAAEc,MAAAA;AAAE,KAAC,KAAK;MACzC,OAAO8Z,MAAM,CAAC9Z,CAAC,CAAC;IAClB,CAAC,EAAEga,KAAK,CAAC;IACTxR,SAAS,CAACd,IAAI,CAACrI,KAAK,CAACC,IAAI,CAACqI,SAAS,CAAC,CAAC;AACrC,IAAA,OAAOa,SAAS;EAClB,CAAC;AACDuR,EAAAA,EAAE,CAAC3B,UAAU,GAAGF,KAAK,CAAC+B,OAAO;AAC7B,EAAA,OAAOF,EAAE;AACX;AAGO,SAASG,YAAYA,CAACC,MAAwB,EAAE;AAErD,EAAA,OAAO,SAASpC,MAAMA,CAAIqC,IAAkB,EAAEtL,IAAS,EAAE;AACvD,IAAA,MAAMuL,KAAK,GAAGD,IAAI,CAACjC,GAAG,EAAE;IACxB,MAAM3P,SAAoB,GAAG6R,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC/C,IAAA,MAAMC,IAAI,GAAG,IAAI7L,WAAW,CAACjG,SAAS,CAAC;AACvC8R,IAAAA,IAAI,CAACd,MAAM,CAACW,MAAM,CAAC;AAEnB,IAAA,MAAMpL,aAA4B,GAAG;MACnCJ,WAAW,EAAE7Q,QAAQ,CAACQ,SAAS;AAC/BkR,MAAAA,UAAU,EAAEV,IAAI;AAChB4C,MAAAA,IAAI,EAAE2I,KAAK;AACX7R,MAAAA;KACD;AAED8R,IAAAA,IAAI,CAACzL,OAAO,CAACC,IAAI,EAAEC,aAAa,CAAC;AAEjC,IAAA,OAAO,CAACA,aAAa,EAAEsL,KAAK,CAAC;EAC/B,CAAC;AACH;;;;"}
|