@cuxt/sandboxjs 0.1.0 → 0.1.3
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/LICENSE +21 -21
- package/README.md +198 -185
- package/{build → dist/cjs}/Sandbox.d.ts +15 -6
- package/dist/cjs/Sandbox.js +126 -0
- package/dist/{SandboxExec.d.ts → cjs/SandboxExec.d.ts} +8 -17
- package/dist/cjs/SandboxExec.js +227 -0
- package/{build/eval.d.ts → dist/cjs/eval/index.d.ts} +10 -2
- package/dist/cjs/eval/index.js +233 -0
- package/dist/cjs/executor/executorUtils.d.ts +161 -0
- package/dist/cjs/executor/executorUtils.js +930 -0
- package/dist/cjs/executor/index.d.ts +1 -0
- package/dist/cjs/executor/index.js +2 -0
- package/dist/cjs/executor/ops/assignment.d.ts +1 -0
- package/dist/cjs/executor/ops/assignment.js +88 -0
- package/dist/cjs/executor/ops/call.d.ts +1 -0
- package/dist/cjs/executor/ops/call.js +160 -0
- package/dist/cjs/executor/ops/comparison.d.ts +1 -0
- package/dist/cjs/executor/ops/comparison.js +36 -0
- package/dist/cjs/executor/ops/control.d.ts +1 -0
- package/dist/cjs/executor/ops/control.js +203 -0
- package/dist/cjs/executor/ops/functions.d.ts +1 -0
- package/dist/cjs/executor/ops/functions.js +55 -0
- package/dist/cjs/executor/ops/index.d.ts +0 -0
- package/dist/cjs/executor/ops/index.js +11 -0
- package/dist/cjs/executor/ops/literals.d.ts +1 -0
- package/dist/cjs/executor/ops/literals.js +45 -0
- package/dist/cjs/executor/ops/misc.d.ts +1 -0
- package/dist/cjs/executor/ops/misc.js +25 -0
- package/dist/cjs/executor/ops/object.d.ts +1 -0
- package/dist/cjs/executor/ops/object.js +51 -0
- package/dist/cjs/executor/ops/prop.d.ts +1 -0
- package/dist/cjs/executor/ops/prop.js +70 -0
- package/dist/cjs/executor/ops/unary.d.ts +1 -0
- package/dist/cjs/executor/ops/unary.js +48 -0
- package/dist/cjs/executor/ops/variables.d.ts +1 -0
- package/dist/cjs/executor/ops/variables.js +16 -0
- package/dist/cjs/executor/opsRegistry.d.ts +33 -0
- package/dist/cjs/executor/opsRegistry.js +8 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser/index.d.ts +3 -0
- package/dist/cjs/parser/index.js +1 -0
- package/dist/{parser.d.ts → cjs/parser/lisp.d.ts} +29 -42
- package/dist/cjs/parser/lispTypes/conditionals.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/conditionals.js +135 -0
- package/dist/cjs/parser/lispTypes/control.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/control.js +204 -0
- package/dist/cjs/parser/lispTypes/declarations.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/declarations.js +99 -0
- package/dist/cjs/parser/lispTypes/index.d.ts +3 -0
- package/dist/cjs/parser/lispTypes/index.js +17 -0
- package/dist/cjs/parser/lispTypes/operators.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/operators.js +252 -0
- package/dist/cjs/parser/lispTypes/shared.d.ts +38 -0
- package/dist/cjs/parser/lispTypes/structures.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/structures.js +188 -0
- package/dist/cjs/parser/lispTypes/values.d.ts +2 -0
- package/dist/cjs/parser/lispTypes/values.js +89 -0
- package/dist/cjs/parser/parserUtils.d.ts +34 -0
- package/dist/cjs/parser/parserUtils.js +968 -0
- package/dist/cjs/utils/CodeString.d.ts +16 -0
- package/dist/cjs/utils/CodeString.js +64 -0
- package/dist/cjs/utils/ExecContext.d.ts +34 -0
- package/dist/cjs/utils/ExecContext.js +171 -0
- package/dist/cjs/utils/Prop.d.ts +16 -0
- package/dist/cjs/utils/Prop.js +81 -0
- package/dist/cjs/utils/Scope.d.ts +47 -0
- package/dist/cjs/utils/Scope.js +127 -0
- package/dist/cjs/utils/errors.d.ts +10 -0
- package/dist/cjs/utils/errors.js +12 -0
- package/dist/cjs/utils/functionReplacements.d.ts +11 -0
- package/dist/cjs/utils/functionReplacements.js +362 -0
- package/dist/cjs/utils/index.d.ts +7 -0
- package/dist/cjs/utils/index.js +7 -0
- package/dist/cjs/utils/types.d.ts +221 -0
- package/dist/cjs/utils/types.js +164 -0
- package/dist/cjs/utils/unraw.js +145 -0
- package/dist/{node → esm}/Sandbox.d.ts +15 -6
- package/dist/esm/Sandbox.js +115 -0
- package/dist/esm/Sandbox.js.map +1 -0
- package/{build → dist/esm}/SandboxExec.d.ts +8 -17
- package/dist/esm/SandboxExec.js +224 -0
- package/dist/esm/SandboxExec.js.map +1 -0
- package/dist/{eval.d.ts → esm/eval/index.d.ts} +10 -2
- package/dist/esm/eval/index.js +235 -0
- package/dist/esm/eval/index.js.map +1 -0
- package/dist/esm/executor/executorUtils.d.ts +161 -0
- package/dist/esm/executor/executorUtils.js +898 -0
- package/dist/esm/executor/executorUtils.js.map +1 -0
- package/dist/esm/executor/index.d.ts +1 -0
- package/dist/esm/executor/index.js +2 -0
- package/dist/esm/executor/ops/assignment.d.ts +1 -0
- package/dist/esm/executor/ops/assignment.js +90 -0
- package/dist/esm/executor/ops/assignment.js.map +1 -0
- package/dist/esm/executor/ops/call.d.ts +1 -0
- package/dist/esm/executor/ops/call.js +162 -0
- package/dist/esm/executor/ops/call.js.map +1 -0
- package/dist/esm/executor/ops/comparison.d.ts +1 -0
- package/dist/esm/executor/ops/comparison.js +38 -0
- package/dist/esm/executor/ops/comparison.js.map +1 -0
- package/dist/esm/executor/ops/control.d.ts +1 -0
- package/dist/esm/executor/ops/control.js +205 -0
- package/dist/esm/executor/ops/control.js.map +1 -0
- package/dist/esm/executor/ops/functions.d.ts +1 -0
- package/dist/esm/executor/ops/functions.js +57 -0
- package/dist/esm/executor/ops/functions.js.map +1 -0
- package/dist/esm/executor/ops/index.d.ts +0 -0
- package/dist/esm/executor/ops/index.js +11 -0
- package/dist/esm/executor/ops/literals.d.ts +1 -0
- package/dist/esm/executor/ops/literals.js +47 -0
- package/dist/esm/executor/ops/literals.js.map +1 -0
- package/dist/esm/executor/ops/misc.d.ts +1 -0
- package/dist/esm/executor/ops/misc.js +27 -0
- package/dist/esm/executor/ops/misc.js.map +1 -0
- package/dist/esm/executor/ops/object.d.ts +1 -0
- package/dist/esm/executor/ops/object.js +53 -0
- package/dist/esm/executor/ops/object.js.map +1 -0
- package/dist/esm/executor/ops/prop.d.ts +1 -0
- package/dist/esm/executor/ops/prop.js +72 -0
- package/dist/esm/executor/ops/prop.js.map +1 -0
- package/dist/esm/executor/ops/unary.d.ts +1 -0
- package/dist/esm/executor/ops/unary.js +50 -0
- package/dist/esm/executor/ops/unary.js.map +1 -0
- package/dist/esm/executor/ops/variables.d.ts +1 -0
- package/dist/esm/executor/ops/variables.js +18 -0
- package/dist/esm/executor/ops/variables.js.map +1 -0
- package/dist/esm/executor/opsRegistry.d.ts +33 -0
- package/dist/esm/executor/opsRegistry.js +9 -0
- package/dist/esm/executor/opsRegistry.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/parser/index.d.ts +3 -0
- package/dist/esm/parser/index.js +1 -0
- package/{build/parser.d.ts → dist/esm/parser/lisp.d.ts} +29 -42
- package/dist/esm/parser/lispTypes/conditionals.d.ts +2 -0
- package/dist/esm/parser/lispTypes/conditionals.js +137 -0
- package/dist/esm/parser/lispTypes/conditionals.js.map +1 -0
- package/dist/esm/parser/lispTypes/control.d.ts +2 -0
- package/dist/esm/parser/lispTypes/control.js +206 -0
- package/dist/esm/parser/lispTypes/control.js.map +1 -0
- package/dist/esm/parser/lispTypes/declarations.d.ts +2 -0
- package/dist/esm/parser/lispTypes/declarations.js +101 -0
- package/dist/esm/parser/lispTypes/declarations.js.map +1 -0
- package/dist/esm/parser/lispTypes/index.d.ts +3 -0
- package/dist/esm/parser/lispTypes/index.js +19 -0
- package/dist/esm/parser/lispTypes/index.js.map +1 -0
- package/dist/esm/parser/lispTypes/operators.d.ts +2 -0
- package/dist/esm/parser/lispTypes/operators.js +254 -0
- package/dist/esm/parser/lispTypes/operators.js.map +1 -0
- package/dist/esm/parser/lispTypes/shared.d.ts +38 -0
- package/dist/esm/parser/lispTypes/structures.d.ts +2 -0
- package/dist/esm/parser/lispTypes/structures.js +190 -0
- package/dist/esm/parser/lispTypes/structures.js.map +1 -0
- package/dist/esm/parser/lispTypes/values.d.ts +2 -0
- package/dist/esm/parser/lispTypes/values.js +91 -0
- package/dist/esm/parser/lispTypes/values.js.map +1 -0
- package/dist/esm/parser/parserUtils.d.ts +34 -0
- package/dist/esm/parser/parserUtils.js +959 -0
- package/dist/esm/parser/parserUtils.js.map +1 -0
- package/dist/esm/utils/CodeString.d.ts +16 -0
- package/dist/esm/utils/CodeString.js +66 -0
- package/dist/esm/utils/CodeString.js.map +1 -0
- package/dist/esm/utils/ExecContext.d.ts +34 -0
- package/dist/esm/utils/ExecContext.js +168 -0
- package/dist/esm/utils/ExecContext.js.map +1 -0
- package/dist/esm/utils/Prop.d.ts +16 -0
- package/dist/esm/utils/Prop.js +80 -0
- package/dist/esm/utils/Prop.js.map +1 -0
- package/dist/esm/utils/Scope.d.ts +47 -0
- package/dist/esm/utils/Scope.js +122 -0
- package/dist/esm/utils/Scope.js.map +1 -0
- package/dist/esm/utils/errors.d.ts +10 -0
- package/dist/esm/utils/errors.js +10 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/functionReplacements.d.ts +11 -0
- package/dist/esm/utils/functionReplacements.js +361 -0
- package/dist/esm/utils/functionReplacements.js.map +1 -0
- package/dist/esm/utils/index.d.ts +7 -0
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/types.d.ts +221 -0
- package/dist/esm/utils/types.js +160 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/esm/utils/unraw.js +147 -0
- package/dist/esm/utils/unraw.js.map +1 -0
- package/dist/umd/Sandbox.min.js +2 -0
- package/dist/umd/Sandbox.min.js.map +1 -0
- package/dist/umd/SandboxExec.min.js +2 -0
- package/dist/umd/SandboxExec.min.js.map +1 -0
- package/package.json +70 -68
- package/build/Sandbox.js +0 -62
- package/build/SandboxExec.js +0 -214
- package/build/eval.js +0 -205
- package/build/executor.d.ts +0 -124
- package/build/executor.js +0 -1546
- package/build/parser.js +0 -1527
- package/build/unraw.js +0 -168
- package/build/utils.d.ts +0 -264
- package/build/utils.js +0 -362
- package/dist/Sandbox.d.ts +0 -25
- package/dist/Sandbox.js +0 -270
- package/dist/Sandbox.js.map +0 -1
- package/dist/Sandbox.min.js +0 -2
- package/dist/Sandbox.min.js.map +0 -1
- package/dist/SandboxExec.js +0 -218
- package/dist/SandboxExec.js.map +0 -1
- package/dist/SandboxExec.min.js +0 -2
- package/dist/SandboxExec.min.js.map +0 -1
- package/dist/executor.d.ts +0 -124
- package/dist/executor.js +0 -1550
- package/dist/executor.js.map +0 -1
- package/dist/node/Sandbox.js +0 -277
- package/dist/node/SandboxExec.d.ts +0 -66
- package/dist/node/SandboxExec.js +0 -225
- package/dist/node/eval.d.ts +0 -27
- package/dist/node/executor.d.ts +0 -124
- package/dist/node/executor.js +0 -1567
- package/dist/node/parser.d.ts +0 -154
- package/dist/node/parser.js +0 -1704
- package/dist/node/utils.d.ts +0 -264
- package/dist/node/utils.js +0 -385
- package/dist/parser.js +0 -1690
- package/dist/parser.js.map +0 -1
- package/dist/unraw.d.ts +0 -11
- package/dist/utils.d.ts +0 -264
- package/dist/utils.js +0 -365
- package/dist/utils.js.map +0 -1
- /package/{build → dist/cjs/utils}/unraw.d.ts +0 -0
- /package/dist/{node → esm/utils}/unraw.d.ts +0 -0
package/dist/parser.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sources":["../src/unraw.ts","../src/parser.ts"],"sourcesContent":["/**\r\n * Parse a string as a base-16 number. This is more strict than `parseInt` as it\r\n * will not allow any other characters, including (for example) \"+\", \"-\", and\r\n * \".\".\r\n * @param hex A string containing a hexadecimal number.\r\n * @returns The parsed integer, or `NaN` if the string is not a valid hex\r\n * number.\r\n */\r\nfunction parseHexToInt(hex: string): number {\r\n const isOnlyHexChars = !hex.match(/[^a-f0-9]/i);\r\n return isOnlyHexChars ? parseInt(hex, 16) : NaN;\r\n}\r\n\r\n/**\r\n * Check the validity and length of a hexadecimal code and optionally enforces\r\n * a specific number of hex digits.\r\n * @param hex The string to validate and parse.\r\n * @param errorName The name of the error message to throw a `SyntaxError` with\r\n * if `hex` is invalid. This is used to index `errorMessages`.\r\n * @param enforcedLength If provided, will throw an error if `hex` is not\r\n * exactly this many characters.\r\n * @returns The parsed hex number as a normal number.\r\n * @throws {SyntaxError} If the code is not valid.\r\n */\r\nfunction validateAndParseHex(hex: string, errorName: string, enforcedLength?: number): number {\r\n const parsedHex = parseHexToInt(hex);\r\n if (Number.isNaN(parsedHex) || (enforcedLength !== undefined && enforcedLength !== hex.length)) {\r\n throw new SyntaxError(errorName + ': ' + hex);\r\n }\r\n return parsedHex;\r\n}\r\n\r\n/**\r\n * Parse a two-digit hexadecimal character escape code.\r\n * @param code The two-digit hexadecimal number that represents the character to\r\n * output.\r\n * @returns The single character represented by the code.\r\n * @throws {SyntaxError} If the code is not valid hex or is not the right\r\n * length.\r\n */\r\nfunction parseHexadecimalCode(code: string): string {\r\n const parsedCode = validateAndParseHex(code, 'Malformed Hexadecimal', 2);\r\n return String.fromCharCode(parsedCode);\r\n}\r\n\r\n/**\r\n * Parse a four-digit Unicode character escape code.\r\n * @param code The four-digit unicode number that represents the character to\r\n * output.\r\n * @param surrogateCode Optional four-digit unicode surrogate that represents\r\n * the other half of the character to output.\r\n * @returns The single character represented by the code.\r\n * @throws {SyntaxError} If the codes are not valid hex or are not the right\r\n * length.\r\n */\r\nfunction parseUnicodeCode(code: string, surrogateCode?: string): string {\r\n const parsedCode = validateAndParseHex(code, 'Malformed Unicode', 4);\r\n\r\n if (surrogateCode !== undefined) {\r\n const parsedSurrogateCode = validateAndParseHex(surrogateCode, 'Malformed Unicode', 4);\r\n return String.fromCharCode(parsedCode, parsedSurrogateCode);\r\n }\r\n\r\n return String.fromCharCode(parsedCode);\r\n}\r\n\r\n/**\r\n * Test if the text is surrounded by curly braces (`{}`).\r\n * @param text Text to check.\r\n * @returns `true` if the text is in the form `{*}`.\r\n */\r\nfunction isCurlyBraced(text: string): boolean {\r\n return text.charAt(0) === '{' && text.charAt(text.length - 1) === '}';\r\n}\r\n\r\n/**\r\n * Parse a Unicode code point character escape code.\r\n * @param codePoint A unicode escape code point, including the surrounding curly\r\n * braces.\r\n * @returns The single character represented by the code.\r\n * @throws {SyntaxError} If the code is not valid hex or does not have the\r\n * surrounding curly braces.\r\n */\r\nfunction parseUnicodeCodePointCode(codePoint: string): string {\r\n if (!isCurlyBraced(codePoint)) {\r\n throw new SyntaxError('Malformed Unicode: +' + codePoint);\r\n }\r\n const withoutBraces = codePoint.slice(1, -1);\r\n const parsedCode = validateAndParseHex(withoutBraces, 'Malformed Unicode');\r\n\r\n try {\r\n return String.fromCodePoint(parsedCode);\r\n } catch (err) {\r\n throw err instanceof RangeError ? new SyntaxError('Code Point Limit:' + parsedCode) : err;\r\n }\r\n}\r\n\r\n/**\r\n * Map of unescaped letters to their corresponding special JS escape characters.\r\n * Intentionally does not include characters that map to themselves like \"\\'\".\r\n */\r\nconst singleCharacterEscapes = new Map<string, string>([\r\n ['b', '\\b'],\r\n ['f', '\\f'],\r\n ['n', '\\n'],\r\n ['r', '\\r'],\r\n ['t', '\\t'],\r\n ['v', '\\v'],\r\n ['0', '\\0'],\r\n]);\r\n\r\n/**\r\n * Parse a single character escape sequence and return the matching character.\r\n * If none is matched, defaults to `code`.\r\n * @param code A single character code.\r\n */\r\nfunction parseSingleCharacterCode(code: string): string {\r\n return singleCharacterEscapes.get(code) || code;\r\n}\r\n\r\n/**\r\n * Matches every escape sequence possible, including invalid ones.\r\n *\r\n * All capture groups (described below) are unique (only one will match), except\r\n * for 4, which can only potentially match if 3 does.\r\n *\r\n * **Capture Groups:**\r\n * 0. A single backslash\r\n * 1. Hexadecimal code\r\n * 2. Unicode code point code with surrounding curly braces\r\n * 3. Unicode escape code with surrogate\r\n * 4. Surrogate code\r\n * 5. Unicode escape code without surrogate\r\n * 6. Octal code _NOTE: includes \"0\"._\r\n * 7. A single character (will never be \\, x, u, or 0-3)\r\n */\r\nconst escapeMatch =\r\n /\\\\(?:(\\\\)|x([\\s\\S]{0,2})|u(\\{[^}]*\\}?)|u([\\s\\S]{4})\\\\u([^{][\\s\\S]{0,3})|u([\\s\\S]{0,4})|([0-3]?[0-7]{1,2})|([\\s\\S])|$)/g;\r\n\r\n/**\r\n * Replace raw escape character strings with their escape characters.\r\n * @param raw A string where escape characters are represented as raw string\r\n * values like `\\'` rather than `'`.\r\n * @param allowOctals If `true`, will process the now-deprecated octal escape\r\n * sequences (ie, `\\111`).\r\n * @returns The processed string, with escape characters replaced by their\r\n * respective actual Unicode characters.\r\n */\r\nexport function unraw(raw: string): string {\r\n return raw.replace(\r\n escapeMatch,\r\n function (\r\n _,\r\n backslash?: string,\r\n hex?: string,\r\n codePoint?: string,\r\n unicodeWithSurrogate?: string,\r\n surrogate?: string,\r\n unicode?: string,\r\n octal?: string,\r\n singleCharacter?: string,\r\n ): string {\r\n // Compare groups to undefined because empty strings mean different errors\r\n // Otherwise, `\\u` would fail the same as `\\` which is wrong.\r\n if (backslash !== undefined) {\r\n return '\\\\';\r\n }\r\n if (hex !== undefined) {\r\n return parseHexadecimalCode(hex);\r\n }\r\n if (codePoint !== undefined) {\r\n return parseUnicodeCodePointCode(codePoint);\r\n }\r\n if (unicodeWithSurrogate !== undefined) {\r\n return parseUnicodeCode(unicodeWithSurrogate, surrogate);\r\n }\r\n if (unicode !== undefined) {\r\n return parseUnicodeCode(unicode);\r\n }\r\n if (octal === '0') {\r\n return '\\0';\r\n }\r\n if (octal !== undefined) {\r\n throw new SyntaxError('Octal Deprecation: ' + octal);\r\n }\r\n if (singleCharacter !== undefined) {\r\n return parseSingleCharacterCode(singleCharacter);\r\n }\r\n throw new SyntaxError('End of string');\r\n },\r\n );\r\n}\r\nexport default unraw;\r\n","import unraw from './unraw.js';\r\nimport { CodeString, isLisp, LispType, reservedWords } from './utils.js';\r\n\r\nexport type DefineLisp<\r\n op extends LispType,\r\n a extends LispItem | LispItem,\r\n b extends LispItem | LispItem,\r\n> = [op, a, b];\r\n\r\nexport type ExtractLispOp<L> = L extends DefineLisp<infer i, any, any> ? i : never;\r\nexport type ExtractLispA<L> = L extends DefineLisp<any, infer i, any> ? i : never;\r\nexport type ExtractLispB<L> = L extends DefineLisp<any, any, infer i> ? i : never;\r\n\r\nexport type LispItemSingle = LispType.None | LispType.True | string | Lisp;\r\nexport type LispItem = LispItemSingle | LispItemSingle[];\r\nexport type Lisp = [LispType, LispItem, LispItem];\r\n\r\nfunction createLisp<L extends Lisp>(obj: {\r\n op: ExtractLispOp<L>;\r\n a: ExtractLispA<L>;\r\n b: ExtractLispB<L>;\r\n}) {\r\n return [obj.op, obj.a, obj.b] as L;\r\n}\r\n\r\nconst NullLisp = createLisp<None>({ op: LispType.None, a: LispType.None, b: LispType.None });\r\n\r\nexport type Literal = DefineLisp<LispType.Literal, string, Lisp[]> & { tempJsStrings?: string[] };\r\nexport type If = DefineLisp<LispType.If, Lisp, IfCase>;\r\nexport type InlineIf = DefineLisp<LispType.InlineIf, Lisp, InlineIfCase>;\r\nexport type IfCase = DefineLisp<LispType.IfCase, Lisp[], Lisp[]>;\r\nexport type InlineIfCase = DefineLisp<LispType.InlineIfCase, Lisp, Lisp>;\r\nexport type KeyVal = DefineLisp<LispType.KeyVal, string | Lisp, Lisp>;\r\nexport type SpreadObject = DefineLisp<LispType.SpreadObject, LispType.None, Lisp>;\r\nexport type SpreadArray = DefineLisp<LispType.SpreadArray, LispType.None, Lisp>;\r\nexport type ArrayProp = DefineLisp<LispType.ArrayProp, Lisp, Lisp>;\r\nexport type Prop = DefineLisp<LispType.Prop, Lisp, string | Lisp>;\r\nexport type PropOptional = DefineLisp<LispType.PropOptional, Lisp, Lisp[]>;\r\nexport type Call = DefineLisp<LispType.Call, Lisp, Lisp[]>;\r\nexport type CallOptional = DefineLisp<LispType.CallOptional, Lisp, Lisp[]>;\r\nexport type CreateArray = DefineLisp<LispType.CreateArray, Lisp, Lisp[]>;\r\nexport type CreateObject = DefineLisp<LispType.CreateObject, Lisp, Lisp[]>;\r\nexport type Group = DefineLisp<LispType.Group, Lisp, Lisp[]>;\r\nexport type Inverse = DefineLisp<LispType.Inverse, Lisp, Lisp>;\r\nexport type Not = DefineLisp<LispType.Not, Lisp, Lisp>;\r\nexport type Negative = DefineLisp<LispType.Negative, Lisp, Lisp>;\r\nexport type Positive = DefineLisp<LispType.Positive, Lisp, Lisp>;\r\nexport type Typeof = DefineLisp<LispType.Typeof, Lisp, Lisp>;\r\nexport type Delete = DefineLisp<LispType.Delete, Lisp, Lisp>;\r\nexport type IncrementBefore = DefineLisp<LispType.IncrementBefore, Lisp, LispType.None>;\r\nexport type IncrementAfter = DefineLisp<LispType.IncrementAfter, Lisp, LispType.None>;\r\nexport type DecrementBefore = DefineLisp<LispType.DecrementBefore, Lisp, LispType.None>;\r\nexport type DecrementAfter = DefineLisp<LispType.DecrementAfter, Lisp, LispType.None>;\r\n\r\nexport type And = DefineLisp<LispType.And, Lisp, Lisp>;\r\nexport type Or = DefineLisp<LispType.Or, Lisp, Lisp>;\r\nexport type NullishCoalescing = DefineLisp<LispType.NullishCoalescing, Lisp, Lisp>;\r\nexport type Instanceof = DefineLisp<LispType.Instanceof, Lisp, Lisp>;\r\nexport type In = DefineLisp<LispType.In, Lisp, Lisp>;\r\nexport type Assigns = DefineLisp<LispType.Assign, Lisp, Lisp>;\r\nexport type SubractEquals = DefineLisp<LispType.SubractEquals, Lisp, Lisp>;\r\nexport type AddEquals = DefineLisp<LispType.AddEquals, Lisp, Lisp>;\r\nexport type DivideEquals = DefineLisp<LispType.DivideEquals, Lisp, Lisp>;\r\nexport type PowerEquals = DefineLisp<LispType.PowerEquals, Lisp, Lisp>;\r\nexport type MultiplyEquals = DefineLisp<LispType.MultiplyEquals, Lisp, Lisp>;\r\nexport type ModulusEquals = DefineLisp<LispType.ModulusEquals, Lisp, Lisp>;\r\nexport type BitNegateEquals = DefineLisp<LispType.BitNegateEquals, Lisp, Lisp>;\r\nexport type BitAndEquals = DefineLisp<LispType.BitAndEquals, Lisp, Lisp>;\r\nexport type BitOrEquals = DefineLisp<LispType.BitOrEquals, Lisp, Lisp>;\r\nexport type UnsignedShiftRightEquals = DefineLisp<LispType.UnsignedShiftRightEquals, Lisp, Lisp>;\r\nexport type ShiftLeftEquals = DefineLisp<LispType.ShiftLeftEquals, Lisp, Lisp>;\r\nexport type ShiftRightEquals = DefineLisp<LispType.ShiftRightEquals, Lisp, Lisp>;\r\nexport type AndEquals = DefineLisp<LispType.AndEquals, Lisp, Lisp>;\r\nexport type OrEquals = DefineLisp<LispType.OrEquals, Lisp, Lisp>;\r\nexport type NullishCoalescingEquals = DefineLisp<LispType.NullishCoalescingEquals, Lisp, Lisp>;\r\n\r\nexport type BitAnd = DefineLisp<LispType.BitAnd, Lisp, Lisp>;\r\nexport type BitOr = DefineLisp<LispType.BitOr, Lisp, Lisp>;\r\nexport type BitNegate = DefineLisp<LispType.BitNegate, Lisp, Lisp>;\r\nexport type BitShiftLeft = DefineLisp<LispType.BitShiftLeft, Lisp, Lisp>;\r\nexport type BitShiftRight = DefineLisp<LispType.BitShiftRight, Lisp, Lisp>;\r\nexport type BitUnsignedShiftRight = DefineLisp<LispType.BitUnsignedShiftRight, Lisp, Lisp>;\r\nexport type SmallerEqualThan = DefineLisp<LispType.SmallerEqualThan, Lisp, Lisp>;\r\nexport type LargerEqualThan = DefineLisp<LispType.LargerEqualThan, Lisp, Lisp>;\r\nexport type SmallerThan = DefineLisp<LispType.SmallerThan, Lisp, Lisp>;\r\nexport type LargerThan = DefineLisp<LispType.LargerThan, Lisp, Lisp>;\r\nexport type StrictNotEqual = DefineLisp<LispType.StrictNotEqual, Lisp, Lisp>;\r\nexport type NotEqual = DefineLisp<LispType.NotEqual, Lisp, Lisp>;\r\nexport type StrictEqual = DefineLisp<LispType.StrictEqual, Lisp, Lisp>;\r\nexport type Equal = DefineLisp<LispType.Equal, Lisp, Lisp>;\r\nexport type Plus = DefineLisp<LispType.Plus, Lisp, Lisp>;\r\nexport type Minus = DefineLisp<LispType.Minus, Lisp, Lisp>;\r\nexport type Divide = DefineLisp<LispType.Divide, Lisp, Lisp>;\r\nexport type Power = DefineLisp<LispType.Power, Lisp, Lisp>;\r\nexport type Multiply = DefineLisp<LispType.Multiply, Lisp, Lisp>;\r\nexport type Modulus = DefineLisp<LispType.Modulus, Lisp, Lisp>;\r\n\r\nexport type Block = DefineLisp<LispType.Block, Lisp[], LispType.None>;\r\nexport type Expression = DefineLisp<LispType.Expression, Lisp[], LispType.None>;\r\nexport type Return = DefineLisp<LispType.Return, LispType.None, Lisp>;\r\nexport type Throw = DefineLisp<LispType.Throw, LispType.None, Lisp>;\r\nexport type Switch = DefineLisp<LispType.Switch, Lisp, SwitchCase[]>;\r\nexport type SwitchCase = DefineLisp<LispType.SwitchCase, LispType.None | Lisp, Lisp[]>;\r\nexport type Var = DefineLisp<LispType.Var, string, Lisp | LispType.None>;\r\nexport type Let = DefineLisp<LispType.Let, string, Lisp | LispType.None>;\r\nexport type Const = DefineLisp<LispType.Const, string, Lisp | LispType.None>;\r\n\r\nexport type Number = DefineLisp<LispType.Number, LispType.None, string>;\r\nexport type BigInt = DefineLisp<LispType.BigInt, LispType.None, string>;\r\nexport type GlobalSymbol = DefineLisp<LispType.GlobalSymbol, LispType.None, string>;\r\nexport type LiteralIndex = DefineLisp<LispType.LiteralIndex, LispType.None, string>;\r\nexport type StringIndex = DefineLisp<LispType.StringIndex, LispType.None, string>;\r\nexport type RegexIndex = DefineLisp<LispType.RegexIndex, LispType.None, string>;\r\n\r\nexport type Function = DefineLisp<\r\n LispType.Function,\r\n (string | LispType.None | LispType.True)[],\r\n string | Lisp[]\r\n>;\r\nexport type InlineFunction = DefineLisp<LispType.InlineFunction, string[], string | Lisp[]>;\r\nexport type ArrowFunction = DefineLisp<LispType.ArrowFunction, string[], string | Lisp[]>;\r\nexport type Loop = DefineLisp<LispType.Loop, LispItem, Lisp[]>;\r\nexport type LoopAction = DefineLisp<LispType.LoopAction, string, LispType.None>;\r\nexport type Try = DefineLisp<LispType.Try, Lisp[], LispItem>;\r\n\r\nexport type Void = DefineLisp<LispType.Void, Lisp, LispType.None>;\r\nexport type Await = DefineLisp<LispType.Await, Lisp, LispType.None>;\r\nexport type New = DefineLisp<LispType.New, Lisp, Lisp[]>;\r\nexport type None = DefineLisp<LispType.None, LispType.None, LispType.None>;\r\n\r\nexport type LispFamily =\r\n | Literal\r\n | If\r\n | InlineIf\r\n | IfCase\r\n | InlineIfCase\r\n | KeyVal\r\n | SpreadObject\r\n | SpreadArray\r\n | ArrayProp\r\n | Prop\r\n | PropOptional\r\n | Call\r\n | CallOptional\r\n | CreateArray\r\n | CreateObject\r\n | Group\r\n | Inverse\r\n | Not\r\n | Negative\r\n | Positive\r\n | Typeof\r\n | Delete\r\n | IncrementBefore\r\n | IncrementAfter\r\n | DecrementBefore\r\n | DecrementAfter\r\n | And\r\n | Or\r\n | NullishCoalescing\r\n | Instanceof\r\n | In\r\n | Assigns\r\n | SubractEquals\r\n | AddEquals\r\n | DivideEquals\r\n | PowerEquals\r\n | MultiplyEquals\r\n | ModulusEquals\r\n | BitNegateEquals\r\n | BitAndEquals\r\n | BitOrEquals\r\n | UnsignedShiftRightEquals\r\n | ShiftLeftEquals\r\n | ShiftRightEquals\r\n | AndEquals\r\n | OrEquals\r\n | NullishCoalescingEquals\r\n | BitAnd\r\n | BitOr\r\n | BitNegate\r\n | BitShiftLeft\r\n | BitShiftRight\r\n | BitUnsignedShiftRight\r\n | SmallerEqualThan\r\n | LargerEqualThan\r\n | SmallerThan\r\n | LargerThan\r\n | StrictNotEqual\r\n | NotEqual\r\n | StrictEqual\r\n | Equal\r\n | Plus\r\n | Minus\r\n | Divide\r\n | Power\r\n | Multiply\r\n | Modulus\r\n | Block\r\n | Expression\r\n | Return\r\n | Throw\r\n | Switch\r\n | SwitchCase\r\n | Var\r\n | Let\r\n | Const\r\n | Number\r\n | BigInt\r\n | GlobalSymbol\r\n | LiteralIndex\r\n | StringIndex\r\n | RegexIndex\r\n | Function\r\n | InlineFunction\r\n | ArrowFunction\r\n | Loop\r\n | LoopAction\r\n | Try\r\n | Void\r\n | Await\r\n | New\r\n | None;\r\n\r\nexport interface IRegEx {\r\n regex: string;\r\n flags: string;\r\n length: number;\r\n}\r\n\r\nexport interface IConstants {\r\n strings: string[];\r\n literals: Literal[];\r\n regexes: IRegEx[];\r\n eager: boolean;\r\n}\r\n\r\nexport interface IExecutionTree {\r\n tree: Lisp[];\r\n constants: IConstants;\r\n}\r\n\r\ntype LispCallback<T> = (\r\n strings: IConstants,\r\n type: T,\r\n part: CodeString,\r\n res: string[],\r\n expect: string,\r\n ctx: { lispTree: Lisp },\r\n) => any;\r\nconst lispTypes: Map<string, LispCallback<string>> = new Map();\r\n\r\nexport class ParseError extends Error {\r\n constructor(\r\n message: string,\r\n public code: string,\r\n ) {\r\n super(message + ': ' + code.substring(0, 40));\r\n }\r\n}\r\n\r\nlet lastType: CodeString | string;\r\nlet lastPart: CodeString | string;\r\nlet lastLastPart: CodeString | string;\r\nlet lastLastLastPart: CodeString | string;\r\nlet lastLastLastLastPart: CodeString | string;\r\n\r\nconst inlineIfElse = /^:/;\r\nconst elseIf = /^else(?![\\w$])/;\r\nconst ifElse = /^if(?![\\w$])/;\r\nconst space = /^\\s/;\r\n\r\nexport const expectTypes = {\r\n splitter: {\r\n types: {\r\n power: /^(\\*\\*)(?!=)/,\r\n opHigh: /^(\\/|\\*(?!\\*)|%)(?!=)/,\r\n op: /^(\\+(?!(\\+))|-(?!(-)))(?!=)/,\r\n comparitor: /^(<=|>=|<(?!<)|>(?!>)|!==|!=(?!=)|===|==)/,\r\n bitwiseShift: /^(<<|>>(?!>)|>>>)(?!=)/,\r\n bitwiseAnd: /^(&(?!&))(?!=)/,\r\n bitwiseXor: /^(\\^)(?!=)/,\r\n bitwiseOr: /^(\\|(?!\\|))(?!=)/,\r\n boolOpAnd: /^(&&)(?!=)/,\r\n boolOpOr: /^(\\|\\|(?!=)|instanceof(?![\\w$])|in(?![\\w$]))/,\r\n nullishCoalescing: /^\\?\\?(?!=)/,\r\n },\r\n next: ['modifier', 'value', 'prop', 'incrementerBefore'],\r\n },\r\n inlineIf: {\r\n types: {\r\n inlineIf: /^\\?(?!\\.(?!\\d))/,\r\n },\r\n next: ['expEnd'],\r\n },\r\n assignment: {\r\n types: {\r\n assignModify: /^(-=|\\+=|\\/=|\\*\\*=|\\*=|%=|\\^=|&=|\\|=|>>>=|>>=|<<=|&&=|\\|\\|=|\\?\\?=)/,\r\n assign: /^(=)(?!=)/,\r\n },\r\n next: ['modifier', 'value', 'prop', 'incrementerBefore'],\r\n },\r\n incrementerBefore: {\r\n types: { incrementerBefore: /^(\\+\\+|--)/ },\r\n next: ['prop'],\r\n },\r\n expEdge: {\r\n types: {\r\n call: /^(\\?\\.)?[(]/,\r\n incrementerAfter: /^(\\+\\+|--)/,\r\n taggedTemplate: /^`(\\d+)`/,\r\n },\r\n next: ['splitter', 'expEdge', 'dot', 'inlineIf', 'expEnd'],\r\n },\r\n modifier: {\r\n types: {\r\n not: /^!/,\r\n inverse: /^~/,\r\n negative: /^-(?!-)/,\r\n positive: /^\\+(?!\\+)/,\r\n typeof: /^typeof(?![\\w$])/,\r\n delete: /^delete(?![\\w$])/,\r\n },\r\n next: ['modifier', 'value', 'prop', 'incrementerBefore'],\r\n },\r\n dot: {\r\n types: {\r\n arrayProp: /^(\\?\\.)?\\[/,\r\n dot: /^(\\?)?\\.(?=\\s*[a-zA-Z$_])/,\r\n },\r\n next: ['splitter', 'assignment', 'expEdge', 'dot', 'inlineIf', 'expEnd'],\r\n },\r\n prop: {\r\n types: {\r\n prop: /^[a-zA-Z$_][a-zA-Z\\d$_]*/,\r\n },\r\n next: ['splitter', 'assignment', 'expEdge', 'dot', 'inlineIf', 'expEnd'],\r\n },\r\n value: {\r\n types: {\r\n createObject: /^\\{/,\r\n createArray: /^\\[/,\r\n number:\r\n /^(0b[01]+(_[01]+)*|0o[0-7]+(_[0-7]+)*|0x[\\da-f]+(_[\\da-f]+)*|(\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?|\\.\\d+(_\\d+)*))(e[+-]?\\d+(_\\d+)*)?(n)?(?!\\d)/i,\r\n string: /^\"(\\d+)\"/,\r\n literal: /^`(\\d+)`/,\r\n regex: /^\\/(\\d+)\\/r(?![\\w$])/,\r\n boolean: /^(true|false)(?![\\w$])/,\r\n null: /^null(?![\\w$])/,\r\n und: /^undefined(?![\\w$])/,\r\n arrowFunctionSingle: /^(async\\s+)?([a-zA-Z$_][a-zA-Z\\d$_]*)\\s*=>\\s*({)?/,\r\n arrowFunction:\r\n /^(async\\s*)?\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*)*)?\\s*\\)\\s*=>\\s*({)?/,\r\n inlineFunction:\r\n /^(async\\s+)?function(\\s*[a-zA-Z$_][a-zA-Z\\d$_]*)?\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*)*)?\\s*\\)\\s*{/,\r\n group: /^\\(/,\r\n NaN: /^NaN(?![\\w$])/,\r\n Infinity: /^Infinity(?![\\w$])/,\r\n void: /^void(?![\\w$])\\s*/,\r\n await: /^await(?![\\w$])\\s*/,\r\n new: /^new(?![\\w$])\\s*/,\r\n },\r\n next: ['splitter', 'expEdge', 'dot', 'inlineIf', 'expEnd'],\r\n },\r\n initialize: {\r\n types: {\r\n initialize: /^(var|let|const)\\s+([a-zA-Z$_][a-zA-Z\\d$_]*)\\s*(=)?/,\r\n return: /^return(?![\\w$])/,\r\n throw: /^throw(?![\\w$])\\s*/,\r\n },\r\n next: ['modifier', 'value', 'prop', 'incrementerBefore', 'expEnd'],\r\n },\r\n spreadObject: {\r\n types: {\r\n spreadObject: /^\\.\\.\\./,\r\n },\r\n next: ['value', 'prop'],\r\n },\r\n spreadArray: {\r\n types: {\r\n spreadArray: /^\\.\\.\\./,\r\n },\r\n next: ['value', 'prop'],\r\n },\r\n expEnd: { types: {}, next: [] },\r\n expFunction: {\r\n types: {\r\n function:\r\n /^(async\\s+)?function(\\s*[a-zA-Z$_][a-zA-Z\\d$_]*)\\s*\\(\\s*((\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*(\\s*,\\s*(\\.\\.\\.)?\\s*[a-zA-Z$_][a-zA-Z\\d$_]*)*)?\\s*\\)\\s*{/,\r\n },\r\n next: ['expEdge', 'expEnd'],\r\n },\r\n expSingle: {\r\n types: {\r\n for: /^(([a-zA-Z$_][\\w$]*)\\s*:)?\\s*for\\s*\\(/,\r\n do: /^(([a-zA-Z$_][\\w$]*)\\s*:)?\\s*do(?![\\w$])\\s*(\\{)?/,\r\n while: /^(([a-zA-Z$_][\\w$]*)\\s*:)?\\s*while\\s*\\(/,\r\n loopAction: /^(break|continue)(?![\\w$])\\s*([a-zA-Z$_][\\w$]*)?/,\r\n if: /^((([a-zA-Z$_][\\w$]*)\\s*:)?\\s*)if\\s*\\(/,\r\n try: /^try\\s*{/,\r\n block: /^{/,\r\n switch: /^(([a-zA-Z$_][\\w$]*)\\s*:)?\\s*switch\\s*\\(/,\r\n },\r\n next: ['expEnd'],\r\n },\r\n} as Record<string, { types: Record<string, RegExp>; next: string[] }>;\r\n\r\nconst closings = {\r\n '(': ')',\r\n '[': ']',\r\n '{': '}',\r\n \"'\": \"'\",\r\n '\"': '\"',\r\n '`': '`',\r\n} as Record<string, string>;\r\n\r\nexport function testMultiple(str: string, tests: RegExp[]) {\r\n let found: RegExpExecArray | null = null;\r\n for (let i = 0; i < tests.length; i++) {\r\n const test = tests[i];\r\n found = test.exec(str);\r\n if (found) break;\r\n }\r\n return found;\r\n}\r\n\r\nconst emptyString = new CodeString('');\r\n\r\nconst okFirstChars = /^[+\\-~ !]/;\r\nconst aNumber = expectTypes.value.types.number;\r\nconst wordReg = /^((if|for|else|while|do|function)(?![\\w$])|[\\w$]+)/;\r\nconst semiColon = /^;/;\r\nconst insertedSemicolons: WeakMap<{ str: string }, Array<number>> = new WeakMap();\r\nconst quoteCache: WeakMap<{ str: string }, Map<number, number>> = new WeakMap();\r\nexport interface restDetails {\r\n oneliner?: boolean;\r\n words?: string[];\r\n lastWord?: string;\r\n lastAnyWord?: string;\r\n regRes?: RegExpExecArray;\r\n bodyContentAfterKeyword?: boolean;\r\n}\r\nexport function restOfExp(\r\n constants: IConstants,\r\n part: CodeString,\r\n tests?: RegExp[],\r\n quote?: string,\r\n firstOpening?: string,\r\n closingsTests?: RegExp[],\r\n details: restDetails = {},\r\n): CodeString {\r\n if (!part.length) {\r\n return part;\r\n }\r\n details.words = details.words || [];\r\n let isStart = true;\r\n tests = tests || [];\r\n const hasSemiTest = tests.includes(semiColon);\r\n if (hasSemiTest) {\r\n tests = tests.filter((a) => a !== semiColon);\r\n }\r\n const insertedSemis = insertedSemicolons.get(part.ref) || [];\r\n const cache = quoteCache.get(part.ref) || new Map<number, number>();\r\n quoteCache.set(part.ref, cache);\r\n if (quote && cache.has(part.start - 1)) {\r\n return part.substring(0, cache.get(part.start - 1)! - part.start);\r\n }\r\n let escape = false;\r\n let done = false;\r\n let lastChar = '';\r\n let isOneLiner = false;\r\n let i;\r\n let lastInertedSemi = false;\r\n let seenKeyword = false;\r\n let skipNextWord = false;\r\n for (i = 0; i < part.length && !done; i++) {\r\n let char = part.char(i)!;\r\n if (quote === '\"' || quote === \"'\" || quote === '`') {\r\n if (quote === '`' && char === '$' && part.char(i + 1) === '{' && !escape) {\r\n const skip = restOfExp(constants, part.substring(i + 2), [], '{');\r\n i += skip.length + 2;\r\n } else if (char === quote && !escape) {\r\n return part.substring(0, i);\r\n }\r\n escape = !escape && char === '\\\\';\r\n } else if (closings[char]) {\r\n if (!lastInertedSemi && insertedSemis[i + part.start]) {\r\n lastInertedSemi = true;\r\n if (hasSemiTest) {\r\n break;\r\n }\r\n i--;\r\n lastChar = ';';\r\n continue;\r\n }\r\n if (isOneLiner && char === '{') {\r\n isOneLiner = false;\r\n }\r\n if (char === firstOpening) {\r\n done = true;\r\n break;\r\n } else {\r\n const skip = restOfExp(constants, part.substring(i + 1), [], char);\r\n cache.set(skip.start - 1, skip.end);\r\n i += skip.length + 1;\r\n isStart = false;\r\n if (closingsTests) {\r\n const sub = part.substring(i);\r\n let found: RegExpExecArray | null;\r\n if ((found = testMultiple(sub.toString(), closingsTests))) {\r\n details.regRes = found;\r\n done = true;\r\n }\r\n }\r\n }\r\n } else if (!quote) {\r\n let sub = part.substring(i).toString();\r\n let foundWord: RegExpExecArray | null;\r\n let foundNumber: RegExpExecArray | null;\r\n if (closingsTests) {\r\n let found: RegExpExecArray | null;\r\n if ((found = testMultiple(sub, closingsTests))) {\r\n details.regRes = found;\r\n i++;\r\n done = true;\r\n break;\r\n }\r\n }\r\n if ((foundNumber = aNumber.exec(sub))) {\r\n i += foundNumber[0].length - 1;\r\n sub = part.substring(i).toString();\r\n if (closingsTests) {\r\n let found: RegExpExecArray | null;\r\n if ((found = testMultiple(sub, closingsTests))) {\r\n details.regRes = found;\r\n i++;\r\n done = true;\r\n break;\r\n }\r\n }\r\n } else if (lastChar != char) {\r\n let found: [string] | RegExpExecArray | null = null;\r\n if (char === ';' || (insertedSemis[i + part.start] && !isStart && !lastInertedSemi)) {\r\n if (hasSemiTest) {\r\n found = [';'];\r\n } else if (insertedSemis[i + part.start]) {\r\n lastInertedSemi = true;\r\n i--;\r\n lastChar = ';';\r\n continue;\r\n }\r\n char = sub = ';';\r\n } else {\r\n lastInertedSemi = false;\r\n }\r\n if (!found) {\r\n found = testMultiple(sub, tests);\r\n }\r\n if (found) {\r\n done = true;\r\n }\r\n if (!done && (foundWord = wordReg.exec(sub))) {\r\n isOneLiner = true;\r\n if (foundWord[2]) {\r\n seenKeyword = true;\r\n skipNextWord = true;\r\n } else if (seenKeyword) {\r\n if (skipNextWord) {\r\n skipNextWord = false;\r\n } else {\r\n details.bodyContentAfterKeyword = true;\r\n }\r\n }\r\n if (foundWord[0].length > 1) {\r\n details.words.push(foundWord[1]);\r\n details.lastAnyWord = foundWord[1];\r\n if (foundWord[2]) {\r\n details.lastWord = foundWord[2];\r\n }\r\n }\r\n if (foundWord[0].length > 2) {\r\n i += foundWord[0].length - 2;\r\n }\r\n }\r\n }\r\n if (isStart) {\r\n if (okFirstChars.test(sub)) {\r\n done = false;\r\n } else {\r\n isStart = false;\r\n }\r\n }\r\n if (done) break;\r\n } else if (char === closings[quote]) {\r\n return part.substring(0, i);\r\n }\r\n lastChar = char;\r\n }\r\n if (quote) {\r\n throw new SyntaxError(\"Unclosed '\" + quote + \"'\");\r\n }\r\n if (details) {\r\n details.oneliner = isOneLiner;\r\n }\r\n return part.substring(0, i);\r\n}\r\nrestOfExp.next = ['splitter', 'expEnd', 'inlineIf'];\r\n\r\nconst startingExecpted = [\r\n 'initialize',\r\n 'expSingle',\r\n 'expFunction',\r\n 'value',\r\n 'modifier',\r\n 'prop',\r\n 'incrementerBefore',\r\n 'expEnd',\r\n];\r\n\r\nexport const setLispType = <T extends readonly string[]>(types: T, fn: LispCallback<T[number]>) => {\r\n types.forEach((type) => {\r\n lispTypes.set(type, fn);\r\n });\r\n};\r\n\r\nconst closingsCreate: { [type: string]: RegExp } = {\r\n createArray: /^\\]/,\r\n createObject: /^\\}/,\r\n group: /^\\)/,\r\n arrayProp: /^\\]/,\r\n call: /^\\)/,\r\n};\r\n\r\nconst typesCreate = {\r\n createArray: LispType.CreateArray,\r\n createObject: LispType.CreateObject,\r\n group: LispType.Group,\r\n arrayProp: LispType.ArrayProp,\r\n call: LispType.Call,\r\n prop: LispType.Prop,\r\n '?prop': LispType.PropOptional,\r\n '?call': LispType.CallOptional,\r\n} as any;\r\n\r\nsetLispType(\r\n ['createArray', 'createObject', 'group', 'arrayProp', 'call'] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n let extract = emptyString;\r\n const arg: CodeString[] = [];\r\n let end = false;\r\n let i = res[0].length;\r\n const start = i;\r\n while (i < part.length && !end) {\r\n extract = restOfExp(constants, part.substring(i), [closingsCreate[type], /^,/]);\r\n i += extract.length;\r\n if (extract.trim().length) {\r\n arg.push(extract);\r\n }\r\n if (part.char(i) !== ',') {\r\n end = true;\r\n } else {\r\n i++;\r\n }\r\n }\r\n const next = ['value', 'modifier', 'prop', 'incrementerBefore', 'expEnd'];\r\n let l: Lisp | Lisp[];\r\n\r\n let funcFound: RegExpExecArray | null;\r\n switch (type) {\r\n case 'group':\r\n case 'arrayProp':\r\n l = lispifyExpr(constants, part.substring(start, i));\r\n break;\r\n case 'call':\r\n case 'createArray':\r\n // @TODO: support 'empty' values\r\n l = arg.map((e) => lispify(constants, e, [...next, 'spreadArray']));\r\n break;\r\n case 'createObject':\r\n l = arg.map((str) => {\r\n str = str.trimStart();\r\n let value: Lisp;\r\n let key: string | Lisp = '';\r\n funcFound = expectTypes.expFunction.types.function.exec('function ' + str);\r\n if (funcFound) {\r\n key = funcFound[2].trimStart();\r\n value = lispify(\r\n constants,\r\n new CodeString('function ' + str.toString().replace(key, '')),\r\n );\r\n } else {\r\n const extract = restOfExp(constants, str, [/^:/]);\r\n key = lispify(constants, extract, [...next, 'spreadObject']) as Prop;\r\n\r\n // Check if this is a spread object\r\n if (isLisp(key) && key[0] === LispType.SpreadObject) {\r\n // For spread objects, there's no separate value\r\n value = NullLisp;\r\n } else {\r\n // Extract the property name from Prop if needed\r\n if (key[0] === LispType.Prop) {\r\n key = (key as Prop)[2];\r\n }\r\n\r\n // Check if there's a colon (property with value) or not (property shorthand)\r\n if (str.length > extract.length && str.char(extract.length) === ':') {\r\n // Property with explicit value: {key: value}\r\n value = lispify(constants, str.substring(extract.length + 1));\r\n } else {\r\n // Property shorthand: {key} is equivalent to {key: key}\r\n // Parse the key name as a variable reference\r\n value = lispify(constants, extract, next);\r\n }\r\n }\r\n }\r\n return createLisp<KeyVal>({\r\n op: LispType.KeyVal,\r\n a: key,\r\n b: value,\r\n });\r\n });\r\n break;\r\n }\r\n const lisptype = (\r\n type === 'arrayProp'\r\n ? res[1]\r\n ? LispType.PropOptional\r\n : LispType.Prop\r\n : type === 'call'\r\n ? res[1]\r\n ? LispType.CallOptional\r\n : LispType.Call\r\n : typesCreate[type]\r\n ) as (typeof typesCreate)[keyof typeof typesCreate];\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(i + 1),\r\n expectTypes[expect].next,\r\n createLisp<\r\n ArrayProp | Prop | Call | CreateObject | CreateArray | Group | PropOptional | CallOptional\r\n >({\r\n op: lisptype,\r\n a: ctx.lispTree,\r\n b: l,\r\n }),\r\n );\r\n },\r\n);\r\n\r\nconst modifierTypes = {\r\n inverse: LispType.Inverse,\r\n not: LispType.Not,\r\n positive: LispType.Positive,\r\n negative: LispType.Negative,\r\n typeof: LispType.Typeof,\r\n delete: LispType.Delete,\r\n} as const;\r\n\r\nsetLispType(\r\n ['inverse', 'not', 'negative', 'positive', 'typeof', 'delete'] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s.?\\w$]|\\?[^.])/]);\r\n\r\n // Check if the extracted expression contains an exponentiation operator at the top level\r\n // ECMAScript disallows unary operators before ** without parentheses\r\n const remainingAfterOperand = part.substring(extract.length + res[0].length);\r\n const remainingStr = remainingAfterOperand.trim().toString();\r\n if (remainingStr.startsWith('**')) {\r\n throw new SyntaxError(\r\n 'Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence',\r\n );\r\n }\r\n\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(extract.length + res[0].length),\r\n restOfExp.next,\r\n createLisp<Inverse | Not | Negative | Positive | Typeof | Delete>({\r\n op: modifierTypes[type],\r\n a: ctx.lispTree,\r\n b: lispify(constants, extract, expectTypes[expect].next),\r\n }),\r\n );\r\n },\r\n);\r\n\r\nsetLispType(['taggedTemplate'] as const, (constants, type, part, res, expect, ctx) => {\r\n // Tagged template: func`template`\r\n // Build a call with the literal strings array and interpolated values\r\n const literalIndex = res[1];\r\n const literal = constants.literals[parseInt(literalIndex)];\r\n const [, templateStr, jsExprs] = literal;\r\n\r\n // Extract the string parts and expression parts\r\n const stringParts: string[] = [];\r\n const expressions: Lisp[] = [];\r\n let currentStr = '';\r\n let i = 0;\r\n\r\n while (i < templateStr.length) {\r\n if (templateStr.substring(i, i + 2) === '${') {\r\n // Look ahead to check if this is a valid placeholder: ${digits}\r\n let j = i + 2;\r\n let exprIndex = '';\r\n let isValidPlaceholder = false;\r\n\r\n // Extract potential index and check for closing '}'\r\n while (j < templateStr.length && templateStr[j] !== '}') {\r\n exprIndex += templateStr[j];\r\n j++;\r\n }\r\n\r\n // Check if we found a closing '}' and the content is numeric\r\n if (j < templateStr.length && templateStr[j] === '}' && /^\\d+$/.test(exprIndex)) {\r\n isValidPlaceholder = true;\r\n }\r\n\r\n if (isValidPlaceholder) {\r\n // Valid placeholder - add current string and the expression\r\n stringParts.push(currentStr);\r\n currentStr = '';\r\n expressions.push(jsExprs[parseInt(exprIndex)]);\r\n i = j + 1; // skip past the '}'\r\n } else {\r\n // Not a valid placeholder - treat as literal text\r\n currentStr += templateStr[i];\r\n i++;\r\n }\r\n } else {\r\n currentStr += templateStr[i];\r\n i++;\r\n }\r\n }\r\n stringParts.push(currentStr);\r\n\r\n // Create array of string literals\r\n const stringsArray = stringParts.map((str) =>\r\n createLisp<StringIndex>({\r\n op: LispType.StringIndex,\r\n a: LispType.None,\r\n b: String(constants.strings.push(str) - 1),\r\n }),\r\n );\r\n\r\n // Create the strings array\r\n const stringsArrayLisp = createLisp<CreateArray>({\r\n op: LispType.CreateArray,\r\n a: createLisp({\r\n op: LispType.None,\r\n a: LispType.None,\r\n b: LispType.None,\r\n }),\r\n b: stringsArray,\r\n });\r\n\r\n // Create call with tag function\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length),\r\n expectTypes[expect].next,\r\n createLisp<Call>({\r\n op: LispType.Call,\r\n a: ctx.lispTree,\r\n b: [stringsArrayLisp, ...expressions],\r\n }),\r\n );\r\n});\r\n\r\nconst incrementTypes = {\r\n '++$': LispType.IncrementBefore,\r\n '--$': LispType.DecrementBefore,\r\n '$++': LispType.IncrementAfter,\r\n '$--': LispType.DecrementAfter,\r\n} as any;\r\n\r\nsetLispType(['incrementerBefore'] as const, (constants, type, part, res, expect, ctx) => {\r\n const extract = restOfExp(constants, part.substring(2), [/^[^\\s.\\w$]/]);\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(extract.length + 2),\r\n restOfExp.next,\r\n createLisp<IncrementBefore | DecrementBefore>({\r\n op: incrementTypes[res[0] + '$'],\r\n a: lispify(constants, extract, expectTypes[expect].next),\r\n b: LispType.None,\r\n }),\r\n );\r\n});\r\n\r\nsetLispType(['incrementerAfter'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length),\r\n expectTypes[expect].next,\r\n createLisp<IncrementAfter | DecrementAfter>({\r\n op: incrementTypes['$' + res[0]],\r\n a: ctx.lispTree,\r\n b: LispType.None,\r\n }),\r\n );\r\n});\r\n\r\nconst adderTypes = {\r\n '&&': LispType.And,\r\n '||': LispType.Or,\r\n '??': LispType.NullishCoalescing,\r\n instanceof: LispType.Instanceof,\r\n in: LispType.In,\r\n '=': LispType.Assign,\r\n '-=': LispType.SubractEquals,\r\n '+=': LispType.AddEquals,\r\n '/=': LispType.DivideEquals,\r\n '**=': LispType.PowerEquals,\r\n '*=': LispType.MultiplyEquals,\r\n '%=': LispType.ModulusEquals,\r\n '^=': LispType.BitNegateEquals,\r\n '&=': LispType.BitAndEquals,\r\n '|=': LispType.BitOrEquals,\r\n '>>>=': LispType.UnsignedShiftRightEquals,\r\n '<<=': LispType.ShiftLeftEquals,\r\n '>>=': LispType.ShiftRightEquals,\r\n '&&=': LispType.AndEquals,\r\n '||=': LispType.OrEquals,\r\n '??=': LispType.NullishCoalescingEquals,\r\n} as any;\r\n\r\nsetLispType(\r\n ['assign', 'assignModify', 'nullishCoalescing'] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = createLisp<\r\n | NullishCoalescing\r\n | Assigns\r\n | SubractEquals\r\n | AddEquals\r\n | DivideEquals\r\n | PowerEquals\r\n | MultiplyEquals\r\n | ModulusEquals\r\n | BitNegateEquals\r\n | BitAndEquals\r\n | BitOrEquals\r\n | UnsignedShiftRightEquals\r\n | ShiftLeftEquals\r\n | ShiftRightEquals\r\n | AndEquals\r\n | OrEquals\r\n | NullishCoalescingEquals\r\n >({\r\n op: adderTypes[res[0]],\r\n a: ctx.lispTree,\r\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next),\r\n });\r\n },\r\n);\r\n\r\nconst opTypes = {\r\n '&': LispType.BitAnd,\r\n '|': LispType.BitOr,\r\n '^': LispType.BitNegate,\r\n '<<': LispType.BitShiftLeft,\r\n '>>': LispType.BitShiftRight,\r\n '>>>': LispType.BitUnsignedShiftRight,\r\n '<=': LispType.SmallerEqualThan,\r\n '>=': LispType.LargerEqualThan,\r\n '<': LispType.SmallerThan,\r\n '>': LispType.LargerThan,\r\n '!==': LispType.StrictNotEqual,\r\n '!=': LispType.NotEqual,\r\n '===': LispType.StrictEqual,\r\n '==': LispType.Equal,\r\n '+': LispType.Plus,\r\n '-': LispType.Minus,\r\n '/': LispType.Divide,\r\n '**': LispType.Power,\r\n '*': LispType.Multiply,\r\n '%': LispType.Modulus,\r\n '&&': LispType.And,\r\n '||': LispType.Or,\r\n instanceof: LispType.Instanceof,\r\n in: LispType.In,\r\n} as any;\r\n\r\n// Combined handler for all binary operators with configurable precedence\r\nsetLispType(\r\n [\r\n 'power',\r\n 'opHigh',\r\n 'op',\r\n 'comparitor',\r\n 'bitwiseShift',\r\n 'bitwiseAnd',\r\n 'bitwiseXor',\r\n 'bitwiseOr',\r\n 'boolOpAnd',\r\n 'boolOpOr',\r\n ] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n const next = [expectTypes.inlineIf.types.inlineIf, inlineIfElse];\r\n switch (type) {\r\n case 'power':\r\n // Right-associative: don't include power in next\r\n break;\r\n case 'opHigh':\r\n // opHigh should NOT stop at power - let it be consumed by the right operand\r\n next.push(expectTypes.splitter.types.opHigh);\r\n case 'op':\r\n next.push(expectTypes.splitter.types.op);\r\n case 'comparitor':\r\n next.push(expectTypes.splitter.types.comparitor);\r\n case 'bitwiseShift':\r\n next.push(expectTypes.splitter.types.bitwiseShift);\r\n case 'bitwiseAnd':\r\n next.push(expectTypes.splitter.types.bitwiseAnd);\r\n case 'bitwiseXor':\r\n next.push(expectTypes.splitter.types.bitwiseXor);\r\n case 'bitwiseOr':\r\n next.push(expectTypes.splitter.types.bitwiseOr);\r\n case 'boolOpAnd':\r\n next.push(expectTypes.splitter.types.boolOpAnd);\r\n case 'boolOpOr':\r\n next.push(expectTypes.splitter.types.boolOpOr);\r\n }\r\n const extract = restOfExp(constants, part.substring(res[0].length), next);\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(extract.length + res[0].length),\r\n restOfExp.next,\r\n createLisp<\r\n | BitAnd\r\n | BitOr\r\n | BitNegate\r\n | BitShiftLeft\r\n | BitShiftRight\r\n | BitUnsignedShiftRight\r\n | SmallerEqualThan\r\n | LargerEqualThan\r\n | SmallerThan\r\n | LargerThan\r\n | StrictNotEqual\r\n | NotEqual\r\n | StrictEqual\r\n | Equal\r\n | Plus\r\n | Minus\r\n | Divide\r\n | Power\r\n | Multiply\r\n | Modulus\r\n | And\r\n | Or\r\n | Instanceof\r\n | In\r\n >({\r\n op: opTypes[res[0]],\r\n a: ctx.lispTree,\r\n b: lispify(constants, extract, expectTypes[expect].next),\r\n }),\r\n );\r\n },\r\n);\r\n\r\nsetLispType(['inlineIf'] as const, (constants, type, part, res, expect, ctx) => {\r\n let found = false;\r\n const extract = part.substring(0, 0);\r\n let quoteCount = 1;\r\n while (!found && extract.length < part.length) {\r\n extract.end = restOfExp(constants, part.substring(extract.length + 1), [\r\n expectTypes.inlineIf.types.inlineIf,\r\n inlineIfElse,\r\n ]).end;\r\n if (part.char(extract.length) === '?') {\r\n quoteCount++;\r\n } else {\r\n quoteCount--;\r\n }\r\n if (!quoteCount) {\r\n found = true;\r\n }\r\n }\r\n extract.start = part.start + 1;\r\n ctx.lispTree = createLisp<InlineIf>({\r\n op: LispType.InlineIf,\r\n a: ctx.lispTree,\r\n b: createLisp<InlineIfCase>({\r\n op: LispType.InlineIfCase,\r\n a: lispifyExpr(constants, extract),\r\n b: lispifyExpr(constants, part.substring(res[0].length + extract.length + 1)),\r\n }),\r\n });\r\n});\r\n\r\nfunction extractIfElse(constants: IConstants, part: CodeString) {\r\n let count = 0;\r\n let found = part.substring(0, 0);\r\n let foundElse = emptyString;\r\n let foundTrue: CodeString | undefined;\r\n let first = true;\r\n let elseReg: RegExpExecArray | null;\r\n let details: restDetails = {};\r\n while (\r\n (found = restOfExp(\r\n constants,\r\n part.substring(found.end - part.start),\r\n [elseIf, ifElse, semiColon],\r\n undefined,\r\n undefined,\r\n undefined,\r\n details,\r\n )).length ||\r\n first\r\n ) {\r\n first = false;\r\n const f = part.substring(found.end - part.start).toString();\r\n\r\n if (f.startsWith('if')) {\r\n found.end++;\r\n count++;\r\n } else if (f.startsWith('else')) {\r\n foundTrue = part.substring(0, found.end - part.start);\r\n found.end++;\r\n count--;\r\n if (!count) {\r\n found.end--;\r\n }\r\n } else if ((elseReg = /^;?\\s*else(?![\\w$])/.exec(f))) {\r\n foundTrue = part.substring(0, found.end - part.start);\r\n found.end += elseReg[0].length - 1;\r\n count--;\r\n if (!count) {\r\n found.end -= elseReg[0].length - 1;\r\n }\r\n } else {\r\n foundTrue = foundElse.length ? foundTrue : part.substring(0, found.end - part.start);\r\n break;\r\n }\r\n if (!count) {\r\n const ie = extractIfElse(\r\n constants,\r\n part.substring(found.end - part.start + (/^;?\\s*else(?![\\w$])/.exec(f)?.[0].length || 0)),\r\n );\r\n foundElse = ie.all;\r\n break;\r\n }\r\n details = {};\r\n }\r\n foundTrue = foundTrue || part.substring(0, found.end - part.start);\r\n return {\r\n all: part.substring(0, Math.max(foundTrue.end, foundElse.end) - part.start),\r\n true: foundTrue,\r\n false: foundElse,\r\n };\r\n}\r\n\r\nsetLispType(['if'] as const, (constants, type, part, res, expect, ctx) => {\r\n let condition = restOfExp(constants, part.substring(res[0].length), [], '(');\r\n const ie = extractIfElse(constants, part.substring(res[1].length));\r\n const startTrue = res[0].length - res[1].length + condition.length + 1;\r\n\r\n let trueBlock = ie.true.substring(startTrue);\r\n let elseBlock = ie.false;\r\n\r\n condition = condition.trim();\r\n trueBlock = trueBlock.trim();\r\n elseBlock = elseBlock.trim();\r\n\r\n if (trueBlock.char(0) === '{') trueBlock = trueBlock.slice(1, -1);\r\n if (elseBlock.char(0) === '{') elseBlock = elseBlock.slice(1, -1);\r\n ctx.lispTree = createLisp<If>({\r\n op: LispType.If,\r\n a: lispifyExpr(constants, condition),\r\n b: createLisp<IfCase>({\r\n op: LispType.IfCase,\r\n a: lispifyBlock(trueBlock, constants),\r\n b: lispifyBlock(elseBlock, constants),\r\n }),\r\n });\r\n});\r\n\r\nsetLispType(['switch'] as const, (constants, type, part, res, expect, ctx) => {\r\n const test = restOfExp(constants, part.substring(res[0].length), [], '(');\r\n let start = part.toString().indexOf('{', res[0].length + test.length + 1);\r\n if (start === -1) throw new SyntaxError('Invalid switch');\r\n let statement = insertSemicolons(\r\n constants,\r\n restOfExp(constants, part.substring(start + 1), [], '{'),\r\n );\r\n let caseFound: RegExpExecArray | null;\r\n const caseTest = /^\\s*(case\\s|default)\\s*/;\r\n const cases: SwitchCase[] = [];\r\n let defaultFound = false;\r\n while ((caseFound = caseTest.exec(statement.toString()))) {\r\n if (caseFound[1] === 'default') {\r\n if (defaultFound) throw new SyntaxError('Only one default switch case allowed');\r\n defaultFound = true;\r\n }\r\n const cond = restOfExp(constants, statement.substring(caseFound[0].length), [/^:/]);\r\n let found = emptyString;\r\n let i = (start = caseFound[0].length + cond.length + 1);\r\n const bracketFound = /^\\s*\\{/.exec(statement.substring(i).toString());\r\n let exprs: Lisp[] = [];\r\n if (bracketFound) {\r\n i += bracketFound[0].length;\r\n found = restOfExp(constants, statement.substring(i), [], '{');\r\n i += found.length + 1;\r\n exprs = lispifyBlock(found, constants);\r\n } else {\r\n const notEmpty = restOfExp(constants, statement.substring(i), [caseTest]);\r\n if (!notEmpty.trim().length) {\r\n exprs = [];\r\n i += notEmpty.length;\r\n } else {\r\n while ((found = restOfExp(constants, statement.substring(i), [semiColon])).length) {\r\n i += found.length + (statement.char(i + found.length) === ';' ? 1 : 0);\r\n if (caseTest.test(statement.substring(i).toString())) {\r\n break;\r\n }\r\n }\r\n exprs = lispifyBlock(statement.substring(start, found.end - statement.start), constants);\r\n }\r\n }\r\n statement = statement.substring(i);\r\n cases.push(\r\n createLisp<SwitchCase>({\r\n op: LispType.SwitchCase,\r\n a: caseFound[1] === 'default' ? LispType.None : lispifyExpr(constants, cond),\r\n b: exprs,\r\n }),\r\n );\r\n }\r\n ctx.lispTree = createLisp<Switch>({\r\n op: LispType.Switch,\r\n a: lispifyExpr(constants, test),\r\n b: cases,\r\n });\r\n});\r\n\r\nsetLispType(['dot', 'prop'] as const, (constants, type, part, res, expect, ctx) => {\r\n let prop = res[0];\r\n let index = res[0].length;\r\n let op = 'prop';\r\n if (type === 'dot') {\r\n if (res[1]) {\r\n op = '?prop';\r\n }\r\n const matches = part.substring(res[0].length).toString().match(expectTypes.prop.types.prop);\r\n if (matches && matches.length) {\r\n prop = matches[0];\r\n index = prop.length + res[0].length;\r\n } else {\r\n throw new SyntaxError('Hanging dot');\r\n }\r\n } else {\r\n if (reservedWords.has(prop) && prop !== 'this') {\r\n throw new SyntaxError(`Unexpected token '${prop}'`);\r\n }\r\n }\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(index),\r\n expectTypes[expect].next,\r\n createLisp<Prop | PropOptional>({\r\n op: typesCreate[op],\r\n a: ctx.lispTree,\r\n b: prop,\r\n }),\r\n );\r\n});\r\n\r\nsetLispType(['spreadArray', 'spreadObject'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = createLisp<SpreadArray | SpreadObject>({\r\n op: type === 'spreadArray' ? LispType.SpreadArray : LispType.SpreadObject,\r\n a: LispType.None,\r\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next),\r\n });\r\n});\r\n\r\nsetLispType(['return', 'throw'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = createLisp<Return | Throw>({\r\n op: type === 'return' ? LispType.Return : LispType.Throw,\r\n a: LispType.None,\r\n b: lispifyExpr(constants, part.substring(res[0].length)),\r\n });\r\n});\r\n\r\nsetLispType(\r\n ['number', 'boolean', 'null', 'und', 'NaN', 'Infinity'] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length),\r\n expectTypes[expect].next,\r\n createLisp<Number | BigInt | GlobalSymbol>({\r\n op:\r\n type === 'number' ? (res[12] ? LispType.BigInt : LispType.Number) : LispType.GlobalSymbol,\r\n a: LispType.None,\r\n b: res[12] ? res[1] : res[0],\r\n }),\r\n );\r\n },\r\n);\r\n\r\nsetLispType(['string', 'literal', 'regex'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length),\r\n expectTypes[expect].next,\r\n createLisp<StringIndex | LiteralIndex | RegexIndex>({\r\n op:\r\n type === 'string'\r\n ? LispType.StringIndex\r\n : type === 'literal'\r\n ? LispType.LiteralIndex\r\n : LispType.RegexIndex,\r\n a: LispType.None,\r\n b: res[1],\r\n }),\r\n );\r\n});\r\n\r\nsetLispType(['initialize'] as const, (constants, type, part, res, expect, ctx) => {\r\n const lt = res[1] === 'var' ? LispType.Var : res[1] === 'let' ? LispType.Let : LispType.Const;\r\n if (!res[3]) {\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length),\r\n expectTypes[expect].next,\r\n createLisp<Var | Let | Const>({\r\n op: lt,\r\n a: res[2],\r\n b: LispType.None,\r\n }),\r\n );\r\n } else {\r\n ctx.lispTree = createLisp<Var | Let | Const>({\r\n op: lt,\r\n a: res[2],\r\n b: lispify(constants, part.substring(res[0].length), expectTypes[expect].next),\r\n });\r\n }\r\n});\r\n\r\nsetLispType(\r\n ['function', 'inlineFunction', 'arrowFunction', 'arrowFunctionSingle'] as const,\r\n (constants, type, part, res, expect, ctx) => {\r\n const isArrow = type !== 'function' && type !== 'inlineFunction';\r\n const isReturn = isArrow && !res[res.length - 1];\r\n const argPos = isArrow ? 2 : 3;\r\n const isAsync = res[1] ? LispType.True : LispType.None;\r\n const args: string[] = res[argPos] ? res[argPos].replace(/\\s+/g, '').split(/,/g) : [];\r\n if (!isArrow) {\r\n args.unshift((res[2] || '').trimStart());\r\n }\r\n let ended = false;\r\n args.forEach((arg: string) => {\r\n if (ended) throw new SyntaxError('Rest parameter must be last formal parameter');\r\n if (arg.startsWith('...')) ended = true;\r\n });\r\n const f = restOfExp(\r\n constants,\r\n part.substring(res[0].length),\r\n !isReturn ? [/^}/] : [/^[,)}\\]]/, semiColon],\r\n );\r\n const func = isReturn ? 'return ' + f : f.toString();\r\n args.forEach((arg: string) => {\r\n if (reservedWords.has(arg.replace(/^\\.\\.\\./, ''))) {\r\n throw new SyntaxError(`Unexpected token '${arg}'`);\r\n }\r\n });\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length + func.length + 1),\r\n expectTypes[expect].next,\r\n createLisp<Function | InlineFunction | ArrowFunction>({\r\n op: isArrow\r\n ? LispType.ArrowFunction\r\n : type === 'function'\r\n ? LispType.Function\r\n : LispType.InlineFunction,\r\n a: [isAsync, ...args],\r\n b: constants.eager ? lispifyFunction(new CodeString(func), constants) : func,\r\n }),\r\n );\r\n },\r\n);\r\n\r\nconst iteratorRegex = /^((let|var|const)\\s+)?\\s*([a-zA-Z$_][a-zA-Z\\d$_]*)\\s+(in|of)(?![\\w$])/;\r\nsetLispType(['for', 'do', 'while'] as const, (constants, type, part, res, expect, ctx) => {\r\n let i = 0;\r\n let startStep: LispItem = LispType.True;\r\n let startInternal: Lisp[] = [];\r\n let getIterator: Lisp | LispType.None = LispType.None;\r\n let beforeStep: LispItem = LispType.None;\r\n let checkFirst = LispType.True;\r\n let condition: LispItem;\r\n let step: LispItem = LispType.True;\r\n let body: CodeString;\r\n switch (type) {\r\n case 'while': {\r\n i = part.toString().indexOf('(') + 1;\r\n const extract = restOfExp(constants, part.substring(i), [], '(');\r\n condition = lispifyReturnExpr(constants, extract);\r\n body = restOfExp(constants, part.substring(i + extract.length + 1)).trim();\r\n if (body.char(0) === '{') body = body.slice(1, -1);\r\n break;\r\n }\r\n case 'for': {\r\n i = part.toString().indexOf('(') + 1;\r\n const args: CodeString[] = [];\r\n let extract2 = emptyString;\r\n for (let k = 0; k < 3; k++) {\r\n extract2 = restOfExp(constants, part.substring(i), [/^[;)]/]);\r\n args.push(extract2.trim());\r\n i += extract2.length + 1;\r\n if (part.char(i - 1) === ')') break;\r\n }\r\n let iterator: RegExpExecArray | null;\r\n if (args.length === 1 && (iterator = iteratorRegex.exec(args[0].toString()))) {\r\n if (iterator[4] === 'of') {\r\n ((getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length))),\r\n (startInternal = [ofStart2, ofStart3]));\r\n condition = ofCondition;\r\n step = ofStep;\r\n beforeStep = lispify(\r\n constants,\r\n new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$next.value'),\r\n ['initialize'],\r\n );\r\n } else {\r\n ((getIterator = lispifyReturnExpr(constants, args[0].substring(iterator[0].length))),\r\n (startInternal = [inStart2, inStart3]));\r\n step = inStep;\r\n condition = inCondition;\r\n beforeStep = lispify(\r\n constants,\r\n new CodeString((iterator[1] || 'let ') + iterator[3] + ' = $$keys[$$keyIndex]'),\r\n ['initialize'],\r\n );\r\n }\r\n } else if (args.length === 3) {\r\n startStep = lispifyExpr(constants, args.shift()!, startingExecpted);\r\n condition = lispifyReturnExpr(constants, args.shift()!);\r\n step = lispifyExpr(constants, args.shift()!);\r\n } else {\r\n throw new SyntaxError('Invalid for loop definition');\r\n }\r\n body = restOfExp(constants, part.substring(i)).trim();\r\n if (body.char(0) === '{') body = body.slice(1, -1);\r\n\r\n break;\r\n }\r\n case 'do': {\r\n checkFirst = LispType.None;\r\n const isBlock = !!res[3];\r\n body = restOfExp(constants, part.substring(res[0].length), isBlock ? [/^\\}/] : [semiColon]);\r\n condition = lispifyReturnExpr(\r\n constants,\r\n restOfExp(\r\n constants,\r\n part.substring(part.toString().indexOf('(', res[0].length + body.length) + 1),\r\n [],\r\n '(',\r\n ),\r\n );\r\n break;\r\n }\r\n }\r\n const a = [\r\n checkFirst,\r\n startInternal,\r\n getIterator,\r\n startStep,\r\n step,\r\n condition,\r\n beforeStep,\r\n ] as LispItem;\r\n ctx.lispTree = createLisp<Loop>({\r\n op: LispType.Loop,\r\n a,\r\n b: lispifyBlock(body, constants),\r\n });\r\n});\r\n\r\nsetLispType(['block'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = createLisp<Block>({\r\n op: LispType.Block,\r\n a: lispifyBlock(restOfExp(constants, part.substring(1), [], '{'), constants),\r\n b: LispType.None,\r\n });\r\n});\r\n\r\nsetLispType(['loopAction'] as const, (constants, type, part, res, expect, ctx) => {\r\n ctx.lispTree = createLisp<LoopAction>({\r\n op: LispType.LoopAction,\r\n a: res[1],\r\n b: LispType.None,\r\n });\r\n});\r\n\r\nconst catchReg = /^\\s*(catch\\s*(\\(\\s*([a-zA-Z$_][a-zA-Z\\d$_]*)\\s*\\))?|finally)\\s*\\{/;\r\nsetLispType(['try'] as const, (constants, type, part, res, expect, ctx) => {\r\n const body = restOfExp(constants, part.substring(res[0].length), [], '{');\r\n let catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\r\n let finallyBody;\r\n let exception = '';\r\n let catchBody;\r\n let offset = 0;\r\n if (catchRes![1].startsWith('catch')) {\r\n catchRes = catchReg.exec(part.substring(res[0].length + body.length + 1).toString());\r\n exception = catchRes![3] || ''; // Use group 3 for the identifier, or empty string if optional catch binding\r\n catchBody = restOfExp(\r\n constants,\r\n part.substring(res[0].length + body.length + 1 + catchRes![0].length),\r\n [],\r\n '{',\r\n );\r\n offset = res[0].length + body.length + 1 + catchRes![0].length + catchBody.length + 1;\r\n if (\r\n (catchRes = catchReg.exec(part.substring(offset).toString())) &&\r\n catchRes[1].startsWith('finally')\r\n ) {\r\n finallyBody = restOfExp(constants, part.substring(offset + catchRes[0].length), [], '{');\r\n }\r\n } else {\r\n finallyBody = restOfExp(\r\n constants,\r\n part.substring(res[0].length + body.length + 1 + catchRes![0].length),\r\n [],\r\n '{',\r\n );\r\n }\r\n const b = [\r\n exception,\r\n lispifyBlock(insertSemicolons(constants, catchBody || emptyString), constants),\r\n lispifyBlock(insertSemicolons(constants, finallyBody || emptyString), constants),\r\n ] as LispItem;\r\n ctx.lispTree = createLisp<Try>({\r\n op: LispType.Try,\r\n a: lispifyBlock(insertSemicolons(constants, body), constants),\r\n b,\r\n });\r\n});\r\n\r\nsetLispType(['void', 'await'] as const, (constants, type, part, res, expect, ctx) => {\r\n const extract = restOfExp(constants, part.substring(res[0].length), [/^([^\\s.?\\w$]|\\?[^.])/]);\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(res[0].length + extract.length),\r\n expectTypes[expect].next,\r\n createLisp<Void | Await>({\r\n op: type === 'void' ? LispType.Void : LispType.Await,\r\n a: lispify(constants, extract),\r\n b: LispType.None,\r\n }),\r\n );\r\n});\r\n\r\nsetLispType(['new'] as const, (constants, type, part, res, expect, ctx) => {\r\n let i = res[0].length;\r\n const obj = restOfExp(constants, part.substring(i), [], undefined, '(');\r\n i += obj.length + 1;\r\n const args: CodeString[] = [];\r\n if (part.char(i - 1) === '(') {\r\n const argsString = restOfExp(constants, part.substring(i), [], '(');\r\n i += argsString.length + 1;\r\n let found: CodeString;\r\n let j = 0;\r\n while ((found = restOfExp(constants, argsString.substring(j), [/^,/])).length) {\r\n j += found.length + 1;\r\n args.push(found.trim());\r\n }\r\n }\r\n ctx.lispTree = lispify(\r\n constants,\r\n part.substring(i),\r\n expectTypes.expEdge.next,\r\n createLisp({\r\n op: LispType.New,\r\n a: lispify(constants, obj, expectTypes.initialize.next),\r\n b: args.map((arg) => lispify(constants, arg, expectTypes.initialize.next)),\r\n }),\r\n );\r\n});\r\n\r\nconst ofStart2 = lispify(\r\n undefined as any,\r\n new CodeString('let $$iterator = $$obj[Symbol.iterator]()'),\r\n ['initialize'],\r\n);\r\nconst ofStart3 = lispify(undefined as any, new CodeString('let $$next = $$iterator.next()'), [\r\n 'initialize',\r\n]);\r\nconst ofCondition = lispify(undefined as any, new CodeString('return !$$next.done'), [\r\n 'initialize',\r\n]);\r\nconst ofStep = lispify(undefined as any, new CodeString('$$next = $$iterator.next()'));\r\nconst inStart2 = lispify(undefined as any, new CodeString('let $$keys = Object.keys($$obj)'), [\r\n 'initialize',\r\n]);\r\nconst inStart3 = lispify(undefined as any, new CodeString('let $$keyIndex = 0'), ['initialize']);\r\nconst inStep = lispify(undefined as any, new CodeString('$$keyIndex++'));\r\nconst inCondition = lispify(undefined as any, new CodeString('return $$keyIndex < $$keys.length'), [\r\n 'initialize',\r\n]);\r\n\r\nfunction lispify(\r\n constants: IConstants,\r\n part: CodeString,\r\n expected?: readonly string[],\r\n lispTree?: Lisp,\r\n topLevel = false,\r\n): Lisp {\r\n lispTree = lispTree || NullLisp;\r\n expected = expected || expectTypes.initialize.next;\r\n if (part === undefined) return lispTree;\r\n\r\n part = part.trimStart();\r\n const str = part.toString();\r\n if (!part.length && !expected.includes('expEnd')) {\r\n throw new SyntaxError('Unexpected end of expression');\r\n }\r\n if (!part.length) return lispTree;\r\n\r\n const ctx = { lispTree: lispTree };\r\n\r\n let res: any;\r\n for (const expect of expected) {\r\n if (expect === 'expEnd') {\r\n continue;\r\n }\r\n for (const type in expectTypes[expect].types) {\r\n if (type === 'expEnd') {\r\n continue;\r\n }\r\n if ((res = expectTypes[expect].types[type].exec(str))) {\r\n lastType = type;\r\n lastLastLastLastPart = lastLastLastPart;\r\n lastLastLastPart = lastLastPart;\r\n lastLastPart = lastPart;\r\n lastPart = part;\r\n try {\r\n lispTypes.get(type)?.(constants, type, part, res, expect, ctx);\r\n } catch (e) {\r\n if (topLevel && e instanceof SyntaxError) {\r\n throw new ParseError(e.message, str);\r\n }\r\n throw e;\r\n }\r\n break;\r\n }\r\n }\r\n if (res) break;\r\n }\r\n\r\n if (!res && part.length) {\r\n if (topLevel) {\r\n throw new ParseError(`Unexpected token after ${lastType}: ${part.char(0)}`, str);\r\n }\r\n throw new SyntaxError(`Unexpected token after ${lastType}: ${part.char(0)}`);\r\n }\r\n return ctx.lispTree;\r\n}\r\n\r\nconst startingExpectedWithoutSingle = startingExecpted.filter((r) => r !== 'expSingle');\r\n\r\nfunction lispifyExpr(constants: IConstants, str: CodeString, expected?: readonly string[]): Lisp {\r\n if (!str.trimStart().length) return NullLisp;\r\n const subExpressions: CodeString[] = [];\r\n let sub: CodeString;\r\n let pos = 0;\r\n expected = expected || expectTypes.initialize.next;\r\n if (expected.includes('expSingle')) {\r\n if (testMultiple(str.toString(), Object.values(expectTypes.expSingle.types))) {\r\n return lispify(constants, str, ['expSingle'], undefined, true);\r\n }\r\n }\r\n if (expected === startingExecpted) expected = startingExpectedWithoutSingle;\r\n while ((sub = restOfExp(constants, str.substring(pos), [/^,/])).length) {\r\n subExpressions.push(sub.trimStart());\r\n pos += sub.length + 1;\r\n }\r\n if (subExpressions.length === 1) {\r\n return lispify(constants, str, expected, undefined, true);\r\n }\r\n if (expected.includes('initialize')) {\r\n const defined = expectTypes.initialize.types.initialize.exec(subExpressions[0].toString());\r\n if (defined) {\r\n return createLisp<Block>({\r\n op: LispType.Block,\r\n a: subExpressions.map((str, i) =>\r\n lispify(\r\n constants,\r\n i ? new CodeString(defined![1] + ' ' + str) : str,\r\n ['initialize'],\r\n undefined,\r\n true,\r\n ),\r\n ),\r\n b: LispType.None,\r\n });\r\n } else if (expectTypes.initialize.types.return.exec(subExpressions[0].toString())) {\r\n return lispify(constants, str, expected, undefined, true);\r\n }\r\n }\r\n const exprs = subExpressions.map((str) => lispify(constants, str, expected, undefined, true));\r\n return createLisp<Expression>({ op: LispType.Expression, a: exprs, b: LispType.None });\r\n}\r\n\r\nexport function lispifyReturnExpr(constants: IConstants, str: CodeString) {\r\n return createLisp<Return>({\r\n op: LispType.Return,\r\n a: LispType.None,\r\n b: lispifyExpr(constants, str),\r\n });\r\n}\r\n\r\nexport function lispifyBlock(str: CodeString, constants: IConstants, expression = false): Lisp[] {\r\n str = insertSemicolons(constants, str);\r\n if (!str.trim().length) return [];\r\n const parts: CodeString[] = [];\r\n let part: CodeString;\r\n let pos = 0;\r\n let start = 0;\r\n let details: restDetails = {};\r\n let skipped = false;\r\n let isInserted = false;\r\n while (\r\n (part = restOfExp(\r\n constants,\r\n str.substring(pos),\r\n [semiColon],\r\n undefined,\r\n undefined,\r\n undefined,\r\n details,\r\n )).length\r\n ) {\r\n isInserted = !!(str.char(pos + part.length) && str.char(pos + part.length) !== ';');\r\n pos += part.length + (isInserted ? 0 : 1);\r\n if (/^\\s*else(?![\\w$])/.test(str.substring(pos).toString())) {\r\n skipped = true;\r\n } else if (\r\n details['words']?.includes('do') &&\r\n /^\\s*while(?![\\w$])/.test(str.substring(pos).toString())\r\n ) {\r\n skipped = true;\r\n } else {\r\n skipped = false;\r\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\r\n start = pos;\r\n }\r\n details = {};\r\n if (expression) break;\r\n }\r\n if (skipped) {\r\n parts.push(str.substring(start, pos - (isInserted ? 0 : 1)));\r\n }\r\n return parts\r\n .map((str) => str.trimStart())\r\n .filter((str) => str.length)\r\n .map((str) => {\r\n return lispifyExpr(constants, str.trimStart(), startingExecpted);\r\n });\r\n}\r\n\r\nexport function lispifyFunction(\r\n str: CodeString,\r\n constants: IConstants,\r\n expression = false,\r\n): Lisp[] {\r\n if (!str.trim().length) return [];\r\n const tree = lispifyBlock(str, constants, expression);\r\n hoist(tree);\r\n return tree;\r\n}\r\n\r\nfunction hoist(item: LispItem, res: Lisp[] = []): boolean {\r\n if (isLisp(item)) {\r\n if (!isLisp<LispFamily>(item)) return false;\r\n const [op, a, b] = item;\r\n if (\r\n op === LispType.Try ||\r\n op === LispType.If ||\r\n op === LispType.Loop ||\r\n op === LispType.Switch\r\n ) {\r\n hoist(a, res);\r\n hoist(b, res);\r\n } else if (op === LispType.Var) {\r\n res.push(createLisp({ op: LispType.Var, a: a, b: LispType.None }));\r\n } else if (op === LispType.Function && a[1]) {\r\n res.push(item);\r\n return true;\r\n }\r\n } else if (Array.isArray(item)) {\r\n const rep: LispItemSingle[] = [];\r\n for (const it of item) {\r\n if (!hoist(it, res)) {\r\n rep.push(it);\r\n }\r\n }\r\n if (rep.length !== item.length) {\r\n item.length = 0;\r\n item.push(...res, ...rep);\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nconst closingsNoInsertion = /^(\\})\\s*(catch|finally|else|while|instanceof)(?![\\w$])/;\r\n// \\w|)|] \\n \\w = 2 // \\} \\w|\\{ = 5\r\nconst colonsRegex = /^((([\\w$\\])\"'`]|\\+\\+|--)\\s*\\r?\\n\\s*([\\w$+\\-!~]))|(\\}\\s*[\\w$!~+\\-{(\"'`]))/;\r\n\r\n// if () \\w \\n; \\w == \\w \\n \\w | last === if a\r\n// if () { }; \\w == \\} ^else | last === if b\r\n// if () \\w \\n; else \\n \\w \\n; == \\w \\n \\w | last === else a\r\n// if () {} else {}; \\w == \\} \\w | last === else b\r\n// while () \\n \\w \\n; \\w == \\w \\n \\w | last === while a\r\n// while () { }; \\w == \\} \\w | last === while b\r\n// do \\w \\n; while (); \\w == \\w \\n while | last === do a\r\n// do { } while (); \\w == \\) \\w | last === while c\r\n// try {} catch () {}; \\w == \\} \\w | last === catch|finally b\r\n// \\w \\n; \\w == \\w \\n \\w | last === none a\r\n// cb() \\n \\w == \\) \\n \\w | last === none a\r\n// obj[a] \\n \\w == \\] \\n \\w | last === none a\r\n// {} {} == \\} \\{ | last === none b\r\n\r\nexport function insertSemicolons(constants: IConstants, str: CodeString): CodeString {\r\n let rest = str;\r\n let sub = emptyString;\r\n let details: restDetails = {};\r\n let pendingDoWhile = false;\r\n const inserted = insertedSemicolons.get(str.ref) || new Array(str.ref.str.length);\r\n while (\r\n (sub = restOfExp(constants, rest, [], undefined, undefined, [colonsRegex], details)).length\r\n ) {\r\n let valid = false;\r\n let part = sub;\r\n let edge = sub.length;\r\n if (details.regRes) {\r\n valid = true;\r\n const [, , a, , , b] = details.regRes;\r\n edge = details.regRes[3] === '++' || details.regRes[3] === '--' ? sub.length + 1 : sub.length;\r\n part = rest.substring(0, edge);\r\n if (b) {\r\n const res = closingsNoInsertion.exec(rest.substring(sub.length - 1).toString());\r\n if (res) {\r\n if (res[2] === 'while') {\r\n if (details.lastWord === 'do') {\r\n valid = false;\r\n pendingDoWhile = true;\r\n } else {\r\n valid = true;\r\n }\r\n } else {\r\n valid = false;\r\n }\r\n } else if (\r\n details.lastWord === 'function' &&\r\n details.regRes[5][0] === '}' &&\r\n details.regRes[5].slice(-1) === '('\r\n ) {\r\n valid = false;\r\n }\r\n } else if (a) {\r\n if (pendingDoWhile && details.lastWord === 'while') {\r\n valid = true;\r\n pendingDoWhile = false;\r\n } else if (\r\n details.lastWord === 'if' ||\r\n details.lastWord === 'while' ||\r\n details.lastWord === 'for' ||\r\n details.lastWord === 'else'\r\n ) {\r\n valid = !!details.bodyContentAfterKeyword;\r\n }\r\n }\r\n }\r\n if (valid) {\r\n inserted[part.end] = true;\r\n }\r\n rest = rest.substring(edge);\r\n details = {};\r\n }\r\n insertedSemicolons.set(str.ref, inserted);\r\n return str;\r\n}\r\n\r\nexport function checkRegex(str: string): IRegEx | null {\r\n let i = 1;\r\n let escape = false;\r\n let done = false;\r\n let cancel = false;\r\n while (i < str.length && !done && !cancel) {\r\n done = str[i] === '/' && !escape;\r\n escape = str[i] === '\\\\' && !escape;\r\n cancel = str[i] === '\\n';\r\n i++;\r\n }\r\n const after = str.substring(i);\r\n cancel = cancel || !done || /^\\s*\\d/.test(after);\r\n if (cancel) return null;\r\n const flags = /^[a-z]*/.exec(after);\r\n if (/^\\s+[\\w$]/.test(str.substring(i + flags![0].length))) {\r\n return null;\r\n }\r\n return {\r\n regex: str.substring(1, i - 1),\r\n flags: (flags && flags[0]) || '',\r\n length: i + ((flags && flags[0].length) || 0),\r\n };\r\n}\r\n\r\nconst notDivide = /(typeof|delete|instanceof|return|in|of|throw|new|void|do|if)$/;\r\nconst possibleDivide = /^([\\w$\\])]|\\+\\+|--)[\\s/]/;\r\nexport function extractConstants(\r\n constants: IConstants,\r\n str: string,\r\n currentEnclosure = '',\r\n): { str: string; length: number } {\r\n let quote;\r\n let extract: (string | number)[] = [];\r\n let escape = false;\r\n let regexFound: IRegEx | null;\r\n let comment = '';\r\n let commentStart = -1;\r\n let currJs: string[] = [];\r\n let char = '';\r\n const strRes: (string | number)[] = [];\r\n const enclosures: string[] = [];\r\n let isPossibleDivide: RegExpExecArray | null = null;\r\n let i = 0;\r\n for (i = 0; i < str.length; i++) {\r\n char = str[i];\r\n if (comment) {\r\n if (char === comment) {\r\n if (comment === '*' && str[i + 1] === '/') {\r\n comment = '';\r\n i++;\r\n } else if (comment === '\\n') {\r\n comment = '';\r\n strRes.push('\\n');\r\n }\r\n }\r\n } else {\r\n if (escape) {\r\n escape = false;\r\n extract.push(char);\r\n continue;\r\n }\r\n\r\n if (quote) {\r\n if (quote === '`' && char === '$' && str[i + 1] === '{') {\r\n const skip = extractConstants(constants, str.substring(i + 2), '{');\r\n currJs.push(skip.str);\r\n extract.push('${', currJs.length - 1, `}`);\r\n i += skip.length + 2;\r\n } else if (quote === char) {\r\n if (quote === '`') {\r\n const li = createLisp<Literal>({\r\n op: LispType.Literal,\r\n a: unraw(extract.join('')),\r\n b: [],\r\n });\r\n li.tempJsStrings = currJs;\r\n constants.literals.push(li);\r\n strRes.push(`\\``, constants.literals.length - 1, `\\``);\r\n } else {\r\n constants.strings.push(unraw(extract.join('')));\r\n strRes.push(`\"`, constants.strings.length - 1, `\"`);\r\n }\r\n quote = null;\r\n extract = [];\r\n } else {\r\n extract.push(char);\r\n }\r\n } else {\r\n if (char === \"'\" || char === '\"' || char === '`') {\r\n currJs = [];\r\n quote = char;\r\n } else if (closings[currentEnclosure] === char && !enclosures.length) {\r\n return { str: strRes.join(''), length: i };\r\n } else if (closings[char]) {\r\n enclosures.push(char);\r\n strRes.push(char);\r\n } else if (closings[enclosures[enclosures.length - 1]] === char) {\r\n enclosures.pop();\r\n strRes.push(char);\r\n } else if (char === '/' && (str[i + 1] === '*' || str[i + 1] === '/')) {\r\n comment = str[i + 1] === '*' ? '*' : '\\n';\r\n commentStart = i;\r\n } else if (\r\n char === '/' &&\r\n !isPossibleDivide &&\r\n (regexFound = checkRegex(str.substring(i)))\r\n ) {\r\n constants.regexes.push(regexFound);\r\n strRes.push(`/`, constants.regexes.length - 1, `/r`);\r\n i += regexFound.length - 1;\r\n } else {\r\n strRes.push(char);\r\n }\r\n\r\n if (!isPossibleDivide || !space.test(char)) {\r\n if ((isPossibleDivide = possibleDivide.exec(str.substring(i)))) {\r\n if (notDivide.test(str.substring(0, i + isPossibleDivide[1].length))) {\r\n isPossibleDivide = null;\r\n }\r\n }\r\n }\r\n }\r\n escape = !!(quote && char === '\\\\');\r\n }\r\n }\r\n\r\n if (comment) {\r\n if (comment === '*') {\r\n throw new SyntaxError(`Unclosed comment '/*': ${str.substring(commentStart)}`);\r\n }\r\n }\r\n return { str: strRes.join(''), length: i };\r\n}\r\n\r\nexport default function parse(code: string, eager = false, expression = false): IExecutionTree {\r\n if (typeof code !== 'string') throw new ParseError(`Cannot parse ${code}`, code);\r\n let str = ' ' + code;\r\n const constants: IConstants = { strings: [], literals: [], regexes: [], eager };\r\n str = extractConstants(constants, str).str;\r\n\r\n for (const l of constants.literals) {\r\n l[2] = l.tempJsStrings!.map((js: string) => lispifyExpr(constants, new CodeString(js)));\r\n delete l.tempJsStrings;\r\n }\r\n return { tree: lispifyFunction(new CodeString(str), constants, expression), constants };\r\n}\r\n"],"names":[],"mappings":";;AAAA;;;;;;;AAOG;AACH,SAAS,aAAa,CAAC,GAAW,EAAA;IAChC,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;AAC/C,IAAA,OAAO,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AACjD;AAEA;;;;;;;;;;AAUG;AACH,SAAS,mBAAmB,CAAC,GAAW,EAAE,SAAiB,EAAE,cAAuB,EAAA;AAClF,IAAA,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC;AACpC,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE;QAC9F,MAAM,IAAI,WAAW,CAAC,SAAS,GAAG,IAAI,GAAG,GAAG,CAAC;IAC/C;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;;;;;;;AAOG;AACH,SAAS,oBAAoB,CAAC,IAAY,EAAA;IACxC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;AACxE,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;AACxC;AAEA;;;;;;;;;AASG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,aAAsB,EAAA;IAC5D,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAEpE,IAAA,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC7D;AAEA,IAAA,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;AACxC;AAEA;;;;AAIG;AACH,SAAS,aAAa,CAAC,IAAY,EAAA;IACjC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;AACvE;AAEA;;;;;;;AAOG;AACH,SAAS,yBAAyB,CAAC,SAAiB,EAAA;AAClD,IAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;AAC7B,QAAA,MAAM,IAAI,WAAW,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC3D;IACA,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC;AAE1E,IAAA,IAAI;AACF,QAAA,OAAO,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC;IACzC;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,MAAM,GAAG,YAAY,UAAU,GAAG,IAAI,WAAW,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,GAAG;IAC3F;AACF;AAEA;;;AAGG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAiB;IACrD,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;AACZ,CAAA,CAAC;AAEF;;;;AAIG;AACH,SAAS,wBAAwB,CAAC,IAAY,EAAA;IAC5C,OAAO,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;AACjD;AAEA;;;;;;;;;;;;;;;AAeG;AACH,MAAM,WAAW,GACf,wHAAwH;AAE1H;;;;;;;;AAQG;AACG,SAAU,KAAK,CAAC,GAAW,EAAA;IAC/B,OAAO,GAAG,CAAC,OAAO,CAChB,WAAW,EACX,UACE,CAAC,EACD,SAAkB,EAClB,GAAY,EACZ,SAAkB,EAClB,oBAA6B,EAC7B,SAAkB,EAClB,OAAgB,EAChB,KAAc,EACd,eAAwB,EAAA;;;AAIxB,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,OAAO,oBAAoB,CAAC,GAAG,CAAC;QAClC;AACA,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,OAAO,yBAAyB,CAAC,SAAS,CAAC;QAC7C;AACA,QAAA,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,gBAAgB,CAAC,oBAAoB,EAAE,SAAS,CAAC;QAC1D;AACA,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,IAAI,KAAK,KAAK,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,IAAI,WAAW,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACtD;AACA,QAAA,IAAI,eAAe,KAAK,SAAS,EAAE;AACjC,YAAA,OAAO,wBAAwB,CAAC,eAAe,CAAC;QAClD;AACA,QAAA,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC;AACxC,IAAA,CAAC,CACF;AACH;;AC9KA,SAAS,UAAU,CAAiB,GAInC,EAAA;AACC,IAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAM;AACpC;AAEA,MAAM,QAAQ,GAAG,UAAU,CAAO,EAAE,EAAE,EAAA,CAAA,sBAAiB,CAAC,yBAAiB,CAAC,EAAA,CAAA,sBAAiB,CAAC;AAiO5F,MAAM,SAAS,GAAsC,IAAI,GAAG,EAAE;AAExD,MAAO,UAAW,SAAQ,KAAK,CAAA;IACnC,WAAA,CACE,OAAe,EACR,IAAY,EAAA;AAEnB,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAFtC,IAAA,CAAA,IAAI,GAAJ,IAAI;IAGb;AACD;AAED,IAAI,QAA6B;AAMjC,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,MAAM,GAAG,gBAAgB;AAC/B,MAAM,MAAM,GAAG,cAAc;AAC7B,MAAM,KAAK,GAAG,KAAK;AAEZ,MAAM,WAAW,GAAG;AACzB,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,MAAM,EAAE,uBAAuB;AAC/B,YAAA,EAAE,EAAE,6BAA6B;AACjC,YAAA,UAAU,EAAE,2CAA2C;AACvD,YAAA,YAAY,EAAE,wBAAwB;AACtC,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,SAAS,EAAE,kBAAkB;AAC7B,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,QAAQ,EAAE,8CAA8C;AACxD,YAAA,iBAAiB,EAAE,YAAY;AAChC,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC;AACzD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,iBAAiB;AAC5B,SAAA;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC;AACjB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE;AACL,YAAA,YAAY,EAAE,oEAAoE;AAClF,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC;AACzD,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE;QAC1C,IAAI,EAAE,CAAC,MAAM,CAAC;AACf,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE;AACL,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,gBAAgB,EAAE,YAAY;AAC9B,YAAA,cAAc,EAAE,UAAU;AAC3B,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC3D,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,MAAM,EAAE,kBAAkB;AAC1B,YAAA,MAAM,EAAE,kBAAkB;AAC3B,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC;AACzD,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,KAAK,EAAE;AACL,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,GAAG,EAAE,2BAA2B;AACjC,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AACzE,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE;AACL,YAAA,IAAI,EAAE,0BAA0B;AACjC,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AACzE,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE;AACL,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,MAAM,EACJ,sIAAsI;AACxI,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,KAAK,EAAE,sBAAsB;AAC7B,YAAA,OAAO,EAAE,wBAAwB;AACjC,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,GAAG,EAAE,qBAAqB;AAC1B,YAAA,mBAAmB,EAAE,mDAAmD;AACxE,YAAA,aAAa,EACX,uHAAuH;AACzH,YAAA,cAAc,EACZ,uJAAuJ;AACzJ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,KAAK,EAAE,oBAAoB;AAC3B,YAAA,GAAG,EAAE,kBAAkB;AACxB,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC3D,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,qDAAqD;AACjE,YAAA,MAAM,EAAE,kBAAkB;AAC1B,YAAA,KAAK,EAAE,oBAAoB;AAC5B,SAAA;QACD,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AACnE,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE;AACL,YAAA,YAAY,EAAE,SAAS;AACxB,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;AACxB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,KAAK,EAAE;AACL,YAAA,WAAW,EAAE,SAAS;AACvB,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;AACxB,KAAA;IACD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAC/B,IAAA,WAAW,EAAE;AACX,QAAA,KAAK,EAAE;AACL,YAAA,QAAQ,EACN,sJAAsJ;AACzJ,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC5B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,EAAE,uCAAuC;AAC5C,YAAA,EAAE,EAAE,kDAAkD;AACtD,YAAA,KAAK,EAAE,yCAAyC;AAChD,YAAA,UAAU,EAAE,kDAAkD;AAC9D,YAAA,EAAE,EAAE,wCAAwC;AAC5C,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,0CAA0C;AACnD,SAAA;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC;AACjB,KAAA;;AAGH,MAAM,QAAQ,GAAG;AACf,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;CACiB;AAErB,SAAU,YAAY,CAAC,GAAW,EAAE,KAAe,EAAA;IACvD,IAAI,KAAK,GAA2B,IAAI;AACxC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,QAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,KAAK;YAAE;IACb;AACA,IAAA,OAAO,KAAK;AACd;AAEA,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;AAEtC,MAAM,YAAY,GAAG,WAAW;AAChC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;AAC9C,MAAM,OAAO,GAAG,oDAAoD;AACpE,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,kBAAkB,GAA4C,IAAI,OAAO,EAAE;AACjF,MAAM,UAAU,GAAkD,IAAI,OAAO,EAAE;SAS/D,SAAS,CACvB,SAAqB,EACrB,IAAgB,EAChB,KAAgB,EAChB,KAAc,EACd,YAAqB,EACrB,aAAwB,EACxB,UAAuB,EAAE,EAAA;AAEzB,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;IACnC,IAAI,OAAO,GAAG,IAAI;AAClB,IAAA,KAAK,GAAG,KAAK,IAAI,EAAE;IACnB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC7C,IAAI,WAAW,EAAE;AACf,QAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC9C;AACA,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5D,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAkB;IACnE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;AAC/B,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IACnE;IACA,IAAI,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,GAAG,KAAK;IAChB,IAAI,QAAQ,GAAG,EAAE;IACjB,IAAI,UAAU,GAAG,KAAK;AACtB,IAAA,IAAI,CAAC;IACL,IAAI,eAAe,GAAG,KAAK;IAC3B,IAAI,WAAW,GAAG,KAAK;IACvB,IAAI,YAAY,GAAG,KAAK;AACxB,IAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE;AACxB,QAAA,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE;YACnD,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACxE,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjE,gBAAA,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YACtB;AAAO,iBAAA,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;gBACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B;AACA,YAAA,MAAM,GAAG,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI;QACnC;AAAO,aAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,IAAI,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;gBACrD,eAAe,GAAG,IAAI;gBACtB,IAAI,WAAW,EAAE;oBACf;gBACF;AACA,gBAAA,CAAC,EAAE;gBACH,QAAQ,GAAG,GAAG;gBACd;YACF;AACA,YAAA,IAAI,UAAU,IAAI,IAAI,KAAK,GAAG,EAAE;gBAC9B,UAAU,GAAG,KAAK;YACpB;AACA,YAAA,IAAI,IAAI,KAAK,YAAY,EAAE;gBACzB,IAAI,GAAG,IAAI;gBACX;YACF;iBAAO;AACL,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;AAClE,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AACnC,gBAAA,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpB,OAAO,GAAG,KAAK;gBACf,IAAI,aAAa,EAAE;oBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7B,oBAAA,IAAI,KAA6B;AACjC,oBAAA,KAAK,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,GAAG;AACzD,wBAAA,OAAO,CAAC,MAAM,GAAG,KAAK;wBACtB,IAAI,GAAG,IAAI;oBACb;gBACF;YACF;QACF;aAAO,IAAI,CAAC,KAAK,EAAE;YACjB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACtC,YAAA,IAAI,SAAiC;AACrC,YAAA,IAAI,WAAmC;YACvC,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,KAA6B;gBACjC,KAAK,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG;AAC9C,oBAAA,OAAO,CAAC,MAAM,GAAG,KAAK;AACtB,oBAAA,CAAC,EAAE;oBACH,IAAI,GAAG,IAAI;oBACX;gBACF;YACF;YACA,KAAK,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBACrC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC9B,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAClC,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,KAA6B;oBACjC,KAAK,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG;AAC9C,wBAAA,OAAO,CAAC,MAAM,GAAG,KAAK;AACtB,wBAAA,CAAC,EAAE;wBACH,IAAI,GAAG,IAAI;wBACX;oBACF;gBACF;YACF;AAAO,iBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAC3B,IAAI,KAAK,GAAsC,IAAI;gBACnD,IAAI,IAAI,KAAK,GAAG,KAAK,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;oBACnF,IAAI,WAAW,EAAE;AACf,wBAAA,KAAK,GAAG,CAAC,GAAG,CAAC;oBACf;yBAAO,IAAI,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE;wBACxC,eAAe,GAAG,IAAI;AACtB,wBAAA,CAAC,EAAE;wBACH,QAAQ,GAAG,GAAG;wBACd;oBACF;AACA,oBAAA,IAAI,GAAG,GAAG,GAAG,GAAG;gBAClB;qBAAO;oBACL,eAAe,GAAG,KAAK;gBACzB;gBACA,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;gBAClC;gBACA,IAAI,KAAK,EAAE;oBACT,IAAI,GAAG,IAAI;gBACb;AACA,gBAAA,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC5C,UAAU,GAAG,IAAI;AACjB,oBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;wBAChB,WAAW,GAAG,IAAI;wBAClB,YAAY,GAAG,IAAI;oBACrB;yBAAO,IAAI,WAAW,EAAE;wBACtB,IAAI,YAAY,EAAE;4BAChB,YAAY,GAAG,KAAK;wBACtB;6BAAO;AACL,4BAAA,OAAO,CAAC,uBAAuB,GAAG,IAAI;wBACxC;oBACF;oBACA,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC,wBAAA,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC;AAClC,wBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;AAChB,4BAAA,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;wBACjC;oBACF;oBACA,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;oBAC9B;gBACF;YACF;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAC1B,IAAI,GAAG,KAAK;gBACd;qBAAO;oBACL,OAAO,GAAG,KAAK;gBACjB;YACF;AACA,YAAA,IAAI,IAAI;gBAAE;QACZ;AAAO,aAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7B;QACA,QAAQ,GAAG,IAAI;IACjB;IACA,IAAI,KAAK,EAAE;QACT,MAAM,IAAI,WAAW,CAAC,YAAY,GAAG,KAAK,GAAG,GAAG,CAAC;IACnD;IACA,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,CAAC,QAAQ,GAAG,UAAU;IAC/B;IACA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B;AACA,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;AAEnD,MAAM,gBAAgB,GAAG;IACvB,YAAY;IACZ,WAAW;IACX,aAAa;IACb,OAAO;IACP,UAAU;IACV,MAAM;IACN,mBAAmB;IACnB,QAAQ;CACT;MAEY,WAAW,GAAG,CAA8B,KAAQ,EAAE,EAA2B,KAAI;AAChG,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,QAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACzB,IAAA,CAAC,CAAC;AACJ;AAEA,MAAM,cAAc,GAA+B;AACjD,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,IAAI,EAAE,KAAK;CACZ;AAED,MAAM,WAAW,GAAG;AAClB,IAAA,WAAW,EAAA,EAAA;AACX,IAAA,YAAY,EAAA,EAAA;AACZ,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,SAAS,EAAA,EAAA;AACT,IAAA,IAAI,EAAA,CAAA;AACJ,IAAA,IAAI,EAAA,CAAA;AACJ,IAAA,OAAO,EAAA,EAAA;AACP,IAAA,OAAO,EAAA,EAAA;CACD;AAER,WAAW,CACT,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAU,EACtE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC1C,IAAI,OAAO,GAAG,WAAW;IACzB,MAAM,GAAG,GAAiB,EAAE;IAC5B,IAAI,GAAG,GAAG,KAAK;IACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;IACrB,MAAM,KAAK,GAAG,CAAC;IACf,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;QAC9B,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/E,QAAA,CAAC,IAAI,OAAO,CAAC,MAAM;AACnB,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACzB,YAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QACnB;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACxB,GAAG,GAAG,IAAI;QACZ;aAAO;AACL,YAAA,CAAC,EAAE;QACL;IACF;AACA,IAAA,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AACzE,IAAA,IAAI,CAAgB;AAEpB,IAAA,IAAI,SAAiC;IACrC,QAAQ,IAAI;AACV,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,WAAW;AACd,YAAA,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpD;AACF,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,aAAa;;YAEhB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;YACnE;AACF,QAAA,KAAK,cAAc;YACjB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClB,gBAAA,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE;AACrB,gBAAA,IAAI,KAAW;gBACf,IAAI,GAAG,GAAkB,EAAE;AAC3B,gBAAA,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;gBAC1E,IAAI,SAAS,EAAE;oBACb,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;oBAC9B,KAAK,GAAG,OAAO,CACb,SAAS,EACT,IAAI,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAC9D;gBACH;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACjD,oBAAA,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAS;;oBAGpE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAA,EAAA,8BAA4B;;wBAEnD,KAAK,GAAG,QAAQ;oBAClB;yBAAO;;AAEL,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,KAAA,CAAA,sBAAoB;AAC5B,4BAAA,GAAG,GAAI,GAAY,CAAC,CAAC,CAAC;wBACxB;;AAGA,wBAAA,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;;AAEnE,4BAAA,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAC/D;6BAAO;;;4BAGL,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;wBAC3C;oBACF;gBACF;AACA,gBAAA,OAAO,UAAU,CAAS;AACxB,oBAAA,EAAE,EAAA,CAAA;AACF,oBAAA,CAAC,EAAE,GAAG;AACN,oBAAA,CAAC,EAAE,KAAK;AACT,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;YACF;;AAEJ,IAAA,MAAM,QAAQ,IACZ,IAAI,KAAK;AACP,UAAE,GAAG,CAAC,CAAC;cACJ,EAAA;AACD,cAAC,CAAA;UACD,IAAI,KAAK;AACT,cAAE,GAAG,CAAC,CAAC;kBACJ,EAAA;AACD,kBAAC,CAAA;AACH,cAAE,WAAW,CAAC,IAAI,CAAC,CAC0B;IACnD,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EACrB,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAER;AACA,QAAA,EAAE,EAAE,QAAQ;QACZ,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAE,CAAC;AACL,KAAA,CAAC,CACH;AACH,CAAC,CACF;AAED,MAAM,aAAa,GAAG;AACpB,IAAA,OAAO,EAAA,EAAA;AACP,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,QAAQ,EAAA,EAAA;AACR,IAAA,QAAQ,EAAA,EAAA;AACR,IAAA,MAAM,EAAA,EAAA;AACN,IAAA,MAAM,EAAA,EAAA;CACE;AAEV,WAAW,CACT,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU,EACvE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;;;AAI7F,IAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AAC5D,IAAA,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACjC,QAAA,MAAM,IAAI,WAAW,CACnB,gIAAgI,CACjI;IACH;AAEA,IAAA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC9C,SAAS,CAAC,IAAI,EACd,UAAU,CAAwD;AAChE,QAAA,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC;QACvB,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACzD,KAAA,CAAC,CACH;AACH,CAAC,CACF;AAED,WAAW,CAAC,CAAC,gBAAgB,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;;;AAGnF,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,GAAG,WAAW,EAAE,OAAO,CAAC,GAAG,OAAO;;IAGxC,MAAM,WAAW,GAAa,EAAE;IAChC,MAAM,WAAW,GAAW,EAAE;IAC9B,IAAI,UAAU,GAAG,EAAE;IACnB,IAAI,CAAC,GAAG,CAAC;AAET,IAAA,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE;AAC7B,QAAA,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;;AAE5C,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACb,IAAI,SAAS,GAAG,EAAE;YAClB,IAAI,kBAAkB,GAAG,KAAK;;AAG9B,YAAA,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACvD,gBAAA,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC;AAC3B,gBAAA,CAAC,EAAE;YACL;;YAGA,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC/E,kBAAkB,GAAG,IAAI;YAC3B;YAEA,IAAI,kBAAkB,EAAE;;AAEtB,gBAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,EAAE;gBACf,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACZ;iBAAO;;AAEL,gBAAA,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;AAC5B,gBAAA,CAAC,EAAE;YACL;QACF;aAAO;AACL,YAAA,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;AAC5B,YAAA,CAAC,EAAE;QACL;IACF;AACA,IAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;AAG5B,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KACvC,UAAU,CAAc;AACtB,QAAA,EAAE,EAAA,CAAA;AACF,QAAA,CAAC,EAAA,CAAA;AACD,QAAA,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3C,KAAA,CAAC,CACH;;IAGD,MAAM,gBAAgB,GAAG,UAAU,CAAc;AAC/C,QAAA,EAAE,EAAA,EAAA;QACF,CAAC,EAAE,UAAU,CAAC;AACZ,YAAA,EAAE,EAAA,CAAA;AACF,YAAA,CAAC,EAAA,CAAA;AACD,YAAA,CAAC,EAAA,CAAA;SACF,CAAC;AACF,QAAA,CAAC,EAAE,YAAY;AAChB,KAAA,CAAC;;IAGF,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAO;AACf,QAAA,EAAE,EAAA,CAAA;QACF,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,WAAW,CAAC;AACtC,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG;AACrB,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;CACC;AAER,WAAW,CAAC,CAAC,mBAAmB,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AACtF,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IACvE,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAClC,SAAS,CAAC,IAAI,EACd,UAAU,CAAoC;QAC5C,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAChC,QAAA,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACxD,QAAA,CAAC,EAAA,CAAA;AACF,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,kBAAkB,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IACrF,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAkC;QAC1C,EAAE,EAAE,cAAc,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAA,CAAA;AACF,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG;AACjB,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,UAAU,EAAA,EAAA;AACV,IAAA,EAAE,EAAA,EAAA;AACF,IAAA,GAAG,EAAA,CAAA;AACH,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,MAAM,EAAA,EAAA;AACN,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,KAAK,EAAA,EAAA;CACC;AAER,WAAW,CACT,CAAC,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAU,EACxD,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAC1C,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAkBvB;AACA,QAAA,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC,QAAQ;QACf,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAC/E,KAAA,CAAC;AACJ,CAAC,CACF;AAED,MAAM,OAAO,GAAG;AACd,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,KAAK,EAAA,EAAA;AACL,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,GAAG,EAAA,EAAA;AACH,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,IAAI,EAAA,EAAA;AACJ,IAAA,UAAU,EAAA,EAAA;AACV,IAAA,EAAE,EAAA,EAAA;CACI;AAER;AACA,WAAW,CACT;IACE,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,WAAW;IACX,UAAU;AACF,CAAA,EACV,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAC1C,IAAA,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChE,QAAQ,IAAI;AACV,QAAA,KAAK,OAAO;;YAEV;AACF,QAAA,KAAK,QAAQ;;YAEX,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,QAAA,KAAK,IAAI;YACP,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1C,QAAA,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AAClD,QAAA,KAAK,cAAc;YACjB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AACpD,QAAA,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AAClD,QAAA,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;AAClD,QAAA,KAAK,WAAW;YACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACjD,QAAA,KAAK,WAAW;YACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACjD,QAAA,KAAK,UAAU;YACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;;IAElD,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;AACzE,IAAA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC9C,SAAS,CAAC,IAAI,EACd,UAAU,CAyBR;AACA,QAAA,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACzD,KAAA,CAAC,CACH;AACH,CAAC,CACF;AAED,WAAW,CAAC,CAAC,UAAU,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC7E,IAAI,KAAK,GAAG,KAAK;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,UAAU,GAAG,CAAC;IAClB,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC7C,QAAA,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AACrE,YAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;YACnC,YAAY;SACb,CAAC,CAAC,GAAG;QACN,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;AACrC,YAAA,UAAU,EAAE;QACd;aAAO;AACL,YAAA,UAAU,EAAE;QACd;QACA,IAAI,CAAC,UAAU,EAAE;YACf,KAAK,GAAG,IAAI;QACd;IACF;IACA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAC9B,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAW;AAClC,QAAA,EAAE,EAAA,EAAA;QACF,CAAC,EAAE,GAAG,CAAC,QAAQ;QACf,CAAC,EAAE,UAAU,CAAe;AAC1B,YAAA,EAAE,EAAA,EAAA;AACF,YAAA,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;YAClC,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC9E,CAAC;AACH,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,aAAa,CAAC,SAAqB,EAAE,IAAgB,EAAA;IAC5D,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,SAAS,GAAG,WAAW;AAC3B,IAAA,IAAI,SAAiC;IACrC,IAAI,KAAK,GAAG,IAAI;AAChB,IAAA,IAAI,OAA+B;IACnC,IAAI,OAAO,GAAgB,EAAE;AAC7B,IAAA,OACE,CAAC,KAAK,GAAG,SAAS,CAChB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EACtC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,CACR,EAAE,MAAM;AACT,QAAA,KAAK,EACL;QACA,KAAK,GAAG,KAAK;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AAE3D,QAAA,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,CAAC,GAAG,EAAE;AACX,YAAA,KAAK,EAAE;QACT;AAAO,aAAA,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC/B,YAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACrD,KAAK,CAAC,GAAG,EAAE;AACX,YAAA,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,EAAE;gBACV,KAAK,CAAC,GAAG,EAAE;YACb;QACF;aAAO,KAAK,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AACpD,YAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACrD,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAClC,YAAA,KAAK,EAAE;YACP,IAAI,CAAC,KAAK,EAAE;gBACV,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YACpC;QACF;aAAO;YACL,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACpF;QACF;QACA,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,EAAE,GAAG,aAAa,CACtB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAC1F;AACD,YAAA,SAAS,GAAG,EAAE,CAAC,GAAG;YAClB;QACF;QACA,OAAO,GAAG,EAAE;IACd;AACA,IAAA,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IAClE,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,SAAS;KACjB;AACH;AAEA,WAAW,CAAC,CAAC,IAAI,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IACvE,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAC5E,IAAA,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;IAEtE,IAAI,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAC5C,IAAA,IAAI,SAAS,GAAG,EAAE,CAAC,KAAK;AAExB,IAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AAC5B,IAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AAC5B,IAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AAE5B,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACjE,IAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACjE,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAK;AAC5B,QAAA,EAAE,EAAA,EAAA;AACF,QAAA,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC;QACpC,CAAC,EAAE,UAAU,CAAS;AACpB,YAAA,EAAE,EAAA,EAAA;AACF,YAAA,CAAC,EAAE,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;AACrC,YAAA,CAAC,EAAE,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;SACtC,CAAC;AACH,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,QAAQ,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACzE,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,IAAI,KAAK,KAAK,EAAE;AAAE,QAAA,MAAM,IAAI,WAAW,CAAC,gBAAgB,CAAC;IACzD,IAAI,SAAS,GAAG,gBAAgB,CAC9B,SAAS,EACT,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CACzD;AACD,IAAA,IAAI,SAAiC;IACrC,MAAM,QAAQ,GAAG,yBAAyB;IAC1C,MAAM,KAAK,GAAiB,EAAE;IAC9B,IAAI,YAAY,GAAG,KAAK;AACxB,IAAA,QAAQ,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG;AACxD,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,YAAY;AAAE,gBAAA,MAAM,IAAI,WAAW,CAAC,sCAAsC,CAAC;YAC/E,YAAY,GAAG,IAAI;QACrB;QACA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,KAAK,GAAG,WAAW;AACvB,QAAA,IAAI,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrE,IAAI,KAAK,GAAW,EAAE;QACtB,IAAI,YAAY,EAAE;AAChB,YAAA,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;AAC3B,YAAA,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAC7D,YAAA,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,YAAA,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;QACxC;aAAO;AACL,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;gBAC3B,KAAK,GAAG,EAAE;AACV,gBAAA,CAAC,IAAI,QAAQ,CAAC,MAAM;YACtB;iBAAO;gBACL,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE;oBACjF,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACtE,oBAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE;wBACpD;oBACF;gBACF;gBACA,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;YAC1F;QACF;AACA,QAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAClC,QAAA,KAAK,CAAC,IAAI,CACR,UAAU,CAAa;AACrB,YAAA,EAAE,EAAA,EAAA;AACF,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAE,CAAA,uBAAiB,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;AAC5E,YAAA,CAAC,EAAE,KAAK;AACT,SAAA,CAAC,CACH;IACH;AACA,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAS;AAChC,QAAA,EAAE,EAAA,EAAA;AACF,QAAA,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;AAC/B,QAAA,CAAC,EAAE,KAAK;AACT,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAChF,IAAA,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;IACzB,IAAI,EAAE,GAAG,MAAM;AACf,IAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;YACV,EAAE,GAAG,OAAO;QACd;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3F,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;QACrC;aAAO;AACL,YAAA,MAAM,IAAI,WAAW,CAAC,aAAa,CAAC;QACtC;IACF;SAAO;QACL,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE;AAC9C,YAAA,MAAM,IAAI,WAAW,CAAC,qBAAqB,IAAI,CAAA,CAAA,CAAG,CAAC;QACrD;IACF;IACA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACrB,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAsB;AAC9B,QAAA,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;QACnB,CAAC,EAAE,GAAG,CAAC,QAAQ;AACf,QAAA,CAAC,EAAE,IAAI;AACR,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,aAAa,EAAE,cAAc,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAChG,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAA6B;QACpD,EAAE,EAAE,IAAI,KAAK,aAAa,GAAE,EAAA,8BAAuB,EAAA;AACnD,QAAA,CAAC,EAAA,CAAA;QACD,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAC/E,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AACpF,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAiB;QACxC,EAAE,EAAE,IAAI,KAAK,QAAQ,GAAE,CAAA,yBAAkB,EAAA;AACzC,QAAA,CAAC,EAAA,CAAA;AACD,QAAA,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CACT,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAU,EAChE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC1C,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAiC;QACzC,EAAE,EACA,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,GAAE,EAAA,oDAAqC,EAAA;AACrE,QAAA,CAAC,EAAA,CAAA;AACD,QAAA,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7B,KAAA,CAAC,CACH;AACH,CAAC,CACF;AAED,WAAW,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC/F,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAA0C;QAClD,EAAE,EACA,IAAI,KAAK;cACN,CAAA;cACC,IAAI,KAAK;kBACR,EAAA;AACD,kBAAC,EAAA;AACP,QAAA,CAAC,EAAA,CAAA;AACD,QAAA,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACV,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,YAAY,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,GAAE,EAAA,sBAAgB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,GAAE,CAAA,sBAAe,CAAA;AAC9E,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACX,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAoB;AAC5B,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACT,YAAA,CAAC,EAAA,CAAA;AACF,SAAA,CAAC,CACH;IACH;SAAO;AACL,QAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAoB;AAC3C,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACT,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAC/E,SAAA,CAAC;IACJ;AACF,CAAC,CAAC;AAEF,WAAW,CACT,CAAC,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,CAAU,EAC/E,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAC1C,MAAM,OAAO,GAAG,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,gBAAgB;AAChE,IAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,EAAA,uBAAgB,CAAA;AACxC,IAAA,MAAM,IAAI,GAAa,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;IACrF,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;IAC1C;IACA,IAAI,KAAK,GAAG,KAAK;AACjB,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AAC3B,QAAA,IAAI,KAAK;AAAE,YAAA,MAAM,IAAI,WAAW,CAAC,8CAA8C,CAAC;AAChF,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,KAAK,GAAG,IAAI;AACzC,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,CAAC,GAAG,SAAS,CACjB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7B,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAC7C;AACD,IAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;AACpD,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AAC3B,QAAA,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE;AACjD,YAAA,MAAM,IAAI,WAAW,CAAC,qBAAqB,GAAG,CAAA,CAAA,CAAG,CAAC;QACpD;AACF,IAAA,CAAC,CAAC;AACF,IAAA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/C,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAA4C;AACpD,QAAA,EAAE,EAAE;cACD,EAAA;cACC,IAAI,KAAK;kBACR,EAAA;AACD,kBAAC,EAAA;AACL,QAAA,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QACrB,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI;AAC7E,KAAA,CAAC,CACH;AACH,CAAC,CACF;AAED,MAAM,aAAa,GAAG,uEAAuE;AAC7F,WAAW,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IACvF,IAAI,CAAC,GAAG,CAAC;IACT,IAAI,SAAS;IACb,IAAI,aAAa,GAAW,EAAE;IAC9B,IAAI,WAAW;IACf,IAAI,UAAU;IACd,IAAI,UAAU;AACd,IAAA,IAAI,SAAmB;IACvB,IAAI,IAAI;AACR,IAAA,IAAI,IAAgB;IACpB,QAAQ,IAAI;QACV,KAAK,OAAO,EAAE;AACZ,YAAA,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChE,YAAA,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC;YACjD,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC1E,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAClD;QACF;QACA,KAAK,KAAK,EAAE;AACV,YAAA,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACpC,MAAM,IAAI,GAAiB,EAAE;YAC7B,IAAI,QAAQ,GAAG,WAAW;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,QAAQ,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC1B,gBAAA,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACxB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;oBAAE;YAChC;AACA,YAAA,IAAI,QAAgC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAC5E,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBACxB,CAAC,CAAC,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;yBAChF,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACxC,SAAS,GAAG,WAAW;oBACvB,IAAI,GAAG,MAAM;AACb,oBAAA,UAAU,GAAG,OAAO,CAClB,SAAS,EACT,IAAI,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,EACzE,CAAC,YAAY,CAAC,CACf;gBACH;qBAAO;oBACL,CAAC,CAAC,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;yBAChF,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACxC,IAAI,GAAG,MAAM;oBACb,SAAS,GAAG,WAAW;AACvB,oBAAA,UAAU,GAAG,OAAO,CAClB,SAAS,EACT,IAAI,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,EAC/E,CAAC,YAAY,CAAC,CACf;gBACH;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,gBAAA,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAG,EAAE,gBAAgB,CAAC;gBACnE,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAG,CAAC;gBACvD,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAG,CAAC;YAC9C;iBAAO;AACL,gBAAA,MAAM,IAAI,WAAW,CAAC,6BAA6B,CAAC;YACtD;AACA,YAAA,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACrD,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAElD;QACF;QACA,KAAK,IAAI,EAAE;AACT,YAAA,UAAU;YACV,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3F,YAAA,SAAS,GAAG,iBAAiB,CAC3B,SAAS,EACT,SAAS,CACP,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC7E,EAAE,EACF,GAAG,CACJ,CACF;YACD;QACF;;AAEF,IAAA,MAAM,CAAC,GAAG;QACR,UAAU;QACV,aAAa;QACb,WAAW;QACX,SAAS;QACT,IAAI;QACJ,SAAS;QACT,UAAU;KACC;AACb,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAO;AAC9B,QAAA,EAAE,EAAA,EAAA;QACF,CAAC;AACD,QAAA,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;AACjC,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,OAAO,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAC1E,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAQ;AAC/B,QAAA,EAAE,EAAA,EAAA;QACF,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC;AAC5E,QAAA,CAAC,EAAA,CAAA;AACF,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,YAAY,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;AAC/E,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAa;AACpC,QAAA,EAAE,EAAA,EAAA;AACF,QAAA,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACT,QAAA,CAAC,EAAA,CAAA;AACF,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,mEAAmE;AACpF,WAAW,CAAC,CAAC,KAAK,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACzE,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxF,IAAA,IAAI,WAAW;IACf,IAAI,SAAS,GAAG,EAAE;AAClB,IAAA,IAAI,SAAS;IACb,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,QAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACpC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACpF,SAAS,GAAG,QAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,SAAS,GAAG,SAAS,CACnB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACrE,EAAE,EACF,GAAG,CACJ;QACD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACrF,QAAA,IACE,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5D,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EACjC;YACA,WAAW,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;QAC1F;IACF;SAAO;AACL,QAAA,WAAW,GAAG,SAAS,CACrB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACrE,EAAE,EACF,GAAG,CACJ;IACH;AACA,IAAA,MAAM,CAAC,GAAG;QACR,SAAS;QACT,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,IAAI,WAAW,CAAC,EAAE,SAAS,CAAC;QAC9E,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,IAAI,WAAW,CAAC,EAAE,SAAS,CAAC;KACrE;AACb,IAAA,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAM;AAC7B,QAAA,EAAE,EAAA,EAAA;QACF,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC;QAC7D,CAAC;AACF,KAAA,CAAC;AACJ,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IAClF,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;AAC7F,IAAA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAC9C,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EACxB,UAAU,CAAe;QACvB,EAAE,EAAE,IAAI,KAAK,MAAM,GAAE,EAAA,uBAAgB,EAAA;AACrC,QAAA,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;AAC9B,QAAA,CAAC,EAAA,CAAA;AACF,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,WAAW,CAAC,CAAC,KAAK,CAAU,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAI;IACxE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;AACrB,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC;AACvE,IAAA,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;IACnB,MAAM,IAAI,GAAiB,EAAE;IAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACnE,QAAA,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;AAC1B,QAAA,IAAI,KAAiB;QACrB,IAAI,CAAC,GAAG,CAAC;QACT,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAC7E,YAAA,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB;IACF;IACA,GAAG,CAAC,QAAQ,GAAG,OAAO,CACpB,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EACjB,WAAW,CAAC,OAAO,CAAC,IAAI,EACxB,UAAU,CAAC;AACT,QAAA,EAAE,EAAA,EAAA;AACF,QAAA,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC;QACvD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3E,KAAA,CAAC,CACH;AACH,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CACtB,SAAgB,EAChB,IAAI,UAAU,CAAC,2CAA2C,CAAC,EAC3D,CAAC,YAAY,CAAC,CACf;AACD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,gCAAgC,CAAC,EAAE;IAC3F,YAAY;AACb,CAAA,CAAC;AACF,MAAM,WAAW,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,qBAAqB,CAAC,EAAE;IACnF,YAAY;AACb,CAAA,CAAC;AACF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;AACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,iCAAiC,CAAC,EAAE;IAC5F,YAAY;AACb,CAAA,CAAC;AACF,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAChG,MAAM,MAAM,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AACxE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAgB,EAAE,IAAI,UAAU,CAAC,mCAAmC,CAAC,EAAE;IACjG,YAAY;AACb,CAAA,CAAC;AAEF,SAAS,OAAO,CACd,SAAqB,EACrB,IAAgB,EAChB,QAA4B,EAC5B,QAAe,EACf,QAAQ,GAAG,KAAK,EAAA;AAEhB,IAAA,QAAQ,GAAG,QAAQ,IAAI,QAAQ;IAC/B,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI;IAClD,IAAI,IAAI,KAAK,SAAS;AAAE,QAAA,OAAO,QAAQ;AAEvC,IAAA,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AACvB,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAChD,QAAA,MAAM,IAAI,WAAW,CAAC,8BAA8B,CAAC;IACvD;IACA,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,QAAQ;AAEjC,IAAA,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAElC,IAAA,IAAI,GAAQ;AACZ,IAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC7B,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB;QACF;QACA,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;AAC5C,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACrB;YACF;AACA,YAAA,KAAK,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBACrD,QAAQ,GAAG,IAAI;AAKf,gBAAA,IAAI;AACF,oBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;gBAChE;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,IAAI,QAAQ,IAAI,CAAC,YAAY,WAAW,EAAE;wBACxC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;oBACtC;AACA,oBAAA,MAAM,CAAC;gBACT;gBACA;YACF;QACF;AACA,QAAA,IAAI,GAAG;YAAE;IACX;AAEA,IAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;QACvB,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,IAAI,UAAU,CAAC,CAAA,uBAAA,EAA0B,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAE,EAAE,GAAG,CAAC;QAClF;AACA,QAAA,MAAM,IAAI,WAAW,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;IAC9E;IACA,OAAO,GAAG,CAAC,QAAQ;AACrB;AAEA,MAAM,6BAA6B,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC;AAEvF,SAAS,WAAW,CAAC,SAAqB,EAAE,GAAe,EAAE,QAA4B,EAAA;AACvF,IAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,QAAQ;IAC5C,MAAM,cAAc,GAAiB,EAAE;AACvC,IAAA,IAAI,GAAe;IACnB,IAAI,GAAG,GAAG,CAAC;IACX,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI;AAClD,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAClC,QAAA,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5E,YAAA,OAAO,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC;QAChE;IACF;IACA,IAAI,QAAQ,KAAK,gBAAgB;QAAE,QAAQ,GAAG,6BAA6B;IAC3E,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;QACtE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACpC,QAAA,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;IACvB;AACA,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;IAC3D;AACA,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QACnC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1F,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,UAAU,CAAQ;AACvB,gBAAA,EAAE,EAAA,EAAA;gBACF,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAC3B,OAAO,CACL,SAAS,EACT,CAAC,GAAG,IAAI,UAAU,CAAC,OAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EACjD,CAAC,YAAY,CAAC,EACd,SAAS,EACT,IAAI,CACL,CACF;AACD,gBAAA,CAAC,EAAA,CAAA;AACF,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE;AACjF,YAAA,OAAO,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;QAC3D;IACF;IACA,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7F,IAAA,OAAO,UAAU,CAAa,EAAE,EAAE,gCAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAA,CAAA,sBAAiB,CAAC;AACxF;AAEM,SAAU,iBAAiB,CAAC,SAAqB,EAAE,GAAe,EAAA;AACtE,IAAA,OAAO,UAAU,CAAS;AACxB,QAAA,EAAE,EAAA,CAAA;AACF,QAAA,CAAC,EAAA,CAAA;AACD,QAAA,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC;AAC/B,KAAA,CAAC;AACJ;AAEM,SAAU,YAAY,CAAC,GAAe,EAAE,SAAqB,EAAE,UAAU,GAAG,KAAK,EAAA;AACrF,IAAA,GAAG,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC;AACtC,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IACjC,MAAM,KAAK,GAAiB,EAAE;AAC9B,IAAA,IAAI,IAAgB;IACpB,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,OAAO,GAAgB,EAAE;IAC7B,IAAI,OAAO,GAAG,KAAK;IACnB,IAAI,UAAU,GAAG,KAAK;AACtB,IAAA,OACE,CAAC,IAAI,GAAG,SAAS,CACf,SAAS,EACT,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAClB,CAAC,SAAS,CAAC,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,CACR,EAAE,MAAM,EACT;AACA,QAAA,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;AACnF,QAAA,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC3D,OAAO,GAAG,IAAI;QAChB;aAAO,IACL,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;AAChC,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EACxD;YACA,OAAO,GAAG,IAAI;QAChB;aAAO;YACL,OAAO,GAAG,KAAK;YACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,GAAG,GAAG;QACb;QACA,OAAO,GAAG,EAAE;AACZ,QAAA,IAAI,UAAU;YAAE;IAClB;IACA,IAAI,OAAO,EAAE;QACX,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D;AACA,IAAA,OAAO;SACJ,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,EAAE;SAC5B,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM;AAC1B,SAAA,GAAG,CAAC,CAAC,GAAG,KAAI;QACX,OAAO,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,gBAAgB,CAAC;AAClE,IAAA,CAAC,CAAC;AACN;AAEM,SAAU,eAAe,CAC7B,GAAe,EACf,SAAqB,EACrB,UAAU,GAAG,KAAK,EAAA;AAElB,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;IACjC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC;AACX,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,KAAK,CAAC,IAAc,EAAE,MAAc,EAAE,EAAA;AAC7C,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,CAAa,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;QAC3C,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACvB,QAAA,IACE,EAAE,KAAA,EAAA;AACF,YAAA,EAAE,KAAA,EAAA;AACF,YAAA,EAAE,KAAA,EAAA;YACF,EAAE,KAAA,EAAA,wBACF;AACA,YAAA,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AACb,YAAA,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACf;aAAO,IAAI,EAAE,KAAA,EAAA,qBAAmB;AAC9B,YAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAA,EAAA,qBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,yBAAiB,CAAC,CAAC;QACpE;aAAO,IAAI,EAAE,mCAA0B,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACd,YAAA,OAAO,IAAI;QACb;IACF;AAAO,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,GAAG,GAAqB,EAAE;AAChC,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;AACnB,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd;QACF;QACA,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;QAC3B;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEA,MAAM,mBAAmB,GAAG,wDAAwD;AACpF;AACA,MAAM,WAAW,GAAG,0EAA0E;AAE9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEM,SAAU,gBAAgB,CAAC,SAAqB,EAAE,GAAe,EAAA;IACrE,IAAI,IAAI,GAAG,GAAG;IACd,IAAI,GAAG,GAAG,WAAW;IACrB,IAAI,OAAO,GAAgB,EAAE;IAC7B,IAAI,cAAc,GAAG,KAAK;IAC1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;IACjF,OACE,CAAC,GAAG,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAC3F;QACA,IAAI,KAAK,GAAG,KAAK;QACjB,IAAI,IAAI,GAAG,GAAG;AACd,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;AACrB,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,KAAK,GAAG,IAAI;AACZ,YAAA,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM;AACrC,YAAA,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM;YAC7F,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;YAC9B,IAAI,CAAC,EAAE;gBACL,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC/E,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;AACtB,wBAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;4BAC7B,KAAK,GAAG,KAAK;4BACb,cAAc,GAAG,IAAI;wBACvB;6BAAO;4BACL,KAAK,GAAG,IAAI;wBACd;oBACF;yBAAO;wBACL,KAAK,GAAG,KAAK;oBACf;gBACF;AAAO,qBAAA,IACL,OAAO,CAAC,QAAQ,KAAK,UAAU;oBAC/B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AAC5B,oBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,EACnC;oBACA,KAAK,GAAG,KAAK;gBACf;YACF;iBAAO,IAAI,CAAC,EAAE;gBACZ,IAAI,cAAc,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;oBAClD,KAAK,GAAG,IAAI;oBACZ,cAAc,GAAG,KAAK;gBACxB;AAAO,qBAAA,IACL,OAAO,CAAC,QAAQ,KAAK,IAAI;oBACzB,OAAO,CAAC,QAAQ,KAAK,OAAO;oBAC5B,OAAO,CAAC,QAAQ,KAAK,KAAK;AAC1B,oBAAA,OAAO,CAAC,QAAQ,KAAK,MAAM,EAC3B;AACA,oBAAA,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,uBAAuB;gBAC3C;YACF;QACF;QACA,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;QAC3B;AACA,QAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,GAAG,EAAE;IACd;IACA,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACzC,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,UAAU,CAAC,GAAW,EAAA;IACpC,IAAI,CAAC,GAAG,CAAC;IACT,IAAI,MAAM,GAAG,KAAK;IAClB,IAAI,IAAI,GAAG,KAAK;IAChB,IAAI,MAAM,GAAG,KAAK;AAClB,IAAA,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;QACzC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;QAChC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;AACnC,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;AACxB,QAAA,CAAC,EAAE;IACL;IACA,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAChD,IAAA,IAAI,MAAM;AAAE,QAAA,OAAO,IAAI;IACvB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,KAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;AACzD,QAAA,OAAO,IAAI;IACb;IACA,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;AAChC,QAAA,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;KAC9C;AACH;AAEA,MAAM,SAAS,GAAG,+DAA+D;AACjF,MAAM,cAAc,GAAG,0BAA0B;AAC3C,SAAU,gBAAgB,CAC9B,SAAqB,EACrB,GAAW,EACX,gBAAgB,GAAG,EAAE,EAAA;AAErB,IAAA,IAAI,KAAK;IACT,IAAI,OAAO,GAAwB,EAAE;IACrC,IAAI,MAAM,GAAG,KAAK;AAClB,IAAA,IAAI,UAAyB;IAC7B,IAAI,OAAO,GAAG,EAAE;AAChB,IAAA,IAAI,YAAY,GAAG,EAAE;IACrB,IAAI,MAAM,GAAa,EAAE;IACzB,IAAI,IAAI,GAAG,EAAE;IACb,MAAM,MAAM,GAAwB,EAAE;IACtC,MAAM,UAAU,GAAa,EAAE;IAC/B,IAAI,gBAAgB,GAA2B,IAAI;IACnD,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,gBAAA,IAAI,OAAO,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;oBACzC,OAAO,GAAG,EAAE;AACZ,oBAAA,CAAC,EAAE;gBACL;AAAO,qBAAA,IAAI,OAAO,KAAK,IAAI,EAAE;oBAC3B,OAAO,GAAG,EAAE;AACZ,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB;YACF;QACF;aAAO;YACL,IAAI,MAAM,EAAE;gBACV,MAAM,GAAG,KAAK;AACd,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClB;YACF;YAEA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AACvD,oBAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;AACnE,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC;AAC1C,oBAAA,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACtB;AAAO,qBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AACzB,oBAAA,IAAI,KAAK,KAAK,GAAG,EAAE;wBACjB,MAAM,EAAE,GAAG,UAAU,CAAU;AAC7B,4BAAA,EAAE,EAAA,EAAA;4BACF,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,4BAAA,CAAC,EAAE,EAAE;AACN,yBAAA,CAAC;AACF,wBAAA,EAAE,CAAC,aAAa,GAAG,MAAM;AACzB,wBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA,EAAA,CAAI,CAAC;oBACxD;yBAAO;AACL,wBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC;oBACrD;oBACA,KAAK,GAAG,IAAI;oBACZ,OAAO,GAAG,EAAE;gBACd;qBAAO;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpB;YACF;iBAAO;AACL,gBAAA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChD,MAAM,GAAG,EAAE;oBACX,KAAK,GAAG,IAAI;gBACd;AAAO,qBAAA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACpE,oBAAA,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC5C;AAAO,qBAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzB,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB;AAAO,qBAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;oBAC/D,UAAU,CAAC,GAAG,EAAE;AAChB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB;qBAAO,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;AACrE,oBAAA,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI;oBACzC,YAAY,GAAG,CAAC;gBAClB;qBAAO,IACL,IAAI,KAAK,GAAG;AACZ,oBAAA,CAAC,gBAAgB;AACjB,qBAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C;AACA,oBAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAClC,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA,EAAA,CAAI,CAAC;AACpD,oBAAA,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC5B;qBAAO;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB;gBAEA,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1C,oBAAA,KAAK,gBAAgB,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;wBAC9D,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;4BACpE,gBAAgB,GAAG,IAAI;wBACzB;oBACF;gBACF;YACF;YACA,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC;QACrC;IACF;IAEA,IAAI,OAAO,EAAE;AACX,QAAA,IAAI,OAAO,KAAK,GAAG,EAAE;AACnB,YAAA,MAAM,IAAI,WAAW,CAAC,CAAA,uBAAA,EAA0B,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA,CAAE,CAAC;QAChF;IACF;AACA,IAAA,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AAC5C;AAEc,SAAU,KAAK,CAAC,IAAY,EAAE,KAAK,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAA;IAC3E,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,UAAU,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAE,EAAE,IAAI,CAAC;AAChF,IAAA,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI;AACpB,IAAA,MAAM,SAAS,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE;IAC/E,GAAG,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG;AAE1C,IAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;QAClC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAc,CAAC,GAAG,CAAC,CAAC,EAAU,KAAK,WAAW,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC,aAAa;IACxB;AACA,IAAA,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE;AACzF;;;;"}
|
package/dist/unraw.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Replace raw escape character strings with their escape characters.
|
|
3
|
-
* @param raw A string where escape characters are represented as raw string
|
|
4
|
-
* values like `\'` rather than `'`.
|
|
5
|
-
* @param allowOctals If `true`, will process the now-deprecated octal escape
|
|
6
|
-
* sequences (ie, `\111`).
|
|
7
|
-
* @returns The processed string, with escape characters replaced by their
|
|
8
|
-
* respective actual Unicode characters.
|
|
9
|
-
*/
|
|
10
|
-
export declare function unraw(raw: string): string;
|
|
11
|
-
export default unraw;
|
package/dist/utils.d.ts
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
export declare const AsyncFunction: Function;
|
|
2
|
-
export declare const GeneratorFunction: Function;
|
|
3
|
-
export declare const AsyncGeneratorFunction: Function;
|
|
4
|
-
import { IEvalContext } from './eval';
|
|
5
|
-
import { Change, Unknown } from './executor';
|
|
6
|
-
import { IConstants, IExecutionTree, Lisp, LispItem } from './parser';
|
|
7
|
-
import SandboxExec from './SandboxExec';
|
|
8
|
-
export type replacementCallback = (obj: any, isStaticAccess: boolean) => any;
|
|
9
|
-
export interface IOptionParams {
|
|
10
|
-
audit?: boolean;
|
|
11
|
-
forbidFunctionCalls?: boolean;
|
|
12
|
-
forbidFunctionCreation?: boolean;
|
|
13
|
-
prototypeReplacements?: Map<Function, replacementCallback>;
|
|
14
|
-
prototypeWhitelist?: Map<Function, Set<string>>;
|
|
15
|
-
globals?: IGlobals;
|
|
16
|
-
executionQuota?: bigint;
|
|
17
|
-
haltOnSandboxError?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface IOptions {
|
|
20
|
-
audit: boolean;
|
|
21
|
-
forbidFunctionCalls: boolean;
|
|
22
|
-
forbidFunctionCreation: boolean;
|
|
23
|
-
prototypeReplacements: Map<Function, replacementCallback>;
|
|
24
|
-
prototypeWhitelist: Map<Function, Set<string>>;
|
|
25
|
-
globals: IGlobals;
|
|
26
|
-
executionQuota?: bigint;
|
|
27
|
-
haltOnSandboxError?: boolean;
|
|
28
|
-
}
|
|
29
|
-
export interface IContext {
|
|
30
|
-
sandbox: SandboxExec;
|
|
31
|
-
globalScope: Scope;
|
|
32
|
-
sandboxGlobal: ISandboxGlobal;
|
|
33
|
-
globalsWhitelist: Set<any>;
|
|
34
|
-
prototypeWhitelist: Map<any, Set<PropertyKey>>;
|
|
35
|
-
sandboxedFunctions: WeakSet<Function>;
|
|
36
|
-
options: IOptions;
|
|
37
|
-
auditReport?: IAuditReport;
|
|
38
|
-
ticks: Ticks;
|
|
39
|
-
}
|
|
40
|
-
export interface IAuditReport {
|
|
41
|
-
globalsAccess: Set<unknown>;
|
|
42
|
-
prototypeAccess: {
|
|
43
|
-
[name: string]: Set<PropertyKey>;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export interface Ticks {
|
|
47
|
-
ticks: bigint;
|
|
48
|
-
tickLimit?: bigint;
|
|
49
|
-
}
|
|
50
|
-
export type SubscriptionSubject = object;
|
|
51
|
-
export interface IExecContext extends IExecutionTree {
|
|
52
|
-
ctx: IContext;
|
|
53
|
-
getSubscriptions: Set<(obj: SubscriptionSubject, name: string) => void>;
|
|
54
|
-
setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
55
|
-
changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
56
|
-
setSubscriptionsGlobal: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
57
|
-
changeSubscriptionsGlobal: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
58
|
-
registerSandboxFunction: (fn: (...args: any[]) => any) => void;
|
|
59
|
-
evals: Map<Function, Function>;
|
|
60
|
-
allowJit: boolean;
|
|
61
|
-
evalContext?: IEvalContext;
|
|
62
|
-
}
|
|
63
|
-
export interface ISandboxGlobal {
|
|
64
|
-
[key: string]: unknown;
|
|
65
|
-
}
|
|
66
|
-
interface SandboxGlobalConstructor {
|
|
67
|
-
new (globals: IGlobals): ISandboxGlobal;
|
|
68
|
-
}
|
|
69
|
-
export declare const SandboxGlobal: SandboxGlobalConstructor;
|
|
70
|
-
export type IGlobals = ISandboxGlobal;
|
|
71
|
-
export declare class ExecContext implements IExecContext {
|
|
72
|
-
ctx: IContext;
|
|
73
|
-
constants: IConstants;
|
|
74
|
-
tree: Lisp[];
|
|
75
|
-
getSubscriptions: Set<(obj: SubscriptionSubject, name: string) => void>;
|
|
76
|
-
setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
77
|
-
changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
78
|
-
setSubscriptionsGlobal: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
79
|
-
changeSubscriptionsGlobal: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
80
|
-
evals: Map<any, any>;
|
|
81
|
-
registerSandboxFunction: (fn: (...args: any[]) => any) => void;
|
|
82
|
-
allowJit: boolean;
|
|
83
|
-
evalContext?: IEvalContext | undefined;
|
|
84
|
-
constructor(ctx: IContext, constants: IConstants, tree: Lisp[], getSubscriptions: Set<(obj: SubscriptionSubject, name: string) => void>, setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>, changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>, setSubscriptionsGlobal: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>, changeSubscriptionsGlobal: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>, evals: Map<any, any>, registerSandboxFunction: (fn: (...args: any[]) => any) => void, allowJit: boolean, evalContext?: IEvalContext | undefined);
|
|
85
|
-
}
|
|
86
|
-
export declare function createContext(sandbox: SandboxExec, options: IOptions): IContext;
|
|
87
|
-
export declare function createExecContext(sandbox: {
|
|
88
|
-
readonly setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
|
|
89
|
-
readonly changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
|
|
90
|
-
readonly sandboxFunctions: WeakMap<(...args: any[]) => any, IExecContext>;
|
|
91
|
-
readonly context: IContext;
|
|
92
|
-
}, executionTree: IExecutionTree, evalContext?: IEvalContext): IExecContext;
|
|
93
|
-
export declare class CodeString {
|
|
94
|
-
start: number;
|
|
95
|
-
end: number;
|
|
96
|
-
ref: {
|
|
97
|
-
str: string;
|
|
98
|
-
};
|
|
99
|
-
constructor(str: string | CodeString);
|
|
100
|
-
substring(start: number, end?: number): CodeString;
|
|
101
|
-
get length(): number;
|
|
102
|
-
char(i: number): string | undefined;
|
|
103
|
-
toString(): string;
|
|
104
|
-
trimStart(): CodeString;
|
|
105
|
-
slice(start: number, end?: number): CodeString;
|
|
106
|
-
trim(): CodeString;
|
|
107
|
-
valueOf(): string;
|
|
108
|
-
}
|
|
109
|
-
export declare const reservedWords: Set<string>;
|
|
110
|
-
export declare const enum VarType {
|
|
111
|
-
let = "let",
|
|
112
|
-
const = "const",
|
|
113
|
-
var = "var"
|
|
114
|
-
}
|
|
115
|
-
export declare class Scope {
|
|
116
|
-
parent: Scope | null;
|
|
117
|
-
const: {
|
|
118
|
-
[key: string]: true;
|
|
119
|
-
};
|
|
120
|
-
let: {
|
|
121
|
-
[key: string]: true;
|
|
122
|
-
};
|
|
123
|
-
var: {
|
|
124
|
-
[key: string]: true;
|
|
125
|
-
};
|
|
126
|
-
globals: {
|
|
127
|
-
[key: string]: true;
|
|
128
|
-
};
|
|
129
|
-
allVars: {
|
|
130
|
-
[key: string]: unknown;
|
|
131
|
-
} & object;
|
|
132
|
-
functionThis?: Unknown;
|
|
133
|
-
constructor(parent: Scope | null, vars?: {}, functionThis?: Unknown);
|
|
134
|
-
get(key: string): Prop;
|
|
135
|
-
set(key: string, val: unknown): Prop<unknown>;
|
|
136
|
-
getWhereValScope(key: string, isThis: boolean): Scope | null;
|
|
137
|
-
getWhereVarScope(key: string, localScope?: boolean): Scope;
|
|
138
|
-
declare(key: string, type: VarType, value?: unknown, isGlobal?: boolean): Prop;
|
|
139
|
-
}
|
|
140
|
-
export interface IScope {
|
|
141
|
-
[key: string]: any;
|
|
142
|
-
}
|
|
143
|
-
export declare class FunctionScope implements IScope {
|
|
144
|
-
}
|
|
145
|
-
export declare class LocalScope implements IScope {
|
|
146
|
-
}
|
|
147
|
-
export declare class SandboxError extends Error {
|
|
148
|
-
}
|
|
149
|
-
export declare class SandboxExecutionQuotaExceededError extends SandboxError {
|
|
150
|
-
}
|
|
151
|
-
export declare class SandboxExecutionTreeError extends SandboxError {
|
|
152
|
-
}
|
|
153
|
-
export declare class SandboxCapabilityError extends SandboxError {
|
|
154
|
-
}
|
|
155
|
-
export declare class SandboxAccessError extends SandboxError {
|
|
156
|
-
}
|
|
157
|
-
export declare function isLisp<Type extends Lisp = Lisp>(item: LispItem | LispItem): item is Type;
|
|
158
|
-
export declare const enum LispType {
|
|
159
|
-
None = 0,
|
|
160
|
-
Prop = 1,
|
|
161
|
-
StringIndex = 2,
|
|
162
|
-
Let = 3,
|
|
163
|
-
Const = 4,
|
|
164
|
-
Call = 5,
|
|
165
|
-
KeyVal = 6,
|
|
166
|
-
Number = 7,
|
|
167
|
-
Return = 8,
|
|
168
|
-
Assign = 9,
|
|
169
|
-
InlineFunction = 10,
|
|
170
|
-
ArrowFunction = 11,
|
|
171
|
-
CreateArray = 12,
|
|
172
|
-
If = 13,
|
|
173
|
-
IfCase = 14,
|
|
174
|
-
InlineIf = 15,
|
|
175
|
-
InlineIfCase = 16,
|
|
176
|
-
SpreadObject = 17,
|
|
177
|
-
SpreadArray = 18,
|
|
178
|
-
ArrayProp = 19,
|
|
179
|
-
PropOptional = 20,
|
|
180
|
-
CallOptional = 21,
|
|
181
|
-
CreateObject = 22,
|
|
182
|
-
Group = 23,
|
|
183
|
-
Not = 24,
|
|
184
|
-
IncrementBefore = 25,
|
|
185
|
-
IncrementAfter = 26,
|
|
186
|
-
DecrementBefore = 27,
|
|
187
|
-
DecrementAfter = 28,
|
|
188
|
-
And = 29,
|
|
189
|
-
Or = 30,
|
|
190
|
-
StrictNotEqual = 31,
|
|
191
|
-
StrictEqual = 32,
|
|
192
|
-
Plus = 33,
|
|
193
|
-
Var = 34,
|
|
194
|
-
GlobalSymbol = 35,
|
|
195
|
-
Literal = 36,
|
|
196
|
-
Function = 37,
|
|
197
|
-
Loop = 38,
|
|
198
|
-
Try = 39,
|
|
199
|
-
Switch = 40,
|
|
200
|
-
SwitchCase = 41,
|
|
201
|
-
Block = 42,
|
|
202
|
-
Expression = 43,
|
|
203
|
-
Await = 44,
|
|
204
|
-
New = 45,
|
|
205
|
-
Throw = 46,
|
|
206
|
-
Minus = 47,
|
|
207
|
-
Divide = 48,
|
|
208
|
-
Power = 49,
|
|
209
|
-
Multiply = 50,
|
|
210
|
-
Modulus = 51,
|
|
211
|
-
Equal = 52,
|
|
212
|
-
NotEqual = 53,
|
|
213
|
-
SmallerEqualThan = 54,
|
|
214
|
-
LargerEqualThan = 55,
|
|
215
|
-
SmallerThan = 56,
|
|
216
|
-
LargerThan = 57,
|
|
217
|
-
Negative = 58,
|
|
218
|
-
Positive = 59,
|
|
219
|
-
Typeof = 60,
|
|
220
|
-
Delete = 61,
|
|
221
|
-
Instanceof = 62,
|
|
222
|
-
In = 63,
|
|
223
|
-
Inverse = 64,
|
|
224
|
-
SubractEquals = 65,
|
|
225
|
-
AddEquals = 66,
|
|
226
|
-
DivideEquals = 67,
|
|
227
|
-
PowerEquals = 68,
|
|
228
|
-
MultiplyEquals = 69,
|
|
229
|
-
ModulusEquals = 70,
|
|
230
|
-
BitNegateEquals = 71,
|
|
231
|
-
BitAndEquals = 72,
|
|
232
|
-
BitOrEquals = 73,
|
|
233
|
-
UnsignedShiftRightEquals = 74,
|
|
234
|
-
ShiftRightEquals = 75,
|
|
235
|
-
ShiftLeftEquals = 76,
|
|
236
|
-
BitAnd = 77,
|
|
237
|
-
BitOr = 78,
|
|
238
|
-
BitNegate = 79,
|
|
239
|
-
BitShiftLeft = 80,
|
|
240
|
-
BitShiftRight = 81,
|
|
241
|
-
BitUnsignedShiftRight = 82,
|
|
242
|
-
BigInt = 83,
|
|
243
|
-
LiteralIndex = 84,
|
|
244
|
-
RegexIndex = 85,
|
|
245
|
-
LoopAction = 86,
|
|
246
|
-
Void = 87,
|
|
247
|
-
True = 88,
|
|
248
|
-
NullishCoalescing = 89,
|
|
249
|
-
AndEquals = 90,
|
|
250
|
-
OrEquals = 91,
|
|
251
|
-
NullishCoalescingEquals = 92,
|
|
252
|
-
LispEnumSize = 93
|
|
253
|
-
}
|
|
254
|
-
export declare class Prop<T = unknown> {
|
|
255
|
-
context: T;
|
|
256
|
-
prop: PropertyKey;
|
|
257
|
-
isConst: boolean;
|
|
258
|
-
isGlobal: boolean;
|
|
259
|
-
isVariable: boolean;
|
|
260
|
-
constructor(context: T, prop: PropertyKey, isConst?: boolean, isGlobal?: boolean, isVariable?: boolean);
|
|
261
|
-
get<T = unknown>(context: IExecContext): T;
|
|
262
|
-
}
|
|
263
|
-
export declare function hasOwnProperty(obj: unknown, prop: PropertyKey): boolean;
|
|
264
|
-
export {};
|