kei-lisp 2.0.0 → 2.1.0
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/README.md +30 -14
- package/dist/cli.cjs +2442 -3020
- package/dist/cli.d.cts +1 -0
- package/dist/index.cjs +2441 -2899
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +402 -328
- package/dist/index.d.ts +402 -328
- package/dist/index.js +2412 -2890
- package/dist/index.js.map +1 -1
- package/package.json +27 -30
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.14_typescript@5.9.3_yaml@2.8.4/node_modules/tsup/assets/cjs_shims.js","../src/runtime/Table/index.ts","../src/value/InterpretedSymbol/index.ts","../src/value/Loop/index.ts","../src/parser/IntStream/index.ts","../src/parser/NextState/index.ts","../src/parser/Parser/index.ts","../src/value/Cons/index.ts","../src/constants/index.ts","../src/runtime/Applier/index.ts","../src/runtime/ExitError/index.ts","../src/runtime/StreamManager/index.ts","../src/runtime/Evaluator/index.ts","../src/LispInterpreter/index.ts"],"names":["v8","vm","require","createRequire"],"mappings":"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","file":"index.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { Cons } from '../../value/Cons/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Class that manages bindings of interpreted symbols.\n * @author Keisuke Ikeda\n * @this {Table}\n */\nexport class Table extends Map<unknown, LispValue> {\n source: Table | null;\n root: boolean;\n\n /**\n * Constructor.\n * @param aTable the environment in which this environment was created\n */\n constructor(aTable: Table | null = null) {\n super();\n this.source = aTable;\n // Following the original: keep the ternary as-is.\n this.root = aTable == null ? true : false;\n }\n\n /**\n * Clones this Table and returns the clone.\n */\n clone(): Table {\n const aTable = new Table(this);\n for (const key of this.keys()) {\n const value = Cons.cloneValue(this.get(key));\n if (value == null) {\n throw new Error('RuntimeException!');\n }\n aTable.set(key, value);\n }\n\n return aTable;\n }\n\n /**\n * Returns whether anything is bound to the given property (key).\n */\n override has(aSymbol: unknown): boolean {\n if (super.has(aSymbol)) {\n return true;\n }\n if (this.isRoot()) {\n return false;\n }\n\n // Following the original: if source is null, this throws TypeError at runtime\n // (in practice source is non-null whenever isRoot=false).\n return (this.source as Table).has(aSymbol);\n }\n\n /**\n * Returns whether this instance equals the given object.\n */\n equals(anObject: unknown): boolean {\n // Following the original: Map has no equals method, so this throws TypeError when called.\n return (Map.prototype as unknown as { equals(o: unknown): boolean }).equals(anObject);\n }\n\n /**\n * Returns the value bound to the given interpreted symbol.\n */\n override get(aSymbol: unknown): LispValue {\n if (super.has(aSymbol)) {\n return super.get(aSymbol) as LispValue;\n }\n if (this.isRoot()) {\n return null;\n }\n\n // Following the original: throws TypeError at runtime if source is null.\n return (this.source as Table).get(aSymbol);\n }\n\n /**\n * Returns whether this instance is the root of the environment chain.\n */\n isRoot(): boolean {\n return this.root;\n }\n\n /**\n * Reassigns the symbol bound in the innermost scope (equivalent to Common Lisp's setq).\n * If a binding exists in the current scope, update it and return; otherwise recurse into the parent scope.\n */\n setIfExist(aSymbol: unknown, anObject: LispValue): LispValue {\n if (super.has(aSymbol)) {\n this.set(aSymbol, anObject);\n return anObject;\n }\n if (this.isRoot()) {\n return null;\n }\n return (this.source as Table).setIfExist(aSymbol, anObject);\n }\n\n /**\n * Sets whether this instance is the root of its environment chain.\n */\n setRoot(aBoolean: boolean): null {\n this.root = aBoolean;\n return null;\n }\n\n /**\n * Sets the parent environment.\n */\n setSource(aTable: Table | null): null {\n this.source = aTable;\n return null;\n }\n\n /**\n * Returns a formatted string representation of this instance.\n */\n override toString(): string {\n return '#<Environment>';\n }\n}\n","import { Table } from '../../runtime/Table/index.js';\n\n/**\n * @class\n * @classdesc Interpreted symbol with uniqueness, where each printed name maps to a single canonical instance (identity equals equality). A class that mimics canonical strings, distinct from JS's standard Symbol.\n * @author Keisuke Ikeda\n * @this {InterpretedSymbol}\n */\nexport class InterpretedSymbol {\n /**\n * Table that stores InterpretedSymbol instances (lazily initialized to avoid a circular dependency).\n */\n static #intern: Table | null = null;\n static get table(): Table {\n this.#intern ??= new Table();\n return this.#intern;\n }\n\n name: string;\n\n /**\n * Constructor.\n * @param name printed name\n */\n constructor(name: string = 'null') {\n this.name = name;\n }\n\n /**\n * Compares this interpreted symbol with the given one by printed name.\n * @param aSymbol the symbol to compare against\n * @return the difference in string length\n */\n compareTo(aSymbol: InterpretedSymbol): number {\n const left = this.name.codePointAt(0) ?? 0;\n const right = aSymbol.name.codePointAt(0) ?? 0;\n let aNumber = left < right ? aSymbol.name.length - left : left - aSymbol.name.length;\n aNumber = left === right ? 0 : aNumber;\n\n return aNumber;\n }\n\n /**\n * Returns whether this symbol equals the given object.\n */\n equals(anObject: unknown): boolean {\n return this === anObject;\n }\n\n /**\n * Returns the same interpreted symbol for a given printed name.\n * @param aString printed name\n */\n static of(aString: string): InterpretedSymbol {\n let aSymbol = this.table.get(aString) as InterpretedSymbol | null;\n\n if (aSymbol == null) {\n aSymbol = new InterpretedSymbol(aString);\n this.table.set(aString, aSymbol);\n }\n\n return aSymbol;\n }\n\n /**\n * Returns the string representation of this symbol.\n */\n toString(): string {\n return this.name;\n }\n}\n","import type { Cons } from '../Cons/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Iterator class for Cons.\n * @author Keisuke Ikeda\n * @this {Loop}\n */\nexport class Loop {\n aCons: Cons;\n length: number;\n index: number;\n\n /**\n * Constructor.\n * @param aCons the Cons to iterate over\n */\n constructor(aCons: Cons) {\n this.aCons = aCons;\n this.length = aCons.length();\n this.index = 1;\n }\n\n /**\n * Returns this instance.\n */\n iterator(): this {\n return this;\n }\n\n /**\n * Returns whether a next element exists.\n */\n hasNext(): boolean {\n return this.index <= this.length;\n }\n\n /**\n * Returns the next element.\n */\n next(): LispValue {\n const anObject = this.aCons.nth(this.index);\n this.remove();\n\n return anObject;\n }\n\n /**\n * Implementation of the iterable protocol.\n * Enables iteration with for...of and similar constructs.\n */\n [Symbol.iterator](): Iterator<LispValue> {\n return {\n next: (): IteratorResult<LispValue> => {\n if (this.index <= this.length) {\n const nextValue = this.aCons.nth(this.index);\n this.remove();\n return { value: nextValue, done: false };\n }\n // Following the original: omit the value field.\n return { done: true } as IteratorResult<LispValue>;\n },\n };\n }\n\n /**\n * Implementation of the async iterable protocol.\n * Enables iteration with for await...of and similar constructs.\n */\n [Symbol.asyncIterator](): AsyncIterator<LispValue> {\n return {\n next: (): Promise<IteratorResult<LispValue>> => {\n if (this.index <= this.length) {\n const nextValue = this.aCons.nth(this.index);\n this.remove();\n return Promise.resolve({ value: nextValue, done: false });\n }\n // Following the original: omit the value field.\n return Promise.resolve({ done: true } as IteratorResult<LispValue>);\n },\n };\n }\n\n /**\n * Advances to the next element.\n */\n remove(): null {\n this.index++;\n return null;\n }\n}\n","/**\n * @class\n * @classdesc Class that mimics Java's IntStream.\n * @author Keisuke Ikeda\n * @this {IntStream}\n */\nexport class IntStream {\n /**\n * Builds and returns an array of consecutive integers from start to afterEnd (exclusive).\n */\n static range(start: number, afterEnd: number): number[] {\n const end = afterEnd - 1;\n return this.rangeClosed(start, end);\n }\n\n /**\n * Builds and returns an array of consecutive integers from start to end (inclusive).\n */\n static rangeClosed(start: number, end: number): number[] {\n const range = end - start + 1;\n return Array.from({ length: range }, () => start++);\n }\n}\n","import type { Parser } from '../Parser/index.js';\n\n/**\n * @class\n * @classdesc Class that holds the next state.\n * @author Keisuke Ikeda\n * @this {NextState}\n */\nexport class NextState {\n automaton: Parser | null = null;\n nextState: number | null;\n method: unknown;\n methodName: string | null;\n\n /**\n * Constructor.\n */\n constructor(aNumber: number | null, aString: string | null) {\n this.nextState = aNumber;\n this.method = null;\n this.methodName = aString;\n }\n\n /**\n * Invokes the method corresponding to the input character and returns the resulting token number.\n */\n next(anAutomaton: Parser): number {\n this.automaton = anAutomaton;\n if (this.methodName == null) {\n return Number(this.nextState);\n }\n if (this.method == null) {\n try {\n this.method = (this.automaton as unknown as Record<string, unknown>)[this.methodName];\n } catch {\n throw new Error('Not Found Method: ' + this.methodName);\n }\n }\n\n let aNumber = -1;\n try {\n if (this.nextState != null) {\n aNumber = this.nextState;\n }\n const anObject = (this.automaton as unknown as Record<string, () => unknown>)[\n this.methodName\n ]();\n if (anObject != null) {\n aNumber = Number(anObject);\n }\n } catch {\n throw new Error('Not Invoke Method: ' + this.methodName);\n }\n\n return aNumber;\n }\n}\n","import { Cons } from '../../value/Cons/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport { IntStream } from '../IntStream/index.js';\nimport { NextState } from '../NextState/index.js';\nimport type { LispValue } from '../../types/index.js';\n\nconst PEEKCOUNT = 10;\nconst SYNTAX_ERROR = 'Syntax Error!';\n\n/**\n * @class\n * @classdesc Class that performs parsing (syntactic analysis).\n * @author Keisuke Ikeda\n * @this {Parser}\n */\nexport class Parser {\n stream: Iterator<string>;\n token: LispValue;\n tokenString: string;\n states: Map<number, Map<string, NextState>>;\n state: number;\n nexts: Array<string | null>;\n\n /**\n * Constructor.\n * @param aString the string to parse\n */\n constructor(aString: string) {\n this.stream = aString[Symbol.iterator]();\n this.token = null;\n this.tokenString = '';\n this.states = new Map();\n this.state = 0;\n this.nexts = Array.from({ length: PEEKCOUNT + 1 }, (): string | null => null);\n this.initializeStateTransitionTable();\n let count = 0;\n while (count++ < PEEKCOUNT) {\n this.nextChar();\n }\n }\n\n /**\n * Returns whether this is the last element.\n */\n atEnd(): boolean {\n return this.peekChar() == null;\n }\n\n /**\n * Concatenates the current character into the token string.\n */\n concatCharacter(): null {\n this.tokenString = this.tokenString.concat(String(this.nexts[0]));\n return null;\n }\n\n /**\n * Parses a single character of the input string.\n */\n input(aCharacter: string | null = this.nextChar()): LispValue {\n // Following the original: throws TypeError on .has when inputs is undefined.\n const inputs = this.states.get(this.state) as Map<string, NextState>;\n\n // Following the original: throws TypeError on codePointAt when aCharacter is null.\n const codePoint = (aCharacter as string).codePointAt(0) ?? 0;\n const aNumber = inputs.has(String(codePoint))\n ? (inputs.get(String(codePoint)) as NextState).next(this)\n : (inputs.get(String(128)) as NextState).next(this);\n\n if (aNumber < 0) {\n throw new Error(SYNTAX_ERROR);\n }\n this.state = aNumber;\n\n return this.token;\n }\n\n /**\n * Returns the next character to be parsed from the input string.\n */\n nextChar(): string | null {\n let aCharacter: string | null = null;\n try {\n const aNumber = (this.stream.next().value as string | undefined)?.codePointAt(0) ?? -1;\n if (aNumber >= 0) {\n aCharacter = String.fromCodePoint(aNumber);\n }\n } catch {\n throw new Error('Read Error!');\n }\n\n let count = 0;\n while (count < PEEKCOUNT) {\n this.nexts[count] = this.nexts[count + 1];\n count++;\n }\n this.nexts[count] = aCharacter;\n\n return this.nexts[0];\n }\n\n /**\n * Determines and returns the next token.\n */\n nextToken(): LispValue {\n this.token = null;\n let token: LispValue = null;\n\n while (!this.atEnd()) {\n if (this.state === 0 && token != null) {\n break;\n }\n token = this.input();\n }\n if (this.atEnd() && this.state !== 0) {\n throw new Error(SYNTAX_ERROR);\n }\n this.tokenString = '';\n\n return token;\n }\n\n /**\n * Instantiates and returns a NextState.\n */\n nextState(aNumber: number | null, aString: string | null): NextState {\n return new NextState(aNumber, aString);\n }\n\n /**\n * Parses the given string and returns the result.\n */\n static parse(aString: string): LispValue {\n return new Parser(aString).nextToken();\n }\n\n /**\n * Returns the next character if one exists.\n */\n peekChar(aNumber: number = 1): string | null {\n if (aNumber > this.nexts.length) {\n throw new Error('Read Error!');\n }\n return this.nexts[aNumber];\n }\n\n /**\n * Concatenates characters; invoked from NextState.\n */\n concat(): null {\n this.concatCharacter();\n return null;\n }\n\n /**\n * Concatenates the current character after translating common escape sequences\n * (`\\n`, `\\t`, `\\r`, `\\\\`, `\\\"`) into their actual characters. Invoked from NextState\n * inside a string literal after a backslash. Unknown escapes pass through as the\n * literal character (e.g. `\\x` becomes `x`).\n */\n escapeConcat(): null {\n const c = String(this.nexts[0]);\n const map: Record<string, string> = {\n n: '\\n',\n t: '\\t',\n r: '\\r',\n '\\\\': '\\\\',\n '\"': '\"',\n };\n this.tokenString = this.tokenString.concat(map[c] ?? c);\n return null;\n }\n\n /**\n * Returns the token number for a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n doubleToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToDouble();\n return 0;\n }\n\n return 3;\n }\n\n /**\n * Returns the token number for a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n doubleTokenAUX(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToDouble();\n return 0;\n }\n\n return 5;\n }\n\n /**\n * Returns the token number for a Number-type (integer: pseudo-Integer); invoked from NextState.\n */\n integerToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToInteger();\n return 0;\n }\n\n return 2;\n }\n\n /**\n * Converts the token into a list (Cons) and returns the token number for a list (Cons); invoked from NextState.\n */\n parseList(): number {\n this.skippingSpaces();\n if (this.rightParen()) {\n this.nextChar();\n this.token = Cons.nil;\n } else {\n this.token = this.parseListAUX();\n }\n\n return 0;\n }\n\n /**\n * Helper that converts the token into a list (Cons); invoked from NextState.\n */\n parseListAUX(): LispValue {\n this.skippingSpaces();\n if (this.peekChar() === ';') {\n while (this.peekChar() !== '\\n' && this.peekChar() != null) {\n this.nextChar();\n }\n this.nextChar();\n this.skippingSpaces();\n }\n if (this.rightParen()) {\n this.nextChar();\n return Cons.nil;\n } else if (this.peekChar() === '.') {\n this.nextChar();\n this.state = 0;\n const cdr = this.nextToken();\n this.skippingSpaces();\n if (!this.rightParen()) {\n throw new Error(SYNTAX_ERROR);\n }\n this.nextChar();\n\n return cdr;\n } else {\n this.state = 0;\n return new Cons(this.nextToken(), this.parseListAUX());\n }\n }\n\n /**\n * Recognizes a quote, wraps the token into a list (Cons), and returns the token number; invoked from NextState.\n */\n quote(): number {\n const anObject = new Cons(this.nextToken(), Cons.nil);\n this.token = new Cons(InterpretedSymbol.of('quote'), anObject);\n\n return 0;\n }\n\n /**\n * Returns the token number for a quote or for a 0-origin String-type (pseudo-Character); invoked from NextState.\n */\n quoteOrChar(): number {\n let aNumber = this.peekChar() === '\\\\' ? 3 : 2;\n aNumber = this.peekChar(aNumber) === \"'\" ? 11 : this.quote();\n\n return aNumber;\n }\n\n /**\n * Detects a right parenthesis (')', ']', '}') and returns the result; invoked from NextState.\n */\n rightParen(): boolean {\n return this.peekChar() === ')' || this.peekChar() === ']' || this.peekChar() === '}';\n }\n\n /**\n * Returns the token number for a sign symbol ('+', '-'); invoked from NextState.\n */\n sign(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToSymbol();\n return 0;\n }\n return 7;\n }\n\n /**\n * Skips whitespace; invoked from NextState.\n */\n skippingSpaces(): null {\n while (\n this.nexts[1] === String.fromCodePoint(9) ||\n this.nexts[1] === String.fromCodePoint(10) ||\n this.nexts[1] === String.fromCodePoint(11) ||\n this.nexts[1] === String.fromCodePoint(12) ||\n this.nexts[1] === String.fromCodePoint(13) ||\n this.nexts[1] === String.fromCodePoint(32)\n ) {\n this.nextChar();\n }\n\n return null;\n }\n\n /**\n * Returns the token number for an InterpretedSymbol; invoked from NextState.\n */\n symbolToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToSymbol();\n return 0;\n }\n\n return 8;\n }\n\n /**\n * Converts the token into a 0-origin String-type (pseudo-Character); invoked from NextState.\n */\n tokenToCharacter(): null {\n this.token = this.tokenString.charAt(0);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n tokenToDouble(): null {\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n tokenToDoubleAUX(): null {\n this.concat();\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (integer: pseudo-Integer); invoked from NextState.\n */\n tokenToInteger(): null {\n const aCharacter = this.tokenString[0];\n if (aCharacter === '+') {\n this.tokenString = this.tokenString.slice(1);\n }\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a String-type; invoked from NextState.\n */\n tokenToString(): null {\n this.token = this.tokenString;\n return null;\n }\n\n /**\n * Converts the token into an InterpretedSymbol; invoked from NextState.\n */\n tokenToSymbol(): null {\n this.token = InterpretedSymbol.of(this.tokenString);\n if (this.token === InterpretedSymbol.of('nil')) {\n this.token = Cons.nil;\n }\n return null;\n }\n\n /**\n * Builds the lookup table that maps character codes to their corresponding methods (tokens).\n */\n initializeStateTransitionTable(): null {\n let aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 8))\n aTable.set(String(index), this.nextState(-1, null));\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, null));\n for (const index of IntStream.rangeClosed(14, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(32), this.nextState(0, null));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n aTable.set(String(34), this.nextState(9, null));\n aTable.set(String(35), this.nextState(8, 'symbolToken'));\n aTable.set(String(36), this.nextState(8, 'symbolToken'));\n aTable.set(String(37), this.nextState(8, 'symbolToken'));\n aTable.set(String(38), this.nextState(8, 'symbolToken'));\n aTable.set(String(39), this.nextState(-1, 'quoteOrChar'));\n aTable.set(String(40), this.nextState(-1, 'parseList'));\n aTable.set(String(41), this.nextState(-1, null));\n aTable.set(String(42), this.nextState(8, 'symbolToken'));\n aTable.set(String(43), this.nextState(7, 'sign'));\n aTable.set(String(44), this.nextState(8, 'symbolToken'));\n aTable.set(String(45), this.nextState(7, 'sign'));\n aTable.set(String(46), this.nextState(-1, null));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(59), this.nextState(1, null));\n aTable.set(String(91), this.nextState(-1, 'parseList'));\n aTable.set(String(92), this.nextState(-1, null));\n aTable.set(String(93), this.nextState(-1, null));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n aTable.set(String(96), this.nextState(0, 'quote'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(123), this.nextState(-1, 'parseList'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(125), this.nextState(-1, null));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(0, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 8))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(10), this.nextState(0, null));\n aTable.set(String(13), this.nextState(0, null));\n for (const index of IntStream.rangeClosed(14, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(1, null));\n this.states.set(1, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToInteger'));\n aTable.set(String(32), this.nextState(0, 'tokenToInteger'));\n aTable.set(String(46), this.nextState(3, 'doubleToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n aTable.set(String(69), this.nextState(4, 'concat'));\n aTable.set(String(101), this.nextState(4, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(2, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToDouble'));\n aTable.set(String(32), this.nextState(0, 'tokenToDouble'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(3, 'doubleToken'));\n aTable.set(String(68), this.nextState(0, 'tokenToDoubleAUX'));\n aTable.set(String(69), this.nextState(4, 'concat'));\n aTable.set(String(100), this.nextState(0, 'tokenToDoubleAUX'));\n aTable.set(String(101), this.nextState(4, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(3, aTable);\n\n aTable = new Map<string, NextState>();\n aTable.set(String(43), this.nextState(6, 'concat'));\n aTable.set(String(45), this.nextState(6, 'concat'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(4, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToDouble'));\n aTable.set(String(32), this.nextState(0, 'tokenToDouble'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(5, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(6, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(32), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(35, 38))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(42, 45))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(7, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(32), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(35, 38))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(42, 45))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(8, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(34), this.nextState(0, 'tokenToString'));\n aTable.set(String(92), this.nextState(10, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(9, 'concat'));\n this.states.set(9, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(9, 'escapeConcat'));\n this.states.set(10, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(32, 38))\n aTable.set(String(index), this.nextState(12, 'concat'));\n for (const index of IntStream.rangeClosed(40, 91))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(92), this.nextState(13, null));\n for (const index of IntStream.rangeClosed(93, 126))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(11, aTable);\n\n aTable = new Map<string, NextState>();\n aTable.set(String(39), this.nextState(0, 'tokenToCharacter'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(12, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(32, 38))\n aTable.set(String(index), this.nextState(12, 'concat'));\n for (const index of IntStream.rangeClosed(40, 126))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(13, aTable);\n\n return null;\n }\n}\n","import { InterpretedSymbol } from '../InterpretedSymbol/index.js';\nimport { Loop } from '../Loop/index.js';\nimport { Parser } from '../../parser/Parser/index.js';\nimport { Table } from '../../runtime/Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Class that mimics a Cons cell.\n * @author Keisuke Ikeda\n * @this {Cons}\n */\nexport class Cons {\n static readonly nil: Cons = new Cons();\n\n car: LispValue;\n cdr: LispValue;\n\n /**\n * Constructor.\n * @constructor\n * @param car the car; defaults to nil when no argument is given.\n * @param cdr the cdr; defaults to nil when no argument is given.\n */\n constructor(car: LispValue = Cons.nil, cdr: LispValue = Cons.nil) {\n this.car = car;\n this.cdr = cdr;\n }\n\n /**\n * Appends the given element to the end of this Cons.\n * @param anObject the object to append\n * @return the Cons with the element appended\n */\n add(anObject: LispValue): this {\n const aCons = new Cons(anObject, Cons.nil);\n return this.nconc(aCons);\n }\n\n /**\n * Clones this Cons and returns the clone.\n * @return the cloned Cons\n */\n clone(): Cons {\n return new Cons(Cons.cloneValue(this.car), Cons.cloneValue(this.cdr));\n }\n\n /**\n * Clones the given value (a Cons element) and returns the clone.\n * @param value a Cons element\n * @return the cloned element\n */\n static cloneValue(value: LispValue): LispValue {\n if (Cons.isCons(value)) {\n return value.clone();\n }\n if (Cons.isNil(value)) {\n return Cons.nil;\n }\n if (Cons.isNumber(value)) {\n return value;\n }\n if (Cons.isString(value)) {\n return value;\n }\n if (Cons.isSymbol(value)) {\n return value;\n }\n if (Cons.isTable(value)) {\n return value;\n }\n return value;\n }\n\n /**\n * Returns whether this Cons equals the given object.\n * @param anObject the object to compare against\n * @return a boolean\n */\n equals(anObject: LispValue): boolean {\n if (Cons.isCons(anObject)) {\n return this.equalsAUX(this, anObject);\n }\n return false;\n }\n\n /**\n * Returns whether both arguments are Cons cells and are equal.\n * @param left the object to compare\n * @param right the object to compare\n * @return a boolean\n */\n equalsAUX(left: LispValue, right: LispValue): boolean {\n if (left === right) {\n return true;\n }\n if (!(Cons.isCons(left) && Cons.isCons(right))) {\n return false;\n }\n if (this.equalsAUX(left.car, right.car)) {\n return this.equalsAUX(left.cdr, right.cdr);\n }\n\n return false;\n }\n\n /**\n * Returns whether the given argument is an Atom.\n */\n static isAtom(anObject: LispValue): boolean {\n return Cons.isNotCons(anObject);\n }\n\n /**\n * Returns whether the given argument is a Cons.\n */\n static isCons(anObject: LispValue): anObject is Cons {\n return anObject !== Cons.nil && anObject instanceof Cons;\n }\n\n /**\n * Returns whether the given argument is a List.\n */\n static isList(anObject: LispValue): boolean {\n return Cons.isNil(anObject) || Cons.isCons(anObject);\n }\n\n /**\n * Returns whether the given argument is Nil.\n */\n static isNil(anObject: LispValue): boolean {\n return anObject === Cons.nil;\n }\n\n /**\n * Returns whether the given argument is not a Cons.\n */\n static isNotCons(anObject: LispValue): boolean {\n return !Cons.isCons(anObject);\n }\n\n /**\n * Returns whether the given argument is not a List.\n */\n static isNotList(anObject: LispValue): boolean {\n return !Cons.isList(anObject);\n }\n\n /**\n * Returns whether the given argument is not Nil.\n */\n static isNotNil(anObject: LispValue): boolean {\n return !Cons.isNil(anObject);\n }\n\n /**\n * Returns whether the given argument is not an interpreted symbol.\n */\n static isNotSymbol(anObject: LispValue): boolean {\n return !Cons.isSymbol(anObject);\n }\n\n /**\n * Returns whether the given argument is a number.\n */\n static isNumber(anObject: LispValue): anObject is number {\n return typeof anObject === 'number';\n }\n\n /**\n * Returns whether the given argument is a string.\n */\n static isString(anObject: LispValue): anObject is string {\n return typeof anObject === 'string';\n }\n\n /**\n * Returns whether the given argument is an interpreted symbol.\n */\n static isSymbol(anObject: LispValue): anObject is InterpretedSymbol {\n return anObject instanceof InterpretedSymbol;\n }\n\n /**\n * Returns whether the given argument is an environment.\n */\n static isTable(anObject: LispValue): anObject is Table {\n return anObject instanceof Table;\n }\n\n /**\n * Returns the last cell of this Cons.\n * @return this Cons's last cell\n */\n last(): Cons {\n let theCons: Cons = new Cons(Cons.nil, this);\n let aCons: Cons = this;\n\n while (Cons.isCons(aCons)) {\n if (!Cons.isCons(aCons.cdr)) {\n break;\n }\n theCons = theCons.cdr as Cons;\n aCons = aCons.cdr;\n }\n\n return aCons;\n }\n\n /**\n * Returns an iterator over this Cons.\n * @return an iterator over this Cons\n */\n loop(): Loop {\n return new Loop(this);\n }\n\n /**\n * Returns the length (depth) of this Cons.\n * @return the length (depth) of this Cons\n */\n length(): number {\n let count = 0;\n let aCons: LispValue = this;\n\n while (Cons.isCons(aCons)) {\n count++;\n aCons = aCons.cdr;\n }\n\n return count;\n }\n\n /**\n * Concatenates the given Cons and returns this Cons.\n * @param aCons the Cons to concatenate\n * @return this Cons\n */\n nconc(aCons: Cons): this {\n this.last().setCdr(aCons);\n return this;\n }\n\n /**\n * Returns the nth element of this Cons.\n * @param aNumber the index to retrieve\n * @return the element at the given index\n */\n nth(aNumber: number): LispValue {\n if (aNumber <= 0) {\n return Cons.nil;\n }\n let count = 1;\n let aCons: LispValue = this;\n while (Cons.isCons(aCons)) {\n if (count >= aNumber) {\n return aCons.car;\n }\n count++;\n aCons = aCons.cdr;\n }\n\n return Cons.nil;\n }\n\n /**\n * Lexes the given string into a Cons and returns it.\n * @param aString the string to lex\n */\n static parse(aString: string): LispValue {\n return Parser.parse(aString);\n }\n\n /**\n * Sets the car.\n */\n setCar(anObject: LispValue): null {\n this.car = anObject;\n return null;\n }\n\n /**\n * Sets the cdr.\n */\n setCdr(anObject: LispValue): null {\n this.cdr = anObject;\n return null;\n }\n\n /**\n * Sets both the car and the cdr.\n */\n setCons(car: LispValue, cdr: LispValue): this {\n this.car = car;\n this.cdr = cdr;\n return this;\n }\n\n /**\n * Returns a formatted string representation of this Cons.\n */\n toString(): string {\n let aString = '';\n if (Cons.isNil(this)) {\n aString += Cons.toString(Cons.nil);\n } else {\n aString += '(' + Cons.toString(this.car);\n\n if (Cons.isNil(this.cdr)) {\n aString += ')';\n } else if (this.cdr instanceof Cons) {\n let aCons: LispValue = this.cdr;\n while (Cons.isCons(aCons)) {\n const head = aCons.car;\n if (!(head instanceof Table)) {\n aString += ' ' + Cons.toString(head);\n }\n aCons = aCons.cdr;\n }\n aString += Cons.isNil(aCons) ? ')' : ' . ' + Cons.toString(aCons) + ')';\n } else {\n aString += ' . ' + Cons.toString(this.cdr) + ')';\n }\n }\n\n return aString;\n }\n\n /**\n * Returns a formatted string representation of the given object.\n * @param anObject the object to format\n */\n static toString(anObject: LispValue): string {\n return Cons.isNil(anObject) ? 'nil' : (anObject as { toString(): string }).toString();\n }\n}\n","import type { LispValue } from '../types/index.js';\n\n/**\n * User-facing diagnostic message templates emitted by the interpreter.\n * Centralizing them keeps wording consistent and makes future i18n trivial.\n */\n\n/** Builtin/special-form type-mismatch: `Can not apply \"<fn>\" to \"<value>\"`. */\nexport const cannotApply = (fn: string, value: LispValue): string =>\n `Can not apply \"${fn}\" to \"${String(value)}\"`;\n\n/** Symbol argument validation: `\"<value>\" is not symbol`. */\nexport const notSymbol = (value: LispValue): string => `\"${String(value)}\" is not symbol`;\n\n/** Unbound symbol lookup: `I could find no variable binding for <symbol>`. */\nexport const noBinding = (symbol: LispValue): string =>\n `I could find no variable binding for ${String(symbol)}`;\n\n/** Unknown procedure: `I could find no procedure description for <procedure>`. */\nexport const noProcedure = (procedure: LispValue): string =>\n `I could find no procedure description for ${String(procedure)}`;\n\n/** Positional argument validation: `arguments N is not symbol.`. */\nexport const argumentNotSymbol = (position: number): string =>\n `arguments ${String(position)} is not symbol.`;\n\n/** Multi-list arity mismatch. */\nexport const SIZES_DO_NOT_MATCH = 'sizes do not match.';\n\n/** Preserved grammatical quirk from the original Java implementation. */\nexport const SIZE_DO_NOT_MATCH = 'size do not match.';\n","import { Cons } from '../../value/Cons/index.js';\nimport { Evaluator } from '../Evaluator/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport {\n cannotApply,\n noProcedure,\n SIZE_DO_NOT_MATCH,\n SIZES_DO_NOT_MATCH,\n} from '../../constants/index.js';\nimport type { StreamManager } from '../StreamManager/index.js';\nimport { Table } from '../Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\nconst SELECT_PRINT_FUNCTION_NOT_DEFINED = 'selectPrintFunction is not defined';\n\n/**\n * Class that mimics Lisp's universal function Apply.\n * @class\n * @classdesc\n * @author Keisuke Ikeda\n * @this {Applier}\n */\nexport class Applier {\n static readonly buildInFunctions: Map<InterpretedSymbol, string> = Applier.setup();\n static #generateNumber = 0;\n\n environment: Table;\n streamManager: StreamManager;\n depth: number;\n\n constructor(aTable: Table, aStreamManager: StreamManager, aNumber: number) {\n this.environment = new Table(aTable);\n this.streamManager = aStreamManager;\n this.depth = aNumber;\n }\n\n abs(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.abs(args.car);\n }\n console.error(cannotApply('abs', args.car));\n\n return Cons.nil;\n }\n\n add(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.add_Number(args.car, args.cdr);\n }\n console.error(cannotApply('add', args.car));\n\n return Cons.nil;\n }\n\n add_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result + each;\n } else {\n console.error(cannotApply('add', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n static apply(\n procedure: LispValue,\n args: LispValue,\n environment: Table,\n aStreamManager: StreamManager,\n depth: number,\n ): LispValue {\n return new Applier(environment, aStreamManager, depth).apply(procedure, args);\n }\n\n apply(procedure: LispValue, args: LispValue): LispValue {\n if (Cons.isSymbol(procedure)) {\n return this.selectProcedure(procedure, args);\n }\n return this.entrustEvaluator(procedure, args);\n }\n\n assoc(args: Cons): LispValue {\n const target = args.car;\n\n if (Cons.isNotCons(args.nth(2))) {\n return Cons.nil;\n }\n const aCons = args.nth(2) as Cons;\n\n for (const each of aCons.loop()) {\n if (Cons.isNotCons(each)) {\n console.error(cannotApply('assoc', each));\n }\n const eachCons = each as Cons;\n const key = eachCons.car;\n if (this.equal_(new Cons(target, new Cons(key, Cons.nil))) === InterpretedSymbol.of('t')) {\n return eachCons;\n }\n }\n\n return Cons.nil;\n }\n\n atom_(args: Cons): LispValue {\n if (Cons.isAtom(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n binding(parameter: LispValue, args: LispValue): null {\n if (Cons.isNil(parameter)) {\n return null;\n }\n let aCons = parameter as Cons;\n let theCons = args as Cons;\n\n while (Cons.isNotNil(aCons)) {\n try {\n this.environment.set(aCons.car, theCons.car);\n } catch {\n console.error(SIZES_DO_NOT_MATCH);\n return null;\n }\n\n if (Cons.isNotCons(aCons.cdr)) {\n break;\n }\n aCons = aCons.cdr as Cons;\n theCons = theCons.cdr as Cons;\n }\n\n if (Cons.isNotList(aCons.cdr) && Cons.isNotNil(aCons.cdr)) {\n try {\n this.environment.set(aCons.cdr, theCons.cdr);\n } catch {\n console.error(SIZES_DO_NOT_MATCH);\n return null;\n }\n } else if (Cons.isNotNil(aCons.cdr)) {\n // Following the original: the source code references the undefined variable `aList`,\n // so it throws ReferenceError (the intended Error message is never reached).\n throw new ReferenceError('aList is not defined');\n }\n\n return null;\n }\n\n buildInFunction(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (this.isSpy(procedure)) {\n this.spyPrint(this.streamManager.spyStream(procedure), new Cons(procedure, args).toString());\n this.setDepth(this.depth + 1);\n }\n\n const methodName = Applier.buildInFunctions.get(procedure) as string;\n\n const target = this as unknown as Record<string, unknown>;\n const fn = target[methodName];\n if (typeof fn !== 'function') {\n throw new TypeError(`${this.constructor.name} does not have a method named \"${methodName}\"`);\n }\n const answer = (fn as (a: LispValue) => LispValue).apply(target, [args]);\n\n if (this.isSpy(procedure)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(procedure),\n String(answer) + ' <== ' + new Cons(procedure, args).toString(),\n );\n }\n\n return answer;\n }\n\n car(args: Cons): LispValue {\n return (args.car as Cons).car;\n }\n\n cdr(args: Cons): LispValue {\n return (args.car as Cons).cdr;\n }\n\n character_(args: Cons): LispValue {\n if (Cons.isString(args.car) && args.car.length === 1) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n cons(args: Cons): LispValue {\n return new Cons(args.car, args.nth(2));\n }\n\n cons_(args: Cons): LispValue {\n if (Cons.isCons(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n copy(args: Cons): LispValue {\n return Cons.cloneValue(args.car);\n }\n\n cos(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.cos(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n divide(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.divide_Number(args.car, args.cdr);\n }\n console.error(cannotApply('divide', args.car));\n\n return Cons.nil;\n }\n\n divide_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result / each;\n } else {\n console.error(cannotApply('divide', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n entrustEvaluator(procedure: LispValue, args: LispValue): LispValue {\n let anObject: LispValue = Cons.nil;\n let aCons = (procedure as Cons).cdr as Cons;\n this.binding(aCons.car, args);\n aCons = aCons.cdr as Cons;\n\n for (const each of aCons.loop()) {\n if (each instanceof Table) {\n break;\n }\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n // NOTE: Implements Common Lisp's eq as JS strict identity (===). Symbols are eq because\n // InterpretedSymbol.of interns by name; numbers / strings are eq because JS primitive\n // equality is by value; Cons / Table / other objects are eq only when they are the same\n // reference. Edge cases: NaN is never eq to itself (matches IEEE 754 and most CL\n // implementations); +0 and -0 are eq (CL leaves this implementation-defined).\n eq_(args: Cons): LispValue {\n const first = args.car;\n const second = args.nth(2);\n if (first === second) {\n return InterpretedSymbol.of('t');\n }\n\n return Cons.nil;\n }\n\n equal_(args: Cons): LispValue {\n const first = args.car;\n const second = args.nth(2);\n if (this.eq_(args) === InterpretedSymbol.of('t')) {\n return InterpretedSymbol.of('t');\n }\n if (Cons.isCons(first) && Cons.isCons(second)) {\n if (first.equals(second)) {\n return InterpretedSymbol.of('t');\n }\n if (second.equals(first)) {\n return InterpretedSymbol.of('t');\n }\n }\n\n return Cons.nil;\n }\n\n exp(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.exp(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n format(args: Cons): LispValue {\n if (!Cons.isString(args.car)) {\n console.error(cannotApply('format', args.car));\n }\n const aCons = args.cdr;\n // Following the original: pass through after String() coercion even for non-strings.\n const format = this.format_AUX(String(args.car), aCons);\n process.stdout.write(String(format));\n\n return Cons.nil;\n }\n\n format_AUX(format: string, aCons: LispValue): string | undefined {\n let theCons: LispValue = aCons;\n let index = 0;\n let state = 0;\n let buffer = '';\n let token = '';\n\n while (index < format.length) {\n const aCharacter = format[index];\n switch (state) {\n case 0: {\n if (aCharacter === '~') {\n state = 1;\n } else {\n buffer += aCharacter;\n }\n\n break;\n }\n case 1: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 2;\n break;\n }\n case 'a': {\n // Following the original: calls theCons.car.toString() directly (throws if null).\n buffer += ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n state = 0;\n break;\n }\n case '%': {\n buffer += '\\n';\n state = 0;\n break;\n }\n case '-': {\n state = 3;\n break;\n }\n default: {\n buffer += '~';\n buffer += aCharacter;\n state = 0;\n }\n }\n\n break;\n }\n case 2: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 2;\n break;\n }\n case 'a': {\n const size = Number(token);\n token = '';\n if (Cons.isNil(theCons)) {\n console.error(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n let value: string = ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n while (value.length < size) {\n value += ' ';\n }\n buffer += value;\n state = 0;\n break;\n }\n default: {\n buffer += '~';\n buffer += token + aCharacter;\n token = '';\n state = 0;\n }\n }\n\n break;\n }\n case 3: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 3;\n break;\n }\n case 'a': {\n const size = Number(token);\n token = '';\n if (Cons.isNil(theCons)) {\n console.error(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n const value: string = ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n let spaces = '';\n while (value.length + spaces.length < size) {\n spaces += ' ';\n }\n buffer += spaces + value;\n state = 0;\n break;\n }\n default: {\n buffer += '~';\n buffer += '-';\n buffer += token + aCharacter;\n token = '';\n state = 0;\n }\n }\n\n break;\n }\n default: {\n console.error('Error!');\n }\n }\n index++;\n }\n if (Cons.isNotNil(theCons)) {\n console.error(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n\n return buffer;\n }\n\n // NOTE: Common Lisp's floatp is a type-tag predicate (integer vs float), but JS has only one\n // numeric type (double). The original chose to interpret floatp as a range check\n // \"is this number representable in IEEE 32-bit (single-precision) float?\" rather than a\n // type-tag check. Following the original semantics. Revisit if numeric types are split\n // in a future revision.\n float_(args: Cons): LispValue {\n if (Cons.isNumber(args.car) && -3.4e38 <= args.car && args.car <= 3.4e38) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n gensym(): InterpretedSymbol {\n const aSymbol = InterpretedSymbol.of('id' + String(Applier.#generateNumber));\n Applier.incrementGenerateNumber();\n\n return aSymbol;\n }\n\n getStream(anObject: LispValue): unknown {\n if (typeof anObject === 'string') {\n return (process as unknown as { out?: unknown }).out;\n }\n\n return this.streamManager.getStream();\n }\n\n greaterThan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.greaterThan_Number(args.car, args.cdr);\n }\n console.error(cannotApply('>', args.car));\n\n return Cons.nil;\n }\n\n greaterThan_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue > rightValue;\n } else {\n console.error(cannotApply('>', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n greaterThanOrEqual(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.greaterThanOrEqual_Number(args.car, args.cdr);\n }\n console.error(cannotApply('>=', args.car));\n\n return Cons.nil;\n }\n\n greaterThanOrEqual_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue >= rightValue;\n } else {\n console.error(cannotApply('>=', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n static incrementGenerateNumber(): null {\n Applier.#generateNumber++;\n return null;\n }\n\n indent(): string {\n let index = 0;\n let aString = '';\n while (index++ < this.depth) {\n aString += '| ';\n }\n\n return aString;\n }\n\n integer_(args: Cons): LispValue {\n if (Cons.isNumber(args.car) && Number.isInteger(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n isSpy(aSymbol: InterpretedSymbol): boolean {\n return this.streamManager.isSpy(aSymbol);\n }\n\n last(args: Cons): LispValue {\n if (Cons.isNotCons(args)) {\n return Cons.nil;\n }\n const aCons = args.car as Cons;\n\n return aCons.last();\n }\n\n lessThan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.lessThan_Number(args.car, args.cdr);\n }\n console.error(cannotApply('<', args.car));\n\n return Cons.nil;\n }\n\n lessThan_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue < rightValue;\n } else {\n console.error(cannotApply('<', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n lessThanOrEqual(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.lessThanOrEqual_Number(args.car, args.cdr);\n }\n console.error(cannotApply('<=', args.car));\n\n return Cons.nil;\n }\n\n lessThanOrEqual_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue <= rightValue;\n } else {\n console.error(cannotApply('<=', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n list(args: LispValue): LispValue {\n if (Cons.isNil(args)) {\n return Cons.nil;\n }\n return new Cons((args as Cons).car, this.list((args as Cons).cdr));\n }\n\n list_(args: Cons): LispValue {\n if (Cons.isList(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n mapcar(args: Cons): LispValue {\n const aCons = new Cons(Cons.nil, Cons.nil);\n const procedure = args.car;\n const parameters = args.nth(2) as Cons;\n const options = (args.cdr as Cons).cdr as Cons;\n let theCons: Cons = aCons;\n let index = 1;\n\n for (const each of parameters.loop()) {\n const argumentsCons = new Cons(Cons.nil, Cons.nil);\n let temporaryCons: Cons = argumentsCons;\n\n if (Cons.isNotNil(each)) {\n for (const arg of options.loop()) {\n if (Cons.isNotCons(arg)) {\n // Following the original: the source code uses `consol.log` (a typo), which throws\n // ReferenceError, so the subsequent `return Cons.nil` is never reached.\n throw new ReferenceError('consol is not defined');\n }\n temporaryCons.setCdr(new Cons((arg as Cons).nth(index), Cons.nil));\n temporaryCons = temporaryCons.cdr as Cons;\n }\n }\n\n argumentsCons.setCar(each);\n const anObject = Applier.apply(\n procedure,\n argumentsCons,\n this.environment,\n this.streamManager,\n this.depth,\n );\n theCons.setCdr(new Cons(anObject, Cons.nil));\n theCons = theCons.cdr as Cons;\n index++;\n }\n\n return aCons.cdr;\n }\n\n member(args: Cons): LispValue {\n let aSymbol = InterpretedSymbol.of('equal?');\n if (Cons.isNotNil(args.nth(3))) {\n aSymbol = args.nth(3) as InterpretedSymbol;\n }\n if (Cons.isNotCons(args.nth(2))) {\n return Cons.nil;\n }\n let aCons = args.nth(2) as Cons;\n\n while (Cons.isCons(aCons)) {\n let anObject: LispValue = null;\n\n if (aSymbol === InterpretedSymbol.of('eq?')) {\n anObject = this.eq_(new Cons(args.car, new Cons(aCons.car, Cons.nil)));\n }\n if (aSymbol === InterpretedSymbol.of('equal?')) {\n anObject = this.equal_(new Cons(args.car, new Cons(aCons.car, Cons.nil)));\n }\n if (anObject == null) {\n console.error(cannotApply('member', aSymbol));\n }\n if (anObject === InterpretedSymbol.of('t')) {\n return aCons;\n }\n\n aCons = aCons.cdr as Cons;\n }\n\n return Cons.nil;\n }\n\n memq(args: Cons): LispValue {\n if (this.member(args) === Cons.nil) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n mod(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.mod_Number(args.car, args.cdr);\n }\n console.error(cannotApply('mod', args.car));\n\n return Cons.nil;\n }\n\n mod_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result % each;\n } else {\n console.error(cannotApply('mod', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n multiply(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.multiply_Number(args.car, args.cdr);\n }\n console.error(cannotApply('multiply', args.car));\n\n return Cons.nil;\n }\n\n multiply_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result * each;\n } else {\n console.error(cannotApply('multiply', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n napier(): number {\n return Math.E;\n }\n\n neq(args: Cons): LispValue {\n if (this.eq_(args) === InterpretedSymbol.of('t')) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n nequal(args: Cons): LispValue {\n if (this.equal_(args) === InterpretedSymbol.of('t')) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n nth(args: Cons): LispValue {\n if (!Number.isInteger(args.car)) {\n return Cons.nil;\n }\n const index = args.car as number;\n const aCons = args.nth(2) as Cons;\n\n return aCons.nth(index);\n }\n\n null_(args: Cons): LispValue {\n if (Cons.isNil(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n // NOTE: Lisp's numberp and doublep are originally distinct predicates, but because JS has only\n // one numeric type (double), we share a single implementation. In Applier.setup() both\n // Lisp function names numberp / doublep map to this method. Split into separate methods if\n // a future revision introduces additional numeric types such as BigInt.\n number_(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n pi(): number {\n return Math.PI;\n }\n\n random(): number {\n return Math.random();\n }\n\n round(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.round(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n selectProcedure(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (Applier.buildInFunctions.has(procedure)) {\n return this.buildInFunction(procedure, args);\n }\n if (this.environment.has(procedure)) {\n return this.userFunction(procedure, args);\n }\n console.error(noProcedure(procedure));\n\n return Cons.nil;\n }\n\n setDepth(aNumber: number): null {\n this.depth = aNumber;\n return null;\n }\n\n static setup(): Map<InterpretedSymbol, string> {\n try {\n const entries: Array<[string, string]> = [\n ['abs', 'abs'],\n ['add', 'add'],\n ['assoc', 'assoc'],\n ['atom', 'atom_'],\n ['car', 'car'],\n ['cdr', 'cdr'],\n ['characterp', 'character_'],\n ['cons', 'cons'],\n ['consp', 'cons_'],\n ['copy', 'copy'],\n ['cos', 'cos'],\n ['floatp', 'float_'],\n ['divide', 'divide'],\n ['doublep', 'number_'],\n ['eq', 'eq_'],\n ['equal', 'equal_'],\n ['exp', 'exp'],\n ['format', 'format'],\n ['gensym', 'gensym'],\n ['integerp', 'integer_'],\n ['last', 'last'],\n ['list', 'list'],\n ['listp', 'list_'],\n ['mapcar', 'mapcar'],\n ['member', 'member'],\n ['memq', 'memq'],\n ['mod', 'mod'],\n ['multiply', 'multiply'],\n ['napier', 'napier'],\n ['neq', 'neq'],\n ['nequal', 'nequal'],\n ['nth', 'nth'],\n ['null', 'null_'],\n ['numberp', 'number_'],\n ['pi', 'pi'],\n ['random', 'random'],\n ['round', 'round'],\n ['sin', 'sin'],\n ['sqrt', 'sqrt'],\n ['subtract', 'subtract'],\n ['stringp', 'string_'],\n ['symbolp', 'symbol_'],\n ['tan', 'tan'],\n ['+', 'add'],\n ['-', 'subtract'],\n ['*', 'multiply'],\n ['/', 'divide'],\n ['//', 'mod'],\n ['==', 'eq_'],\n ['=', 'equal_'],\n ['~~', 'neq'],\n ['~=', 'nequal'],\n ['<', 'lessThan'],\n ['<=', 'lessThanOrEqual'],\n ['>', 'greaterThan'],\n ['>=', 'greaterThanOrEqual'],\n ];\n return new Map(entries.map(([key, value]) => [InterpretedSymbol.of(key), value]));\n } catch {\n throw new Error('NullPointerException (Applier, initialize)');\n }\n }\n\n sin(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.sin(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n // NOTE: Lisp's trace/spy writes the call line to a designated output stream. The original\n // implementation logged the stream object itself rather than writing to it (a bug that\n // went unnoticed because trace/spy is rarely exercised). We now write the indented line\n // to the given WritableStream, falling back to stdout when the argument is a string\n // descriptor (stored by `(spy fn \"label\")`) or null.\n spyPrint(aStream: NodeJS.WritableStream | string | null, line: string): null {\n const target: NodeJS.WritableStream =\n aStream != null && typeof aStream === 'object' && 'write' in aStream\n ? aStream\n : process.stdout;\n target.write(this.indent() + line + '\\n');\n return null;\n }\n\n sqrt(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.sqrt(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n string_(args: Cons): LispValue {\n if (Cons.isString(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n subtract(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.subtract_Number(args.car, args.cdr);\n }\n console.error(cannotApply('subtract', args.car));\n\n return Cons.nil;\n }\n\n subtract_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result - each;\n } else {\n console.error(cannotApply('subtract', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n symbol_(args: Cons): LispValue {\n if (Cons.isSymbol(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n tan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.tan(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n userFunction(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (this.isSpy(procedure)) {\n this.spyPrint(this.streamManager.spyStream(procedure), new Cons(procedure, args).toString());\n this.setDepth(this.depth + 1);\n }\n\n const lambda = this.environment.get(procedure) as Cons;\n const theEnvironment = lambda.last().car as Table;\n const answer = Applier.apply(lambda, args, theEnvironment, this.streamManager, this.depth);\n\n if (this.isSpy(procedure)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(procedure),\n String(answer) + ' <== ' + new Cons(procedure, args).toString(),\n );\n }\n\n return answer;\n }\n}\n","/**\n * @class\n * @classdesc Error class representing a graceful exit triggered by a Lisp (exit) call. Catch it at the REPL or library boundary to run cleanup before terminating.\n * @author Keisuke Ikeda\n * @this {ExitError}\n */\nexport class ExitError extends Error {\n /**\n * Constructor.\n * @constructor\n */\n constructor() {\n super('Exit');\n this.name = 'ExitError';\n }\n}\n","import type { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\n\ntype Stream = NodeJS.WritableStream | null;\n\n/**\n * @class\n * @classdesc\n * @author Keisuke Ikeda\n * @this {StreamManager}\n */\nexport class StreamManager {\n isTrace: boolean = false;\n streamTable: Map<string, Stream>;\n spyTable: Map<InterpretedSymbol, string>;\n traceStream: Stream;\n\n constructor() {\n this.streamTable = new Map();\n this.spyTable = new Map();\n this.traceStream = null;\n this.initialize();\n }\n\n getStream(): Stream {\n let aPrintStream: Stream = null;\n if (this.isTrace) {\n // Following the original: traceStream is invoked as a function (since it is a Stream object this throws).\n return (this.traceStream as unknown as () => Stream)();\n }\n const filePath = process.env['HOME'] as string;\n if (this.streamTable.has(filePath)) {\n aPrintStream = this.streamTable.get(filePath) ?? null;\n }\n\n return aPrintStream;\n }\n\n /**\n * Initializes the instance variables.\n */\n initialize(): null {\n this.streamTable.set('default', process.stdout);\n this.streamTable.set('stdout', process.stdout);\n this.streamTable.set('stderr', process.stderr);\n\n return null;\n }\n\n isSpy(aSymbol: InterpretedSymbol | null): boolean {\n if (this.isTrace) {\n return true;\n }\n if (aSymbol != null && this.spyTable_().has(aSymbol)) {\n return true;\n }\n return false;\n }\n\n noSpy(aSymbol: InterpretedSymbol): null {\n if (this.spyTable_().has(aSymbol)) {\n this.spyTable_().delete(aSymbol);\n }\n\n return null;\n }\n\n noTrace(): null {\n this.setIsTrace(false);\n this.spyTable.clear();\n\n return null;\n }\n\n setIsTrace(aBoolean: boolean): null {\n this.isTrace = aBoolean;\n return null;\n }\n\n setTraceStream(aStream: Stream): null {\n this.traceStream = aStream;\n return null;\n }\n\n spy(aSymbol: InterpretedSymbol, aString: string): null {\n const aPrintStream = this.getStream();\n if (aPrintStream != null) {\n this.spyTable_().set(aSymbol, aString);\n }\n\n return null;\n }\n\n spyStream(aSymbol: InterpretedSymbol | null): Stream | string {\n if (this.isTrace) {\n return this.traceStream;\n }\n if (aSymbol != null && this.spyTable_().has(aSymbol)) {\n return this.spyTable_().get(aSymbol) as string;\n }\n throw new Error('Stream is not found.');\n }\n\n spyTable_(): Map<InterpretedSymbol, string> {\n const aTable = new Map<InterpretedSymbol, string>();\n for (const [key, value] of this.spyTable) {\n aTable.set(key, value);\n }\n return aTable;\n }\n\n trace(): null {\n this.noTrace();\n const aPrintStream = this.getStream();\n this.setTraceStream(aPrintStream);\n this.setIsTrace(true);\n\n return null;\n }\n}\n","import v8 from 'node:v8';\nimport vm from 'node:vm';\n\nimport { Applier } from '../Applier/index.js';\nimport { Cons } from '../../value/Cons/index.js';\nimport { ExitError } from '../ExitError/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport {\n argumentNotSymbol,\n cannotApply,\n noBinding,\n notSymbol,\n SIZES_DO_NOT_MATCH,\n} from '../../constants/index.js';\nimport { StreamManager } from '../StreamManager/index.js';\nimport { Table } from '../Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * Equivalent to the old `expose-gc/function` package: lets us call GC without the `--expose-gc` flag.\n * The original package executed the equivalent setup at require time, so we lazily initialize on the first gc() call.\n */\nlet cachedGc: (() => void) | null = null;\nconst triggerGc = (): void => {\n if (cachedGc == null) {\n v8.setFlagsFromString('--expose_gc');\n cachedGc = vm.runInNewContext('gc') as () => void;\n }\n cachedGc();\n};\n\n/**\n * @class\n * @classdesc Class that mimics Lisp's universal function Evaluate.\n * @author Keisuke Ikeda\n * @this {Evaluator}\n */\nexport class Evaluator {\n static readonly buildInFunctions: Map<InterpretedSymbol, string> = Evaluator.setup();\n\n environment: Table;\n streamManager: StreamManager;\n depth: number;\n\n constructor(aTable: Table, aStreamManager: StreamManager, aNumber: number) {\n this.environment = aTable;\n this.streamManager = aStreamManager;\n this.depth = aNumber;\n }\n\n and(aCons: Cons): LispValue {\n for (const each of aCons.loop()) {\n const anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n if (Cons.isNil(anObject)) {\n return Cons.nil;\n }\n }\n\n return InterpretedSymbol.of('t');\n }\n\n apply_lisp(aCons: Cons): LispValue {\n const procedure = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const args = Evaluator.eval(aCons.nth(2), this.environment, this.streamManager, this.depth);\n let aTable: Table = this.environment;\n if (procedure instanceof Cons && procedure.last().car instanceof Table) {\n aTable = procedure.last().car as Table;\n }\n\n return Applier.apply(procedure, args, aTable, this.streamManager, this.depth);\n }\n\n bind(aCons: Cons): LispValue {\n if (Cons.isNotSymbol(aCons.car)) {\n console.error(cannotApply('bind', aCons.car));\n return Cons.nil;\n }\n const aSymbol = aCons.car as InterpretedSymbol;\n if (!this.environment.has(aSymbol)) {\n return Cons.nil;\n }\n\n return this.bindAUX(aSymbol);\n }\n\n bindAUX(aSymbol: InterpretedSymbol): number {\n let aTable: Table | null = this.environment;\n let anObject: LispValue = aTable.get(aSymbol);\n let count = 1;\n\n while (aTable != null) {\n if (!aTable.has(aSymbol)) {\n break;\n }\n const theObject: LispValue = aTable.get(aSymbol);\n // Following the original: loose (!=) comparison.\n if (theObject != anObject) {\n count++;\n anObject = theObject;\n }\n aTable = aTable.source;\n }\n\n return count;\n }\n\n binding(parameters: Cons, aTable: Table): null {\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n let key: InterpretedSymbol | null = null;\n if (Cons.isSymbol(theCons.car)) {\n key = theCons.car;\n } else {\n console.error(notSymbol(theCons.car));\n }\n const value = Evaluator.eval(theCons.nth(2), aTable, this.streamManager, this.depth);\n aTable.set(key, value);\n }\n\n return null;\n }\n\n bindingParallel(parameters: Cons, aTable: Table): null {\n const theTable = new Map<unknown, LispValue>();\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n let key: InterpretedSymbol | null = null;\n if (Cons.isSymbol(theCons.car)) {\n key = theCons.car;\n } else {\n console.error(notSymbol(theCons.car));\n }\n const value = Evaluator.eval(theCons.nth(2), aTable, this.streamManager, this.depth);\n theTable.set(key, value);\n }\n\n for (const [key, value] of theTable) {\n aTable.set(key, value);\n }\n\n return null;\n }\n\n cond(aCons: LispValue): LispValue {\n if (Cons.isNil(aCons)) {\n return Cons.nil;\n }\n const consCell = aCons as Cons;\n const clause = consCell.car as Cons;\n let anObject: LispValue = Evaluator.eval(\n clause.car,\n this.environment,\n this.streamManager,\n this.depth,\n );\n if (Cons.isNil(anObject)) {\n return this.cond(consCell.cdr);\n }\n const consequent = clause.cdr as Cons;\n for (const each of consequent.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n return anObject;\n }\n\n defun(aCons: Cons): LispValue {\n const variable = aCons.car;\n let lambda: LispValue = aCons.cdr;\n lambda =\n aCons.length() === 2\n ? (lambda as Cons).car\n : new Cons(InterpretedSymbol.of('lambda'), lambda);\n lambda = Evaluator.eval(lambda, new Table(this.environment), this.streamManager, this.depth);\n this.environment.set(variable, lambda);\n\n return variable;\n }\n\n do_(aCons: Cons): LispValue {\n const parameters = aCons.car as Cons;\n const bool = aCons.nth(2) as Cons;\n const expressions = (aCons.cdr as Cons).cdr as Cons;\n this.bindingParallel(parameters, this.environment);\n if (Cons.isNil(bool)) {\n bool.setCar(Cons.nil);\n }\n\n while (Cons.isNil(Evaluator.eval(bool.car, this.environment, this.streamManager, this.depth))) {\n const theTable = new Map<InterpretedSymbol, LispValue>();\n for (const each of expressions.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n console.error(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n if (Cons.isNotNil(theCons.nth(3))) {\n const value = Evaluator.eval(\n theCons.nth(3),\n this.environment,\n this.streamManager,\n this.depth,\n );\n theTable.set(key, value);\n }\n }\n for (const [key, value] of theTable) {\n this.environment.set(key, value);\n }\n }\n return Evaluator.eval(bool.nth(2), this.environment, this.streamManager, this.depth);\n }\n\n doList(aCons: Cons): LispValue {\n const parameter = aCons.car as Cons;\n const theCons = aCons.cdr as Cons;\n const args = Evaluator.eval(\n parameter.nth(2),\n this.environment,\n this.streamManager,\n this.depth,\n ) as Cons;\n for (const element of args.loop()) {\n this.environment.set(parameter.car, element);\n for (const each of theCons.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n }\n\n return Evaluator.eval(parameter.nth(3), this.environment, this.streamManager, this.depth);\n }\n\n doStar(aCons: Cons): LispValue {\n const parameters = aCons.car as Cons;\n const bool = aCons.nth(2) as Cons;\n const expressions = (aCons.cdr as Cons).cdr as Cons;\n this.binding(parameters, this.environment);\n if (Cons.isNil(bool)) {\n bool.setCar(Cons.nil);\n }\n\n while (Cons.isNil(Evaluator.eval(bool.car, this.environment, this.streamManager, this.depth))) {\n for (const each of expressions.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n console.error(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n if (Cons.isNotNil(theCons.nth(3))) {\n const value = Evaluator.eval(\n theCons.nth(3),\n this.environment,\n this.streamManager,\n this.depth,\n );\n this.environment.set(key, value);\n }\n }\n }\n return Evaluator.eval(bool.nth(2), this.environment, this.streamManager, this.depth);\n }\n\n entrustApplier(form: Cons): LispValue {\n const aCons = form.cdr as Cons;\n let args: Cons = new Cons(Cons.nil, Cons.nil);\n const procedure = form.car;\n let aSymbol: InterpretedSymbol | null = null;\n\n if (Cons.isSymbol(procedure)) {\n aSymbol = procedure;\n }\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), form.toString());\n this.setDepth(this.depth + 1);\n }\n\n for (const each of aCons.loop()) {\n if (each instanceof Table) {\n break;\n }\n args.add(Evaluator.eval(each, this.environment, this.streamManager, this.depth));\n }\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n }\n\n args = args.cdr as Cons;\n return Applier.apply(procedure, args, this.environment, this.streamManager, this.depth);\n }\n\n static eval(\n form: LispValue,\n environment: Table,\n aStreamManager: StreamManager = new StreamManager(),\n depth: number = 1,\n ): LispValue {\n return new Evaluator(environment, aStreamManager, depth).eval(form);\n }\n\n eval(form: LispValue): LispValue {\n if (Cons.isSymbol(form)) {\n return this.evaluateSymbol(form);\n }\n if (Cons.isNil(form) || Cons.isNotList(form)) {\n return form;\n }\n const formCons = form as Cons;\n if (Cons.isSymbol(formCons.car) && Evaluator.buildInFunctions.has(formCons.car)) {\n return this.specialForm(formCons);\n }\n\n return this.entrustApplier(formCons);\n }\n\n eval_lisp(aCons: Cons): LispValue {\n return Evaluator.eval(\n Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth),\n this.environment,\n this.streamManager,\n this.depth,\n );\n }\n\n evaluateSymbol(aSymbol: InterpretedSymbol): LispValue {\n let answer: LispValue = Cons.nil;\n if (this.environment.has(aSymbol)) {\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), aSymbol.toString());\n this.setDepth(this.depth + 1);\n }\n\n answer = this.environment.get(aSymbol);\n if (answer instanceof Cons && answer.cdr instanceof Table) {\n answer = answer.car;\n }\n\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(aSymbol),\n String(answer) + ' <== ' + String(aSymbol),\n );\n }\n } else {\n console.error(noBinding(aSymbol));\n }\n\n return answer;\n }\n\n exit(): never {\n console.log('Bye!');\n throw new ExitError();\n }\n\n gc(): InterpretedSymbol {\n triggerGc();\n return InterpretedSymbol.of('t');\n }\n\n if_(aCons: Cons): LispValue {\n const bool = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const anObject: LispValue = Cons.isNil(bool) ? aCons.nth(3) : aCons.nth(2);\n\n return Evaluator.eval(anObject, this.environment, this.streamManager, this.depth);\n }\n\n indent(): string {\n let index = 0;\n let aString = '';\n while (index++ < this.depth) {\n aString += '| ';\n }\n\n return aString;\n }\n\n isSpy(aSymbol: InterpretedSymbol | null): boolean {\n if (aSymbol == null) {\n return false;\n }\n return this.streamManager.isSpy(aSymbol);\n }\n\n lambda(args: Cons): LispValue {\n const aCons = Cons.cloneValue(args) as Cons;\n const theCons = aCons.cdr as Cons;\n theCons.setCdr(new Cons(this.environment, Cons.nil));\n\n return new Cons(InterpretedSymbol.of('lambda'), aCons);\n }\n\n let(aCons: Cons): LispValue {\n const aTable = new Table(this.environment);\n const parameters = aCons.car as Cons;\n const forms = aCons.cdr as Cons;\n let anObject: LispValue = Cons.nil;\n this.bindingParallel(parameters, aTable);\n for (const each of forms.loop()) {\n anObject = Evaluator.eval(each, aTable, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n letStar(aCons: Cons): LispValue {\n const aTable = new Table(this.environment);\n const parameters = aCons.car as Cons;\n const forms = aCons.cdr as Cons;\n let anObject: LispValue = Cons.nil;\n this.binding(parameters, aTable);\n for (const each of forms.loop()) {\n anObject = Evaluator.eval(each, aTable, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n not(aCons: Cons): LispValue {\n if (Cons.isNil(Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth))) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n notrace(): InterpretedSymbol {\n this.streamManager.noTrace();\n return InterpretedSymbol.of('t');\n }\n\n or(aCons: Cons): LispValue {\n for (const each of aCons.loop()) {\n const anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n if (Cons.isNotNil(anObject)) {\n return InterpretedSymbol.of('t');\n }\n }\n\n return Cons.nil;\n }\n\n pop_(aCons: Cons): LispValue {\n if (Cons.isNotSymbol(aCons.car)) {\n console.error(argumentNotSymbol(1));\n }\n const aSymbol = aCons.car as InterpretedSymbol;\n const anObject = Evaluator.eval(aSymbol, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n return Cons.nil;\n }\n const consObject = anObject as Cons;\n this.environment.setIfExist(aSymbol, consObject.cdr);\n\n return consObject.car;\n }\n\n progn(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n for (const each of aCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n princ(aCons: Cons): LispValue {\n const anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n process.stdout.write(String(anObject));\n\n return anObject;\n }\n\n print(aCons: Cons): LispValue {\n const anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n process.stdout.write(String(anObject) + '\\n');\n\n return anObject;\n }\n\n push_(aCons: Cons): LispValue {\n let anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotSymbol(aCons.nth(2))) {\n console.error(argumentNotSymbol(2));\n }\n const aSymbol = aCons.nth(2) as InterpretedSymbol;\n anObject = new Cons(\n anObject,\n Evaluator.eval(aSymbol, this.environment, this.streamManager, this.depth),\n );\n this.environment.setIfExist(aSymbol, anObject);\n\n return anObject;\n }\n\n quote(aCons: Cons): LispValue {\n return aCons.car;\n }\n\n rplaca(args: Cons): LispValue {\n let anObject = Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n console.error(cannotApply('set-car!', anObject));\n return Cons.nil;\n }\n const aCons = anObject as Cons;\n anObject = Evaluator.eval(args.nth(2), this.environment, this.streamManager, this.depth);\n aCons.setCar(anObject);\n\n return Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n }\n\n rplacd(args: Cons): LispValue {\n let anObject = Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n console.error(cannotApply('set-cdr!', anObject));\n return Cons.nil;\n }\n const aCons = anObject as Cons;\n anObject = Evaluator.eval(args.nth(2), this.environment, this.streamManager, this.depth);\n aCons.setCdr(anObject);\n\n return Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n }\n\n setq(args: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const anIterator = args.loop();\n const index = -1;\n\n while (anIterator.hasNext()) {\n let key: InterpretedSymbol | null = null;\n\n if (Cons.isSymbol(args.nth(index + 2))) {\n key = anIterator.next() as InterpretedSymbol;\n } else {\n console.error(notSymbol(args.car));\n }\n\n if (!anIterator.hasNext()) {\n console.error(SIZES_DO_NOT_MATCH);\n }\n anObject = Evaluator.eval(\n anIterator.next(),\n this.environment,\n this.streamManager,\n this.depth,\n );\n this.environment.set(key, anObject);\n }\n\n return anObject;\n }\n\n set_allq(args: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const anIterator = args.loop();\n const index = -1;\n\n while (anIterator.hasNext()) {\n let key: InterpretedSymbol | null = null;\n\n if (Cons.isSymbol(args.nth(index + 2))) {\n key = anIterator.next() as InterpretedSymbol;\n } else {\n console.error(notSymbol(args.car));\n }\n anObject = Evaluator.eval(\n anIterator.next(),\n this.environment,\n this.streamManager,\n this.depth,\n );\n // Following the original: setIfExist is still called when key is null (Map allows a null key).\n this.environment.setIfExist(key, anObject);\n }\n\n return anObject;\n }\n\n setDepth(aNumber: number): null {\n this.depth = aNumber;\n return null;\n }\n\n static setup(): Map<InterpretedSymbol, string> {\n try {\n const entries: Array<[string, string]> = [\n ['and', 'and'],\n ['apply', 'apply_lisp'],\n ['bind', 'bind'],\n ['cond', 'cond'],\n ['defun', 'defun'],\n ['do', 'do_'],\n ['dolist', 'doList'],\n ['do*', 'doStar'],\n ['eval', 'eval_lisp'],\n ['exit', 'exit'],\n ['gc', 'gc'],\n ['if', 'if_'],\n ['lambda', 'lambda'],\n ['let', 'let'],\n ['let*', 'letStar'],\n ['not', 'not'],\n ['notrace', 'notrace'],\n ['or', 'or'],\n ['pop', 'pop_'],\n ['progn', 'progn'],\n ['princ', 'princ'],\n ['print', 'print'],\n ['push', 'push_'],\n ['quote', 'quote'],\n ['rplaca', 'rplaca'],\n ['rplacd', 'rplacd'],\n ['setq', 'setq'],\n ['set-allq', 'set_allq'],\n ['terpri', 'terpri'],\n ['time', 'time'],\n ['trace', 'trace'],\n ['unless', 'unless'],\n ['when', 'when'],\n ];\n return new Map(entries.map(([key, value]) => [InterpretedSymbol.of(key), value]));\n } catch {\n throw new Error('NullPointerException (Evaluator, initialize)');\n }\n }\n\n specialForm(form: Cons): LispValue {\n const aSymbol = form.car as InterpretedSymbol;\n\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), form.toString());\n this.setDepth(this.depth + 1);\n }\n\n const aCons = form.cdr as Cons;\n const methodName = Evaluator.buildInFunctions.get(aSymbol) as string;\n\n const target = this as unknown as Record<string, unknown>;\n const fn = target[methodName];\n if (typeof fn !== 'function') {\n throw new TypeError(`${this.constructor.name} does not have a method named \"${methodName}\"`);\n }\n const answer = (fn as (a: Cons) => LispValue).apply(target, [aCons]);\n\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(aSymbol),\n String(answer) + ' <== ' + String(aSymbol),\n );\n }\n\n return answer;\n }\n\n // NOTE: Lisp's trace/spy writes the call line to a designated output stream. The original\n // implementation logged the stream object itself rather than writing to it (a bug that\n // went unnoticed because trace/spy is rarely exercised). We now write the indented line\n // to the given WritableStream, falling back to stdout when the argument is a string\n // descriptor (stored by `(spy fn \"label\")`) or null.\n spyPrint(aStream: NodeJS.WritableStream | string | null, line: string): null {\n const target: NodeJS.WritableStream =\n aStream != null && typeof aStream === 'object' && 'write' in aStream\n ? aStream\n : process.stdout;\n target.write(this.indent() + line + '\\n');\n return null;\n }\n\n terpri(): InterpretedSymbol {\n process.stdout.write('\\n');\n return InterpretedSymbol.of('t');\n }\n\n time(aCons: Cons): number {\n const start = process.hrtime();\n Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const end = process.hrtime(start);\n\n return end[1] / 1_000_000;\n }\n\n trace(): InterpretedSymbol {\n this.streamManager.trace();\n return InterpretedSymbol.of('t');\n }\n\n unless(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const theCons = aCons.cdr as Cons;\n const flag = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotNil(flag)) {\n return Cons.nil;\n }\n for (const each of theCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n when(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const theCons = aCons.cdr as Cons;\n const flag = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNil(flag)) {\n return Cons.nil;\n }\n for (const each of theCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n}\n","import { createRequire } from 'node:module';\nimport type { Interface as ReadlineInterface } from 'node:readline';\n\nimport { Cons } from '../value/Cons/index.js';\nimport { Evaluator } from '../runtime/Evaluator/index.js';\nimport { ExitError } from '../runtime/ExitError/index.js';\nimport { InterpretedSymbol } from '../value/InterpretedSymbol/index.js';\nimport { StreamManager } from '../runtime/StreamManager/index.js';\nimport { Table } from '../runtime/Table/index.js';\nimport type { LispValue } from '../types/index.js';\n\nconst require = createRequire(import.meta.url);\n\n/**\n * @class\n * @classdesc Class for the interpreter.\n * @author Keisuke Ikeda\n * @this {LispInterpreter}\n */\nexport class LispInterpreter {\n root: Table;\n streamManager: StreamManager;\n rl: ReadlineInterface;\n\n constructor() {\n this.root = this.initializeTable();\n this.streamManager = new StreamManager();\n\n const readline = require('node:readline') as typeof import('node:readline');\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: '>> ',\n });\n }\n\n /**\n * Starts the interpreter.\n */\n run(): null {\n let aCons: LispValue = new Cons();\n let aString = '';\n let leftParentheses = 0;\n let exitedViaLisp = false;\n\n this.rl.prompt();\n this.rl\n .on('line', (line: string) => {\n line += ' ';\n\n for (const aCharacter of line) {\n if (aCharacter === '(') {\n leftParentheses++;\n }\n if (aCharacter === ')') {\n leftParentheses--;\n }\n aString += aCharacter;\n }\n\n if (leftParentheses <= 0) {\n aCons = this.parse(aString);\n try {\n for (const each of (aCons as Cons).loop()) {\n process.stdout.write((this.eval(each) as { toString(): string }).toString() + '\\n');\n }\n } catch (error) {\n if (error instanceof ExitError) {\n exitedViaLisp = true;\n this.rl.close();\n return;\n }\n console.error('*** can not eval ' + (aCons as Cons).toString() + ' ***');\n process.stdout.write(Cons.nil.toString() + '\\n');\n }\n leftParentheses = 0;\n aString = '';\n this.rl.prompt();\n }\n })\n .on('close', () => {\n // Skip the message if (exit) was called, since Evaluator.exit() already printed \"Bye!\".\n if (!exitedViaLisp) {\n console.log('\\nBye!');\n }\n });\n\n return null;\n }\n\n /**\n * Evaluates the given list and returns the evaluation result.\n */\n eval(aCons: LispValue): LispValue {\n try {\n return Evaluator.eval(aCons, this.root, this.streamManager);\n } catch (error) {\n if (error instanceof ExitError) throw error;\n console.error('*** can not eval ' + (aCons as { toString(): string }).toString() + ' ***');\n return Cons.nil;\n }\n }\n\n /**\n * Parses the source string, evaluates every expression it contains, and returns the results as an array.\n */\n evalAll(source: string): LispValue[] {\n const ast = this.parse(source);\n const results: LispValue[] = [];\n if (Cons.isCons(ast)) {\n for (const expr of ast.loop()) {\n results.push(this.eval(expr));\n }\n }\n return results;\n }\n\n /**\n * Parses and evaluates the source string and returns the value of the last expression.\n */\n evalString(source: string): LispValue {\n const results = this.evalAll(source);\n return results.length === 0 ? Cons.nil : (results.at(-1) ?? Cons.nil);\n }\n\n /**\n * Parses the given string into a list and returns it.\n */\n parse(aString: string): LispValue {\n try {\n return Cons.parse('(' + aString + '\\n);');\n } catch {\n console.error('*** can not parse ' + aString.replaceAll('\\n', '') + ' ***');\n return Cons.nil;\n }\n }\n\n /**\n * Sets the given environment as the root of the environment chain.\n */\n setRoot(environment: Table): null {\n if (environment instanceof Table) {\n environment.setRoot(true);\n this.root = environment;\n }\n\n return null;\n }\n\n /**\n * Initializes the environment table.\n */\n initializeTable(): Table {\n const aList: string[] = [];\n const aTable = new Table();\n aTable.setRoot(true);\n\n aList.push(\n 'abs',\n 'add',\n 'and',\n 'apply',\n 'assoc',\n 'atom',\n 'bind',\n 'car',\n 'cdr',\n 'characterp',\n 'cond',\n 'cons',\n 'consp',\n 'copy',\n 'cos',\n 'floatp',\n 'defun',\n 'divide',\n 'do',\n 'do*',\n 'dolist',\n 'doublep',\n 'eq',\n 'equal',\n 'exit',\n 'exp',\n 'gc',\n 'gensym',\n 'if',\n 'integerp',\n 'lambda',\n 'let',\n 'let*',\n 'last',\n 'list',\n 'listp',\n 'mapcar',\n 'member',\n 'memq',\n 'mod',\n 'multiply',\n 'napier',\n 'neq',\n 'nequal',\n 'not',\n 'notrace',\n 'nth',\n 'null',\n 'numberp',\n 'or',\n 'pi',\n 'pop',\n 'progn',\n 'printc',\n 'print',\n 'push',\n 'quote',\n 'random',\n 'reload',\n 'round',\n 'rplaca',\n 'rplacd',\n 'setq',\n 'set-allq',\n 'sin',\n 'sqrt',\n 'subtract',\n 'stringp',\n 'symbolp',\n 'tan',\n 'terpri',\n 'time',\n 'trace',\n 'unless',\n 'when',\n '+',\n '-',\n '*',\n '/',\n '//',\n '=',\n '==',\n '~=',\n '~~',\n '<',\n '<=',\n '>',\n '>=',\n );\n\n for (const each of aList) {\n const aSymbol = InterpretedSymbol.of(each);\n aTable.set(aSymbol, aSymbol);\n }\n\n let aString: string;\n let aCons: Cons;\n aString =\n '(lambda (list1 list2) (cond ((null (listp list1)) nil) ((null (listp list2)) nil) ((null list1) list2) (t (cons (car list1) (append (cdr list1) list2)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('append'), aCons);\n\n aString =\n '(lambda (l n) (cond ((<= (length l) n) nil) (t (cons (car l) (butlast (cdr l) n)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('butlast'), aCons);\n\n aString = '(lambda (l) (cond ((null (listp l)) nil) ((null l) 0) (t (+ 1 (length (cdr l))))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('length'), aCons);\n\n aString =\n '(lambda (n l) (cond ((> n (length l)) nil) ((= 0 n) l) (t (nthcdr (- n 1) (cdr l)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('nthcdr'), aCons);\n\n aString =\n \"(lambda (l) (cond ((null (listp l)) l) ((null l) '()) (t (append (reverse (cdr l)) (list (car l))))))\";\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('reverse'), aCons);\n\n aTable.set(InterpretedSymbol.of('t'), InterpretedSymbol.of('t'));\n\n return aTable;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["#intern","#generateNumber","vm","require"],"sources":["../src/runtime/Table/index.ts","../src/value/InterpretedSymbol/index.ts","../src/value/Loop/index.ts","../src/parser/IntStream/index.ts","../src/errors/KeiLispError/index.ts","../src/errors/ParseError/index.ts","../src/parser/NextState/index.ts","../src/parser/Parser/index.ts","../src/value/Cons/index.ts","../src/errors/EvalError/index.ts","../src/constants/index.ts","../src/runtime/Applier/index.ts","../src/errors/ExitError/index.ts","../src/runtime/StreamManager/index.ts","../src/runtime/Evaluator/index.ts","../src/interpreter/LispInterpreter/index.ts","../src/interpreter/Repl/index.ts"],"sourcesContent":["import { Cons } from '../../value/Cons/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Class that manages bindings of interpreted symbols.\n * @author Keisuke Ikeda\n * @this {Table}\n */\nexport class Table extends Map<unknown, LispValue> {\n source: Table | null;\n root: boolean;\n\n /**\n * Constructor.\n * @param aTable the environment in which this environment was created\n */\n constructor(aTable: Table | null = null) {\n super();\n this.source = aTable;\n this.root = aTable == null;\n }\n\n /**\n * Clones this Table and returns the clone.\n */\n clone(): Table {\n const aTable = new Table(this);\n for (const key of this.keys()) {\n const value = Cons.cloneValue(this.get(key));\n if (value == null) {\n throw new Error('RuntimeException!');\n }\n aTable.set(key, value);\n }\n\n return aTable;\n }\n\n /**\n * Returns whether anything is bound to the given property (key).\n */\n override has(aSymbol: unknown): boolean {\n if (super.has(aSymbol)) {\n return true;\n }\n if (this.isRoot()) {\n return false;\n }\n\n // source is guaranteed non-null when isRoot=false (the constructor sets root=true iff aTable is null).\n return (this.source as Table).has(aSymbol);\n }\n\n /**\n * Returns whether this instance equals the given object.\n */\n equals(anObject: unknown): boolean {\n // Kept for interface uniformity with Cons.equals / InterpretedSymbol.equals.\n // Delegates to Map.prototype.equals which does not exist in JS (throws TypeError).\n return (Map.prototype as unknown as { equals(o: unknown): boolean }).equals(anObject);\n }\n\n /**\n * Returns the value bound to the given interpreted symbol.\n */\n override get(aSymbol: unknown): LispValue {\n if (super.has(aSymbol)) {\n return super.get(aSymbol) as LispValue;\n }\n if (this.isRoot()) {\n return null;\n }\n\n // source is guaranteed non-null when isRoot=false.\n return (this.source as Table).get(aSymbol);\n }\n\n /**\n * Returns whether this instance is the root of the environment chain.\n */\n isRoot(): boolean {\n return this.root;\n }\n\n /**\n * Reassigns the symbol bound in the innermost scope (equivalent to Common Lisp's setq).\n * If a binding exists in the current scope, update it and return; otherwise recurse into the parent scope.\n */\n setIfExist(aSymbol: unknown, anObject: LispValue): LispValue {\n if (super.has(aSymbol)) {\n this.set(aSymbol, anObject);\n return anObject;\n }\n if (this.isRoot()) {\n return null;\n }\n return (this.source as Table).setIfExist(aSymbol, anObject);\n }\n\n /**\n * Sets whether this instance is the root of its environment chain.\n */\n setRoot(aBoolean: boolean): null {\n this.root = aBoolean;\n return null;\n }\n\n /**\n * Sets the parent environment.\n */\n setSource(aTable: Table | null): null {\n this.source = aTable;\n return null;\n }\n\n /**\n * Returns a formatted string representation of this instance.\n */\n override toString(): string {\n return '#<Environment>';\n }\n}\n","import { Table } from '../../runtime/Table/index.js';\n\n/**\n * @class\n * @classdesc Interpreted symbol with uniqueness, where each printed name maps to a single canonical instance (identity equals equality). A class that mimics canonical strings, distinct from JS's standard Symbol.\n * @author Keisuke Ikeda\n * @this {InterpretedSymbol}\n */\nexport class InterpretedSymbol {\n /**\n * Table that stores InterpretedSymbol instances (lazily initialized to avoid a circular dependency).\n */\n static #intern: Table | null = null;\n static get table(): Table {\n this.#intern ??= new Table();\n return this.#intern;\n }\n\n name: string;\n\n /**\n * Constructor.\n * @param name printed name\n */\n constructor(name: string = 'null') {\n this.name = name;\n }\n\n /**\n * Compares this interpreted symbol with the given one by printed name.\n * @param aSymbol the symbol to compare against\n * @return the difference in string length\n */\n compareTo(aSymbol: InterpretedSymbol): number {\n const left = this.name.codePointAt(0) ?? 0;\n const right = aSymbol.name.codePointAt(0) ?? 0;\n let aNumber = left < right ? aSymbol.name.length - left : left - aSymbol.name.length;\n aNumber = left === right ? 0 : aNumber;\n\n return aNumber;\n }\n\n /**\n * Returns whether this symbol equals the given object.\n */\n equals(anObject: unknown): boolean {\n return this === anObject;\n }\n\n /**\n * Returns the same interpreted symbol for a given printed name.\n * @param aString printed name\n */\n static of(aString: string): InterpretedSymbol {\n let aSymbol = this.table.get(aString) as InterpretedSymbol | null;\n\n if (aSymbol == null) {\n aSymbol = new InterpretedSymbol(aString);\n this.table.set(aString, aSymbol);\n }\n\n return aSymbol;\n }\n\n /**\n * Returns the string representation of this symbol.\n */\n toString(): string {\n return this.name;\n }\n}\n","import type { Cons } from '../Cons/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Iterator class for Cons.\n * @author Keisuke Ikeda\n * @this {Loop}\n */\nexport class Loop {\n aCons: Cons;\n length: number;\n index: number;\n\n /**\n * Constructor.\n * @param aCons the Cons to iterate over\n */\n constructor(aCons: Cons) {\n this.aCons = aCons;\n this.length = aCons.length();\n this.index = 1;\n }\n\n /**\n * Returns this instance.\n */\n iterator(): this {\n return this;\n }\n\n /**\n * Returns whether a next element exists.\n */\n hasNext(): boolean {\n return this.index <= this.length;\n }\n\n /**\n * Returns the next element.\n */\n next(): LispValue {\n const anObject = this.aCons.nth(this.index);\n this.remove();\n\n return anObject;\n }\n\n /**\n * Implementation of the iterable protocol.\n * Enables iteration with for...of and similar constructs.\n */\n [Symbol.iterator](): Iterator<LispValue> {\n return {\n next: (): IteratorResult<LispValue> => {\n if (this.index <= this.length) {\n const nextValue = this.aCons.nth(this.index);\n this.remove();\n return { value: nextValue, done: false };\n }\n return { done: true } as IteratorResult<LispValue>;\n },\n };\n }\n\n /**\n * Implementation of the async iterable protocol.\n * Enables iteration with for await...of and similar constructs.\n */\n [Symbol.asyncIterator](): AsyncIterator<LispValue> {\n return {\n next: (): Promise<IteratorResult<LispValue>> => {\n if (this.index <= this.length) {\n const nextValue = this.aCons.nth(this.index);\n this.remove();\n return Promise.resolve({ value: nextValue, done: false });\n }\n return Promise.resolve({ done: true } as IteratorResult<LispValue>);\n },\n };\n }\n\n /**\n * Advances to the next element.\n */\n remove(): null {\n this.index++;\n return null;\n }\n}\n","/**\n * @class\n * @classdesc Class that mimics Java's IntStream.\n * @author Keisuke Ikeda\n * @this {IntStream}\n */\nexport class IntStream {\n /**\n * Builds and returns an array of consecutive integers from start to afterEnd (exclusive).\n */\n static range(start: number, afterEnd: number): number[] {\n const end = afterEnd - 1;\n return this.rangeClosed(start, end);\n }\n\n /**\n * Builds and returns an array of consecutive integers from start to end (inclusive).\n */\n static rangeClosed(start: number, end: number): number[] {\n const range = end - start + 1;\n return Array.from({ length: range }, () => start++);\n }\n}\n","/**\n * @class\n * @classdesc Base class for all errors raised by kei-lisp during parsing or evaluation. Catch this to handle any Lisp-level failure without intercepting an unrelated runtime error or an `ExitError` (which signals a graceful `(exit)` and is intentionally not a subclass).\n * @author Keisuke Ikeda\n * @this {KeiLispError}\n */\nexport class KeiLispError extends Error {\n /**\n * Constructor.\n * @constructor\n * @param message human-readable diagnostic message\n */\n constructor(message: string) {\n super(message);\n this.name = 'KeiLispError';\n }\n}\n","import { KeiLispError } from '../KeiLispError/index.js';\n\n/**\n * @class\n * @classdesc Error raised when the parser cannot turn a source string into an AST. Subclass of `KeiLispError`.\n * @author Keisuke Ikeda\n * @this {ParseError}\n */\nexport class ParseError extends KeiLispError {\n /**\n * Constructor.\n * @constructor\n * @param message human-readable diagnostic message\n */\n constructor(message: string) {\n super(message);\n this.name = 'ParseError';\n }\n}\n","import { ParseError } from '../../errors/ParseError/index.js';\nimport type { Parser } from '../Parser/index.js';\n\n/**\n * @class\n * @classdesc Class that holds the next state.\n * @author Keisuke Ikeda\n * @this {NextState}\n */\nexport class NextState {\n automaton: Parser | null = null;\n nextState: number | null;\n method: unknown;\n methodName: string | null;\n\n /**\n * Constructor.\n */\n constructor(aNumber: number | null, aString: string | null) {\n this.nextState = aNumber;\n this.method = null;\n this.methodName = aString;\n }\n\n /**\n * Invokes the method corresponding to the input character and returns the resulting token number.\n */\n next(anAutomaton: Parser): number {\n this.automaton = anAutomaton;\n if (this.methodName == null) {\n return Number(this.nextState);\n }\n if (this.method == null) {\n try {\n this.method = (this.automaton as unknown as Record<string, unknown>)[this.methodName];\n } catch {\n throw new ParseError('Not Found Method: ' + this.methodName);\n }\n }\n\n let aNumber = -1;\n try {\n if (this.nextState != null) {\n aNumber = this.nextState;\n }\n const anObject = (this.automaton as unknown as Record<string, () => unknown>)[\n this.methodName\n ]();\n if (anObject != null) {\n aNumber = Number(anObject);\n }\n } catch (error) {\n // Preserve Lisp-domain parse errors; wrap anything else (e.g. TypeError from\n // a malformed grammar table) as a ParseError so library users see the same family.\n if (error instanceof ParseError) throw error;\n throw new ParseError(`Not Invoke Method: ${this.methodName}`);\n }\n\n return aNumber;\n }\n}\n","import { Cons } from '../../value/Cons/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport { IntStream } from '../IntStream/index.js';\nimport { NextState } from '../NextState/index.js';\nimport { ParseError } from '../../errors/ParseError/index.js';\nimport type { LispValue } from '../../types/index.js';\n\nconst PEEKCOUNT = 10;\nconst SYNTAX_ERROR = 'Syntax Error!';\n\n/**\n * @class\n * @classdesc Class that performs parsing (syntactic analysis).\n * @author Keisuke Ikeda\n * @this {Parser}\n */\nexport class Parser {\n stream: Iterator<string>;\n token: LispValue;\n tokenString: string;\n states: Map<number, Map<string, NextState>>;\n state: number;\n nexts: Array<string | null>;\n\n /**\n * Constructor.\n * @param aString the string to parse\n */\n constructor(aString: string) {\n this.stream = aString[Symbol.iterator]();\n this.token = null;\n this.tokenString = '';\n this.states = new Map();\n this.state = 0;\n this.nexts = Array.from({ length: PEEKCOUNT + 1 }, (): string | null => null);\n this.initializeStateTransitionTable();\n let count = 0;\n while (count++ < PEEKCOUNT) {\n this.nextChar();\n }\n }\n\n /**\n * Returns whether this is the last element.\n */\n atEnd(): boolean {\n return this.peekChar() == null;\n }\n\n /**\n * Concatenates the current character into the token string.\n */\n concatCharacter(): null {\n this.tokenString = this.tokenString.concat(String(this.nexts[0]));\n return null;\n }\n\n /**\n * Parses a single character of the input string.\n */\n input(aCharacter: string | null = this.nextChar()): LispValue {\n // Following the original: throws TypeError on .has when inputs is undefined.\n const inputs = this.states.get(this.state) as Map<string, NextState>;\n\n // Following the original: throws TypeError on codePointAt when aCharacter is null.\n const codePoint = (aCharacter as string).codePointAt(0) ?? 0;\n const aNumber = inputs.has(String(codePoint))\n ? (inputs.get(String(codePoint)) as NextState).next(this)\n : (inputs.get(String(128)) as NextState).next(this);\n\n if (aNumber < 0) {\n throw new ParseError(SYNTAX_ERROR);\n }\n this.state = aNumber;\n\n return this.token;\n }\n\n /**\n * Returns the next character to be parsed from the input string.\n */\n nextChar(): string | null {\n let aCharacter: string | null = null;\n try {\n const aNumber = (this.stream.next().value as string | undefined)?.codePointAt(0) ?? -1;\n if (aNumber >= 0) {\n aCharacter = String.fromCodePoint(aNumber);\n }\n } catch {\n throw new ParseError('Read Error!');\n }\n\n let count = 0;\n while (count < PEEKCOUNT) {\n this.nexts[count] = this.nexts[count + 1];\n count++;\n }\n this.nexts[count] = aCharacter;\n\n return this.nexts[0];\n }\n\n /**\n * Determines and returns the next token.\n */\n nextToken(): LispValue {\n this.token = null;\n let token: LispValue = null;\n\n while (!this.atEnd()) {\n if (this.state === 0 && token != null) {\n break;\n }\n token = this.input();\n }\n if (this.atEnd() && this.state !== 0) {\n throw new ParseError(SYNTAX_ERROR);\n }\n this.tokenString = '';\n\n return token;\n }\n\n /**\n * Instantiates and returns a NextState.\n */\n nextState(aNumber: number | null, aString: string | null): NextState {\n return new NextState(aNumber, aString);\n }\n\n /**\n * Parses the given string and returns the result.\n */\n static parse(aString: string): LispValue {\n return new Parser(aString).nextToken();\n }\n\n /**\n * Returns the next character if one exists.\n */\n peekChar(aNumber: number = 1): string | null {\n if (aNumber > this.nexts.length) {\n throw new ParseError('Read Error!');\n }\n return this.nexts[aNumber];\n }\n\n /**\n * Concatenates characters; invoked from NextState.\n */\n concat(): null {\n this.concatCharacter();\n return null;\n }\n\n /**\n * Concatenates the current character after translating common escape sequences\n * (`\\n`, `\\t`, `\\r`, `\\\\`, `\\\"`) into their actual characters. Invoked from NextState\n * inside a string literal after a backslash. Unknown escapes pass through as the\n * literal character (e.g. `\\x` becomes `x`).\n */\n escapeConcat(): null {\n const c = String(this.nexts[0]);\n const map: Record<string, string> = {\n n: '\\n',\n t: '\\t',\n r: '\\r',\n '\\\\': '\\\\',\n '\"': '\"',\n };\n this.tokenString = this.tokenString.concat(map[c] ?? c);\n return null;\n }\n\n /**\n * Returns the token number for a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n doubleToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToDouble();\n return 0;\n }\n\n return 3;\n }\n\n /**\n * Returns the token number for a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n doubleTokenAUX(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToDouble();\n return 0;\n }\n\n return 5;\n }\n\n /**\n * Returns the token number for a Number-type (integer: pseudo-Integer); invoked from NextState.\n */\n integerToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToInteger();\n return 0;\n }\n\n return 2;\n }\n\n /**\n * Converts the token into a list (Cons) and returns the token number for a list (Cons); invoked from NextState.\n */\n parseList(): number {\n this.skippingSpaces();\n if (this.rightParen()) {\n this.nextChar();\n this.token = Cons.nil;\n } else {\n this.token = this.parseListAUX();\n }\n\n return 0;\n }\n\n /**\n * Helper that converts the token into a list (Cons); invoked from NextState.\n */\n parseListAUX(): LispValue {\n this.skippingSpaces();\n if (this.peekChar() === ';') {\n while (this.peekChar() !== '\\n' && this.peekChar() != null) {\n this.nextChar();\n }\n this.nextChar();\n this.skippingSpaces();\n }\n if (this.rightParen()) {\n this.nextChar();\n return Cons.nil;\n } else if (this.peekChar() === '.') {\n this.nextChar();\n this.state = 0;\n const cdr = this.nextToken();\n this.skippingSpaces();\n if (!this.rightParen()) {\n throw new ParseError(SYNTAX_ERROR);\n }\n this.nextChar();\n\n return cdr;\n } else {\n this.state = 0;\n return new Cons(this.nextToken(), this.parseListAUX());\n }\n }\n\n /**\n * Recognizes a quote, wraps the token into a list (Cons), and returns the token number; invoked from NextState.\n */\n quote(): number {\n const anObject = new Cons(this.nextToken(), Cons.nil);\n this.token = new Cons(InterpretedSymbol.of('quote'), anObject);\n\n return 0;\n }\n\n /**\n * Returns the token number for a quote or for a 0-origin String-type (pseudo-Character); invoked from NextState.\n */\n quoteOrChar(): number {\n let aNumber = this.peekChar() === '\\\\' ? 3 : 2;\n aNumber = this.peekChar(aNumber) === \"'\" ? 11 : this.quote();\n\n return aNumber;\n }\n\n /**\n * Detects a right parenthesis (')', ']', '}') and returns the result; invoked from NextState.\n */\n rightParen(): boolean {\n return this.peekChar() === ')' || this.peekChar() === ']' || this.peekChar() === '}';\n }\n\n /**\n * Returns the token number for a sign symbol ('+', '-'); invoked from NextState.\n */\n sign(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToSymbol();\n return 0;\n }\n return 7;\n }\n\n /**\n * Skips whitespace; invoked from NextState.\n */\n skippingSpaces(): null {\n while (\n this.nexts[1] === String.fromCodePoint(9) ||\n this.nexts[1] === String.fromCodePoint(10) ||\n this.nexts[1] === String.fromCodePoint(11) ||\n this.nexts[1] === String.fromCodePoint(12) ||\n this.nexts[1] === String.fromCodePoint(13) ||\n this.nexts[1] === String.fromCodePoint(32)\n ) {\n this.nextChar();\n }\n\n return null;\n }\n\n /**\n * Returns the token number for an InterpretedSymbol; invoked from NextState.\n */\n symbolToken(): number {\n this.concat();\n if (this.rightParen()) {\n this.tokenToSymbol();\n return 0;\n }\n\n return 8;\n }\n\n /**\n * Converts the token into a 0-origin String-type (pseudo-Character); invoked from NextState.\n */\n tokenToCharacter(): null {\n this.token = this.tokenString.charAt(0);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n tokenToDouble(): null {\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (double-precision floating point: pseudo-Double); invoked from NextState.\n */\n tokenToDoubleAUX(): null {\n this.concat();\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a Number-type (integer: pseudo-Integer); invoked from NextState.\n */\n tokenToInteger(): null {\n const aCharacter = this.tokenString[0];\n if (aCharacter === '+') {\n this.tokenString = this.tokenString.slice(1);\n }\n this.token = Number(this.tokenString);\n return null;\n }\n\n /**\n * Converts the token into a String-type; invoked from NextState.\n */\n tokenToString(): null {\n this.token = this.tokenString;\n return null;\n }\n\n /**\n * Converts the token into an InterpretedSymbol; invoked from NextState.\n */\n tokenToSymbol(): null {\n this.token = InterpretedSymbol.of(this.tokenString);\n if (this.token === InterpretedSymbol.of('nil')) {\n this.token = Cons.nil;\n }\n return null;\n }\n\n /**\n * Builds the lookup table that maps character codes to their corresponding methods (tokens).\n */\n initializeStateTransitionTable(): null {\n let aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 8))\n aTable.set(String(index), this.nextState(-1, null));\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, null));\n for (const index of IntStream.rangeClosed(14, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(32), this.nextState(0, null));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n aTable.set(String(34), this.nextState(9, null));\n aTable.set(String(35), this.nextState(8, 'symbolToken'));\n aTable.set(String(36), this.nextState(8, 'symbolToken'));\n aTable.set(String(37), this.nextState(8, 'symbolToken'));\n aTable.set(String(38), this.nextState(8, 'symbolToken'));\n aTable.set(String(39), this.nextState(-1, 'quoteOrChar'));\n aTable.set(String(40), this.nextState(-1, 'parseList'));\n aTable.set(String(41), this.nextState(-1, null));\n aTable.set(String(42), this.nextState(8, 'symbolToken'));\n aTable.set(String(43), this.nextState(7, 'sign'));\n aTable.set(String(44), this.nextState(8, 'symbolToken'));\n aTable.set(String(45), this.nextState(7, 'sign'));\n aTable.set(String(46), this.nextState(-1, null));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(59), this.nextState(1, null));\n aTable.set(String(91), this.nextState(-1, 'parseList'));\n aTable.set(String(92), this.nextState(-1, null));\n aTable.set(String(93), this.nextState(-1, null));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n aTable.set(String(96), this.nextState(0, 'quote'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(123), this.nextState(-1, 'parseList'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(125), this.nextState(-1, null));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(0, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 8))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(10), this.nextState(0, null));\n aTable.set(String(13), this.nextState(0, null));\n for (const index of IntStream.rangeClosed(14, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(1, null));\n this.states.set(1, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToInteger'));\n aTable.set(String(32), this.nextState(0, 'tokenToInteger'));\n aTable.set(String(46), this.nextState(3, 'doubleToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n aTable.set(String(69), this.nextState(4, 'concat'));\n aTable.set(String(101), this.nextState(4, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(2, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToDouble'));\n aTable.set(String(32), this.nextState(0, 'tokenToDouble'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(3, 'doubleToken'));\n aTable.set(String(68), this.nextState(0, 'tokenToDoubleAUX'));\n aTable.set(String(69), this.nextState(4, 'concat'));\n aTable.set(String(100), this.nextState(0, 'tokenToDoubleAUX'));\n aTable.set(String(101), this.nextState(4, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(3, aTable);\n\n aTable = new Map<string, NextState>();\n aTable.set(String(43), this.nextState(6, 'concat'));\n aTable.set(String(45), this.nextState(6, 'concat'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(4, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToDouble'));\n aTable.set(String(32), this.nextState(0, 'tokenToDouble'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(5, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(5, 'doubleTokenAUX'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(6, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(32), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(35, 38))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(42, 45))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(2, 'integerToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(7, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(9, 13))\n aTable.set(String(index), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(32), this.nextState(0, 'tokenToSymbol'));\n aTable.set(String(33), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(35, 38))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(42, 45))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(47), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(48, 57))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(58, 90))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(94), this.nextState(8, 'symbolToken'));\n aTable.set(String(95), this.nextState(8, 'symbolToken'));\n for (const index of IntStream.rangeClosed(97, 122))\n aTable.set(String(index), this.nextState(8, 'symbolToken'));\n aTable.set(String(124), this.nextState(8, 'symbolToken'));\n aTable.set(String(126), this.nextState(8, 'symbolToken'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(8, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(34), this.nextState(0, 'tokenToString'));\n aTable.set(String(92), this.nextState(10, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(9, 'concat'));\n this.states.set(9, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(0, 31))\n aTable.set(String(index), this.nextState(-1, null));\n aTable.set(String(127), this.nextState(-1, null));\n aTable.set(String(128), this.nextState(9, 'escapeConcat'));\n this.states.set(10, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(32, 38))\n aTable.set(String(index), this.nextState(12, 'concat'));\n for (const index of IntStream.rangeClosed(40, 91))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(92), this.nextState(13, null));\n for (const index of IntStream.rangeClosed(93, 126))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(11, aTable);\n\n aTable = new Map<string, NextState>();\n aTable.set(String(39), this.nextState(0, 'tokenToCharacter'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(12, aTable);\n\n aTable = new Map<string, NextState>();\n for (const index of IntStream.rangeClosed(32, 38))\n aTable.set(String(index), this.nextState(12, 'concat'));\n for (const index of IntStream.rangeClosed(40, 126))\n aTable.set(String(index), this.nextState(12, 'concat'));\n aTable.set(String(128), this.nextState(-1, null));\n this.states.set(13, aTable);\n\n return null;\n }\n}\n","import { InterpretedSymbol } from '../InterpretedSymbol/index.js';\nimport { Loop } from '../Loop/index.js';\nimport { Parser } from '../../parser/Parser/index.js';\nimport { Table } from '../../runtime/Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Class that mimics a Cons cell.\n * @author Keisuke Ikeda\n * @this {Cons}\n */\nexport class Cons {\n static readonly nil: Cons = new Cons();\n\n car: LispValue;\n cdr: LispValue;\n\n /**\n * Constructor.\n * @constructor\n * @param car the car; defaults to nil when no argument is given.\n * @param cdr the cdr; defaults to nil when no argument is given.\n */\n constructor(car: LispValue = Cons.nil, cdr: LispValue = Cons.nil) {\n this.car = car;\n this.cdr = cdr;\n }\n\n /**\n * Appends the given element to the end of this Cons.\n * @param anObject the object to append\n * @return the Cons with the element appended\n */\n add(anObject: LispValue): this {\n const aCons = new Cons(anObject, Cons.nil);\n return this.nconc(aCons);\n }\n\n /**\n * Clones this Cons and returns the clone.\n * @return the cloned Cons\n */\n clone(): Cons {\n return new Cons(Cons.cloneValue(this.car), Cons.cloneValue(this.cdr));\n }\n\n /**\n * Clones the given value (a Cons element) and returns the clone.\n * @param value a Cons element\n * @return the cloned element\n */\n static cloneValue(value: LispValue): LispValue {\n if (Cons.isCons(value)) {\n return value.clone();\n }\n if (Cons.isNil(value)) {\n return Cons.nil;\n }\n if (Cons.isNumber(value)) {\n return value;\n }\n if (Cons.isString(value)) {\n return value;\n }\n if (Cons.isSymbol(value)) {\n return value;\n }\n if (Cons.isTable(value)) {\n return value;\n }\n return value;\n }\n\n /**\n * Returns whether this Cons equals the given object.\n * @param anObject the object to compare against\n * @return a boolean\n */\n equals(anObject: LispValue): boolean {\n if (Cons.isCons(anObject)) {\n return this.equalsAUX(this, anObject);\n }\n return false;\n }\n\n /**\n * Returns whether both arguments are Cons cells and are equal.\n * @param left the object to compare\n * @param right the object to compare\n * @return a boolean\n */\n equalsAUX(left: LispValue, right: LispValue): boolean {\n if (left === right) {\n return true;\n }\n if (!(Cons.isCons(left) && Cons.isCons(right))) {\n return false;\n }\n if (this.equalsAUX(left.car, right.car)) {\n return this.equalsAUX(left.cdr, right.cdr);\n }\n\n return false;\n }\n\n /**\n * Returns whether the given argument is an Atom.\n */\n static isAtom(anObject: LispValue): boolean {\n return Cons.isNotCons(anObject);\n }\n\n /**\n * Returns whether the given argument is a Cons.\n */\n static isCons(anObject: LispValue): anObject is Cons {\n return anObject !== Cons.nil && anObject instanceof Cons;\n }\n\n /**\n * Returns whether the given argument is a List.\n */\n static isList(anObject: LispValue): boolean {\n return Cons.isNil(anObject) || Cons.isCons(anObject);\n }\n\n /**\n * Returns whether the given argument is Nil.\n */\n static isNil(anObject: LispValue): boolean {\n return anObject === Cons.nil;\n }\n\n /**\n * Returns whether the given argument is not a Cons.\n */\n static isNotCons(anObject: LispValue): boolean {\n return !Cons.isCons(anObject);\n }\n\n /**\n * Returns whether the given argument is not a List.\n */\n static isNotList(anObject: LispValue): boolean {\n return !Cons.isList(anObject);\n }\n\n /**\n * Returns whether the given argument is not Nil.\n */\n static isNotNil(anObject: LispValue): boolean {\n return !Cons.isNil(anObject);\n }\n\n /**\n * Returns whether the given argument is not an interpreted symbol.\n */\n static isNotSymbol(anObject: LispValue): boolean {\n return !Cons.isSymbol(anObject);\n }\n\n /**\n * Returns whether the given argument is a number.\n */\n static isNumber(anObject: LispValue): anObject is number {\n return typeof anObject === 'number';\n }\n\n /**\n * Returns whether the given argument is a string.\n */\n static isString(anObject: LispValue): anObject is string {\n return typeof anObject === 'string';\n }\n\n /**\n * Returns whether the given argument is an interpreted symbol.\n */\n static isSymbol(anObject: LispValue): anObject is InterpretedSymbol {\n return anObject instanceof InterpretedSymbol;\n }\n\n /**\n * Returns whether the given argument is an environment.\n */\n static isTable(anObject: LispValue): anObject is Table {\n return anObject instanceof Table;\n }\n\n /**\n * Returns the last cell of this Cons.\n * @return this Cons's last cell\n */\n last(): Cons {\n let theCons: Cons = new Cons(Cons.nil, this);\n let aCons: Cons = this;\n\n while (Cons.isCons(aCons)) {\n if (!Cons.isCons(aCons.cdr)) {\n break;\n }\n theCons = theCons.cdr as Cons;\n aCons = aCons.cdr;\n }\n\n return aCons;\n }\n\n /**\n * Returns an iterator over this Cons.\n * @return an iterator over this Cons\n */\n loop(): Loop {\n return new Loop(this);\n }\n\n /**\n * Returns the length (depth) of this Cons.\n * @return the length (depth) of this Cons\n */\n length(): number {\n let count = 0;\n let aCons: LispValue = this;\n\n while (Cons.isCons(aCons)) {\n count++;\n aCons = aCons.cdr;\n }\n\n return count;\n }\n\n /**\n * Concatenates the given Cons and returns this Cons.\n * @param aCons the Cons to concatenate\n * @return this Cons\n */\n nconc(aCons: Cons): this {\n this.last().setCdr(aCons);\n return this;\n }\n\n /**\n * Returns the nth element of this Cons.\n * @param aNumber the index to retrieve\n * @return the element at the given index\n */\n nth(aNumber: number): LispValue {\n if (aNumber <= 0) {\n return Cons.nil;\n }\n let count = 1;\n let aCons: LispValue = this;\n while (Cons.isCons(aCons)) {\n if (count >= aNumber) {\n return aCons.car;\n }\n count++;\n aCons = aCons.cdr;\n }\n\n return Cons.nil;\n }\n\n /**\n * Lexes the given string into a Cons and returns it.\n * @param aString the string to lex\n */\n static parse(aString: string): LispValue {\n return Parser.parse(aString);\n }\n\n /**\n * Sets the car.\n */\n setCar(anObject: LispValue): null {\n this.car = anObject;\n return null;\n }\n\n /**\n * Sets the cdr.\n */\n setCdr(anObject: LispValue): null {\n this.cdr = anObject;\n return null;\n }\n\n /**\n * Sets both the car and the cdr.\n */\n setCons(car: LispValue, cdr: LispValue): this {\n this.car = car;\n this.cdr = cdr;\n return this;\n }\n\n /**\n * Returns a formatted string representation of this Cons.\n */\n toString(): string {\n let aString = '';\n if (Cons.isNil(this)) {\n aString += Cons.toString(Cons.nil);\n } else {\n aString += '(' + Cons.toString(this.car);\n\n if (Cons.isNil(this.cdr)) {\n aString += ')';\n } else if (this.cdr instanceof Cons) {\n let aCons: LispValue = this.cdr;\n while (Cons.isCons(aCons)) {\n const head = aCons.car;\n if (!(head instanceof Table)) {\n aString += ' ' + Cons.toString(head);\n }\n aCons = aCons.cdr;\n }\n aString += Cons.isNil(aCons) ? ')' : ' . ' + Cons.toString(aCons) + ')';\n } else {\n aString += ' . ' + Cons.toString(this.cdr) + ')';\n }\n }\n\n return aString;\n }\n\n /**\n * Returns a formatted string representation of the given object.\n * @param anObject the object to format\n */\n static toString(anObject: LispValue): string {\n return Cons.isNil(anObject) ? 'nil' : (anObject as { toString(): string }).toString();\n }\n}\n","import { KeiLispError } from '../KeiLispError/index.js';\n\n/**\n * @class\n * @classdesc Error raised when evaluation or application of a Lisp expression fails (type mismatch, unbound symbol, arity error, etc.). Subclass of `KeiLispError`.\n * @author Keisuke Ikeda\n * @this {EvalError}\n */\nexport class EvalError extends KeiLispError {\n /**\n * Constructor.\n * @constructor\n * @param message human-readable diagnostic message\n */\n constructor(message: string) {\n super(message);\n this.name = 'EvalError';\n }\n}\n","import type { LispValue } from '../types/index.js';\n\n/**\n * User-facing diagnostic message templates emitted by the interpreter.\n * Centralizing them keeps wording consistent and makes future i18n trivial.\n */\n\n/** Builtin/special-form type-mismatch: `Can not apply \"<fn>\" to \"<value>\"`. */\nexport const cannotApply = (fn: string, value: LispValue): string =>\n `Can not apply \"${fn}\" to \"${String(value)}\"`;\n\n/** Symbol argument validation: `\"<value>\" is not symbol`. */\nexport const notSymbol = (value: LispValue): string => `\"${String(value)}\" is not symbol`;\n\n/** Unbound symbol lookup: `I could find no variable binding for <symbol>`. */\nexport const noBinding = (symbol: LispValue): string =>\n `I could find no variable binding for ${String(symbol)}`;\n\n/** Unknown procedure: `I could find no procedure description for <procedure>`. */\nexport const noProcedure = (procedure: LispValue): string =>\n `I could find no procedure description for ${String(procedure)}`;\n\n/** Positional argument validation: `arguments N is not symbol.`. */\nexport const argumentNotSymbol = (position: number): string =>\n `arguments ${String(position)} is not symbol.`;\n\n/** Multi-list arity mismatch. */\nexport const SIZES_DO_NOT_MATCH = 'sizes do not match.';\n\n/** Intentional ungrammatical wording: kept as-is for backward compatibility of error messages. */\nexport const SIZE_DO_NOT_MATCH = 'size do not match.';\n","import { Cons } from '../../value/Cons/index.js';\nimport { EvalError } from '../../errors/EvalError/index.js';\nimport { Evaluator } from '../Evaluator/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport {\n cannotApply,\n noProcedure,\n SIZE_DO_NOT_MATCH,\n SIZES_DO_NOT_MATCH,\n} from '../../constants/index.js';\nimport type { StreamManager } from '../StreamManager/index.js';\nimport { Table } from '../Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\nconst SELECT_PRINT_FUNCTION_NOT_DEFINED = 'selectPrintFunction is not defined';\n\n/**\n * Class that mimics Lisp's universal function Apply.\n * @class\n * @classdesc\n * @author Keisuke Ikeda\n * @this {Applier}\n */\nexport class Applier {\n static readonly buildInFunctions: Map<InterpretedSymbol, string> = Applier.setup();\n static #generateNumber = 0;\n\n environment: Table;\n streamManager: StreamManager;\n depth: number;\n\n constructor(aTable: Table, aStreamManager: StreamManager, aNumber: number) {\n this.environment = new Table(aTable);\n this.streamManager = aStreamManager;\n this.depth = aNumber;\n }\n\n abs(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.abs(args.car);\n }\n throw new EvalError(cannotApply('abs', args.car));\n\n return Cons.nil;\n }\n\n add(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.add_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('add', args.car));\n\n return Cons.nil;\n }\n\n add_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result + each;\n } else {\n throw new EvalError(cannotApply('add', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n static apply(\n procedure: LispValue,\n args: LispValue,\n environment: Table,\n aStreamManager: StreamManager,\n depth: number,\n ): LispValue {\n return new Applier(environment, aStreamManager, depth).apply(procedure, args);\n }\n\n apply(procedure: LispValue, args: LispValue): LispValue {\n if (Cons.isSymbol(procedure)) {\n return this.selectProcedure(procedure, args);\n }\n return this.entrustEvaluator(procedure, args);\n }\n\n assoc(args: Cons): LispValue {\n const target = args.car;\n\n if (Cons.isNotCons(args.nth(2))) {\n return Cons.nil;\n }\n const aCons = args.nth(2) as Cons;\n\n for (const each of aCons.loop()) {\n if (Cons.isNotCons(each)) {\n throw new EvalError(cannotApply('assoc', each));\n }\n const eachCons = each as Cons;\n const key = eachCons.car;\n if (this.equal_(new Cons(target, new Cons(key, Cons.nil))) === InterpretedSymbol.of('t')) {\n return eachCons;\n }\n }\n\n return Cons.nil;\n }\n\n atom_(args: Cons): LispValue {\n if (Cons.isAtom(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n binding(parameter: LispValue, args: LispValue): null {\n if (Cons.isNil(parameter)) {\n return null;\n }\n let aCons = parameter as Cons;\n let theCons = args as Cons;\n\n while (Cons.isNotNil(aCons)) {\n try {\n this.environment.set(aCons.car, theCons.car);\n } catch {\n throw new EvalError(SIZES_DO_NOT_MATCH);\n return null;\n }\n\n if (Cons.isNotCons(aCons.cdr)) {\n break;\n }\n aCons = aCons.cdr as Cons;\n theCons = theCons.cdr as Cons;\n }\n\n if (Cons.isNotList(aCons.cdr) && Cons.isNotNil(aCons.cdr)) {\n try {\n this.environment.set(aCons.cdr, theCons.cdr);\n } catch {\n throw new EvalError(SIZES_DO_NOT_MATCH);\n return null;\n }\n } else if (Cons.isNotNil(aCons.cdr)) {\n // Following the original: the source code references the undefined variable `aList`,\n // so it throws ReferenceError (the intended Error message is never reached).\n throw new ReferenceError('aList is not defined');\n }\n\n return null;\n }\n\n buildInFunction(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (this.isSpy(procedure)) {\n this.spyPrint(this.streamManager.spyStream(procedure), new Cons(procedure, args).toString());\n this.setDepth(this.depth + 1);\n }\n\n const methodName = Applier.buildInFunctions.get(procedure) as string;\n\n const target = this as unknown as Record<string, unknown>;\n const fn = target[methodName];\n if (typeof fn !== 'function') {\n throw new TypeError(`${this.constructor.name} does not have a method named \"${methodName}\"`);\n }\n const answer = (fn as (a: LispValue) => LispValue).apply(target, [args]);\n\n if (this.isSpy(procedure)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(procedure),\n String(answer) + ' <== ' + new Cons(procedure, args).toString(),\n );\n }\n\n return answer;\n }\n\n car(args: Cons): LispValue {\n return (args.car as Cons).car;\n }\n\n cdr(args: Cons): LispValue {\n return (args.car as Cons).cdr;\n }\n\n character_(args: Cons): LispValue {\n if (Cons.isString(args.car) && args.car.length === 1) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n cons(args: Cons): LispValue {\n return new Cons(args.car, args.nth(2));\n }\n\n cons_(args: Cons): LispValue {\n if (Cons.isCons(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n copy(args: Cons): LispValue {\n return Cons.cloneValue(args.car);\n }\n\n cos(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.cos(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n divide(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.divide_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('divide', args.car));\n\n return Cons.nil;\n }\n\n divide_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result / each;\n } else {\n throw new EvalError(cannotApply('divide', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n entrustEvaluator(procedure: LispValue, args: LispValue): LispValue {\n let anObject: LispValue = Cons.nil;\n let aCons = (procedure as Cons).cdr as Cons;\n this.binding(aCons.car, args);\n aCons = aCons.cdr as Cons;\n\n for (const each of aCons.loop()) {\n if (each instanceof Table) {\n break;\n }\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n // NOTE: Implements Common Lisp's eq as JS strict identity (===). Symbols are eq because\n // InterpretedSymbol.of interns by name; numbers / strings are eq because JS primitive\n // equality is by value; Cons / Table / other objects are eq only when they are the same\n // reference. Edge cases: NaN is never eq to itself (matches IEEE 754 and most CL\n // implementations); +0 and -0 are eq (CL leaves this implementation-defined).\n eq_(args: Cons): LispValue {\n const first = args.car;\n const second = args.nth(2);\n if (first === second) {\n return InterpretedSymbol.of('t');\n }\n\n return Cons.nil;\n }\n\n equal_(args: Cons): LispValue {\n const first = args.car;\n const second = args.nth(2);\n if (this.eq_(args) === InterpretedSymbol.of('t')) {\n return InterpretedSymbol.of('t');\n }\n if (Cons.isCons(first) && Cons.isCons(second)) {\n if (first.equals(second)) {\n return InterpretedSymbol.of('t');\n }\n if (second.equals(first)) {\n return InterpretedSymbol.of('t');\n }\n }\n\n return Cons.nil;\n }\n\n exp(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.exp(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n format(args: Cons): LispValue {\n if (!Cons.isString(args.car)) {\n throw new EvalError(cannotApply('format', args.car));\n }\n const aCons = args.cdr;\n const format = this.format_AUX(args.car, aCons);\n process.stdout.write(String(format));\n\n return Cons.nil;\n }\n\n format_AUX(format: string, aCons: LispValue): string | undefined {\n let theCons: LispValue = aCons;\n let index = 0;\n let state = 0;\n let buffer = '';\n let token = '';\n\n while (index < format.length) {\n const aCharacter = format[index];\n switch (state) {\n case 0: {\n if (aCharacter === '~') {\n state = 1;\n } else {\n buffer += aCharacter;\n }\n\n break;\n }\n case 1: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 2;\n break;\n }\n case 'a': {\n // Following the original: calls theCons.car.toString() directly (throws if null).\n buffer += ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n state = 0;\n break;\n }\n case '%': {\n buffer += '\\n';\n state = 0;\n break;\n }\n case '-': {\n state = 3;\n break;\n }\n default: {\n buffer += '~';\n buffer += aCharacter;\n state = 0;\n }\n }\n\n break;\n }\n case 2: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 2;\n break;\n }\n case 'a': {\n const size = Number(token);\n token = '';\n if (Cons.isNil(theCons)) {\n throw new EvalError(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n let value: string = ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n while (value.length < size) {\n value += ' ';\n }\n buffer += value;\n state = 0;\n break;\n }\n default: {\n buffer += '~';\n buffer += token + aCharacter;\n token = '';\n state = 0;\n }\n }\n\n break;\n }\n case 3: {\n switch (aCharacter) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n token += aCharacter;\n state = 3;\n break;\n }\n case 'a': {\n const size = Number(token);\n token = '';\n if (Cons.isNil(theCons)) {\n throw new EvalError(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n const value: string = ((theCons as Cons).car as { toString(): string }).toString();\n theCons = (theCons as Cons).cdr;\n let spaces = '';\n while (value.length + spaces.length < size) {\n spaces += ' ';\n }\n buffer += spaces + value;\n state = 0;\n break;\n }\n default: {\n buffer += '~';\n buffer += '-';\n buffer += token + aCharacter;\n token = '';\n state = 0;\n }\n }\n\n break;\n }\n default: {\n throw new EvalError(`unknown format directive: ~${aCharacter}`);\n }\n }\n index++;\n }\n if (Cons.isNotNil(theCons)) {\n throw new EvalError(SIZE_DO_NOT_MATCH);\n return undefined;\n }\n\n return buffer;\n }\n\n // Common Lisp's floatp is a type-tag predicate (integer vs float), but JS has only one\n // numeric type (double). Approximated here as a range check: \"is this number representable\n // in IEEE 32-bit (single-precision) float?\". Revisit if numeric types are split.\n float_(args: Cons): LispValue {\n if (Cons.isNumber(args.car) && -3.4e38 <= args.car && args.car <= 3.4e38) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n gensym(): InterpretedSymbol {\n const aSymbol = InterpretedSymbol.of('id' + String(Applier.#generateNumber));\n Applier.incrementGenerateNumber();\n\n return aSymbol;\n }\n\n getStream(anObject: LispValue): unknown {\n if (typeof anObject === 'string') {\n return (process as unknown as { out?: unknown }).out;\n }\n\n return this.streamManager.getStream();\n }\n\n greaterThan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.greaterThan_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('>', args.car));\n\n return Cons.nil;\n }\n\n greaterThan_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue > rightValue;\n } else {\n throw new EvalError(cannotApply('>', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n greaterThanOrEqual(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.greaterThanOrEqual_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('>=', args.car));\n\n return Cons.nil;\n }\n\n greaterThanOrEqual_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue >= rightValue;\n } else {\n throw new EvalError(cannotApply('>=', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n static incrementGenerateNumber(): null {\n Applier.#generateNumber++;\n return null;\n }\n\n indent(): string {\n let index = 0;\n let aString = '';\n while (index++ < this.depth) {\n aString += '| ';\n }\n\n return aString;\n }\n\n integer_(args: Cons): LispValue {\n if (Cons.isNumber(args.car) && Number.isInteger(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n isSpy(aSymbol: InterpretedSymbol): boolean {\n return this.streamManager.isSpy(aSymbol);\n }\n\n last(args: Cons): LispValue {\n if (Cons.isNotCons(args)) {\n return Cons.nil;\n }\n const aCons = args.car as Cons;\n\n return aCons.last();\n }\n\n lessThan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.lessThan_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('<', args.car));\n\n return Cons.nil;\n }\n\n lessThan_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue < rightValue;\n } else {\n throw new EvalError(cannotApply('<', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n lessThanOrEqual(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.lessThanOrEqual_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('<=', args.car));\n\n return Cons.nil;\n }\n\n lessThanOrEqual_Number(init: number, args: LispValue): LispValue {\n let leftValue: number = init;\n let aCons: LispValue = args;\n let aBoolean: boolean;\n\n while (Cons.isNotNil(aCons)) {\n const rightValue = (aCons as Cons).car;\n if (Cons.isNumber(rightValue)) {\n aBoolean = leftValue <= rightValue;\n } else {\n throw new EvalError(cannotApply('<=', rightValue));\n return Cons.nil;\n }\n if (!aBoolean) {\n return Cons.nil;\n }\n leftValue = rightValue;\n aCons = (aCons as Cons).cdr;\n }\n\n return InterpretedSymbol.of('t');\n }\n\n list(args: LispValue): LispValue {\n if (Cons.isNil(args)) {\n return Cons.nil;\n }\n return new Cons((args as Cons).car, this.list((args as Cons).cdr));\n }\n\n list_(args: Cons): LispValue {\n if (Cons.isList(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n mapcar(args: Cons): LispValue {\n const aCons = new Cons(Cons.nil, Cons.nil);\n const procedure = args.car;\n const parameters = args.nth(2) as Cons;\n const options = (args.cdr as Cons).cdr as Cons;\n let theCons: Cons = aCons;\n let index = 1;\n\n for (const each of parameters.loop()) {\n const argumentsCons = new Cons(Cons.nil, Cons.nil);\n let temporaryCons: Cons = argumentsCons;\n\n if (Cons.isNotNil(each)) {\n for (const arg of options.loop()) {\n if (Cons.isNotCons(arg)) {\n // Following the original: the source code uses `consol.log` (a typo), which throws\n // ReferenceError, so the subsequent `return Cons.nil` is never reached.\n throw new ReferenceError('consol is not defined');\n }\n temporaryCons.setCdr(new Cons((arg as Cons).nth(index), Cons.nil));\n temporaryCons = temporaryCons.cdr as Cons;\n }\n }\n\n argumentsCons.setCar(each);\n const anObject = Applier.apply(\n procedure,\n argumentsCons,\n this.environment,\n this.streamManager,\n this.depth,\n );\n theCons.setCdr(new Cons(anObject, Cons.nil));\n theCons = theCons.cdr as Cons;\n index++;\n }\n\n return aCons.cdr;\n }\n\n member(args: Cons): LispValue {\n let aSymbol = InterpretedSymbol.of('equal?');\n if (Cons.isNotNil(args.nth(3))) {\n aSymbol = args.nth(3) as InterpretedSymbol;\n }\n if (Cons.isNotCons(args.nth(2))) {\n return Cons.nil;\n }\n let aCons = args.nth(2) as Cons;\n\n while (Cons.isCons(aCons)) {\n let anObject: LispValue = null;\n\n if (aSymbol === InterpretedSymbol.of('eq?')) {\n anObject = this.eq_(new Cons(args.car, new Cons(aCons.car, Cons.nil)));\n }\n if (aSymbol === InterpretedSymbol.of('equal?')) {\n anObject = this.equal_(new Cons(args.car, new Cons(aCons.car, Cons.nil)));\n }\n if (anObject == null) {\n throw new EvalError(cannotApply('member', aSymbol));\n }\n if (anObject === InterpretedSymbol.of('t')) {\n return aCons;\n }\n\n aCons = aCons.cdr as Cons;\n }\n\n return Cons.nil;\n }\n\n memq(args: Cons): LispValue {\n if (this.member(args) === Cons.nil) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n mod(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.mod_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('mod', args.car));\n\n return Cons.nil;\n }\n\n mod_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result % each;\n } else {\n throw new EvalError(cannotApply('mod', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n multiply(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.multiply_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('multiply', args.car));\n\n return Cons.nil;\n }\n\n multiply_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result * each;\n } else {\n throw new EvalError(cannotApply('multiply', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n napier(): number {\n return Math.E;\n }\n\n neq(args: Cons): LispValue {\n if (this.eq_(args) === InterpretedSymbol.of('t')) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n nequal(args: Cons): LispValue {\n if (this.equal_(args) === InterpretedSymbol.of('t')) {\n return Cons.nil;\n }\n return InterpretedSymbol.of('t');\n }\n\n nth(args: Cons): LispValue {\n if (!Number.isInteger(args.car)) {\n return Cons.nil;\n }\n const index = args.car as number;\n const aCons = args.nth(2) as Cons;\n\n return aCons.nth(index);\n }\n\n null_(args: Cons): LispValue {\n if (Cons.isNil(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n // NOTE: Lisp's numberp and doublep are originally distinct predicates, but because JS has only\n // one numeric type (double), we share a single implementation. In Applier.setup() both\n // Lisp function names numberp / doublep map to this method. Split into separate methods if\n // a future revision introduces additional numeric types such as BigInt.\n number_(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n pi(): number {\n return Math.PI;\n }\n\n random(): number {\n return Math.random();\n }\n\n round(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.round(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n selectProcedure(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (Applier.buildInFunctions.has(procedure)) {\n return this.buildInFunction(procedure, args);\n }\n if (this.environment.has(procedure)) {\n return this.userFunction(procedure, args);\n }\n throw new EvalError(noProcedure(procedure));\n\n return Cons.nil;\n }\n\n setDepth(aNumber: number): null {\n this.depth = aNumber;\n return null;\n }\n\n static setup(): Map<InterpretedSymbol, string> {\n try {\n const entries: Array<[string, string]> = [\n ['abs', 'abs'],\n ['add', 'add'],\n ['assoc', 'assoc'],\n ['atom', 'atom_'],\n ['car', 'car'],\n ['cdr', 'cdr'],\n ['characterp', 'character_'],\n ['cons', 'cons'],\n ['consp', 'cons_'],\n ['copy', 'copy'],\n ['cos', 'cos'],\n ['floatp', 'float_'],\n ['divide', 'divide'],\n ['doublep', 'number_'],\n ['eq', 'eq_'],\n ['equal', 'equal_'],\n ['exp', 'exp'],\n ['format', 'format'],\n ['gensym', 'gensym'],\n ['integerp', 'integer_'],\n ['last', 'last'],\n ['list', 'list'],\n ['listp', 'list_'],\n ['mapcar', 'mapcar'],\n ['member', 'member'],\n ['memq', 'memq'],\n ['mod', 'mod'],\n ['multiply', 'multiply'],\n ['napier', 'napier'],\n ['neq', 'neq'],\n ['nequal', 'nequal'],\n ['nth', 'nth'],\n ['null', 'null_'],\n ['numberp', 'number_'],\n ['pi', 'pi'],\n ['random', 'random'],\n ['round', 'round'],\n ['sin', 'sin'],\n ['sqrt', 'sqrt'],\n ['subtract', 'subtract'],\n ['stringp', 'string_'],\n ['symbolp', 'symbol_'],\n ['tan', 'tan'],\n ['+', 'add'],\n ['-', 'subtract'],\n ['*', 'multiply'],\n ['/', 'divide'],\n ['//', 'mod'],\n ['==', 'eq_'],\n ['=', 'equal_'],\n ['~~', 'neq'],\n ['~=', 'nequal'],\n ['<', 'lessThan'],\n ['<=', 'lessThanOrEqual'],\n ['>', 'greaterThan'],\n ['>=', 'greaterThanOrEqual'],\n ];\n return new Map(entries.map(([key, value]) => [InterpretedSymbol.of(key), value]));\n } catch {\n throw new Error('NullPointerException (Applier, initialize)');\n }\n }\n\n sin(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.sin(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n spyPrint(aStream: NodeJS.WritableStream | string | null, line: string): null {\n const target: NodeJS.WritableStream =\n aStream != null && typeof aStream === 'object' && 'write' in aStream\n ? aStream\n : process.stdout;\n target.write(this.indent() + line + '\\n');\n return null;\n }\n\n sqrt(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.sqrt(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n string_(args: Cons): LispValue {\n if (Cons.isString(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n subtract(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return this.subtract_Number(args.car, args.cdr);\n }\n throw new EvalError(cannotApply('subtract', args.car));\n\n return Cons.nil;\n }\n\n subtract_Number(init: number, args: LispValue): LispValue {\n let result = init;\n let aCons: LispValue = args;\n\n while (Cons.isNotNil(aCons)) {\n const each = (aCons as Cons).car;\n if (Cons.isNumber(each)) {\n result = result - each;\n } else {\n throw new EvalError(cannotApply('subtract', each));\n return Cons.nil;\n }\n aCons = (aCons as Cons).cdr;\n }\n\n return result;\n }\n\n symbol_(args: Cons): LispValue {\n if (Cons.isSymbol(args.car)) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n tan(args: Cons): LispValue {\n if (Cons.isNumber(args.car)) {\n return Math.tan(args.car);\n }\n // Following the original: calls the undefined `selectPrintFunction`, so it throws ReferenceError.\n throw new ReferenceError(SELECT_PRINT_FUNCTION_NOT_DEFINED);\n }\n\n userFunction(procedure: InterpretedSymbol, args: LispValue): LispValue {\n if (this.isSpy(procedure)) {\n this.spyPrint(this.streamManager.spyStream(procedure), new Cons(procedure, args).toString());\n this.setDepth(this.depth + 1);\n }\n\n const lambda = this.environment.get(procedure) as Cons;\n const theEnvironment = lambda.last().car as Table;\n const answer = Applier.apply(lambda, args, theEnvironment, this.streamManager, this.depth);\n\n if (this.isSpy(procedure)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(procedure),\n String(answer) + ' <== ' + new Cons(procedure, args).toString(),\n );\n }\n\n return answer;\n }\n}\n","/**\n * @class\n * @classdesc Error class representing a graceful exit triggered by a Lisp (exit) call. Catch it at the REPL or library boundary to run cleanup before terminating.\n * @author Keisuke Ikeda\n * @this {ExitError}\n */\nexport class ExitError extends Error {\n /**\n * Constructor.\n * @constructor\n */\n constructor() {\n super('Exit');\n this.name = 'ExitError';\n }\n}\n","import type { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\n\ntype Stream = NodeJS.WritableStream | null;\n\n/**\n * @class\n * @classdesc\n * @author Keisuke Ikeda\n * @this {StreamManager}\n */\nexport class StreamManager {\n isTrace: boolean = false;\n streamTable: Map<string, Stream>;\n spyTable: Map<InterpretedSymbol, string>;\n traceStream: Stream;\n\n constructor() {\n this.streamTable = new Map();\n this.spyTable = new Map();\n this.traceStream = null;\n this.initialize();\n }\n\n getStream(): Stream {\n let aPrintStream: Stream = null;\n if (this.isTrace) {\n // Following the original: traceStream is invoked as a function (since it is a Stream object this throws).\n return (this.traceStream as unknown as () => Stream)();\n }\n const filePath = process.env['HOME'] as string;\n if (this.streamTable.has(filePath)) {\n aPrintStream = this.streamTable.get(filePath) ?? null;\n }\n\n return aPrintStream;\n }\n\n /**\n * Initializes the instance variables.\n */\n initialize(): null {\n this.streamTable.set('default', process.stdout);\n this.streamTable.set('stdout', process.stdout);\n this.streamTable.set('stderr', process.stderr);\n\n return null;\n }\n\n isSpy(aSymbol: InterpretedSymbol | null): boolean {\n if (this.isTrace) {\n return true;\n }\n if (aSymbol != null && this.spyTable_().has(aSymbol)) {\n return true;\n }\n return false;\n }\n\n noSpy(aSymbol: InterpretedSymbol): null {\n if (this.spyTable_().has(aSymbol)) {\n this.spyTable_().delete(aSymbol);\n }\n\n return null;\n }\n\n noTrace(): null {\n this.setIsTrace(false);\n this.spyTable.clear();\n\n return null;\n }\n\n setIsTrace(aBoolean: boolean): null {\n this.isTrace = aBoolean;\n return null;\n }\n\n setTraceStream(aStream: Stream): null {\n this.traceStream = aStream;\n return null;\n }\n\n spy(aSymbol: InterpretedSymbol, aString: string): null {\n const aPrintStream = this.getStream();\n if (aPrintStream != null) {\n this.spyTable_().set(aSymbol, aString);\n }\n\n return null;\n }\n\n spyStream(aSymbol: InterpretedSymbol | null): Stream | string {\n if (this.isTrace) {\n return this.traceStream;\n }\n if (aSymbol != null && this.spyTable_().has(aSymbol)) {\n return this.spyTable_().get(aSymbol) as string;\n }\n throw new Error('Stream is not found.');\n }\n\n spyTable_(): Map<InterpretedSymbol, string> {\n const aTable = new Map<InterpretedSymbol, string>();\n for (const [key, value] of this.spyTable) {\n aTable.set(key, value);\n }\n return aTable;\n }\n\n trace(): null {\n this.noTrace();\n const aPrintStream = this.getStream();\n this.setTraceStream(aPrintStream);\n this.setIsTrace(true);\n\n return null;\n }\n}\n","import v8 from 'node:v8';\nimport vm from 'node:vm';\n\nimport { Applier } from '../Applier/index.js';\nimport { Cons } from '../../value/Cons/index.js';\nimport { EvalError } from '../../errors/EvalError/index.js';\nimport { ExitError } from '../../errors/ExitError/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport {\n argumentNotSymbol,\n cannotApply,\n noBinding,\n notSymbol,\n SIZES_DO_NOT_MATCH,\n} from '../../constants/index.js';\nimport { StreamManager } from '../StreamManager/index.js';\nimport { Table } from '../Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n// Lazily expose V8's gc() to user-land on first use, avoiding the need for the\n// host process to be started with `--expose-gc`.\nlet cachedGc: (() => void) | null = null;\nconst triggerGc = (): void => {\n if (cachedGc == null) {\n v8.setFlagsFromString('--expose_gc');\n cachedGc = vm.runInNewContext('gc') as () => void;\n }\n cachedGc();\n};\n\n/**\n * @class\n * @classdesc Class that mimics Lisp's universal function Evaluate.\n * @author Keisuke Ikeda\n * @this {Evaluator}\n */\nexport class Evaluator {\n static readonly buildInFunctions: Map<InterpretedSymbol, string> = Evaluator.setup();\n\n environment: Table;\n streamManager: StreamManager;\n depth: number;\n\n constructor(aTable: Table, aStreamManager: StreamManager, aNumber: number) {\n this.environment = aTable;\n this.streamManager = aStreamManager;\n this.depth = aNumber;\n }\n\n and(aCons: Cons): LispValue {\n for (const each of aCons.loop()) {\n const anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n if (Cons.isNil(anObject)) {\n return Cons.nil;\n }\n }\n\n return InterpretedSymbol.of('t');\n }\n\n apply_lisp(aCons: Cons): LispValue {\n const procedure = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const args = Evaluator.eval(aCons.nth(2), this.environment, this.streamManager, this.depth);\n let aTable: Table = this.environment;\n if (procedure instanceof Cons && procedure.last().car instanceof Table) {\n aTable = procedure.last().car as Table;\n }\n\n return Applier.apply(procedure, args, aTable, this.streamManager, this.depth);\n }\n\n bind(aCons: Cons): LispValue {\n if (Cons.isNotSymbol(aCons.car)) {\n throw new EvalError(cannotApply('bind', aCons.car));\n }\n const aSymbol = aCons.car as InterpretedSymbol;\n if (!this.environment.has(aSymbol)) {\n return Cons.nil;\n }\n\n return this.bindAUX(aSymbol);\n }\n\n bindAUX(aSymbol: InterpretedSymbol): number {\n let aTable: Table | null = this.environment;\n let anObject: LispValue = aTable.get(aSymbol);\n let count = 1;\n\n while (aTable != null) {\n if (!aTable.has(aSymbol)) {\n break;\n }\n const theObject: LispValue = aTable.get(aSymbol);\n // Following the original: loose (!=) comparison.\n if (theObject != anObject) {\n count++;\n anObject = theObject;\n }\n aTable = aTable.source;\n }\n\n return count;\n }\n\n binding(parameters: Cons, aTable: Table): null {\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n throw new EvalError(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n const value = Evaluator.eval(theCons.nth(2), aTable, this.streamManager, this.depth);\n aTable.set(key, value);\n }\n\n return null;\n }\n\n bindingParallel(parameters: Cons, aTable: Table): null {\n const theTable = new Map<unknown, LispValue>();\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n throw new EvalError(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n const value = Evaluator.eval(theCons.nth(2), aTable, this.streamManager, this.depth);\n theTable.set(key, value);\n }\n\n for (const [key, value] of theTable) {\n aTable.set(key, value);\n }\n\n return null;\n }\n\n cond(aCons: LispValue): LispValue {\n if (Cons.isNil(aCons)) {\n return Cons.nil;\n }\n const consCell = aCons as Cons;\n const clause = consCell.car as Cons;\n let anObject: LispValue = Evaluator.eval(\n clause.car,\n this.environment,\n this.streamManager,\n this.depth,\n );\n if (Cons.isNil(anObject)) {\n return this.cond(consCell.cdr);\n }\n const consequent = clause.cdr as Cons;\n for (const each of consequent.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n return anObject;\n }\n\n defun(aCons: Cons): LispValue {\n const variable = aCons.car;\n let lambda: LispValue = aCons.cdr;\n lambda =\n aCons.length() === 2\n ? (lambda as Cons).car\n : new Cons(InterpretedSymbol.of('lambda'), lambda);\n lambda = Evaluator.eval(lambda, new Table(this.environment), this.streamManager, this.depth);\n this.environment.set(variable, lambda);\n\n return variable;\n }\n\n do_(aCons: Cons): LispValue {\n const parameters = aCons.car as Cons;\n const bool = aCons.nth(2) as Cons;\n const expressions = (aCons.cdr as Cons).cdr as Cons;\n this.bindingParallel(parameters, this.environment);\n if (Cons.isNil(bool)) {\n bool.setCar(Cons.nil);\n }\n\n while (Cons.isNil(Evaluator.eval(bool.car, this.environment, this.streamManager, this.depth))) {\n const theTable = new Map<InterpretedSymbol, LispValue>();\n for (const each of expressions.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n throw new EvalError(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n if (Cons.isNotNil(theCons.nth(3))) {\n const value = Evaluator.eval(\n theCons.nth(3),\n this.environment,\n this.streamManager,\n this.depth,\n );\n theTable.set(key, value);\n }\n }\n for (const [key, value] of theTable) {\n this.environment.set(key, value);\n }\n }\n return Evaluator.eval(bool.nth(2), this.environment, this.streamManager, this.depth);\n }\n\n doList(aCons: Cons): LispValue {\n const parameter = aCons.car as Cons;\n const theCons = aCons.cdr as Cons;\n const args = Evaluator.eval(\n parameter.nth(2),\n this.environment,\n this.streamManager,\n this.depth,\n ) as Cons;\n for (const element of args.loop()) {\n this.environment.set(parameter.car, element);\n for (const each of theCons.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n }\n\n return Evaluator.eval(parameter.nth(3), this.environment, this.streamManager, this.depth);\n }\n\n doStar(aCons: Cons): LispValue {\n const parameters = aCons.car as Cons;\n const bool = aCons.nth(2) as Cons;\n const expressions = (aCons.cdr as Cons).cdr as Cons;\n this.binding(parameters, this.environment);\n if (Cons.isNil(bool)) {\n bool.setCar(Cons.nil);\n }\n\n while (Cons.isNil(Evaluator.eval(bool.car, this.environment, this.streamManager, this.depth))) {\n for (const each of expressions.loop()) {\n Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n for (const each of parameters.loop()) {\n const theCons = each as Cons;\n if (Cons.isNotSymbol(theCons.car)) {\n throw new EvalError(notSymbol(theCons.car));\n }\n const key = theCons.car as InterpretedSymbol;\n if (Cons.isNotNil(theCons.nth(3))) {\n const value = Evaluator.eval(\n theCons.nth(3),\n this.environment,\n this.streamManager,\n this.depth,\n );\n this.environment.set(key, value);\n }\n }\n }\n return Evaluator.eval(bool.nth(2), this.environment, this.streamManager, this.depth);\n }\n\n entrustApplier(form: Cons): LispValue {\n const aCons = form.cdr as Cons;\n let args: Cons = new Cons(Cons.nil, Cons.nil);\n const procedure = form.car;\n let aSymbol: InterpretedSymbol | null = null;\n\n if (Cons.isSymbol(procedure)) {\n aSymbol = procedure;\n }\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), form.toString());\n this.setDepth(this.depth + 1);\n }\n\n for (const each of aCons.loop()) {\n if (each instanceof Table) {\n break;\n }\n args.add(Evaluator.eval(each, this.environment, this.streamManager, this.depth));\n }\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n }\n\n args = args.cdr as Cons;\n return Applier.apply(procedure, args, this.environment, this.streamManager, this.depth);\n }\n\n static eval(\n form: LispValue,\n environment: Table,\n aStreamManager: StreamManager = new StreamManager(),\n depth: number = 1,\n ): LispValue {\n return new Evaluator(environment, aStreamManager, depth).eval(form);\n }\n\n eval(form: LispValue): LispValue {\n if (Cons.isSymbol(form)) {\n return this.evaluateSymbol(form);\n }\n if (Cons.isNil(form) || Cons.isNotList(form)) {\n return form;\n }\n const formCons = form as Cons;\n if (Cons.isSymbol(formCons.car) && Evaluator.buildInFunctions.has(formCons.car)) {\n return this.specialForm(formCons);\n }\n\n return this.entrustApplier(formCons);\n }\n\n eval_lisp(aCons: Cons): LispValue {\n return Evaluator.eval(\n Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth),\n this.environment,\n this.streamManager,\n this.depth,\n );\n }\n\n evaluateSymbol(aSymbol: InterpretedSymbol): LispValue {\n if (!this.environment.has(aSymbol)) {\n throw new EvalError(noBinding(aSymbol));\n }\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), aSymbol.toString());\n this.setDepth(this.depth + 1);\n }\n\n let answer: LispValue = this.environment.get(aSymbol);\n if (answer instanceof Cons && answer.cdr instanceof Table) {\n answer = answer.car;\n }\n\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(aSymbol),\n String(answer) + ' <== ' + String(aSymbol),\n );\n }\n\n return answer;\n }\n\n exit(): never {\n console.log('Bye!');\n throw new ExitError();\n }\n\n gc(): Cons {\n triggerGc();\n const usage = process.memoryUsage();\n // Returns an association list so callers can do (assoc 'heap-used (gc)).\n const pair = (key: string, value: number): Cons => new Cons(InterpretedSymbol.of(key), value);\n const entries: Cons[] = [\n pair('rss', usage.rss),\n pair('heap-total', usage.heapTotal),\n pair('heap-used', usage.heapUsed),\n ];\n let result: Cons = Cons.nil;\n for (const entry of entries) {\n result = new Cons(entry, result);\n }\n return result;\n }\n\n if_(aCons: Cons): LispValue {\n const bool = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const anObject: LispValue = Cons.isNil(bool) ? aCons.nth(3) : aCons.nth(2);\n\n return Evaluator.eval(anObject, this.environment, this.streamManager, this.depth);\n }\n\n indent(): string {\n let index = 0;\n let aString = '';\n while (index++ < this.depth) {\n aString += '| ';\n }\n\n return aString;\n }\n\n isSpy(aSymbol: InterpretedSymbol | null): boolean {\n if (aSymbol == null) {\n return false;\n }\n return this.streamManager.isSpy(aSymbol);\n }\n\n lambda(args: Cons): LispValue {\n const aCons = Cons.cloneValue(args) as Cons;\n const theCons = aCons.cdr as Cons;\n theCons.setCdr(new Cons(this.environment, Cons.nil));\n\n return new Cons(InterpretedSymbol.of('lambda'), aCons);\n }\n\n let(aCons: Cons): LispValue {\n const aTable = new Table(this.environment);\n const parameters = aCons.car as Cons;\n const forms = aCons.cdr as Cons;\n let anObject: LispValue = Cons.nil;\n this.bindingParallel(parameters, aTable);\n for (const each of forms.loop()) {\n anObject = Evaluator.eval(each, aTable, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n letStar(aCons: Cons): LispValue {\n const aTable = new Table(this.environment);\n const parameters = aCons.car as Cons;\n const forms = aCons.cdr as Cons;\n let anObject: LispValue = Cons.nil;\n this.binding(parameters, aTable);\n for (const each of forms.loop()) {\n anObject = Evaluator.eval(each, aTable, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n not(aCons: Cons): LispValue {\n if (Cons.isNil(Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth))) {\n return InterpretedSymbol.of('t');\n }\n return Cons.nil;\n }\n\n notrace(): InterpretedSymbol {\n this.streamManager.noTrace();\n return InterpretedSymbol.of('t');\n }\n\n or(aCons: Cons): LispValue {\n for (const each of aCons.loop()) {\n const anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n if (Cons.isNotNil(anObject)) {\n return InterpretedSymbol.of('t');\n }\n }\n\n return Cons.nil;\n }\n\n pop_(aCons: Cons): LispValue {\n if (Cons.isNotSymbol(aCons.car)) {\n throw new EvalError(argumentNotSymbol(1));\n }\n const aSymbol = aCons.car as InterpretedSymbol;\n const anObject = Evaluator.eval(aSymbol, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n return Cons.nil;\n }\n const consObject = anObject as Cons;\n this.environment.setIfExist(aSymbol, consObject.cdr);\n\n return consObject.car;\n }\n\n progn(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n for (const each of aCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n princ(aCons: Cons): LispValue {\n const anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n process.stdout.write(String(anObject));\n\n return anObject;\n }\n\n print(aCons: Cons): LispValue {\n const anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n process.stdout.write(String(anObject) + '\\n');\n\n return anObject;\n }\n\n push_(aCons: Cons): LispValue {\n let anObject = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotSymbol(aCons.nth(2))) {\n throw new EvalError(argumentNotSymbol(2));\n }\n const aSymbol = aCons.nth(2) as InterpretedSymbol;\n anObject = new Cons(\n anObject,\n Evaluator.eval(aSymbol, this.environment, this.streamManager, this.depth),\n );\n this.environment.setIfExist(aSymbol, anObject);\n\n return anObject;\n }\n\n quote(aCons: Cons): LispValue {\n return aCons.car;\n }\n\n rplaca(args: Cons): LispValue {\n let anObject = Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n throw new EvalError(cannotApply('set-car!', anObject));\n }\n const aCons = anObject as Cons;\n anObject = Evaluator.eval(args.nth(2), this.environment, this.streamManager, this.depth);\n aCons.setCar(anObject);\n\n return Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n }\n\n rplacd(args: Cons): LispValue {\n let anObject = Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotCons(anObject)) {\n throw new EvalError(cannotApply('set-cdr!', anObject));\n }\n const aCons = anObject as Cons;\n anObject = Evaluator.eval(args.nth(2), this.environment, this.streamManager, this.depth);\n aCons.setCdr(anObject);\n\n return Evaluator.eval(args.car, this.environment, this.streamManager, this.depth);\n }\n\n setq(args: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const anIterator = args.loop();\n const index = -1;\n\n while (anIterator.hasNext()) {\n if (!Cons.isSymbol(args.nth(index + 2))) {\n throw new EvalError(notSymbol(args.car));\n }\n const key = anIterator.next() as InterpretedSymbol;\n\n if (!anIterator.hasNext()) {\n throw new EvalError(SIZES_DO_NOT_MATCH);\n }\n anObject = Evaluator.eval(\n anIterator.next(),\n this.environment,\n this.streamManager,\n this.depth,\n );\n this.environment.set(key, anObject);\n }\n\n return anObject;\n }\n\n set_allq(args: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const anIterator = args.loop();\n const index = -1;\n\n while (anIterator.hasNext()) {\n if (!Cons.isSymbol(args.nth(index + 2))) {\n throw new EvalError(notSymbol(args.car));\n }\n const key = anIterator.next() as InterpretedSymbol;\n anObject = Evaluator.eval(\n anIterator.next(),\n this.environment,\n this.streamManager,\n this.depth,\n );\n this.environment.setIfExist(key, anObject);\n }\n\n return anObject;\n }\n\n setDepth(aNumber: number): null {\n this.depth = aNumber;\n return null;\n }\n\n static setup(): Map<InterpretedSymbol, string> {\n try {\n const entries: Array<[string, string]> = [\n ['and', 'and'],\n ['apply', 'apply_lisp'],\n ['bind', 'bind'],\n ['cond', 'cond'],\n ['defun', 'defun'],\n ['do', 'do_'],\n ['dolist', 'doList'],\n ['do*', 'doStar'],\n ['eval', 'eval_lisp'],\n ['exit', 'exit'],\n ['gc', 'gc'],\n ['if', 'if_'],\n ['lambda', 'lambda'],\n ['let', 'let'],\n ['let*', 'letStar'],\n ['not', 'not'],\n ['notrace', 'notrace'],\n ['or', 'or'],\n ['pop', 'pop_'],\n ['progn', 'progn'],\n ['princ', 'princ'],\n ['print', 'print'],\n ['push', 'push_'],\n ['quote', 'quote'],\n ['rplaca', 'rplaca'],\n ['rplacd', 'rplacd'],\n ['setq', 'setq'],\n ['set-allq', 'set_allq'],\n ['terpri', 'terpri'],\n ['time', 'time'],\n ['trace', 'trace'],\n ['unless', 'unless'],\n ['when', 'when'],\n ];\n return new Map(entries.map(([key, value]) => [InterpretedSymbol.of(key), value]));\n } catch {\n throw new Error('NullPointerException (Evaluator, initialize)');\n }\n }\n\n specialForm(form: Cons): LispValue {\n const aSymbol = form.car as InterpretedSymbol;\n\n if (this.isSpy(aSymbol)) {\n this.spyPrint(this.streamManager.spyStream(aSymbol), form.toString());\n this.setDepth(this.depth + 1);\n }\n\n const aCons = form.cdr as Cons;\n const methodName = Evaluator.buildInFunctions.get(aSymbol) as string;\n\n const target = this as unknown as Record<string, unknown>;\n const fn = target[methodName];\n if (typeof fn !== 'function') {\n throw new TypeError(`${this.constructor.name} does not have a method named \"${methodName}\"`);\n }\n const answer = (fn as (a: Cons) => LispValue).apply(target, [aCons]);\n\n if (this.isSpy(aSymbol)) {\n this.setDepth(this.depth - 1);\n this.spyPrint(\n this.streamManager.spyStream(aSymbol),\n String(answer) + ' <== ' + String(aSymbol),\n );\n }\n\n return answer;\n }\n\n spyPrint(aStream: NodeJS.WritableStream | string | null, line: string): null {\n const target: NodeJS.WritableStream =\n aStream != null && typeof aStream === 'object' && 'write' in aStream\n ? aStream\n : process.stdout;\n target.write(this.indent() + line + '\\n');\n return null;\n }\n\n terpri(): InterpretedSymbol {\n process.stdout.write('\\n');\n return InterpretedSymbol.of('t');\n }\n\n time(aCons: Cons): number {\n const start = process.hrtime();\n Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n const end = process.hrtime(start);\n\n return end[1] / 1_000_000;\n }\n\n trace(): InterpretedSymbol {\n this.streamManager.trace();\n return InterpretedSymbol.of('t');\n }\n\n unless(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const theCons = aCons.cdr as Cons;\n const flag = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNotNil(flag)) {\n return Cons.nil;\n }\n for (const each of theCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n\n when(aCons: Cons): LispValue {\n let anObject: LispValue = Cons.nil;\n const theCons = aCons.cdr as Cons;\n const flag = Evaluator.eval(aCons.car, this.environment, this.streamManager, this.depth);\n if (Cons.isNil(flag)) {\n return Cons.nil;\n }\n for (const each of theCons.loop()) {\n anObject = Evaluator.eval(each, this.environment, this.streamManager, this.depth);\n }\n\n return anObject;\n }\n}\n","import { Cons } from '../../value/Cons/index.js';\nimport { Evaluator } from '../../runtime/Evaluator/index.js';\nimport { InterpretedSymbol } from '../../value/InterpretedSymbol/index.js';\nimport { StreamManager } from '../../runtime/StreamManager/index.js';\nimport { Table } from '../../runtime/Table/index.js';\nimport type { LispValue } from '../../types/index.js';\n\n/**\n * @class\n * @classdesc Class for the interpreter.\n * @author Keisuke Ikeda\n * @this {LispInterpreter}\n */\nexport class LispInterpreter {\n root: Table;\n streamManager: StreamManager;\n\n constructor() {\n this.root = this.initializeTable();\n this.streamManager = new StreamManager();\n }\n\n /**\n * Evaluates the given expression and returns the result. Throws `ParseError`,\n * `EvalError`, or `ExitError` on failure; library users are expected to catch\n * these (see the `KeiLispError` base class for the parse/eval family).\n */\n eval(aCons: LispValue): LispValue {\n return Evaluator.eval(aCons, this.root, this.streamManager);\n }\n\n /**\n * Parses the source string, evaluates every expression it contains, and returns the results as an array.\n */\n evalAll(source: string): LispValue[] {\n const ast = this.parse(source);\n const results: LispValue[] = [];\n for (const expr of ast.loop()) {\n results.push(this.eval(expr));\n }\n return results;\n }\n\n /**\n * Parses and evaluates the source string and returns the value of the last expression.\n */\n evalString(source: string): LispValue {\n const results = this.evalAll(source);\n return results.length === 0 ? Cons.nil : (results.at(-1) ?? Cons.nil);\n }\n\n /**\n * Parses the given string into a list of top-level expressions and returns\n * it. The result is always a `Cons` (possibly `Cons.nil` for empty input)\n * because the source is wrapped in an outer list before parsing. Throws\n * `ParseError` if the source cannot be parsed.\n */\n parse(aString: string): Cons {\n return Cons.parse('(' + aString + '\\n);') as Cons;\n }\n\n /**\n * Sets the given environment as the root of the environment chain.\n */\n setRoot(environment: Table): null {\n if (environment instanceof Table) {\n environment.setRoot(true);\n this.root = environment;\n }\n\n return null;\n }\n\n /**\n * Initializes the environment table.\n */\n initializeTable(): Table {\n const aList: string[] = [];\n const aTable = new Table();\n aTable.setRoot(true);\n\n aList.push(\n 'abs',\n 'add',\n 'and',\n 'apply',\n 'assoc',\n 'atom',\n 'bind',\n 'car',\n 'cdr',\n 'characterp',\n 'cond',\n 'cons',\n 'consp',\n 'copy',\n 'cos',\n 'floatp',\n 'defun',\n 'divide',\n 'do',\n 'do*',\n 'dolist',\n 'doublep',\n 'eq',\n 'equal',\n 'exit',\n 'exp',\n 'gc',\n 'gensym',\n 'if',\n 'integerp',\n 'lambda',\n 'let',\n 'let*',\n 'last',\n 'list',\n 'listp',\n 'mapcar',\n 'member',\n 'memq',\n 'mod',\n 'multiply',\n 'napier',\n 'neq',\n 'nequal',\n 'not',\n 'notrace',\n 'nth',\n 'null',\n 'numberp',\n 'or',\n 'pi',\n 'pop',\n 'progn',\n 'printc',\n 'print',\n 'push',\n 'quote',\n 'random',\n 'reload',\n 'round',\n 'rplaca',\n 'rplacd',\n 'setq',\n 'set-allq',\n 'sin',\n 'sqrt',\n 'subtract',\n 'stringp',\n 'symbolp',\n 'tan',\n 'terpri',\n 'time',\n 'trace',\n 'unless',\n 'when',\n '+',\n '-',\n '*',\n '/',\n '//',\n '=',\n '==',\n '~=',\n '~~',\n '<',\n '<=',\n '>',\n '>=',\n );\n\n for (const each of aList) {\n const aSymbol = InterpretedSymbol.of(each);\n aTable.set(aSymbol, aSymbol);\n }\n\n let aString: string;\n let aCons: Cons;\n aString =\n '(lambda (list1 list2) (cond ((null (listp list1)) nil) ((null (listp list2)) nil) ((null list1) list2) (t (cons (car list1) (append (cdr list1) list2)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('append'), aCons);\n\n aString =\n '(lambda (l n) (cond ((<= (length l) n) nil) (t (cons (car l) (butlast (cdr l) n)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('butlast'), aCons);\n\n aString = '(lambda (l) (cond ((null (listp l)) nil) ((null l) 0) (t (+ 1 (length (cdr l))))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('length'), aCons);\n\n aString =\n '(lambda (n l) (cond ((> n (length l)) nil) ((= 0 n) l) (t (nthcdr (- n 1) (cdr l)))))';\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('nthcdr'), aCons);\n\n aString =\n \"(lambda (l) (cond ((null (listp l)) l) ((null l) '()) (t (append (reverse (cdr l)) (list (car l))))))\";\n aCons = Cons.parse(aString) as Cons;\n aCons.last().setCdr(new Cons(aTable, Cons.nil));\n aTable.set(InterpretedSymbol.of('reverse'), aCons);\n\n aTable.set(InterpretedSymbol.of('t'), InterpretedSymbol.of('t'));\n\n return aTable;\n }\n}\n","import { createRequire } from 'node:module';\nimport type { Interface as ReadlineInterface } from 'node:readline';\n\nimport { Cons } from '../../value/Cons/index.js';\nimport { ExitError } from '../../errors/ExitError/index.js';\nimport { KeiLispError } from '../../errors/KeiLispError/index.js';\nimport { LispInterpreter } from '../LispInterpreter/index.js';\n\nconst require = createRequire(import.meta.url);\n\n/**\n * @class\n * @classdesc Interactive REPL wrapper around LispInterpreter. Handles line accumulation, parenthesis balancing, and prompt I/O.\n * @author Keisuke Ikeda\n * @this {Repl}\n */\nexport class Repl {\n interpreter: LispInterpreter;\n rl: ReadlineInterface;\n\n constructor(interpreter: LispInterpreter = new LispInterpreter()) {\n this.interpreter = interpreter;\n\n const readline = require('node:readline') as typeof import('node:readline');\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: '>> ',\n });\n }\n\n /**\n * Starts the REPL loop.\n */\n run(): void {\n let aString = '';\n let leftParentheses = 0;\n let exitedViaLisp = false;\n\n this.rl.prompt();\n this.rl\n .on('line', (line: string) => {\n line += ' ';\n\n for (const aCharacter of line) {\n if (aCharacter === '(') {\n leftParentheses++;\n }\n if (aCharacter === ')') {\n leftParentheses--;\n }\n aString += aCharacter;\n }\n\n if (leftParentheses <= 0) {\n try {\n const aCons = this.interpreter.parse(aString);\n for (const each of aCons.loop()) {\n process.stdout.write(\n (this.interpreter.eval(each) as { toString(): string }).toString() + '\\n',\n );\n }\n } catch (error) {\n if (error instanceof ExitError) {\n exitedViaLisp = true;\n this.rl.close();\n return;\n }\n if (error instanceof KeiLispError) {\n console.error(`*** ${error.name}: ${error.message} ***`);\n process.stdout.write(Cons.nil.toString() + '\\n');\n } else {\n throw error;\n }\n }\n leftParentheses = 0;\n aString = '';\n this.rl.prompt();\n }\n })\n .on('close', () => {\n // Skip the message if (exit) was called, since Evaluator.exit() already printed \"Bye!\".\n if (!exitedViaLisp) {\n console.log('\\nBye!');\n }\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAa,QAAb,MAAa,cAAc,IAAwB;CACjD;CACA;;;;;CAMA,YAAY,SAAuB,MAAM;EACvC,MAAM;EACN,KAAK,SAAS;EACd,KAAK,OAAO,UAAU;CACxB;;;;CAKA,QAAe;EACb,MAAM,SAAS,IAAI,MAAM,IAAI;EAC7B,KAAK,MAAM,OAAO,KAAK,KAAK,GAAG;GAC7B,MAAM,QAAQ,KAAK,WAAW,KAAK,IAAI,GAAG,CAAC;GAC3C,IAAI,SAAS,MACX,MAAM,IAAI,MAAM,mBAAmB;GAErC,OAAO,IAAI,KAAK,KAAK;EACvB;EAEA,OAAO;CACT;;;;CAKA,IAAa,SAA2B;EACtC,IAAI,MAAM,IAAI,OAAO,GACnB,OAAO;EAET,IAAI,KAAK,OAAO,GACd,OAAO;EAIT,OAAQ,KAAK,OAAiB,IAAI,OAAO;CAC3C;;;;CAKA,OAAO,UAA4B;EAGjC,OAAQ,IAAI,UAAyD,OAAO,QAAQ;CACtF;;;;CAKA,IAAa,SAA6B;EACxC,IAAI,MAAM,IAAI,OAAO,GACnB,OAAO,MAAM,IAAI,OAAO;EAE1B,IAAI,KAAK,OAAO,GACd,OAAO;EAIT,OAAQ,KAAK,OAAiB,IAAI,OAAO;CAC3C;;;;CAKA,SAAkB;EAChB,OAAO,KAAK;CACd;;;;;CAMA,WAAW,SAAkB,UAAgC;EAC3D,IAAI,MAAM,IAAI,OAAO,GAAG;GACtB,KAAK,IAAI,SAAS,QAAQ;GAC1B,OAAO;EACT;EACA,IAAI,KAAK,OAAO,GACd,OAAO;EAET,OAAQ,KAAK,OAAiB,WAAW,SAAS,QAAQ;CAC5D;;;;CAKA,QAAQ,UAAyB;EAC/B,KAAK,OAAO;EACZ,OAAO;CACT;;;;CAKA,UAAU,QAA4B;EACpC,KAAK,SAAS;EACd,OAAO;CACT;;;;CAKA,WAA4B;EAC1B,OAAO;CACT;AACF;;;;;;;;;AClHA,IAAa,oBAAb,MAAa,kBAAkB;;;;CAI7B,OAAOA,UAAwB;CAC/B,WAAW,QAAe;EACxB,KAAKA,YAAY,IAAI,MAAM;EAC3B,OAAO,KAAKA;CACd;CAEA;;;;;CAMA,YAAY,OAAe,QAAQ;EACjC,KAAK,OAAO;CACd;;;;;;CAOA,UAAU,SAAoC;EAC5C,MAAM,OAAO,KAAK,KAAK,YAAY,CAAC,KAAK;EACzC,MAAM,QAAQ,QAAQ,KAAK,YAAY,CAAC,KAAK;EAC7C,IAAI,UAAU,OAAO,QAAQ,QAAQ,KAAK,SAAS,OAAO,OAAO,QAAQ,KAAK;EAC9E,UAAU,SAAS,QAAQ,IAAI;EAE/B,OAAO;CACT;;;;CAKA,OAAO,UAA4B;EACjC,OAAO,SAAS;CAClB;;;;;CAMA,OAAO,GAAG,SAAoC;EAC5C,IAAI,UAAU,KAAK,MAAM,IAAI,OAAO;EAEpC,IAAI,WAAW,MAAM;GACnB,UAAU,IAAI,kBAAkB,OAAO;GACvC,KAAK,MAAM,IAAI,SAAS,OAAO;EACjC;EAEA,OAAO;CACT;;;;CAKA,WAAmB;EACjB,OAAO,KAAK;CACd;AACF;;;;;;;;;AC7DA,IAAa,OAAb,MAAkB;CAChB;CACA;CACA;;;;;CAMA,YAAY,OAAa;EACvB,KAAK,QAAQ;EACb,KAAK,SAAS,MAAM,OAAO;EAC3B,KAAK,QAAQ;CACf;;;;CAKA,WAAiB;EACf,OAAO;CACT;;;;CAKA,UAAmB;EACjB,OAAO,KAAK,SAAS,KAAK;CAC5B;;;;CAKA,OAAkB;EAChB,MAAM,WAAW,KAAK,MAAM,IAAI,KAAK,KAAK;EAC1C,KAAK,OAAO;EAEZ,OAAO;CACT;;;;;CAMA,CAAC,OAAO,YAAiC;EACvC,OAAO,EACL,YAAuC;GACrC,IAAI,KAAK,SAAS,KAAK,QAAQ;IAC7B,MAAM,YAAY,KAAK,MAAM,IAAI,KAAK,KAAK;IAC3C,KAAK,OAAO;IACZ,OAAO;KAAE,OAAO;KAAW,MAAM;IAAM;GACzC;GACA,OAAO,EAAE,MAAM,KAAK;EACtB,EACF;CACF;;;;;CAMA,CAAC,OAAO,iBAA2C;EACjD,OAAO,EACL,YAAgD;GAC9C,IAAI,KAAK,SAAS,KAAK,QAAQ;IAC7B,MAAM,YAAY,KAAK,MAAM,IAAI,KAAK,KAAK;IAC3C,KAAK,OAAO;IACZ,OAAO,QAAQ,QAAQ;KAAE,OAAO;KAAW,MAAM;IAAM,CAAC;GAC1D;GACA,OAAO,QAAQ,QAAQ,EAAE,MAAM,KAAK,CAA8B;EACpE,EACF;CACF;;;;CAKA,SAAe;EACb,KAAK;EACL,OAAO;CACT;AACF;;;;;;;;;ACnFA,IAAa,YAAb,MAAuB;;;;CAIrB,OAAO,MAAM,OAAe,UAA4B;EACtD,MAAM,MAAM,WAAW;EACvB,OAAO,KAAK,YAAY,OAAO,GAAG;CACpC;;;;CAKA,OAAO,YAAY,OAAe,KAAuB;EACvD,MAAM,QAAQ,MAAM,QAAQ;EAC5B,OAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,SAAS,OAAO;CACpD;AACF;;;;;;;;;AChBA,IAAa,eAAb,cAAkC,MAAM;;;;;;CAMtC,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;;;;;;;;;ACRA,IAAa,aAAb,cAAgC,aAAa;;;;;;CAM3C,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;;;;;;;;;ACTA,IAAa,YAAb,MAAuB;CACrB,YAA2B;CAC3B;CACA;CACA;;;;CAKA,YAAY,SAAwB,SAAwB;EAC1D,KAAK,YAAY;EACjB,KAAK,SAAS;EACd,KAAK,aAAa;CACpB;;;;CAKA,KAAK,aAA6B;EAChC,KAAK,YAAY;EACjB,IAAI,KAAK,cAAc,MACrB,OAAO,OAAO,KAAK,SAAS;EAE9B,IAAI,KAAK,UAAU,MACjB,IAAI;GACF,KAAK,SAAU,KAAK,UAAiD,KAAK;EAC5E,QAAQ;GACN,MAAM,IAAI,WAAW,uBAAuB,KAAK,UAAU;EAC7D;EAGF,IAAI,UAAU;EACd,IAAI;GACF,IAAI,KAAK,aAAa,MACpB,UAAU,KAAK;GAEjB,MAAM,WAAY,KAAK,UACrB,KAAK,YACL;GACF,IAAI,YAAY,MACd,UAAU,OAAO,QAAQ;EAE7B,SAAS,OAAO;GAGd,IAAI,iBAAiB,YAAY,MAAM;GACvC,MAAM,IAAI,WAAW,sBAAsB,KAAK,YAAY;EAC9D;EAEA,OAAO;CACT;AACF;;;ACrDA,MAAM,YAAY;AAClB,MAAM,eAAe;;;;;;;AAQrB,IAAa,SAAb,MAAa,OAAO;CAClB;CACA;CACA;CACA;CACA;CACA;;;;;CAMA,YAAY,SAAiB;EAC3B,KAAK,SAAS,QAAQ,OAAO,UAAU;EACvC,KAAK,QAAQ;EACb,KAAK,cAAc;EACnB,KAAK,yBAAS,IAAI,IAAI;EACtB,KAAK,QAAQ;EACb,KAAK,QAAQ,MAAM,KAAK,EAAE,QAAQ,GAAc,SAAwB,IAAI;EAC5E,KAAK,+BAA+B;EACpC,IAAI,QAAQ;EACZ,OAAO,UAAU,WACf,KAAK,SAAS;CAElB;;;;CAKA,QAAiB;EACf,OAAO,KAAK,SAAS,KAAK;CAC5B;;;;CAKA,kBAAwB;EACtB,KAAK,cAAc,KAAK,YAAY,OAAO,OAAO,KAAK,MAAM,EAAE,CAAC;EAChE,OAAO;CACT;;;;CAKA,MAAM,aAA4B,KAAK,SAAS,GAAc;EAE5D,MAAM,SAAS,KAAK,OAAO,IAAI,KAAK,KAAK;EAGzC,MAAM,YAAa,WAAsB,YAAY,CAAC,KAAK;EAC3D,MAAM,UAAU,OAAO,IAAI,OAAO,SAAS,CAAC,IACvC,OAAO,IAAI,OAAO,SAAS,CAAC,EAAgB,KAAK,IAAI,IACrD,OAAO,IAAI,OAAO,GAAG,CAAC,EAAgB,KAAK,IAAI;EAEpD,IAAI,UAAU,GACZ,MAAM,IAAI,WAAW,YAAY;EAEnC,KAAK,QAAQ;EAEb,OAAO,KAAK;CACd;;;;CAKA,WAA0B;EACxB,IAAI,aAA4B;EAChC,IAAI;GACF,MAAM,UAAW,KAAK,OAAO,KAAK,EAAE,OAA8B,YAAY,CAAC,KAAK;GACpF,IAAI,WAAW,GACb,aAAa,OAAO,cAAc,OAAO;EAE7C,QAAQ;GACN,MAAM,IAAI,WAAW,aAAa;EACpC;EAEA,IAAI,QAAQ;EACZ,OAAO,QAAQ,WAAW;GACxB,KAAK,MAAM,SAAS,KAAK,MAAM,QAAQ;GACvC;EACF;EACA,KAAK,MAAM,SAAS;EAEpB,OAAO,KAAK,MAAM;CACpB;;;;CAKA,YAAuB;EACrB,KAAK,QAAQ;EACb,IAAI,QAAmB;EAEvB,OAAO,CAAC,KAAK,MAAM,GAAG;GACpB,IAAI,KAAK,UAAU,KAAK,SAAS,MAC/B;GAEF,QAAQ,KAAK,MAAM;EACrB;EACA,IAAI,KAAK,MAAM,KAAK,KAAK,UAAU,GACjC,MAAM,IAAI,WAAW,YAAY;EAEnC,KAAK,cAAc;EAEnB,OAAO;CACT;;;;CAKA,UAAU,SAAwB,SAAmC;EACnE,OAAO,IAAI,UAAU,SAAS,OAAO;CACvC;;;;CAKA,OAAO,MAAM,SAA4B;EACvC,OAAO,IAAI,OAAO,OAAO,EAAE,UAAU;CACvC;;;;CAKA,SAAS,UAAkB,GAAkB;EAC3C,IAAI,UAAU,KAAK,MAAM,QACvB,MAAM,IAAI,WAAW,aAAa;EAEpC,OAAO,KAAK,MAAM;CACpB;;;;CAKA,SAAe;EACb,KAAK,gBAAgB;EACrB,OAAO;CACT;;;;;;;CAQA,eAAqB;EACnB,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE;EAC9B,MAAM,MAA8B;GAClC,GAAG;GACH,GAAG;GACH,GAAG;GACH,MAAM;GACN,MAAK;EACP;EACA,KAAK,cAAc,KAAK,YAAY,OAAO,IAAI,MAAM,CAAC;EACtD,OAAO;CACT;;;;CAKA,cAAsB;EACpB,KAAK,OAAO;EACZ,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,cAAc;GACnB,OAAO;EACT;EAEA,OAAO;CACT;;;;CAKA,iBAAyB;EACvB,KAAK,OAAO;EACZ,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,cAAc;GACnB,OAAO;EACT;EAEA,OAAO;CACT;;;;CAKA,eAAuB;EACrB,KAAK,OAAO;EACZ,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,eAAe;GACpB,OAAO;EACT;EAEA,OAAO;CACT;;;;CAKA,YAAoB;EAClB,KAAK,eAAe;EACpB,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,SAAS;GACd,KAAK,QAAQ,KAAK;EACpB,OACE,KAAK,QAAQ,KAAK,aAAa;EAGjC,OAAO;CACT;;;;CAKA,eAA0B;EACxB,KAAK,eAAe;EACpB,IAAI,KAAK,SAAS,MAAM,KAAK;GAC3B,OAAO,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,KAAK,MACpD,KAAK,SAAS;GAEhB,KAAK,SAAS;GACd,KAAK,eAAe;EACtB;EACA,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,SAAS;GACd,OAAO,KAAK;EACd,OAAO,IAAI,KAAK,SAAS,MAAM,KAAK;GAClC,KAAK,SAAS;GACd,KAAK,QAAQ;GACb,MAAM,MAAM,KAAK,UAAU;GAC3B,KAAK,eAAe;GACpB,IAAI,CAAC,KAAK,WAAW,GACnB,MAAM,IAAI,WAAW,YAAY;GAEnC,KAAK,SAAS;GAEd,OAAO;EACT,OAAO;GACL,KAAK,QAAQ;GACb,OAAO,IAAI,KAAK,KAAK,UAAU,GAAG,KAAK,aAAa,CAAC;EACvD;CACF;;;;CAKA,QAAgB;EACd,MAAM,WAAW,IAAI,KAAK,KAAK,UAAU,GAAG,KAAK,GAAG;EACpD,KAAK,QAAQ,IAAI,KAAK,kBAAkB,GAAG,OAAO,GAAG,QAAQ;EAE7D,OAAO;CACT;;;;CAKA,cAAsB;EACpB,IAAI,UAAU,KAAK,SAAS,MAAM,OAAO,IAAI;EAC7C,UAAU,KAAK,SAAS,OAAO,MAAM,MAAM,KAAK,KAAK,MAAM;EAE3D,OAAO;CACT;;;;CAKA,aAAsB;EACpB,OAAO,KAAK,SAAS,MAAM,OAAO,KAAK,SAAS,MAAM,OAAO,KAAK,SAAS,MAAM;CACnF;;;;CAKA,OAAe;EACb,KAAK,OAAO;EACZ,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,cAAc;GACnB,OAAO;EACT;EACA,OAAO;CACT;;;;CAKA,iBAAuB;EACrB,OACE,KAAK,MAAM,OAAO,OAAO,cAAc,CAAC,KACxC,KAAK,MAAM,OAAO,OAAO,cAAc,EAAE,KACzC,KAAK,MAAM,OAAO,OAAO,cAAc,EAAE,KACzC,KAAK,MAAM,OAAO,OAAO,cAAc,EAAE,KACzC,KAAK,MAAM,OAAO,OAAO,cAAc,EAAE,KACzC,KAAK,MAAM,OAAO,OAAO,cAAc,EAAE,GAEzC,KAAK,SAAS;EAGhB,OAAO;CACT;;;;CAKA,cAAsB;EACpB,KAAK,OAAO;EACZ,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,cAAc;GACnB,OAAO;EACT;EAEA,OAAO;CACT;;;;CAKA,mBAAyB;EACvB,KAAK,QAAQ,KAAK,YAAY,OAAO,CAAC;EACtC,OAAO;CACT;;;;CAKA,gBAAsB;EACpB,KAAK,QAAQ,OAAO,KAAK,WAAW;EACpC,OAAO;CACT;;;;CAKA,mBAAyB;EACvB,KAAK,OAAO;EACZ,KAAK,QAAQ,OAAO,KAAK,WAAW;EACpC,OAAO;CACT;;;;CAKA,iBAAuB;EAErB,IADmB,KAAK,YAAY,OACjB,KACjB,KAAK,cAAc,KAAK,YAAY,MAAM,CAAC;EAE7C,KAAK,QAAQ,OAAO,KAAK,WAAW;EACpC,OAAO;CACT;;;;CAKA,gBAAsB;EACpB,KAAK,QAAQ,KAAK;EAClB,OAAO;CACT;;;;CAKA,gBAAsB;EACpB,KAAK,QAAQ,kBAAkB,GAAG,KAAK,WAAW;EAClD,IAAI,KAAK,UAAU,kBAAkB,GAAG,KAAK,GAC3C,KAAK,QAAQ,KAAK;EAEpB,OAAO;CACT;;;;CAKA,iCAAuC;EACrC,IAAI,yBAAS,IAAI,IAAuB;EACxC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,CAAC,GAC5C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EACnD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC9C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC9C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,WAAW,CAAC;EACtD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,MAAM,CAAC;EAChD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,MAAM,CAAC;EAChD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,cAAc,CAAC;EAC7D,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC9C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,WAAW,CAAC;EACtD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,OAAO,CAAC;EACjD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,GAAG,GAC/C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,WAAW,CAAC;EACvD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,CAAC,GAC5C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC9C,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC9C,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC;EAC/C,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,gBAAgB,CAAC;EAC/D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,gBAAgB,CAAC;EAC1D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,cAAc,CAAC;EAC7D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EAClD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EACnD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EAC9D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EACzD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,kBAAkB,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EAClD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,kBAAkB,CAAC;EAC7D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EACnD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EAClD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EAClD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,gBAAgB,CAAC;EAC/D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EAC9D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EACzD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,gBAAgB,CAAC;EAC/D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,gBAAgB,CAAC;EAC/D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EAC9D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EACzD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,cAAc,CAAC;EAC7D,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,GAAG,GAC/C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EAC9D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EACzD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACvD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,GAAG,GAC/C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EAC5D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,aAAa,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,eAAe,CAAC;EACzD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,QAAQ,CAAC;EACnD,KAAK,OAAO,IAAI,GAAG,MAAM;EAEzB,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,GAAG,EAAE,GAC7C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EACpD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,GAAG,cAAc,CAAC;EACzD,KAAK,OAAO,IAAI,IAAI,MAAM;EAE1B,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,QAAQ,CAAC;EACxD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,QAAQ,CAAC;EACxD,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAC/C,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,GAAG,GAC/C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,QAAQ,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,IAAI,MAAM;EAE1B,yBAAS,IAAI,IAAuB;EACpC,OAAO,IAAI,OAAO,EAAE,GAAG,KAAK,UAAU,GAAG,kBAAkB,CAAC;EAC5D,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,IAAI,MAAM;EAE1B,yBAAS,IAAI,IAAuB;EACpC,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,EAAE,GAC9C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,QAAQ,CAAC;EACxD,KAAK,MAAM,SAAS,UAAU,YAAY,IAAI,GAAG,GAC/C,OAAO,IAAI,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,QAAQ,CAAC;EACxD,OAAO,IAAI,OAAO,GAAG,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC;EAChD,KAAK,OAAO,IAAI,IAAI,MAAM;EAE1B,OAAO;CACT;AACF;;;;;;;;;ACzjBA,IAAa,OAAb,MAAa,KAAK;CAChB,OAAgB,MAAY,IAAI,KAAK;CAErC;CACA;;;;;;;CAQA,YAAY,MAAiB,KAAK,KAAK,MAAiB,KAAK,KAAK;EAChE,KAAK,MAAM;EACX,KAAK,MAAM;CACb;;;;;;CAOA,IAAI,UAA2B;EAC7B,MAAM,QAAQ,IAAI,KAAK,UAAU,KAAK,GAAG;EACzC,OAAO,KAAK,MAAM,KAAK;CACzB;;;;;CAMA,QAAc;EACZ,OAAO,IAAI,KAAK,KAAK,WAAW,KAAK,GAAG,GAAG,KAAK,WAAW,KAAK,GAAG,CAAC;CACtE;;;;;;CAOA,OAAO,WAAW,OAA6B;EAC7C,IAAI,KAAK,OAAO,KAAK,GACnB,OAAO,MAAM,MAAM;EAErB,IAAI,KAAK,MAAM,KAAK,GAClB,OAAO,KAAK;EAEd,IAAI,KAAK,SAAS,KAAK,GACrB,OAAO;EAET,IAAI,KAAK,SAAS,KAAK,GACrB,OAAO;EAET,IAAI,KAAK,SAAS,KAAK,GACrB,OAAO;EAET,IAAI,KAAK,QAAQ,KAAK,GACpB,OAAO;EAET,OAAO;CACT;;;;;;CAOA,OAAO,UAA8B;EACnC,IAAI,KAAK,OAAO,QAAQ,GACtB,OAAO,KAAK,UAAU,MAAM,QAAQ;EAEtC,OAAO;CACT;;;;;;;CAQA,UAAU,MAAiB,OAA2B;EACpD,IAAI,SAAS,OACX,OAAO;EAET,IAAI,EAAE,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK,IAC1C,OAAO;EAET,IAAI,KAAK,UAAU,KAAK,KAAK,MAAM,GAAG,GACpC,OAAO,KAAK,UAAU,KAAK,KAAK,MAAM,GAAG;EAG3C,OAAO;CACT;;;;CAKA,OAAO,OAAO,UAA8B;EAC1C,OAAO,KAAK,UAAU,QAAQ;CAChC;;;;CAKA,OAAO,OAAO,UAAuC;EACnD,OAAO,aAAa,KAAK,OAAO,oBAAoB;CACtD;;;;CAKA,OAAO,OAAO,UAA8B;EAC1C,OAAO,KAAK,MAAM,QAAQ,KAAK,KAAK,OAAO,QAAQ;CACrD;;;;CAKA,OAAO,MAAM,UAA8B;EACzC,OAAO,aAAa,KAAK;CAC3B;;;;CAKA,OAAO,UAAU,UAA8B;EAC7C,OAAO,CAAC,KAAK,OAAO,QAAQ;CAC9B;;;;CAKA,OAAO,UAAU,UAA8B;EAC7C,OAAO,CAAC,KAAK,OAAO,QAAQ;CAC9B;;;;CAKA,OAAO,SAAS,UAA8B;EAC5C,OAAO,CAAC,KAAK,MAAM,QAAQ;CAC7B;;;;CAKA,OAAO,YAAY,UAA8B;EAC/C,OAAO,CAAC,KAAK,SAAS,QAAQ;CAChC;;;;CAKA,OAAO,SAAS,UAAyC;EACvD,OAAO,OAAO,aAAa;CAC7B;;;;CAKA,OAAO,SAAS,UAAyC;EACvD,OAAO,OAAO,aAAa;CAC7B;;;;CAKA,OAAO,SAAS,UAAoD;EAClE,OAAO,oBAAoB;CAC7B;;;;CAKA,OAAO,QAAQ,UAAwC;EACrD,OAAO,oBAAoB;CAC7B;;;;;CAMA,OAAa;EACX,IAAI,UAAgB,IAAI,KAAK,KAAK,KAAK,IAAI;EAC3C,IAAI,QAAc;EAElB,OAAO,KAAK,OAAO,KAAK,GAAG;GACzB,IAAI,CAAC,KAAK,OAAO,MAAM,GAAG,GACxB;GAEF,UAAU,QAAQ;GAClB,QAAQ,MAAM;EAChB;EAEA,OAAO;CACT;;;;;CAMA,OAAa;EACX,OAAO,IAAI,KAAK,IAAI;CACtB;;;;;CAMA,SAAiB;EACf,IAAI,QAAQ;EACZ,IAAI,QAAmB;EAEvB,OAAO,KAAK,OAAO,KAAK,GAAG;GACzB;GACA,QAAQ,MAAM;EAChB;EAEA,OAAO;CACT;;;;;;CAOA,MAAM,OAAmB;EACvB,KAAK,KAAK,EAAE,OAAO,KAAK;EACxB,OAAO;CACT;;;;;;CAOA,IAAI,SAA4B;EAC9B,IAAI,WAAW,GACb,OAAO,KAAK;EAEd,IAAI,QAAQ;EACZ,IAAI,QAAmB;EACvB,OAAO,KAAK,OAAO,KAAK,GAAG;GACzB,IAAI,SAAS,SACX,OAAO,MAAM;GAEf;GACA,QAAQ,MAAM;EAChB;EAEA,OAAO,KAAK;CACd;;;;;CAMA,OAAO,MAAM,SAA4B;EACvC,OAAO,OAAO,MAAM,OAAO;CAC7B;;;;CAKA,OAAO,UAA2B;EAChC,KAAK,MAAM;EACX,OAAO;CACT;;;;CAKA,OAAO,UAA2B;EAChC,KAAK,MAAM;EACX,OAAO;CACT;;;;CAKA,QAAQ,KAAgB,KAAsB;EAC5C,KAAK,MAAM;EACX,KAAK,MAAM;EACX,OAAO;CACT;;;;CAKA,WAAmB;EACjB,IAAI,UAAU;EACd,IAAI,KAAK,MAAM,IAAI,GACjB,WAAW,KAAK,SAAS,KAAK,GAAG;OAC5B;GACL,WAAW,MAAM,KAAK,SAAS,KAAK,GAAG;GAEvC,IAAI,KAAK,MAAM,KAAK,GAAG,GACrB,WAAW;QACN,IAAI,KAAK,eAAe,MAAM;IACnC,IAAI,QAAmB,KAAK;IAC5B,OAAO,KAAK,OAAO,KAAK,GAAG;KACzB,MAAM,OAAO,MAAM;KACnB,IAAI,EAAE,gBAAgB,QACpB,WAAW,MAAM,KAAK,SAAS,IAAI;KAErC,QAAQ,MAAM;IAChB;IACA,WAAW,KAAK,MAAM,KAAK,IAAI,MAAM,QAAQ,KAAK,SAAS,KAAK,IAAI;GACtE,OACE,WAAW,QAAQ,KAAK,SAAS,KAAK,GAAG,IAAI;EAEjD;EAEA,OAAO;CACT;;;;;CAMA,OAAO,SAAS,UAA6B;EAC3C,OAAO,KAAK,MAAM,QAAQ,IAAI,QAAS,SAAoC,SAAS;CACtF;AACF;;;;;;;;;ACvUA,IAAa,YAAb,cAA+B,aAAa;;;;;;CAM1C,YAAY,SAAiB;EAC3B,MAAM,OAAO;EACb,KAAK,OAAO;CACd;AACF;;;;;;;;ACVA,MAAa,eAAe,IAAY,UACtC,kBAAkB,GAAG,QAAQ,OAAO,KAAK,EAAE;;AAG7C,MAAa,aAAa,UAA6B,IAAI,OAAO,KAAK,EAAE;;AAGzE,MAAa,aAAa,WACxB,wCAAwC,OAAO,MAAM;;AAGvD,MAAa,eAAe,cAC1B,6CAA6C,OAAO,SAAS;;AAG/D,MAAa,qBAAqB,aAChC,aAAa,OAAO,QAAQ,EAAE;;AAGhC,MAAa,qBAAqB;;AAGlC,MAAa,oBAAoB;;;AChBjC,MAAM,oCAAoC;;;;;;;;AAS1C,IAAa,UAAb,MAAa,QAAQ;CACnB,OAAgB,mBAAmD,QAAQ,MAAM;CACjF,OAAOC,kBAAkB;CAEzB;CACA;CACA;CAEA,YAAY,QAAe,gBAA+B,SAAiB;EACzE,KAAK,cAAc,IAAI,MAAM,MAAM;EACnC,KAAK,gBAAgB;EACrB,KAAK,QAAQ;CACf;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,IAAI,KAAK,GAAG;EAE1B,MAAM,IAAI,UAAU,YAAY,OAAO,KAAK,GAAG,CAAC;CAGlD;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,GAAG;EAE3C,MAAM,IAAI,UAAU,YAAY,OAAO,KAAK,GAAG,CAAC;CAGlD;CAEA,WAAW,MAAc,MAA4B;EACnD,IAAI,SAAS;EACb,IAAI,QAAmB;EAEvB,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,OAAQ,MAAe;GAC7B,IAAI,KAAK,SAAS,IAAI,GACpB,SAAS,SAAS;QAElB,MAAM,IAAI,UAAU,YAAY,OAAO,IAAI,CAAC;GAG9C,QAAS,MAAe;EAC1B;EAEA,OAAO;CACT;CAEA,OAAO,MACL,WACA,MACA,aACA,gBACA,OACW;EACX,OAAO,IAAI,QAAQ,aAAa,gBAAgB,KAAK,EAAE,MAAM,WAAW,IAAI;CAC9E;CAEA,MAAM,WAAsB,MAA4B;EACtD,IAAI,KAAK,SAAS,SAAS,GACzB,OAAO,KAAK,gBAAgB,WAAW,IAAI;EAE7C,OAAO,KAAK,iBAAiB,WAAW,IAAI;CAC9C;CAEA,MAAM,MAAuB;EAC3B,MAAM,SAAS,KAAK;EAEpB,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC,GAC5B,OAAO,KAAK;EAEd,MAAM,QAAQ,KAAK,IAAI,CAAC;EAExB,KAAK,MAAM,QAAQ,MAAM,KAAK,GAAG;GAC/B,IAAI,KAAK,UAAU,IAAI,GACrB,MAAM,IAAI,UAAU,YAAY,SAAS,IAAI,CAAC;GAEhD,MAAM,WAAW;GACjB,MAAM,MAAM,SAAS;GACrB,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,MAAM,kBAAkB,GAAG,GAAG,GACrF,OAAO;EAEX;EAEA,OAAO,KAAK;CACd;CAEA,MAAM,MAAuB;EAC3B,IAAI,KAAK,OAAO,KAAK,GAAG,GACtB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,QAAQ,WAAsB,MAAuB;EACnD,IAAI,KAAK,MAAM,SAAS,GACtB,OAAO;EAET,IAAI,QAAQ;EACZ,IAAI,UAAU;EAEd,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,IAAI;IACF,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,GAAG;GAC7C,QAAQ;IACN,MAAM,IAAI,UAAU,kBAAkB;GAExC;GAEA,IAAI,KAAK,UAAU,MAAM,GAAG,GAC1B;GAEF,QAAQ,MAAM;GACd,UAAU,QAAQ;EACpB;EAEA,IAAI,KAAK,UAAU,MAAM,GAAG,KAAK,KAAK,SAAS,MAAM,GAAG,GACtD,IAAI;GACF,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,GAAG;EAC7C,QAAQ;GACN,MAAM,IAAI,UAAU,kBAAkB;EAExC;OACK,IAAI,KAAK,SAAS,MAAM,GAAG,GAGhC,MAAM,IAAI,eAAe,sBAAsB;EAGjD,OAAO;CACT;CAEA,gBAAgB,WAA8B,MAA4B;EACxE,IAAI,KAAK,MAAM,SAAS,GAAG;GACzB,KAAK,SAAS,KAAK,cAAc,UAAU,SAAS,GAAG,IAAI,KAAK,WAAW,IAAI,EAAE,SAAS,CAAC;GAC3F,KAAK,SAAS,KAAK,QAAQ,CAAC;EAC9B;EAEA,MAAM,aAAa,QAAQ,iBAAiB,IAAI,SAAS;EAEzD,MAAM,SAAS;EACf,MAAM,KAAK,OAAO;EAClB,IAAI,OAAO,OAAO,YAChB,MAAM,IAAI,UAAU,GAAG,KAAK,YAAY,KAAK,iCAAiC,WAAW,EAAE;EAE7F,MAAM,SAAU,GAAmC,MAAM,QAAQ,CAAC,IAAI,CAAC;EAEvE,IAAI,KAAK,MAAM,SAAS,GAAG;GACzB,KAAK,SAAS,KAAK,QAAQ,CAAC;GAC5B,KAAK,SACH,KAAK,cAAc,UAAU,SAAS,GACtC,OAAO,MAAM,IAAI,UAAU,IAAI,KAAK,WAAW,IAAI,EAAE,SAAS,CAChE;EACF;EAEA,OAAO;CACT;CAEA,IAAI,MAAuB;EACzB,OAAQ,KAAK,IAAa;CAC5B;CAEA,IAAI,MAAuB;EACzB,OAAQ,KAAK,IAAa;CAC5B;CAEA,WAAW,MAAuB;EAChC,IAAI,KAAK,SAAS,KAAK,GAAG,KAAK,KAAK,IAAI,WAAW,GACjD,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,KAAK,MAAuB;EAC1B,OAAO,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC;CACvC;CAEA,MAAM,MAAuB;EAC3B,IAAI,KAAK,OAAO,KAAK,GAAG,GACtB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,KAAK,MAAuB;EAC1B,OAAO,KAAK,WAAW,KAAK,GAAG;CACjC;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,IAAI,KAAK,GAAG;EAG1B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,OAAO,MAAuB;EAC5B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,cAAc,KAAK,KAAK,KAAK,GAAG;EAE9C,MAAM,IAAI,UAAU,YAAY,UAAU,KAAK,GAAG,CAAC;CAGrD;CAEA,cAAc,MAAc,MAA4B;EACtD,IAAI,SAAS;EACb,IAAI,QAAmB;EAEvB,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,OAAQ,MAAe;GAC7B,IAAI,KAAK,SAAS,IAAI,GACpB,SAAS,SAAS;QAElB,MAAM,IAAI,UAAU,YAAY,UAAU,IAAI,CAAC;GAGjD,QAAS,MAAe;EAC1B;EAEA,OAAO;CACT;CAEA,iBAAiB,WAAsB,MAA4B;EACjE,IAAI,WAAsB,KAAK;EAC/B,IAAI,QAAS,UAAmB;EAChC,KAAK,QAAQ,MAAM,KAAK,IAAI;EAC5B,QAAQ,MAAM;EAEd,KAAK,MAAM,QAAQ,MAAM,KAAK,GAAG;GAC/B,IAAI,gBAAgB,OAClB;GAEF,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAClF;EAEA,OAAO;CACT;CAOA,IAAI,MAAuB;EAGzB,IAFc,KAAK,QACJ,KAAK,IAAI,CACL,GACjB,OAAO,kBAAkB,GAAG,GAAG;EAGjC,OAAO,KAAK;CACd;CAEA,OAAO,MAAuB;EAC5B,MAAM,QAAQ,KAAK;EACnB,MAAM,SAAS,KAAK,IAAI,CAAC;EACzB,IAAI,KAAK,IAAI,IAAI,MAAM,kBAAkB,GAAG,GAAG,GAC7C,OAAO,kBAAkB,GAAG,GAAG;EAEjC,IAAI,KAAK,OAAO,KAAK,KAAK,KAAK,OAAO,MAAM,GAAG;GAC7C,IAAI,MAAM,OAAO,MAAM,GACrB,OAAO,kBAAkB,GAAG,GAAG;GAEjC,IAAI,OAAO,OAAO,KAAK,GACrB,OAAO,kBAAkB,GAAG,GAAG;EAEnC;EAEA,OAAO,KAAK;CACd;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,IAAI,KAAK,GAAG;EAG1B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,OAAO,MAAuB;EAC5B,IAAI,CAAC,KAAK,SAAS,KAAK,GAAG,GACzB,MAAM,IAAI,UAAU,YAAY,UAAU,KAAK,GAAG,CAAC;EAErD,MAAM,QAAQ,KAAK;EACnB,MAAM,SAAS,KAAK,WAAW,KAAK,KAAK,KAAK;EAC9C,QAAQ,OAAO,MAAM,OAAO,MAAM,CAAC;EAEnC,OAAO,KAAK;CACd;CAEA,WAAW,QAAgB,OAAsC;EAC/D,IAAI,UAAqB;EACzB,IAAI,QAAQ;EACZ,IAAI,QAAQ;EACZ,IAAI,SAAS;EACb,IAAI,QAAQ;EAEZ,OAAO,QAAQ,OAAO,QAAQ;GAC5B,MAAM,aAAa,OAAO;GAC1B,QAAQ,OAAR;IACE,KAAK;KACH,IAAI,eAAe,KACjB,QAAQ;UAER,UAAU;KAGZ;IAEF,KAAK;KACH,QAAQ,YAAR;MACE,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;OACH,SAAS;OACT,QAAQ;OACR;MAEF,KAAK;OAEH,UAAY,QAAiB,IAA+B,SAAS;OACrE,UAAW,QAAiB;OAC5B,QAAQ;OACR;MAEF,KAAK;OACH,UAAU;OACV,QAAQ;OACR;MAEF,KAAK;OACH,QAAQ;OACR;MAEF;OACE,UAAU;OACV,UAAU;OACV,QAAQ;KAEZ;KAEA;IAEF,KAAK;KACH,QAAQ,YAAR;MACE,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;OACH,SAAS;OACT,QAAQ;OACR;MAEF,KAAK,KAAK;OACR,MAAM,OAAO,OAAO,KAAK;OACzB,QAAQ;OACR,IAAI,KAAK,MAAM,OAAO,GACpB,MAAM,IAAI,UAAU,iBAAiB;OAGvC,IAAI,QAAkB,QAAiB,IAA+B,SAAS;OAC/E,UAAW,QAAiB;OAC5B,OAAO,MAAM,SAAS,MACpB,SAAS;OAEX,UAAU;OACV,QAAQ;OACR;MACF;MACA;OACE,UAAU;OACV,UAAU,QAAQ;OAClB,QAAQ;OACR,QAAQ;KAEZ;KAEA;IAEF,KAAK;KACH,QAAQ,YAAR;MACE,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;OACH,SAAS;OACT,QAAQ;OACR;MAEF,KAAK,KAAK;OACR,MAAM,OAAO,OAAO,KAAK;OACzB,QAAQ;OACR,IAAI,KAAK,MAAM,OAAO,GACpB,MAAM,IAAI,UAAU,iBAAiB;OAGvC,MAAM,QAAkB,QAAiB,IAA+B,SAAS;OACjF,UAAW,QAAiB;OAC5B,IAAI,SAAS;OACb,OAAO,MAAM,SAAS,OAAO,SAAS,MACpC,UAAU;OAEZ,UAAU,SAAS;OACnB,QAAQ;OACR;MACF;MACA;OACE,UAAU;OACV,UAAU;OACV,UAAU,QAAQ;OAClB,QAAQ;OACR,QAAQ;KAEZ;KAEA;IAEF,SACE,MAAM,IAAI,UAAU,8BAA8B,YAAY;GAElE;GACA;EACF;EACA,IAAI,KAAK,SAAS,OAAO,GACvB,MAAM,IAAI,UAAU,iBAAiB;EAIvC,OAAO;CACT;CAKA,OAAO,MAAuB;EAC5B,IAAI,KAAK,SAAS,KAAK,GAAG,KAAK,UAAW,KAAK,OAAO,KAAK,OAAO,OAChE,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,SAA4B;EAC1B,MAAM,UAAU,kBAAkB,GAAG,OAAO,OAAO,QAAQA,eAAe,CAAC;EAC3E,QAAQ,wBAAwB;EAEhC,OAAO;CACT;CAEA,UAAU,UAA8B;EACtC,IAAI,OAAO,aAAa,UACtB,OAAQ,QAAyC;EAGnD,OAAO,KAAK,cAAc,UAAU;CACtC;CAEA,YAAY,MAAuB;EACjC,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,mBAAmB,KAAK,KAAK,KAAK,GAAG;EAEnD,MAAM,IAAI,UAAU,YAAY,KAAK,KAAK,GAAG,CAAC;CAGhD;CAEA,mBAAmB,MAAc,MAA4B;EAC3D,IAAI,YAAoB;EACxB,IAAI,QAAmB;EACvB,IAAI;EAEJ,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,aAAc,MAAe;GACnC,IAAI,KAAK,SAAS,UAAU,GAC1B,WAAW,YAAY;QAEvB,MAAM,IAAI,UAAU,YAAY,KAAK,UAAU,CAAC;GAGlD,IAAI,CAAC,UACH,OAAO,KAAK;GAEd,YAAY;GACZ,QAAS,MAAe;EAC1B;EAEA,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,mBAAmB,MAAuB;EACxC,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,0BAA0B,KAAK,KAAK,KAAK,GAAG;EAE1D,MAAM,IAAI,UAAU,YAAY,MAAM,KAAK,GAAG,CAAC;CAGjD;CAEA,0BAA0B,MAAc,MAA4B;EAClE,IAAI,YAAoB;EACxB,IAAI,QAAmB;EACvB,IAAI;EAEJ,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,aAAc,MAAe;GACnC,IAAI,KAAK,SAAS,UAAU,GAC1B,WAAW,aAAa;QAExB,MAAM,IAAI,UAAU,YAAY,MAAM,UAAU,CAAC;GAGnD,IAAI,CAAC,UACH,OAAO,KAAK;GAEd,YAAY;GACZ,QAAS,MAAe;EAC1B;EAEA,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,OAAO,0BAAgC;EACrC,QAAQA;EACR,OAAO;CACT;CAEA,SAAiB;EACf,IAAI,QAAQ;EACZ,IAAI,UAAU;EACd,OAAO,UAAU,KAAK,OACpB,WAAW;EAGb,OAAO;CACT;CAEA,SAAS,MAAuB;EAC9B,IAAI,KAAK,SAAS,KAAK,GAAG,KAAK,OAAO,UAAU,KAAK,GAAG,GACtD,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,MAAM,SAAqC;EACzC,OAAO,KAAK,cAAc,MAAM,OAAO;CACzC;CAEA,KAAK,MAAuB;EAC1B,IAAI,KAAK,UAAU,IAAI,GACrB,OAAO,KAAK;EAId,OAFc,KAAK,IAEN,KAAK;CACpB;CAEA,SAAS,MAAuB;EAC9B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,gBAAgB,KAAK,KAAK,KAAK,GAAG;EAEhD,MAAM,IAAI,UAAU,YAAY,KAAK,KAAK,GAAG,CAAC;CAGhD;CAEA,gBAAgB,MAAc,MAA4B;EACxD,IAAI,YAAoB;EACxB,IAAI,QAAmB;EACvB,IAAI;EAEJ,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,aAAc,MAAe;GACnC,IAAI,KAAK,SAAS,UAAU,GAC1B,WAAW,YAAY;QAEvB,MAAM,IAAI,UAAU,YAAY,KAAK,UAAU,CAAC;GAGlD,IAAI,CAAC,UACH,OAAO,KAAK;GAEd,YAAY;GACZ,QAAS,MAAe;EAC1B;EAEA,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,gBAAgB,MAAuB;EACrC,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,uBAAuB,KAAK,KAAK,KAAK,GAAG;EAEvD,MAAM,IAAI,UAAU,YAAY,MAAM,KAAK,GAAG,CAAC;CAGjD;CAEA,uBAAuB,MAAc,MAA4B;EAC/D,IAAI,YAAoB;EACxB,IAAI,QAAmB;EACvB,IAAI;EAEJ,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,aAAc,MAAe;GACnC,IAAI,KAAK,SAAS,UAAU,GAC1B,WAAW,aAAa;QAExB,MAAM,IAAI,UAAU,YAAY,MAAM,UAAU,CAAC;GAGnD,IAAI,CAAC,UACH,OAAO,KAAK;GAEd,YAAY;GACZ,QAAS,MAAe;EAC1B;EAEA,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,KAAK,MAA4B;EAC/B,IAAI,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK;EAEd,OAAO,IAAI,KAAM,KAAc,KAAK,KAAK,KAAM,KAAc,GAAG,CAAC;CACnE;CAEA,MAAM,MAAuB;EAC3B,IAAI,KAAK,OAAO,KAAK,GAAG,GACtB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,OAAO,MAAuB;EAC5B,MAAM,QAAQ,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;EACzC,MAAM,YAAY,KAAK;EACvB,MAAM,aAAa,KAAK,IAAI,CAAC;EAC7B,MAAM,UAAW,KAAK,IAAa;EACnC,IAAI,UAAgB;EACpB,IAAI,QAAQ;EAEZ,KAAK,MAAM,QAAQ,WAAW,KAAK,GAAG;GACpC,MAAM,gBAAgB,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;GACjD,IAAI,gBAAsB;GAE1B,IAAI,KAAK,SAAS,IAAI,GACpB,KAAK,MAAM,OAAO,QAAQ,KAAK,GAAG;IAChC,IAAI,KAAK,UAAU,GAAG,GAGpB,MAAM,IAAI,eAAe,uBAAuB;IAElD,cAAc,OAAO,IAAI,KAAM,IAAa,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC;IACjE,gBAAgB,cAAc;GAChC;GAGF,cAAc,OAAO,IAAI;GACzB,MAAM,WAAW,QAAQ,MACvB,WACA,eACA,KAAK,aACL,KAAK,eACL,KAAK,KACP;GACA,QAAQ,OAAO,IAAI,KAAK,UAAU,KAAK,GAAG,CAAC;GAC3C,UAAU,QAAQ;GAClB;EACF;EAEA,OAAO,MAAM;CACf;CAEA,OAAO,MAAuB;EAC5B,IAAI,UAAU,kBAAkB,GAAG,QAAQ;EAC3C,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC,GAC3B,UAAU,KAAK,IAAI,CAAC;EAEtB,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC,GAC5B,OAAO,KAAK;EAEd,IAAI,QAAQ,KAAK,IAAI,CAAC;EAEtB,OAAO,KAAK,OAAO,KAAK,GAAG;GACzB,IAAI,WAAsB;GAE1B,IAAI,YAAY,kBAAkB,GAAG,KAAK,GACxC,WAAW,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC;GAEvE,IAAI,YAAY,kBAAkB,GAAG,QAAQ,GAC3C,WAAW,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC;GAE1E,IAAI,YAAY,MACd,MAAM,IAAI,UAAU,YAAY,UAAU,OAAO,CAAC;GAEpD,IAAI,aAAa,kBAAkB,GAAG,GAAG,GACvC,OAAO;GAGT,QAAQ,MAAM;EAChB;EAEA,OAAO,KAAK;CACd;CAEA,KAAK,MAAuB;EAC1B,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,KAC7B,OAAO,KAAK;EAEd,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,GAAG;EAE3C,MAAM,IAAI,UAAU,YAAY,OAAO,KAAK,GAAG,CAAC;CAGlD;CAEA,WAAW,MAAc,MAA4B;EACnD,IAAI,SAAS;EACb,IAAI,QAAmB;EAEvB,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,OAAQ,MAAe;GAC7B,IAAI,KAAK,SAAS,IAAI,GACpB,SAAS,SAAS;QAElB,MAAM,IAAI,UAAU,YAAY,OAAO,IAAI,CAAC;GAG9C,QAAS,MAAe;EAC1B;EAEA,OAAO;CACT;CAEA,SAAS,MAAuB;EAC9B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,gBAAgB,KAAK,KAAK,KAAK,GAAG;EAEhD,MAAM,IAAI,UAAU,YAAY,YAAY,KAAK,GAAG,CAAC;CAGvD;CAEA,gBAAgB,MAAc,MAA4B;EACxD,IAAI,SAAS;EACb,IAAI,QAAmB;EAEvB,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,OAAQ,MAAe;GAC7B,IAAI,KAAK,SAAS,IAAI,GACpB,SAAS,SAAS;QAElB,MAAM,IAAI,UAAU,YAAY,YAAY,IAAI,CAAC;GAGnD,QAAS,MAAe;EAC1B;EAEA,OAAO;CACT;CAEA,SAAiB;EACf,OAAO,KAAK;CACd;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,IAAI,IAAI,MAAM,kBAAkB,GAAG,GAAG,GAC7C,OAAO,KAAK;EAEd,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,OAAO,MAAuB;EAC5B,IAAI,KAAK,OAAO,IAAI,MAAM,kBAAkB,GAAG,GAAG,GAChD,OAAO,KAAK;EAEd,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,IAAI,MAAuB;EACzB,IAAI,CAAC,OAAO,UAAU,KAAK,GAAG,GAC5B,OAAO,KAAK;EAEd,MAAM,QAAQ,KAAK;EAGnB,OAFc,KAAK,IAAI,CAEZ,EAAE,IAAI,KAAK;CACxB;CAEA,MAAM,MAAuB;EAC3B,IAAI,KAAK,MAAM,KAAK,GAAG,GACrB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAMA,QAAQ,MAAuB;EAC7B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,KAAa;EACX,OAAO,KAAK;CACd;CAEA,SAAiB;EACf,OAAO,KAAK,OAAO;CACrB;CAEA,MAAM,MAAuB;EAC3B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,MAAM,KAAK,GAAG;EAG5B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,gBAAgB,WAA8B,MAA4B;EACxE,IAAI,QAAQ,iBAAiB,IAAI,SAAS,GACxC,OAAO,KAAK,gBAAgB,WAAW,IAAI;EAE7C,IAAI,KAAK,YAAY,IAAI,SAAS,GAChC,OAAO,KAAK,aAAa,WAAW,IAAI;EAE1C,MAAM,IAAI,UAAU,YAAY,SAAS,CAAC;CAG5C;CAEA,SAAS,SAAuB;EAC9B,KAAK,QAAQ;EACb,OAAO;CACT;CAEA,OAAO,QAAwC;EAC7C,IAAI;GA2DF,OAAO,IAAI,IAAI;IAzDb,CAAC,OAAO,KAAK;IACb,CAAC,OAAO,KAAK;IACb,CAAC,SAAS,OAAO;IACjB,CAAC,QAAQ,OAAO;IAChB,CAAC,OAAO,KAAK;IACb,CAAC,OAAO,KAAK;IACb,CAAC,cAAc,YAAY;IAC3B,CAAC,QAAQ,MAAM;IACf,CAAC,SAAS,OAAO;IACjB,CAAC,QAAQ,MAAM;IACf,CAAC,OAAO,KAAK;IACb,CAAC,UAAU,QAAQ;IACnB,CAAC,UAAU,QAAQ;IACnB,CAAC,WAAW,SAAS;IACrB,CAAC,MAAM,KAAK;IACZ,CAAC,SAAS,QAAQ;IAClB,CAAC,OAAO,KAAK;IACb,CAAC,UAAU,QAAQ;IACnB,CAAC,UAAU,QAAQ;IACnB,CAAC,YAAY,UAAU;IACvB,CAAC,QAAQ,MAAM;IACf,CAAC,QAAQ,MAAM;IACf,CAAC,SAAS,OAAO;IACjB,CAAC,UAAU,QAAQ;IACnB,CAAC,UAAU,QAAQ;IACnB,CAAC,QAAQ,MAAM;IACf,CAAC,OAAO,KAAK;IACb,CAAC,YAAY,UAAU;IACvB,CAAC,UAAU,QAAQ;IACnB,CAAC,OAAO,KAAK;IACb,CAAC,UAAU,QAAQ;IACnB,CAAC,OAAO,KAAK;IACb,CAAC,QAAQ,OAAO;IAChB,CAAC,WAAW,SAAS;IACrB,CAAC,MAAM,IAAI;IACX,CAAC,UAAU,QAAQ;IACnB,CAAC,SAAS,OAAO;IACjB,CAAC,OAAO,KAAK;IACb,CAAC,QAAQ,MAAM;IACf,CAAC,YAAY,UAAU;IACvB,CAAC,WAAW,SAAS;IACrB,CAAC,WAAW,SAAS;IACrB,CAAC,OAAO,KAAK;IACb,CAAC,KAAK,KAAK;IACX,CAAC,KAAK,UAAU;IAChB,CAAC,KAAK,UAAU;IAChB,CAAC,KAAK,QAAQ;IACd,CAAC,MAAM,KAAK;IACZ,CAAC,MAAM,KAAK;IACZ,CAAC,KAAK,QAAQ;IACd,CAAC,MAAM,KAAK;IACZ,CAAC,MAAM,QAAQ;IACf,CAAC,KAAK,UAAU;IAChB,CAAC,MAAM,iBAAiB;IACxB,CAAC,KAAK,aAAa;IACnB,CAAC,MAAM,oBAAoB;GAER,EAAE,KAAK,CAAC,KAAK,WAAW,CAAC,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;EAClF,QAAQ;GACN,MAAM,IAAI,MAAM,4CAA4C;EAC9D;CACF;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,IAAI,KAAK,GAAG;EAG1B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,SAAS,SAAgD,MAAoB;EAK3E,CAHE,WAAW,QAAQ,OAAO,YAAY,YAAY,WAAW,UACzD,UACA,QAAQ,QACP,MAAM,KAAK,OAAO,IAAI,OAAO,IAAI;EACxC,OAAO;CACT;CAEA,KAAK,MAAuB;EAC1B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,KAAK,KAAK,GAAG;EAG3B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,QAAQ,MAAuB;EAC7B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,SAAS,MAAuB;EAC9B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,gBAAgB,KAAK,KAAK,KAAK,GAAG;EAEhD,MAAM,IAAI,UAAU,YAAY,YAAY,KAAK,GAAG,CAAC;CAGvD;CAEA,gBAAgB,MAAc,MAA4B;EACxD,IAAI,SAAS;EACb,IAAI,QAAmB;EAEvB,OAAO,KAAK,SAAS,KAAK,GAAG;GAC3B,MAAM,OAAQ,MAAe;GAC7B,IAAI,KAAK,SAAS,IAAI,GACpB,SAAS,SAAS;QAElB,MAAM,IAAI,UAAU,YAAY,YAAY,IAAI,CAAC;GAGnD,QAAS,MAAe;EAC1B;EAEA,OAAO;CACT;CAEA,QAAQ,MAAuB;EAC7B,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,IAAI,MAAuB;EACzB,IAAI,KAAK,SAAS,KAAK,GAAG,GACxB,OAAO,KAAK,IAAI,KAAK,GAAG;EAG1B,MAAM,IAAI,eAAe,iCAAiC;CAC5D;CAEA,aAAa,WAA8B,MAA4B;EACrE,IAAI,KAAK,MAAM,SAAS,GAAG;GACzB,KAAK,SAAS,KAAK,cAAc,UAAU,SAAS,GAAG,IAAI,KAAK,WAAW,IAAI,EAAE,SAAS,CAAC;GAC3F,KAAK,SAAS,KAAK,QAAQ,CAAC;EAC9B;EAEA,MAAM,SAAS,KAAK,YAAY,IAAI,SAAS;EAC7C,MAAM,iBAAiB,OAAO,KAAK,EAAE;EACrC,MAAM,SAAS,QAAQ,MAAM,QAAQ,MAAM,gBAAgB,KAAK,eAAe,KAAK,KAAK;EAEzF,IAAI,KAAK,MAAM,SAAS,GAAG;GACzB,KAAK,SAAS,KAAK,QAAQ,CAAC;GAC5B,KAAK,SACH,KAAK,cAAc,UAAU,SAAS,GACtC,OAAO,MAAM,IAAI,UAAU,IAAI,KAAK,WAAW,IAAI,EAAE,SAAS,CAChE;EACF;EAEA,OAAO;CACT;AACF;;;;;;;;;ACphCA,IAAa,YAAb,cAA+B,MAAM;;;;;CAKnC,cAAc;EACZ,MAAM,MAAM;EACZ,KAAK,OAAO;CACd;AACF;;;;;;;;;ACLA,IAAa,gBAAb,MAA2B;CACzB,UAAmB;CACnB;CACA;CACA;CAEA,cAAc;EACZ,KAAK,8BAAc,IAAI,IAAI;EAC3B,KAAK,2BAAW,IAAI,IAAI;EACxB,KAAK,cAAc;EACnB,KAAK,WAAW;CAClB;CAEA,YAAoB;EAClB,IAAI,eAAuB;EAC3B,IAAI,KAAK,SAEP,OAAQ,KAAK,YAAwC;EAEvD,MAAM,WAAW,QAAQ,IAAI;EAC7B,IAAI,KAAK,YAAY,IAAI,QAAQ,GAC/B,eAAe,KAAK,YAAY,IAAI,QAAQ,KAAK;EAGnD,OAAO;CACT;;;;CAKA,aAAmB;EACjB,KAAK,YAAY,IAAI,WAAW,QAAQ,MAAM;EAC9C,KAAK,YAAY,IAAI,UAAU,QAAQ,MAAM;EAC7C,KAAK,YAAY,IAAI,UAAU,QAAQ,MAAM;EAE7C,OAAO;CACT;CAEA,MAAM,SAA4C;EAChD,IAAI,KAAK,SACP,OAAO;EAET,IAAI,WAAW,QAAQ,KAAK,UAAU,EAAE,IAAI,OAAO,GACjD,OAAO;EAET,OAAO;CACT;CAEA,MAAM,SAAkC;EACtC,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,GAC9B,KAAK,UAAU,EAAE,OAAO,OAAO;EAGjC,OAAO;CACT;CAEA,UAAgB;EACd,KAAK,WAAW,KAAK;EACrB,KAAK,SAAS,MAAM;EAEpB,OAAO;CACT;CAEA,WAAW,UAAyB;EAClC,KAAK,UAAU;EACf,OAAO;CACT;CAEA,eAAe,SAAuB;EACpC,KAAK,cAAc;EACnB,OAAO;CACT;CAEA,IAAI,SAA4B,SAAuB;EAErD,IADqB,KAAK,UACX,KAAK,MAClB,KAAK,UAAU,EAAE,IAAI,SAAS,OAAO;EAGvC,OAAO;CACT;CAEA,UAAU,SAAoD;EAC5D,IAAI,KAAK,SACP,OAAO,KAAK;EAEd,IAAI,WAAW,QAAQ,KAAK,UAAU,EAAE,IAAI,OAAO,GACjD,OAAO,KAAK,UAAU,EAAE,IAAI,OAAO;EAErC,MAAM,IAAI,MAAM,sBAAsB;CACxC;CAEA,YAA4C;EAC1C,MAAM,yBAAS,IAAI,IAA+B;EAClD,KAAK,MAAM,CAAC,KAAK,UAAU,KAAK,UAC9B,OAAO,IAAI,KAAK,KAAK;EAEvB,OAAO;CACT;CAEA,QAAc;EACZ,KAAK,QAAQ;EACb,MAAM,eAAe,KAAK,UAAU;EACpC,KAAK,eAAe,YAAY;EAChC,KAAK,WAAW,IAAI;EAEpB,OAAO;CACT;AACF;;;ACjGA,IAAI,WAAgC;AACpC,MAAM,kBAAwB;CAC5B,IAAI,YAAY,MAAM;EACpB,QAAA,QAAG,mBAAmB,aAAa;EACnC,WAAWC,QAAAA,QAAG,gBAAgB,IAAI;CACpC;CACA,SAAS;AACX;;;;;;;AAQA,IAAa,YAAb,MAAa,UAAU;CACrB,OAAgB,mBAAmD,UAAU,MAAM;CAEnF;CACA;CACA;CAEA,YAAY,QAAe,gBAA+B,SAAiB;EACzE,KAAK,cAAc;EACnB,KAAK,gBAAgB;EACrB,KAAK,QAAQ;CACf;CAEA,IAAI,OAAwB;EAC1B,KAAK,MAAM,QAAQ,MAAM,KAAK,GAAG;GAC/B,MAAM,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;GACtF,IAAI,KAAK,MAAM,QAAQ,GACrB,OAAO,KAAK;EAEhB;EAEA,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,WAAW,OAAwB;EACjC,MAAM,YAAY,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAC5F,MAAM,OAAO,UAAU,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAC1F,IAAI,SAAgB,KAAK;EACzB,IAAI,qBAAqB,QAAQ,UAAU,KAAK,EAAE,eAAe,OAC/D,SAAS,UAAU,KAAK,EAAE;EAG5B,OAAO,QAAQ,MAAM,WAAW,MAAM,QAAQ,KAAK,eAAe,KAAK,KAAK;CAC9E;CAEA,KAAK,OAAwB;EAC3B,IAAI,KAAK,YAAY,MAAM,GAAG,GAC5B,MAAM,IAAI,UAAU,YAAY,QAAQ,MAAM,GAAG,CAAC;EAEpD,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,KAAK,YAAY,IAAI,OAAO,GAC/B,OAAO,KAAK;EAGd,OAAO,KAAK,QAAQ,OAAO;CAC7B;CAEA,QAAQ,SAAoC;EAC1C,IAAI,SAAuB,KAAK;EAChC,IAAI,WAAsB,OAAO,IAAI,OAAO;EAC5C,IAAI,QAAQ;EAEZ,OAAO,UAAU,MAAM;GACrB,IAAI,CAAC,OAAO,IAAI,OAAO,GACrB;GAEF,MAAM,YAAuB,OAAO,IAAI,OAAO;GAE/C,IAAI,aAAa,UAAU;IACzB;IACA,WAAW;GACb;GACA,SAAS,OAAO;EAClB;EAEA,OAAO;CACT;CAEA,QAAQ,YAAkB,QAAqB;EAC7C,KAAK,MAAM,QAAQ,WAAW,KAAK,GAAG;GACpC,MAAM,UAAU;GAChB,IAAI,KAAK,YAAY,QAAQ,GAAG,GAC9B,MAAM,IAAI,UAAU,UAAU,QAAQ,GAAG,CAAC;GAE5C,MAAM,MAAM,QAAQ;GACpB,MAAM,QAAQ,UAAU,KAAK,QAAQ,IAAI,CAAC,GAAG,QAAQ,KAAK,eAAe,KAAK,KAAK;GACnF,OAAO,IAAI,KAAK,KAAK;EACvB;EAEA,OAAO;CACT;CAEA,gBAAgB,YAAkB,QAAqB;EACrD,MAAM,2BAAW,IAAI,IAAwB;EAC7C,KAAK,MAAM,QAAQ,WAAW,KAAK,GAAG;GACpC,MAAM,UAAU;GAChB,IAAI,KAAK,YAAY,QAAQ,GAAG,GAC9B,MAAM,IAAI,UAAU,UAAU,QAAQ,GAAG,CAAC;GAE5C,MAAM,MAAM,QAAQ;GACpB,MAAM,QAAQ,UAAU,KAAK,QAAQ,IAAI,CAAC,GAAG,QAAQ,KAAK,eAAe,KAAK,KAAK;GACnF,SAAS,IAAI,KAAK,KAAK;EACzB;EAEA,KAAK,MAAM,CAAC,KAAK,UAAU,UACzB,OAAO,IAAI,KAAK,KAAK;EAGvB,OAAO;CACT;CAEA,KAAK,OAA6B;EAChC,IAAI,KAAK,MAAM,KAAK,GAClB,OAAO,KAAK;EAEd,MAAM,WAAW;EACjB,MAAM,SAAS,SAAS;EACxB,IAAI,WAAsB,UAAU,KAClC,OAAO,KACP,KAAK,aACL,KAAK,eACL,KAAK,KACP;EACA,IAAI,KAAK,MAAM,QAAQ,GACrB,OAAO,KAAK,KAAK,SAAS,GAAG;EAE/B,MAAM,aAAa,OAAO;EAC1B,KAAK,MAAM,QAAQ,WAAW,KAAK,GACjC,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAElF,OAAO;CACT;CAEA,MAAM,OAAwB;EAC5B,MAAM,WAAW,MAAM;EACvB,IAAI,SAAoB,MAAM;EAC9B,SACE,MAAM,OAAO,MAAM,IACd,OAAgB,MACjB,IAAI,KAAK,kBAAkB,GAAG,QAAQ,GAAG,MAAM;EACrD,SAAS,UAAU,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,KAAK,eAAe,KAAK,KAAK;EAC3F,KAAK,YAAY,IAAI,UAAU,MAAM;EAErC,OAAO;CACT;CAEA,IAAI,OAAwB;EAC1B,MAAM,aAAa,MAAM;EACzB,MAAM,OAAO,MAAM,IAAI,CAAC;EACxB,MAAM,cAAe,MAAM,IAAa;EACxC,KAAK,gBAAgB,YAAY,KAAK,WAAW;EACjD,IAAI,KAAK,MAAM,IAAI,GACjB,KAAK,OAAO,KAAK,GAAG;EAGtB,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,CAAC,GAAG;GAC7F,MAAM,2BAAW,IAAI,IAAkC;GACvD,KAAK,MAAM,QAAQ,YAAY,KAAK,GAClC,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;GAEvE,KAAK,MAAM,QAAQ,WAAW,KAAK,GAAG;IACpC,MAAM,UAAU;IAChB,IAAI,KAAK,YAAY,QAAQ,GAAG,GAC9B,MAAM,IAAI,UAAU,UAAU,QAAQ,GAAG,CAAC;IAE5C,MAAM,MAAM,QAAQ;IACpB,IAAI,KAAK,SAAS,QAAQ,IAAI,CAAC,CAAC,GAAG;KACjC,MAAM,QAAQ,UAAU,KACtB,QAAQ,IAAI,CAAC,GACb,KAAK,aACL,KAAK,eACL,KAAK,KACP;KACA,SAAS,IAAI,KAAK,KAAK;IACzB;GACF;GACA,KAAK,MAAM,CAAC,KAAK,UAAU,UACzB,KAAK,YAAY,IAAI,KAAK,KAAK;EAEnC;EACA,OAAO,UAAU,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CACrF;CAEA,OAAO,OAAwB;EAC7B,MAAM,YAAY,MAAM;EACxB,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,UAAU,KACrB,UAAU,IAAI,CAAC,GACf,KAAK,aACL,KAAK,eACL,KAAK,KACP;EACA,KAAK,MAAM,WAAW,KAAK,KAAK,GAAG;GACjC,KAAK,YAAY,IAAI,UAAU,KAAK,OAAO;GAC3C,KAAK,MAAM,QAAQ,QAAQ,KAAK,GAC9B,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAEzE;EAEA,OAAO,UAAU,KAAK,UAAU,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CAC1F;CAEA,OAAO,OAAwB;EAC7B,MAAM,aAAa,MAAM;EACzB,MAAM,OAAO,MAAM,IAAI,CAAC;EACxB,MAAM,cAAe,MAAM,IAAa;EACxC,KAAK,QAAQ,YAAY,KAAK,WAAW;EACzC,IAAI,KAAK,MAAM,IAAI,GACjB,KAAK,OAAO,KAAK,GAAG;EAGtB,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,CAAC,GAAG;GAC7F,KAAK,MAAM,QAAQ,YAAY,KAAK,GAClC,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;GAEvE,KAAK,MAAM,QAAQ,WAAW,KAAK,GAAG;IACpC,MAAM,UAAU;IAChB,IAAI,KAAK,YAAY,QAAQ,GAAG,GAC9B,MAAM,IAAI,UAAU,UAAU,QAAQ,GAAG,CAAC;IAE5C,MAAM,MAAM,QAAQ;IACpB,IAAI,KAAK,SAAS,QAAQ,IAAI,CAAC,CAAC,GAAG;KACjC,MAAM,QAAQ,UAAU,KACtB,QAAQ,IAAI,CAAC,GACb,KAAK,aACL,KAAK,eACL,KAAK,KACP;KACA,KAAK,YAAY,IAAI,KAAK,KAAK;IACjC;GACF;EACF;EACA,OAAO,UAAU,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CACrF;CAEA,eAAe,MAAuB;EACpC,MAAM,QAAQ,KAAK;EACnB,IAAI,OAAa,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;EAC5C,MAAM,YAAY,KAAK;EACvB,IAAI,UAAoC;EAExC,IAAI,KAAK,SAAS,SAAS,GACzB,UAAU;EAEZ,IAAI,KAAK,MAAM,OAAO,GAAG;GACvB,KAAK,SAAS,KAAK,cAAc,UAAU,OAAO,GAAG,KAAK,SAAS,CAAC;GACpE,KAAK,SAAS,KAAK,QAAQ,CAAC;EAC9B;EAEA,KAAK,MAAM,QAAQ,MAAM,KAAK,GAAG;GAC/B,IAAI,gBAAgB,OAClB;GAEF,KAAK,IAAI,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,CAAC;EACjF;EACA,IAAI,KAAK,MAAM,OAAO,GACpB,KAAK,SAAS,KAAK,QAAQ,CAAC;EAG9B,OAAO,KAAK;EACZ,OAAO,QAAQ,MAAM,WAAW,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CACxF;CAEA,OAAO,KACL,MACA,aACA,iBAAgC,IAAI,cAAc,GAClD,QAAgB,GACL;EACX,OAAO,IAAI,UAAU,aAAa,gBAAgB,KAAK,EAAE,KAAK,IAAI;CACpE;CAEA,KAAK,MAA4B;EAC/B,IAAI,KAAK,SAAS,IAAI,GACpB,OAAO,KAAK,eAAe,IAAI;EAEjC,IAAI,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,IAAI,GACzC,OAAO;EAET,MAAM,WAAW;EACjB,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,UAAU,iBAAiB,IAAI,SAAS,GAAG,GAC5E,OAAO,KAAK,YAAY,QAAQ;EAGlC,OAAO,KAAK,eAAe,QAAQ;CACrC;CAEA,UAAU,OAAwB;EAChC,OAAO,UAAU,KACf,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,GAC1E,KAAK,aACL,KAAK,eACL,KAAK,KACP;CACF;CAEA,eAAe,SAAuC;EACpD,IAAI,CAAC,KAAK,YAAY,IAAI,OAAO,GAC/B,MAAM,IAAI,UAAU,UAAU,OAAO,CAAC;EAExC,IAAI,KAAK,MAAM,OAAO,GAAG;GACvB,KAAK,SAAS,KAAK,cAAc,UAAU,OAAO,GAAG,QAAQ,SAAS,CAAC;GACvE,KAAK,SAAS,KAAK,QAAQ,CAAC;EAC9B;EAEA,IAAI,SAAoB,KAAK,YAAY,IAAI,OAAO;EACpD,IAAI,kBAAkB,QAAQ,OAAO,eAAe,OAClD,SAAS,OAAO;EAGlB,IAAI,KAAK,MAAM,OAAO,GAAG;GACvB,KAAK,SAAS,KAAK,QAAQ,CAAC;GAC5B,KAAK,SACH,KAAK,cAAc,UAAU,OAAO,GACpC,OAAO,MAAM,IAAI,UAAU,OAAO,OAAO,CAC3C;EACF;EAEA,OAAO;CACT;CAEA,OAAc;EACZ,QAAQ,IAAI,MAAM;EAClB,MAAM,IAAI,UAAU;CACtB;CAEA,KAAW;EACT,UAAU;EACV,MAAM,QAAQ,QAAQ,YAAY;EAElC,MAAM,QAAQ,KAAa,UAAwB,IAAI,KAAK,kBAAkB,GAAG,GAAG,GAAG,KAAK;EAC5F,MAAM,UAAkB;GACtB,KAAK,OAAO,MAAM,GAAG;GACrB,KAAK,cAAc,MAAM,SAAS;GAClC,KAAK,aAAa,MAAM,QAAQ;EAClC;EACA,IAAI,SAAe,KAAK;EACxB,KAAK,MAAM,SAAS,SAClB,SAAS,IAAI,KAAK,OAAO,MAAM;EAEjC,OAAO;CACT;CAEA,IAAI,OAAwB;EAC1B,MAAM,OAAO,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACvF,MAAM,WAAsB,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;EAEzE,OAAO,UAAU,KAAK,UAAU,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CAClF;CAEA,SAAiB;EACf,IAAI,QAAQ;EACZ,IAAI,UAAU;EACd,OAAO,UAAU,KAAK,OACpB,WAAW;EAGb,OAAO;CACT;CAEA,MAAM,SAA4C;EAChD,IAAI,WAAW,MACb,OAAO;EAET,OAAO,KAAK,cAAc,MAAM,OAAO;CACzC;CAEA,OAAO,MAAuB;EAC5B,MAAM,QAAQ,KAAK,WAAW,IAAI;EAElC,MADsB,IACd,OAAO,IAAI,KAAK,KAAK,aAAa,KAAK,GAAG,CAAC;EAEnD,OAAO,IAAI,KAAK,kBAAkB,GAAG,QAAQ,GAAG,KAAK;CACvD;CAEA,IAAI,OAAwB;EAC1B,MAAM,SAAS,IAAI,MAAM,KAAK,WAAW;EACzC,MAAM,aAAa,MAAM;EACzB,MAAM,QAAQ,MAAM;EACpB,IAAI,WAAsB,KAAK;EAC/B,KAAK,gBAAgB,YAAY,MAAM;EACvC,KAAK,MAAM,QAAQ,MAAM,KAAK,GAC5B,WAAW,UAAU,KAAK,MAAM,QAAQ,KAAK,eAAe,KAAK,KAAK;EAGxE,OAAO;CACT;CAEA,QAAQ,OAAwB;EAC9B,MAAM,SAAS,IAAI,MAAM,KAAK,WAAW;EACzC,MAAM,aAAa,MAAM;EACzB,MAAM,QAAQ,MAAM;EACpB,IAAI,WAAsB,KAAK;EAC/B,KAAK,QAAQ,YAAY,MAAM;EAC/B,KAAK,MAAM,QAAQ,MAAM,KAAK,GAC5B,WAAW,UAAU,KAAK,MAAM,QAAQ,KAAK,eAAe,KAAK,KAAK;EAGxE,OAAO;CACT;CAEA,IAAI,OAAwB;EAC1B,IAAI,KAAK,MAAM,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,CAAC,GACxF,OAAO,kBAAkB,GAAG,GAAG;EAEjC,OAAO,KAAK;CACd;CAEA,UAA6B;EAC3B,KAAK,cAAc,QAAQ;EAC3B,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,GAAG,OAAwB;EACzB,KAAK,MAAM,QAAQ,MAAM,KAAK,GAAG;GAC/B,MAAM,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;GACtF,IAAI,KAAK,SAAS,QAAQ,GACxB,OAAO,kBAAkB,GAAG,GAAG;EAEnC;EAEA,OAAO,KAAK;CACd;CAEA,KAAK,OAAwB;EAC3B,IAAI,KAAK,YAAY,MAAM,GAAG,GAC5B,MAAM,IAAI,UAAU,kBAAkB,CAAC,CAAC;EAE1C,MAAM,UAAU,MAAM;EACtB,MAAM,WAAW,UAAU,KAAK,SAAS,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACzF,IAAI,KAAK,UAAU,QAAQ,GACzB,OAAO,KAAK;EAEd,MAAM,aAAa;EACnB,KAAK,YAAY,WAAW,SAAS,WAAW,GAAG;EAEnD,OAAO,WAAW;CACpB;CAEA,MAAM,OAAwB;EAC5B,IAAI,WAAsB,KAAK;EAC/B,KAAK,MAAM,QAAQ,MAAM,KAAK,GAC5B,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAGlF,OAAO;CACT;CAEA,MAAM,OAAwB;EAC5B,MAAM,WAAW,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAC3F,QAAQ,OAAO,MAAM,OAAO,QAAQ,CAAC;EAErC,OAAO;CACT;CAEA,MAAM,OAAwB;EAC5B,MAAM,WAAW,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAC3F,QAAQ,OAAO,MAAM,OAAO,QAAQ,IAAI,IAAI;EAE5C,OAAO;CACT;CAEA,MAAM,OAAwB;EAC5B,IAAI,WAAW,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACzF,IAAI,KAAK,YAAY,MAAM,IAAI,CAAC,CAAC,GAC/B,MAAM,IAAI,UAAU,kBAAkB,CAAC,CAAC;EAE1C,MAAM,UAAU,MAAM,IAAI,CAAC;EAC3B,WAAW,IAAI,KACb,UACA,UAAU,KAAK,SAAS,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK,CAC1E;EACA,KAAK,YAAY,WAAW,SAAS,QAAQ;EAE7C,OAAO;CACT;CAEA,MAAM,OAAwB;EAC5B,OAAO,MAAM;CACf;CAEA,OAAO,MAAuB;EAC5B,IAAI,WAAW,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACxF,IAAI,KAAK,UAAU,QAAQ,GACzB,MAAM,IAAI,UAAU,YAAY,YAAY,QAAQ,CAAC;EAEvD,MAAM,QAAQ;EACd,WAAW,UAAU,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACvF,MAAM,OAAO,QAAQ;EAErB,OAAO,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CAClF;CAEA,OAAO,MAAuB;EAC5B,IAAI,WAAW,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACxF,IAAI,KAAK,UAAU,QAAQ,GACzB,MAAM,IAAI,UAAU,YAAY,YAAY,QAAQ,CAAC;EAEvD,MAAM,QAAQ;EACd,WAAW,UAAU,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACvF,MAAM,OAAO,QAAQ;EAErB,OAAO,UAAU,KAAK,KAAK,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;CAClF;CAEA,KAAK,MAAuB;EAC1B,IAAI,WAAsB,KAAK;EAC/B,MAAM,aAAa,KAAK,KAAK;EAG7B,OAAO,WAAW,QAAQ,GAAG;GAC3B,IAAI,CAAC,KAAK,SAAS,KAAK,IAAI,CAAS,CAAC,GACpC,MAAM,IAAI,UAAU,UAAU,KAAK,GAAG,CAAC;GAEzC,MAAM,MAAM,WAAW,KAAK;GAE5B,IAAI,CAAC,WAAW,QAAQ,GACtB,MAAM,IAAI,UAAU,kBAAkB;GAExC,WAAW,UAAU,KACnB,WAAW,KAAK,GAChB,KAAK,aACL,KAAK,eACL,KAAK,KACP;GACA,KAAK,YAAY,IAAI,KAAK,QAAQ;EACpC;EAEA,OAAO;CACT;CAEA,SAAS,MAAuB;EAC9B,IAAI,WAAsB,KAAK;EAC/B,MAAM,aAAa,KAAK,KAAK;EAG7B,OAAO,WAAW,QAAQ,GAAG;GAC3B,IAAI,CAAC,KAAK,SAAS,KAAK,IAAI,CAAS,CAAC,GACpC,MAAM,IAAI,UAAU,UAAU,KAAK,GAAG,CAAC;GAEzC,MAAM,MAAM,WAAW,KAAK;GAC5B,WAAW,UAAU,KACnB,WAAW,KAAK,GAChB,KAAK,aACL,KAAK,eACL,KAAK,KACP;GACA,KAAK,YAAY,WAAW,KAAK,QAAQ;EAC3C;EAEA,OAAO;CACT;CAEA,SAAS,SAAuB;EAC9B,KAAK,QAAQ;EACb,OAAO;CACT;CAEA,OAAO,QAAwC;EAC7C,IAAI;GAoCF,OAAO,IAAI,IAAI;IAlCb,CAAC,OAAO,KAAK;IACb,CAAC,SAAS,YAAY;IACtB,CAAC,QAAQ,MAAM;IACf,CAAC,QAAQ,MAAM;IACf,CAAC,SAAS,OAAO;IACjB,CAAC,MAAM,KAAK;IACZ,CAAC,UAAU,QAAQ;IACnB,CAAC,OAAO,QAAQ;IAChB,CAAC,QAAQ,WAAW;IACpB,CAAC,QAAQ,MAAM;IACf,CAAC,MAAM,IAAI;IACX,CAAC,MAAM,KAAK;IACZ,CAAC,UAAU,QAAQ;IACnB,CAAC,OAAO,KAAK;IACb,CAAC,QAAQ,SAAS;IAClB,CAAC,OAAO,KAAK;IACb,CAAC,WAAW,SAAS;IACrB,CAAC,MAAM,IAAI;IACX,CAAC,OAAO,MAAM;IACd,CAAC,SAAS,OAAO;IACjB,CAAC,SAAS,OAAO;IACjB,CAAC,SAAS,OAAO;IACjB,CAAC,QAAQ,OAAO;IAChB,CAAC,SAAS,OAAO;IACjB,CAAC,UAAU,QAAQ;IACnB,CAAC,UAAU,QAAQ;IACnB,CAAC,QAAQ,MAAM;IACf,CAAC,YAAY,UAAU;IACvB,CAAC,UAAU,QAAQ;IACnB,CAAC,QAAQ,MAAM;IACf,CAAC,SAAS,OAAO;IACjB,CAAC,UAAU,QAAQ;IACnB,CAAC,QAAQ,MAAM;GAEI,EAAE,KAAK,CAAC,KAAK,WAAW,CAAC,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;EAClF,QAAQ;GACN,MAAM,IAAI,MAAM,8CAA8C;EAChE;CACF;CAEA,YAAY,MAAuB;EACjC,MAAM,UAAU,KAAK;EAErB,IAAI,KAAK,MAAM,OAAO,GAAG;GACvB,KAAK,SAAS,KAAK,cAAc,UAAU,OAAO,GAAG,KAAK,SAAS,CAAC;GACpE,KAAK,SAAS,KAAK,QAAQ,CAAC;EAC9B;EAEA,MAAM,QAAQ,KAAK;EACnB,MAAM,aAAa,UAAU,iBAAiB,IAAI,OAAO;EAEzD,MAAM,SAAS;EACf,MAAM,KAAK,OAAO;EAClB,IAAI,OAAO,OAAO,YAChB,MAAM,IAAI,UAAU,GAAG,KAAK,YAAY,KAAK,iCAAiC,WAAW,EAAE;EAE7F,MAAM,SAAU,GAA8B,MAAM,QAAQ,CAAC,KAAK,CAAC;EAEnE,IAAI,KAAK,MAAM,OAAO,GAAG;GACvB,KAAK,SAAS,KAAK,QAAQ,CAAC;GAC5B,KAAK,SACH,KAAK,cAAc,UAAU,OAAO,GACpC,OAAO,MAAM,IAAI,UAAU,OAAO,OAAO,CAC3C;EACF;EAEA,OAAO;CACT;CAEA,SAAS,SAAgD,MAAoB;EAK3E,CAHE,WAAW,QAAQ,OAAO,YAAY,YAAY,WAAW,UACzD,UACA,QAAQ,QACP,MAAM,KAAK,OAAO,IAAI,OAAO,IAAI;EACxC,OAAO;CACT;CAEA,SAA4B;EAC1B,QAAQ,OAAO,MAAM,IAAI;EACzB,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,KAAK,OAAqB;EACxB,MAAM,QAAQ,QAAQ,OAAO;EAC7B,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAG1E,OAFY,QAAQ,OAAO,KAElB,EAAE,KAAK;CAClB;CAEA,QAA2B;EACzB,KAAK,cAAc,MAAM;EACzB,OAAO,kBAAkB,GAAG,GAAG;CACjC;CAEA,OAAO,OAAwB;EAC7B,IAAI,WAAsB,KAAK;EAC/B,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACvF,IAAI,KAAK,SAAS,IAAI,GACpB,OAAO,KAAK;EAEd,KAAK,MAAM,QAAQ,QAAQ,KAAK,GAC9B,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAGlF,OAAO;CACT;CAEA,KAAK,OAAwB;EAC3B,IAAI,WAAsB,KAAK;EAC/B,MAAM,UAAU,MAAM;EACtB,MAAM,OAAO,UAAU,KAAK,MAAM,KAAK,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EACvF,IAAI,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK;EAEd,KAAK,MAAM,QAAQ,QAAQ,KAAK,GAC9B,WAAW,UAAU,KAAK,MAAM,KAAK,aAAa,KAAK,eAAe,KAAK,KAAK;EAGlF,OAAO;CACT;AACF;;;;;;;;;ACzrBA,IAAa,kBAAb,MAA6B;CAC3B;CACA;CAEA,cAAc;EACZ,KAAK,OAAO,KAAK,gBAAgB;EACjC,KAAK,gBAAgB,IAAI,cAAc;CACzC;;;;;;CAOA,KAAK,OAA6B;EAChC,OAAO,UAAU,KAAK,OAAO,KAAK,MAAM,KAAK,aAAa;CAC5D;;;;CAKA,QAAQ,QAA6B;EACnC,MAAM,MAAM,KAAK,MAAM,MAAM;EAC7B,MAAM,UAAuB,CAAC;EAC9B,KAAK,MAAM,QAAQ,IAAI,KAAK,GAC1B,QAAQ,KAAK,KAAK,KAAK,IAAI,CAAC;EAE9B,OAAO;CACT;;;;CAKA,WAAW,QAA2B;EACpC,MAAM,UAAU,KAAK,QAAQ,MAAM;EACnC,OAAO,QAAQ,WAAW,IAAI,KAAK,MAAO,QAAQ,GAAG,EAAE,KAAK,KAAK;CACnE;;;;;;;CAQA,MAAM,SAAuB;EAC3B,OAAO,KAAK,MAAM,MAAM,UAAU,MAAM;CAC1C;;;;CAKA,QAAQ,aAA0B;EAChC,IAAI,uBAAuB,OAAO;GAChC,YAAY,QAAQ,IAAI;GACxB,KAAK,OAAO;EACd;EAEA,OAAO;CACT;;;;CAKA,kBAAyB;EACvB,MAAM,QAAkB,CAAC;EACzB,MAAM,SAAS,IAAI,MAAM;EACzB,OAAO,QAAQ,IAAI;EAEnB,MAAM,KACJ,OACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,OACA,cACA,QACA,QACA,SACA,QACA,OACA,UACA,SACA,UACA,MACA,OACA,UACA,WACA,MACA,SACA,QACA,OACA,MACA,UACA,MACA,YACA,UACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,QACA,OACA,YACA,UACA,OACA,UACA,OACA,WACA,OACA,QACA,WACA,MACA,MACA,OACA,SACA,UACA,SACA,QACA,SACA,UACA,UACA,SACA,UACA,UACA,QACA,YACA,OACA,QACA,YACA,WACA,WACA,OACA,UACA,QACA,SACA,UACA,QACA,KACA,KACA,KACA,KACA,MACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,IACF;EAEA,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,UAAU,kBAAkB,GAAG,IAAI;GACzC,OAAO,IAAI,SAAS,OAAO;EAC7B;EAEA,IAAI;EACJ,IAAI;EACJ,UACE;EACF,QAAQ,KAAK,MAAM,OAAO;EAC1B,MAAM,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;EAC9C,OAAO,IAAI,kBAAkB,GAAG,QAAQ,GAAG,KAAK;EAEhD,UACE;EACF,QAAQ,KAAK,MAAM,OAAO;EAC1B,MAAM,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;EAC9C,OAAO,IAAI,kBAAkB,GAAG,SAAS,GAAG,KAAK;EAEjD,UAAU;EACV,QAAQ,KAAK,MAAM,OAAO;EAC1B,MAAM,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;EAC9C,OAAO,IAAI,kBAAkB,GAAG,QAAQ,GAAG,KAAK;EAEhD,UACE;EACF,QAAQ,KAAK,MAAM,OAAO;EAC1B,MAAM,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;EAC9C,OAAO,IAAI,kBAAkB,GAAG,QAAQ,GAAG,KAAK;EAEhD,UACE;EACF,QAAQ,KAAK,MAAM,OAAO;EAC1B,MAAM,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC;EAC9C,OAAO,IAAI,kBAAkB,GAAG,SAAS,GAAG,KAAK;EAEjD,OAAO,IAAI,kBAAkB,GAAG,GAAG,GAAG,kBAAkB,GAAG,GAAG,CAAC;EAE/D,OAAO;CACT;AACF;;;AC5MA,MAAMC,aAAAA,GAAAA,YAAAA,eAAAA,QAAAA,KAAAA,EAAAA,cAAAA,UAAAA,EAAAA,IAAuC;;;;;;;AAQ7C,IAAa,OAAb,MAAkB;CAChB;CACA;CAEA,YAAY,cAA+B,IAAI,gBAAgB,GAAG;EAChE,KAAK,cAAc;EAEnB,MAAM,WAAWA,UAAQ,eAAe;EACxC,KAAK,KAAK,SAAS,gBAAgB;GACjC,OAAO,QAAQ;GACf,QAAQ,QAAQ;GAChB,QAAQ;EACV,CAAC;CACH;;;;CAKA,MAAY;EACV,IAAI,UAAU;EACd,IAAI,kBAAkB;EACtB,IAAI,gBAAgB;EAEpB,KAAK,GAAG,OAAO;EACf,KAAK,GACF,GAAG,SAAS,SAAiB;GAC5B,QAAQ;GAER,KAAK,MAAM,cAAc,MAAM;IAC7B,IAAI,eAAe,KACjB;IAEF,IAAI,eAAe,KACjB;IAEF,WAAW;GACb;GAEA,IAAI,mBAAmB,GAAG;IACxB,IAAI;KACF,MAAM,QAAQ,KAAK,YAAY,MAAM,OAAO;KAC5C,KAAK,MAAM,QAAQ,MAAM,KAAK,GAC5B,QAAQ,OAAO,MACZ,KAAK,YAAY,KAAK,IAAI,EAA6B,SAAS,IAAI,IACvE;IAEJ,SAAS,OAAO;KACd,IAAI,iBAAiB,WAAW;MAC9B,gBAAgB;MAChB,KAAK,GAAG,MAAM;MACd;KACF;KACA,IAAI,iBAAiB,cAAc;MACjC,QAAQ,MAAM,OAAO,MAAM,KAAK,IAAI,MAAM,QAAQ,KAAK;MACvD,QAAQ,OAAO,MAAM,KAAK,IAAI,SAAS,IAAI,IAAI;KACjD,OACE,MAAM;IAEV;IACA,kBAAkB;IAClB,UAAU;IACV,KAAK,GAAG,OAAO;GACjB;EACF,CAAC,EACA,GAAG,eAAe;GAEjB,IAAI,CAAC,eACH,QAAQ,IAAI,QAAQ;EAExB,CAAC;CACL;AACF"}
|