@gridland/web 0.2.28 → 0.2.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core-shims.js +149 -139
- package/dist/core-shims.js.map +4 -4
- package/dist/index.js +146 -136
- package/dist/index.js.map +4 -4
- package/dist/next.js +146 -136
- package/dist/next.js.map +4 -4
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/TUI.tsx", "../src/core-shims/types.ts", "../src/shims/events-shim.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/generated/YGEnums.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/wrapAssembly.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/index.ts", "../../../opentui/packages/core/src/lib/yoga.options.ts", "
|
|
4
|
-
"sourcesContent": ["import React, {\n useRef,\n useEffect,\n useState,\n type ReactNode,\n type CSSProperties,\n} from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot, type BrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\nimport { HeadlessRenderer, setHeadlessRootRenderableClass } from \"./headless-renderer\"\nimport { createHeadlessRoot } from \"./create-headless-root\"\n\nexport interface TUIProps {\n children: ReactNode\n /** CSS styles for the outer container div */\n style?: CSSProperties\n /** CSS class for the outer container div */\n className?: string\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Auto-focus the canvas for keyboard input (default: true) */\n autoFocus?: boolean\n /** Background color for the canvas (default: transparent) */\n backgroundColor?: string\n /** Called when the renderer is ready */\n onReady?: (renderer: BrowserRenderer) => void\n /** Columns to use for SSR headless render (default: 80) */\n fallbackCols?: number\n /** Rows to use for SSR headless render (default: 24) */\n fallbackRows?: number\n}\n\n/**\n * A single React component that renders TUI content to an HTML5 Canvas.\n * Gridland is built on the opentui engine.\n *\n * Usage:\n * ```tsx\n * <TUI style={{ width: \"100%\", height: 400 }}>\n * <box border borderStyle=\"rounded\">\n * <text>Hello from Gridland!</text>\n * </box>\n * </TUI>\n * ```\n *\n * No dynamic imports, no wrapper chains. Just a component.\n */\nexport function TUI({\n children,\n style,\n className,\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n autoFocus = true,\n backgroundColor,\n onReady,\n fallbackCols = 80,\n fallbackRows = 24,\n}: TUIProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rendererRef = useRef<BrowserRenderer | null>(null)\n const rootRef = useRef<BrowserRoot | null>(null)\n const [isClient, setIsClient] = useState(false)\n\n // SSR safety: only render canvas on the client\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n // Initialize renderer when canvas is available\n useEffect(() => {\n if (!isClient) return\n\n const canvas = canvasRef.current\n const container = containerRef.current\n if (!canvas || !container) return\n\n setRootRenderableClass(RootRenderable)\n\n // Measure cell size to calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n const containerRect = container.getBoundingClientRect()\n const cols = Math.max(1, Math.floor(containerRect.width / cellSize.width))\n const rows = Math.max(1, Math.floor(containerRect.height / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows, { backgroundColor })\n rendererRef.current = renderer\n\n const root = createBrowserRoot(renderer)\n rootRef.current = root\n\n root.render(children)\n renderer.start()\n\n canvas.tabIndex = 0\n if (autoFocus) {\n canvas.focus()\n }\n\n onReady?.(renderer)\n\n // Handle keyboard events\n const onKeyDown = (e: KeyboardEvent) => {\n renderer.handleKeyDown(e)\n }\n canvas.addEventListener(\"keydown\", onKeyDown)\n\n // Handle resize with ResizeObserver\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n renderer.resize(newCols, newRows)\n }\n })\n resizeObserver.observe(container)\n\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown)\n resizeObserver.disconnect()\n renderer.stop()\n root.unmount()\n rendererRef.current = null\n rootRef.current = null\n }\n }, [isClient, fontSize, fontFamily, backgroundColor]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Re-render when children change\n useEffect(() => {\n if (rootRef.current) {\n rootRef.current.render(children)\n }\n }, [children])\n\n if (!isClient) {\n // Only run the headless render on the actual server.\n // On the client's initial render (before useEffect sets isClient=true),\n // we render an empty <pre> and let suppressHydrationWarning preserve\n // the server-rendered DOM until the canvas takes over.\n const isServer = typeof window === \"undefined\"\n let text = \"\"\n if (isServer) {\n setHeadlessRootRenderableClass(RootRenderable)\n const renderer = new HeadlessRenderer({ cols: fallbackCols, rows: fallbackRows })\n const root = createHeadlessRoot(renderer)\n text = root.renderToText(children)\n root.unmount()\n }\n return (\n <div style={style} className={className}>\n <pre\n suppressHydrationWarning\n aria-hidden\n style={{\n fontFamily,\n fontSize,\n margin: 0,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"pre\",\n }}\n >\n {text}\n </pre>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n ...style,\n }}\n className={className}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n outline: \"none\",\n }}\n />\n </div>\n )\n}\n", "// Types matching opentui core types.ts\nimport type { RGBA } from \"./rgba\"\nimport type { Renderable } from \"./renderable-types\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n BLINK: 1 << 4,\n INVERSE: 1 << 5,\n HIDDEN: 1 << 6,\n STRIKETHROUGH: 1 << 7,\n}\n\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\nexport function getBaseAttributes(attr: number): number {\n return attr & 0xff\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport interface RenderContext {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => any | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: any | null\n focusRenderable: (renderable: any) => void\n registerLifecyclePass: (renderable: any) => void\n unregisterLifecyclePass: (renderable: any) => void\n getLifecyclePasses: () => Set<any>\n keyInput: any\n _internalKeyInput: any\n clearSelection: () => void\n startSelection: (renderable: any, x: number, y: number) => void\n updateSelection: (\n currentRenderable: any | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n // EventEmitter methods\n on: (event: string, listener: (...args: any[]) => void) => any\n off: (event: string, listener: (...args: any[]) => void) => any\n emit: (event: string, ...args: any[]) => boolean\n removeAllListeners: (event?: string) => any\n}\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "// Browser-compatible EventEmitter shim.\n// Replaces the 'events' npm package to avoid CJS/ESM issues in Vite.\n\ntype Listener = (...args: any[]) => void\n\nexport class EventEmitter {\n private _listeners = new Map<string | symbol, Listener[]>()\n\n on(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event) ?? []\n list.push(listener)\n this._listeners.set(event, list)\n return this\n }\n\n addListener(event: string | symbol, listener: Listener): this {\n return this.on(event, listener)\n }\n\n off(event: string | symbol, listener: Listener): this {\n return this.removeListener(event, listener)\n }\n\n removeListener(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event)\n if (list) {\n const idx = list.indexOf(listener)\n if (idx !== -1) list.splice(idx, 1)\n if (list.length === 0) this._listeners.delete(event)\n }\n return this\n }\n\n removeAllListeners(event?: string | symbol): this {\n if (event) {\n this._listeners.delete(event)\n } else {\n this._listeners.clear()\n }\n return this\n }\n\n emit(event: string | symbol, ...args: any[]): boolean {\n const list = this._listeners.get(event)\n if (!list || list.length === 0) return false\n for (const listener of [...list]) {\n listener(...args)\n }\n return true\n }\n\n once(event: string | symbol, listener: Listener): this {\n const wrapper = (...args: any[]) => {\n this.removeListener(event, wrapper)\n listener(...args)\n }\n return this.on(event, wrapper)\n }\n\n listenerCount(event: string | symbol): number {\n return this._listeners.get(event)?.length ?? 0\n }\n\n listeners(event: string | symbol): Listener[] {\n return [...(this._listeners.get(event) ?? [])]\n }\n\n eventNames(): (string | symbol)[] {\n return [...this._listeners.keys()]\n }\n\n setMaxListeners(_n: number): this {\n return this // no-op in browser\n }\n\n getMaxListeners(): number {\n return Infinity\n }\n}\n\nexport default EventEmitter\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "import {\n BoxSizing,\n Align,\n Dimension,\n Direction,\n Display,\n Edge,\n FlexDirection,\n Gutter,\n Justify,\n LogLevel,\n MeasureMode,\n Overflow,\n PositionType,\n Unit,\n Wrap,\n} from \"yoga-layout\"\n\nexport type AlignString =\n | \"auto\"\n | \"flex-start\"\n | \"center\"\n | \"flex-end\"\n | \"stretch\"\n | \"baseline\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\nexport type BoxSizingString = \"border-box\" | \"content-box\"\nexport type DimensionString = \"width\" | \"height\"\nexport type DirectionString = \"inherit\" | \"ltr\" | \"rtl\"\nexport type DisplayString = \"flex\" | \"none\" | \"contents\"\nexport type EdgeString = \"left\" | \"top\" | \"right\" | \"bottom\" | \"start\" | \"end\" | \"horizontal\" | \"vertical\" | \"all\"\nexport type FlexDirectionString = \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\"\nexport type GutterString = \"column\" | \"row\" | \"all\"\nexport type JustifyString = \"flex-start\" | \"center\" | \"flex-end\" | \"space-between\" | \"space-around\" | \"space-evenly\"\nexport type LogLevelString = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\" | \"fatal\"\nexport type MeasureModeString = \"undefined\" | \"exactly\" | \"at-most\"\nexport type OverflowString = \"visible\" | \"hidden\" | \"scroll\"\nexport type PositionTypeString = \"static\" | \"relative\" | \"absolute\"\nexport type UnitString = \"undefined\" | \"point\" | \"percent\" | \"auto\"\nexport type WrapString = \"no-wrap\" | \"wrap\" | \"wrap-reverse\"\n\nexport function parseAlign(value: string | null | undefined): Align {\n if (value == null) {\n return Align.Auto\n }\n switch (value.toLowerCase()) {\n case \"auto\":\n return Align.Auto\n case \"flex-start\":\n return Align.FlexStart\n case \"center\":\n return Align.Center\n case \"flex-end\":\n return Align.FlexEnd\n case \"stretch\":\n return Align.Stretch\n case \"baseline\":\n return Align.Baseline\n case \"space-between\":\n return Align.SpaceBetween\n case \"space-around\":\n return Align.SpaceAround\n case \"space-evenly\":\n return Align.SpaceEvenly\n default:\n return Align.Auto\n }\n}\n\nexport function parseAlignItems(value: string | null | undefined): Align {\n if (value == null) {\n return Align.Stretch\n }\n switch (value.toLowerCase()) {\n case \"auto\":\n return Align.Auto\n case \"flex-start\":\n return Align.FlexStart\n case \"center\":\n return Align.Center\n case \"flex-end\":\n return Align.FlexEnd\n case \"stretch\":\n return Align.Stretch\n case \"baseline\":\n return Align.Baseline\n case \"space-between\":\n return Align.SpaceBetween\n case \"space-around\":\n return Align.SpaceAround\n case \"space-evenly\":\n return Align.SpaceEvenly\n default:\n return Align.Stretch\n }\n}\n\nexport function parseBoxSizing(value: string): BoxSizing {\n if (value == null) {\n return BoxSizing.BorderBox\n }\n switch (value.toLowerCase()) {\n case \"border-box\":\n return BoxSizing.BorderBox\n case \"content-box\":\n return BoxSizing.ContentBox\n default:\n return BoxSizing.BorderBox\n }\n}\n\nexport function parseDimension(value: string): Dimension {\n if (value == null) {\n return Dimension.Width\n }\n switch (value.toLowerCase()) {\n case \"width\":\n return Dimension.Width\n case \"height\":\n return Dimension.Height\n default:\n return Dimension.Width\n }\n}\n\nexport function parseDirection(value: string): Direction {\n if (value == null) {\n return Direction.LTR\n }\n switch (value.toLowerCase()) {\n case \"inherit\":\n return Direction.Inherit\n case \"ltr\":\n return Direction.LTR\n case \"rtl\":\n return Direction.RTL\n default:\n return Direction.LTR\n }\n}\n\nexport function parseDisplay(value: string): Display {\n if (value == null) {\n return Display.Flex\n }\n switch (value.toLowerCase()) {\n case \"flex\":\n return Display.Flex\n case \"none\":\n return Display.None\n case \"contents\":\n return Display.Contents\n default:\n return Display.Flex\n }\n}\n\nexport function parseEdge(value: string): Edge {\n if (value == null) {\n return Edge.All\n }\n switch (value.toLowerCase()) {\n case \"left\":\n return Edge.Left\n case \"top\":\n return Edge.Top\n case \"right\":\n return Edge.Right\n case \"bottom\":\n return Edge.Bottom\n case \"start\":\n return Edge.Start\n case \"end\":\n return Edge.End\n case \"horizontal\":\n return Edge.Horizontal\n case \"vertical\":\n return Edge.Vertical\n case \"all\":\n return Edge.All\n default:\n return Edge.All\n }\n}\n\nexport function parseFlexDirection(value: string | null | undefined): FlexDirection {\n if (value == null) {\n return FlexDirection.Column\n }\n switch (value.toLowerCase()) {\n case \"column\":\n return FlexDirection.Column\n case \"column-reverse\":\n return FlexDirection.ColumnReverse\n case \"row\":\n return FlexDirection.Row\n case \"row-reverse\":\n return FlexDirection.RowReverse\n default:\n return FlexDirection.Column\n }\n}\n\nexport function parseGutter(value: string): Gutter {\n if (value == null) {\n return Gutter.All\n }\n switch (value.toLowerCase()) {\n case \"column\":\n return Gutter.Column\n case \"row\":\n return Gutter.Row\n case \"all\":\n return Gutter.All\n default:\n return Gutter.All\n }\n}\n\nexport function parseJustify(value: string | null | undefined): Justify {\n if (value == null) {\n return Justify.FlexStart\n }\n switch (value.toLowerCase()) {\n case \"flex-start\":\n return Justify.FlexStart\n case \"center\":\n return Justify.Center\n case \"flex-end\":\n return Justify.FlexEnd\n case \"space-between\":\n return Justify.SpaceBetween\n case \"space-around\":\n return Justify.SpaceAround\n case \"space-evenly\":\n return Justify.SpaceEvenly\n default:\n return Justify.FlexStart\n }\n}\n\nexport function parseLogLevel(value: string): LogLevel {\n if (value == null) {\n return LogLevel.Info\n }\n switch (value.toLowerCase()) {\n case \"error\":\n return LogLevel.Error\n case \"warn\":\n return LogLevel.Warn\n case \"info\":\n return LogLevel.Info\n case \"debug\":\n return LogLevel.Debug\n case \"verbose\":\n return LogLevel.Verbose\n case \"fatal\":\n return LogLevel.Fatal\n default:\n return LogLevel.Info\n }\n}\n\nexport function parseMeasureMode(value: string): MeasureMode {\n if (value == null) {\n return MeasureMode.Undefined\n }\n switch (value.toLowerCase()) {\n case \"undefined\":\n return MeasureMode.Undefined\n case \"exactly\":\n return MeasureMode.Exactly\n case \"at-most\":\n return MeasureMode.AtMost\n default:\n return MeasureMode.Undefined\n }\n}\n\nexport function parseOverflow(value: string | null | undefined): Overflow {\n if (value == null) {\n return Overflow.Visible\n }\n switch (value.toLowerCase()) {\n case \"visible\":\n return Overflow.Visible\n case \"hidden\":\n return Overflow.Hidden\n case \"scroll\":\n return Overflow.Scroll\n default:\n return Overflow.Visible\n }\n}\n\nexport function parsePositionType(value: string | null | undefined): PositionType {\n if (value == null) {\n return PositionType.Relative\n }\n switch (value.toLowerCase()) {\n case \"static\":\n return PositionType.Static\n case \"relative\":\n return PositionType.Relative\n case \"absolute\":\n return PositionType.Absolute\n default:\n return PositionType.Static\n }\n}\n\nexport function parseUnit(value: string): Unit {\n if (value == null) {\n return Unit.Point\n }\n switch (value.toLowerCase()) {\n case \"undefined\":\n return Unit.Undefined\n case \"point\":\n return Unit.Point\n case \"percent\":\n return Unit.Percent\n case \"auto\":\n return Unit.Auto\n default:\n return Unit.Point\n }\n}\n\nexport function parseWrap(value: string | null | undefined): Wrap {\n if (value == null) {\n return Wrap.NoWrap\n }\n switch (value.toLowerCase()) {\n case \"no-wrap\":\n return Wrap.NoWrap\n case \"wrap\":\n return Wrap.Wrap\n case \"wrap-reverse\":\n return Wrap.WrapReverse\n default:\n return Wrap.NoWrap\n }\n}\n", "// Browser stub for node:util\nexport function inspect(obj: any, _options?: any): string {\n try {\n return JSON.stringify(obj, null, 2)\n } catch {\n return String(obj)\n }\n}\n\nexport function format(fmt: string, ...args: any[]): string {\n let i = 0\n return fmt.replace(/%[sdjifoO%]/g, (match) => {\n if (match === \"%%\") return \"%\"\n if (i >= args.length) return match\n return String(args[i++])\n })\n}\n\nexport function promisify(fn: Function): Function {\n return (...args: any[]) =>\n new Promise((resolve, reject) => {\n fn(...args, (err: any, result: any) => {\n if (err) reject(err)\n else resolve(result)\n })\n })\n}\n\nexport function isDeepStrictEqual(a: any, b: any): boolean {\n return JSON.stringify(a) === JSON.stringify(b)\n}\n\nexport default { inspect, format, promisify, isDeepStrictEqual }\n", "import { isRenderable, Renderable, type RenderableOptions } from \"../../Renderable\"\nimport type { RenderContext } from \"../../types\"\nimport util from \"node:util\"\n\nexport type VChild = VNode | Renderable | VChild[] | null | undefined | false\n\nexport interface PendingCall {\n method: string\n args: any[]\n isProperty?: boolean\n}\n\nconst BrandedVNode: unique symbol = Symbol.for(\"@opentui/core/VNode\")\n\nexport interface VNode<P = any, C = VChild[]> {\n [BrandedVNode]: true\n type: Construct<P>\n props?: P\n children?: C\n __delegateMap?: Record<string, string>\n __pendingCalls?: PendingCall[]\n}\n\n// Type that represents a VNode with Renderable methods available for chaining\nexport type ProxiedVNode<TCtor extends RenderableConstructor<any>> = VNode<\n TCtor extends RenderableConstructor<infer P> ? P : any\n> & {\n [K in keyof InstanceType<TCtor>]: InstanceType<TCtor>[K] extends (...args: infer Args) => any\n ? (...args: Args) => ProxiedVNode<TCtor>\n : InstanceType<TCtor>[K]\n}\n\nexport interface RenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>> {\n new (ctx: RenderContext, options: P): Renderable\n}\n\nexport type FunctionalConstruct<P = any> = (props: P, children?: VChild[]) => VNode\n\nexport type Construct<P = any> =\n | RenderableConstructor<P extends RenderableOptions<any> ? P : never>\n | FunctionalConstruct<P>\n\nfunction isRenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>>(\n value: any,\n): value is RenderableConstructor<P> {\n return typeof value === \"function\" && value.prototype && Renderable.prototype.isPrototypeOf(value.prototype)\n}\n\nfunction flattenChildren(children: VChild[]): VChild[] {\n const result: VChild[] = []\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...flattenChildren(child))\n } else if (child !== null && child !== undefined && child !== false) {\n result.push(child)\n }\n }\n return result\n}\n\n// Overloads for proper typing\nexport function h<TCtor extends RenderableConstructor<any>>(\n type: TCtor,\n props?: TCtor extends RenderableConstructor<infer P> ? P : never,\n ...children: VChild[]\n): ProxiedVNode<TCtor>\nexport function h<P>(type: FunctionalConstruct<P>, props?: P, ...children: VChild[]): VNode<P>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): VNode<P> | ProxiedVNode<any>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): any {\n if (typeof type !== \"function\") {\n throw new TypeError(\"h() received an invalid vnode type\")\n }\n\n const vnode: VNode<P> = {\n [BrandedVNode]: true,\n type,\n props,\n children: flattenChildren(children),\n __pendingCalls: [],\n }\n\n if (isRenderableConstructor(type)) {\n return new Proxy(vnode, {\n get(target, prop, receiver) {\n // Return VNode properties directly\n if (prop in target) {\n return Reflect.get(target, prop, receiver)\n }\n\n if (typeof prop === \"string\") {\n const prototype = type.prototype\n const hasMethod =\n prototype &&\n (typeof prototype[prop] === \"function\" ||\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop))\n\n if (hasMethod) {\n return (...args: any[]) => {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args })\n return target\n }\n }\n }\n\n return Reflect.get(target, prop, receiver)\n },\n\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && isRenderableConstructor(type)) {\n const prototype = type.prototype\n const descriptor =\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop)\n\n if (descriptor && descriptor.set) {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args: [value], isProperty: true })\n return true\n }\n }\n\n return Reflect.set(target, prop, value, receiver)\n },\n })\n }\n\n return vnode\n}\n\nexport function isVNode(node: any): node is VNode {\n return node && node[BrandedVNode]\n}\n\nexport function maybeMakeRenderable(\n ctx: RenderContext,\n node: Renderable | VNode<any, any[]> | unknown,\n): Renderable | null {\n if (isRenderable(node)) return node\n if (isVNode(node)) return instantiate(ctx, node)\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"maybeMakeRenderable received an invalid node\", util.inspect(node, { depth: 2 }))\n }\n return null\n}\n\nexport function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(\n instance: T,\n delegateMap: Record<string, string> | undefined,\n): T {\n if (!delegateMap || Object.keys(delegateMap).length === 0) return instance\n\n const descendantCache = new Map<string, Renderable | undefined>()\n\n const getDescendant = (id: string): Renderable | undefined => {\n if (descendantCache.has(id)) {\n const cached = descendantCache.get(id)\n if (cached !== undefined) {\n return cached\n }\n }\n const descendant = (instance as Renderable).findDescendantById(id)\n if (descendant) {\n descendantCache.set(id, descendant)\n }\n return descendant\n }\n\n const proxy = new Proxy(instance as any, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n const value = (host as any)[prop]\n if (typeof value === \"function\") {\n return value.bind(host)\n }\n return value\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n return Reflect.set(host as any, prop, value)\n }\n }\n return Reflect.set(target, prop, value, receiver)\n },\n })\n return proxy\n}\n\nexport type InstantiateFn<NodeType extends VNode | Renderable> = Renderable & { __node?: NodeType }\n\nexport function instantiate<NodeType extends VNode | Renderable>(\n ctx: RenderContext,\n node: NodeType,\n): InstantiateFn<NodeType> {\n if (isRenderable(node)) return node\n\n if (!node || typeof node !== \"object\") {\n throw new TypeError(\"mount() received an invalid vnode\")\n }\n\n const vnode = node as VNode\n const { type, props } = vnode\n const children = flattenChildren(vnode.children || [])\n const delegateMap = (vnode as any).__delegateMap as Record<string, string> | undefined\n\n if (isRenderableConstructor(type)) {\n const instance = new type(ctx, (props || {}) as any)\n\n for (const child of children) {\n if (isRenderable(child)) {\n instance.add(child)\n } else {\n const mounted = instantiate(ctx, child as NodeType)\n instance.add(mounted)\n }\n }\n\n const delegatedInstance = wrapWithDelegates(instance, delegateMap)\n\n const pendingCalls = (vnode as any).__pendingCalls as PendingCall[] | undefined\n if (pendingCalls) {\n for (const call of pendingCalls) {\n if (call.isProperty) {\n ;(delegatedInstance as any)[call.method] = call.args[0]\n } else {\n ;(delegatedInstance as any)[call.method].apply(delegatedInstance, call.args)\n }\n }\n }\n\n return delegatedInstance\n }\n\n // Functional construct: resolve to a concrete vnode and mount it\n const resolved = (type as FunctionalConstruct)(props || ({} as any), children)\n const inst = instantiate(ctx, resolved)\n\n return wrapWithDelegates(inst, delegateMap) as InstantiateFn<NodeType>\n}\n\nexport type DelegateMap<T> = Partial<Record<keyof T, string>>\n\nexport type ValidateShape<Given, AllowedKeys> = {\n [K in keyof Given]: K extends keyof AllowedKeys ? NonNullable<Given[K]> : never\n}\n\ntype InferNode<T> = T extends InstantiateFn<infer U> ? U : never\n\nexport function delegate<\n Factory extends InstantiateFn<any>,\n InnerNode extends InferNode<Factory>,\n TargetMap extends Record<keyof InnerNode, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: Factory): Renderable\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n TargetMap extends Record<keyof InstanceType<ConstructorType>, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: ProxiedVNode<ConstructorType>): ProxiedVNode<ConstructorType>\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n const Mapping extends DelegateMap<InstanceType<ConstructorType>>,\n>(mapping: ValidateShape<Mapping, string>, vnode: VNode & { type: ConstructorType }): VNode\n\n/**\n * Controlled delegation that routes selected properties/methods\n * to a descendant renderable identified by ID.\n */\nexport function delegate<NodeType extends VNode | Renderable | InstantiateFn<any>>(\n mapping: Record<string, string>,\n vnode: NodeType,\n): VNode | Renderable {\n if (isRenderable(vnode)) {\n return wrapWithDelegates(vnode, mapping)\n }\n if (!vnode || typeof vnode !== \"object\") return vnode\n vnode.__delegateMap = { ...(vnode.__delegateMap || {}), ...mapping }\n return vnode\n}\n", "import type { RenderableOptions, Renderable } from \"../Renderable\"\nimport type { PositionTypeString, OverflowString } from \"./yoga.options\"\n\nexport function validateOptions(id: string, options: RenderableOptions<Renderable>): void {\n if (typeof options.width === \"number\") {\n if (options.width < 0) {\n throw new TypeError(`Invalid width for Renderable ${id}: ${options.width}`)\n }\n }\n if (typeof options.height === \"number\") {\n if (options.height < 0) {\n throw new TypeError(`Invalid height for Renderable ${id}: ${options.height}`)\n }\n }\n}\n\nexport function isValidPercentage(value: any): value is `${number}%` {\n if (typeof value === \"string\" && value.endsWith(\"%\")) {\n const numPart = value.slice(0, -1)\n const num = parseFloat(numPart)\n return !Number.isNaN(num)\n }\n return false\n}\n\nexport function isMarginType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPaddingType(value: any): value is number | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionTypeType(value: any): value is PositionTypeString {\n return value === \"relative\" || value === \"absolute\"\n}\n\nexport function isOverflowType(value: any): value is OverflowString {\n return value === \"visible\" || value === \"hidden\" || value === \"scroll\"\n}\n\nexport function isDimensionType(value: any): value is number | \"auto\" | `${number}%` {\n return isPositionType(value)\n}\n\nexport function isFlexBasisType(value: any): value is number | \"auto\" | undefined {\n if (value === undefined || value === \"auto\") {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return false\n}\n\nexport function isSizeType(value: any): value is number | `${number}%` | undefined {\n if (value === undefined) {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n", "import { EventEmitter } from \"events\"\nimport Yoga, { Direction, Display, Edge, FlexDirection, type Config, type Node as YogaNode } from \"yoga-layout\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport type { KeyEvent, PasteEvent } from \"./lib/KeyHandler\"\nimport type { MouseEventType } from \"./lib/parse.mouse\"\nimport type { Selection } from \"./lib/selection\"\nimport {\n parseAlign,\n parseAlignItems,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n type AlignString,\n type FlexDirectionString,\n type JustifyString,\n type OverflowString,\n type PositionTypeString,\n type WrapString,\n} from \"./lib/yoga.options\"\nimport { maybeMakeRenderable, type VNode } from \"./renderables/composition/vnode\"\nimport type { MouseEvent } from \"./renderer\"\nimport type { RenderContext } from \"./types\"\nimport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"./lib/renderable.validations\"\n\nconst BrandedRenderable: unique symbol = Symbol.for(\"@opentui/core/Renderable\")\n\nexport enum LayoutEvents {\n LAYOUT_CHANGED = \"layout-changed\",\n ADDED = \"added\",\n REMOVED = \"removed\",\n RESIZED = \"resized\",\n}\n\nexport enum RenderableEvents {\n FOCUSED = \"focused\",\n BLURRED = \"blurred\",\n}\n\nexport interface Position {\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n}\n\nexport interface BaseRenderableOptions {\n id?: string\n}\n\nexport interface LayoutOptions extends BaseRenderableOptions {\n flexGrow?: number\n flexShrink?: number\n flexDirection?: FlexDirectionString\n flexWrap?: WrapString\n alignItems?: AlignString\n justifyContent?: JustifyString\n alignSelf?: AlignString\n flexBasis?: number | \"auto\" | undefined\n position?: PositionTypeString\n overflow?: OverflowString\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n minWidth?: number | \"auto\" | `${number}%`\n minHeight?: number | \"auto\" | `${number}%`\n maxWidth?: number | \"auto\" | `${number}%`\n maxHeight?: number | \"auto\" | `${number}%`\n margin?: number | \"auto\" | `${number}%`\n marginX?: number | \"auto\" | `${number}%`\n marginY?: number | \"auto\" | `${number}%`\n marginTop?: number | \"auto\" | `${number}%`\n marginRight?: number | \"auto\" | `${number}%`\n marginBottom?: number | \"auto\" | `${number}%`\n marginLeft?: number | \"auto\" | `${number}%`\n padding?: number | `${number}%`\n paddingX?: number | `${number}%`\n paddingY?: number | `${number}%`\n paddingTop?: number | `${number}%`\n paddingRight?: number | `${number}%`\n paddingBottom?: number | `${number}%`\n paddingLeft?: number | `${number}%`\n enableLayout?: boolean\n}\n\nexport interface RenderableOptions<T extends BaseRenderable = BaseRenderable> extends Partial<LayoutOptions> {\n width?: number | \"auto\" | `${number}%`\n height?: number | \"auto\" | `${number}%`\n zIndex?: number\n visible?: boolean\n buffered?: boolean\n live?: boolean\n opacity?: number\n\n // hooks for custom render logic\n renderBefore?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n renderAfter?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n\n // catch all\n onMouse?: (this: T, event: MouseEvent) => void\n\n onMouseDown?: (this: T, event: MouseEvent) => void\n onMouseUp?: (this: T, event: MouseEvent) => void\n onMouseMove?: (this: T, event: MouseEvent) => void\n onMouseDrag?: (this: T, event: MouseEvent) => void\n onMouseDragEnd?: (this: T, event: MouseEvent) => void\n onMouseDrop?: (this: T, event: MouseEvent) => void\n onMouseOver?: (this: T, event: MouseEvent) => void\n onMouseOut?: (this: T, event: MouseEvent) => void\n onMouseScroll?: (this: T, event: MouseEvent) => void\n\n onPaste?: (this: T, event: PasteEvent) => void\n\n onKeyDown?: (key: KeyEvent) => void\n\n onSizeChange?: (this: T) => void\n}\n\nexport function isRenderable(obj: any): obj is Renderable {\n return !!obj?.[BrandedRenderable]\n}\n\nexport abstract class BaseRenderable extends EventEmitter {\n [BrandedRenderable] = true\n\n private static renderableNumber = 1\n protected _id: string\n public readonly num: number\n protected _dirty: boolean = false\n public parent: BaseRenderable | null = null\n protected _visible: boolean = true\n\n constructor(options: BaseRenderableOptions) {\n super()\n this.num = BaseRenderable.renderableNumber++\n this._id = options.id ?? `renderable-${this.num}`\n }\n\n public abstract add(obj: BaseRenderable | unknown, index?: number): number\n public abstract remove(id: string): void\n public abstract insertBefore(obj: BaseRenderable | unknown, anchor: BaseRenderable | unknown): void\n public abstract getChildren(): BaseRenderable[]\n public abstract getChildrenCount(): number\n public abstract getRenderable(id: string): BaseRenderable | undefined\n public abstract requestRender(): void\n public abstract findDescendantById(id: string): BaseRenderable | undefined\n\n public get id(): string {\n return this._id\n }\n\n public set id(value: string) {\n this._id = value\n }\n\n public get isDirty(): boolean {\n return this._dirty\n }\n\n protected markClean(): void {\n this._dirty = false\n }\n\n protected markDirty(): void {\n this._dirty = true\n }\n\n public destroy(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public destroyRecursively(): void {\n // Default implementation: do nothing\n // Override this method to provide custom destruction logic\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public set visible(value: boolean) {\n this._visible = value\n }\n}\n\nconst yogaConfig: Config = Yoga.Config.create()\nyogaConfig.setUseWebDefaults(false)\nyogaConfig.setPointScaleFactor(1)\n\nexport abstract class Renderable extends BaseRenderable {\n static renderablesByNumber: Map<number, Renderable> = new Map()\n\n protected _isDestroyed: boolean = false\n protected _ctx: RenderContext\n protected _translateX: number = 0\n protected _translateY: number = 0\n protected _x: number = 0\n protected _y: number = 0\n protected _width: number | \"auto\" | `${number}%`\n protected _height: number | \"auto\" | `${number}%`\n protected _widthValue: number = 0\n protected _heightValue: number = 0\n private _zIndex: number\n public selectable: boolean = false\n protected buffered: boolean\n protected frameBuffer: OptimizedBuffer | null = null\n\n protected _focusable: boolean = false\n protected _focused: boolean = false\n protected keypressHandler: ((key: KeyEvent) => void) | null = null\n protected pasteHandler: ((event: PasteEvent) => void) | null = null\n\n private _live: boolean = false\n protected _liveCount: number = 0\n\n private _sizeChangeListener: (() => void) | undefined = undefined\n private _mouseListener: ((event: MouseEvent) => void) | null = null\n private _mouseListeners: Partial<Record<MouseEventType, (event: MouseEvent) => void>> = {}\n private _pasteListener: ((event: PasteEvent) => void) | undefined = undefined\n private _keyListeners: Partial<Record<\"down\", (key: KeyEvent) => void>> = {}\n\n protected yogaNode: YogaNode\n protected _positionType: PositionTypeString = \"relative\"\n protected _overflow: OverflowString = \"visible\"\n protected _position: Position = {}\n protected _opacity: number = 1.0\n private _flexShrink: number = 1\n\n private renderableMapById: Map<string, Renderable> = new Map()\n protected _childrenInLayoutOrder: Renderable[] = []\n protected _childrenInZIndexOrder: Renderable[] = []\n private needsZIndexSort: boolean = false\n public parent: Renderable | null = null\n\n private childrenPrimarySortDirty: boolean = true\n private childrenSortedByPrimaryAxis: Renderable[] = []\n private _shouldUpdateBefore: Set<Renderable> = new Set()\n\n public onLifecyclePass: (() => void) | null = null\n\n public renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n public renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n\n constructor(ctx: RenderContext, options: RenderableOptions<any>) {\n super(options)\n\n this._ctx = ctx\n Renderable.renderablesByNumber.set(this.num, this)\n\n validateOptions(this.id, options)\n\n this.renderBefore = options.renderBefore\n this.renderAfter = options.renderAfter\n\n this._width = options.width ?? \"auto\"\n this._height = options.height ?? \"auto\"\n\n if (typeof this._width === \"number\") {\n this._widthValue = this._width\n }\n if (typeof this._height === \"number\") {\n this._heightValue = this._height\n }\n\n this._zIndex = options.zIndex ?? 0\n this._visible = options.visible !== false\n this.buffered = options.buffered ?? false\n this._live = options.live ?? false\n this._liveCount = this._live && this._visible ? 1 : 0\n this._opacity = options.opacity !== undefined ? Math.max(0, Math.min(1, options.opacity)) : 1.0\n\n // TODO: use a global yoga config\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None)\n this.setupYogaProperties(options)\n\n this.applyEventOptions(options)\n\n if (this.buffered) {\n this.createFrameBuffer()\n }\n }\n\n public override get id() {\n return this._id\n }\n\n public override set id(value: string) {\n if (this.parent) {\n this.parent.renderableMapById.delete(this.id)\n this.parent.renderableMapById.set(value, this)\n }\n super.id = value\n }\n\n public get focusable(): boolean {\n return this._focusable\n }\n\n public set focusable(value: boolean) {\n this._focusable = value\n }\n\n public get ctx(): RenderContext {\n return this._ctx\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public get primaryAxis(): \"row\" | \"column\" {\n const dir = this.yogaNode.getFlexDirection()\n return dir === 2 || dir === 3 ? \"row\" : \"column\"\n }\n\n public set visible(value: boolean) {\n if (this._visible === value) return\n\n const wasVisible = this._visible\n this._visible = value\n this.yogaNode.setDisplay(value ? Display.Flex : Display.None)\n\n if (this._live) {\n if (!wasVisible && value) {\n this.propagateLiveCount(1)\n } else if (wasVisible && !value) {\n this.propagateLiveCount(-1)\n }\n }\n\n if (this._focused) {\n this.blur()\n }\n this.requestRender()\n }\n\n public get opacity(): number {\n return this._opacity\n }\n\n public set opacity(value: number) {\n const clamped = Math.max(0, Math.min(1, value))\n if (this._opacity !== clamped) {\n this._opacity = clamped\n this.requestRender()\n }\n }\n\n public hasSelection(): boolean {\n return false\n }\n\n public onSelectionChanged(selection: Selection | null): boolean {\n // Default implementation: do nothing\n // Override this method to provide custom selection handling\n return false\n }\n\n public getSelectedText(): string {\n return \"\"\n }\n\n public shouldStartSelection(x: number, y: number): boolean {\n return false\n }\n\n public focus(): void {\n if (this._isDestroyed || this._focused || !this._focusable) return\n\n this._ctx.focusRenderable(this)\n this._focused = true\n this.requestRender()\n\n this.keypressHandler = (key: KeyEvent) => {\n if (this._isDestroyed) return\n this._keyListeners[\"down\"]?.(key)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!key.defaultPrevented && this.handleKeyPress) {\n this.handleKeyPress(key)\n }\n }\n\n this.pasteHandler = (event: PasteEvent) => {\n if (this._isDestroyed) return\n this._pasteListener?.call(this, event)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!event.defaultPrevented && this.handlePaste) {\n this.handlePaste(event)\n }\n }\n\n this.ctx._internalKeyInput.onInternal(\"keypress\", this.keypressHandler)\n this.ctx._internalKeyInput.onInternal(\"paste\", this.pasteHandler)\n this.emit(RenderableEvents.FOCUSED)\n }\n\n public blur(): void {\n if (!this._focused || !this._focusable) return\n\n this._focused = false\n this.requestRender()\n\n if (this.keypressHandler) {\n this.ctx._internalKeyInput.offInternal(\"keypress\", this.keypressHandler)\n this.keypressHandler = null\n }\n\n if (this.pasteHandler) {\n this.ctx._internalKeyInput.offInternal(\"paste\", this.pasteHandler)\n this.pasteHandler = null\n }\n\n this.emit(RenderableEvents.BLURRED)\n }\n\n public get focused(): boolean {\n return this._focused\n }\n\n public get live(): boolean {\n return this._live\n }\n\n public get liveCount(): number {\n return this._liveCount\n }\n\n public set live(value: boolean) {\n if (this._live === value) return\n\n this._live = value\n\n if (this._visible) {\n const delta = value ? 1 : -1\n this.propagateLiveCount(delta)\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n this._liveCount += delta\n this.parent?.propagateLiveCount(delta)\n }\n\n public handleKeyPress?(key: KeyEvent): boolean\n public handlePaste?(event: PasteEvent): void\n\n public findDescendantById(id: string): Renderable | undefined {\n for (const child of this._childrenInLayoutOrder) {\n if (child.id === id) return child\n if (isRenderable(child)) {\n const found = child.findDescendantById(id)\n if (found) return found\n }\n }\n return undefined\n }\n\n public requestRender() {\n this.markDirty()\n this._ctx.requestRender()\n }\n\n public get translateX(): number {\n return this._translateX\n }\n\n public set translateX(value: number) {\n if (this._translateX === value) return\n this._translateX = value\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n this.requestRender()\n }\n\n public get translateY(): number {\n return this._translateY\n }\n\n public set translateY(value: number) {\n if (this._translateY === value) return\n this._translateY = value\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n this.requestRender()\n }\n\n public get x(): number {\n if (this.parent) {\n return this.parent.x + this._x + this._translateX\n }\n return this._x + this._translateX\n }\n\n public set x(value: number) {\n this.left = value\n }\n\n public get top(): number | \"auto\" | `${number}%` | undefined {\n return this._position.top\n }\n\n public set top(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ top: value })\n }\n }\n\n public get right(): number | \"auto\" | `${number}%` | undefined {\n return this._position.right\n }\n\n public set right(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ right: value })\n }\n }\n\n public get bottom(): number | \"auto\" | `${number}%` | undefined {\n return this._position.bottom\n }\n\n public set bottom(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ bottom: value })\n }\n }\n\n public get left(): number | \"auto\" | `${number}%` | undefined {\n return this._position.left\n }\n\n public set left(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ left: value })\n }\n }\n\n public get y(): number {\n if (this.parent) {\n return this.parent.y + this._y + this._translateY\n }\n return this._y + this._translateY\n }\n\n public set y(value: number) {\n this.top = value\n }\n\n public get width(): number {\n return this._widthValue\n }\n\n public set width(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._width = value\n this.yogaNode.setWidth(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\n this.requestRender()\n }\n }\n\n public get height(): number {\n return this._heightValue\n }\n\n public set height(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._height = value\n this.yogaNode.setHeight(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\n this.requestRender()\n }\n }\n\n public get zIndex(): number {\n return this._zIndex\n }\n\n public set zIndex(value: number) {\n if (this._zIndex !== value) {\n this._zIndex = value\n this.parent?.requestZIndexSort()\n this.requestRender()\n }\n }\n\n private requestZIndexSort(): void {\n this.needsZIndexSort = true\n }\n\n private ensureZIndexSorted(): void {\n if (this.needsZIndexSort) {\n this._childrenInZIndexOrder.sort((a, b) => (a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0))\n this.needsZIndexSort = false\n }\n }\n\n public getChildrenSortedByPrimaryAxis(): Renderable[] {\n if (\n !this.childrenPrimarySortDirty &&\n this.childrenSortedByPrimaryAxis.length === this._childrenInLayoutOrder.length\n ) {\n return this.childrenSortedByPrimaryAxis\n }\n\n const dir = this.yogaNode.getFlexDirection()\n const axis: \"x\" | \"y\" = dir === 2 || dir === 3 ? \"x\" : \"y\"\n\n const sorted = [...this._childrenInLayoutOrder]\n sorted.sort((a, b) => {\n const va = axis === \"y\" ? a.y : a.x\n const vb = axis === \"y\" ? b.y : b.x\n return va - vb\n })\n\n this.childrenSortedByPrimaryAxis = sorted\n this.childrenPrimarySortDirty = false\n return this.childrenSortedByPrimaryAxis\n }\n\n private setupYogaProperties(options: RenderableOptions<Renderable>): void {\n const node = this.yogaNode\n\n if (isFlexBasisType(options.flexBasis)) {\n node.setFlexBasis(options.flexBasis)\n }\n\n if (isSizeType(options.minWidth)) {\n node.setMinWidth(options.minWidth)\n }\n if (isSizeType(options.minHeight)) {\n node.setMinHeight(options.minHeight)\n }\n\n if (options.flexGrow !== undefined) {\n node.setFlexGrow(options.flexGrow)\n } else {\n node.setFlexGrow(0)\n }\n\n if (options.flexShrink !== undefined) {\n this._flexShrink = options.flexShrink\n node.setFlexShrink(options.flexShrink)\n } else {\n // If explicit numeric width is set, don't shrink by default\n // Otherwise follow web default of 1\n const hasExplicitWidth = typeof options.width === \"number\"\n const hasExplicitHeight = typeof options.height === \"number\"\n this._flexShrink = hasExplicitWidth || hasExplicitHeight ? 0 : 1\n node.setFlexShrink(this._flexShrink)\n }\n\n node.setFlexDirection(parseFlexDirection(options.flexDirection))\n node.setFlexWrap(parseWrap(options.flexWrap))\n node.setAlignItems(parseAlignItems(options.alignItems))\n node.setJustifyContent(parseJustify(options.justifyContent))\n node.setAlignSelf(parseAlign(options.alignSelf))\n\n if (isDimensionType(options.width)) {\n this._width = options.width\n this.yogaNode.setWidth(options.width)\n }\n if (isDimensionType(options.height)) {\n this._height = options.height\n this.yogaNode.setHeight(options.height)\n }\n\n this._positionType = options.position === \"absolute\" ? \"absolute\" : \"relative\"\n if (this._positionType !== \"relative\") {\n node.setPositionType(parsePositionType(this._positionType))\n }\n\n this._overflow = options.overflow === \"hidden\" ? \"hidden\" : options.overflow === \"scroll\" ? \"scroll\" : \"visible\"\n if (this._overflow !== \"visible\") {\n node.setOverflow(parseOverflow(this._overflow))\n }\n\n // TODO: flatten position properties internally as well\n const hasPositionProps =\n options.top !== undefined ||\n options.right !== undefined ||\n options.bottom !== undefined ||\n options.left !== undefined\n if (hasPositionProps) {\n this._position = {\n top: options.top,\n right: options.right,\n bottom: options.bottom,\n left: options.left,\n }\n this.updateYogaPosition(this._position)\n }\n\n if (isSizeType(options.maxWidth)) {\n node.setMaxWidth(options.maxWidth)\n }\n if (isSizeType(options.maxHeight)) {\n node.setMaxHeight(options.maxHeight)\n }\n\n this.setupMarginAndPadding(options)\n }\n\n private setupMarginAndPadding(options: RenderableOptions<Renderable>): void {\n const node = this.yogaNode\n\n if (isMarginType(options.margin)) {\n node.setMargin(Edge.All, options.margin)\n }\n\n if (isMarginType(options.marginX)) {\n node.setMargin(Edge.Horizontal, options.marginX)\n }\n if (isMarginType(options.marginY)) {\n node.setMargin(Edge.Vertical, options.marginY)\n }\n if (isMarginType(options.marginTop)) {\n node.setMargin(Edge.Top, options.marginTop)\n }\n if (isMarginType(options.marginRight)) {\n node.setMargin(Edge.Right, options.marginRight)\n }\n if (isMarginType(options.marginBottom)) {\n node.setMargin(Edge.Bottom, options.marginBottom)\n }\n if (isMarginType(options.marginLeft)) {\n node.setMargin(Edge.Left, options.marginLeft)\n }\n\n if (isPaddingType(options.padding)) {\n node.setPadding(Edge.All, options.padding)\n }\n\n if (isPaddingType(options.paddingX)) {\n node.setPadding(Edge.Horizontal, options.paddingX)\n }\n if (isPaddingType(options.paddingY)) {\n node.setPadding(Edge.Vertical, options.paddingY)\n }\n if (isPaddingType(options.paddingTop)) {\n node.setPadding(Edge.Top, options.paddingTop)\n }\n if (isPaddingType(options.paddingRight)) {\n node.setPadding(Edge.Right, options.paddingRight)\n }\n if (isPaddingType(options.paddingBottom)) {\n node.setPadding(Edge.Bottom, options.paddingBottom)\n }\n if (isPaddingType(options.paddingLeft)) {\n node.setPadding(Edge.Left, options.paddingLeft)\n }\n }\n\n set position(positionType: PositionTypeString | null | undefined) {\n if (!isPositionTypeType(positionType) || this._positionType === positionType) return\n\n this._positionType = positionType\n this.yogaNode.setPositionType(parsePositionType(positionType))\n this.requestRender()\n }\n\n get overflow(): OverflowString {\n return this._overflow\n }\n\n set overflow(overflow: OverflowString | null | undefined) {\n if (!isOverflowType(overflow) || this._overflow === overflow) return\n\n this._overflow = overflow\n this.yogaNode.setOverflow(parseOverflow(overflow))\n this.requestRender()\n }\n\n public setPosition(position: Position): void {\n this._position = { ...this._position, ...position }\n this.updateYogaPosition(position)\n }\n\n private updateYogaPosition(position: Position): void {\n const node = this.yogaNode\n const { top, right, bottom, left } = position\n\n if (isPositionType(top)) {\n if (top === \"auto\") {\n node.setPositionAuto(Edge.Top)\n } else {\n node.setPosition(Edge.Top, top)\n }\n }\n if (isPositionType(right)) {\n if (right === \"auto\") {\n node.setPositionAuto(Edge.Right)\n } else {\n node.setPosition(Edge.Right, right)\n }\n }\n if (isPositionType(bottom)) {\n if (bottom === \"auto\") {\n node.setPositionAuto(Edge.Bottom)\n } else {\n node.setPosition(Edge.Bottom, bottom)\n }\n }\n if (isPositionType(left)) {\n if (left === \"auto\") {\n node.setPositionAuto(Edge.Left)\n } else {\n node.setPosition(Edge.Left, left)\n }\n }\n this.requestRender()\n }\n\n public set flexGrow(grow: number | null | undefined) {\n if (grow == null) {\n this.yogaNode.setFlexGrow(0)\n } else {\n this.yogaNode.setFlexGrow(grow)\n }\n this.requestRender()\n }\n\n public set flexShrink(shrink: number | null | undefined) {\n const value = shrink == null ? 1 : shrink\n this._flexShrink = value\n this.yogaNode.setFlexShrink(value)\n this.requestRender()\n }\n\n public set flexDirection(direction: FlexDirectionString | null | undefined) {\n this.yogaNode.setFlexDirection(parseFlexDirection(direction))\n this.requestRender()\n }\n\n public set flexWrap(wrap: WrapString | null | undefined) {\n this.yogaNode.setFlexWrap(parseWrap(wrap))\n this.requestRender()\n }\n\n public set alignItems(alignItems: AlignString | null | undefined) {\n this.yogaNode.setAlignItems(parseAlignItems(alignItems))\n this.requestRender()\n }\n\n public set justifyContent(justifyContent: JustifyString | null | undefined) {\n this.yogaNode.setJustifyContent(parseJustify(justifyContent))\n this.requestRender()\n }\n\n public set alignSelf(alignSelf: AlignString | null | undefined) {\n this.yogaNode.setAlignSelf(parseAlign(alignSelf))\n this.requestRender()\n }\n\n public set flexBasis(basis: number | \"auto\" | null | undefined) {\n if (isFlexBasisType(basis)) {\n this.yogaNode.setFlexBasis(basis)\n this.requestRender()\n }\n }\n\n public set minWidth(minWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(minWidth)) {\n this.yogaNode.setMinWidth(minWidth)\n this.requestRender()\n }\n }\n\n public set maxWidth(maxWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(maxWidth)) {\n this.yogaNode.setMaxWidth(maxWidth)\n this.requestRender()\n }\n }\n\n public set minHeight(minHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(minHeight)) {\n this.yogaNode.setMinHeight(minHeight)\n this.requestRender()\n }\n }\n\n public set maxHeight(maxHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(maxHeight)) {\n this.yogaNode.setMaxHeight(maxHeight)\n this.requestRender()\n }\n }\n\n public set margin(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.All, margin)\n this.requestRender()\n }\n }\n\n public set marginX(marginX: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginX)) {\n this.yogaNode.setMargin(Edge.Horizontal, marginX)\n this.requestRender()\n }\n }\n\n public set marginY(marginY: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginY)) {\n this.yogaNode.setMargin(Edge.Vertical, marginY)\n this.requestRender()\n }\n }\n\n public set marginTop(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Top, margin)\n this.requestRender()\n }\n }\n\n public set marginRight(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Right, margin)\n this.requestRender()\n }\n }\n\n public set marginBottom(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Bottom, margin)\n this.requestRender()\n }\n }\n\n public set marginLeft(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Left, margin)\n this.requestRender()\n }\n }\n\n public set padding(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.All, padding)\n this.requestRender()\n }\n }\n\n public set paddingX(paddingX: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingX)) {\n this.yogaNode.setPadding(Edge.Horizontal, paddingX)\n this.requestRender()\n }\n }\n\n public set paddingY(paddingY: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingY)) {\n this.yogaNode.setPadding(Edge.Vertical, paddingY)\n this.requestRender()\n }\n }\n\n public set paddingTop(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Top, padding)\n this.requestRender()\n }\n }\n\n public set paddingRight(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Right, padding)\n this.requestRender()\n }\n }\n\n public set paddingBottom(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Bottom, padding)\n this.requestRender()\n }\n }\n\n public set paddingLeft(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Left, padding)\n this.requestRender()\n }\n }\n\n public getLayoutNode(): YogaNode {\n return this.yogaNode\n }\n\n public updateFromLayout(): void {\n const layout = this.yogaNode.getComputedLayout()\n\n const oldX = this._x\n const oldY = this._y\n const oldWidth = this._widthValue\n const oldHeight = this._heightValue\n\n this._x = layout.left\n this._y = layout.top\n\n const newWidth = Math.max(layout.width, 1)\n const newHeight = Math.max(layout.height, 1)\n const sizeChanged = oldWidth !== newWidth || oldHeight !== newHeight\n\n this._widthValue = newWidth\n this._heightValue = newHeight\n\n if (sizeChanged) {\n this.onLayoutResize(newWidth, newHeight)\n }\n\n const positionChanged = oldX !== this._x || oldY !== this._y\n if (positionChanged) {\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n }\n }\n\n protected onLayoutResize(width: number, height: number): void {\n if (this._visible) {\n // TODO: Should probably .markDirty()\n this.handleFrameBufferResize(width, height)\n this.onResize(width, height)\n this.requestRender()\n }\n }\n\n protected handleFrameBufferResize(width: number, height: number): void {\n if (!this.buffered) return\n\n if (width <= 0 || height <= 0) {\n return\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(width, height)\n } else {\n this.createFrameBuffer()\n }\n }\n\n protected createFrameBuffer(): void {\n const w = this.width\n const h = this.height\n\n if (w <= 0 || h <= 0) {\n return\n }\n\n try {\n const widthMethod = this._ctx.widthMethod\n this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true, id: `framebuffer-${this.id}` })\n } catch (error) {\n console.error(`Failed to create frame buffer for ${this.id}:`, error)\n this.frameBuffer = null\n }\n }\n\n /**\n * This will be called during a render pass.\n * Requesting a render during a render pass will drop the requested render.\n * If you need to request a render during a render pass, use process.nextTick.\n */\n protected onResize(width: number, height: number): void {\n this.onSizeChange?.()\n this.emit(\"resize\")\n // Override in subclasses for additional resize logic\n }\n\n private replaceParent(obj: Renderable) {\n if (obj.parent) {\n obj.parent.remove(obj.id)\n }\n obj.parent = this\n }\n\n public add(obj: Renderable | VNode<any, any[]> | unknown, index?: number): number {\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`)\n }\n return -1\n }\n\n const anchorRenderable = index !== undefined ? this._childrenInLayoutOrder[index] : undefined\n\n if (anchorRenderable) {\n return this.insertBefore(renderable, anchorRenderable)\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n const childLayoutNode = renderable.getLayoutNode()\n const insertedIndex = this._childrenInLayoutOrder.length\n this._childrenInLayoutOrder.push(renderable)\n this.yogaNode.insertChild(childLayoutNode, insertedIndex)\n\n this.childrenPrimarySortDirty = true\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number {\n if (!anchor) {\n return this.add(obj)\n }\n\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!isRenderable(anchor)) {\n throw new Error(\"Anchor must be a Renderable\")\n }\n\n if (anchor.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!this.renderableMapById.has(anchor.id)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} does not exist within the parent ${this.id}, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable === anchor || renderable.id === anchor.id) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor is the same as the node ${renderable.id} being inserted, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n this.childrenPrimarySortDirty = true\n\n const anchorIndex = this._childrenInLayoutOrder.indexOf(anchor)\n const insertedIndex = Math.max(0, Math.min(anchorIndex, this._childrenInLayoutOrder.length))\n\n this._childrenInLayoutOrder.splice(insertedIndex, 0, renderable)\n this.yogaNode.insertChild(renderable.getLayoutNode(), insertedIndex)\n\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n // TODO: that naming is meh\n public getRenderable(id: string): Renderable | undefined {\n return this.renderableMapById.get(id)\n }\n\n public remove(id: string): void {\n if (!id) {\n return\n }\n\n if (this.renderableMapById.has(id)) {\n const obj = this.renderableMapById.get(id)\n if (obj) {\n if (obj._liveCount > 0) {\n this.propagateLiveCount(-obj._liveCount)\n }\n\n const childLayoutNode = obj.getLayoutNode()\n this.yogaNode.removeChild(childLayoutNode)\n this.requestRender()\n\n obj.onRemove()\n obj.parent = null\n this._ctx.unregisterLifecyclePass(obj)\n this.renderableMapById.delete(id)\n\n const index = this._childrenInLayoutOrder.findIndex((obj) => obj.id === id)\n if (index !== -1) {\n this._childrenInLayoutOrder.splice(index, 1)\n }\n\n const zIndexIndex = this._childrenInZIndexOrder.findIndex((obj) => obj.id === id)\n if (zIndexIndex !== -1) {\n this._childrenInZIndexOrder.splice(zIndexIndex, 1)\n }\n\n this.childrenPrimarySortDirty = true\n }\n }\n }\n\n protected onRemove(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public getChildren(): Renderable[] {\n return [...this._childrenInLayoutOrder]\n }\n\n public getChildrenCount(): number {\n return this._childrenInLayoutOrder.length\n }\n\n public updateLayout(deltaTime: number, renderList: RenderCommand[] = []): void {\n if (!this.visible) return\n\n this.onUpdate(deltaTime)\n\n // If destroyed during onUpdate, don't add to render list\n if (this._isDestroyed) return\n\n // NOTE: worst case updateFromLayout is called throughout the whole tree,\n // which currently still has yoga performance issues.\n // This can be mitigated at some point when the layout tree moved to native,\n // as in the native yoga tree we can use events during the calculateLayout phase,\n // and anctually know if a child has changed or not.\n // That would allow us to to generate optimised render commands,\n // including the layout updates, in one pass.\n this.updateFromLayout()\n\n // Update newly added children before getting visible children\n // This ensures their positions are current when culling happens\n if (this._shouldUpdateBefore.size > 0) {\n for (const child of this._shouldUpdateBefore) {\n if (!child.isDestroyed) {\n child.updateFromLayout()\n }\n }\n this._shouldUpdateBefore.clear()\n }\n\n // Check again after updateFromLayout, which calls onResize/onSizeChange\n if (this._isDestroyed) return\n\n // Push opacity BEFORE rendering this element so it affects this element and all children\n const shouldPushOpacity = this._opacity < 1.0\n if (shouldPushOpacity) {\n renderList.push({ action: \"pushOpacity\", opacity: this._opacity })\n }\n\n renderList.push({ action: \"render\", renderable: this })\n\n this.ensureZIndexSorted()\n\n const shouldPushScissor = this._overflow !== \"visible\" && this.width > 0 && this.height > 0\n if (shouldPushScissor) {\n const scissorRect = this.getScissorRect()\n renderList.push({\n action: \"pushScissorRect\",\n x: scissorRect.x,\n y: scissorRect.y,\n width: scissorRect.width,\n height: scissorRect.height,\n screenX: this.x,\n screenY: this.y,\n })\n }\n const visibleChildren = this._getVisibleChildren()\n for (const child of this._childrenInZIndexOrder) {\n if (!visibleChildren.includes(child.num)) {\n child.updateFromLayout()\n continue\n }\n child.updateLayout(deltaTime, renderList)\n }\n\n if (shouldPushScissor) {\n renderList.push({ action: \"popScissorRect\" })\n }\n if (shouldPushOpacity) {\n renderList.push({ action: \"popOpacity\" })\n }\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n let renderBuffer = buffer\n if (this.buffered && this.frameBuffer) {\n renderBuffer = this.frameBuffer\n }\n\n if (this.renderBefore) {\n this.renderBefore.call(this, renderBuffer, deltaTime)\n }\n\n this.renderSelf(renderBuffer, deltaTime)\n\n if (this.renderAfter) {\n this.renderAfter.call(this, renderBuffer, deltaTime)\n }\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected _getVisibleChildren(): number[] {\n return this._childrenInZIndexOrder.map((child) => child.num)\n }\n\n protected onUpdate(deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n protected getScissorRect(): { x: number; y: number; width: number; height: number } {\n return {\n x: this.buffered ? 0 : this.x,\n y: this.buffered ? 0 : this.y,\n width: this.width,\n height: this.height,\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n public get isDestroyed(): boolean {\n return this._isDestroyed\n }\n\n public destroy(): void {\n if (this._isDestroyed) {\n return\n }\n\n this._isDestroyed = true\n\n if (this.parent) {\n this.parent.remove(this.id)\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.destroy()\n this.frameBuffer = null\n }\n\n for (const child of this._childrenInLayoutOrder) {\n this.remove(child.id)\n }\n\n this._childrenInLayoutOrder = []\n this.renderableMapById.clear()\n Renderable.renderablesByNumber.delete(this.num)\n\n this.blur()\n this.removeAllListeners()\n\n this.destroySelf()\n\n try {\n this.yogaNode.free()\n } catch (e) {\n // Might be already freed and will throw an error if we try to free it again\n }\n }\n\n public destroyRecursively(): void {\n // Destroy children first to ensure removal as destroy clears child array\n // Make a copy of the children array to avoid iteration issues when children are destroyed\n const children = [...this._childrenInLayoutOrder]\n for (const child of children) {\n child.destroyRecursively()\n }\n this.destroy()\n }\n\n protected destroySelf(): void {\n // Default implementation: do nothing else\n // Override this method to provide custom cleanup\n }\n\n public processMouseEvent(event: MouseEvent): void {\n this._mouseListener?.call(this, event)\n this._mouseListeners[event.type]?.call(this, event)\n this.onMouseEvent(event)\n\n if (this.parent && !event.propagationStopped) {\n this.parent.processMouseEvent(event)\n }\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n // Default implementation: do nothing\n // Override this method to provide custom event handling\n }\n\n public set onMouse(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListener = handler\n else this._mouseListener = null\n }\n\n public set onMouseDown(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"down\"] = handler\n else delete this._mouseListeners[\"down\"]\n }\n\n public set onMouseUp(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"up\"] = handler\n else delete this._mouseListeners[\"up\"]\n }\n\n public set onMouseMove(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"move\"] = handler\n else delete this._mouseListeners[\"move\"]\n }\n\n public set onMouseDrag(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag\"] = handler\n else delete this._mouseListeners[\"drag\"]\n }\n\n public set onMouseDragEnd(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag-end\"] = handler\n else delete this._mouseListeners[\"drag-end\"]\n }\n\n public set onMouseDrop(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drop\"] = handler\n else delete this._mouseListeners[\"drop\"]\n }\n\n public set onMouseOver(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"over\"] = handler\n else delete this._mouseListeners[\"over\"]\n }\n\n public set onMouseOut(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"out\"] = handler\n else delete this._mouseListeners[\"out\"]\n }\n\n public set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"scroll\"] = handler\n else delete this._mouseListeners[\"scroll\"]\n }\n\n public set onPaste(handler: ((event: PasteEvent) => void) | undefined) {\n this._pasteListener = handler\n }\n public get onPaste(): ((event: PasteEvent) => void) | undefined {\n return this._pasteListener\n }\n\n public set onKeyDown(handler: ((key: KeyEvent) => void) | undefined) {\n if (handler) this._keyListeners[\"down\"] = handler\n else delete this._keyListeners[\"down\"]\n }\n public get onKeyDown(): ((key: KeyEvent) => void) | undefined {\n return this._keyListeners[\"down\"]\n }\n\n public set onSizeChange(handler: (() => void) | undefined) {\n this._sizeChangeListener = handler\n }\n public get onSizeChange(): (() => void) | undefined {\n return this._sizeChangeListener\n }\n\n private applyEventOptions(options: RenderableOptions<Renderable>): void {\n this.onMouse = options.onMouse\n this.onMouseDown = options.onMouseDown\n this.onMouseUp = options.onMouseUp\n this.onMouseMove = options.onMouseMove\n this.onMouseDrag = options.onMouseDrag\n this.onMouseDragEnd = options.onMouseDragEnd\n this.onMouseDrop = options.onMouseDrop\n this.onMouseOver = options.onMouseOver\n this.onMouseOut = options.onMouseOut\n this.onMouseScroll = options.onMouseScroll\n this.onPaste = options.onPaste\n this.onKeyDown = options.onKeyDown\n this.onSizeChange = options.onSizeChange\n }\n}\n\ninterface RenderCommandBase {\n action: \"render\" | \"pushScissorRect\" | \"popScissorRect\" | \"pushOpacity\" | \"popOpacity\"\n}\n\ninterface RenderCommandPushScissorRect extends RenderCommandBase {\n action: \"pushScissorRect\"\n x: number\n y: number\n width: number\n height: number\n screenX: number\n screenY: number\n}\n\ninterface RenderCommandPopScissorRect extends RenderCommandBase {\n action: \"popScissorRect\"\n}\n\ninterface RenderCommandRender extends RenderCommandBase {\n action: \"render\"\n renderable: Renderable\n}\n\ninterface RenderCommandPushOpacity extends RenderCommandBase {\n action: \"pushOpacity\"\n opacity: number\n}\n\ninterface RenderCommandPopOpacity extends RenderCommandBase {\n action: \"popOpacity\"\n}\n\nexport type RenderCommand =\n | RenderCommandPushScissorRect\n | RenderCommandPopScissorRect\n | RenderCommandRender\n | RenderCommandPushOpacity\n | RenderCommandPopOpacity\n\nexport class RootRenderable extends Renderable {\n private renderList: RenderCommand[] = []\n\n constructor(ctx: RenderContext) {\n super(ctx, { id: \"__root__\", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true })\n\n if (this.yogaNode) {\n this.yogaNode.free()\n }\n\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.yogaNode.setWidth(ctx.width)\n this.yogaNode.setHeight(ctx.height)\n this.yogaNode.setFlexDirection(FlexDirection.Column)\n\n this.calculateLayout()\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n // 0. Run lifecycle pass\n for (const renderable of this._ctx.getLifecyclePasses()) {\n renderable.onLifecyclePass?.call(renderable)\n }\n\n // NOTE: Strictly speaking, this is a 3-pass rendering process:\n // 1. Calculate layout from root\n // 2. Update layout throughout the tree and collect render list\n // 3. Render all collected renderables\n // Should be 2-pass by hooking into the calculateLayout phase,\n // but that's only possible if we move the layout tree to native.\n\n // 1. Calculate layout from root\n if (this.yogaNode.isDirty()) {\n this.calculateLayout()\n }\n\n // 2. Update layout throughout the tree and collect render list\n this.renderList.length = 0\n this.updateLayout(deltaTime, this.renderList)\n\n // 3. Render all collected renderables\n this._ctx.clearHitGridScissorRects()\n for (let i = 1; i < this.renderList.length; i++) {\n const command = this.renderList[i]\n switch (command.action) {\n case \"render\":\n // Skip if renderable was destroyed during a previous render callback\n if (!command.renderable.isDestroyed) {\n command.renderable.render(buffer, deltaTime)\n }\n break\n case \"pushScissorRect\":\n buffer.pushScissorRect(command.x, command.y, command.width, command.height)\n this._ctx.pushHitGridScissorRect(command.screenX, command.screenY, command.width, command.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n this._ctx.popHitGridScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(command.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n }\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n const oldCount = this._liveCount\n this._liveCount += delta\n\n if (oldCount === 0 && this._liveCount > 0) {\n this._ctx.requestLive()\n } else if (oldCount > 0 && this._liveCount === 0) {\n this._ctx.dropLive()\n }\n }\n\n public calculateLayout(): void {\n this.yogaNode.calculateLayout(this.width, this.height, Direction.LTR)\n this.emit(LayoutEvents.LAYOUT_CHANGED)\n }\n\n public resize(width: number, height: number): void {\n this.width = width\n this.height = height\n\n this.emit(LayoutEvents.RESIZED, { width, height })\n }\n}\n", "import type { ColorInput } from \"./RGBA\"\n\nexport interface BorderCharacters {\n topLeft: string\n topRight: string\n bottomLeft: string\n bottomRight: string\n horizontal: string\n vertical: string\n topT: string\n bottomT: string\n leftT: string\n rightT: string\n cross: string\n}\n\nexport type BorderStyle = \"single\" | \"double\" | \"rounded\" | \"heavy\"\nexport type BorderSides = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nconst VALID_BORDER_STYLES: readonly BorderStyle[] = [\"single\", \"double\", \"rounded\", \"heavy\"] as const\n\nexport function isValidBorderStyle(value: unknown): value is BorderStyle {\n return typeof value === \"string\" && VALID_BORDER_STYLES.includes(value as BorderStyle)\n}\n\nexport function parseBorderStyle(value: unknown, fallback: BorderStyle = \"single\"): BorderStyle {\n if (isValidBorderStyle(value)) {\n return value\n }\n\n if (value !== undefined && value !== null) {\n console.warn(\n `Invalid borderStyle \"${value}\", falling back to \"${fallback}\". Valid values are: ${VALID_BORDER_STYLES.join(\", \")}`,\n )\n }\n return fallback\n}\n\nexport const BorderChars: Record<BorderStyle, BorderCharacters> = {\n single: {\n topLeft: \"\u250C\",\n topRight: \"\u2510\",\n bottomLeft: \"\u2514\",\n bottomRight: \"\u2518\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n double: {\n topLeft: \"\u2554\",\n topRight: \"\u2557\",\n bottomLeft: \"\u255A\",\n bottomRight: \"\u255D\",\n horizontal: \"\u2550\",\n vertical: \"\u2551\",\n topT: \"\u2566\",\n bottomT: \"\u2569\",\n leftT: \"\u2560\",\n rightT: \"\u2563\",\n cross: \"\u256C\",\n },\n rounded: {\n topLeft: \"\u256D\",\n topRight: \"\u256E\",\n bottomLeft: \"\u2570\",\n bottomRight: \"\u256F\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n heavy: {\n topLeft: \"\u250F\",\n topRight: \"\u2513\",\n bottomLeft: \"\u2517\",\n bottomRight: \"\u251B\",\n horizontal: \"\u2501\",\n vertical: \"\u2503\",\n topT: \"\u2533\",\n bottomT: \"\u253B\",\n leftT: \"\u2523\",\n rightT: \"\u252B\",\n cross: \"\u254B\",\n },\n}\n\nexport interface BorderConfig {\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor?: ColorInput\n customBorderChars?: BorderCharacters\n}\n\nexport interface BoxDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor: ColorInput\n customBorderChars?: BorderCharacters\n backgroundColor: ColorInput\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport interface BorderSidesConfig {\n top: boolean\n right: boolean\n bottom: boolean\n left: boolean\n}\n\nexport function getBorderFromSides(sides: BorderSidesConfig): boolean | BorderSides[] {\n const result: BorderSides[] = []\n if (sides.top) result.push(\"top\")\n if (sides.right) result.push(\"right\")\n if (sides.bottom) result.push(\"bottom\")\n if (sides.left) result.push(\"left\")\n return result.length > 0 ? result : false\n}\n\nexport function getBorderSides(border: boolean | BorderSides[]): BorderSidesConfig {\n return border === true\n ? { top: true, right: true, bottom: true, left: true }\n : Array.isArray(border)\n ? {\n top: border.includes(\"top\"),\n right: border.includes(\"right\"),\n bottom: border.includes(\"bottom\"),\n left: border.includes(\"left\"),\n }\n : { top: false, right: false, bottom: false, left: false }\n}\n\n// Convert BorderCharacters to Uint32Array for passing to Zig\nexport function borderCharsToArray(chars: BorderCharacters): Uint32Array {\n const array = new Uint32Array(11)\n array[0] = chars.topLeft.codePointAt(0)!\n array[1] = chars.topRight.codePointAt(0)!\n array[2] = chars.bottomLeft.codePointAt(0)!\n array[3] = chars.bottomRight.codePointAt(0)!\n array[4] = chars.horizontal.codePointAt(0)!\n array[5] = chars.vertical.codePointAt(0)!\n array[6] = chars.topT.codePointAt(0)!\n array[7] = chars.bottomT.codePointAt(0)!\n array[8] = chars.leftT.codePointAt(0)!\n array[9] = chars.rightT.codePointAt(0)!\n array[10] = chars.cross.codePointAt(0)!\n return array\n}\n\n// Pre-converted border character arrays for performance\nexport const BorderCharArrays: Record<BorderStyle, Uint32Array> = {\n single: borderCharsToArray(BorderChars.single),\n double: borderCharsToArray(BorderChars.double),\n rounded: borderCharsToArray(BorderChars.rounded),\n heavy: borderCharsToArray(BorderChars.heavy),\n}\n", "import type { RGBA } from \"./lib/RGBA\"\nimport type { EventEmitter } from \"events\"\nimport type { Selection } from \"./lib/selection\"\nimport type { Renderable } from \"./Renderable\"\nimport type { InternalKeyHandler, KeyHandler } from \"./lib/KeyHandler\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0, // 1\n DIM: 1 << 1, // 2\n ITALIC: 1 << 2, // 4\n UNDERLINE: 1 << 3, // 8\n BLINK: 1 << 4, // 16\n INVERSE: 1 << 5, // 32\n HIDDEN: 1 << 6, // 64\n STRIKETHROUGH: 1 << 7, // 128\n}\n\n// Constants for attribute bit packing\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\n/**\n * Extract the base 8 bits of attributes from a u32 attribute value.\n * Currently we only use the first 8 bits for standard text attributes.\n */\nexport function getBaseAttributes(attr: number): number {\n return attr & ATTRIBUTE_BASE_MASK\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\n\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\n\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface RendererEvents {\n resize: (width: number, height: number) => void\n key: (data: Buffer) => void\n \"memory:snapshot\": (snapshot: { heapUsed: number; heapTotal: number; arrayBuffers: number }) => void\n selection: (selection: Selection) => void\n \"debugOverlay:toggle\": (enabled: boolean) => void\n theme_mode: (mode: ThemeMode) => void\n}\n\nexport interface RenderContext extends EventEmitter {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => Selection | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: Renderable | null\n focusRenderable: (renderable: Renderable) => void\n registerLifecyclePass: (renderable: Renderable) => void\n unregisterLifecyclePass: (renderable: Renderable) => void\n getLifecyclePasses: () => Set<Renderable>\n keyInput: KeyHandler\n _internalKeyInput: InternalKeyHandler\n clearSelection: () => void\n startSelection: (renderable: Renderable, x: number, y: number) => void\n updateSelection: (\n currentRenderable: Renderable | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n}\n\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "export class RGBA {\n buffer: Float32Array\n\n constructor(buffer: Float32Array) {\n this.buffer = buffer\n }\n\n static fromArray(array: Float32Array) {\n return new RGBA(array)\n }\n\n static fromValues(r: number, g: number, b: number, a: number = 1.0) {\n return new RGBA(new Float32Array([r, g, b, a]))\n }\n\n static fromInts(r: number, g: number, b: number, a: number = 255) {\n return new RGBA(new Float32Array([r / 255, g / 255, b / 255, a / 255]))\n }\n\n static fromHex(hex: string): RGBA {\n return hexToRgb(hex)\n }\n\n toInts(): [number, number, number, number] {\n return [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255), Math.round(this.a * 255)]\n }\n\n get r(): number {\n return this.buffer[0]\n }\n\n set r(value: number) {\n this.buffer[0] = value\n }\n\n get g(): number {\n return this.buffer[1]\n }\n\n set g(value: number) {\n this.buffer[1] = value\n }\n\n get b(): number {\n return this.buffer[2]\n }\n\n set b(value: number) {\n this.buffer[2] = value\n }\n\n get a(): number {\n return this.buffer[3]\n }\n\n set a(value: number) {\n this.buffer[3] = value\n }\n\n map<R>(fn: (value: number) => R) {\n return [fn(this.r), fn(this.g), fn(this.b), fn(this.a)]\n }\n\n toString() {\n return `rgba(${this.r.toFixed(2)}, ${this.g.toFixed(2)}, ${this.b.toFixed(2)}, ${this.a.toFixed(2)})`\n }\n\n equals(other?: RGBA): boolean {\n if (!other) return false\n return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a\n }\n}\n\nexport type ColorInput = string | RGBA\n\nexport function hexToRgb(hex: string): RGBA {\n hex = hex.replace(/^#/, \"\")\n\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]\n } else if (hex.length === 4) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(hex) && !/^[0-9A-Fa-f]{8}$/.test(hex)) {\n console.warn(`Invalid hex color: ${hex}, defaulting to magenta`)\n return RGBA.fromValues(1, 0, 1, 1)\n }\n\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n const a = hex.length === 8 ? parseInt(hex.substring(6, 8), 16) / 255 : 1\n\n return RGBA.fromValues(r, g, b, a)\n}\n\nexport function rgbToHex(rgb: RGBA): string {\n const components = rgb.a === 1 ? [rgb.r, rgb.g, rgb.b] : [rgb.r, rgb.g, rgb.b, rgb.a]\n return (\n \"#\" +\n components\n .map((x) => {\n const hex = Math.floor(Math.max(0, Math.min(1, x) * 255)).toString(16)\n return hex.length === 1 ? \"0\" + hex : hex\n })\n .join(\"\")\n )\n}\n\nexport function hsvToRgb(h: number, s: number, v: number): RGBA {\n let r = 0,\n g = 0,\n b = 0\n\n const i = Math.floor(h / 60) % 6\n const f = h / 60 - Math.floor(h / 60)\n const p = v * (1 - s)\n const q = v * (1 - f * s)\n const t = v * (1 - (1 - f) * s)\n\n switch (i) {\n case 0:\n r = v\n g = t\n b = p\n break\n case 1:\n r = q\n g = v\n b = p\n break\n case 2:\n r = p\n g = v\n b = t\n break\n case 3:\n r = p\n g = q\n b = v\n break\n case 4:\n r = t\n g = p\n b = v\n break\n case 5:\n r = v\n g = p\n b = q\n break\n }\n\n return RGBA.fromValues(r, g, b, 1)\n}\n\nconst CSS_COLOR_NAMES: Record<string, string> = {\n black: \"#000000\",\n white: \"#FFFFFF\",\n red: \"#FF0000\",\n green: \"#008000\",\n blue: \"#0000FF\",\n yellow: \"#FFFF00\",\n cyan: \"#00FFFF\",\n magenta: \"#FF00FF\",\n silver: \"#C0C0C0\",\n gray: \"#808080\",\n grey: \"#808080\",\n maroon: \"#800000\",\n olive: \"#808000\",\n lime: \"#00FF00\",\n aqua: \"#00FFFF\",\n teal: \"#008080\",\n navy: \"#000080\",\n fuchsia: \"#FF00FF\",\n purple: \"#800080\",\n orange: \"#FFA500\",\n brightblack: \"#666666\",\n brightred: \"#FF6666\",\n brightgreen: \"#66FF66\",\n brightblue: \"#6666FF\",\n brightyellow: \"#FFFF66\",\n brightcyan: \"#66FFFF\",\n brightmagenta: \"#FF66FF\",\n brightwhite: \"#FFFFFF\",\n}\n\nexport function parseColor(color: ColorInput): RGBA {\n if (typeof color === \"string\") {\n const lowerColor = color.toLowerCase()\n\n if (lowerColor === \"transparent\") {\n return RGBA.fromValues(0, 0, 0, 0)\n }\n\n if (CSS_COLOR_NAMES[lowerColor]) {\n return hexToRgb(CSS_COLOR_NAMES[lowerColor])\n }\n\n return hexToRgb(color)\n }\n return color\n}\n", "import type { TextRenderable } from \"../renderables/Text\"\nimport type { TextBuffer, TextChunk } from \"../text-buffer\"\nimport { createTextAttributes } from \"../utils\"\nimport { parseColor, type ColorInput } from \"./RGBA\"\n\nconst BrandedStyledText: unique symbol = Symbol.for(\"@opentui/core/StyledText\")\n\nexport type Color = ColorInput\n\nexport interface StyleAttrs {\n fg?: Color\n bg?: Color\n bold?: boolean\n italic?: boolean\n underline?: boolean\n strikethrough?: boolean\n dim?: boolean\n reverse?: boolean\n blink?: boolean\n}\n\nexport function isStyledText(obj: any): obj is StyledText {\n return obj && obj[BrandedStyledText]\n}\n\nexport class StyledText {\n [BrandedStyledText] = true\n\n public chunks: TextChunk[]\n\n constructor(chunks: TextChunk[]) {\n this.chunks = chunks\n }\n}\n\nexport function stringToStyledText(content: string): StyledText {\n const chunk = {\n __isChunk: true as const,\n text: content,\n }\n return new StyledText([chunk])\n}\n\nexport type StylableInput = string | number | boolean | TextChunk\n\nfunction applyStyle(input: StylableInput, style: StyleAttrs): TextChunk {\n if (typeof input === \"object\" && \"__isChunk\" in input) {\n const existingChunk = input as TextChunk\n\n const fg = style.fg ? parseColor(style.fg) : existingChunk.fg\n const bg = style.bg ? parseColor(style.bg) : existingChunk.bg\n\n const newAttrs = createTextAttributes(style)\n const mergedAttrs = existingChunk.attributes ? existingChunk.attributes | newAttrs : newAttrs\n\n return {\n __isChunk: true,\n text: existingChunk.text,\n fg,\n bg,\n attributes: mergedAttrs,\n link: existingChunk.link,\n }\n } else {\n const plainTextStr = String(input)\n const fg = style.fg ? parseColor(style.fg) : undefined\n const bg = style.bg ? parseColor(style.bg) : undefined\n const attributes = createTextAttributes(style)\n\n return {\n __isChunk: true,\n text: plainTextStr,\n fg,\n bg,\n attributes,\n }\n }\n}\n\n// Color functions\nexport const black = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"black\" })\nexport const red = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"red\" })\nexport const green = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"green\" })\nexport const yellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"yellow\" })\nexport const blue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"blue\" })\nexport const magenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"magenta\" })\nexport const cyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"cyan\" })\nexport const white = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"white\" })\n\n// Bright color functions\nexport const brightBlack = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlack\" })\nexport const brightRed = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightRed\" })\nexport const brightGreen = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightGreen\" })\nexport const brightYellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightYellow\" })\nexport const brightBlue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlue\" })\nexport const brightMagenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightMagenta\" })\nexport const brightCyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightCyan\" })\nexport const brightWhite = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightWhite\" })\n\n// Background color functions\nexport const bgBlack = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"black\" })\nexport const bgRed = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"red\" })\nexport const bgGreen = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"green\" })\nexport const bgYellow = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"yellow\" })\nexport const bgBlue = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"blue\" })\nexport const bgMagenta = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"magenta\" })\nexport const bgCyan = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"cyan\" })\nexport const bgWhite = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"white\" })\n\n// Style functions\nexport const bold = (input: StylableInput): TextChunk => applyStyle(input, { bold: true })\nexport const italic = (input: StylableInput): TextChunk => applyStyle(input, { italic: true })\nexport const underline = (input: StylableInput): TextChunk => applyStyle(input, { underline: true })\nexport const strikethrough = (input: StylableInput): TextChunk => applyStyle(input, { strikethrough: true })\nexport const dim = (input: StylableInput): TextChunk => applyStyle(input, { dim: true })\nexport const reverse = (input: StylableInput): TextChunk => applyStyle(input, { reverse: true })\nexport const blink = (input: StylableInput): TextChunk => applyStyle(input, { blink: true })\n\n// Custom color functions\nexport const fg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { fg: color })\nexport const bg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { bg: color })\n\nexport const link =\n (url: string) =>\n (input: StylableInput): TextChunk => {\n const chunk =\n typeof input === \"object\" && \"__isChunk\" in input\n ? (input as TextChunk)\n : {\n __isChunk: true as const,\n text: String(input),\n }\n\n return {\n ...chunk,\n link: { url },\n }\n }\n\n/**\n * Template literal handler for styled text (non-cached version).\n * Returns a StyledText object containing chunks of text with optional styles.\n */\nexport function t(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText {\n const chunks: TextChunk[] = []\n\n for (let i = 0; i < strings.length; i++) {\n const raw = strings[i]\n\n if (raw) {\n chunks.push({\n __isChunk: true,\n text: raw,\n attributes: 0,\n })\n }\n\n const val = values[i]\n if (typeof val === \"object\" && \"__isChunk\" in val) {\n chunks.push(val as TextChunk)\n } else if (val !== undefined) {\n const plainTextStr = String(val)\n chunks.push({\n __isChunk: true,\n text: plainTextStr,\n attributes: 0,\n })\n }\n }\n\n return new StyledText(chunks)\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { WidthMethod } from \"./browser-buffer\"\n\nexport interface TextChunk {\n __isChunk: true\n text: string\n fg?: RGBA\n bg?: RGBA\n attributes?: number\n link?: { url: string }\n}\n\nexport interface StyledTextInput {\n chunks: TextChunk[]\n}\n\nexport class BrowserTextBuffer {\n private _text: string = \"\"\n private _chunks: TextChunk[] = []\n private _defaultFg: RGBA | null = null\n private _defaultBg: RGBA | null = null\n private _defaultAttributes: number = 0\n private _syntaxStyle: any = null\n private _tabWidth: number = 4\n private _widthMethod: WidthMethod\n\n constructor(widthMethod: WidthMethod) {\n this._widthMethod = widthMethod\n }\n\n static create(widthMethod: WidthMethod): BrowserTextBuffer {\n return new BrowserTextBuffer(widthMethod)\n }\n\n // Compat property\n get ptr(): number {\n return 1 // Non-zero so TextBufferRenderable.renderSelf proceeds\n }\n\n get length(): number {\n return this._text.length\n }\n\n get byteSize(): number {\n return new TextEncoder().encode(this._text).length\n }\n\n setText(text: string): void {\n this._text = text\n this._chunks = [\n {\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n },\n ]\n }\n\n append(text: string): void {\n this._text += text\n this._chunks.push({\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n })\n }\n\n setStyledText(styledText: StyledTextInput): void {\n this._chunks = styledText.chunks.map((chunk) => ({\n __isChunk: true,\n text: chunk.text,\n fg: chunk.fg ?? this._defaultFg ?? undefined,\n bg: chunk.bg ?? this._defaultBg ?? undefined,\n attributes: chunk.attributes ?? this._defaultAttributes,\n link: chunk.link,\n }))\n this._text = this._chunks.map((c) => c.text).join(\"\")\n }\n\n getPlainText(): string {\n return this._text\n }\n\n getTextRange(startOffset: number, endOffset: number): string {\n return this._text.slice(startOffset, endOffset)\n }\n\n getLineCount(): number {\n if (this._text.length === 0) return 0\n return this._text.split(\"\\n\").length\n }\n\n getChunks(): TextChunk[] {\n return this._chunks\n }\n\n setDefaultFg(fg: RGBA | null): void {\n this._defaultFg = fg\n }\n\n setDefaultBg(bg: RGBA | null): void {\n this._defaultBg = bg\n }\n\n setDefaultAttributes(attributes: number | null): void {\n this._defaultAttributes = attributes ?? 0\n }\n\n resetDefaults(): void {\n this._defaultFg = null\n this._defaultBg = null\n this._defaultAttributes = 0\n }\n\n get defaultFg(): RGBA | null {\n return this._defaultFg\n }\n\n get defaultBg(): RGBA | null {\n return this._defaultBg\n }\n\n get defaultAttributes(): number {\n return this._defaultAttributes\n }\n\n setSyntaxStyle(style: any): void {\n this._syntaxStyle = style\n }\n\n getSyntaxStyle(): any {\n return this._syntaxStyle\n }\n\n setTabWidth(width: number): void {\n this._tabWidth = width\n }\n\n getTabWidth(): number {\n return this._tabWidth\n }\n\n addHighlightByCharRange(_highlight: any): void {}\n addHighlight(_lineIdx: number, _highlight: any): void {}\n removeHighlightsByRef(_hlRef: number): void {}\n clearLineHighlights(_lineIdx: number): void {}\n clearAllHighlights(): void {}\n getLineHighlights(_lineIdx: number): any[] {\n return []\n }\n getHighlightCount(): number {\n return 0\n }\n loadFile(_path: string): void {}\n\n clear(): void {\n this._text = \"\"\n this._chunks = []\n }\n\n reset(): void {\n this.clear()\n this.resetDefaults()\n }\n\n destroy(): void {\n this._text = \"\"\n this._chunks = []\n }\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { BrowserTextBuffer, TextChunk } from \"./browser-text-buffer\"\n\nexport interface VisibleLineChunk {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n link?: { url: string }\n}\n\nexport interface VisibleLine {\n chunks: VisibleLineChunk[]\n}\n\nconst defaultFg: RGBA = {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n} as RGBA\n\nconst defaultBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n} as RGBA\n\nexport class BrowserTextBufferView {\n private textBuffer: BrowserTextBuffer\n private _wrapWidth: number | null = null\n private _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n private _viewportX: number = 0\n private _viewportY: number = 0\n private _viewportWidth: number = 0\n private _viewportHeight: number = 0\n private _truncate: boolean = false\n public textAlign: \"left\" | \"center\" | \"right\" = \"left\"\n private _selection: { start: number; end: number } | null = null\n private _selectionBg: RGBA | undefined\n private _selectionFg: RGBA | undefined\n\n constructor(textBuffer: BrowserTextBuffer) {\n this.textBuffer = textBuffer\n }\n\n static create(textBuffer: BrowserTextBuffer): BrowserTextBufferView {\n return new BrowserTextBufferView(textBuffer)\n }\n\n // Compat\n get ptr(): number {\n return 1\n }\n\n get lineInfo() {\n const lines = this.getAllWrappedLines()\n const lineStarts: number[] = []\n const lineWidths: number[] = []\n const lineSources: number[] = []\n const lineWraps: number[] = []\n let maxWidth = 0\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n lineStarts.push(offset)\n const lineText = lines[i].map((c) => c.text).join(\"\")\n const w = lineText.length\n lineWidths.push(w)\n lineSources.push(0)\n lineWraps.push(0)\n if (w > maxWidth) maxWidth = w\n offset += lineText.length + 1\n }\n\n return { lineStarts, lineWidths, maxLineWidth: maxWidth, lineSources, lineWraps }\n }\n\n get logicalLineInfo() {\n return this.lineInfo\n }\n\n setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this._selection = { start, end }\n this._selectionBg = bgColor\n this._selectionFg = fgColor\n }\n\n updateSelection(end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n if (this._selection) {\n this._selection.end = end\n }\n if (bgColor) this._selectionBg = bgColor\n if (fgColor) this._selectionFg = fgColor\n }\n\n resetSelection(): void {\n this._selection = null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this._selection\n }\n\n hasSelection(): boolean {\n return this._selection !== null\n }\n\n setLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n updateLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n resetLocalSelection(): void {}\n\n getSelectedText(): string {\n if (!this._selection) return \"\"\n const text = this.textBuffer.getPlainText()\n const start = Math.min(this._selection.start, this._selection.end)\n const end = Math.max(this._selection.start, this._selection.end)\n return text.slice(start, end)\n }\n\n getPlainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n setWrapWidth(width: number | null): void {\n this._wrapWidth = width\n }\n\n setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this._wrapMode = mode\n }\n\n setViewportSize(width: number, height: number): void {\n this._viewportWidth = width\n this._viewportHeight = height\n\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setViewport(x: number, y: number, width: number, height: number): void {\n this._viewportX = x\n this._viewportY = y\n this._viewportWidth = width\n this._viewportHeight = height\n\n // Sync wrap width with viewport width (matches Zig TextBufferView.setViewport behavior)\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setTabIndicator(_indicator: string | number): void {}\n\n setTabIndicatorColor(_color: RGBA): void {}\n\n setTruncate(truncate: boolean): void {\n this._truncate = truncate\n }\n\n private getAllWrappedLines(): VisibleLineChunk[][] {\n const chunks = this.textBuffer.getChunks()\n if (chunks.length === 0) return []\n\n const dfg = this.textBuffer.defaultFg ?? defaultFg\n const dbg = this.textBuffer.defaultBg ?? defaultBg\n\n // First, build logical lines from chunks\n const logicalLines: VisibleLineChunk[][] = [[]]\n\n for (const chunk of chunks) {\n const parts = chunk.text.split(\"\\n\")\n for (let i = 0; i < parts.length; i++) {\n if (i > 0) {\n logicalLines.push([])\n }\n if (parts[i].length > 0) {\n const vlc: VisibleLineChunk = {\n text: parts[i],\n fg: chunk.fg ?? dfg,\n bg: chunk.bg ?? dbg,\n attributes: chunk.attributes ?? 0,\n }\n if (chunk.link) vlc.link = chunk.link\n logicalLines[logicalLines.length - 1].push(vlc)\n }\n }\n }\n\n // Apply wrapping\n if (this._wrapMode === \"none\" || !this._wrapWidth || this._wrapWidth <= 0) {\n return logicalLines\n }\n\n const wrappedLines: VisibleLineChunk[][] = []\n const wrapWidth = this._wrapWidth\n\n for (const logicalLine of logicalLines) {\n // Flatten line text to handle wrapping\n const lineText = logicalLine.map((c) => c.text).join(\"\")\n\n if (lineText.length <= wrapWidth) {\n wrappedLines.push(logicalLine)\n continue\n }\n\n if (this._wrapMode === \"char\") {\n // Character wrapping\n let pos = 0\n while (pos < lineText.length) {\n const end = Math.min(pos + wrapWidth, lineText.length)\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n } else {\n // Word wrapping\n let pos = 0\n while (pos < lineText.length) {\n let end = Math.min(pos + wrapWidth, lineText.length)\n if (end < lineText.length) {\n // Look for a space to break at\n let breakPos = end\n while (breakPos > pos && lineText[breakPos] !== \" \") {\n breakPos--\n }\n if (breakPos > pos) {\n end = breakPos + 1 // Include the space\n }\n }\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n }\n }\n\n return wrappedLines\n }\n\n private sliceChunks(chunks: VisibleLineChunk[], start: number, end: number): VisibleLineChunk[] {\n const result: VisibleLineChunk[] = []\n let offset = 0\n\n for (const chunk of chunks) {\n const chunkStart = offset\n const chunkEnd = offset + chunk.text.length\n\n if (chunkEnd <= start || chunkStart >= end) {\n offset = chunkEnd\n continue\n }\n\n const sliceStart = Math.max(0, start - chunkStart)\n const sliceEnd = Math.min(chunk.text.length, end - chunkStart)\n const slicedText = chunk.text.slice(sliceStart, sliceEnd)\n\n if (slicedText.length > 0) {\n const sliced: VisibleLineChunk = {\n text: slicedText,\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n }\n if (chunk.link) sliced.link = chunk.link\n result.push(sliced)\n }\n\n offset = chunkEnd\n }\n\n return result\n }\n\n measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n // Temporarily set wrap width for measurement\n const oldWrapWidth = this._wrapWidth\n if (width > 0 && this._wrapMode !== \"none\") {\n this._wrapWidth = width\n } else if (width === 0) {\n // width=0 means measure without wrapping\n this._wrapWidth = null\n }\n\n const lines = this.getAllWrappedLines()\n this._wrapWidth = oldWrapWidth\n\n let maxWidth = 0\n for (const line of lines) {\n const lineWidth = line.reduce((sum, c) => sum + c.text.length, 0)\n if (lineWidth > maxWidth) maxWidth = lineWidth\n }\n\n return {\n lineCount: lines.length,\n maxWidth,\n }\n }\n\n getVirtualLineCount(): number {\n return this.getAllWrappedLines().length\n }\n\n getVisibleLines(): VisibleLine[] | null {\n const allLines = this.getAllWrappedLines()\n if (allLines.length === 0) return null\n\n const startLine = this._viewportY\n const endLine =\n this._viewportHeight > 0 ? Math.min(startLine + this._viewportHeight, allLines.length) : allLines.length\n\n const visibleLines: VisibleLine[] = []\n for (let i = startLine; i < endLine; i++) {\n if (i >= 0 && i < allLines.length) {\n visibleLines.push({ chunks: allLines[i] })\n }\n }\n\n return visibleLines\n }\n\n destroy(): void {}\n}\n", "// Stub SyntaxStyle for browser - no native Zig backing needed\nexport class BrowserSyntaxStyle {\n private _destroyed = false\n\n static create(): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromTheme(_theme: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromStyles(_styles: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n get ptr(): number {\n return 0\n }\n\n registerStyle(_name: string, _style: any): number {\n return 0\n }\n\n resolveStyleId(_name: string): number | null {\n return null\n }\n\n getStyleId(_name: string): number | null {\n return null\n }\n\n getStyleCount(): number {\n return 0\n }\n\n clearNameCache(): void {}\n\n getStyle(_name: string): any {\n return undefined\n }\n\n mergeStyles(..._styleNames: string[]): { attributes: number } {\n return { attributes: 0 }\n }\n\n clearCache(): void {}\n getCacheSize(): number {\n return 0\n }\n getAllStyles(): Map<string, any> {\n return new Map()\n }\n getRegisteredNames(): string[] {\n return []\n }\n\n destroy(): void {\n this._destroyed = true\n }\n}\n", "// Stub for opentui/packages/core/src/animation/Timeline.ts\nexport class Timeline {\n public isPlaying: boolean = false\n public isComplete: boolean = false\n public duration: number = 1000\n public loop: boolean = false\n public synced: boolean = false\n public currentTime: number = 0\n public items: any[] = []\n public subTimelines: any[] = []\n\n constructor(_options: any = {}) {}\n addStateChangeListener(_listener: any): void {}\n removeStateChangeListener(_listener: any): void {}\n add(_target: any, _options: any): this { return this }\n call(_callback: () => void): this { return this }\n play(): this {\n this.isPlaying = true\n return this\n }\n pause(): this {\n this.isPlaying = false\n return this\n }\n restart(): void {}\n update(_deltaTime: number): void {}\n}\n\nclass TimelineEngine {\n defaults = { frameRate: 60 }\n attach(_renderer: any): void {}\n detach(): void {}\n register(_timeline: Timeline): void {}\n unregister(_timeline: Timeline): void {}\n clear(): void {}\n update(_deltaTime: number): void {}\n}\n\nexport const engine = new TimelineEngine()\n\nexport function createTimeline(options: any = {}): Timeline {\n return new Timeline(options)\n}\n", "// Copied from https://github.com/enquirer/enquirer/blob/36785f3399a41cd61e9d28d1eb9c2fcd73d69b4c/lib/keypress.js\nimport { Buffer } from \"node:buffer\"\nimport { parseKittyKeyboard } from \"./parse.keypress-kitty\"\n\nconst metaKeyCodeRe = /^(?:\\x1b)([a-zA-Z0-9])$/\n\nconst fnKeyRe = /^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/\n\nconst keyName: Record<string, string> = {\n /* xterm/gnome ESC O letter */\n OP: \"f1\",\n OQ: \"f2\",\n OR: \"f3\",\n OS: \"f4\",\n /* xterm/rxvt ESC [ number ~ */\n \"[11~\": \"f1\",\n \"[12~\": \"f2\",\n \"[13~\": \"f3\",\n \"[14~\": \"f4\",\n /* from Cygwin and used in libuv */\n \"[[A\": \"f1\",\n \"[[B\": \"f2\",\n \"[[C\": \"f3\",\n \"[[D\": \"f4\",\n \"[[E\": \"f5\",\n /* common */\n \"[15~\": \"f5\",\n \"[17~\": \"f6\",\n \"[18~\": \"f7\",\n \"[19~\": \"f8\",\n \"[20~\": \"f9\",\n \"[21~\": \"f10\",\n \"[23~\": \"f11\",\n \"[24~\": \"f12\",\n /* xterm ESC [ letter */\n \"[A\": \"up\",\n \"[B\": \"down\",\n \"[C\": \"right\",\n \"[D\": \"left\",\n \"[E\": \"clear\",\n \"[F\": \"end\",\n \"[H\": \"home\",\n /* xterm/gnome ESC O letter */\n OA: \"up\",\n OB: \"down\",\n OC: \"right\",\n OD: \"left\",\n OE: \"clear\",\n OF: \"end\",\n OH: \"home\",\n /* xterm/rxvt ESC [ number ~ */\n \"[1~\": \"home\",\n \"[2~\": \"insert\",\n \"[3~\": \"delete\",\n \"[4~\": \"end\",\n \"[5~\": \"pageup\",\n \"[6~\": \"pagedown\",\n /* putty */\n \"[[5~\": \"pageup\",\n \"[[6~\": \"pagedown\",\n /* rxvt */\n \"[7~\": \"home\",\n \"[8~\": \"end\",\n /* rxvt keys with modifiers */\n \"[a\": \"up\",\n \"[b\": \"down\",\n \"[c\": \"right\",\n \"[d\": \"left\",\n \"[e\": \"clear\",\n /* option + arrow keys (old style) */\n f: \"right\",\n b: \"left\",\n p: \"up\",\n n: \"down\",\n\n \"[2$\": \"insert\",\n \"[3$\": \"delete\",\n \"[5$\": \"pageup\",\n \"[6$\": \"pagedown\",\n \"[7$\": \"home\",\n \"[8$\": \"end\",\n\n Oa: \"up\",\n Ob: \"down\",\n Oc: \"right\",\n Od: \"left\",\n Oe: \"clear\",\n\n \"[2^\": \"insert\",\n \"[3^\": \"delete\",\n \"[5^\": \"pageup\",\n \"[6^\": \"pagedown\",\n \"[7^\": \"home\",\n \"[8^\": \"end\",\n /* misc. */\n \"[Z\": \"tab\",\n}\n\nexport const nonAlphanumericKeys = [...Object.values(keyName), \"backspace\"]\n\nconst isShiftKey = (code: string) => {\n return [\"[a\", \"[b\", \"[c\", \"[d\", \"[e\", \"[2$\", \"[3$\", \"[5$\", \"[6$\", \"[7$\", \"[8$\", \"[Z\"].includes(code)\n}\n\nconst isCtrlKey = (code: string) => {\n return [\"Oa\", \"Ob\", \"Oc\", \"Od\", \"Oe\", \"[2^\", \"[3^\", \"[5^\", \"[6^\", \"[7^\", \"[8^\"].includes(code)\n}\n\nexport type KeyEventType = \"press\" | \"repeat\" | \"release\"\n\nexport interface ParsedKey {\n name: string\n ctrl: boolean\n meta: boolean\n shift: boolean\n option: boolean\n sequence: string\n number: boolean\n raw: string\n eventType: KeyEventType\n source: \"raw\" | \"kitty\"\n code?: string\n super?: boolean\n hyper?: boolean\n capsLock?: boolean\n numLock?: boolean\n baseCode?: number\n repeated?: boolean\n}\n\nexport type ParseKeypressOptions = {\n useKittyKeyboard?: boolean\n}\n\nconst modifyOtherKeysRe = /^\\x1b\\[27;(\\d+);(\\d+)~$/\n\nexport const parseKeypress = (s: Buffer | string = \"\", options: ParseKeypressOptions = {}): ParsedKey | null => {\n let parts\n\n if (Buffer.isBuffer(s)) {\n if (s[0]! > 127 && s[1] === undefined) {\n ;(s[0] as unknown as number) -= 128\n s = \"\\x1b\" + String(s)\n } else {\n s = String(s)\n }\n } else if (s !== undefined && typeof s !== \"string\") {\n s = String(s)\n } else if (!s) {\n s = \"\"\n }\n\n // Filter out mouse events (SGR and basic)\n if (/^\\x1b\\[<\\d+;\\d+;\\d+[Mm]$/.test(s)) {\n return null\n }\n if (s.startsWith(\"\\x1b[M\") && s.length >= 6) {\n return null\n }\n\n // Filter out terminal response sequences (not keyboard events)\n // These are responses to terminal queries and should not be treated as key presses\n\n // Window/cell size reports: ESC[4;height;width t or ESC[8;rows;cols t\n if (/^\\x1b\\[\\d+;\\d+;\\d+t$/.test(s)) {\n return null\n }\n\n // Cursor position reports (DSR): ESC[row;col R\n if (/^\\x1b\\[\\d+;\\d+R$/.test(s)) {\n return null\n }\n\n // Device Attributes (DA) responses: ESC[?...c\n if (/^\\x1b\\[\\?[\\d;]+c$/.test(s)) {\n return null\n }\n\n // Mode reports: ESC[?...;...$y\n if (/^\\x1b\\[\\?[\\d;]+\\$y$/.test(s)) {\n return null\n }\n\n // Focus events: ESC[I (focus in), ESC[O (focus out)\n // Note: ESC[O is also used for SS3 sequences (like arrow keys), but those have a character after O\n if (s === \"\\x1b[I\" || s === \"\\x1b[O\") {\n return null\n }\n\n // OSC (Operating System Command) responses: ESC]...ESC\\ or ESC]...BEL\n if (/^\\x1b\\][\\d;].*(\\x1b\\\\|\\x07)$/.test(s)) {\n return null\n }\n\n // Bracketed paste mode markers: ESC[200~ (start), ESC[201~ (end)\n if (s === \"\\x1b[200~\" || s === \"\\x1b[201~\") {\n return null\n }\n\n const key: ParsedKey = {\n name: \"\",\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n number: false,\n sequence: s,\n raw: s,\n eventType: \"press\",\n source: \"raw\",\n }\n\n key.sequence = key.sequence || s || key.name\n\n // Check for Kitty keyboard protocol if enabled\n if (options.useKittyKeyboard) {\n const kittyResult = parseKittyKeyboard(s)\n if (kittyResult) {\n return kittyResult\n }\n }\n\n // Check for modifyOtherKeys sequences (CSI u protocol variant)\n // Format: CSI 27 ; modifier ; code ~\n // This is sent by terminals (xterm, iTerm2, Ghostty, etc.) with modifyOtherKeys mode enabled\n // to encode modified versions of keys that don't normally have modifier variants\n // Examples: CSI 27;2;13~ (shift+enter), CSI 27;5;13~ (ctrl+enter), CSI 27;5;27~ (ctrl+escape)\n const modifyOtherKeysMatch = modifyOtherKeysRe.exec(s)\n if (modifyOtherKeysMatch) {\n const modifier = parseInt(modifyOtherKeysMatch[1]!, 10) - 1\n const charCode = parseInt(modifyOtherKeysMatch[2]!, 10)\n\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2)\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n\n // Handle common keys by their ASCII codes\n if (charCode === 13) {\n key.name = \"return\"\n } else if (charCode === 27) {\n key.name = \"escape\"\n } else if (charCode === 9) {\n key.name = \"tab\"\n } else if (charCode === 32) {\n key.name = \"space\"\n } else if (charCode === 127 || charCode === 8) {\n key.name = \"backspace\"\n } else {\n // For other character codes, use the character itself\n const char = String.fromCharCode(charCode)\n key.name = char\n key.sequence = char\n if (charCode >= 48 && charCode <= 57) {\n key.number = true\n }\n }\n\n return key\n }\n\n if (s === \"\\r\" || s === \"\\x1b\\r\") {\n // carriage return\n key.name = \"return\"\n key.meta = s.length === 2\n } else if (s === \"\\n\" || s === \"\\x1b\\n\") {\n // linefeed\n key.name = \"linefeed\"\n key.meta = s.length === 2\n } else if (s === \"\\t\") {\n // tab\n key.name = \"tab\"\n } else if (s === \"\\b\" || s === \"\\x1b\\b\" || s === \"\\x7f\" || s === \"\\x1b\\x7f\") {\n // backspace or ctrl+h\n // On OSX, \\x7f is also backspace\n key.name = \"backspace\"\n key.meta = s.charAt(0) === \"\\x1b\"\n } else if (s === \"\\x1b\" || s === \"\\x1b\\x1b\") {\n // escape key\n key.name = \"escape\"\n key.meta = s.length === 2\n } else if (s === \" \" || s === \"\\x1b \") {\n key.name = \"space\"\n key.meta = s.length === 2\n } else if (s === \"\\x00\") {\n // ctrl+space\n key.name = \"space\"\n key.ctrl = true\n } else if (s.length === 1 && s <= \"\\x1a\") {\n // ctrl+letter\n key.name = String.fromCharCode(s.charCodeAt(0) + \"a\".charCodeAt(0) - 1)\n key.ctrl = true\n } else if (s.length === 1 && s >= \"0\" && s <= \"9\") {\n // number - keep the actual number character for vim commands\n key.name = s\n key.number = true\n } else if (s.length === 1 && s >= \"a\" && s <= \"z\") {\n // lowercase letter\n key.name = s\n } else if (s.length === 1 && s >= \"A\" && s <= \"Z\") {\n // shift+letter\n key.name = s.toLowerCase()\n key.shift = true\n } else if (s.length === 1) {\n // Special characters (like $, ^, etc.) - preserve the character\n key.name = s\n } else if ((parts = metaKeyCodeRe.exec(s))) {\n // meta+character key\n key.meta = true\n const char = parts[1]!\n const isUpperCase = /^[A-Z]$/.test(char)\n\n // Check if uppercase F or B map to arrow keys (old terminal style)\n if (char === \"F\") {\n key.name = \"right\"\n } else if (char === \"B\") {\n key.name = \"left\"\n } else if (isUpperCase) {\n key.shift = true\n key.name = char\n } else {\n key.name = char\n }\n } else if (s.length === 2 && s[0] === \"\\x1b\" && s[1]! <= \"\\x1a\") {\n // meta+ctrl+letter (ESC + control character)\n key.meta = true\n key.ctrl = true\n key.name = String.fromCharCode(s.charCodeAt(1) + \"a\".charCodeAt(0) - 1)\n } else if ((parts = fnKeyRe.exec(s))) {\n const segs = [...s]\n\n if (segs[0] === \"\\u001b\" && segs[1] === \"\\u001b\") {\n key.option = true\n key.meta = true\n }\n\n // ansi escape sequence\n // reassemble the key code leaving out leading \\x1b's,\n // the modifier key bitflag and any meaningless \"1;\" sequence\n const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join(\"\")\n\n const modifier = parseInt(parts[3] || parts[5] || \"1\", 10) - 1\n\n // Parse the key modifier\n // Terminal modifier bits: 1=Shift, 2=Alt/Option, 4=Ctrl, 8=Super, 16=Hyper\n // Note: meta flag is set for Alt/Option (bit 2)\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // Alt/Option modifier specifically\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n key.code = code\n\n const keyNameResult = keyName[code]\n if (keyNameResult) {\n key.name = keyNameResult\n key.shift = isShiftKey(code) || key.shift\n key.ctrl = isCtrlKey(code) || key.ctrl\n } else {\n // If we matched the regex but didn't find a valid key name,\n // reset the key to default state (unknown sequence)\n key.name = \"\"\n key.code = undefined\n }\n } else if (s === \"\\x1b[3~\") {\n // delete key\n key.name = \"delete\"\n key.meta = false\n key.code = \"[3~\"\n }\n\n return key\n}\n", "const singletonCacheSymbol = Symbol.for(\"@opentui/core/singleton\")\n\n/**\n * Ensures a value is initialized once per process,\n * persists across Bun hot reloads, and is type-safe.\n */\nexport function singleton<T>(key: string, factory: () => T): T {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = (globalThis[singletonCacheSymbol] ??= {})\n if (!(key in bag)) {\n bag[key] = factory()\n }\n return bag[key] as T\n}\n\nexport function destroySingleton(key: string): void {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n if (bag && key in bag) {\n delete bag[key]\n }\n}\n\nexport function hasSingleton(key: string): boolean {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n return bag && key in bag\n}\n", "import { singleton } from \"./singleton.ts\"\n\n/**\n * Environment variable registry\n *\n * Usage:\n * ```ts\n * import { registerEnvVar, env } from \"./lib/env.ts\";\n *\n * // Register environment variables\n * registerEnvVar({\n * name: \"DEBUG\",\n * description: \"Enable debug logging\",\n * type: \"boolean\",\n * default: false\n * });\n *\n * registerEnvVar({\n * name: \"PORT\",\n * description: \"Server port number\",\n * type: \"number\",\n * default: 3000\n * });\n *\n * // Access environment variables\n * if (env.DEBUG) {\n * console.log(\"Debug mode enabled\");\n * }\n *\n * const port = env.PORT; // number\n * ```\n */\n\nexport interface EnvVarConfig {\n name: string\n description: string\n default?: string | boolean | number\n type?: \"string\" | \"boolean\" | \"number\"\n}\n\nexport const envRegistry: Record<string, EnvVarConfig> = singleton(\"env-registry\", () => ({}))\n\nexport function registerEnvVar(config: EnvVarConfig): void {\n const existing = envRegistry[config.name]\n if (existing) {\n if (\n existing.description !== config.description ||\n existing.type !== config.type ||\n existing.default !== config.default\n ) {\n throw new Error(\n `Environment variable \"${config.name}\" is already registered with different configuration. ` +\n `Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`,\n )\n }\n return\n }\n envRegistry[config.name] = config\n}\n\nfunction normalizeBoolean(value: string): boolean {\n const lowerValue = value.toLowerCase()\n return [\"true\", \"1\", \"on\", \"yes\"].includes(lowerValue)\n}\n\nfunction parseEnvValue(config: EnvVarConfig): string | boolean | number {\n const envValue = process.env[config.name]\n\n if (envValue === undefined && config.default !== undefined) {\n return config.default\n }\n\n if (envValue === undefined) {\n throw new Error(`Required environment variable ${config.name} is not set. ${config.description}`)\n }\n\n switch (config.type) {\n case \"boolean\":\n return typeof envValue === \"boolean\" ? envValue : normalizeBoolean(envValue)\n case \"number\":\n const numValue = Number(envValue)\n if (isNaN(numValue)) {\n throw new Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`)\n }\n return numValue\n case \"string\":\n default:\n return envValue\n }\n}\n\nclass EnvStore {\n private parsedValues: Map<string, string | boolean | number> = new Map()\n\n get(key: string): any {\n if (this.parsedValues.has(key)) {\n return this.parsedValues.get(key)!\n }\n\n if (!(key in envRegistry)) {\n throw new Error(`Environment variable ${key} is not registered.`)\n }\n\n try {\n const value = parseEnvValue(envRegistry[key])\n this.parsedValues.set(key, value)\n return value\n } catch (error) {\n throw new Error(`Failed to parse env var ${key}: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n has(key: string): boolean {\n return key in envRegistry\n }\n\n clearCache(): void {\n this.parsedValues.clear()\n }\n}\n\nconst envStore = singleton(\"env-store\", () => new EnvStore())\n\nexport function clearEnvCache(): void {\n envStore.clearCache()\n}\n\nexport function generateEnvMarkdown(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"# Environment Variables\\n\\nNo environment variables registered.\\n\"\n }\n\n let markdown = \"# Environment Variables\\n\\n\"\n\n for (const config of configs) {\n markdown += `## ${config.name}\\n\\n`\n markdown += `${config.description}\\n\\n`\n\n markdown += `**Type:** \\`${config.type || \"string\"}\\` \\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n markdown += `**Default:** \\`${defaultValue}\\`\\n`\n } else {\n markdown += \"**Default:** *Required*\\n\"\n }\n\n markdown += \"\\n\"\n }\n\n return markdown\n}\n\nexport function generateEnvColored(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\nNo environment variables registered.\\n\"\n }\n\n let output = \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\n\"\n\n for (const config of configs) {\n output += `\\x1b[1;33m${config.name}\\x1b[0m\\n`\n output += `${config.description}\\n`\n output += `\\x1b[32mType:\\x1b[0m \\x1b[36m${config.type || \"string\"}\\x1b[0m\\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[35m${defaultValue}\\x1b[0m\\n`\n } else {\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[31mRequired\\x1b[0m\\n`\n }\n\n output += \"\\n\"\n }\n\n return output\n}\n\nexport const env = new Proxy({} as Record<string, any>, {\n get(target, prop: string) {\n if (typeof prop !== \"string\") {\n return undefined\n }\n return envStore.get(prop)\n },\n\n has(target, prop: string) {\n return envStore.has(prop)\n },\n\n ownKeys() {\n return Object.keys(envRegistry)\n },\n\n getOwnPropertyDescriptor(target, prop: string) {\n if (envStore.has(prop)) {\n return {\n enumerable: true,\n configurable: true,\n get: () => envStore.get(prop),\n }\n }\n return undefined\n },\n})\n", "import os from \"os\"\nimport path from \"path\"\nimport { EventEmitter } from \"events\"\nimport { singleton } from \"./singleton\"\nimport { env, registerEnvVar } from \"./env\"\nimport { isValidDirectoryName } from \"./validate-dir-name\"\n\n// Register environment variables for XDG directories\nregisterEnvVar({\n name: \"XDG_CONFIG_HOME\",\n description: \"Base directory for user-specific configuration files\",\n type: \"string\",\n default: \"\",\n})\n\nregisterEnvVar({\n name: \"XDG_DATA_HOME\",\n description: \"Base directory for user-specific data files\",\n type: \"string\",\n default: \"\",\n})\n\nexport interface DataPaths {\n globalConfigPath: string\n globalConfigFile: string\n localConfigFile: string\n globalDataPath: string\n}\n\nexport interface DataPathsEvents {\n \"paths:changed\": [paths: DataPaths]\n}\n\nexport class DataPathsManager extends EventEmitter<DataPathsEvents> {\n private _appName: string\n private _globalConfigPath?: string\n private _globalConfigFile?: string\n private _localConfigFile?: string\n private _globalDataPath?: string\n constructor() {\n super()\n this._appName = \"opentui\"\n }\n\n get appName(): string {\n return this._appName\n }\n\n set appName(value: string) {\n if (!isValidDirectoryName(value)) {\n throw new Error(`Invalid app name \"${value}\": must be a valid directory name`)\n }\n if (this._appName !== value) {\n this._appName = value\n this._globalConfigPath = undefined\n this._globalConfigFile = undefined\n this._localConfigFile = undefined\n this._globalDataPath = undefined\n this.emit(\"paths:changed\", this.toObject())\n }\n }\n\n get globalConfigPath(): string {\n if (this._globalConfigPath === undefined) {\n const homeDir = os.homedir()\n const xdgConfigHome = env.XDG_CONFIG_HOME\n const baseConfigDir = xdgConfigHome || path.join(homeDir, \".config\")\n this._globalConfigPath = path.join(baseConfigDir, this._appName)\n }\n return this._globalConfigPath\n }\n\n get globalConfigFile(): string {\n if (this._globalConfigFile === undefined) {\n this._globalConfigFile = path.join(this.globalConfigPath, \"init.ts\")\n }\n return this._globalConfigFile\n }\n\n get localConfigFile(): string {\n if (this._localConfigFile === undefined) {\n this._localConfigFile = path.join(process.cwd(), `.${this._appName}.ts`)\n }\n return this._localConfigFile\n }\n\n get globalDataPath(): string {\n if (this._globalDataPath === undefined) {\n const homeDir = os.homedir()\n const xdgDataHome = env.XDG_DATA_HOME\n const baseDataDir = xdgDataHome || path.join(homeDir, \".local/share\")\n this._globalDataPath = path.join(baseDataDir, this._appName)\n }\n return this._globalDataPath\n }\n\n toObject(): DataPaths {\n return {\n globalConfigPath: this.globalConfigPath,\n globalConfigFile: this.globalConfigFile,\n localConfigFile: this.localConfigFile,\n globalDataPath: this.globalDataPath,\n }\n }\n}\n\nexport function getDataPaths(): DataPathsManager {\n return singleton(\"data-paths-opentui\", () => new DataPathsManager())\n}\n", "import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { TextBuffer, type TextChunk } from \"../text-buffer\"\nimport { TextBufferView } from \"../text-buffer-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext, type LineInfoProvider } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { LineInfo } from \"../zig\"\nimport { SyntaxStyle } from \"../syntax-style\"\n\nexport interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {\n fg?: string | RGBA\n bg?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n truncate?: boolean\n}\n\nexport abstract class TextBufferRenderable extends Renderable implements LineInfoProvider {\n public selectable: boolean = true\n\n protected _defaultFg: RGBA\n protected _defaultBg: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n protected _scrollX: number = 0\n protected _scrollY: number = 0\n protected _truncate: boolean = false\n\n protected textBuffer: TextBuffer\n protected textBufferView: TextBufferView\n protected _textBufferSyntaxStyle: SyntaxStyle\n\n protected _defaultOptions = {\n fg: RGBA.fromValues(1, 1, 1, 1),\n bg: RGBA.fromValues(0, 0, 0, 0),\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n truncate: false,\n } satisfies Partial<TextBufferOptions>\n\n constructor(ctx: RenderContext, options: TextBufferOptions) {\n super(ctx, options)\n\n this._defaultFg = parseColor(options.fg ?? this._defaultOptions.fg)\n this._defaultBg = parseColor(options.bg ?? this._defaultOptions.bg)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n this._truncate = options.truncate ?? this._defaultOptions.truncate\n\n this.textBuffer = TextBuffer.create(this._ctx.widthMethod)\n this.textBufferView = TextBufferView.create(this.textBuffer)\n\n this._textBufferSyntaxStyle = SyntaxStyle.create()\n this.textBuffer.setSyntaxStyle(this._textBufferSyntaxStyle)\n\n this.textBufferView.setWrapMode(this._wrapMode)\n this.setupMeasureFunc()\n\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (this._tabIndicator !== undefined) {\n this.textBufferView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n if (this._wrapMode !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n\n this.textBufferView.setTruncate(this._truncate)\n\n this.updateTextInfo()\n }\n\n protected onMouseEvent(event: any): void {\n if (event.type === \"scroll\") {\n this.handleScroll(event)\n }\n }\n\n protected handleScroll(event: any): void {\n if (!event.scroll) return\n\n const { direction, delta } = event.scroll\n\n if (direction === \"up\") {\n this.scrollY -= delta\n } else if (direction === \"down\") {\n this.scrollY += delta\n }\n\n if (this._wrapMode === \"none\") {\n if (direction === \"left\") {\n this.scrollX -= delta\n } else if (direction === \"right\") {\n this.scrollX += delta\n }\n }\n }\n\n public get lineInfo(): LineInfo {\n return this.textBufferView.logicalLineInfo\n }\n\n public get lineCount(): number {\n return this.textBuffer.getLineCount()\n }\n\n public get virtualLineCount(): number {\n return this.textBufferView.getVirtualLineCount()\n }\n\n public get scrollY(): number {\n return this._scrollY\n }\n\n public set scrollY(value: number) {\n const maxScrollY = Math.max(0, this.scrollHeight - this.height)\n const clamped = Math.max(0, Math.min(value, maxScrollY))\n if (this._scrollY !== clamped) {\n this._scrollY = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollX(): number {\n return this._scrollX\n }\n\n public set scrollX(value: number) {\n const maxScrollX = Math.max(0, this.scrollWidth - this.width)\n const clamped = Math.max(0, Math.min(value, maxScrollX))\n if (this._scrollX !== clamped) {\n this._scrollX = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollWidth(): number {\n return this.lineInfo.maxLineWidth\n }\n\n public get scrollHeight(): number {\n return this.lineInfo.lineStarts.length\n }\n\n public get maxScrollY(): number {\n return Math.max(0, this.scrollHeight - this.height)\n }\n\n public get maxScrollX(): number {\n return Math.max(0, this.scrollWidth - this.width)\n }\n\n protected updateViewportOffset(): void {\n // Update the viewport with the new scroll position\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n }\n\n get plainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n get textLength(): number {\n return this.textBuffer.length\n }\n\n get fg(): RGBA {\n return this._defaultFg\n }\n\n set fg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.fg)\n if (this._defaultFg !== newColor) {\n this._defaultFg = newColor\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.onFgChanged(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get bg(): RGBA {\n return this._defaultBg\n }\n\n set bg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.bg)\n if (this._defaultBg !== newColor) {\n this._defaultBg = newColor\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.onBgChanged(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n this.onAttributesChanged(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.textBufferView.setWrapMode(this._wrapMode)\n if (value !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n // Changing wrap mode can change dimensions, so mark yoga node dirty to trigger re-measurement\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.textBufferView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n get truncate(): boolean {\n return this._truncate\n }\n\n set truncate(value: boolean) {\n if (this._truncate !== value) {\n this._truncate = value\n this.textBufferView.setTruncate(value)\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, width, height)\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n return true\n }\n\n return this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n protected updateTextInfo(): void {\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n // Undefined = 0,\n // Exactly = 1,\n // AtMost = 2\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // When widthMode is Undefined, Yoga is asking for the intrinsic/natural width\n // Pass width=0 to measureForDimensions to signal we want max-content (no wrapping)\n // The Zig code treats width=0 with wrap_mode != none as null wrap_width,\n // which triggers no-wrap mode and returns iter_mod.getMaxLineWidth()\n let effectiveWidth: number\n if (widthMode === MeasureMode.Undefined || isNaN(width)) {\n effectiveWidth = 0\n } else {\n effectiveWidth = width\n }\n\n const effectiveHeight = isNaN(height) ? 1 : height\n\n const measureResult = this.textBufferView.measureForDimensions(\n Math.floor(effectiveWidth),\n Math.floor(effectiveHeight),\n )\n\n const measuredWidth = measureResult ? Math.max(1, measureResult.maxWidth) : 1\n const measuredHeight = measureResult ? Math.max(1, measureResult.lineCount) : 1\n\n if (widthMode === MeasureMode.AtMost && this._positionType !== \"absolute\") {\n return {\n width: Math.min(effectiveWidth, measuredWidth),\n height: Math.min(effectiveHeight, measuredHeight),\n }\n }\n\n // NOTE: Yoga may use these measurements or not.\n // If the yoga node settings and the parent allow this node to grow, it will.\n return {\n width: measuredWidth,\n height: measuredHeight,\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n let changed: boolean\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n changed = true\n } else if (selection?.isStart) {\n changed = this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n } else {\n changed = this.textBufferView.updateLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.textBufferView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.textBufferView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.textBufferView.getSelection()\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.textBuffer.ptr) {\n buffer.drawTextBuffer(this.textBufferView, this.x, this.y)\n }\n }\n\n destroy(): void {\n if (this.isDestroyed) return\n\n this.textBuffer.setSyntaxStyle(null)\n this._textBufferSyntaxStyle.destroy()\n this.textBufferView.destroy()\n this.textBuffer.destroy()\n super.destroy()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onBgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n // Override in subclasses if needed\n }\n}\n", "import type { TextRenderable } from \".\"\nimport { BaseRenderable, type BaseRenderableOptions } from \"../Renderable\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { isStyledText, StyledText } from \"../lib/styled-text\"\nimport { type TextChunk } from \"../text-buffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface TextNodeOptions extends BaseRenderableOptions {\n fg?: string | RGBA\n bg?: string | RGBA\n attributes?: number\n link?: { url: string }\n}\n\nconst BrandedTextNodeRenderable: unique symbol = Symbol.for(\"@opentui/core/TextNodeRenderable\")\n\nexport function isTextNodeRenderable(obj: any): obj is TextNodeRenderable {\n return !!obj?.[BrandedTextNodeRenderable]\n}\n\nfunction styledTextToTextNodes(styledText: StyledText): TextNodeRenderable[] {\n return styledText.chunks.map((chunk) => {\n const node = new TextNodeRenderable({\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n link: chunk.link,\n })\n node.add(chunk.text)\n return node\n })\n}\n\nexport class TextNodeRenderable extends BaseRenderable {\n [BrandedTextNodeRenderable] = true\n\n private _fg?: RGBA\n private _bg?: RGBA\n private _attributes: number\n private _link?: { url: string }\n private _children: (string | TextNodeRenderable)[] = []\n public parent: TextNodeRenderable | null = null\n\n constructor(options: TextNodeOptions) {\n super(options)\n\n this._fg = options.fg ? parseColor(options.fg) : undefined\n this._bg = options.bg ? parseColor(options.bg) : undefined\n this._attributes = options.attributes ?? 0\n this._link = options.link\n }\n\n public get children(): (string | TextNodeRenderable)[] {\n return this._children\n }\n\n public set children(children: (string | TextNodeRenderable)[]) {\n this._children = children\n this.requestRender()\n }\n\n public requestRender(): void {\n this.markDirty()\n this.parent?.requestRender()\n }\n\n public add(obj: TextNodeRenderable | StyledText | string, index?: number): number {\n if (typeof obj === \"string\") {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n this.requestRender()\n return insertIndex\n }\n\n if (isTextNodeRenderable(obj)) {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n obj.parent = this\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n obj.parent = this\n this.requestRender()\n return insertIndex\n }\n\n if (isStyledText(obj)) {\n const textNodes = styledTextToTextNodes(obj)\n if (index !== undefined) {\n this._children.splice(index, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return insertIndex\n }\n\n throw new Error(\"TextNodeRenderable only accepts strings, TextNodeRenderable instances, or StyledText instances\")\n }\n\n public replace(obj: TextNodeRenderable | string, index: number) {\n this._children[index] = obj\n if (typeof obj !== \"string\") {\n obj.parent = this\n }\n this.requestRender()\n }\n\n public insertBefore(\n child: string | TextNodeRenderable | StyledText,\n anchorNode: TextNodeRenderable | string | unknown,\n ): this {\n if (!anchorNode || !isTextNodeRenderable(anchorNode)) {\n throw new Error(\"Anchor must be a TextNodeRenderable\")\n }\n\n const anchorIndex = this._children.indexOf(anchorNode)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor node not found in children\")\n }\n\n if (typeof child === \"string\") {\n this._children.splice(anchorIndex, 0, child)\n } else if (isTextNodeRenderable(child)) {\n this._children.splice(anchorIndex, 0, child)\n child.parent = this\n } else if (child instanceof StyledText) {\n const textNodes = styledTextToTextNodes(child)\n this._children.splice(anchorIndex, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n } else {\n throw new Error(\"Child must be a string, TextNodeRenderable, or StyledText instance\")\n }\n\n this.requestRender()\n return this\n }\n\n public remove(id: string): this {\n const childIndex = this.getRenderableIndex(id)\n if (childIndex === -1) {\n throw new Error(\"Child not found in children\")\n }\n\n const child = this._children[childIndex] as TextNodeRenderable\n\n this._children.splice(childIndex, 1)\n child.parent = null\n this.requestRender()\n return this\n }\n\n public clear(): void {\n this._children = []\n this.requestRender()\n }\n\n public mergeStyles(parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } }): {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n link?: { url: string }\n } {\n return {\n fg: this._fg ?? parentStyle.fg,\n bg: this._bg ?? parentStyle.bg,\n attributes: this._attributes | parentStyle.attributes,\n link: this._link ?? parentStyle.link,\n }\n }\n\n public gatherWithInheritedStyle(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n const currentStyle = this.mergeStyles(parentStyle)\n\n const chunks: TextChunk[] = []\n\n for (const child of this._children) {\n if (typeof child === \"string\") {\n chunks.push({\n __isChunk: true,\n text: child,\n fg: currentStyle.fg,\n bg: currentStyle.bg,\n attributes: currentStyle.attributes,\n link: currentStyle.link,\n })\n } else {\n const childChunks = child.gatherWithInheritedStyle(currentStyle)\n chunks.push(...childChunks)\n }\n }\n\n this.markClean()\n\n return chunks\n }\n\n public static fromString(text: string, options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n node.add(text)\n return node\n }\n\n public static fromNodes(nodes: TextNodeRenderable[], options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n for (const childNode of nodes) {\n node.add(childNode)\n }\n return node\n }\n\n public toChunks(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n return this.gatherWithInheritedStyle(parentStyle)\n }\n\n public getChildren(): BaseRenderable[] {\n return this._children.filter((child): child is TextNodeRenderable => typeof child !== \"string\")\n }\n\n public getChildrenCount(): number {\n return this._children.length\n }\n\n public getRenderable(id: string): BaseRenderable | undefined {\n return this._children.find((child): child is TextNodeRenderable => typeof child !== \"string\" && child.id === id)\n }\n\n public getRenderableIndex(id: string): number {\n return this._children.findIndex((child) => isTextNodeRenderable(child) && child.id === id)\n }\n\n public get fg(): RGBA | undefined {\n return this._fg\n }\n\n public set fg(fg: RGBA | string | undefined) {\n if (!fg) {\n this._fg = undefined\n this.requestRender()\n return\n }\n this._fg = parseColor(fg)\n this.requestRender()\n }\n\n public set bg(bg: RGBA | string | undefined) {\n if (!bg) {\n this._bg = undefined\n this.requestRender()\n return\n }\n this._bg = parseColor(bg)\n this.requestRender()\n }\n\n public get bg(): RGBA | undefined {\n return this._bg\n }\n\n public set attributes(attributes: number) {\n this._attributes = attributes\n this.requestRender()\n }\n\n public get attributes(): number {\n return this._attributes\n }\n\n public set link(link: { url: string } | undefined) {\n this._link = link\n this.requestRender()\n }\n\n public get link(): { url: string } | undefined {\n return this._link\n }\n\n public findDescendantById(id: string): BaseRenderable | undefined {\n return undefined\n }\n}\n\nexport class RootTextNodeRenderable extends TextNodeRenderable {\n textParent: TextRenderable\n\n constructor(\n private readonly ctx: RenderContext,\n options: TextNodeOptions,\n textParent: TextRenderable,\n ) {\n super(options)\n this.textParent = textParent\n }\n\n public requestRender(): void {\n this.markDirty()\n this.ctx.requestRender()\n }\n}\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n if (item.task) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n if (item.tokens[0]?.type === 'text' || item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].raw = item.tokens[0].raw.replace(this.rules.other.listReplaceTask, '');\n item.tokens[0].text = item.tokens[0].text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escape(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escape(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import {\n type ColorInput,\n OptimizedBuffer,\n parseColor,\n Renderable,\n type RenderableOptions,\n type RenderContext,\n RGBA,\n} from \"../index\"\n\nconst defaultThumbBackgroundColor = RGBA.fromHex(\"#9a9ea3\")\nconst defaultTrackBackgroundColor = RGBA.fromHex(\"#252527\")\n\nexport interface SliderOptions extends RenderableOptions<SliderRenderable> {\n orientation: \"vertical\" | \"horizontal\"\n value?: number\n min?: number\n max?: number\n viewPortSize?: number\n backgroundColor?: ColorInput\n foregroundColor?: ColorInput\n onChange?: (value: number) => void\n}\n\nexport class SliderRenderable extends Renderable {\n public readonly orientation: \"vertical\" | \"horizontal\"\n private _value: number\n private _min: number\n private _max: number\n private _viewPortSize: number\n private _backgroundColor: RGBA\n private _foregroundColor: RGBA\n private _onChange?: (value: number) => void\n\n constructor(ctx: RenderContext, options: SliderOptions) {\n super(ctx, { flexShrink: 0, ...options })\n this.orientation = options.orientation\n this._min = options.min ?? 0\n this._max = options.max ?? 100\n this._value = options.value ?? this._min\n this._viewPortSize = options.viewPortSize ?? Math.max(1, (this._max - this._min) * 0.1)\n this._onChange = options.onChange\n this._backgroundColor = options.backgroundColor ? parseColor(options.backgroundColor) : defaultTrackBackgroundColor\n this._foregroundColor = options.foregroundColor ? parseColor(options.foregroundColor) : defaultThumbBackgroundColor\n\n this.setupMouseHandling()\n }\n\n get value(): number {\n return this._value\n }\n\n set value(newValue: number) {\n const clamped = Math.max(this._min, Math.min(this._max, newValue))\n if (clamped !== this._value) {\n this._value = clamped\n this._onChange?.(clamped)\n this.emit(\"change\", { value: clamped })\n this.requestRender()\n }\n }\n\n get min(): number {\n return this._min\n }\n\n set min(newMin: number) {\n if (newMin !== this._min) {\n this._min = newMin\n if (this._value < newMin) {\n this.value = newMin\n }\n this.requestRender()\n }\n }\n\n get max(): number {\n return this._max\n }\n\n set max(newMax: number) {\n if (newMax !== this._max) {\n this._max = newMax\n if (this._value > newMax) {\n this.value = newMax\n }\n this.requestRender()\n }\n }\n\n set viewPortSize(size: number) {\n const clampedSize = Math.max(0.01, Math.min(size, this._max - this._min))\n if (clampedSize !== this._viewPortSize) {\n this._viewPortSize = clampedSize\n this.requestRender()\n }\n }\n\n get viewPortSize(): number {\n return this._viewPortSize\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: ColorInput) {\n this._backgroundColor = parseColor(value)\n this.requestRender()\n }\n\n get foregroundColor(): RGBA {\n return this._foregroundColor\n }\n\n set foregroundColor(value: ColorInput) {\n this._foregroundColor = parseColor(value)\n this.requestRender()\n }\n\n private calculateDragOffsetVirtual(event: any): number {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const mousePos = (this.orientation === \"vertical\" ? event.y : event.x) - trackStart\n const virtualMousePos = Math.max(\n 0,\n Math.min((this.orientation === \"vertical\" ? this.height : this.width) * 2, mousePos * 2),\n )\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.max(0, Math.min(virtualThumbSize, virtualMousePos - virtualThumbStart))\n }\n\n private setupMouseHandling(): void {\n let isDragging = false\n let dragOffsetVirtual = 0\n\n this.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n const thumb = this.getThumbRect()\n const inThumb =\n event.x >= thumb.x && event.x < thumb.x + thumb.width && event.y >= thumb.y && event.y < thumb.y + thumb.height\n\n if (inThumb) {\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n } else {\n this.updateValueFromMouseDirect(event)\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n }\n }\n\n this.onMouseDrag = (event) => {\n if (!isDragging) return\n event.stopPropagation()\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n\n this.onMouseUp = (event) => {\n if (isDragging) {\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n isDragging = false\n }\n }\n\n private updateValueFromMouseDirect(event: any): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const ratio = trackSize === 0 ? 0 : clampedMousePos / trackSize\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private updateValueFromMouseWithOffset(event: any, offsetVirtual: number): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const virtualTrackSize = trackSize * 2\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const virtualMousePos = clampedMousePos * 2\n\n const virtualThumbSize = this.getVirtualThumbSize()\n const maxThumbStart = Math.max(0, virtualTrackSize - virtualThumbSize)\n\n let desiredThumbStart = virtualMousePos - offsetVirtual\n desiredThumbStart = Math.max(0, Math.min(maxThumbStart, desiredThumbStart))\n\n const ratio = maxThumbStart === 0 ? 0 : desiredThumbStart / maxThumbStart\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private getThumbRect(): { x: number; y: number; width: number; height: number } {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n\n const realThumbStart = Math.floor(virtualThumbStart / 2)\n const realThumbSize = Math.ceil((virtualThumbStart + virtualThumbSize) / 2) - realThumbStart\n\n if (this.orientation === \"vertical\") {\n return {\n x: this.x,\n y: this.y + realThumbStart,\n width: this.width,\n height: Math.max(1, realThumbSize),\n }\n } else {\n return {\n x: this.x + realThumbStart,\n y: this.y,\n width: Math.max(1, realThumbSize),\n height: this.height,\n }\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.orientation === \"horizontal\") {\n this.renderHorizontal(buffer)\n } else {\n this.renderVertical(buffer)\n }\n }\n\n private renderHorizontal(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startX = Math.max(0, realStartCell)\n const endX = Math.min(this.width - 1, realEndCell)\n\n for (let realX = startX; realX <= endX; realX++) {\n const virtualCellStart = realX * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else {\n const isLeftHalf = thumbStartInCell === virtualCellStart\n if (isLeftHalf) {\n char = \"\u258C\"\n } else {\n char = \"\u2590\"\n }\n }\n\n for (let y = 0; y < this.height; y++) {\n buffer.setCellWithAlphaBlending(this.x + realX, this.y + y, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private renderVertical(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startY = Math.max(0, realStartCell)\n const endY = Math.min(this.height - 1, realEndCell)\n\n for (let realY = startY; realY <= endY; realY++) {\n const virtualCellStart = realY * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else if (coverage > 0) {\n const virtualPositionInCell = thumbStartInCell - virtualCellStart\n if (virtualPositionInCell === 0) {\n char = \"\u2580\"\n } else {\n char = \"\u2584\"\n }\n }\n\n for (let x = 0; x < this.width; x++) {\n buffer.setCellWithAlphaBlending(this.x + x, this.y + realY, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private getVirtualThumbSize(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return virtualTrackSize\n\n const viewportSize = Math.max(1, this._viewPortSize)\n const contentSize = range + viewportSize\n\n if (contentSize <= viewportSize) return virtualTrackSize\n\n const thumbRatio = viewportSize / contentSize\n const calculatedSize = Math.floor(virtualTrackSize * thumbRatio)\n\n return Math.max(1, Math.min(calculatedSize, virtualTrackSize))\n }\n\n private getVirtualThumbStart(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return 0\n\n const valueRatio = (this._value - this._min) / range\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.round(valueRatio * (virtualTrackSize - virtualThumbSize))\n }\n}\n", "// zig-registry.ts \u2014 Browser-safe types and render-lib registry.\n// Zero native imports. Can be imported by both native and browser code.\n\nimport type {\n CursorStyle,\n CursorStyleOptions,\n DebugOverlayCorner,\n Highlight,\n LineInfo,\n MousePointerStyle,\n WidthMethod,\n} from \"./types\"\nimport type {\n AllocatorStats,\n BuildOptions,\n NativeSpanFeedOptions,\n NativeSpanFeedStats,\n ReserveInfo,\n} from \"./zig-structs\"\nimport type { RGBA } from \"./lib/RGBA\"\nimport type { OptimizedBuffer } from \"./buffer\"\nimport type { TextBuffer } from \"./text-buffer\"\n\n// \u2500\u2500\u2500 Portable types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type Pointer = number\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n}\n\n/**\n * VisualCursor represents a cursor position with both visual and logical coordinates.\n * Visual coordinates (visualRow, visualCol) are VIEWPORT-RELATIVE.\n * This means visualRow=0 is the first visible line in the viewport, not the first line in the document.\n * Logical coordinates (logicalRow, logicalCol) are document-absolute.\n */\nexport interface VisualCursor {\n visualRow: number // Viewport-relative row (0 = top of viewport)\n visualCol: number // Viewport-relative column (0 = left edge of viewport when not wrapping)\n logicalRow: number // Document-absolute row\n logicalCol: number // Document-absolute column\n offset: number // Global display-width offset from buffer start\n}\n\nexport interface LogicalCursor {\n row: number\n col: number\n offset: number\n}\n\nexport interface CursorState {\n x: number\n y: number\n visible: boolean\n style: CursorStyle\n blinking: boolean\n color: RGBA\n}\n\nexport type NativeSpanFeedEventHandler = (eventId: number, arg0: Pointer, arg1: number | bigint) => void\n\n// Re-export types that consumers need\nexport type { LineInfo, AllocatorStats, BuildOptions, ReserveInfo }\n\n// \u2500\u2500\u2500 RenderLib interface \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface RenderLib {\n createRenderer: (width: number, height: number, options?: { testing?: boolean; remote?: boolean }) => Pointer | null\n setTerminalEnvVar: (renderer: Pointer, key: string, value: string) => boolean\n destroyRenderer: (renderer: Pointer) => void\n setUseThread: (renderer: Pointer, useThread: boolean) => void\n setBackgroundColor: (renderer: Pointer, color: RGBA) => void\n setRenderOffset: (renderer: Pointer, offset: number) => void\n updateStats: (renderer: Pointer, time: number, fps: number, frameCallbackTime: number) => void\n updateMemoryStats: (renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) => void\n render: (renderer: Pointer, force: boolean) => void\n getNextBuffer: (renderer: Pointer) => OptimizedBuffer\n getCurrentBuffer: (renderer: Pointer) => OptimizedBuffer\n createOptimizedBuffer: (\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha?: boolean,\n id?: string,\n ) => OptimizedBuffer\n destroyOptimizedBuffer: (bufferPtr: Pointer) => void\n drawFrameBuffer: (\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) => void\n getBufferWidth: (buffer: Pointer) => number\n getBufferHeight: (buffer: Pointer) => number\n bufferClear: (buffer: Pointer, color: RGBA) => void\n bufferGetCharPtr: (buffer: Pointer) => Pointer\n bufferGetFgPtr: (buffer: Pointer) => Pointer\n bufferGetBgPtr: (buffer: Pointer) => Pointer\n bufferGetAttributesPtr: (buffer: Pointer) => Pointer\n bufferGetRespectAlpha: (buffer: Pointer) => boolean\n bufferSetRespectAlpha: (buffer: Pointer, respectAlpha: boolean) => void\n bufferGetId: (buffer: Pointer) => string\n bufferGetRealCharSize: (buffer: Pointer) => number\n bufferWriteResolvedChars: (buffer: Pointer, outputBuffer: Uint8Array, addLineBreaks: boolean) => number\n bufferDrawText: (\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) => void\n bufferSetCellWithAlphaBlending: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferSetCell: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferFillRect: (buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) => void\n bufferDrawSuperSampleBuffer: (\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ) => void\n bufferDrawPackedBuffer: (\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ) => void\n bufferDrawGrayscaleBuffer: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrayscaleBufferSupersampled: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrid: (\n buffer: Pointer,\n borderChars: Uint32Array,\n borderFg: RGBA,\n borderBg: RGBA,\n columnOffsets: Int32Array,\n columnCount: number,\n rowOffsets: Int32Array,\n rowCount: number,\n options: { drawInner: boolean; drawOuter: boolean },\n ) => void\n bufferDrawBox: (\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ) => void\n bufferResize: (buffer: Pointer, width: number, height: number) => void\n resizeRenderer: (renderer: Pointer, width: number, height: number) => void\n setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void\n setCursorColor: (renderer: Pointer, color: RGBA) => void\n getCursorState: (renderer: Pointer) => CursorState\n setCursorStyleOptions: (renderer: Pointer, options: CursorStyleOptions) => void\n setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void\n clearTerminal: (renderer: Pointer) => void\n setTerminalTitle: (renderer: Pointer, title: string) => void\n copyToClipboardOSC52: (renderer: Pointer, target: number, payload: Uint8Array) => boolean\n clearClipboardOSC52: (renderer: Pointer, target: number) => boolean\n addToHitGrid: (renderer: Pointer, x: number, y: number, width: number, height: number, id: number) => void\n clearCurrentHitGrid: (renderer: Pointer) => void\n hitGridPushScissorRect: (renderer: Pointer, x: number, y: number, width: number, height: number) => void\n hitGridPopScissorRect: (renderer: Pointer) => void\n hitGridClearScissorRects: (renderer: Pointer) => void\n addToCurrentHitGridClipped: (\n renderer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n id: number,\n ) => void\n checkHit: (renderer: Pointer, x: number, y: number) => number\n getHitGridDirty: (renderer: Pointer) => boolean\n dumpHitGrid: (renderer: Pointer) => void\n dumpBuffers: (renderer: Pointer, timestamp?: number) => void\n dumpStdoutBuffer: (renderer: Pointer, timestamp?: number) => void\n restoreTerminalModes: (renderer: Pointer) => void\n enableMouse: (renderer: Pointer, enableMovement: boolean) => void\n disableMouse: (renderer: Pointer) => void\n enableKittyKeyboard: (renderer: Pointer, flags: number) => void\n disableKittyKeyboard: (renderer: Pointer) => void\n setKittyKeyboardFlags: (renderer: Pointer, flags: number) => void\n getKittyKeyboardFlags: (renderer: Pointer) => number\n setupTerminal: (renderer: Pointer, useAlternateScreen: boolean) => void\n suspendRenderer: (renderer: Pointer) => void\n resumeRenderer: (renderer: Pointer) => void\n queryPixelResolution: (renderer: Pointer) => void\n writeOut: (renderer: Pointer, data: string | Uint8Array) => void\n\n // TextBuffer methods\n createTextBuffer: (widthMethod: WidthMethod) => TextBuffer\n destroyTextBuffer: (buffer: Pointer) => void\n textBufferGetLength: (buffer: Pointer) => number\n textBufferGetByteSize: (buffer: Pointer) => number\n\n textBufferReset: (buffer: Pointer) => void\n textBufferClear: (buffer: Pointer) => void\n textBufferRegisterMemBuffer: (buffer: Pointer, bytes: Uint8Array, owned?: boolean) => number\n textBufferReplaceMemBuffer: (buffer: Pointer, memId: number, bytes: Uint8Array, owned?: boolean) => boolean\n textBufferClearMemRegistry: (buffer: Pointer) => void\n textBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n textBufferAppend: (buffer: Pointer, bytes: Uint8Array) => void\n textBufferAppendFromMemId: (buffer: Pointer, memId: number) => void\n textBufferLoadFile: (buffer: Pointer, path: string) => boolean\n textBufferSetStyledText: (\n buffer: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number; link?: { url: string } }>,\n ) => void\n textBufferSetDefaultFg: (buffer: Pointer, fg: RGBA | null) => void\n textBufferSetDefaultBg: (buffer: Pointer, bg: RGBA | null) => void\n textBufferSetDefaultAttributes: (buffer: Pointer, attributes: number | null) => void\n textBufferResetDefaults: (buffer: Pointer) => void\n textBufferGetTabWidth: (buffer: Pointer) => number\n textBufferSetTabWidth: (buffer: Pointer, width: number) => void\n textBufferGetLineCount: (buffer: Pointer) => number\n getPlainTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null\n textBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n textBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // TextBufferView methods\n createTextBufferView: (textBuffer: Pointer) => Pointer\n destroyTextBufferView: (view: Pointer) => void\n textBufferViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n textBufferViewResetSelection: (view: Pointer) => void\n textBufferViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n textBufferViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n textBufferViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewResetLocalSelection: (view: Pointer) => void\n textBufferViewSetWrapWidth: (view: Pointer, width: number) => void\n textBufferViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n textBufferViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n textBufferViewSetViewport: (view: Pointer, x: number, y: number, width: number, height: number) => void\n textBufferViewGetLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewGetPlainTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewSetTabIndicator: (view: Pointer, indicator: number) => void\n textBufferViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n textBufferViewSetTruncate: (view: Pointer, truncate: boolean) => void\n textBufferViewMeasureForDimensions: (\n view: Pointer,\n width: number,\n height: number,\n ) => { lineCount: number; maxWidth: number } | null\n textBufferViewGetVirtualLineCount: (view: Pointer) => number\n\n readonly encoder: TextEncoder\n readonly decoder: TextDecoder\n bufferDrawTextBufferView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n bufferDrawEditorView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n\n // EditBuffer methods\n createEditBuffer: (widthMethod: WidthMethod) => Pointer\n destroyEditBuffer: (buffer: Pointer) => void\n editBufferSetText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferReplaceText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferReplaceTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferGetText: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferInsertChar: (buffer: Pointer, char: string) => void\n editBufferInsertText: (buffer: Pointer, text: string) => void\n editBufferDeleteChar: (buffer: Pointer) => void\n editBufferDeleteCharBackward: (buffer: Pointer) => void\n editBufferDeleteRange: (buffer: Pointer, startLine: number, startCol: number, endLine: number, endCol: number) => void\n editBufferNewLine: (buffer: Pointer) => void\n editBufferDeleteLine: (buffer: Pointer) => void\n editBufferMoveCursorLeft: (buffer: Pointer) => void\n editBufferMoveCursorRight: (buffer: Pointer) => void\n editBufferMoveCursorUp: (buffer: Pointer) => void\n editBufferMoveCursorDown: (buffer: Pointer) => void\n editBufferGotoLine: (buffer: Pointer, line: number) => void\n editBufferSetCursor: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorToLineCol: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorByOffset: (buffer: Pointer, offset: number) => void\n editBufferGetCursorPosition: (buffer: Pointer) => LogicalCursor\n editBufferGetId: (buffer: Pointer) => number\n editBufferGetTextBuffer: (buffer: Pointer) => Pointer\n editBufferDebugLogRope: (buffer: Pointer) => void\n editBufferUndo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferRedo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferCanUndo: (buffer: Pointer) => boolean\n editBufferCanRedo: (buffer: Pointer) => boolean\n editBufferClearHistory: (buffer: Pointer) => void\n editBufferClear: (buffer: Pointer) => void\n editBufferGetNextWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetPrevWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetEOL: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferOffsetToPosition: (buffer: Pointer, offset: number) => { row: number; col: number; offset: number } | null\n editBufferPositionToOffset: (buffer: Pointer, row: number, col: number) => number\n editBufferGetLineStartOffset: (buffer: Pointer, row: number) => number\n editBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n editBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // EditorView methods\n createEditorView: (editBufferPtr: Pointer, viewportWidth: number, viewportHeight: number) => Pointer\n destroyEditorView: (view: Pointer) => void\n editorViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n editorViewSetViewport: (\n view: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n moveCursor: boolean,\n ) => void\n editorViewGetViewport: (view: Pointer) => { offsetY: number; offsetX: number; height: number; width: number }\n editorViewSetScrollMargin: (view: Pointer, margin: number) => void\n editorViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n editorViewGetVirtualLineCount: (view: Pointer) => number\n editorViewGetTotalVirtualLineCount: (view: Pointer) => number\n editorViewGetTextBufferView: (view: Pointer) => Pointer\n editorViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n editorViewResetSelection: (view: Pointer) => void\n editorViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n editorViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n editorViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewResetLocalSelection: (view: Pointer) => void\n editorViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetCursor: (view: Pointer) => { row: number; col: number }\n editorViewGetText: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetVisualCursor: (view: Pointer) => VisualCursor\n editorViewMoveUpVisual: (view: Pointer) => void\n editorViewMoveDownVisual: (view: Pointer) => void\n editorViewDeleteSelectedText: (view: Pointer) => void\n editorViewSetCursorByOffset: (view: Pointer, offset: number) => void\n editorViewGetNextWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetPrevWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetEOL: (view: Pointer) => VisualCursor\n editorViewGetVisualSOL: (view: Pointer) => VisualCursor\n editorViewGetVisualEOL: (view: Pointer) => VisualCursor\n editorViewGetLineInfo: (view: Pointer) => LineInfo\n editorViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n editorViewSetPlaceholderStyledText: (\n view: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number }>,\n ) => void\n editorViewSetTabIndicator: (view: Pointer, indicator: number) => void\n editorViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n\n bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void\n bufferPopScissorRect: (buffer: Pointer) => void\n bufferClearScissorRects: (buffer: Pointer) => void\n bufferPushOpacity: (buffer: Pointer, opacity: number) => void\n bufferPopOpacity: (buffer: Pointer) => void\n bufferGetCurrentOpacity: (buffer: Pointer) => number\n bufferClearOpacity: (buffer: Pointer) => void\n textBufferAddHighlightByCharRange: (buffer: Pointer, highlight: Highlight) => void\n textBufferAddHighlight: (buffer: Pointer, lineIdx: number, highlight: Highlight) => void\n textBufferRemoveHighlightsByRef: (buffer: Pointer, hlRef: number) => void\n textBufferClearLineHighlights: (buffer: Pointer, lineIdx: number) => void\n textBufferClearAllHighlights: (buffer: Pointer) => void\n textBufferSetSyntaxStyle: (buffer: Pointer, style: Pointer | null) => void\n textBufferGetLineHighlights: (buffer: Pointer, lineIdx: number) => Array<Highlight>\n textBufferGetHighlightCount: (buffer: Pointer) => number\n\n getArenaAllocatedBytes: () => number\n getBuildOptions: () => BuildOptions\n getAllocatorStats: () => AllocatorStats\n\n createSyntaxStyle: () => Pointer\n destroySyntaxStyle: (style: Pointer) => void\n syntaxStyleRegister: (style: Pointer, name: string, fg: RGBA | null, bg: RGBA | null, attributes: number) => number\n syntaxStyleResolveByName: (style: Pointer, name: string) => number | null\n syntaxStyleGetStyleCount: (style: Pointer) => number\n\n getTerminalCapabilities: (renderer: Pointer) => any\n processCapabilityResponse: (renderer: Pointer, response: string) => void\n\n encodeUnicode: (\n text: string,\n widthMethod: WidthMethod,\n ) => { ptr: Pointer; data: Array<{ width: number; char: number }> } | null\n freeUnicode: (encoded: { ptr: Pointer; data: Array<{ width: number; char: number }> }) => void\n bufferDrawChar: (buffer: Pointer, char: number, x: number, y: number, fg: RGBA, bg: RGBA, attributes?: number) => void\n\n registerNativeSpanFeedStream: (stream: Pointer, handler: NativeSpanFeedEventHandler) => void\n unregisterNativeSpanFeedStream: (stream: Pointer) => void\n createNativeSpanFeed: (options?: NativeSpanFeedOptions | null) => Pointer\n attachNativeSpanFeed: (stream: Pointer) => number\n destroyNativeSpanFeed: (stream: Pointer) => void\n streamWrite: (stream: Pointer, data: Uint8Array | string) => number\n streamCommit: (stream: Pointer) => number\n streamDrainSpans: (stream: Pointer, outBuffer: Uint8Array, maxSpans: number) => number\n streamClose: (stream: Pointer) => number\n streamSetOptions: (stream: Pointer, options: NativeSpanFeedOptions) => number\n streamGetStats: (stream: Pointer) => NativeSpanFeedStats | null\n streamReserve: (stream: Pointer, minLen: number) => { status: number; info: ReserveInfo | null }\n streamCommitReserved: (stream: Pointer, length: number) => number\n\n onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onAnyNativeEvent: (handler: (name: string, data: ArrayBuffer) => void) => void\n}\n\n// \u2500\u2500\u2500 Registry \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _renderLib: RenderLib | undefined\n\nexport function registerRenderLib(lib: RenderLib): void {\n _renderLib = lib\n}\n\nexport function resolveRenderLib(): RenderLib {\n if (!_renderLib) {\n throw new Error(\"No RenderLib registered. In Bun, import '@opentui/core' or '@opentui/core/native' (which loads zig.ts). In browsers, call registerRenderLib() with a browser implementation.\")\n }\n return _renderLib\n}\n\nexport function hasRenderLib(): boolean {\n return _renderLib !== undefined\n}\n\n// In Bun, auto-load the native FFI render lib by importing zig.ts.\n// The variable path prevents bundlers (esbuild, Vite) from statically\n// resolving and including zig.ts in browser bundles.\n// In browsers, typeof Bun is undefined so this block is skipped entirely.\nif (typeof globalThis.Bun !== \"undefined\") {\n const zigPath = \"./zig\"\n try {\n await import(zigPath)\n } catch {\n // Native module not available (e.g. not built yet).\n // resolveRenderLib() will throw a clear error if called.\n }\n}\n\n", "import { Renderable, type ViewportBounds } from \"..\"\nimport { coordinateToCharacterIndex, fonts } from \"./ascii.font\"\n\nclass SelectionAnchor {\n private relativeX: number\n private relativeY: number\n\n constructor(\n private renderable: Renderable,\n absoluteX: number,\n absoluteY: number,\n ) {\n this.relativeX = absoluteX - this.renderable.x\n this.relativeY = absoluteY - this.renderable.y\n }\n\n get x(): number {\n return this.renderable.x + this.relativeX\n }\n\n get y(): number {\n return this.renderable.y + this.relativeY\n }\n}\n\nexport class Selection {\n private _anchor: SelectionAnchor\n private _focus: { x: number; y: number }\n private _selectedRenderables: Renderable[] = []\n private _touchedRenderables: Renderable[] = []\n private _isActive: boolean = true\n private _isDragging: boolean = true\n private _isStart: boolean = false\n\n constructor(anchorRenderable: Renderable, anchor: { x: number; y: number }, focus: { x: number; y: number }) {\n this._anchor = new SelectionAnchor(anchorRenderable, anchor.x, anchor.y)\n this._focus = { ...focus }\n }\n\n get isStart(): boolean {\n return this._isStart\n }\n\n set isStart(value: boolean) {\n this._isStart = value\n }\n\n get anchor(): { x: number; y: number } {\n return { x: this._anchor.x, y: this._anchor.y }\n }\n\n get focus(): { x: number; y: number } {\n return { ...this._focus }\n }\n\n set focus(value: { x: number; y: number }) {\n this._focus = { ...value }\n }\n\n get isActive(): boolean {\n return this._isActive\n }\n\n set isActive(value: boolean) {\n this._isActive = value\n }\n\n get isDragging(): boolean {\n return this._isDragging\n }\n\n set isDragging(value: boolean) {\n this._isDragging = value\n }\n\n get bounds(): ViewportBounds {\n const minX = Math.min(this._anchor.x, this._focus.x)\n const maxX = Math.max(this._anchor.x, this._focus.x)\n const minY = Math.min(this._anchor.y, this._focus.y)\n const maxY = Math.max(this._anchor.y, this._focus.y)\n\n // Selection bounds are inclusive of both anchor and focus\n // A selection from (0,0) to (0,0) covers 1 cell\n // A selection from (0,0) to (5,3) covers cells from (0,0) to (5,3) inclusive\n const width = maxX - minX + 1\n const height = maxY - minY + 1\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n }\n }\n\n updateSelectedRenderables(selectedRenderables: Renderable[]): void {\n this._selectedRenderables = selectedRenderables\n }\n\n get selectedRenderables(): Renderable[] {\n return this._selectedRenderables\n }\n\n updateTouchedRenderables(touchedRenderables: Renderable[]): void {\n this._touchedRenderables = touchedRenderables\n }\n\n get touchedRenderables(): Renderable[] {\n return this._touchedRenderables\n }\n\n getSelectedText(): string {\n const selectedTexts = this._selectedRenderables\n // Sort by reading order: top-to-bottom, then left-to-right\n .sort((a, b) => {\n const aY = a.y\n const bY = b.y\n if (aY !== bY) {\n return aY - bY\n }\n return a.x - b.x\n })\n .filter((renderable) => !renderable.isDestroyed)\n .map((renderable) => renderable.getSelectedText())\n .filter((text) => text)\n return selectedTexts.join(\"\\n\")\n }\n}\n\nexport interface LocalSelectionBounds {\n anchorX: number\n anchorY: number\n focusX: number\n focusY: number\n isActive: boolean\n}\n\nexport function convertGlobalToLocalSelection(\n globalSelection: Selection | null,\n localX: number,\n localY: number,\n): LocalSelectionBounds | null {\n if (!globalSelection?.isActive) {\n return null\n }\n\n return {\n anchorX: globalSelection.anchor.x - localX,\n anchorY: globalSelection.anchor.y - localY,\n focusX: globalSelection.focus.x - localX,\n focusY: globalSelection.focus.y - localY,\n isActive: true,\n }\n}\n\nexport class ASCIIFontSelectionHelper {\n private localSelection: { start: number; end: number } | null = null\n\n constructor(\n private getText: () => string,\n private getFont: () => keyof typeof fonts,\n ) {}\n\n hasSelection(): boolean {\n return this.localSelection !== null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.localSelection\n }\n\n shouldStartSelection(localX: number, localY: number, width: number, height: number): boolean {\n if (localX < 0 || localX >= width || localY < 0 || localY >= height) {\n return false\n }\n\n const text = this.getText()\n const font = this.getFont()\n const charIndex = coordinateToCharacterIndex(localX, text, font)\n\n return charIndex >= 0 && charIndex <= text.length\n }\n\n onLocalSelectionChanged(localSelection: LocalSelectionBounds | null, width: number, height: number): boolean {\n const previousSelection = this.localSelection\n\n if (!localSelection?.isActive) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n const text = this.getText()\n const font = this.getFont()\n\n const selStart = { x: localSelection.anchorX, y: localSelection.anchorY }\n const selEnd = { x: localSelection.focusX, y: localSelection.focusY }\n\n if (height - 1 < selStart.y || 0 > selEnd.y) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n let startCharIndex = 0\n let endCharIndex = text.length\n\n if (selStart.y > height - 1) {\n // Selection starts below us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selStart.y >= 0 && selStart.y <= height - 1) {\n // Selection starts within our Y range - use the actual start X coordinate\n if (selStart.x > 0) {\n startCharIndex = coordinateToCharacterIndex(selStart.x, text, font)\n }\n }\n\n if (selEnd.y < 0) {\n // Selection ends above us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selEnd.y >= 0 && selEnd.y <= height - 1) {\n // Selection ends within our Y range - use the actual end X coordinate\n if (selEnd.x >= 0) {\n endCharIndex = coordinateToCharacterIndex(selEnd.x, text, font)\n } else {\n endCharIndex = 0\n }\n }\n\n if (startCharIndex < endCharIndex && startCharIndex >= 0 && endCharIndex <= text.length) {\n this.localSelection = { start: startCharIndex, end: endCharIndex }\n } else {\n this.localSelection = null\n }\n\n return (\n previousSelection?.start !== this.localSelection?.start || previousSelection?.end !== this.localSelection?.end\n )\n }\n}\n", "import { EventEmitter } from \"events\"\nimport type { RenderContext, CursorStyle, CursorStyleOptions, MousePointerStyle, WidthMethod } from \"./core-shims/types\"\nimport type { RGBA } from \"./core-shims/rgba\"\n\nexport class BrowserKeyHandler extends EventEmitter {\n constructor() {\n super()\n }\n\n processInput(_data: string): boolean {\n return false\n }\n}\n\nexport class BrowserInternalKeyHandler extends BrowserKeyHandler {\n private renderableHandlers: Map<string, Set<Function>> = new Map()\n\n onInternal(event: string, handler: Function): void {\n if (!this.renderableHandlers.has(event)) {\n this.renderableHandlers.set(event, new Set())\n }\n this.renderableHandlers.get(event)!.add(handler)\n }\n\n offInternal(event: string, handler: Function): void {\n const handlers = this.renderableHandlers.get(event)\n if (handlers) {\n handlers.delete(handler)\n }\n }\n\n override emit(event: string, ...args: any[]): boolean {\n // Emit to global listeners first\n const hasGlobal = super.emit(event, ...args)\n\n // Then emit to renderable handlers\n const renderableSet = this.renderableHandlers.get(event)\n if (renderableSet && renderableSet.size > 0) {\n for (const handler of [...renderableSet]) {\n try {\n handler(...args)\n } catch (e) {\n console.error(`[BrowserInternalKeyHandler] Error in ${event} handler:`, e)\n }\n // Check propagation\n if (args[0] && args[0].propagationStopped) break\n }\n return true\n }\n\n return hasGlobal\n }\n}\n\nexport class BrowserRenderContext extends EventEmitter implements RenderContext {\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n private _renderRequested = false\n private _onRenderRequest: (() => void) | null = null\n private _lifecyclePasses: Set<any> = new Set()\n private _focusedRenderable: any | null = null\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n public cursorBlinking: boolean = false\n\n public keyInput: BrowserKeyHandler\n public _internalKeyInput: BrowserInternalKeyHandler\n\n constructor(width: number, height: number, widthMethod: WidthMethod = \"wcwidth\") {\n super()\n this._width = width\n this._height = height\n this._widthMethod = widthMethod\n this.keyInput = new BrowserKeyHandler()\n this._internalKeyInput = new BrowserInternalKeyHandler()\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get capabilities(): any {\n return null\n }\n\n get hasSelection(): boolean {\n return false\n }\n\n get currentFocusedRenderable(): any | null {\n return this._focusedRenderable\n }\n\n setOnRenderRequest(callback: () => void): void {\n this._onRenderRequest = callback\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n this.emit(\"resize\", width, height)\n }\n\n // RenderContext interface methods\n addToHitGrid(_x: number, _y: number, _width: number, _height: number, _id: number): void {}\n\n pushHitGridScissorRect(_x: number, _y: number, _width: number, _height: number): void {}\n\n popHitGridScissorRect(): void {}\n\n clearHitGridScissorRects(): void {}\n\n requestRender(): void {\n if (this._renderRequested) return\n this._renderRequested = true\n this._onRenderRequest?.()\n this._renderRequested = false\n }\n\n setCursorPosition(_x: number, _y: number, _visible: boolean): void {}\n\n setCursorStyle(options: CursorStyleOptions): void {\n if (options.color) {\n this.cursorColor = options.color\n }\n if (options.style) {\n this.cursorStyleType = options.style\n }\n if (options.blinking !== undefined) {\n this.cursorBlinking = options.blinking\n }\n }\n\n setCursorColor(color: RGBA): void {\n this.cursorColor = color\n }\n\n setMousePointer(_shape: MousePointerStyle): void {}\n\n requestLive(): void {}\n\n dropLive(): void {}\n\n getSelection(): any | null {\n return null\n }\n\n requestSelectionUpdate(): void {}\n\n focusRenderable(renderable: any): void {\n if (this._focusedRenderable && this._focusedRenderable !== renderable) {\n this._focusedRenderable.blur?.()\n }\n this._focusedRenderable = renderable\n }\n\n registerLifecyclePass(renderable: any): void {\n this._lifecyclePasses.add(renderable)\n }\n\n unregisterLifecyclePass(renderable: any): void {\n this._lifecyclePasses.delete(renderable)\n }\n\n getLifecyclePasses(): Set<any> {\n return this._lifecyclePasses\n }\n\n clearSelection(): void {}\n\n startSelection(_renderable: any, _x: number, _y: number): void {}\n\n updateSelection(\n _currentRenderable: any | undefined,\n _x: number,\n _y: number,\n _options?: { finishDragging?: boolean },\n ): void {}\n}\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "// Core shims barrel \u2014 aliased as @opentui/core by Vite\n// Re-exports portable code from opentui and swaps in browser replacements.\n// Vite aliases intercept zig, buffer, text-buffer, text-buffer-view,\n// syntax-style, renderer, console, etc. before they reach the filesystem.\n\n// \u2500\u2500\u2500 Pure TS re-exports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// RGBA and color utilities (our own copy to avoid pulling in opentui's lib/index)\nexport { RGBA, parseColor, hexToRgb, rgbToHex, hsvToRgb } from \"./rgba\"\nexport type { ColorInput } from \"./rgba\"\n\n// Types\nexport {\n TextAttributes,\n ATTRIBUTE_BASE_BITS,\n ATTRIBUTE_BASE_MASK,\n getBaseAttributes,\n DebugOverlayCorner,\n} from \"./types\"\nexport type {\n RenderContext,\n ThemeMode,\n CursorStyle,\n CursorStyleOptions,\n MousePointerStyle,\n WidthMethod,\n Timeout,\n ViewportBounds,\n Highlight,\n LineInfo,\n LineInfoProvider,\n CapturedSpan,\n CapturedLine,\n CapturedFrame,\n} from \"./types\"\n\n// \u2500\u2500\u2500 Re-exports from opentui source (Vite intercepts Zig deps) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Renderable base classes (needed by our own code \u2014 main.tsx uses RootRenderable)\n// NOTE: The opentui react package imports from the real opentui barrel instead\n// (redirected by the Vite plugin) to avoid cross-barrel circular dependency issues.\nexport {\n Renderable,\n BaseRenderable,\n RootRenderable,\n LayoutEvents,\n RenderableEvents,\n isRenderable,\n} from \"../../../../opentui/packages/core/src/Renderable\"\nexport type {\n RenderableOptions,\n LayoutOptions,\n BaseRenderableOptions,\n Position,\n RenderCommand,\n} from \"../../../../opentui/packages/core/src/Renderable\"\n\n// Border (pure TS)\nexport {\n BorderChars,\n BorderCharArrays,\n isValidBorderStyle,\n parseBorderStyle,\n getBorderFromSides,\n getBorderSides,\n borderCharsToArray,\n} from \"../../../../opentui/packages/core/src/lib/border\"\nexport type {\n BorderCharacters,\n BorderStyle,\n BorderSides,\n BorderConfig,\n BoxDrawOptions,\n BorderSidesConfig,\n} from \"../../../../opentui/packages/core/src/lib/border\"\n\n// Styled text (pure TS)\nexport {\n StyledText,\n isStyledText,\n stringToStyledText,\n t,\n bold,\n italic,\n underline,\n strikethrough,\n dim,\n reverse,\n blink,\n fg,\n bg,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n} from \"../../../../opentui/packages/core/src/lib/styled-text\"\n\n// Yoga options (pure TS)\nexport {\n parseAlign,\n parseAlignItems,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\nexport type {\n AlignString,\n FlexDirectionString,\n JustifyString,\n OverflowString,\n PositionTypeString,\n WrapString,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\n\n// Renderable validations (pure TS)\nexport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"../../../../opentui/packages/core/src/lib/renderable.validations\"\n\n// Selection (pure TS)\nexport {\n Selection,\n convertGlobalToLocalSelection,\n} from \"../../../../opentui/packages/core/src/lib/selection\"\n\n// VNode composition (pure TS)\nexport { maybeMakeRenderable } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\nexport type { VNode } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\n\n// \u2500\u2500\u2500 Renderable subclasses (re-exported from individual files, not barrel) \u2500\n\n// These are needed by @opentui/react for the component catalogue and host-config.\n// File-level shims (zig, buffer, renderer, etc.) handle their internal imports.\nexport * from \"../../../../opentui/packages/core/src/renderables/Box\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Text\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextNode\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Code\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Diff\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Input\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Select\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TabSelect\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Textarea\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBox\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBar\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Slider\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ASCIIFont\"\nexport * from \"../../../../opentui/packages/core/src/renderables/LineNumberRenderable\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Markdown\"\nexport * from \"../../../../opentui/packages/core/src/renderables/FrameBuffer\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\nimport { TextBufferRenderable } from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\n\n// Gridland extension: textAlign property on TextBufferRenderable\n// Proxies to the BrowserTextBufferView's textAlign property for centered text rendering.\nObject.defineProperty(TextBufferRenderable.prototype, \"textAlign\", {\n get(this: any) {\n return this.textBufferView?.textAlign ?? \"left\"\n },\n set(this: any, value: \"left\" | \"center\" | \"right\") {\n if (this.textBufferView) {\n this.textBufferView.textAlign = value\n this.requestRender()\n }\n },\n enumerable: true,\n configurable: true,\n})\n\n// \u2500\u2500\u2500 Browser replacements \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Buffer \u2014 browser replacement\nexport { BrowserBuffer as OptimizedBuffer } from \"../browser-buffer\"\n\n// TextBuffer \u2014 browser replacement\nexport { BrowserTextBuffer as TextBuffer } from \"../browser-text-buffer\"\nexport type { TextChunk } from \"../browser-text-buffer\"\n\n// TextBufferView \u2014 browser replacement\nexport { BrowserTextBufferView as TextBufferView } from \"../browser-text-buffer-view\"\n\n// SyntaxStyle \u2014 browser stub\nexport { BrowserSyntaxStyle as SyntaxStyle } from \"../browser-syntax-style\"\n\n// \u2500\u2500\u2500 Stubs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function resolveRenderLib(): any {\n return null\n}\n\nexport type RenderLib = any\nexport type Pointer = number\n\n// KeyHandler (re-implemented for browser)\nexport {\n BrowserKeyHandler as KeyHandler,\n BrowserInternalKeyHandler as InternalKeyHandler,\n} from \"../browser-render-context\"\n\n// Renderer \u2014 re-exported from shimmed source path (resolved to renderer-stub.ts)\nexport {\n CliRenderer,\n CliRenderEvents,\n createCliRenderer,\n} from \"../../../../opentui/packages/core/src/renderer\"\nexport type { MouseEvent } from \"../../../../opentui/packages/core/src/renderer\"\n\n// Timeline & engine \u2014 re-exported from shimmed source path (resolved to timeline-stub.ts)\nexport {\n Timeline,\n engine,\n createTimeline,\n} from \"../../../../opentui/packages/core/src/animation/Timeline\"\n\n// Yoga re-export\nexport * as Yoga from \"yoga-layout\"\n\n// Stub types for mouse\nexport type MouseEventType = any\n\n// Utils\nexport function createTextAttributes(opts: {\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n blink?: boolean\n inverse?: boolean\n hidden?: boolean\n strikethrough?: boolean\n} = {}): number {\n const TA = {\n NONE: 0, BOLD: 1, DIM: 2, ITALIC: 4, UNDERLINE: 8,\n BLINK: 16, INVERSE: 32, HIDDEN: 64, STRIKETHROUGH: 128,\n }\n let attr = TA.NONE\n if (opts.bold) attr |= TA.BOLD\n if (opts.italic) attr |= TA.ITALIC\n if (opts.underline) attr |= TA.UNDERLINE\n if (opts.dim) attr |= TA.DIM\n if (opts.blink) attr |= TA.BLINK\n if (opts.inverse) attr |= TA.INVERSE\n if (opts.hidden) attr |= TA.HIDDEN\n if (opts.strikethrough) attr |= TA.STRIKETHROUGH\n return attr\n}\n\nexport function attributesWithLink(baseAttributes: number, linkId: number): number {\n return (baseAttributes & 0xff) | ((linkId & 0xffffff) << 8)\n}\n\nexport function getLinkId(attributes: number): number {\n return (attributes >>> 8) & 0xffffff\n}\n\nexport function visualizeRenderableTree(..._args: any[]): void {}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { CapturedLine, CapturedSpan, CursorStyle } from \"./core-shims/types\"\nimport { attributesWithLink } from \"./core-shims/index\"\n\n// Attribute flags matching TextAttributes from opentui core\nconst CONTINUATION = 0xc0000000\n\ninterface ScissorRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface BorderDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: string\n customBorderChars?: Uint32Array\n border: boolean | string[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport class BrowserBuffer {\n public id: string\n public respectAlpha: boolean\n\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n\n // Cell data - same layout as native OptimizedBuffer\n public char: Uint32Array\n public fg: Float32Array\n public bg: Float32Array\n public attributes: Uint32Array\n\n private scissorStack: ScissorRect[] = []\n private opacityStack: number[] = []\n\n // Link registry for clickable links\n public linkRegistry: Map<number, string> = new Map()\n private nextLinkId: number = 1\n /** Cursor rendering config -- set by renderer before pipeline, read by drawEditorView */\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n /** Line cursor position -- set by drawEditorView during pipeline, read by renderer after */\n public lineCursorPosition: { x: number; y: number } | null = null\n\n constructor(\n width: number,\n height: number,\n options: { respectAlpha?: boolean; id?: string; widthMethod?: WidthMethod } = {},\n ) {\n this._width = width\n this._height = height\n this._widthMethod = options.widthMethod ?? \"wcwidth\"\n this.respectAlpha = options.respectAlpha ?? false\n this.id = options.id ?? `browser-buffer-${Math.random().toString(36).slice(2, 8)}`\n\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n\n // Fill with spaces\n this.char.fill(0x20) // space\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options?: { respectAlpha?: boolean; id?: string },\n ): BrowserBuffer {\n return new BrowserBuffer(width, height, { ...options, widthMethod })\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get ptr(): number {\n return 0\n }\n\n get buffers() {\n return {\n char: this.char,\n fg: this.fg,\n bg: this.bg,\n attributes: this.attributes,\n }\n }\n\n setRespectAlpha(respectAlpha: boolean): void {\n this.respectAlpha = respectAlpha\n }\n\n getNativeId(): string {\n return this.id\n }\n\n registerLink(url: string): number {\n const id = this.nextLinkId++\n this.linkRegistry.set(id, url)\n return id\n }\n\n getLinkUrl(linkId: number): string | undefined {\n return this.linkRegistry.get(linkId)\n }\n\n private isInScissor(x: number, y: number): boolean {\n if (this.scissorStack.length === 0) return true\n const rect = this.scissorStack[this.scissorStack.length - 1]\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height\n }\n\n private getCurrentOpacityMultiplier(): number {\n if (this.opacityStack.length === 0) return 1\n return this.opacityStack[this.opacityStack.length - 1]\n }\n\n private applyOpacity(color: RGBA): RGBA {\n const multiplier = this.getCurrentOpacityMultiplier()\n if (multiplier >= 1) return color\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a * multiplier,\n buffer: new Float32Array([color.r, color.g, color.b, color.a * multiplier]),\n toInts: color.toInts,\n equals: color.equals,\n map: color.map,\n toString: color.toString,\n } as RGBA\n }\n\n clear(bg?: RGBA): void {\n const size = this._width * this._height\n this.char.fill(0x20) // space\n this.attributes.fill(0)\n this.linkRegistry.clear()\n this.nextLinkId = 1\n\n if (bg) {\n for (let i = 0; i < size; i++) {\n const offset = i * 4\n this.bg[offset] = bg.r\n this.bg[offset + 1] = bg.g\n this.bg[offset + 2] = bg.b\n this.bg[offset + 3] = bg.a\n // Clear fg\n this.fg[offset] = 0\n this.fg[offset + 1] = 0\n this.fg[offset + 2] = 0\n this.fg[offset + 3] = 0\n }\n } else {\n this.fg.fill(0)\n this.bg.fill(0)\n }\n }\n\n setCell(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = char.codePointAt(0) ?? 0x20\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fgColor: RGBA,\n bgColor: RGBA,\n attr: number = 0,\n ): void {\n // For the PoC, same as setCell\n this.setCell(x, y, char, fgColor, bgColor, attr)\n }\n\n drawChar(charCode: number, x: number, y: number, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = charCode\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n drawText(\n text: string,\n x: number,\n y: number,\n fgColor: RGBA,\n bgColor?: RGBA,\n attr: number = 0,\n _selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n const transparentBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n const bg = bgColor ?? transparentBg\n\n let curX = x\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0) {\n this.setCell(curX, y, ch, fgColor, bg, attr)\n }\n curX++\n }\n }\n\n fillRect(x: number, y: number, width: number, height: number, bgColor: RGBA): void {\n for (let row = y; row < y + height && row < this._height; row++) {\n for (let col = x; col < x + width && col < this._width; col++) {\n if (col < 0 || row < 0) continue\n if (!this.isInScissor(col, row)) continue\n\n const idx = row * this._width + col\n const offset = idx * 4\n const effectiveBg = this.applyOpacity(bgColor)\n\n this.char[idx] = 0x20\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n }\n }\n\n drawBox(options: BorderDrawOptions): void {\n const {\n x,\n y,\n width,\n height,\n border,\n borderColor,\n backgroundColor,\n shouldFill = true,\n title,\n titleAlignment = \"left\",\n } = options\n\n if (width <= 0 || height <= 0) return\n\n // Parse border sides\n const sides = {\n top: border === true || (Array.isArray(border) && border.includes(\"top\")),\n right: border === true || (Array.isArray(border) && border.includes(\"right\")),\n bottom: border === true || (Array.isArray(border) && border.includes(\"bottom\")),\n left: border === true || (Array.isArray(border) && border.includes(\"left\")),\n }\n\n // Get border chars (use customBorderChars or default rounded)\n const borderChars = options.customBorderChars ?? this.getDefaultBorderChars(options.borderStyle)\n\n // Fill background\n if (shouldFill) {\n const fillStartX = x + (sides.left ? 1 : 0)\n const fillStartY = y + (sides.top ? 1 : 0)\n const fillWidth = width - (sides.left ? 1 : 0) - (sides.right ? 1 : 0)\n const fillHeight = height - (sides.top ? 1 : 0) - (sides.bottom ? 1 : 0)\n if (fillWidth > 0 && fillHeight > 0) {\n this.fillRect(fillStartX, fillStartY, fillWidth, fillHeight, backgroundColor)\n }\n }\n\n if (!border) return\n\n const transparent: RGBA = { r: 0, g: 0, b: 0, a: 0, buffer: new Float32Array([0, 0, 0, 0]) } as RGBA\n\n // Draw borders\n // borderChars layout: [topLeft, topRight, bottomLeft, bottomRight, horizontal, vertical, topT, bottomT, leftT, rightT, cross]\n const topLeft = borderChars[0]\n const topRight = borderChars[1]\n const bottomLeft = borderChars[2]\n const bottomRight = borderChars[3]\n const horizontal = borderChars[4]\n const vertical = borderChars[5]\n\n // Top border\n if (sides.top) {\n if (sides.left) this.drawChar(topLeft, x, y, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y, borderColor, transparent)\n }\n if (sides.right && width > 1) this.drawChar(topRight, x + width - 1, y, borderColor, transparent)\n }\n\n // Bottom border\n if (sides.bottom && height > 1) {\n if (sides.left) this.drawChar(bottomLeft, x, y + height - 1, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y + height - 1, borderColor, transparent)\n }\n if (sides.right && width > 1)\n this.drawChar(bottomRight, x + width - 1, y + height - 1, borderColor, transparent)\n }\n\n // Left border\n if (sides.left) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x, y + row, borderColor, transparent)\n }\n }\n\n // Right border\n if (sides.right && width > 1) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x + width - 1, y + row, borderColor, transparent)\n }\n }\n\n // Draw title on top border\n if (title && sides.top && width > 4) {\n const maxTitleLen = width - 4\n const truncatedTitle = title.length > maxTitleLen ? title.slice(0, maxTitleLen) : title\n let titleX: number\n if (titleAlignment === \"center\") {\n titleX = x + Math.floor((width - truncatedTitle.length) / 2)\n } else if (titleAlignment === \"right\") {\n titleX = x + width - truncatedTitle.length - 2\n } else {\n titleX = x + 2\n }\n this.drawText(truncatedTitle, titleX, y, borderColor, transparent)\n }\n }\n\n private getDefaultBorderChars(borderStyle?: string): Uint32Array {\n // Rounded border chars by default\n const styles: Record<string, number[]> = {\n rounded: [0x256d, 0x256e, 0x2570, 0x256f, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n single: [0x250c, 0x2510, 0x2514, 0x2518, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n double: [0x2554, 0x2557, 0x255a, 0x255d, 0x2550, 0x2551, 0x2566, 0x2569, 0x2560, 0x2563, 0x256c],\n heavy: [0x250f, 0x2513, 0x2517, 0x251b, 0x2501, 0x2503, 0x2533, 0x253b, 0x2523, 0x252b, 0x254b],\n }\n const chars = styles[borderStyle ?? \"rounded\"] ?? styles.rounded\n return new Uint32Array(chars)\n }\n\n pushScissorRect(x: number, y: number, width: number, height: number): void {\n if (this.scissorStack.length > 0) {\n // Intersect with current scissor\n const current = this.scissorStack[this.scissorStack.length - 1]\n const nx = Math.max(x, current.x)\n const ny = Math.max(y, current.y)\n const nw = Math.min(x + width, current.x + current.width) - nx\n const nh = Math.min(y + height, current.y + current.height) - ny\n this.scissorStack.push({ x: nx, y: ny, width: Math.max(0, nw), height: Math.max(0, nh) })\n } else {\n this.scissorStack.push({ x, y, width, height })\n }\n }\n\n popScissorRect(): void {\n this.scissorStack.pop()\n }\n\n clearScissorRects(): void {\n this.scissorStack = []\n }\n\n pushOpacity(opacity: number): void {\n const current = this.getCurrentOpacityMultiplier()\n this.opacityStack.push(current * opacity)\n }\n\n popOpacity(): void {\n this.opacityStack.pop()\n }\n\n getCurrentOpacity(): number {\n return this.getCurrentOpacityMultiplier()\n }\n\n clearOpacity(): void {\n this.opacityStack = []\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n this.char.fill(0x20)\n }\n\n // Read buffer into CapturedLine[] for testing\n getSpanLines(): CapturedLine[] {\n const lines: CapturedLine[] = []\n\n for (let row = 0; row < this._height; row++) {\n const spans: CapturedSpan[] = []\n let currentSpan: CapturedSpan | null = null\n\n for (let col = 0; col < this._width; col++) {\n const idx = row * this._width + col\n const offset = idx * 4\n\n // Skip continuation chars\n if (this.attributes[idx] & CONTINUATION) continue\n\n const charCode = this.char[idx]\n const ch = charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n const fgR = this.fg[offset]\n const fgG = this.fg[offset + 1]\n const fgB = this.fg[offset + 2]\n const fgA = this.fg[offset + 3]\n const bgR = this.bg[offset]\n const bgG = this.bg[offset + 1]\n const bgB = this.bg[offset + 2]\n const bgA = this.bg[offset + 3]\n const attr = this.attributes[idx] & 0xff\n\n const fg: RGBA = {\n r: fgR, g: fgG, b: fgB, a: fgA,\n buffer: new Float32Array([fgR, fgG, fgB, fgA]),\n } as RGBA\n const bg: RGBA = {\n r: bgR, g: bgG, b: bgB, a: bgA,\n buffer: new Float32Array([bgR, bgG, bgB, bgA]),\n } as RGBA\n\n if (\n currentSpan &&\n currentSpan.fg.r === fgR &&\n currentSpan.fg.g === fgG &&\n currentSpan.fg.b === fgB &&\n currentSpan.fg.a === fgA &&\n currentSpan.bg.r === bgR &&\n currentSpan.bg.g === bgG &&\n currentSpan.bg.b === bgB &&\n currentSpan.bg.a === bgA &&\n currentSpan.attributes === attr\n ) {\n currentSpan.text += ch\n currentSpan.width += 1\n } else {\n if (currentSpan) spans.push(currentSpan)\n currentSpan = { text: ch, fg, bg, attributes: attr, width: 1 }\n }\n }\n\n if (currentSpan) spans.push(currentSpan)\n lines.push({ spans })\n }\n\n return lines\n }\n\n // Draw a text buffer view into the buffer\n drawTextBufferView(view: any, x: number, y: number): void {\n if (!view || !view.getVisibleLines) return\n\n const lines = view.getVisibleLines()\n if (!lines) return\n\n const textAlign = view.textAlign as string | undefined\n const viewWidth = view._viewportWidth as number | undefined\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]\n if (!line) continue\n\n let curX = x\n if (textAlign && textAlign !== \"left\" && viewWidth) {\n const lineWidth = line.chunks.reduce((sum: number, c: any) => sum + c.text.length, 0)\n if (textAlign === \"center\") {\n curX = x + Math.floor((viewWidth - lineWidth) / 2)\n } else if (textAlign === \"right\") {\n curX = x + viewWidth - lineWidth\n }\n }\n for (const chunk of line.chunks) {\n const text = chunk.text\n const fgColor = chunk.fg\n const bgColor = chunk.bg\n let attr = chunk.attributes ?? 0\n\n // Encode link ID into attributes if chunk has a link\n if (chunk.link && chunk.link.url) {\n const linkId = this.registerLink(chunk.link.url)\n attr = attributesWithLink(attr, linkId)\n }\n\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0 && y + lineIdx >= 0 && y + lineIdx < this._height) {\n this.setCell(curX, y + lineIdx, ch, fgColor, bgColor, attr)\n }\n curX++\n }\n }\n }\n }\n\n drawTextBuffer(textBufferView: any, x: number, y: number): void {\n this.drawTextBufferView(textBufferView, x, y)\n }\n\n drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: BrowserBuffer,\n sourceX: number = 0,\n sourceY: number = 0,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const sw = sourceWidth ?? frameBuffer.width\n const sh = sourceHeight ?? frameBuffer.height\n const srcChar = frameBuffer.char\n const srcFg = frameBuffer.fg\n const srcBg = frameBuffer.bg\n const srcAttr = frameBuffer.attributes\n const srcCols = frameBuffer.width\n\n for (let row = 0; row < sh; row++) {\n const srcRow = sourceY + row\n const dstRow = destY + row\n if (srcRow < 0 || srcRow >= frameBuffer.height) continue\n if (dstRow < 0 || dstRow >= this._height) continue\n\n for (let col = 0; col < sw; col++) {\n const srcCol = sourceX + col\n const dstCol = destX + col\n if (srcCol < 0 || srcCol >= frameBuffer.width) continue\n if (dstCol < 0 || dstCol >= this._width) continue\n if (!this.isInScissor(dstCol, dstRow)) continue\n\n const srcIdx = srcRow * srcCols + srcCol\n const dstIdx = dstRow * this._width + dstCol\n const srcOffset = srcIdx * 4\n const dstOffset = dstIdx * 4\n\n this.char[dstIdx] = srcChar[srcIdx]\n this.attributes[dstIdx] = srcAttr[srcIdx]\n\n // Apply opacity to fg\n const fgA = srcFg[srcOffset + 3]\n const opacityMul = this.getCurrentOpacityMultiplier()\n this.fg[dstOffset] = srcFg[srcOffset]\n this.fg[dstOffset + 1] = srcFg[srcOffset + 1]\n this.fg[dstOffset + 2] = srcFg[srcOffset + 2]\n this.fg[dstOffset + 3] = fgA * opacityMul\n\n // Apply opacity to bg\n const bgA = srcBg[srcOffset + 3]\n this.bg[dstOffset] = srcBg[srcOffset]\n this.bg[dstOffset + 1] = srcBg[srcOffset + 1]\n this.bg[dstOffset + 2] = srcBg[srcOffset + 2]\n this.bg[dstOffset + 3] = bgA * opacityMul\n }\n }\n }\n drawEditorView(editorView: any, x: number, y: number): void {\n if (!editorView) return\n\n const viewport = editorView.getViewport()\n const text = editorView.getText()\n const lines = text.split(\"\\n\")\n\n // Default colors\n const dfg = editorView.editBuffer?._defaultFg ?? {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n } as RGBA\n const dbg = editorView.editBuffer?._defaultBg ?? {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n\n const visibleRows = viewport.height > 0 ? viewport.height : this._height - y\n\n if (text === \"\" && editorView._placeholderChunks && editorView._placeholderChunks.length > 0) {\n // Draw placeholder text; offset by 1 cell for line cursor so it doesn't overlap\n let curX = this.cursorStyleType === \"line\" ? x + 1 : x\n for (const chunk of editorView._placeholderChunks) {\n const chunkFg = chunk.fg ?? dfg\n const chunkBg = chunk.bg ?? dbg\n const attr = (chunk.attributes ?? 0) | 2 // DIM attribute = 1 << 1\n for (const ch of chunk.text) {\n if (curX >= this._width) break\n if (curX >= 0 && y >= 0 && y < this._height) {\n this.setCell(curX, y, ch, chunkFg, chunkBg, attr)\n }\n curX++\n }\n }\n } else {\n // Draw text lines\n for (let row = 0; row < visibleRows; row++) {\n const lineIdx = viewport.offsetY + row\n if (lineIdx < 0 || lineIdx >= lines.length) continue\n const dstRow = y + row\n if (dstRow < 0 || dstRow >= this._height) continue\n\n const line = lines[lineIdx]\n for (let col = 0; col < line.length; col++) {\n const srcCol = viewport.offsetX + col\n if (srcCol < 0 || srcCol >= line.length) continue\n const dstCol = x + col\n if (dstCol < 0 || dstCol >= this._width) break\n\n this.setCell(dstCol, dstRow, line[srcCol], dfg, dbg, 0)\n }\n }\n }\n\n // Draw cursor\n const cursor = editorView.getVisualCursor()\n if (cursor) {\n const cursorX = x + cursor.visualCol\n const cursorY = y + cursor.visualRow\n if (cursorX >= 0 && cursorX < this._width && cursorY >= 0 && cursorY < this._height) {\n const cursorFg = this.cursorColor ?? dfg\n if (this.cursorStyleType === \"line\") {\n // Line cursor: store position for renderer to build cursor overlay\n this.lineCursorPosition = { x: cursorX, y: cursorY }\n } else {\n // Block cursor: overwrite cell with INVERSE\n const idx = cursorY * this._width + cursorX\n const charCode = this.char[idx]\n const ch = charCode === 0 || charCode === 0x20 ? \" \" : String.fromCodePoint(charCode)\n const offset = idx * 4\n const cellBg = {\n r: this.bg[offset],\n g: this.bg[offset + 1],\n b: this.bg[offset + 2],\n a: this.bg[offset + 3] || 1,\n } as RGBA\n this.setCell(cursorX, cursorY, ch, cursorFg, cellBg, 32) // INVERSE = 1 << 5 = 32\n }\n }\n }\n }\n drawSuperSampleBuffer(): void {}\n drawPackedBuffer(): void {}\n drawGrayscaleBuffer(): void {}\n drawGrayscaleBufferSupersampled(): void {}\n drawGrid(): void {}\n encodeUnicode(_text: string): null {\n return null\n }\n freeUnicode(): void {}\n getRealCharBytes(): Uint8Array {\n return new Uint8Array(0)\n }\n destroy(): void {}\n}\n\n// Export as OptimizedBuffer so opentui source code imports work directly\nexport { BrowserBuffer as OptimizedBuffer }\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { RGBA } from \"./core-shims/rgba\"\nimport type { SelectionManager } from \"./selection-manager\"\n\n/** Cursor overlay info produced by the render pipeline, consumed by the painter */\nexport interface CursorOverlay {\n x: number\n y: number\n color: RGBA\n blinking: boolean\n}\n\nconst TextAttributes = {\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n UNDERLINE_DASHED: 1 << 4,\n INVERSE: 1 << 5,\n UNDERLINE_DOTTED: 1 << 6,\n}\n\nconst CONTINUATION = 0xc0000000\nconst LINE_CURSOR_WIDTH = 8\nconst CURSOR_BLINK_INTERVAL_MS = 530\n\n// Box-drawing character definitions (U+2500\u2013U+257F)\n// Each entry defines which directions extend from cell center and the line weight.\ninterface BoxDrawDef {\n left?: boolean\n right?: boolean\n up?: boolean\n down?: boolean\n type: \"light\" | \"heavy\" | \"double\"\n arc?: \"tl\" | \"tr\" | \"bl\" | \"br\" // rounded corner arc direction\n}\n\nconst BOX_DRAWING_MAP: Record<number, BoxDrawDef> = {\n // Light lines\n 0x2500: { left: true, right: true, type: \"light\" }, // \u2500\n 0x2502: { up: true, down: true, type: \"light\" }, // \u2502\n 0x250c: { right: true, down: true, type: \"light\" }, // \u250C\n 0x2510: { left: true, down: true, type: \"light\" }, // \u2510\n 0x2514: { right: true, up: true, type: \"light\" }, // \u2514\n 0x2518: { left: true, up: true, type: \"light\" }, // \u2518\n 0x251c: { up: true, down: true, right: true, type: \"light\" }, // \u251C\n 0x2524: { up: true, down: true, left: true, type: \"light\" }, // \u2524\n 0x252c: { left: true, right: true, down: true, type: \"light\" }, // \u252C\n 0x2534: { left: true, right: true, up: true, type: \"light\" }, // \u2534\n 0x253c: { left: true, right: true, up: true, down: true, type: \"light\" }, // \u253C\n\n // Heavy lines\n 0x2501: { left: true, right: true, type: \"heavy\" }, // \u2501\n 0x2503: { up: true, down: true, type: \"heavy\" }, // \u2503\n 0x250f: { right: true, down: true, type: \"heavy\" }, // \u250F\n 0x2513: { left: true, down: true, type: \"heavy\" }, // \u2513\n 0x2517: { right: true, up: true, type: \"heavy\" }, // \u2517\n 0x251b: { left: true, up: true, type: \"heavy\" }, // \u251B\n 0x2523: { up: true, down: true, right: true, type: \"heavy\" }, // \u2523\n 0x252b: { up: true, down: true, left: true, type: \"heavy\" }, // \u252B\n 0x2533: { left: true, right: true, down: true, type: \"heavy\" }, // \u2533\n 0x253b: { left: true, right: true, up: true, type: \"heavy\" }, // \u253B\n 0x254b: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254B\n\n // Light/heavy mixed (treat as light for simplicity of joins)\n 0x250d: { right: true, down: true, type: \"heavy\" }, // \u250D\n 0x250e: { right: true, down: true, type: \"heavy\" }, // \u250E\n 0x2511: { left: true, down: true, type: \"heavy\" }, // \u2511\n 0x2512: { left: true, down: true, type: \"heavy\" }, // \u2512\n 0x2515: { right: true, up: true, type: \"heavy\" }, // \u2515\n 0x2516: { right: true, up: true, type: \"heavy\" }, // \u2516\n 0x2519: { left: true, up: true, type: \"heavy\" }, // \u2519\n 0x251a: { left: true, up: true, type: \"heavy\" }, // \u251A\n 0x251d: { up: true, down: true, right: true, type: \"heavy\" }, // \u251D\n 0x251e: { up: true, down: true, right: true, type: \"light\" }, // \u251E\n 0x251f: { up: true, down: true, right: true, type: \"light\" }, // \u251F\n 0x2520: { up: true, down: true, right: true, type: \"heavy\" }, // \u2520\n 0x2521: { up: true, down: true, right: true, type: \"heavy\" }, // \u2521\n 0x2522: { up: true, down: true, right: true, type: \"heavy\" }, // \u2522\n 0x2525: { up: true, down: true, left: true, type: \"heavy\" }, // \u2525\n 0x2526: { up: true, down: true, left: true, type: \"light\" }, // \u2526\n 0x2527: { up: true, down: true, left: true, type: \"light\" }, // \u2527\n 0x2528: { up: true, down: true, left: true, type: \"heavy\" }, // \u2528\n 0x2529: { up: true, down: true, left: true, type: \"heavy\" }, // \u2529\n 0x252a: { up: true, down: true, left: true, type: \"heavy\" }, // \u252A\n 0x252d: { left: true, right: true, down: true, type: \"heavy\" }, // \u252D\n 0x252e: { left: true, right: true, down: true, type: \"heavy\" }, // \u252E\n 0x252f: { left: true, right: true, down: true, type: \"heavy\" }, // \u252F\n 0x2530: { left: true, right: true, down: true, type: \"heavy\" }, // \u2530\n 0x2531: { left: true, right: true, down: true, type: \"heavy\" }, // \u2531\n 0x2532: { left: true, right: true, down: true, type: \"heavy\" }, // \u2532\n 0x2535: { left: true, right: true, up: true, type: \"heavy\" }, // \u2535\n 0x2536: { left: true, right: true, up: true, type: \"heavy\" }, // \u2536\n 0x2537: { left: true, right: true, up: true, type: \"heavy\" }, // \u2537\n 0x2538: { left: true, right: true, up: true, type: \"heavy\" }, // \u2538\n 0x2539: { left: true, right: true, up: true, type: \"heavy\" }, // \u2539\n 0x253a: { left: true, right: true, up: true, type: \"heavy\" }, // \u253A\n 0x253d: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253D\n 0x253e: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253E\n 0x253f: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253F\n 0x2540: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2540\n 0x2541: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2541\n 0x2542: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2542\n 0x2543: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2543\n 0x2544: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2544\n 0x2545: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2545\n 0x2546: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2546\n 0x2547: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2547\n 0x2548: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2548\n 0x2549: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2549\n 0x254a: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254A\n\n // Dashed lines (render as solid light/heavy)\n 0x2504: { left: true, right: true, type: \"light\" }, // \u2504\n 0x2505: { left: true, right: true, type: \"heavy\" }, // \u2505\n 0x2506: { up: true, down: true, type: \"light\" }, // \u2506\n 0x2507: { up: true, down: true, type: \"heavy\" }, // \u2507\n 0x2508: { left: true, right: true, type: \"light\" }, // \u2508\n 0x2509: { left: true, right: true, type: \"heavy\" }, // \u2509\n 0x250a: { up: true, down: true, type: \"light\" }, // \u250A\n 0x250b: { up: true, down: true, type: \"heavy\" }, // \u250B\n\n // Double lines\n 0x2550: { left: true, right: true, type: \"double\" }, // \u2550\n 0x2551: { up: true, down: true, type: \"double\" }, // \u2551\n 0x2552: { right: true, down: true, type: \"double\" }, // \u2552\n 0x2553: { right: true, down: true, type: \"double\" }, // \u2553\n 0x2554: { right: true, down: true, type: \"double\" }, // \u2554\n 0x2555: { left: true, down: true, type: \"double\" }, // \u2555\n 0x2556: { left: true, down: true, type: \"double\" }, // \u2556\n 0x2557: { left: true, down: true, type: \"double\" }, // \u2557\n 0x2558: { right: true, up: true, type: \"double\" }, // \u2558\n 0x2559: { right: true, up: true, type: \"double\" }, // \u2559\n 0x255a: { right: true, up: true, type: \"double\" }, // \u255A\n 0x255b: { left: true, up: true, type: \"double\" }, // \u255B\n 0x255c: { left: true, up: true, type: \"double\" }, // \u255C\n 0x255d: { left: true, up: true, type: \"double\" }, // \u255D\n 0x255e: { up: true, down: true, right: true, type: \"double\" }, // \u255E\n 0x255f: { up: true, down: true, right: true, type: \"double\" }, // \u255F\n 0x2560: { up: true, down: true, right: true, type: \"double\" }, // \u2560\n 0x2561: { up: true, down: true, left: true, type: \"double\" }, // \u2561\n 0x2562: { up: true, down: true, left: true, type: \"double\" }, // \u2562\n 0x2563: { up: true, down: true, left: true, type: \"double\" }, // \u2563\n 0x2564: { left: true, right: true, down: true, type: \"double\" }, // \u2564\n 0x2565: { left: true, right: true, down: true, type: \"double\" }, // \u2565\n 0x2566: { left: true, right: true, down: true, type: \"double\" }, // \u2566\n 0x2567: { left: true, right: true, up: true, type: \"double\" }, // \u2567\n 0x2568: { left: true, right: true, up: true, type: \"double\" }, // \u2568\n 0x2569: { left: true, right: true, up: true, type: \"double\" }, // \u2569\n 0x256a: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256A\n 0x256b: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256B\n 0x256c: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256C\n\n // Rounded corners\n 0x256d: { right: true, down: true, type: \"light\", arc: \"tl\" }, // \u256D\n 0x256e: { left: true, down: true, type: \"light\", arc: \"tr\" }, // \u256E\n 0x256f: { left: true, up: true, type: \"light\", arc: \"br\" }, // \u256F\n 0x2570: { right: true, up: true, type: \"light\", arc: \"bl\" }, // \u2570\n\n // Diagonal lines (render as simple connecting lines)\n 0x2571: { type: \"light\" }, // \u2571 (forward slash)\n 0x2572: { type: \"light\" }, // \u2572 (backslash)\n 0x2573: { type: \"light\" }, // \u2573 (cross)\n\n // Half lines\n 0x2574: { left: true, type: \"light\" }, // \u2574\n 0x2575: { up: true, type: \"light\" }, // \u2575\n 0x2576: { right: true, type: \"light\" }, // \u2576\n 0x2577: { down: true, type: \"light\" }, // \u2577\n 0x2578: { left: true, type: \"heavy\" }, // \u2578\n 0x2579: { up: true, type: \"heavy\" }, // \u2579\n 0x257a: { right: true, type: \"heavy\" }, // \u257A\n 0x257b: { down: true, type: \"heavy\" }, // \u257B\n 0x257c: { left: true, right: true, type: \"light\" }, // \u257C (light left, heavy right)\n 0x257d: { up: true, down: true, type: \"light\" }, // \u257D (light up, heavy down)\n 0x257e: { left: true, right: true, type: \"heavy\" }, // \u257E (heavy left, light right)\n 0x257f: { up: true, down: true, type: \"heavy\" }, // \u257F (heavy up, light down)\n}\n\nexport interface CanvasPainterOptions {\n fontFamily?: string\n fontSize?: number\n}\n\nexport class CanvasPainter {\n private cellWidth: number = 0\n private cellHeight: number = 0\n private fontFamily: string\n private fontSize: number\n private baselineOffset: number = 0\n\n constructor(options: CanvasPainterOptions = {}) {\n this.fontFamily = options.fontFamily ?? \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\"\n this.fontSize = options.fontSize ?? 14\n }\n\n measureCell(ctx: CanvasRenderingContext2D): { width: number; height: number } {\n ctx.font = `${this.fontSize}px ${this.fontFamily}`\n const metrics = ctx.measureText(\"M\")\n this.cellWidth = metrics.width\n this.cellHeight = Math.ceil(this.fontSize * 1.4)\n this.baselineOffset = Math.ceil(this.fontSize * 1.1)\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n getCellSize(): { width: number; height: number } {\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n paint(ctx: CanvasRenderingContext2D, buffer: BrowserBuffer, selection?: SelectionManager, cursor?: CursorOverlay | null): void {\n const { char, fg, bg, attributes } = buffer\n const cols = buffer.width\n const rows = buffer.height\n const cw = this.cellWidth\n const ch = this.cellHeight\n\n // Pass 1: Background rects \u2014 batch adjacent same-color cells per row\n for (let row = 0; row < rows; row++) {\n let runStartCol = 0\n let runR = -1,\n runG = -1,\n runB = -1,\n runA = -1\n\n for (let col = 0; col <= cols; col++) {\n let r = 0,\n g = 0,\n b = 0,\n a = 0\n if (col < cols) {\n const idx = row * cols + col\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n if (isInverse) {\n // INVERSE: use fg color as background\n r = fg[offset]\n g = fg[offset + 1]\n b = fg[offset + 2]\n a = fg[offset + 3]\n } else {\n r = bg[offset]\n g = bg[offset + 1]\n b = bg[offset + 2]\n a = bg[offset + 3]\n }\n }\n\n if (col < cols && r === runR && g === runG && b === runB && a === runA) {\n continue\n }\n\n // Flush previous run\n if (runA > 0 && col > runStartCol) {\n ctx.fillStyle = rgbaToCSS(runR, runG, runB, runA)\n ctx.fillRect(runStartCol * cw, row * ch, (col - runStartCol) * cw, ch)\n }\n\n runStartCol = col\n runR = r\n runG = g\n runB = b\n runA = a\n }\n }\n\n // Pass 2: Foreground characters\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const idx = row * cols + col\n\n // Skip continuation cells (wide char placeholders)\n if (attributes[idx] & CONTINUATION) continue\n\n const charCode = char[idx]\n if (charCode === 0 || charCode === 0x20) continue // skip spaces\n\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n\n let fgR: number, fgG: number, fgB: number, fgA: number\n if (isInverse) {\n // INVERSE: use bg color as text color\n fgR = bg[offset]\n fgG = bg[offset + 1]\n fgB = bg[offset + 2]\n fgA = bg[offset + 3]\n // If bg is transparent, use black (default terminal bg) as text color\n if (fgA === 0) {\n fgR = 0; fgG = 0; fgB = 0; fgA = 1\n }\n } else {\n fgR = fg[offset]\n fgG = fg[offset + 1]\n fgB = fg[offset + 2]\n fgA = fg[offset + 3]\n }\n\n if (fgA === 0) continue\n\n const isBold = !!(attr & TextAttributes.BOLD)\n const isItalic = !!(attr & TextAttributes.ITALIC)\n const isDim = !!(attr & TextAttributes.DIM)\n const isUnderline = !!(attr & TextAttributes.UNDERLINE)\n\n const effectiveA = isDim ? fgA * 0.5 : fgA\n\n // Box-drawing character rendering\n if (charCode >= 0x2500 && charCode <= 0x257f) {\n const def = BOX_DRAWING_MAP[charCode]\n if (def) {\n const cellX = col * cw\n const cellY = row * ch\n const cx = cellX + cw / 2\n const cy = cellY + ch / 2\n ctx.strokeStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n ctx.lineCap = \"square\"\n\n if (def.type === \"double\") {\n // Draw two parallel lines for each direction\n const gap = Math.max(2, Math.round(cw / 5))\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.left) {\n ctx.moveTo(cellX, cy - gap / 2); ctx.lineTo(cx, cy - gap / 2)\n ctx.moveTo(cellX, cy + gap / 2); ctx.lineTo(cx, cy + gap / 2)\n }\n if (def.right) {\n ctx.moveTo(cx, cy - gap / 2); ctx.lineTo(cellX + cw, cy - gap / 2)\n ctx.moveTo(cx, cy + gap / 2); ctx.lineTo(cellX + cw, cy + gap / 2)\n }\n if (def.up) {\n ctx.moveTo(cx - gap / 2, cellY); ctx.lineTo(cx - gap / 2, cy)\n ctx.moveTo(cx + gap / 2, cellY); ctx.lineTo(cx + gap / 2, cy)\n }\n if (def.down) {\n ctx.moveTo(cx - gap / 2, cy); ctx.lineTo(cx - gap / 2, cellY + ch)\n ctx.moveTo(cx + gap / 2, cy); ctx.lineTo(cx + gap / 2, cellY + ch)\n }\n ctx.stroke()\n } else if (def.arc) {\n // Rounded corners: use ellipse to handle rectangular cells (ch \u2260 cw)\n const rx = cw / 2\n const ry = ch / 2\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.arc === \"tl\") {\n // \u256D: arc from right edge to bottom edge\n ctx.ellipse(cellX + cw, cellY + ch, rx, ry, 0, Math.PI, Math.PI * 1.5)\n } else if (def.arc === \"tr\") {\n // \u256E: arc from left edge to bottom edge\n ctx.ellipse(cellX, cellY + ch, rx, ry, 0, Math.PI * 1.5, Math.PI * 2)\n } else if (def.arc === \"bl\") {\n // \u2570: arc from right edge to top edge\n ctx.ellipse(cellX + cw, cellY, rx, ry, 0, Math.PI * 0.5, Math.PI)\n } else if (def.arc === \"br\") {\n // \u256F: arc from left edge to top edge\n ctx.ellipse(cellX, cellY, rx, ry, 0, 0, Math.PI * 0.5)\n }\n ctx.stroke()\n } else if (charCode === 0x2571 || charCode === 0x2572 || charCode === 0x2573) {\n // Diagonal lines\n ctx.lineWidth = 1\n ctx.beginPath()\n if (charCode === 0x2571 || charCode === 0x2573) {\n // \u2571 forward slash\n ctx.moveTo(cellX + cw, cellY)\n ctx.lineTo(cellX, cellY + ch)\n }\n if (charCode === 0x2572 || charCode === 0x2573) {\n // \u2572 backslash\n ctx.moveTo(cellX, cellY)\n ctx.lineTo(cellX + cw, cellY + ch)\n }\n ctx.stroke()\n } else {\n ctx.lineWidth = def.type === \"heavy\" ? 2 : 1\n ctx.beginPath()\n if (def.left) { ctx.moveTo(cellX, cy); ctx.lineTo(cx, cy) }\n if (def.right) { ctx.moveTo(cx, cy); ctx.lineTo(cellX + cw, cy) }\n if (def.up) { ctx.moveTo(cx, cellY); ctx.lineTo(cx, cy) }\n if (def.down) { ctx.moveTo(cx, cy); ctx.lineTo(cx, cellY + ch) }\n ctx.stroke()\n }\n continue\n }\n }\n\n // Normal text rendering\n ctx.fillStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n\n // Build font string\n let fontStyle = \"\"\n if (isItalic) fontStyle += \"italic \"\n if (isBold) fontStyle += \"bold \"\n fontStyle += `${this.fontSize}px ${this.fontFamily}`\n ctx.font = fontStyle\n\n const character = String.fromCodePoint(charCode)\n const x = col * cw\n const y = row * this.cellHeight + this.baselineOffset\n\n ctx.fillText(character, x, y)\n\n // Draw underline\n if (isUnderline) {\n const isDashed = !!(attr & TextAttributes.UNDERLINE_DASHED)\n const isDotted = !!(attr & TextAttributes.UNDERLINE_DOTTED)\n ctx.strokeStyle = ctx.fillStyle\n ctx.lineWidth = 1\n const underlineY = row * this.cellHeight + this.baselineOffset + 2\n if (isDotted) {\n ctx.lineCap = \"round\"\n ctx.setLineDash([0.5, 2.5])\n } else if (isDashed) {\n ctx.setLineDash([2, 2])\n }\n ctx.beginPath()\n ctx.moveTo(x, underlineY)\n ctx.lineTo(x + cw, underlineY)\n ctx.stroke()\n if (isDotted || isDashed) {\n ctx.setLineDash([])\n ctx.lineCap = \"butt\"\n }\n }\n }\n }\n\n // Pass 3: Line cursor overlay\n if (cursor) {\n const visible = !cursor.blinking || Math.floor(performance.now() / CURSOR_BLINK_INTERVAL_MS) % 2 === 0\n if (visible) {\n ctx.fillStyle = rgbaToCSS(cursor.color.r, cursor.color.g, cursor.color.b, cursor.color.a ?? 1)\n ctx.fillRect(cursor.x * cw, cursor.y * ch, LINE_CURSOR_WIDTH, ch)\n }\n }\n\n // Pass 4: Selection overlay\n if (selection?.active) {\n ctx.fillStyle = \"rgba(51, 153, 255, 0.3)\"\n for (let row = 0; row < rows; row++) {\n let runStart = -1\n for (let col = 0; col <= cols; col++) {\n const selected = col < cols && selection.isSelected(col, row)\n if (selected && runStart === -1) {\n runStart = col\n } else if (!selected && runStart !== -1) {\n ctx.fillRect(runStart * cw, row * ch, (col - runStart) * cw, ch)\n runStart = -1\n }\n }\n }\n }\n }\n}\n\nfunction rgbaToCSS(r: number, g: number, b: number, a: number): string {\n const ri = Math.round(r * 255)\n const gi = Math.round(g * 255)\n const bi = Math.round(b * 255)\n return `rgba(${ri},${gi},${bi},${a})`\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\n\ninterface SelectionRange {\n startCol: number\n startRow: number\n endCol: number\n endRow: number\n}\n\nexport class SelectionManager {\n private _startCol: number = 0\n private _startRow: number = 0\n private _endCol: number = 0\n private _endRow: number = 0\n private _active: boolean = false\n private _selecting: boolean = false\n\n startSelection(col: number, row: number): void {\n this._startCol = col\n this._startRow = row\n this._endCol = col\n this._endRow = row\n this._selecting = true\n this._active = true\n }\n\n updateSelection(col: number, row: number): void {\n if (!this._selecting) return\n this._endCol = col\n this._endRow = row\n }\n\n endSelection(): void {\n this._selecting = false\n // If start and end are the same cell, clear the selection\n if (this._startCol === this._endCol && this._startRow === this._endRow) {\n this._active = false\n }\n }\n\n clearSelection(): void {\n this._active = false\n this._selecting = false\n }\n\n get active(): boolean {\n return this._active\n }\n\n get selecting(): boolean {\n return this._selecting\n }\n\n /** Returns the selection range normalized to reading order (top-left to bottom-right) */\n getSelectedRange(): SelectionRange | null {\n if (!this._active) return null\n\n let startCol = this._startCol\n let startRow = this._startRow\n let endCol = this._endCol\n let endRow = this._endRow\n\n // Normalize to reading order\n if (startRow > endRow || (startRow === endRow && startCol > endCol)) {\n const tmpCol = startCol\n const tmpRow = startRow\n startCol = endCol\n startRow = endRow\n endCol = tmpCol\n endRow = tmpRow\n }\n\n return { startCol, startRow, endCol, endRow }\n }\n\n isSelected(col: number, row: number): boolean {\n const range = this.getSelectedRange()\n if (!range) return false\n\n const { startCol, startRow, endCol, endRow } = range\n\n if (row < startRow || row > endRow) return false\n if (startRow === endRow) {\n return col >= startCol && col < endCol\n }\n if (row === startRow) return col >= startCol\n if (row === endRow) return col < endCol\n return true\n }\n\n getSelectedText(buffer: BrowserBuffer): string {\n const range = this.getSelectedRange()\n if (!range) return \"\"\n\n const { startCol, startRow, endCol, endRow } = range\n const lines: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n let lineStart = row === startRow ? startCol : 0\n let lineEnd = row === endRow ? endCol : buffer.width\n\n // Build the line text\n let line = \"\"\n for (let col = lineStart; col < lineEnd && col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n\n // Trim trailing spaces\n lines.push(line.trimEnd())\n }\n\n return lines.join(\"\\n\")\n }\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\n/**\n * Shared render pipeline used by both BrowserRenderer and HeadlessRenderer.\n * Runs lifecycle passes, calculates layout, collects and executes render commands.\n */\nexport function executeRenderPipeline(\n buffer: BrowserBuffer,\n renderContext: BrowserRenderContext,\n root: any,\n deltaTime: number,\n): void {\n // Clear buffer\n buffer.clear()\n\n // Run lifecycle passes\n const lifecyclePasses = renderContext.getLifecyclePasses()\n for (const renderable of lifecyclePasses) {\n if (renderable.onLifecyclePass) {\n renderable.onLifecyclePass()\n }\n }\n\n // Calculate layout\n root.calculateLayout()\n\n // Collect render commands\n const renderList: any[] = []\n root.updateLayout(deltaTime, renderList)\n\n // Execute render commands\n for (const cmd of renderList) {\n switch (cmd.action) {\n case \"pushScissorRect\":\n buffer.pushScissorRect(cmd.x, cmd.y, cmd.width, cmd.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(cmd.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n case \"render\":\n cmd.renderable.render(buffer, deltaTime)\n break\n }\n }\n\n // Clear scissor/opacity stacks\n buffer.clearScissorRects()\n buffer.clearOpacity()\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { CanvasPainter, type CursorOverlay } from \"./canvas-painter\"\nimport { SelectionManager } from \"./selection-manager\"\nimport { getLinkId } from \"./core-shims/index\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\n// We import these via the core-shims alias in the Vite build\n// but for the renderer we import directly to avoid circular deps\nlet RootRenderableClass: any = null\n\nexport function setRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport class BrowserRenderer {\n public canvas: HTMLCanvasElement\n public ctx2d: CanvasRenderingContext2D\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n public painter: CanvasPainter\n public selection: SelectionManager\n\n private cols: number\n private rows: number\n private cellWidth: number = 0\n private cellHeight: number = 0\n private rafId: number | null = null\n private lastTime: number = 0\n private needsRender: boolean = true\n private isDragOver: boolean = false\n private cleanupListeners: (() => void)[] = []\n private mouseDownCell: { col: number; row: number } | null = null\n private backgroundColor: string | null = null\n\n constructor(canvas: HTMLCanvasElement, cols: number, rows: number, options?: { backgroundColor?: string }) {\n this.canvas = canvas\n this.cols = cols\n this.rows = rows\n\n const ctx2d = canvas.getContext(\"2d\")\n if (!ctx2d) throw new Error(\"Could not get 2d context\")\n this.ctx2d = ctx2d\n\n // Measure cell size\n this.painter = new CanvasPainter()\n const cellSize = this.painter.measureCell(this.ctx2d)\n this.cellWidth = cellSize.width\n this.cellHeight = cellSize.height\n\n // Size canvas\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n canvas.style.width = `${cols * this.cellWidth}px`\n canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.backgroundColor = options?.backgroundColor ?? null\n\n // Text cursor for the canvas\n canvas.style.cursor = \"text\"\n\n // Create buffer\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n\n // Create render context\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n this.needsRender = true\n })\n\n // Create selection manager\n this.selection = new SelectionManager()\n\n // Create root renderable\n if (!RootRenderableClass) {\n throw new Error(\"RootRenderableClass not set. Call setRootRenderableClass before creating BrowserRenderer.\")\n }\n this.root = new RootRenderableClass(this.renderContext)\n\n // Set up DOM event listeners\n this.setupDomListeners()\n }\n\n private pixelToCell(clientX: number, clientY: number): { col: number; row: number } {\n const rect = this.canvas.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n const col = Math.floor(x / this.cellWidth)\n const row = Math.floor(y / this.cellHeight)\n return {\n col: Math.max(0, Math.min(col, this.cols - 1)),\n row: Math.max(0, Math.min(row, this.rows - 1)),\n }\n }\n\n private setupDomListeners(): void {\n // --- Drag-and-drop ---\n const onDragOver = (e: DragEvent) => {\n e.preventDefault()\n }\n this.canvas.addEventListener(\"dragover\", onDragOver)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragover\", onDragOver))\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n const files = e.dataTransfer?.files\n if (!files || files.length === 0) return\n const file = files[0]\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n file.text().then((content) => {\n this.renderContext.emit(\"file-drop\", {\n name: file.name,\n content,\n type: file.type,\n size: file.size,\n })\n })\n }\n this.canvas.addEventListener(\"drop\", onDrop)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"drop\", onDrop))\n\n // --- Mouse selection ---\n const onMouseDown = (e: MouseEvent) => {\n // Only left button\n if (e.button !== 0) return\n this.canvas.focus()\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n this.mouseDownCell = { col, row }\n this.selection.startSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousedown\", onMouseDown)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousedown\", onMouseDown))\n\n const onMouseMove = (e: MouseEvent) => {\n // Update cursor style based on whether we're hovering a link\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const linkId = getLinkId(this.buffer.attributes[idx])\n this.canvas.style.cursor = linkId > 0 ? \"pointer\" : \"text\"\n }\n\n if (!this.selection.selecting) return\n this.selection.updateSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousemove\", onMouseMove)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousemove\", onMouseMove))\n\n const onMouseUp = (e: MouseEvent) => {\n const wasSelecting = this.selection.selecting\n if (wasSelecting) {\n this.selection.endSelection()\n this.needsRender = true\n }\n\n // Check for link click: same cell as mousedown (no drag)\n if (e.button === 0 && this.mouseDownCell) {\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n if (col === this.mouseDownCell.col && row === this.mouseDownCell.row) {\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const attr = this.buffer.attributes[idx]\n const linkId = getLinkId(attr)\n if (linkId > 0) {\n const url = this.buffer.getLinkUrl(linkId)\n if (url) {\n window.open(url, \"_blank\")\n }\n }\n }\n }\n this.mouseDownCell = null\n }\n }\n window.addEventListener(\"mouseup\", onMouseUp)\n this.cleanupListeners.push(() => window.removeEventListener(\"mouseup\", onMouseUp))\n\n // --- Drag enter/leave for visual feedback ---\n const onDragEnter = (e: DragEvent) => {\n e.preventDefault()\n if (this.isDragOver) return\n this.isDragOver = true\n this.renderContext.emit(\"drag-enter\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragenter\", onDragEnter)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragenter\", onDragEnter))\n\n const onDragLeave = (e: DragEvent) => {\n // Only emit when truly leaving the canvas (not entering a child)\n if (e.relatedTarget && this.canvas.contains(e.relatedTarget as Node)) return\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragleave\", onDragLeave)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragleave\", onDragLeave))\n\n // --- Paste ---\n const onPaste = (e: ClipboardEvent) => {\n if (document.activeElement !== this.canvas) return\n const text = e.clipboardData?.getData(\"text/plain\")\n if (text) {\n e.preventDefault()\n this.renderContext.emit(\"paste\", text)\n }\n }\n document.addEventListener(\"paste\", onPaste)\n this.cleanupListeners.push(() => document.removeEventListener(\"paste\", onPaste))\n }\n\n start(): void {\n this.lastTime = performance.now()\n this.loop()\n }\n\n stop(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n for (const cleanup of this.cleanupListeners) {\n cleanup()\n }\n this.cleanupListeners = []\n }\n\n private loop = (): void => {\n this.rafId = requestAnimationFrame(this.loop)\n\n const now = performance.now()\n const deltaTime = now - this.lastTime\n this.lastTime = now\n\n let didRender = false\n if (this.needsRender) {\n this.needsRender = false\n didRender = true\n\n // Pass cursor config from render context to buffer before rendering\n this.buffer.cursorColor = this.renderContext.cursorColor\n this.buffer.cursorStyleType = this.renderContext.cursorStyleType\n this.buffer.lineCursorPosition = null\n\n executeRenderPipeline(this.buffer, this.renderContext, this.root, deltaTime)\n }\n\n // Build cursor overlay from buffer position + render context config\n const cursorOverlay = this.buildCursorOverlay()\n\n // Repaint when render pipeline ran, or every frame when blinking cursor is active\n if (!didRender && !cursorOverlay?.blinking) return\n\n // Paint to canvas\n const dpr = window.devicePixelRatio || 1\n this.ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n if (this.backgroundColor) {\n this.ctx2d.fillStyle = this.backgroundColor\n this.ctx2d.fillRect(0, 0, this.canvas.width, this.canvas.height)\n } else {\n this.ctx2d.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n this.painter.paint(this.ctx2d, this.buffer, this.selection, cursorOverlay)\n }\n\n private buildCursorOverlay(): CursorOverlay | null {\n const pos = this.buffer.lineCursorPosition\n if (!pos || !this.renderContext.cursorColor) return null\n return {\n x: pos.x,\n y: pos.y,\n color: this.renderContext.cursorColor,\n blinking: this.renderContext.cursorBlinking,\n }\n }\n\n resize(cols: number, rows: number): void {\n this.cols = cols\n this.rows = rows\n\n const dpr = window.devicePixelRatio || 1\n this.canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n this.canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n this.canvas.style.width = `${cols * this.cellWidth}px`\n this.canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n this.needsRender = true\n }\n\n private static PREVENT_DEFAULT_KEYS = new Set([\n \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\",\n \" \", \"PageUp\", \"PageDown\", \"Tab\", \"Home\", \"End\",\n ])\n\n private static MODIFIER_KEYS = new Set([\"Alt\", \"Control\", \"Meta\", \"Shift\"])\n\n private static KEY_MAP: Record<string, string> = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n Enter: \"return\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Tab: \"tab\",\n Escape: \"escape\",\n Home: \"home\",\n End: \"end\",\n \" \": \"space\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n // Prevent browser default for navigation keys (scrolling) and printable\n // characters (e.g. \"/\" triggers Quick Find in Firefox). Cmd/Ctrl shortcuts\n // like Cmd+C, Cmd+V are preserved.\n if (BrowserRenderer.PREVENT_DEFAULT_KEYS.has(event.key) ||\n (event.key.length === 1 && !event.metaKey && !event.ctrlKey)) {\n event.preventDefault()\n }\n\n // Copy selected text to clipboard (Cmd+C, Ctrl+C, or Option+C on Mac where key is \"\u00E7\")\n if (this.selection.active && (event.key === \"c\" || event.key === \"\u00E7\") && (event.metaKey || event.ctrlKey || event.altKey)) {\n const text = this.selection.getSelectedText(this.buffer)\n if (text) {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback: temporary textarea + execCommand\n const ta = document.createElement(\"textarea\")\n ta.value = text\n ta.style.position = \"fixed\"\n ta.style.left = \"-9999px\"\n document.body.appendChild(ta)\n ta.select()\n document.execCommand(\"copy\")\n document.body.removeChild(ta)\n })\n }\n event.preventDefault()\n return\n }\n\n // Any other keypress clears the selection (standard terminal behavior)\n // But ignore modifier-only keys so the user can press Option/Ctrl/Cmd before C\n const modifierOnly = BrowserRenderer.MODIFIER_KEYS.has(event.key)\n if (this.selection.active && !modifierOnly) {\n this.selection.clearSelection()\n this.needsRender = true\n }\n\n // Translate browser KeyboardEvent to OpenTUI KeyEvent format\n const keyEvent = {\n name: BrowserRenderer.KEY_MAP[event.key] ?? (event.key.length === 1 ? event.key : event.key.toLowerCase()),\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n option: event.altKey,\n sequence: event.key,\n number: false,\n raw: event.key,\n eventType: \"press\" as const,\n source: \"raw\" as const,\n _defaultPrevented: false,\n _propagationStopped: false,\n get defaultPrevented() {\n return this._defaultPrevented\n },\n get propagationStopped() {\n return this._propagationStopped\n },\n preventDefault() {\n this._defaultPrevented = true\n },\n stopPropagation() {\n this._propagationStopped = true\n },\n }\n\n this.renderContext._internalKeyInput.emit(\"keypress\", keyEvent)\n this.renderContext.keyInput.emit(\"keypress\", keyEvent)\n }\n}\n", "import { createContext, useContext } from \"react\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\nexport interface BrowserContextValue {\n renderContext: BrowserRenderContext\n}\n\nexport const BrowserContext = createContext<BrowserContextValue | null>(null)\n\nexport function useBrowserContext(): BrowserContextValue {\n const ctx = useContext(BrowserContext)\n if (!ctx) {\n throw new Error(\"useBrowserContext must be used within a BrowserContext.Provider\")\n }\n return ctx\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { BrowserRenderer } from \"./browser-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\n// Cast needed: ErrorBoundary uses opentui's JSX intrinsics internally,\n// which causes a type conflict with React's JSX types during DTS builds.\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\nexport interface BrowserRoot {\n render(node: ReactNode): void\n unmount(): void\n}\n\nexport function createBrowserRoot(renderer: BrowserRenderer): BrowserRoot {\n let unmountFn: (() => void) | null = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider value={{ keyHandler: renderer.renderContext.keyInput as any, renderer: renderer.renderContext as any }}>\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n unmountFn = _render(element, renderer.root)\n },\n unmount() {\n if (unmountFn) {\n // Reconciler cleanup would happen here\n }\n },\n }\n}\n", "export interface ReadableCharBuffer {\n width: number\n height: number\n char: Uint32Array\n}\n\nexport function bufferToText(buffer: ReadableCharBuffer): string {\n const lines: string[] = []\n for (let row = 0; row < buffer.height; row++) {\n let line = \"\"\n for (let col = 0; col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n lines.push(line.trimEnd())\n }\n // Trim trailing empty lines\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop()\n }\n return lines.join(\"\\n\")\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { bufferToText } from \"./buffer-to-text\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\nlet RootRenderableClass: any = null\n\nexport function setHeadlessRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport interface HeadlessRendererOptions {\n cols: number\n rows: number\n}\n\nexport class HeadlessRenderer {\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n\n constructor(options: HeadlessRendererOptions) {\n const { cols, rows } = options\n\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n // No-op for headless \u2014 we render on demand\n })\n\n if (!RootRenderableClass) {\n throw new Error(\n \"RootRenderableClass not set. Call setHeadlessRootRenderableClass before creating HeadlessRenderer.\",\n )\n }\n this.root = new RootRenderableClass(this.renderContext)\n }\n\n renderOnce(): void {\n executeRenderPipeline(this.buffer, this.renderContext, this.root, 0)\n }\n\n toText(): string {\n return bufferToText(this.buffer)\n }\n\n resize(cols: number, rows: number): void {\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n }\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { HeadlessRenderer } from \"./headless-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, reconciler, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\n// flushSync was renamed to flushSyncFromReconciler in react-reconciler 0.32.0\nconst _r = reconciler as typeof reconciler & { flushSyncFromReconciler?: typeof reconciler.flushSync }\nconst flushSync = _r.flushSyncFromReconciler ?? _r.flushSync\n\nexport interface HeadlessRoot {\n render(node: ReactNode): void\n renderToText(node: ReactNode): string\n unmount(): void\n}\n\nexport function createHeadlessRoot(renderer: HeadlessRenderer): HeadlessRoot {\n let container: any = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider\n value={{\n keyHandler: renderer.renderContext.keyInput as any,\n renderer: renderer.renderContext as any,\n }}\n >\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n container = _render(element, renderer.root)\n },\n renderToText(node: ReactNode): string {\n flushSync(() => {\n this.render(node)\n })\n renderer.renderOnce()\n return renderer.toText()\n },\n unmount() {\n if (container) {\n reconciler.updateContainer(null, container, null, () => {})\n // @ts-expect-error the types for `react-reconciler` are not up to date with the library.\n reconciler.flushSyncWork()\n container = null\n }\n },\n }\n}\n", "import type { ReactNode } from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\n\nexport interface MountOptions {\n /** Number of columns (auto-calculated from canvas size if omitted) */\n cols?: number\n /** Number of rows (auto-calculated from canvas size if omitted) */\n rows?: number\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Listen for keyboard events on the canvas (default: true) */\n keyboard?: boolean\n /** Auto-resize when canvas size changes (default: true) */\n autoResize?: boolean\n}\n\nexport interface MountResult {\n renderer: BrowserRenderer\n unmount: () => void\n resize: (cols: number, rows: number) => void\n}\n\n/**\n * Imperative API to mount Gridland content into a canvas element.\n *\n * ```ts\n * const canvas = document.getElementById(\"my-canvas\") as HTMLCanvasElement\n * const { unmount } = mountGridland(canvas, <App />)\n * ```\n */\nexport function mountGridland(\n canvas: HTMLCanvasElement,\n element: ReactNode,\n options: MountOptions = {},\n): MountResult {\n const {\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n keyboard = true,\n autoResize = true,\n } = options\n\n // Set up RootRenderable\n setRootRenderableClass(RootRenderable)\n\n // Calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n let cols = options.cols ?? Math.max(1, Math.floor(canvas.clientWidth / cellSize.width))\n let rows = options.rows ?? Math.max(1, Math.floor(canvas.clientHeight / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows)\n const root = createBrowserRoot(renderer)\n\n root.render(element)\n renderer.start()\n\n // Always make canvas focusable via click\n canvas.tabIndex = 0\n\n // Keyboard\n let keydownHandler: ((e: KeyboardEvent) => void) | null = null\n if (keyboard) {\n keydownHandler = (e: KeyboardEvent) => renderer.handleKeyDown(e)\n canvas.addEventListener(\"keydown\", keydownHandler)\n }\n\n // Auto-resize\n let resizeObserver: ResizeObserver | null = null\n if (autoResize) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n if (newCols !== cols || newRows !== rows) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n }\n }\n })\n resizeObserver.observe(canvas)\n }\n\n return {\n renderer,\n unmount() {\n if (keydownHandler) {\n canvas.removeEventListener(\"keydown\", keydownHandler)\n }\n resizeObserver?.disconnect()\n renderer.stop()\n root.unmount()\n },\n resize(newCols: number, newRows: number) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n },\n }\n}\n", "/**\n * SSR-safe utilities for @gridland/web.\n * These can be imported in any environment (Node.js, browser, edge).\n */\n\n/** Check if running in a browser environment */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\"\n}\n\n/** Check if canvas is supported */\nexport function isCanvasSupported(): boolean {\n if (!isBrowser()) return false\n const canvas = document.createElement(\"canvas\")\n return !!canvas.getContext(\"2d\")\n}\n\n/** Calculate grid dimensions from pixel dimensions and font size */\nexport function calculateGridSize(\n widthPx: number,\n heightPx: number,\n cellWidth: number,\n cellHeight: number,\n): { cols: number; rows: number } {\n return {\n cols: Math.max(1, Math.floor(widthPx / cellWidth)),\n rows: Math.max(1, Math.floor(heightPx / cellHeight)),\n }\n}\n", "import { useEffect, useState } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport interface DroppedFile {\n name: string\n content: string\n type: string\n size: number\n}\n\nexport function useFileDrop(callback: (file: DroppedFile) => void): { isDragOver: boolean } {\n const { renderContext } = useBrowserContext()\n const [isDragOver, setIsDragOver] = useState(false)\n\n useEffect(() => {\n const handler = (file: DroppedFile) => {\n callback(file)\n }\n const onDragEnter = () => setIsDragOver(true)\n const onDragLeave = () => setIsDragOver(false)\n\n renderContext.on(\"file-drop\", handler)\n renderContext.on(\"drag-enter\", onDragEnter)\n renderContext.on(\"drag-leave\", onDragLeave)\n return () => {\n renderContext.off(\"file-drop\", handler)\n renderContext.off(\"drag-enter\", onDragEnter)\n renderContext.off(\"drag-leave\", onDragLeave)\n }\n }, [renderContext, callback])\n\n return { isDragOver }\n}\n", "import { useEffect } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport function usePaste(callback: (text: string) => void): void {\n const { renderContext } = useBrowserContext()\n\n useEffect(() => {\n const handler = (text: string) => {\n callback(text)\n }\n renderContext.on(\"paste\", handler)\n return () => {\n renderContext.off(\"paste\", handler)\n }\n }, [renderContext, callback])\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "b", "x", "y", "b", "w", "h", "obj", "TextAttributes", "b", "fg", "bg", "w", "x", "y", "x", "y", "fg", "bg", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "edit", "regex", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "bull", "indent", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "findClosingBracket", "b", "level", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "src", "trimmed", "lines", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "line", "t", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "taskRaw", "checkboxToken", "spacers", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "errMsg", "keepPrevChar", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "e", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "yoga_wasm_base64_esm_default", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "YGEnums_default", "wrapAssembly", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "x", "y", "bg", "fg", "TextAttributes", "CONTINUATION", "fg", "bg", "b", "x", "y", "x", "y", "RootRenderable", "RootRenderableClass", "_render", "AppContext", "_ErrorBoundary", "jsx", "ErrorBoundary", "jsx", "RootRenderable", "RootRenderable", "useEffect", "useState", "useState", "useEffect", "useEffect", "useEffect"]
|
|
3
|
+
"sources": ["../src/TUI.tsx", "../src/core-shims/types.ts", "../src/shims/events-shim.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/generated/YGEnums.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/wrapAssembly.ts", "../../../opentui/node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/index.ts", "../../../opentui/packages/core/src/lib/yoga.options.ts", "../../../opentui/packages/core/src/renderable-brand.ts", "../../../opentui/packages/core/src/lib/renderable.validations.ts", "../../../opentui/packages/core/src/Renderable.ts", "../../../opentui/packages/core/src/lib/border.ts", "../../../opentui/packages/core/src/types.ts", "../../../opentui/packages/core/src/lib/RGBA.ts", "../../../opentui/packages/core/src/lib/styled-text.ts", "../src/browser-text-buffer.ts", "../src/browser-text-buffer-view.ts", "../src/browser-syntax-style.ts", "../src/shims/timeline-stub.ts", "../../../opentui/packages/core/src/lib/parse.keypress.ts", "../../../opentui/packages/core/src/lib/singleton.ts", "../../../opentui/packages/core/src/lib/env.ts", "../../../opentui/packages/core/src/lib/data-paths.ts", "../../../opentui/packages/core/src/renderables/TextBufferRenderable.ts", "../../../opentui/packages/core/src/renderables/TextNode.ts", "../src/shims/node-util.ts", "../../../opentui/packages/core/src/renderables/composition/vnode.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/defaults.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/rules.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/helpers.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Tokenizer.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Lexer.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Renderer.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/TextRenderer.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Parser.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Hooks.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/Instance.ts", "../../../opentui/node_modules/.bun/marked@17.0.1/node_modules/marked/src/marked.ts", "../../../opentui/packages/core/src/renderables/Slider.ts", "../../../opentui/packages/core/src/zig-registry.ts", "../../../opentui/packages/core/src/lib/selection.ts", "../src/browser-render-context.ts", "../../../node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js", "../../../node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/generated/YGEnums.ts", "../../../node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/wrapAssembly.ts", "../../../node_modules/.bun/yoga-layout@3.2.1/node_modules/yoga-layout/src/index.ts", "../src/core-shims/index.ts", "../src/browser-buffer.ts", "../src/canvas-painter.ts", "../src/selection-manager.ts", "../src/render-pipeline.ts", "../src/browser-renderer.ts", "../src/browser-context.ts", "../src/create-browser-root.tsx", "../src/buffer-to-text.ts", "../src/headless-renderer.ts", "../src/create-headless-root.tsx", "../src/mount.ts", "../src/utils.ts", "../src/file-drop.ts", "../src/paste.ts"],
|
|
4
|
+
"sourcesContent": ["import React, {\n useRef,\n useEffect,\n useState,\n type ReactNode,\n type CSSProperties,\n} from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot, type BrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\nimport { HeadlessRenderer, setHeadlessRootRenderableClass } from \"./headless-renderer\"\nimport { createHeadlessRoot } from \"./create-headless-root\"\n\nexport interface TUIProps {\n children: ReactNode\n /** CSS styles for the outer container div */\n style?: CSSProperties\n /** CSS class for the outer container div */\n className?: string\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Auto-focus the canvas for keyboard input (default: true) */\n autoFocus?: boolean\n /** Background color for the canvas (default: transparent) */\n backgroundColor?: string\n /** Called when the renderer is ready */\n onReady?: (renderer: BrowserRenderer) => void\n /** Columns to use for SSR headless render (default: 80) */\n fallbackCols?: number\n /** Rows to use for SSR headless render (default: 24) */\n fallbackRows?: number\n}\n\n/**\n * A single React component that renders TUI content to an HTML5 Canvas.\n * Gridland is built on the opentui engine.\n *\n * Usage:\n * ```tsx\n * <TUI style={{ width: \"100%\", height: 400 }}>\n * <box border borderStyle=\"rounded\">\n * <text>Hello from Gridland!</text>\n * </box>\n * </TUI>\n * ```\n *\n * No dynamic imports, no wrapper chains. Just a component.\n */\nexport function TUI({\n children,\n style,\n className,\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n autoFocus = true,\n backgroundColor,\n onReady,\n fallbackCols = 80,\n fallbackRows = 24,\n}: TUIProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const rendererRef = useRef<BrowserRenderer | null>(null)\n const rootRef = useRef<BrowserRoot | null>(null)\n const [isClient, setIsClient] = useState(false)\n\n // SSR safety: only render canvas on the client\n useEffect(() => {\n setIsClient(true)\n }, [])\n\n // Initialize renderer when canvas is available\n useEffect(() => {\n if (!isClient) return\n\n const canvas = canvasRef.current\n const container = containerRef.current\n if (!canvas || !container) return\n\n setRootRenderableClass(RootRenderable)\n\n // Measure cell size to calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n const containerRect = container.getBoundingClientRect()\n const cols = Math.max(1, Math.floor(containerRect.width / cellSize.width))\n const rows = Math.max(1, Math.floor(containerRect.height / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows, { backgroundColor })\n rendererRef.current = renderer\n\n const root = createBrowserRoot(renderer)\n rootRef.current = root\n\n root.render(children)\n renderer.start()\n\n canvas.tabIndex = 0\n if (autoFocus) {\n canvas.focus()\n }\n\n onReady?.(renderer)\n\n // Handle keyboard events\n const onKeyDown = (e: KeyboardEvent) => {\n renderer.handleKeyDown(e)\n }\n canvas.addEventListener(\"keydown\", onKeyDown)\n\n // Handle resize with ResizeObserver\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n renderer.resize(newCols, newRows)\n }\n })\n resizeObserver.observe(container)\n\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown)\n resizeObserver.disconnect()\n renderer.stop()\n root.unmount()\n rendererRef.current = null\n rootRef.current = null\n }\n }, [isClient, fontSize, fontFamily, backgroundColor]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Re-render when children change\n useEffect(() => {\n if (rootRef.current) {\n rootRef.current.render(children)\n }\n }, [children])\n\n if (!isClient) {\n // Only run the headless render on the actual server.\n // On the client's initial render (before useEffect sets isClient=true),\n // we render an empty <pre> and let suppressHydrationWarning preserve\n // the server-rendered DOM until the canvas takes over.\n const isServer = typeof window === \"undefined\"\n let text = \"\"\n if (isServer) {\n setHeadlessRootRenderableClass(RootRenderable)\n const renderer = new HeadlessRenderer({ cols: fallbackCols, rows: fallbackRows })\n const root = createHeadlessRoot(renderer)\n text = root.renderToText(children)\n root.unmount()\n }\n return (\n <div style={style} className={className}>\n <pre\n suppressHydrationWarning\n aria-hidden\n style={{\n fontFamily,\n fontSize,\n margin: 0,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"pre\",\n }}\n >\n {text}\n </pre>\n </div>\n )\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n ...style,\n }}\n className={className}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n outline: \"none\",\n }}\n />\n </div>\n )\n}\n", "// Types matching opentui core types.ts\nimport type { RGBA } from \"./rgba\"\nimport type { Renderable } from \"./renderable-types\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n BLINK: 1 << 4,\n INVERSE: 1 << 5,\n HIDDEN: 1 << 6,\n STRIKETHROUGH: 1 << 7,\n}\n\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\nexport function getBaseAttributes(attr: number): number {\n return attr & 0xff\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport interface RenderContext {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => any | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: any | null\n focusRenderable: (renderable: any) => void\n registerLifecyclePass: (renderable: any) => void\n unregisterLifecyclePass: (renderable: any) => void\n getLifecyclePasses: () => Set<any>\n keyInput: any\n _internalKeyInput: any\n clearSelection: () => void\n startSelection: (renderable: any, x: number, y: number) => void\n updateSelection: (\n currentRenderable: any | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n // EventEmitter methods\n on: (event: string, listener: (...args: any[]) => void) => any\n off: (event: string, listener: (...args: any[]) => void) => any\n emit: (event: string, ...args: any[]) => boolean\n removeAllListeners: (event?: string) => any\n}\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "// Browser-compatible EventEmitter shim.\n// Replaces the 'events' npm package to avoid CJS/ESM issues in Vite.\n\ntype Listener = (...args: any[]) => void\n\nexport class EventEmitter {\n private _listeners = new Map<string | symbol, Listener[]>()\n\n on(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event) ?? []\n list.push(listener)\n this._listeners.set(event, list)\n return this\n }\n\n addListener(event: string | symbol, listener: Listener): this {\n return this.on(event, listener)\n }\n\n off(event: string | symbol, listener: Listener): this {\n return this.removeListener(event, listener)\n }\n\n removeListener(event: string | symbol, listener: Listener): this {\n const list = this._listeners.get(event)\n if (list) {\n const idx = list.indexOf(listener)\n if (idx !== -1) list.splice(idx, 1)\n if (list.length === 0) this._listeners.delete(event)\n }\n return this\n }\n\n removeAllListeners(event?: string | symbol): this {\n if (event) {\n this._listeners.delete(event)\n } else {\n this._listeners.clear()\n }\n return this\n }\n\n emit(event: string | symbol, ...args: any[]): boolean {\n const list = this._listeners.get(event)\n if (!list || list.length === 0) return false\n for (const listener of [...list]) {\n listener(...args)\n }\n return true\n }\n\n once(event: string | symbol, listener: Listener): this {\n const wrapper = (...args: any[]) => {\n this.removeListener(event, wrapper)\n listener(...args)\n }\n return this.on(event, wrapper)\n }\n\n listenerCount(event: string | symbol): number {\n return this._listeners.get(event)?.length ?? 0\n }\n\n listeners(event: string | symbol): Listener[] {\n return [...(this._listeners.get(event) ?? [])]\n }\n\n eventNames(): (string | symbol)[] {\n return [...this._listeners.keys()]\n }\n\n setMaxListeners(_n: number): this {\n return this // no-op in browser\n }\n\n getMaxListeners(): number {\n return Infinity\n }\n}\n\nexport default EventEmitter\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAHIQkDQCAJLQABQSVHBEAgCSEBDAILIAdBAWohByAJLQACIQogCUECaiIBIQkgCkElRg0ACwsgByANayIHIA5B/////wdzIhhKDQcgAARAIAAgDSAHECYLIAcNBiAIIAE2AkwgAUEBaiEHQX8hEgJAIAEsAAEiChBXRQ0AIAEtAAJBJEcNACABQQNqIQcgCkEwayESQQEhFQsgCCAHNgJMQQAhDAJAIAcsAAAiCUEgayIBQR9LBEAgByEKDAELIAchCkEBIAF0IgFBidEEcUUNAANAIAggB0EBaiIKNgJMIAEgDHIhDCAHLAABIglBIGsiAUEgTw0BIAohB0EBIAF0IgFBidEEcQ0ACwsCQCAJQSpGBEACfwJAIAosAAEiARBXRQ0AIAotAAJBJEcNACABQQJ0IARqQcABa0EKNgIAIApBA2ohCUEBIRUgCiwAAUEDdCADakGAA2soAgAMAQsgFQ0GIApBAWohCSAARQRAIAggCTYCTEEAIRVBACETDAMLIAIgAigCACIBQQRqNgIAQQAhFSABKAIACyETIAggCTYCTCATQQBODQFBACATayETIAxBgMAAciEMDAELIAhBzABqEIkBIhNBAEgNCCAIKAJMIQkLQQAhB0F/IQsCfyAJLQAAQS5HBEAgCSEBQQAMAQsgCS0AAUEqRgRAAn8CQCAJLAACIgEQV0UNACAJLQADQSRHDQAgAUECdCAEakHAAWtBCjYCACAJQQRqIQEgCSwAAkEDdCADakGAA2soAgAMAQsgFQ0GIAlBAmohAUEAIABFDQAaIAIgAigCACIKQQRqNgIAIAooAgALIQsgCCABNgJMIAtBf3NBH3YMAQsgCCAJQQFqNgJMIAhBzABqEIkBIQsgCCgCTCEBQQELIQ8DQCAHIRFBHCEKIAEiECwAACIHQfsAa0FGSQ0JIBBBAWohASAHIBFBOmxqQf8qai0AACIHQQFrQQhJDQALIAggATYCTAJAAkAgB0EbRwRAIAdFDQsgEkEATgRAIAQgEkECdGogBzYCACAIIAMgEkEDdGopAwA3A0AMAgsgAEUNCCAIQUBrIAcgAiAGEIcBDAILIBJBAE4NCgtBACEHIABFDQcLIAxB//97cSIJIAwgDEGAwABxGyEMQQAhEkGPCSEWIBQhCgJAAkACQAJ/AkACQAJAAkACfwJAAkACQAJAAkACQAJAIBAsAAAiB0FfcSAHIAdBD3FBA0YbIAcgERsiB0HYAGsOIQQUFBQUFBQUFA4UDwYODg4UBhQUFBQCBQMUFAkUARQUBAALAkAgB0HBAGsOBw4UCxQODg4ACyAHQdMARg0JDBMLIAgpA0AhGUGPCQwFC0EAIQcCQAJAAkACQAJAAkACQCARQf8BcQ4IAAECAwQaBQYaCyAIKAJAIA42AgAMGQsgCCgCQCAONgIADBgLIAgoAkAgDqw3AwAMFwsgCCgCQCAOOwEADBYLIAgoAkAgDjoAAAwVCyAIKAJAIA42AgAMFAsgCCgCQCAOrDcDAAwTC0EIIAsgC0EITRshCyAMQQhyIQxB+AAhBwsgFCENIAgpA0AiGVBFBEAgB0EgcSEQA0AgDUEBayINIBmnQQ9xQZAvai0AACAQcjoAACAZQg9WIQkgGUIEiCEZIAkNAAsLIAxBCHFFIAgpA0BQcg0DIAdBBHZBjwlqIRZBAiESDAMLIBQhByAIKQNAIhlQRQRAA0AgB0EBayIHIBmnQQdxQTByOgAAIBlCB1YhDSAZQgOIIRkgDQ0ACwsgByENIAxBCHFFDQIgCyAUIA1rIgdBAWogByALSBshCwwCCyAIKQNAIhlCAFMEQCAIQgAgGX0iGTcDQEEBIRJBjwkMAQsgDEGAEHEEQEEBIRJBkAkMAQtBkQlBjwkgDEEBcSISGwshFiAZIBQQRyENCyAPQQAgC0EASBsNDiAMQf//e3EgDCAPGyEMIAgpA0AiGUIAUiALckUEQCAUIQ1BACELDAwLIAsgGVAgFCANa2oiByAHIAtIGyELDAsLQQAhDAJ/Qf////8HIAsgC0H/////B08bIgoiEUEARyEQAkACfwJAAkAgCCgCQCIHQY4lIAcbIg0iD0EDcUUgEUVyDQADQCAPLQAAIgxFDQIgEUEBayIRQQBHIRAgD0EBaiIPQQNxRQ0BIBENAAsLIBBFDQICQCAPLQAARSARQQRJckUEQANAIA8oAgAiB0F/cyAHQYGChAhrcUGAgYKEeHENAiAPQQRqIQ8gEUEEayIRQQNLDQALCyARRQ0DC0EADAELQQELIRADQCAQRQRAIA8tAAAhDEEBIRAMAQsgDyAMRQ0CGiAPQQFqIQ8gEUEBayIRRQ0BQQAhEAwACwALQQALIgcgDWsgCiAHGyIHIA1qIQogC0EATgRAIAkhDCAHIQsMCwsgCSEMIAchCyAKLQAADQ0MCgsgCwRAIAgoAkAMAgtBACEHIABBICATQQAgDBApDAILIAhBADYCDCAIIAgpA0A+AgggCCAIQQhqIgc2AkBBfyELIAcLIQlBACEHAkADQCAJKAIAIg1FDQEgCEEEaiANEIYBIgpBAEgiDSAKIAsgB2tLckUEQCAJQQRqIQkgCyAHIApqIgdLDQEMAgsLIA0NDQtBPSEKIAdBAEgNCyAAQSAgEyAHIAwQKSAHRQRAQQAhBwwBC0EAIQogCCgCQCEJA0AgCSgCACINRQ0BIAhBBGogDRCGASINIApqIgogB0sNASAAIAhBBGogDRAmIAlBBGohCSAHIApLDQALCyAAQSAgEyAHIAxBgMAAcxApIBMgByAHIBNIGyEHDAgLIA9BACALQQBIGw0IQT0hCiAAIAgrA0AgEyALIAwgByAFERwAIgdBAE4NBwwJCyAIIAgpA0A8ADdBASELIBchDSAJIQwMBAsgBy0AASEJIAdBAWohBwwACwALIAANByAVRQ0CQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQhwFBASEOIAdBAWoiB0EKRw0BDAkLC0EBIQ4gB0EKTw0HA0AgBCAHQQJ0aigCAA0BIAdBAWoiB0EKRw0ACwwHC0EcIQoMBAsgCyAKIA1rIhAgCyAQShsiCSASQf////8Hc0oNAkE9IQogEyAJIBJqIgsgCyATSBsiByAYSg0DIABBICAHIAsgDBApIAAgFiASECYgAEEwIAcgCyAMQYCABHMQKSAAQTAgCSAQQQAQKSAAIA0gEBAmIABBICAHIAsgDEGAwABzECkMAQsLQQAhDgwDC0E9IQoLQfw7IAo2AgALQX8hDgsgCEHQAGokACAOC9kCAQR/IwBB0AFrIgUkACAFIAI2AswBIAVBoAFqIgJBAEEoECoaIAUgBSgCzAE2AsgBAkBBACABIAVByAFqIAVB0ABqIAIgAyAEEIoBQQBIBEBBfyEEDAELQQEgBiAAKAJMQQBOGyEGIAAoAgAhByAAKAJIQQBMBEAgACAHQV9xNgIACwJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQggACAFNgIsDAELIAAoAhANAQtBfyAAEJ0BDQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWogAyAEEIoBCyECIAgEQCAAQQBBACAAKAIkEQYAGiAAQQA2AjAgACAINgIsIABBADYCHCAAKAIUIQEgAEIANwMQIAJBfyABGyECCyAAIAAoAgAiACAHQSBxcjYCAEF/IAIgAEEgcRshBCAGRQ0ACyAFQdABaiQAIAQLfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQjAEhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwsVACAARQRAQQAPC0H8OyAANgIAQX8LzgECA38CfSMAQRBrIgMkAEEBIQQgA0EIaiAAQfwAaiIFIAAgAUEBdGpBxABqIgEvAQAQHwJAAkAgAyoCCCIHIAIqAgAiBlwEQCAHIAdbBEAgAi0ABCECDAILIAYgBlwhBAsgAi0ABCECIARFDQAgAy0ADCACQf8BcUYNAQsgBSABIAYgAhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgA0EQaiQAC9EDAEHUO0GoHBAcQdU7QYoWQQFBAUEAEBtB1jtB/RJBAUGAf0H/ABAEQdc7QfYSQQFBgH9B/wAQBEHYO0H0EkEBQQBB/wEQBEHZO0GUCkECQYCAfkH//wEQBEHaO0GLCkECQQBB//8DEARB2ztBsQpBBEGAgICAeEH/////BxAEQdw7QagKQQRBAEF/EARB3TtB+BhBBEGAgICAeEH/////BxAEQd47Qe8YQQRBAEF/EARB3ztBjxBCgICAgICAgICAf0L///////////8AEIQBQeA7QY4QQgBCfxCEAUHhO0GIEEEEEA1B4jtB9BtBCBANQeM7QaQZEA5B5DtBmSIQDkHlO0EEQZcZEAhB5jtBAkGwGRAIQec7QQRBvxkQCEHoO0GPFhAaQek7QQBB1CEQAUHqO0EAQboiEAFB6ztBAUHyIRABQew7QQJB5B4QAUHtO0EDQYMfEAFB7jtBBEGrHxABQe87QQVByB8QAUHwO0EEQd8iEAFB8TtBBUH9IhABQeo7QQBBriAQAUHrO0EBQY0gEAFB7DtBAkHwIBABQe07QQNBziAQAUHuO0EEQbMhEAFB7ztBBUGRIRABQfI7QQZB7h8QAUHzO0EHQaQjEAELJQAgAEH0JjYCACAALQAEBEAgACgCCEH9DxBmCyAAKAIIEAYgAAsDAAALJQAgAEHsJzYCACAALQAEBEAgACgCCEH9DxBmCyAAKAIIEAYgAAs3AQJ/QQQQHiICIAE2AgBBBBAeIgMgATYCAEGjOyAAQeI7QfooQcEBIAJB4jtB/ihBwgEgAxAHCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRBQALOQEBfyABIAAoAgQiBEEBdWohASAAKAIAIQAgASACIAMgBEEBcQR/IAEoAgAgAGooAgAFIAALEQMACwkAIAEgABEAAAsHACAAEQ4ACzUBAX8gASAAKAIEIgJBAXVqIQEgACgCACEAIAEgAkEBcQR/IAEoAgAgAGooAgAFIAALEQAACzABAX8jAEEQayICJAAgAiABNgIIIAJBCGogABECACEAIAIoAggQBiACQRBqJAAgAAsMACABIAAoAgARAAALCQAgAEEBOgAEC9coAQJ/QaA7QaE7QaI7QQBBjCZBB0GPJkEAQY8mQQBB2RZBkSZBCBAFQQgQHiIAQoiAgIAQNwMAQaA7QZcbQQZBoCZBuCZBCSAAQQEQAEGkO0GlO0GmO0GgO0GMJkEKQYwmQQtBjCZBDEG4EUGRJkENEAVBBBAeIgBBDjYCAEGkO0HoFEECQcAmQcgmQQ8gAEEAEABBoDtBowxBAkHMJkHUJkEQQREQA0GgO0GAHEEDQaQnQbAnQRJBExADQbg7Qbk7Qbo7QQBBjCZBFEGPJkEAQY8mQQBB6RZBkSZBFRAFQQgQHiIAQoiAgIAQNwMAQbg7QegcQQJBuCdByCZBFiAAQQEQAEG7O0G8O0G9O0G4O0GMJkEXQYwmQRhBjCZBGUHPEUGRJkEaEAVBBBAeIgBBGzYCAEG7O0HoFEECQcAnQcgmQRwgAEEAEABBuDtBowxBAkHIJ0HUJkEdQR4QA0G4O0GAHEEDQaQnQbAnQRJBHxADQb47Qb87QcA7QQBBjCZBIEGPJkEAQY8mQQBB2hpBkSZBIRAFQb47QQFB+CdBjCZBIkEjEA9BvjtBkBtBAUH4J0GMJkEiQSMQA0G+O0HpCEECQfwnQcgmQSRBJRADQQgQHiIAQQA2AgQgAEEmNgIAQb47Qa0cQQRBkChBoChBJyAAQQAQAEEIEB4iAEEANgIEIABBKDYCAEG+O0GkEUEDQagoQbQoQSkgAEEAEABBCBAeIgBBADYCBCAAQSo2AgBBvjtByB1BA0G8KEHIKEErIABBABAAQQgQHiIAQQA2AgQgAEEsNgIAQb47QaYQQQNB0ChByChBLSAAQQAQAEEIEB4iAEEANgIEIABBLjYCAEG+O0HLHEEDQdwoQbAnQS8gAEEAEABBCBAeIgBBADYCBCAAQTA2AgBBvjtB0h1BAkHoKEHUJkExIABBABAAQQgQHiIAQQA2AgQgAEEyNgIAQb47QZcQQQJB8ChB1CZBMyAAQQAQAEHBO0GECkH4KEE0QZEmQTUQCkHiD0EAEEhB6g5BCBBIQYITQRAQSEHxFUEYEEhBgxdBIBBIQfAOQSgQSEHBOxAJQaM7Qf8aQfgoQTZBkSZBNxAKQYMXQQAQkwFB8A5BCBCTAUGjOxAJQcI7QYobQfgoQThBkSZBORAKQQQQHiIAQQg2AgBBBBAeIgFBCDYCAEHCO0GEG0HiO0H6KEE6IABB4jtB/ihBOyABEAdBBBAeIgBBADYCAEEEEB4iAUEANgIAQcI7QeUOQds7QdQmQTwgAEHbO0HIKEE9IAEQB0HCOxAJQcM7QcQ7QcU7QQBBjCZBPkGPJkEAQY8mQQBB+xtBkSZBPxAFQcM7QQFBhClBjCZBwABBwQAQD0HDO0HXDkEBQYQpQYwmQcAAQcEAEANBwztB0BpBAkGIKUHUJkHCAEHDABADQcM7QekIQQJBkClByCZBxABBxQAQA0EIEB4iAEEANgIEIABBxgA2AgBBwztB9w9BAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABByAA2AgBBwztB6htBA0GYKUHIKEHJACAAQQAQAEEIEB4iAEEANgIEIABBygA2AgBBwztBnxtBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABBzAA2AgBBwztB0BRBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABBzgA2AgBBwztBiA1BBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABBzwA2AgBBwztB3RNBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB0AA2AgBBwztB+QtBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB0QA2AgBBwztBuBBBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB0gA2AgBBwztB5RpBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB0wA2AgBBwztB/BRBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB1AA2AgBBwztBlRNBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB1QA2AgBBwztBtQpBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB1gA2AgBBwztBuBVBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB1wA2AgBBwztBmw1BBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB2AA2AgBBwztB7RNBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB2QA2AgBBwztBxAlBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB2gA2AgBBwztB8QhBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB2wA2AgBBwztBhwlBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB3QA2AgBBwztB1BBBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB3gA2AgBBwztB5gxBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB3wA2AgBBwztBzBNBAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABB4AA2AgBBwztBrAlBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB4QA2AgBBwztBnxZBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB4gA2AgBBwztBoRdBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB4wA2AgBBwztBvw1BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB5AA2AgBBwztB+xNBAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABB5QA2AgBBwztBkQ9BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB5gA2AgBBwztBwQxBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB5wA2AgBBwztBvhNBAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABB6AA2AgBBwztBsxdBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB6QA2AgBBwztBzw1BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB6gA2AgBBwztBpQ9BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB6wA2AgBBwztB0gxBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB7AA2AgBBwztBiRdBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB7QA2AgBBwztBrA1BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB7gA2AgBBwztB9w5BA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB7wA2AgBBwztBrQxBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB8AA2AgBBwztB/RhBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB8QA2AgBBwztBshRBA0HIKUH+KEHcACAAQQAQAEEIEB4iAEEANgIEIABB8gA2AgBBwztBlBJBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB8wA2AgBBwztBzhlBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB9AA2AgBBwztB4g1BBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB9QA2AgBBwztBrRNBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB9gA2AgBBwztB+gxBBEGwKUHAKUHNACAAQQAQAEEIEB4iAEEANgIEIABB9wA2AgBBwztBnhVBA0GkKUHIKEHLACAAQQAQAEEIEB4iAEEANgIEIABB+AA2AgBBwztBrxtBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABB+gA2AgBBwztB3BRBA0HcKUGwJ0H7ACAAQQAQAEEIEB4iAEEANgIEIABB/AA2AgBBwztBiQxBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABB/QA2AgBBwztBxhBBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABB/gA2AgBBwztB8hpBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABB/wA2AgBBwztBjRVBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBgAE2AgBBwztBoRNBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBgQE2AgBBwztBxwpBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBggE2AgBBwztBwhVBA0HcKUGwJ0H7ACAAQQAQAEEIEB4iAEEANgIEIABBgwE2AgBBwztB4RBBAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBhQE2AgBBwztBuAlBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBhwE2AgBBwztBrRZBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBiAE2AgBBwztBqhdBAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBiQE2AgBBwztBmw9BAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBigE2AgBBwztBvxdBAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBiwE2AgBBwztBsg9BAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBjAE2AgBBwztBlRdBAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBjQE2AgBBwztBhA9BAkHoKUHUJkGEASAAQQAQAEEIEB4iAEEANgIEIABBjgE2AgBBwztBihlBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBjwE2AgBBwztBwRRBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBkAE2AgBBwztBnhJBA0H4KUGEKkGRASAAQQAQAEEIEB4iAEEANgIEIABBkgE2AgBBwztB0AlBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBkwE2AgBBwztB/AhBAkHUKUHUJkH5ACAAQQAQAEEIEB4iAEEANgIEIABBlAE2AgBBwztB2RlBA0HcKUGwJ0H7ACAAQQAQAEEIEB4iAEEANgIEIABBlQE2AgBBwztBtBNBA0GMKkGYKkGWASAAQQAQAEEIEB4iAEEANgIEIABBlwE2AgBBwztBhxxBBEGgKkGgKEGYASAAQQAQAEEIEB4iAEEANgIEIABBmQE2AgBBwztBnBxBA0GwKkHIKEGaASAAQQAQAEEIEB4iAEEANgIEIABBmwE2AgBBwztBmgpBAkG8KkHUJkGcASAAQQAQAEEIEB4iAEEANgIEIABBnQE2AgBBwztBmQxBAkHEKkHUJkGeASAAQQAQAEEIEB4iAEEANgIEIABBnwE2AgBBwztBkxxBA0HMKkGwJ0GgASAAQQAQAEEIEB4iAEEANgIEIABBoQE2AgBBwztBuxZBA0HYKkHIKEGiASAAQQAQAEEIEB4iAEEANgIEIABBowE2AgBBwztBvxtBAkHkKkHUJkGkASAAQQAQAEEIEB4iAEEANgIEIABBpQE2AgBBwztB0xtBA0HYKkHIKEGiASAAQQAQAEEIEB4iAEEANgIEIABBpgE2AgBBwztBqB1BA0HsKkHIKEGnASAAQQAQAEEIEB4iAEEANgIEIABBqAE2AgBBwztBph1BAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABBqQE2AgBBwztBuR1BA0H4KkHIKEGqASAAQQAQAEEIEB4iAEEANgIEIABBqwE2AgBBwztBtx1BAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABBrAE2AgBBwztB3whBAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABBrQE2AgBBwztB1whBAkGEK0HUJkGuASAAQQAQAEEIEB4iAEEANgIEIABBrwE2AgBBwztB3hVBAkGQKUHIJkHHACAAQQAQAEEIEB4iAEEANgIEIABBsAE2AgBBwztB3AlBAkGEK0HUJkGuASAAQQAQAEEIEB4iAEEANgIEIABBsQE2AgBBwztB6QlBBUGQK0GkK0GyASAAQQAQAEEIEB4iAEEANgIEIABBswE2AgBBwztB5w9BAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBtAE2AgBBwztB0Q9BAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBtQE2AgBBwztBhhNBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBtgE2AgBBwztB+BVBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBtwE2AgBBwztByxdBAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBuAE2AgBBwztBvw9BAkHwKUH6KEGGASAAQQAQAEEIEB4iAEEANgIEIABBuQE2AgBBwztB+QlBAkGsK0HUJkG6ASAAQQAQAEEIEB4iAEEANgIEIABBuwE2AgBBwztBzBVBA0H4KUGEKkGRASAAQQAQAEEIEB4iAEEANgIEIABBvAE2AgBBwztBqBJBA0H4KUGEKkGRASAAQQAQAEEIEB4iAEEANgIEIABBvQE2AgBBwztB5BlBA0H4KUGEKkGRASAAQQAQAEEIEB4iAEEANgIEIABBvgE2AgBBwztBqxVBAkHUKUHUJkH5ACAAQQAQAAtZAQF/IAAgACgCSCIBQQFrIAFyNgJIIAAoAgAiAUEIcQRAIAAgAUEgcjYCAEF/DwsgAEIANwIEIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhBBAAtHAAJAIAFBA00EfyAAIAFBAnRqQQRqBSABQQRrIgEgACgCGCIAKAIEIAAoAgAiAGtBAnVPDQEgACABQQJ0agsoAgAPCxACAAs4AQF/IAFBAEgEQBACAAsgAUEBa0EFdkEBaiIBQQJ0EB4hAiAAIAE2AgggAEEANgIEIAAgAjYCAAvSBQEJfyAAIAEvAQA7AQAgACABKQIENwIEIAAgASkCDDcCDCAAIAEoAhQ2AhQCQAJAIAEoAhgiA0UNAEEYEB4iBUEANgIIIAVCADcCACADKAIEIgEgAygCACICRwRAIAEgAmsiAkEASA0CIAUgAhAeIgE2AgAgBSABIAJqNgIIIAMoAgAiAiADKAIEIgZHBEADQCABIAIoAgA2AgAgAUEEaiEBIAJBBGoiAiAGRw0ACwsgBSABNgIECyAFQgA3AgwgBUEANgIUIAMoAhAiAUUNACAFQQxqIAEQnwEgAygCDCEGIAUgBSgCECIEIAMoAhAiAkEfcWogAkFgcWoiATYCEAJAAkAgBEUEQCABQQFrIQMMAQsgAUEBayIDIARBAWtzQSBJDQELIAUoAgwgA0EFdkEAIAFBIU8bQQJ0akEANgIACyAFKAIMIARBA3ZB/P///wFxaiEBIARBH3EiA0UEQCACQQBMDQEgAkEgbSEDIAJBH2pBP08EQCABIAYgA0ECdBAzGgsgAiADQQV0ayICQQBMDQEgASADQQJ0IgNqIgEgASgCAEF/QSAgAmt2IgFBf3NxIAMgBmooAgAgAXFyNgIADAELIAJBAEwNAEF/IAN0IQhBICADayEEIAJBIE4EQCAIQX9zIQkgASgCACEHA0AgASAHIAlxIAYoAgAiByADdHI2AgAgASABKAIEIAhxIAcgBHZyIgc2AgQgBkEEaiEGIAFBBGohASACQT9LIQogAkEgayECIAoNAAsgAkEATA0BCyABIAEoAgBBfyAEIAQgAiACIARKGyIEa3YgCHFBf3NxIAYoAgBBf0EgIAJrdnEiBiADdHI2AgAgAiAEayICQQBMDQAgASADIARqQQN2Qfz///8BcWoiASABKAIAQX9BICACa3ZBf3NxIAYgBHZyNgIACyAAKAIYIQEgACAFNgIYIAEEQCABEFsLDwsQAgALvQMBB38gAARAIwBBIGsiBiQAIAAoAgAiASgC5AMiAwRAIAMgARBvGiABQQA2AuQDCyABKALsAyICIAEoAugDIgNHBEBBASACIANrQQJ1IgIgAkEBTRshBEEAIQIDQCADIAJBAnRqKAIAQQA2AuQDIAJBAWoiAiAERw0ACwsgASADNgLsAwJAIAMgAUHwA2oiAigCAEYNACAGQQhqQQBBACACEEoiAigCBCABKALsAyABKALoAyIEayIFayIDIAQgBRAzIQUgASgC6AMhBCABIAU2AugDIAIgBDYCBCABKALsAyEFIAEgAigCCDYC7AMgAiAFNgIIIAEoAvADIQcgASACKAIMNgLwAyACIAQ2AgAgAiAHNgIMIAQgBUcEQCACIAUgBCAFa0EDakF8cWo2AggLIARFDQAgBBAnIAEoAugDIQMLIAMEQCABIAM2AuwDIAMQJwsgASgClAEhAyABQQA2ApQBIAMEQCADEFsLIAEQJyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALIAAoAgQhASAAQQA2AgQgAQRAIAEgASgCACgCBBEAAAsgBkEgaiQAIAAQIwsLtQEBAX8jAEEQayICJAACfyABBEAgASgCACEBQYgEEB4gARBcIAENARogAkH3GTYCACACEHIQJAALQZQ7LQAARQRAQfg6QQM2AgBBiDtCgICAgICAgMA/NwIAQYA7QgA3AgBBlDtBAToAAEH8OkH8Oi0AAEH+AXE6AABB9DpBADYCAEGQO0EANgIAC0GIBBAeQfQ6EFwLIQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AQ2hpbGQgYWxyZWFkeSBoYXMgYSBvd25lciwgaXQgbXVzdCBiZSByZW1vdmVkIGZpcnN0LgBDYW5ub3Qgc2V0IG1lYXN1cmUgZnVuY3Rpb246IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAENhbm5vdCBhZGQgY2hpbGQ6IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAChudWxsKQBpbmRleCA8IDQwOTYgJiYgIlNtYWxsVmFsdWVCdWZmZXIgY2FuIG9ubHkgaG9sZCB1cCB0byA0MDk2IGNodW5rcyIAJXMKAAEAAAADAAAAAAAAAAIAAAADAAAAAQAAAAIAAAAAAAAAAQAAAAEAQYwmCwdpaQB2AHZpAEGgJgs3ox0AAKEdAADhHQAA2x0AAOEdAADbHQAAaWlpZmlmaQDUHQAApB0AAHZpaQClHQAA6B0AAGlpaQBB4CYLCcQAAADFAAAAxgBB9CYLDsQAAADHAAAAyAAAANQdAEGQJws+ox0AAOEdAADbHQAA4R0AANsdAADoHQAA4x0AAOgdAABpaWlpAAAAANQdAAC5HQAA1B0AALsdAAC8HQAA6B0AQdgnCwnJAAAAygAAAMsAQewnCxbJAAAAzAAAAMgAAAC/HQAA1B0AAL8dAEGQKAuiA9QdAAC/HQAA2x0AANUdAAB2aWlpaQAAANQdAAC/HQAA4R0AAHZpaWYAAAAA1B0AAL8dAADbHQAAdmlpaQAAAADUHQAAvx0AANUdAADVHQAAwB0AANsdAADbHQAAwB0AANUdAADAHQAAaQBkaWkAdmlpZAAAxB0AAMQdAAC/HQAA1B0AAMQdAADUHQAAxB0AAMMdAADUHQAAxB0AANsdAADUHQAAxB0AANsdAADiHQAAdmlpaWQAAADUHQAAxB0AAOIdAADbHQAAxR0AAMIdAADFHQAA2x0AAMIdAADFHQAA4h0AAMUdAADiHQAAxR0AANsdAABkaWlpAAAAAOEdAADEHQAA2x0AAGZpaWkAAAAA1B0AAMQdAADEHQAA3B0AANQdAADEHQAAxB0AANwdAADFHQAAxB0AAMQdAADEHQAAxB0AANwdAADUHQAAxB0AANUdAADVHQAAxB0AANQdAADEHQAAoR0AANQdAADEHQAAuR0AANUdAADFHQAAAAAAANQdAADEHQAA4h0AAOIdAADbHQAAdmlpZGRpAADBHQAAxR0AQcArC0EZAAoAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkAEQoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQBBkSwLIQ4AAAAAAAAAABkACg0ZGRkADQAAAgAJDgAAAAkADgAADgBByywLAQwAQdcsCxUTAAAAABMAAAAACQwAAAAAAAwAAAwAQYUtCwEQAEGRLQsVDwAAAAQPAAAAAAkQAAAAAAAQAAAQAEG/LQsBEgBByy0LHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBgi4LDhoAAAAaGhoAAAAAAAAJAEGzLgsBFABBvy4LFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABB7S4LARYAQfkuCycVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUYAQcQvCwHSAEHsLwsI//////////8AQbAwCwkQIgEAAAAAAAUAQcQwCwHNAEHcMAsKzgAAAM8AAAD8HQBB9DALAQIAQYQxCwj//////////wBByDELAQUAQdQxCwHQAEHsMQsOzgAAANEAAAAIHgAAAAQAQYQyCwEBAEGUMgsF/////woAQdgyCwHT\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "import {\n BoxSizing,\n Align,\n Dimension,\n Direction,\n Display,\n Edge,\n FlexDirection,\n Gutter,\n Justify,\n LogLevel,\n MeasureMode,\n Overflow,\n PositionType,\n Unit,\n Wrap,\n} from \"yoga-layout\"\n\nexport type AlignString =\n | \"auto\"\n | \"flex-start\"\n | \"center\"\n | \"flex-end\"\n | \"stretch\"\n | \"baseline\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\nexport type BoxSizingString = \"border-box\" | \"content-box\"\nexport type DimensionString = \"width\" | \"height\"\nexport type DirectionString = \"inherit\" | \"ltr\" | \"rtl\"\nexport type DisplayString = \"flex\" | \"none\" | \"contents\"\nexport type EdgeString = \"left\" | \"top\" | \"right\" | \"bottom\" | \"start\" | \"end\" | \"horizontal\" | \"vertical\" | \"all\"\nexport type FlexDirectionString = \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\"\nexport type GutterString = \"column\" | \"row\" | \"all\"\nexport type JustifyString = \"flex-start\" | \"center\" | \"flex-end\" | \"space-between\" | \"space-around\" | \"space-evenly\"\nexport type LogLevelString = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\" | \"fatal\"\nexport type MeasureModeString = \"undefined\" | \"exactly\" | \"at-most\"\nexport type OverflowString = \"visible\" | \"hidden\" | \"scroll\"\nexport type PositionTypeString = \"static\" | \"relative\" | \"absolute\"\nexport type UnitString = \"undefined\" | \"point\" | \"percent\" | \"auto\"\nexport type WrapString = \"no-wrap\" | \"wrap\" | \"wrap-reverse\"\n\nexport function parseAlign(value: string | null | undefined): Align {\n if (value == null) {\n return Align.Auto\n }\n switch (value.toLowerCase()) {\n case \"auto\":\n return Align.Auto\n case \"flex-start\":\n return Align.FlexStart\n case \"center\":\n return Align.Center\n case \"flex-end\":\n return Align.FlexEnd\n case \"stretch\":\n return Align.Stretch\n case \"baseline\":\n return Align.Baseline\n case \"space-between\":\n return Align.SpaceBetween\n case \"space-around\":\n return Align.SpaceAround\n case \"space-evenly\":\n return Align.SpaceEvenly\n default:\n return Align.Auto\n }\n}\n\nexport function parseAlignItems(value: string | null | undefined): Align {\n if (value == null) {\n return Align.Stretch\n }\n switch (value.toLowerCase()) {\n case \"auto\":\n return Align.Auto\n case \"flex-start\":\n return Align.FlexStart\n case \"center\":\n return Align.Center\n case \"flex-end\":\n return Align.FlexEnd\n case \"stretch\":\n return Align.Stretch\n case \"baseline\":\n return Align.Baseline\n case \"space-between\":\n return Align.SpaceBetween\n case \"space-around\":\n return Align.SpaceAround\n case \"space-evenly\":\n return Align.SpaceEvenly\n default:\n return Align.Stretch\n }\n}\n\nexport function parseBoxSizing(value: string): BoxSizing {\n if (value == null) {\n return BoxSizing.BorderBox\n }\n switch (value.toLowerCase()) {\n case \"border-box\":\n return BoxSizing.BorderBox\n case \"content-box\":\n return BoxSizing.ContentBox\n default:\n return BoxSizing.BorderBox\n }\n}\n\nexport function parseDimension(value: string): Dimension {\n if (value == null) {\n return Dimension.Width\n }\n switch (value.toLowerCase()) {\n case \"width\":\n return Dimension.Width\n case \"height\":\n return Dimension.Height\n default:\n return Dimension.Width\n }\n}\n\nexport function parseDirection(value: string): Direction {\n if (value == null) {\n return Direction.LTR\n }\n switch (value.toLowerCase()) {\n case \"inherit\":\n return Direction.Inherit\n case \"ltr\":\n return Direction.LTR\n case \"rtl\":\n return Direction.RTL\n default:\n return Direction.LTR\n }\n}\n\nexport function parseDisplay(value: string): Display {\n if (value == null) {\n return Display.Flex\n }\n switch (value.toLowerCase()) {\n case \"flex\":\n return Display.Flex\n case \"none\":\n return Display.None\n case \"contents\":\n return Display.Contents\n default:\n return Display.Flex\n }\n}\n\nexport function parseEdge(value: string): Edge {\n if (value == null) {\n return Edge.All\n }\n switch (value.toLowerCase()) {\n case \"left\":\n return Edge.Left\n case \"top\":\n return Edge.Top\n case \"right\":\n return Edge.Right\n case \"bottom\":\n return Edge.Bottom\n case \"start\":\n return Edge.Start\n case \"end\":\n return Edge.End\n case \"horizontal\":\n return Edge.Horizontal\n case \"vertical\":\n return Edge.Vertical\n case \"all\":\n return Edge.All\n default:\n return Edge.All\n }\n}\n\nexport function parseFlexDirection(value: string | null | undefined): FlexDirection {\n if (value == null) {\n return FlexDirection.Column\n }\n switch (value.toLowerCase()) {\n case \"column\":\n return FlexDirection.Column\n case \"column-reverse\":\n return FlexDirection.ColumnReverse\n case \"row\":\n return FlexDirection.Row\n case \"row-reverse\":\n return FlexDirection.RowReverse\n default:\n return FlexDirection.Column\n }\n}\n\nexport function parseGutter(value: string): Gutter {\n if (value == null) {\n return Gutter.All\n }\n switch (value.toLowerCase()) {\n case \"column\":\n return Gutter.Column\n case \"row\":\n return Gutter.Row\n case \"all\":\n return Gutter.All\n default:\n return Gutter.All\n }\n}\n\nexport function parseJustify(value: string | null | undefined): Justify {\n if (value == null) {\n return Justify.FlexStart\n }\n switch (value.toLowerCase()) {\n case \"flex-start\":\n return Justify.FlexStart\n case \"center\":\n return Justify.Center\n case \"flex-end\":\n return Justify.FlexEnd\n case \"space-between\":\n return Justify.SpaceBetween\n case \"space-around\":\n return Justify.SpaceAround\n case \"space-evenly\":\n return Justify.SpaceEvenly\n default:\n return Justify.FlexStart\n }\n}\n\nexport function parseLogLevel(value: string): LogLevel {\n if (value == null) {\n return LogLevel.Info\n }\n switch (value.toLowerCase()) {\n case \"error\":\n return LogLevel.Error\n case \"warn\":\n return LogLevel.Warn\n case \"info\":\n return LogLevel.Info\n case \"debug\":\n return LogLevel.Debug\n case \"verbose\":\n return LogLevel.Verbose\n case \"fatal\":\n return LogLevel.Fatal\n default:\n return LogLevel.Info\n }\n}\n\nexport function parseMeasureMode(value: string): MeasureMode {\n if (value == null) {\n return MeasureMode.Undefined\n }\n switch (value.toLowerCase()) {\n case \"undefined\":\n return MeasureMode.Undefined\n case \"exactly\":\n return MeasureMode.Exactly\n case \"at-most\":\n return MeasureMode.AtMost\n default:\n return MeasureMode.Undefined\n }\n}\n\nexport function parseOverflow(value: string | null | undefined): Overflow {\n if (value == null) {\n return Overflow.Visible\n }\n switch (value.toLowerCase()) {\n case \"visible\":\n return Overflow.Visible\n case \"hidden\":\n return Overflow.Hidden\n case \"scroll\":\n return Overflow.Scroll\n default:\n return Overflow.Visible\n }\n}\n\nexport function parsePositionType(value: string | null | undefined): PositionType {\n if (value == null) {\n return PositionType.Relative\n }\n switch (value.toLowerCase()) {\n case \"static\":\n return PositionType.Static\n case \"relative\":\n return PositionType.Relative\n case \"absolute\":\n return PositionType.Absolute\n default:\n return PositionType.Static\n }\n}\n\nexport function parseUnit(value: string): Unit {\n if (value == null) {\n return Unit.Point\n }\n switch (value.toLowerCase()) {\n case \"undefined\":\n return Unit.Undefined\n case \"point\":\n return Unit.Point\n case \"percent\":\n return Unit.Percent\n case \"auto\":\n return Unit.Auto\n default:\n return Unit.Point\n }\n}\n\nexport function parseWrap(value: string | null | undefined): Wrap {\n if (value == null) {\n return Wrap.NoWrap\n }\n switch (value.toLowerCase()) {\n case \"no-wrap\":\n return Wrap.NoWrap\n case \"wrap\":\n return Wrap.Wrap\n case \"wrap-reverse\":\n return Wrap.WrapReverse\n default:\n return Wrap.NoWrap\n }\n}\n", "// Shared brand symbol, isRenderable check, and late-bound helpers.\n// Extracted to break the circular dependency between Renderable.ts and vnode.ts.\n// Both sides import from here; neither imports a value from the other.\n\nexport const BrandedRenderable: unique symbol = Symbol.for(\"@opentui/core/Renderable\") as any\n\nexport function isRenderable(obj: any): boolean {\n return !!obj?.[BrandedRenderable]\n}\n\n// Late-bound maybeMakeRenderable \u2014 vnode.ts registers the real implementation\n// at module init time, and Renderable.ts calls it at runtime.\nlet _maybeMakeRenderable: ((ctx: any, node: any) => any) | null = null\n\nexport function registerMaybeMakeRenderable(fn: (ctx: any, node: any) => any) {\n _maybeMakeRenderable = fn\n}\n\nexport function maybeMakeRenderable(ctx: any, node: any): any {\n return _maybeMakeRenderable?.(ctx, node) ?? null\n}\n", "import type { RenderableOptions, Renderable } from \"../Renderable\"\nimport type { PositionTypeString, OverflowString } from \"./yoga.options\"\n\nexport function validateOptions(id: string, options: RenderableOptions<Renderable>): void {\n if (typeof options.width === \"number\") {\n if (options.width < 0) {\n throw new TypeError(`Invalid width for Renderable ${id}: ${options.width}`)\n }\n }\n if (typeof options.height === \"number\") {\n if (options.height < 0) {\n throw new TypeError(`Invalid height for Renderable ${id}: ${options.height}`)\n }\n }\n}\n\nexport function isValidPercentage(value: any): value is `${number}%` {\n if (typeof value === \"string\" && value.endsWith(\"%\")) {\n const numPart = value.slice(0, -1)\n const num = parseFloat(numPart)\n return !Number.isNaN(num)\n }\n return false\n}\n\nexport function isMarginType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPaddingType(value: any): value is number | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionType(value: any): value is number | \"auto\" | `${number}%` {\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n if (value === \"auto\") {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport function isPositionTypeType(value: any): value is PositionTypeString {\n return value === \"relative\" || value === \"absolute\"\n}\n\nexport function isOverflowType(value: any): value is OverflowString {\n return value === \"visible\" || value === \"hidden\" || value === \"scroll\"\n}\n\nexport function isDimensionType(value: any): value is number | \"auto\" | `${number}%` {\n return isPositionType(value)\n}\n\nexport function isFlexBasisType(value: any): value is number | \"auto\" | undefined {\n if (value === undefined || value === \"auto\") {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return false\n}\n\nexport function isSizeType(value: any): value is number | `${number}%` | undefined {\n if (value === undefined) {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n", "import { EventEmitter } from \"events\"\nimport Yoga, { Direction, Display, Edge, FlexDirection, type Config, type Node as YogaNode } from \"yoga-layout\"\nimport { OptimizedBuffer } from \"./buffer\"\nimport type { KeyEvent, PasteEvent } from \"./lib/KeyHandler\"\nimport type { MouseEventType } from \"./lib/parse.mouse\"\nimport type { Selection } from \"./lib/selection\"\nimport {\n parseAlign,\n parseAlignItems,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n type AlignString,\n type FlexDirectionString,\n type JustifyString,\n type OverflowString,\n type PositionTypeString,\n type WrapString,\n} from \"./lib/yoga.options\"\nimport type { VNode } from \"./renderables/composition/vnode\"\nimport { maybeMakeRenderable } from \"./renderable-brand\"\nimport type { MouseEvent } from \"./renderer\"\nimport type { RenderContext } from \"./types\"\nimport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"./lib/renderable.validations\"\n\nimport { BrandedRenderable } from \"./renderable-brand\"\n\nexport enum LayoutEvents {\n LAYOUT_CHANGED = \"layout-changed\",\n ADDED = \"added\",\n REMOVED = \"removed\",\n RESIZED = \"resized\",\n}\n\nexport enum RenderableEvents {\n FOCUSED = \"focused\",\n BLURRED = \"blurred\",\n}\n\nexport interface Position {\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n}\n\nexport interface BaseRenderableOptions {\n id?: string\n}\n\nexport interface LayoutOptions extends BaseRenderableOptions {\n flexGrow?: number\n flexShrink?: number\n flexDirection?: FlexDirectionString\n flexWrap?: WrapString\n alignItems?: AlignString\n justifyContent?: JustifyString\n alignSelf?: AlignString\n flexBasis?: number | \"auto\" | undefined\n position?: PositionTypeString\n overflow?: OverflowString\n top?: number | \"auto\" | `${number}%`\n right?: number | \"auto\" | `${number}%`\n bottom?: number | \"auto\" | `${number}%`\n left?: number | \"auto\" | `${number}%`\n minWidth?: number | \"auto\" | `${number}%`\n minHeight?: number | \"auto\" | `${number}%`\n maxWidth?: number | \"auto\" | `${number}%`\n maxHeight?: number | \"auto\" | `${number}%`\n margin?: number | \"auto\" | `${number}%`\n marginX?: number | \"auto\" | `${number}%`\n marginY?: number | \"auto\" | `${number}%`\n marginTop?: number | \"auto\" | `${number}%`\n marginRight?: number | \"auto\" | `${number}%`\n marginBottom?: number | \"auto\" | `${number}%`\n marginLeft?: number | \"auto\" | `${number}%`\n padding?: number | `${number}%`\n paddingX?: number | `${number}%`\n paddingY?: number | `${number}%`\n paddingTop?: number | `${number}%`\n paddingRight?: number | `${number}%`\n paddingBottom?: number | `${number}%`\n paddingLeft?: number | `${number}%`\n enableLayout?: boolean\n}\n\nexport interface RenderableOptions<T extends BaseRenderable = BaseRenderable> extends Partial<LayoutOptions> {\n width?: number | \"auto\" | `${number}%`\n height?: number | \"auto\" | `${number}%`\n zIndex?: number\n visible?: boolean\n buffered?: boolean\n live?: boolean\n opacity?: number\n\n // hooks for custom render logic\n renderBefore?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n renderAfter?: (this: T, buffer: OptimizedBuffer, deltaTime: number) => void\n\n // catch all\n onMouse?: (this: T, event: MouseEvent) => void\n\n onMouseDown?: (this: T, event: MouseEvent) => void\n onMouseUp?: (this: T, event: MouseEvent) => void\n onMouseMove?: (this: T, event: MouseEvent) => void\n onMouseDrag?: (this: T, event: MouseEvent) => void\n onMouseDragEnd?: (this: T, event: MouseEvent) => void\n onMouseDrop?: (this: T, event: MouseEvent) => void\n onMouseOver?: (this: T, event: MouseEvent) => void\n onMouseOut?: (this: T, event: MouseEvent) => void\n onMouseScroll?: (this: T, event: MouseEvent) => void\n\n onPaste?: (this: T, event: PasteEvent) => void\n\n onKeyDown?: (key: KeyEvent) => void\n\n onSizeChange?: (this: T) => void\n}\n\nexport { isRenderable } from \"./renderable-brand\"\n\nexport abstract class BaseRenderable extends EventEmitter {\n [BrandedRenderable] = true\n\n private static renderableNumber = 1\n protected _id: string\n public readonly num: number\n protected _dirty: boolean = false\n public parent: BaseRenderable | null = null\n protected _visible: boolean = true\n\n constructor(options: BaseRenderableOptions) {\n super()\n this.num = BaseRenderable.renderableNumber++\n this._id = options.id ?? `renderable-${this.num}`\n }\n\n public abstract add(obj: BaseRenderable | unknown, index?: number): number\n public abstract remove(id: string): void\n public abstract insertBefore(obj: BaseRenderable | unknown, anchor: BaseRenderable | unknown): void\n public abstract getChildren(): BaseRenderable[]\n public abstract getChildrenCount(): number\n public abstract getRenderable(id: string): BaseRenderable | undefined\n public abstract requestRender(): void\n public abstract findDescendantById(id: string): BaseRenderable | undefined\n\n public get id(): string {\n return this._id\n }\n\n public set id(value: string) {\n this._id = value\n }\n\n public get isDirty(): boolean {\n return this._dirty\n }\n\n protected markClean(): void {\n this._dirty = false\n }\n\n protected markDirty(): void {\n this._dirty = true\n }\n\n public destroy(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public destroyRecursively(): void {\n // Default implementation: do nothing\n // Override this method to provide custom destruction logic\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public set visible(value: boolean) {\n this._visible = value\n }\n}\n\nconst yogaConfig: Config = Yoga.Config.create()\nyogaConfig.setUseWebDefaults(false)\nyogaConfig.setPointScaleFactor(1)\n\nexport abstract class Renderable extends BaseRenderable {\n static renderablesByNumber: Map<number, Renderable> = new Map()\n\n protected _isDestroyed: boolean = false\n protected _ctx: RenderContext\n protected _translateX: number = 0\n protected _translateY: number = 0\n protected _x: number = 0\n protected _y: number = 0\n protected _width: number | \"auto\" | `${number}%`\n protected _height: number | \"auto\" | `${number}%`\n protected _widthValue: number = 0\n protected _heightValue: number = 0\n private _zIndex: number\n public selectable: boolean = false\n protected buffered: boolean\n protected frameBuffer: OptimizedBuffer | null = null\n\n protected _focusable: boolean = false\n protected _focused: boolean = false\n protected keypressHandler: ((key: KeyEvent) => void) | null = null\n protected pasteHandler: ((event: PasteEvent) => void) | null = null\n\n private _live: boolean = false\n protected _liveCount: number = 0\n\n private _sizeChangeListener: (() => void) | undefined = undefined\n private _mouseListener: ((event: MouseEvent) => void) | null = null\n private _mouseListeners: Partial<Record<MouseEventType, (event: MouseEvent) => void>> = {}\n private _pasteListener: ((event: PasteEvent) => void) | undefined = undefined\n private _keyListeners: Partial<Record<\"down\", (key: KeyEvent) => void>> = {}\n\n protected yogaNode: YogaNode\n protected _positionType: PositionTypeString = \"relative\"\n protected _overflow: OverflowString = \"visible\"\n protected _position: Position = {}\n protected _opacity: number = 1.0\n private _flexShrink: number = 1\n\n private renderableMapById: Map<string, Renderable> = new Map()\n protected _childrenInLayoutOrder: Renderable[] = []\n protected _childrenInZIndexOrder: Renderable[] = []\n private needsZIndexSort: boolean = false\n public parent: Renderable | null = null\n\n private childrenPrimarySortDirty: boolean = true\n private childrenSortedByPrimaryAxis: Renderable[] = []\n private _shouldUpdateBefore: Set<Renderable> = new Set()\n\n public onLifecyclePass: (() => void) | null = null\n\n public renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n public renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void\n\n constructor(ctx: RenderContext, options: RenderableOptions<any>) {\n super(options)\n\n this._ctx = ctx\n Renderable.renderablesByNumber.set(this.num, this)\n\n validateOptions(this.id, options)\n\n this.renderBefore = options.renderBefore\n this.renderAfter = options.renderAfter\n\n this._width = options.width ?? \"auto\"\n this._height = options.height ?? \"auto\"\n\n if (typeof this._width === \"number\") {\n this._widthValue = this._width\n }\n if (typeof this._height === \"number\") {\n this._heightValue = this._height\n }\n\n this._zIndex = options.zIndex ?? 0\n this._visible = options.visible !== false\n this.buffered = options.buffered ?? false\n this._live = options.live ?? false\n this._liveCount = this._live && this._visible ? 1 : 0\n this._opacity = options.opacity !== undefined ? Math.max(0, Math.min(1, options.opacity)) : 1.0\n\n // TODO: use a global yoga config\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None)\n this.setupYogaProperties(options)\n\n this.applyEventOptions(options)\n\n if (this.buffered) {\n this.createFrameBuffer()\n }\n }\n\n public override get id() {\n return this._id\n }\n\n public override set id(value: string) {\n if (this.parent) {\n this.parent.renderableMapById.delete(this.id)\n this.parent.renderableMapById.set(value, this)\n }\n super.id = value\n }\n\n public get focusable(): boolean {\n return this._focusable\n }\n\n public set focusable(value: boolean) {\n this._focusable = value\n }\n\n public get ctx(): RenderContext {\n return this._ctx\n }\n\n public get visible(): boolean {\n return this._visible\n }\n\n public get primaryAxis(): \"row\" | \"column\" {\n const dir = this.yogaNode.getFlexDirection()\n return dir === 2 || dir === 3 ? \"row\" : \"column\"\n }\n\n public set visible(value: boolean) {\n if (this._visible === value) return\n\n const wasVisible = this._visible\n this._visible = value\n this.yogaNode.setDisplay(value ? Display.Flex : Display.None)\n\n if (this._live) {\n if (!wasVisible && value) {\n this.propagateLiveCount(1)\n } else if (wasVisible && !value) {\n this.propagateLiveCount(-1)\n }\n }\n\n if (this._focused) {\n this.blur()\n }\n this.requestRender()\n }\n\n public get opacity(): number {\n return this._opacity\n }\n\n public set opacity(value: number) {\n const clamped = Math.max(0, Math.min(1, value))\n if (this._opacity !== clamped) {\n this._opacity = clamped\n this.requestRender()\n }\n }\n\n public hasSelection(): boolean {\n return false\n }\n\n public onSelectionChanged(selection: Selection | null): boolean {\n // Default implementation: do nothing\n // Override this method to provide custom selection handling\n return false\n }\n\n public getSelectedText(): string {\n return \"\"\n }\n\n public shouldStartSelection(x: number, y: number): boolean {\n return false\n }\n\n public focus(): void {\n if (this._isDestroyed || this._focused || !this._focusable) return\n\n this._ctx.focusRenderable(this)\n this._focused = true\n this.requestRender()\n\n this.keypressHandler = (key: KeyEvent) => {\n if (this._isDestroyed) return\n this._keyListeners[\"down\"]?.(key)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!key.defaultPrevented && this.handleKeyPress) {\n this.handleKeyPress(key)\n }\n }\n\n this.pasteHandler = (event: PasteEvent) => {\n if (this._isDestroyed) return\n this._pasteListener?.call(this, event)\n // Check again after user listener - it might have destroyed the renderable\n if (this._isDestroyed) return\n if (!event.defaultPrevented && this.handlePaste) {\n this.handlePaste(event)\n }\n }\n\n this.ctx._internalKeyInput.onInternal(\"keypress\", this.keypressHandler)\n this.ctx._internalKeyInput.onInternal(\"paste\", this.pasteHandler)\n this.emit(RenderableEvents.FOCUSED)\n }\n\n public blur(): void {\n if (!this._focused || !this._focusable) return\n\n this._focused = false\n this.requestRender()\n\n if (this.keypressHandler) {\n this.ctx._internalKeyInput.offInternal(\"keypress\", this.keypressHandler)\n this.keypressHandler = null\n }\n\n if (this.pasteHandler) {\n this.ctx._internalKeyInput.offInternal(\"paste\", this.pasteHandler)\n this.pasteHandler = null\n }\n\n this.emit(RenderableEvents.BLURRED)\n }\n\n public get focused(): boolean {\n return this._focused\n }\n\n public get live(): boolean {\n return this._live\n }\n\n public get liveCount(): number {\n return this._liveCount\n }\n\n public set live(value: boolean) {\n if (this._live === value) return\n\n this._live = value\n\n if (this._visible) {\n const delta = value ? 1 : -1\n this.propagateLiveCount(delta)\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n this._liveCount += delta\n this.parent?.propagateLiveCount(delta)\n }\n\n public handleKeyPress?(key: KeyEvent): boolean\n public handlePaste?(event: PasteEvent): void\n\n public findDescendantById(id: string): Renderable | undefined {\n for (const child of this._childrenInLayoutOrder) {\n if (child.id === id) return child\n if (isRenderable(child)) {\n const found = child.findDescendantById(id)\n if (found) return found\n }\n }\n return undefined\n }\n\n public requestRender() {\n this.markDirty()\n this._ctx.requestRender()\n }\n\n public get translateX(): number {\n return this._translateX\n }\n\n public set translateX(value: number) {\n if (this._translateX === value) return\n this._translateX = value\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n this.requestRender()\n }\n\n public get translateY(): number {\n return this._translateY\n }\n\n public set translateY(value: number) {\n if (this._translateY === value) return\n this._translateY = value\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n this.requestRender()\n }\n\n public get x(): number {\n if (this.parent) {\n return this.parent.x + this._x + this._translateX\n }\n return this._x + this._translateX\n }\n\n public set x(value: number) {\n this.left = value\n }\n\n public get top(): number | \"auto\" | `${number}%` | undefined {\n return this._position.top\n }\n\n public set top(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ top: value })\n }\n }\n\n public get right(): number | \"auto\" | `${number}%` | undefined {\n return this._position.right\n }\n\n public set right(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ right: value })\n }\n }\n\n public get bottom(): number | \"auto\" | `${number}%` | undefined {\n return this._position.bottom\n }\n\n public set bottom(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ bottom: value })\n }\n }\n\n public get left(): number | \"auto\" | `${number}%` | undefined {\n return this._position.left\n }\n\n public set left(value: number | \"auto\" | `${number}%` | undefined) {\n if (isPositionType(value) || value === undefined) {\n this.setPosition({ left: value })\n }\n }\n\n public get y(): number {\n if (this.parent) {\n return this.parent.y + this._y + this._translateY\n }\n return this._y + this._translateY\n }\n\n public set y(value: number) {\n this.top = value\n }\n\n public get width(): number {\n return this._widthValue\n }\n\n public set width(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._width = value\n this.yogaNode.setWidth(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\n this.requestRender()\n }\n }\n\n public get height(): number {\n return this._heightValue\n }\n\n public set height(value: number | \"auto\" | `${number}%`) {\n if (isDimensionType(value)) {\n this._height = value\n this.yogaNode.setHeight(value)\n\n if (typeof value === \"number\" && this._flexShrink === 1) {\n this._flexShrink = 0\n this.yogaNode.setFlexShrink(0)\n }\n\n this.requestRender()\n }\n }\n\n public get zIndex(): number {\n return this._zIndex\n }\n\n public set zIndex(value: number) {\n if (this._zIndex !== value) {\n this._zIndex = value\n this.parent?.requestZIndexSort()\n this.requestRender()\n }\n }\n\n private requestZIndexSort(): void {\n this.needsZIndexSort = true\n }\n\n private ensureZIndexSorted(): void {\n if (this.needsZIndexSort) {\n this._childrenInZIndexOrder.sort((a, b) => (a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0))\n this.needsZIndexSort = false\n }\n }\n\n public getChildrenSortedByPrimaryAxis(): Renderable[] {\n if (\n !this.childrenPrimarySortDirty &&\n this.childrenSortedByPrimaryAxis.length === this._childrenInLayoutOrder.length\n ) {\n return this.childrenSortedByPrimaryAxis\n }\n\n const dir = this.yogaNode.getFlexDirection()\n const axis: \"x\" | \"y\" = dir === 2 || dir === 3 ? \"x\" : \"y\"\n\n const sorted = [...this._childrenInLayoutOrder]\n sorted.sort((a, b) => {\n const va = axis === \"y\" ? a.y : a.x\n const vb = axis === \"y\" ? b.y : b.x\n return va - vb\n })\n\n this.childrenSortedByPrimaryAxis = sorted\n this.childrenPrimarySortDirty = false\n return this.childrenSortedByPrimaryAxis\n }\n\n private setupYogaProperties(options: RenderableOptions<Renderable>): void {\n const node = this.yogaNode\n\n if (isFlexBasisType(options.flexBasis)) {\n node.setFlexBasis(options.flexBasis)\n }\n\n if (isSizeType(options.minWidth)) {\n node.setMinWidth(options.minWidth)\n }\n if (isSizeType(options.minHeight)) {\n node.setMinHeight(options.minHeight)\n }\n\n if (options.flexGrow !== undefined) {\n node.setFlexGrow(options.flexGrow)\n } else {\n node.setFlexGrow(0)\n }\n\n if (options.flexShrink !== undefined) {\n this._flexShrink = options.flexShrink\n node.setFlexShrink(options.flexShrink)\n } else {\n // If explicit numeric width is set, don't shrink by default\n // Otherwise follow web default of 1\n const hasExplicitWidth = typeof options.width === \"number\"\n const hasExplicitHeight = typeof options.height === \"number\"\n this._flexShrink = hasExplicitWidth || hasExplicitHeight ? 0 : 1\n node.setFlexShrink(this._flexShrink)\n }\n\n node.setFlexDirection(parseFlexDirection(options.flexDirection))\n node.setFlexWrap(parseWrap(options.flexWrap))\n node.setAlignItems(parseAlignItems(options.alignItems))\n node.setJustifyContent(parseJustify(options.justifyContent))\n node.setAlignSelf(parseAlign(options.alignSelf))\n\n if (isDimensionType(options.width)) {\n this._width = options.width\n this.yogaNode.setWidth(options.width)\n }\n if (isDimensionType(options.height)) {\n this._height = options.height\n this.yogaNode.setHeight(options.height)\n }\n\n this._positionType = options.position === \"absolute\" ? \"absolute\" : \"relative\"\n if (this._positionType !== \"relative\") {\n node.setPositionType(parsePositionType(this._positionType))\n }\n\n this._overflow = options.overflow === \"hidden\" ? \"hidden\" : options.overflow === \"scroll\" ? \"scroll\" : \"visible\"\n if (this._overflow !== \"visible\") {\n node.setOverflow(parseOverflow(this._overflow))\n }\n\n // TODO: flatten position properties internally as well\n const hasPositionProps =\n options.top !== undefined ||\n options.right !== undefined ||\n options.bottom !== undefined ||\n options.left !== undefined\n if (hasPositionProps) {\n this._position = {\n top: options.top,\n right: options.right,\n bottom: options.bottom,\n left: options.left,\n }\n this.updateYogaPosition(this._position)\n }\n\n if (isSizeType(options.maxWidth)) {\n node.setMaxWidth(options.maxWidth)\n }\n if (isSizeType(options.maxHeight)) {\n node.setMaxHeight(options.maxHeight)\n }\n\n this.setupMarginAndPadding(options)\n }\n\n private setupMarginAndPadding(options: RenderableOptions<Renderable>): void {\n const node = this.yogaNode\n\n if (isMarginType(options.margin)) {\n node.setMargin(Edge.All, options.margin)\n }\n\n if (isMarginType(options.marginX)) {\n node.setMargin(Edge.Horizontal, options.marginX)\n }\n if (isMarginType(options.marginY)) {\n node.setMargin(Edge.Vertical, options.marginY)\n }\n if (isMarginType(options.marginTop)) {\n node.setMargin(Edge.Top, options.marginTop)\n }\n if (isMarginType(options.marginRight)) {\n node.setMargin(Edge.Right, options.marginRight)\n }\n if (isMarginType(options.marginBottom)) {\n node.setMargin(Edge.Bottom, options.marginBottom)\n }\n if (isMarginType(options.marginLeft)) {\n node.setMargin(Edge.Left, options.marginLeft)\n }\n\n if (isPaddingType(options.padding)) {\n node.setPadding(Edge.All, options.padding)\n }\n\n if (isPaddingType(options.paddingX)) {\n node.setPadding(Edge.Horizontal, options.paddingX)\n }\n if (isPaddingType(options.paddingY)) {\n node.setPadding(Edge.Vertical, options.paddingY)\n }\n if (isPaddingType(options.paddingTop)) {\n node.setPadding(Edge.Top, options.paddingTop)\n }\n if (isPaddingType(options.paddingRight)) {\n node.setPadding(Edge.Right, options.paddingRight)\n }\n if (isPaddingType(options.paddingBottom)) {\n node.setPadding(Edge.Bottom, options.paddingBottom)\n }\n if (isPaddingType(options.paddingLeft)) {\n node.setPadding(Edge.Left, options.paddingLeft)\n }\n }\n\n set position(positionType: PositionTypeString | null | undefined) {\n if (!isPositionTypeType(positionType) || this._positionType === positionType) return\n\n this._positionType = positionType\n this.yogaNode.setPositionType(parsePositionType(positionType))\n this.requestRender()\n }\n\n get overflow(): OverflowString {\n return this._overflow\n }\n\n set overflow(overflow: OverflowString | null | undefined) {\n if (!isOverflowType(overflow) || this._overflow === overflow) return\n\n this._overflow = overflow\n this.yogaNode.setOverflow(parseOverflow(overflow))\n this.requestRender()\n }\n\n public setPosition(position: Position): void {\n this._position = { ...this._position, ...position }\n this.updateYogaPosition(position)\n }\n\n private updateYogaPosition(position: Position): void {\n const node = this.yogaNode\n const { top, right, bottom, left } = position\n\n if (isPositionType(top)) {\n if (top === \"auto\") {\n node.setPositionAuto(Edge.Top)\n } else {\n node.setPosition(Edge.Top, top)\n }\n }\n if (isPositionType(right)) {\n if (right === \"auto\") {\n node.setPositionAuto(Edge.Right)\n } else {\n node.setPosition(Edge.Right, right)\n }\n }\n if (isPositionType(bottom)) {\n if (bottom === \"auto\") {\n node.setPositionAuto(Edge.Bottom)\n } else {\n node.setPosition(Edge.Bottom, bottom)\n }\n }\n if (isPositionType(left)) {\n if (left === \"auto\") {\n node.setPositionAuto(Edge.Left)\n } else {\n node.setPosition(Edge.Left, left)\n }\n }\n this.requestRender()\n }\n\n public set flexGrow(grow: number | null | undefined) {\n if (grow == null) {\n this.yogaNode.setFlexGrow(0)\n } else {\n this.yogaNode.setFlexGrow(grow)\n }\n this.requestRender()\n }\n\n public set flexShrink(shrink: number | null | undefined) {\n const value = shrink == null ? 1 : shrink\n this._flexShrink = value\n this.yogaNode.setFlexShrink(value)\n this.requestRender()\n }\n\n public set flexDirection(direction: FlexDirectionString | null | undefined) {\n this.yogaNode.setFlexDirection(parseFlexDirection(direction))\n this.requestRender()\n }\n\n public set flexWrap(wrap: WrapString | null | undefined) {\n this.yogaNode.setFlexWrap(parseWrap(wrap))\n this.requestRender()\n }\n\n public set alignItems(alignItems: AlignString | null | undefined) {\n this.yogaNode.setAlignItems(parseAlignItems(alignItems))\n this.requestRender()\n }\n\n public set justifyContent(justifyContent: JustifyString | null | undefined) {\n this.yogaNode.setJustifyContent(parseJustify(justifyContent))\n this.requestRender()\n }\n\n public set alignSelf(alignSelf: AlignString | null | undefined) {\n this.yogaNode.setAlignSelf(parseAlign(alignSelf))\n this.requestRender()\n }\n\n public set flexBasis(basis: number | \"auto\" | null | undefined) {\n if (isFlexBasisType(basis)) {\n this.yogaNode.setFlexBasis(basis)\n this.requestRender()\n }\n }\n\n public set minWidth(minWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(minWidth)) {\n this.yogaNode.setMinWidth(minWidth)\n this.requestRender()\n }\n }\n\n public set maxWidth(maxWidth: number | `${number}%` | null | undefined) {\n if (isSizeType(maxWidth)) {\n this.yogaNode.setMaxWidth(maxWidth)\n this.requestRender()\n }\n }\n\n public set minHeight(minHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(minHeight)) {\n this.yogaNode.setMinHeight(minHeight)\n this.requestRender()\n }\n }\n\n public set maxHeight(maxHeight: number | `${number}%` | null | undefined) {\n if (isSizeType(maxHeight)) {\n this.yogaNode.setMaxHeight(maxHeight)\n this.requestRender()\n }\n }\n\n public set margin(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.All, margin)\n this.requestRender()\n }\n }\n\n public set marginX(marginX: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginX)) {\n this.yogaNode.setMargin(Edge.Horizontal, marginX)\n this.requestRender()\n }\n }\n\n public set marginY(marginY: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(marginY)) {\n this.yogaNode.setMargin(Edge.Vertical, marginY)\n this.requestRender()\n }\n }\n\n public set marginTop(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Top, margin)\n this.requestRender()\n }\n }\n\n public set marginRight(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Right, margin)\n this.requestRender()\n }\n }\n\n public set marginBottom(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Bottom, margin)\n this.requestRender()\n }\n }\n\n public set marginLeft(margin: number | \"auto\" | `${number}%` | null | undefined) {\n if (isMarginType(margin)) {\n this.yogaNode.setMargin(Edge.Left, margin)\n this.requestRender()\n }\n }\n\n public set padding(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.All, padding)\n this.requestRender()\n }\n }\n\n public set paddingX(paddingX: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingX)) {\n this.yogaNode.setPadding(Edge.Horizontal, paddingX)\n this.requestRender()\n }\n }\n\n public set paddingY(paddingY: number | `${number}%` | null | undefined) {\n if (isPaddingType(paddingY)) {\n this.yogaNode.setPadding(Edge.Vertical, paddingY)\n this.requestRender()\n }\n }\n\n public set paddingTop(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Top, padding)\n this.requestRender()\n }\n }\n\n public set paddingRight(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Right, padding)\n this.requestRender()\n }\n }\n\n public set paddingBottom(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Bottom, padding)\n this.requestRender()\n }\n }\n\n public set paddingLeft(padding: number | `${number}%` | null | undefined) {\n if (isPaddingType(padding)) {\n this.yogaNode.setPadding(Edge.Left, padding)\n this.requestRender()\n }\n }\n\n public getLayoutNode(): YogaNode {\n return this.yogaNode\n }\n\n public updateFromLayout(): void {\n const layout = this.yogaNode.getComputedLayout()\n\n const oldX = this._x\n const oldY = this._y\n const oldWidth = this._widthValue\n const oldHeight = this._heightValue\n\n this._x = layout.left\n this._y = layout.top\n\n const newWidth = Math.max(layout.width, 1)\n const newHeight = Math.max(layout.height, 1)\n const sizeChanged = oldWidth !== newWidth || oldHeight !== newHeight\n\n this._widthValue = newWidth\n this._heightValue = newHeight\n\n if (sizeChanged) {\n this.onLayoutResize(newWidth, newHeight)\n }\n\n const positionChanged = oldX !== this._x || oldY !== this._y\n if (positionChanged) {\n if (this.parent) this.parent.childrenPrimarySortDirty = true\n }\n }\n\n protected onLayoutResize(width: number, height: number): void {\n if (this._visible) {\n // TODO: Should probably .markDirty()\n this.handleFrameBufferResize(width, height)\n this.onResize(width, height)\n this.requestRender()\n }\n }\n\n protected handleFrameBufferResize(width: number, height: number): void {\n if (!this.buffered) return\n\n if (width <= 0 || height <= 0) {\n return\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.resize(width, height)\n } else {\n this.createFrameBuffer()\n }\n }\n\n protected createFrameBuffer(): void {\n const w = this.width\n const h = this.height\n\n if (w <= 0 || h <= 0) {\n return\n }\n\n try {\n const widthMethod = this._ctx.widthMethod\n this.frameBuffer = OptimizedBuffer.create(w, h, widthMethod, { respectAlpha: true, id: `framebuffer-${this.id}` })\n } catch (error) {\n console.error(`Failed to create frame buffer for ${this.id}:`, error)\n this.frameBuffer = null\n }\n }\n\n /**\n * This will be called during a render pass.\n * Requesting a render during a render pass will drop the requested render.\n * If you need to request a render during a render pass, use process.nextTick.\n */\n protected onResize(width: number, height: number): void {\n this.onSizeChange?.()\n this.emit(\"resize\")\n // Override in subclasses for additional resize logic\n }\n\n private replaceParent(obj: Renderable) {\n if (obj.parent) {\n obj.parent.remove(obj.id)\n }\n obj.parent = this\n }\n\n public add(obj: Renderable | VNode<any, any[]> | unknown, index?: number): number {\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`)\n }\n return -1\n }\n\n const anchorRenderable = index !== undefined ? this._childrenInLayoutOrder[index] : undefined\n\n if (anchorRenderable) {\n return this.insertBefore(renderable, anchorRenderable)\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n const childLayoutNode = renderable.getLayoutNode()\n const insertedIndex = this._childrenInLayoutOrder.length\n this._childrenInLayoutOrder.push(renderable)\n this.yogaNode.insertChild(childLayoutNode, insertedIndex)\n\n this.childrenPrimarySortDirty = true\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number {\n if (!anchor) {\n return this.add(obj)\n }\n\n if (!obj) {\n return -1\n }\n\n const renderable = maybeMakeRenderable(this._ctx, obj)\n if (!renderable) {\n return -1\n }\n\n if (renderable.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!isRenderable(anchor)) {\n throw new Error(\"Anchor must be a Renderable\")\n }\n\n if (anchor.isDestroyed) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} was already destroyed, skipping insertBefore`)\n }\n return -1\n }\n\n if (!this.renderableMapById.has(anchor.id)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor with id ${anchor.id} does not exist within the parent ${this.id}, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable === anchor || renderable.id === anchor.id) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`Anchor is the same as the node ${renderable.id} being inserted, skipping insertBefore`)\n }\n return -1\n }\n\n if (renderable.parent === this) {\n this.yogaNode.removeChild(renderable.getLayoutNode())\n this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable), 1)\n } else {\n this.replaceParent(renderable)\n this.needsZIndexSort = true\n this.renderableMapById.set(renderable.id, renderable)\n this._childrenInZIndexOrder.push(renderable)\n\n if (typeof renderable.onLifecyclePass === \"function\") {\n this._ctx.registerLifecyclePass(renderable)\n }\n\n if (renderable._liveCount > 0) {\n this.propagateLiveCount(renderable._liveCount)\n }\n }\n\n this.childrenPrimarySortDirty = true\n\n const anchorIndex = this._childrenInLayoutOrder.indexOf(anchor)\n const insertedIndex = Math.max(0, Math.min(anchorIndex, this._childrenInLayoutOrder.length))\n\n this._childrenInLayoutOrder.splice(insertedIndex, 0, renderable)\n this.yogaNode.insertChild(renderable.getLayoutNode(), insertedIndex)\n\n this._shouldUpdateBefore.add(renderable)\n\n this.requestRender()\n\n return insertedIndex\n }\n\n // TODO: that naming is meh\n public getRenderable(id: string): Renderable | undefined {\n return this.renderableMapById.get(id)\n }\n\n public remove(id: string): void {\n if (!id) {\n return\n }\n\n if (this.renderableMapById.has(id)) {\n const obj = this.renderableMapById.get(id)\n if (obj) {\n if (obj._liveCount > 0) {\n this.propagateLiveCount(-obj._liveCount)\n }\n\n const childLayoutNode = obj.getLayoutNode()\n this.yogaNode.removeChild(childLayoutNode)\n this.requestRender()\n\n obj.onRemove()\n obj.parent = null\n this._ctx.unregisterLifecyclePass(obj)\n this.renderableMapById.delete(id)\n\n const index = this._childrenInLayoutOrder.findIndex((obj) => obj.id === id)\n if (index !== -1) {\n this._childrenInLayoutOrder.splice(index, 1)\n }\n\n const zIndexIndex = this._childrenInZIndexOrder.findIndex((obj) => obj.id === id)\n if (zIndexIndex !== -1) {\n this._childrenInZIndexOrder.splice(zIndexIndex, 1)\n }\n\n this.childrenPrimarySortDirty = true\n }\n }\n }\n\n protected onRemove(): void {\n // Default implementation: do nothing\n // Override this method to provide custom removal logic\n }\n\n public getChildren(): Renderable[] {\n return [...this._childrenInLayoutOrder]\n }\n\n public getChildrenCount(): number {\n return this._childrenInLayoutOrder.length\n }\n\n public updateLayout(deltaTime: number, renderList: RenderCommand[] = []): void {\n if (!this.visible) return\n\n this.onUpdate(deltaTime)\n\n // If destroyed during onUpdate, don't add to render list\n if (this._isDestroyed) return\n\n // NOTE: worst case updateFromLayout is called throughout the whole tree,\n // which currently still has yoga performance issues.\n // This can be mitigated at some point when the layout tree moved to native,\n // as in the native yoga tree we can use events during the calculateLayout phase,\n // and anctually know if a child has changed or not.\n // That would allow us to to generate optimised render commands,\n // including the layout updates, in one pass.\n this.updateFromLayout()\n\n // Update newly added children before getting visible children\n // This ensures their positions are current when culling happens\n if (this._shouldUpdateBefore.size > 0) {\n for (const child of this._shouldUpdateBefore) {\n if (!child.isDestroyed) {\n child.updateFromLayout()\n }\n }\n this._shouldUpdateBefore.clear()\n }\n\n // Check again after updateFromLayout, which calls onResize/onSizeChange\n if (this._isDestroyed) return\n\n // Push opacity BEFORE rendering this element so it affects this element and all children\n const shouldPushOpacity = this._opacity < 1.0\n if (shouldPushOpacity) {\n renderList.push({ action: \"pushOpacity\", opacity: this._opacity })\n }\n\n renderList.push({ action: \"render\", renderable: this })\n\n this.ensureZIndexSorted()\n\n const shouldPushScissor = this._overflow !== \"visible\" && this.width > 0 && this.height > 0\n if (shouldPushScissor) {\n const scissorRect = this.getScissorRect()\n renderList.push({\n action: \"pushScissorRect\",\n x: scissorRect.x,\n y: scissorRect.y,\n width: scissorRect.width,\n height: scissorRect.height,\n screenX: this.x,\n screenY: this.y,\n })\n }\n const visibleChildren = this._getVisibleChildren()\n for (const child of this._childrenInZIndexOrder) {\n if (!visibleChildren.includes(child.num)) {\n child.updateFromLayout()\n continue\n }\n child.updateLayout(deltaTime, renderList)\n }\n\n if (shouldPushScissor) {\n renderList.push({ action: \"popScissorRect\" })\n }\n if (shouldPushOpacity) {\n renderList.push({ action: \"popOpacity\" })\n }\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n let renderBuffer = buffer\n if (this.buffered && this.frameBuffer) {\n renderBuffer = this.frameBuffer\n }\n\n if (this.renderBefore) {\n this.renderBefore.call(this, renderBuffer, deltaTime)\n }\n\n this.renderSelf(renderBuffer, deltaTime)\n\n if (this.renderAfter) {\n this.renderAfter.call(this, renderBuffer, deltaTime)\n }\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected _getVisibleChildren(): number[] {\n return this._childrenInZIndexOrder.map((child) => child.num)\n }\n\n protected onUpdate(deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n protected getScissorRect(): { x: number; y: number; width: number; height: number } {\n return {\n x: this.buffered ? 0 : this.x,\n y: this.buffered ? 0 : this.y,\n width: this.width,\n height: this.height,\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n // Default implementation: do nothing\n // Override this method to provide custom rendering\n }\n\n public get isDestroyed(): boolean {\n return this._isDestroyed\n }\n\n public destroy(): void {\n if (this._isDestroyed) {\n return\n }\n\n this._isDestroyed = true\n\n if (this.parent) {\n this.parent.remove(this.id)\n }\n\n if (this.frameBuffer) {\n this.frameBuffer.destroy()\n this.frameBuffer = null\n }\n\n for (const child of this._childrenInLayoutOrder) {\n this.remove(child.id)\n }\n\n this._childrenInLayoutOrder = []\n this.renderableMapById.clear()\n Renderable.renderablesByNumber.delete(this.num)\n\n this.blur()\n this.removeAllListeners()\n\n this.destroySelf()\n\n try {\n this.yogaNode.free()\n } catch (e) {\n // Might be already freed and will throw an error if we try to free it again\n }\n }\n\n public destroyRecursively(): void {\n // Destroy children first to ensure removal as destroy clears child array\n // Make a copy of the children array to avoid iteration issues when children are destroyed\n const children = [...this._childrenInLayoutOrder]\n for (const child of children) {\n child.destroyRecursively()\n }\n this.destroy()\n }\n\n protected destroySelf(): void {\n // Default implementation: do nothing else\n // Override this method to provide custom cleanup\n }\n\n public processMouseEvent(event: MouseEvent): void {\n this._mouseListener?.call(this, event)\n this._mouseListeners[event.type]?.call(this, event)\n this.onMouseEvent(event)\n\n if (this.parent && !event.propagationStopped) {\n this.parent.processMouseEvent(event)\n }\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n // Default implementation: do nothing\n // Override this method to provide custom event handling\n }\n\n public set onMouse(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListener = handler\n else this._mouseListener = null\n }\n\n public set onMouseDown(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"down\"] = handler\n else delete this._mouseListeners[\"down\"]\n }\n\n public set onMouseUp(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"up\"] = handler\n else delete this._mouseListeners[\"up\"]\n }\n\n public set onMouseMove(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"move\"] = handler\n else delete this._mouseListeners[\"move\"]\n }\n\n public set onMouseDrag(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag\"] = handler\n else delete this._mouseListeners[\"drag\"]\n }\n\n public set onMouseDragEnd(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drag-end\"] = handler\n else delete this._mouseListeners[\"drag-end\"]\n }\n\n public set onMouseDrop(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"drop\"] = handler\n else delete this._mouseListeners[\"drop\"]\n }\n\n public set onMouseOver(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"over\"] = handler\n else delete this._mouseListeners[\"over\"]\n }\n\n public set onMouseOut(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"out\"] = handler\n else delete this._mouseListeners[\"out\"]\n }\n\n public set onMouseScroll(handler: ((event: MouseEvent) => void) | undefined) {\n if (handler) this._mouseListeners[\"scroll\"] = handler\n else delete this._mouseListeners[\"scroll\"]\n }\n\n public set onPaste(handler: ((event: PasteEvent) => void) | undefined) {\n this._pasteListener = handler\n }\n public get onPaste(): ((event: PasteEvent) => void) | undefined {\n return this._pasteListener\n }\n\n public set onKeyDown(handler: ((key: KeyEvent) => void) | undefined) {\n if (handler) this._keyListeners[\"down\"] = handler\n else delete this._keyListeners[\"down\"]\n }\n public get onKeyDown(): ((key: KeyEvent) => void) | undefined {\n return this._keyListeners[\"down\"]\n }\n\n public set onSizeChange(handler: (() => void) | undefined) {\n this._sizeChangeListener = handler\n }\n public get onSizeChange(): (() => void) | undefined {\n return this._sizeChangeListener\n }\n\n private applyEventOptions(options: RenderableOptions<Renderable>): void {\n this.onMouse = options.onMouse\n this.onMouseDown = options.onMouseDown\n this.onMouseUp = options.onMouseUp\n this.onMouseMove = options.onMouseMove\n this.onMouseDrag = options.onMouseDrag\n this.onMouseDragEnd = options.onMouseDragEnd\n this.onMouseDrop = options.onMouseDrop\n this.onMouseOver = options.onMouseOver\n this.onMouseOut = options.onMouseOut\n this.onMouseScroll = options.onMouseScroll\n this.onPaste = options.onPaste\n this.onKeyDown = options.onKeyDown\n this.onSizeChange = options.onSizeChange\n }\n}\n\ninterface RenderCommandBase {\n action: \"render\" | \"pushScissorRect\" | \"popScissorRect\" | \"pushOpacity\" | \"popOpacity\"\n}\n\ninterface RenderCommandPushScissorRect extends RenderCommandBase {\n action: \"pushScissorRect\"\n x: number\n y: number\n width: number\n height: number\n screenX: number\n screenY: number\n}\n\ninterface RenderCommandPopScissorRect extends RenderCommandBase {\n action: \"popScissorRect\"\n}\n\ninterface RenderCommandRender extends RenderCommandBase {\n action: \"render\"\n renderable: Renderable\n}\n\ninterface RenderCommandPushOpacity extends RenderCommandBase {\n action: \"pushOpacity\"\n opacity: number\n}\n\ninterface RenderCommandPopOpacity extends RenderCommandBase {\n action: \"popOpacity\"\n}\n\nexport type RenderCommand =\n | RenderCommandPushScissorRect\n | RenderCommandPopScissorRect\n | RenderCommandRender\n | RenderCommandPushOpacity\n | RenderCommandPopOpacity\n\nexport class RootRenderable extends Renderable {\n private renderList: RenderCommand[] = []\n\n constructor(ctx: RenderContext) {\n super(ctx, { id: \"__root__\", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true })\n\n if (this.yogaNode) {\n this.yogaNode.free()\n }\n\n this.yogaNode = Yoga.Node.create(yogaConfig)\n this.yogaNode.setWidth(ctx.width)\n this.yogaNode.setHeight(ctx.height)\n this.yogaNode.setFlexDirection(FlexDirection.Column)\n\n this.calculateLayout()\n }\n\n public render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n // 0. Run lifecycle pass\n for (const renderable of this._ctx.getLifecyclePasses()) {\n renderable.onLifecyclePass?.call(renderable)\n }\n\n // NOTE: Strictly speaking, this is a 3-pass rendering process:\n // 1. Calculate layout from root\n // 2. Update layout throughout the tree and collect render list\n // 3. Render all collected renderables\n // Should be 2-pass by hooking into the calculateLayout phase,\n // but that's only possible if we move the layout tree to native.\n\n // 1. Calculate layout from root\n if (this.yogaNode.isDirty()) {\n this.calculateLayout()\n }\n\n // 2. Update layout throughout the tree and collect render list\n this.renderList.length = 0\n this.updateLayout(deltaTime, this.renderList)\n\n // 3. Render all collected renderables\n this._ctx.clearHitGridScissorRects()\n for (let i = 1; i < this.renderList.length; i++) {\n const command = this.renderList[i]\n switch (command.action) {\n case \"render\":\n // Skip if renderable was destroyed during a previous render callback\n if (!command.renderable.isDestroyed) {\n command.renderable.render(buffer, deltaTime)\n }\n break\n case \"pushScissorRect\":\n buffer.pushScissorRect(command.x, command.y, command.width, command.height)\n this._ctx.pushHitGridScissorRect(command.screenX, command.screenY, command.width, command.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n this._ctx.popHitGridScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(command.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n }\n }\n }\n\n protected propagateLiveCount(delta: number): void {\n const oldCount = this._liveCount\n this._liveCount += delta\n\n if (oldCount === 0 && this._liveCount > 0) {\n this._ctx.requestLive()\n } else if (oldCount > 0 && this._liveCount === 0) {\n this._ctx.dropLive()\n }\n }\n\n public calculateLayout(): void {\n this.yogaNode.calculateLayout(this.width, this.height, Direction.LTR)\n this.emit(LayoutEvents.LAYOUT_CHANGED)\n }\n\n public resize(width: number, height: number): void {\n this.width = width\n this.height = height\n\n this.emit(LayoutEvents.RESIZED, { width, height })\n }\n}\n", "import type { ColorInput } from \"./RGBA\"\n\nexport interface BorderCharacters {\n topLeft: string\n topRight: string\n bottomLeft: string\n bottomRight: string\n horizontal: string\n vertical: string\n topT: string\n bottomT: string\n leftT: string\n rightT: string\n cross: string\n}\n\nexport type BorderStyle = \"single\" | \"double\" | \"rounded\" | \"heavy\"\nexport type BorderSides = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nconst VALID_BORDER_STYLES: readonly BorderStyle[] = [\"single\", \"double\", \"rounded\", \"heavy\"] as const\n\nexport function isValidBorderStyle(value: unknown): value is BorderStyle {\n return typeof value === \"string\" && VALID_BORDER_STYLES.includes(value as BorderStyle)\n}\n\nexport function parseBorderStyle(value: unknown, fallback: BorderStyle = \"single\"): BorderStyle {\n if (isValidBorderStyle(value)) {\n return value\n }\n\n if (value !== undefined && value !== null) {\n console.warn(\n `Invalid borderStyle \"${value}\", falling back to \"${fallback}\". Valid values are: ${VALID_BORDER_STYLES.join(\", \")}`,\n )\n }\n return fallback\n}\n\nexport const BorderChars: Record<BorderStyle, BorderCharacters> = {\n single: {\n topLeft: \"\u250C\",\n topRight: \"\u2510\",\n bottomLeft: \"\u2514\",\n bottomRight: \"\u2518\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n double: {\n topLeft: \"\u2554\",\n topRight: \"\u2557\",\n bottomLeft: \"\u255A\",\n bottomRight: \"\u255D\",\n horizontal: \"\u2550\",\n vertical: \"\u2551\",\n topT: \"\u2566\",\n bottomT: \"\u2569\",\n leftT: \"\u2560\",\n rightT: \"\u2563\",\n cross: \"\u256C\",\n },\n rounded: {\n topLeft: \"\u256D\",\n topRight: \"\u256E\",\n bottomLeft: \"\u2570\",\n bottomRight: \"\u256F\",\n horizontal: \"\u2500\",\n vertical: \"\u2502\",\n topT: \"\u252C\",\n bottomT: \"\u2534\",\n leftT: \"\u251C\",\n rightT: \"\u2524\",\n cross: \"\u253C\",\n },\n heavy: {\n topLeft: \"\u250F\",\n topRight: \"\u2513\",\n bottomLeft: \"\u2517\",\n bottomRight: \"\u251B\",\n horizontal: \"\u2501\",\n vertical: \"\u2503\",\n topT: \"\u2533\",\n bottomT: \"\u253B\",\n leftT: \"\u2523\",\n rightT: \"\u252B\",\n cross: \"\u254B\",\n },\n}\n\nexport interface BorderConfig {\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor?: ColorInput\n customBorderChars?: BorderCharacters\n}\n\nexport interface BoxDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle: BorderStyle\n border: boolean | BorderSides[]\n borderColor: ColorInput\n customBorderChars?: BorderCharacters\n backgroundColor: ColorInput\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport interface BorderSidesConfig {\n top: boolean\n right: boolean\n bottom: boolean\n left: boolean\n}\n\nexport function getBorderFromSides(sides: BorderSidesConfig): boolean | BorderSides[] {\n const result: BorderSides[] = []\n if (sides.top) result.push(\"top\")\n if (sides.right) result.push(\"right\")\n if (sides.bottom) result.push(\"bottom\")\n if (sides.left) result.push(\"left\")\n return result.length > 0 ? result : false\n}\n\nexport function getBorderSides(border: boolean | BorderSides[]): BorderSidesConfig {\n return border === true\n ? { top: true, right: true, bottom: true, left: true }\n : Array.isArray(border)\n ? {\n top: border.includes(\"top\"),\n right: border.includes(\"right\"),\n bottom: border.includes(\"bottom\"),\n left: border.includes(\"left\"),\n }\n : { top: false, right: false, bottom: false, left: false }\n}\n\n// Convert BorderCharacters to Uint32Array for passing to Zig\nexport function borderCharsToArray(chars: BorderCharacters): Uint32Array {\n const array = new Uint32Array(11)\n array[0] = chars.topLeft.codePointAt(0)!\n array[1] = chars.topRight.codePointAt(0)!\n array[2] = chars.bottomLeft.codePointAt(0)!\n array[3] = chars.bottomRight.codePointAt(0)!\n array[4] = chars.horizontal.codePointAt(0)!\n array[5] = chars.vertical.codePointAt(0)!\n array[6] = chars.topT.codePointAt(0)!\n array[7] = chars.bottomT.codePointAt(0)!\n array[8] = chars.leftT.codePointAt(0)!\n array[9] = chars.rightT.codePointAt(0)!\n array[10] = chars.cross.codePointAt(0)!\n return array\n}\n\n// Pre-converted border character arrays for performance\nexport const BorderCharArrays: Record<BorderStyle, Uint32Array> = {\n single: borderCharsToArray(BorderChars.single),\n double: borderCharsToArray(BorderChars.double),\n rounded: borderCharsToArray(BorderChars.rounded),\n heavy: borderCharsToArray(BorderChars.heavy),\n}\n", "import type { RGBA } from \"./lib/RGBA\"\nimport type { EventEmitter } from \"events\"\nimport type { Selection } from \"./lib/selection\"\nimport type { Renderable } from \"./Renderable\"\nimport type { InternalKeyHandler, KeyHandler } from \"./lib/KeyHandler\"\n\nexport const TextAttributes = {\n NONE: 0,\n BOLD: 1 << 0, // 1\n DIM: 1 << 1, // 2\n ITALIC: 1 << 2, // 4\n UNDERLINE: 1 << 3, // 8\n BLINK: 1 << 4, // 16\n INVERSE: 1 << 5, // 32\n HIDDEN: 1 << 6, // 64\n STRIKETHROUGH: 1 << 7, // 128\n}\n\n// Constants for attribute bit packing\nexport const ATTRIBUTE_BASE_BITS = 8\nexport const ATTRIBUTE_BASE_MASK = 0xff\n\n/**\n * Extract the base 8 bits of attributes from a u32 attribute value.\n * Currently we only use the first 8 bits for standard text attributes.\n */\nexport function getBaseAttributes(attr: number): number {\n return attr & ATTRIBUTE_BASE_MASK\n}\n\nexport type ThemeMode = \"dark\" | \"light\"\n\nexport type CursorStyle = \"block\" | \"line\" | \"underline\"\n\nexport type MousePointerStyle = \"default\" | \"pointer\" | \"text\" | \"crosshair\" | \"move\" | \"not-allowed\"\n\nexport interface CursorStyleOptions {\n style?: CursorStyle\n blinking?: boolean\n color?: RGBA\n cursor?: MousePointerStyle\n}\n\nexport enum DebugOverlayCorner {\n topLeft = 0,\n topRight = 1,\n bottomLeft = 2,\n bottomRight = 3,\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface RendererEvents {\n resize: (width: number, height: number) => void\n key: (data: Buffer) => void\n \"memory:snapshot\": (snapshot: { heapUsed: number; heapTotal: number; arrayBuffers: number }) => void\n selection: (selection: Selection) => void\n \"debugOverlay:toggle\": (enabled: boolean) => void\n theme_mode: (mode: ThemeMode) => void\n}\n\nexport interface RenderContext extends EventEmitter {\n addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void\n pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void\n popHitGridScissorRect: () => void\n clearHitGridScissorRects: () => void\n width: number\n height: number\n requestRender: () => void\n setCursorPosition: (x: number, y: number, visible: boolean) => void\n setCursorStyle: (options: CursorStyleOptions) => void\n setCursorColor: (color: RGBA) => void\n setMousePointer: (shape: MousePointerStyle) => void\n widthMethod: WidthMethod\n capabilities: any | null\n requestLive: () => void\n dropLive: () => void\n hasSelection: boolean\n getSelection: () => Selection | null\n requestSelectionUpdate: () => void\n currentFocusedRenderable: Renderable | null\n focusRenderable: (renderable: Renderable) => void\n registerLifecyclePass: (renderable: Renderable) => void\n unregisterLifecyclePass: (renderable: Renderable) => void\n getLifecyclePasses: () => Set<Renderable>\n keyInput: KeyHandler\n _internalKeyInput: InternalKeyHandler\n clearSelection: () => void\n startSelection: (renderable: Renderable, x: number, y: number) => void\n updateSelection: (\n currentRenderable: Renderable | undefined,\n x: number,\n y: number,\n options?: { finishDragging?: boolean },\n ) => void\n}\n\nexport type Timeout = ReturnType<typeof setTimeout> | undefined\n\nexport interface ViewportBounds {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface Highlight {\n start: number\n end: number\n styleId: number\n priority?: number | null\n hlRef?: number | null\n}\n\nexport interface LineInfo {\n lineStarts: number[]\n lineWidths: number[]\n maxLineWidth: number\n lineSources: number[]\n lineWraps: number[]\n}\n\nexport interface LineInfoProvider {\n get lineInfo(): LineInfo\n get lineCount(): number\n get virtualLineCount(): number\n get scrollY(): number\n}\n\nexport interface CapturedSpan {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n width: number\n}\n\nexport interface CapturedLine {\n spans: CapturedSpan[]\n}\n\nexport interface CapturedFrame {\n cols: number\n rows: number\n cursor: [number, number]\n lines: CapturedLine[]\n}\n", "export class RGBA {\n buffer: Float32Array\n\n constructor(buffer: Float32Array) {\n this.buffer = buffer\n }\n\n static fromArray(array: Float32Array) {\n return new RGBA(array)\n }\n\n static fromValues(r: number, g: number, b: number, a: number = 1.0) {\n return new RGBA(new Float32Array([r, g, b, a]))\n }\n\n static fromInts(r: number, g: number, b: number, a: number = 255) {\n return new RGBA(new Float32Array([r / 255, g / 255, b / 255, a / 255]))\n }\n\n static fromHex(hex: string): RGBA {\n return hexToRgb(hex)\n }\n\n toInts(): [number, number, number, number] {\n return [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255), Math.round(this.a * 255)]\n }\n\n get r(): number {\n return this.buffer[0]\n }\n\n set r(value: number) {\n this.buffer[0] = value\n }\n\n get g(): number {\n return this.buffer[1]\n }\n\n set g(value: number) {\n this.buffer[1] = value\n }\n\n get b(): number {\n return this.buffer[2]\n }\n\n set b(value: number) {\n this.buffer[2] = value\n }\n\n get a(): number {\n return this.buffer[3]\n }\n\n set a(value: number) {\n this.buffer[3] = value\n }\n\n map<R>(fn: (value: number) => R) {\n return [fn(this.r), fn(this.g), fn(this.b), fn(this.a)]\n }\n\n toString() {\n return `rgba(${this.r.toFixed(2)}, ${this.g.toFixed(2)}, ${this.b.toFixed(2)}, ${this.a.toFixed(2)})`\n }\n\n equals(other?: RGBA): boolean {\n if (!other) return false\n return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a\n }\n}\n\nexport type ColorInput = string | RGBA\n\nexport function hexToRgb(hex: string): RGBA {\n hex = hex.replace(/^#/, \"\")\n\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]\n } else if (hex.length === 4) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(hex) && !/^[0-9A-Fa-f]{8}$/.test(hex)) {\n console.warn(`Invalid hex color: ${hex}, defaulting to magenta`)\n return RGBA.fromValues(1, 0, 1, 1)\n }\n\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n const a = hex.length === 8 ? parseInt(hex.substring(6, 8), 16) / 255 : 1\n\n return RGBA.fromValues(r, g, b, a)\n}\n\nexport function rgbToHex(rgb: RGBA): string {\n const components = rgb.a === 1 ? [rgb.r, rgb.g, rgb.b] : [rgb.r, rgb.g, rgb.b, rgb.a]\n return (\n \"#\" +\n components\n .map((x) => {\n const hex = Math.floor(Math.max(0, Math.min(1, x) * 255)).toString(16)\n return hex.length === 1 ? \"0\" + hex : hex\n })\n .join(\"\")\n )\n}\n\nexport function hsvToRgb(h: number, s: number, v: number): RGBA {\n let r = 0,\n g = 0,\n b = 0\n\n const i = Math.floor(h / 60) % 6\n const f = h / 60 - Math.floor(h / 60)\n const p = v * (1 - s)\n const q = v * (1 - f * s)\n const t = v * (1 - (1 - f) * s)\n\n switch (i) {\n case 0:\n r = v\n g = t\n b = p\n break\n case 1:\n r = q\n g = v\n b = p\n break\n case 2:\n r = p\n g = v\n b = t\n break\n case 3:\n r = p\n g = q\n b = v\n break\n case 4:\n r = t\n g = p\n b = v\n break\n case 5:\n r = v\n g = p\n b = q\n break\n }\n\n return RGBA.fromValues(r, g, b, 1)\n}\n\nconst CSS_COLOR_NAMES: Record<string, string> = {\n black: \"#000000\",\n white: \"#FFFFFF\",\n red: \"#FF0000\",\n green: \"#008000\",\n blue: \"#0000FF\",\n yellow: \"#FFFF00\",\n cyan: \"#00FFFF\",\n magenta: \"#FF00FF\",\n silver: \"#C0C0C0\",\n gray: \"#808080\",\n grey: \"#808080\",\n maroon: \"#800000\",\n olive: \"#808000\",\n lime: \"#00FF00\",\n aqua: \"#00FFFF\",\n teal: \"#008080\",\n navy: \"#000080\",\n fuchsia: \"#FF00FF\",\n purple: \"#800080\",\n orange: \"#FFA500\",\n brightblack: \"#666666\",\n brightred: \"#FF6666\",\n brightgreen: \"#66FF66\",\n brightblue: \"#6666FF\",\n brightyellow: \"#FFFF66\",\n brightcyan: \"#66FFFF\",\n brightmagenta: \"#FF66FF\",\n brightwhite: \"#FFFFFF\",\n}\n\nexport function parseColor(color: ColorInput): RGBA {\n if (typeof color === \"string\") {\n const lowerColor = color.toLowerCase()\n\n if (lowerColor === \"transparent\") {\n return RGBA.fromValues(0, 0, 0, 0)\n }\n\n if (CSS_COLOR_NAMES[lowerColor]) {\n return hexToRgb(CSS_COLOR_NAMES[lowerColor])\n }\n\n return hexToRgb(color)\n }\n return color\n}\n", "import type { TextRenderable } from \"../renderables/Text\"\nimport type { TextBuffer, TextChunk } from \"../text-buffer\"\nimport { createTextAttributes } from \"../utils\"\nimport { parseColor, type ColorInput } from \"./RGBA\"\n\nconst BrandedStyledText: unique symbol = Symbol.for(\"@opentui/core/StyledText\")\n\nexport type Color = ColorInput\n\nexport interface StyleAttrs {\n fg?: Color\n bg?: Color\n bold?: boolean\n italic?: boolean\n underline?: boolean\n strikethrough?: boolean\n dim?: boolean\n reverse?: boolean\n blink?: boolean\n}\n\nexport function isStyledText(obj: any): obj is StyledText {\n return obj && obj[BrandedStyledText]\n}\n\nexport class StyledText {\n [BrandedStyledText] = true\n\n public chunks: TextChunk[]\n\n constructor(chunks: TextChunk[]) {\n this.chunks = chunks\n }\n}\n\nexport function stringToStyledText(content: string): StyledText {\n const chunk = {\n __isChunk: true as const,\n text: content,\n }\n return new StyledText([chunk])\n}\n\nexport type StylableInput = string | number | boolean | TextChunk\n\nfunction applyStyle(input: StylableInput, style: StyleAttrs): TextChunk {\n if (typeof input === \"object\" && \"__isChunk\" in input) {\n const existingChunk = input as TextChunk\n\n const fg = style.fg ? parseColor(style.fg) : existingChunk.fg\n const bg = style.bg ? parseColor(style.bg) : existingChunk.bg\n\n const newAttrs = createTextAttributes(style)\n const mergedAttrs = existingChunk.attributes ? existingChunk.attributes | newAttrs : newAttrs\n\n return {\n __isChunk: true,\n text: existingChunk.text,\n fg,\n bg,\n attributes: mergedAttrs,\n link: existingChunk.link,\n }\n } else {\n const plainTextStr = String(input)\n const fg = style.fg ? parseColor(style.fg) : undefined\n const bg = style.bg ? parseColor(style.bg) : undefined\n const attributes = createTextAttributes(style)\n\n return {\n __isChunk: true,\n text: plainTextStr,\n fg,\n bg,\n attributes,\n }\n }\n}\n\n// Color functions\nexport const black = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"black\" })\nexport const red = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"red\" })\nexport const green = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"green\" })\nexport const yellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"yellow\" })\nexport const blue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"blue\" })\nexport const magenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"magenta\" })\nexport const cyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"cyan\" })\nexport const white = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"white\" })\n\n// Bright color functions\nexport const brightBlack = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlack\" })\nexport const brightRed = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightRed\" })\nexport const brightGreen = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightGreen\" })\nexport const brightYellow = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightYellow\" })\nexport const brightBlue = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightBlue\" })\nexport const brightMagenta = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightMagenta\" })\nexport const brightCyan = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightCyan\" })\nexport const brightWhite = (input: StylableInput): TextChunk => applyStyle(input, { fg: \"brightWhite\" })\n\n// Background color functions\nexport const bgBlack = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"black\" })\nexport const bgRed = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"red\" })\nexport const bgGreen = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"green\" })\nexport const bgYellow = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"yellow\" })\nexport const bgBlue = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"blue\" })\nexport const bgMagenta = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"magenta\" })\nexport const bgCyan = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"cyan\" })\nexport const bgWhite = (input: StylableInput): TextChunk => applyStyle(input, { bg: \"white\" })\n\n// Style functions\nexport const bold = (input: StylableInput): TextChunk => applyStyle(input, { bold: true })\nexport const italic = (input: StylableInput): TextChunk => applyStyle(input, { italic: true })\nexport const underline = (input: StylableInput): TextChunk => applyStyle(input, { underline: true })\nexport const strikethrough = (input: StylableInput): TextChunk => applyStyle(input, { strikethrough: true })\nexport const dim = (input: StylableInput): TextChunk => applyStyle(input, { dim: true })\nexport const reverse = (input: StylableInput): TextChunk => applyStyle(input, { reverse: true })\nexport const blink = (input: StylableInput): TextChunk => applyStyle(input, { blink: true })\n\n// Custom color functions\nexport const fg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { fg: color })\nexport const bg =\n (color: Color) =>\n (input: StylableInput): TextChunk =>\n applyStyle(input, { bg: color })\n\nexport const link =\n (url: string) =>\n (input: StylableInput): TextChunk => {\n const chunk =\n typeof input === \"object\" && \"__isChunk\" in input\n ? (input as TextChunk)\n : {\n __isChunk: true as const,\n text: String(input),\n }\n\n return {\n ...chunk,\n link: { url },\n }\n }\n\n/**\n * Template literal handler for styled text (non-cached version).\n * Returns a StyledText object containing chunks of text with optional styles.\n */\nexport function t(strings: TemplateStringsArray, ...values: StylableInput[]): StyledText {\n const chunks: TextChunk[] = []\n\n for (let i = 0; i < strings.length; i++) {\n const raw = strings[i]\n\n if (raw) {\n chunks.push({\n __isChunk: true,\n text: raw,\n attributes: 0,\n })\n }\n\n const val = values[i]\n if (typeof val === \"object\" && \"__isChunk\" in val) {\n chunks.push(val as TextChunk)\n } else if (val !== undefined) {\n const plainTextStr = String(val)\n chunks.push({\n __isChunk: true,\n text: plainTextStr,\n attributes: 0,\n })\n }\n }\n\n return new StyledText(chunks)\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { WidthMethod } from \"./browser-buffer\"\n\nexport interface TextChunk {\n __isChunk: true\n text: string\n fg?: RGBA\n bg?: RGBA\n attributes?: number\n link?: { url: string }\n}\n\nexport interface StyledTextInput {\n chunks: TextChunk[]\n}\n\nexport class BrowserTextBuffer {\n private _text: string = \"\"\n private _chunks: TextChunk[] = []\n private _defaultFg: RGBA | null = null\n private _defaultBg: RGBA | null = null\n private _defaultAttributes: number = 0\n private _syntaxStyle: any = null\n private _tabWidth: number = 4\n private _widthMethod: WidthMethod\n\n constructor(widthMethod: WidthMethod) {\n this._widthMethod = widthMethod\n }\n\n static create(widthMethod: WidthMethod): BrowserTextBuffer {\n return new BrowserTextBuffer(widthMethod)\n }\n\n // Compat property\n get ptr(): number {\n return 1 // Non-zero so TextBufferRenderable.renderSelf proceeds\n }\n\n get length(): number {\n return this._text.length\n }\n\n get byteSize(): number {\n return new TextEncoder().encode(this._text).length\n }\n\n setText(text: string): void {\n this._text = text\n this._chunks = [\n {\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n },\n ]\n }\n\n append(text: string): void {\n this._text += text\n this._chunks.push({\n __isChunk: true,\n text,\n fg: this._defaultFg ?? undefined,\n bg: this._defaultBg ?? undefined,\n attributes: this._defaultAttributes,\n })\n }\n\n setStyledText(styledText: StyledTextInput): void {\n this._chunks = styledText.chunks.map((chunk) => ({\n __isChunk: true,\n text: chunk.text,\n fg: chunk.fg ?? this._defaultFg ?? undefined,\n bg: chunk.bg ?? this._defaultBg ?? undefined,\n attributes: chunk.attributes ?? this._defaultAttributes,\n link: chunk.link,\n }))\n this._text = this._chunks.map((c) => c.text).join(\"\")\n }\n\n getPlainText(): string {\n return this._text\n }\n\n getTextRange(startOffset: number, endOffset: number): string {\n return this._text.slice(startOffset, endOffset)\n }\n\n getLineCount(): number {\n if (this._text.length === 0) return 0\n return this._text.split(\"\\n\").length\n }\n\n getChunks(): TextChunk[] {\n return this._chunks\n }\n\n setDefaultFg(fg: RGBA | null): void {\n this._defaultFg = fg\n }\n\n setDefaultBg(bg: RGBA | null): void {\n this._defaultBg = bg\n }\n\n setDefaultAttributes(attributes: number | null): void {\n this._defaultAttributes = attributes ?? 0\n }\n\n resetDefaults(): void {\n this._defaultFg = null\n this._defaultBg = null\n this._defaultAttributes = 0\n }\n\n get defaultFg(): RGBA | null {\n return this._defaultFg\n }\n\n get defaultBg(): RGBA | null {\n return this._defaultBg\n }\n\n get defaultAttributes(): number {\n return this._defaultAttributes\n }\n\n setSyntaxStyle(style: any): void {\n this._syntaxStyle = style\n }\n\n getSyntaxStyle(): any {\n return this._syntaxStyle\n }\n\n setTabWidth(width: number): void {\n this._tabWidth = width\n }\n\n getTabWidth(): number {\n return this._tabWidth\n }\n\n addHighlightByCharRange(_highlight: any): void {}\n addHighlight(_lineIdx: number, _highlight: any): void {}\n removeHighlightsByRef(_hlRef: number): void {}\n clearLineHighlights(_lineIdx: number): void {}\n clearAllHighlights(): void {}\n getLineHighlights(_lineIdx: number): any[] {\n return []\n }\n getHighlightCount(): number {\n return 0\n }\n loadFile(_path: string): void {}\n\n clear(): void {\n this._text = \"\"\n this._chunks = []\n }\n\n reset(): void {\n this.clear()\n this.resetDefaults()\n }\n\n destroy(): void {\n this._text = \"\"\n this._chunks = []\n }\n}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { BrowserTextBuffer, TextChunk } from \"./browser-text-buffer\"\n\nexport interface VisibleLineChunk {\n text: string\n fg: RGBA\n bg: RGBA\n attributes: number\n link?: { url: string }\n}\n\nexport interface VisibleLine {\n chunks: VisibleLineChunk[]\n}\n\nconst defaultFg: RGBA = {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n} as RGBA\n\nconst defaultBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n} as RGBA\n\nexport class BrowserTextBufferView {\n private textBuffer: BrowserTextBuffer\n private _wrapWidth: number | null = null\n private _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n private _viewportX: number = 0\n private _viewportY: number = 0\n private _viewportWidth: number = 0\n private _viewportHeight: number = 0\n private _truncate: boolean = false\n public textAlign: \"left\" | \"center\" | \"right\" = \"left\"\n private _selection: { start: number; end: number } | null = null\n private _selectionBg: RGBA | undefined\n private _selectionFg: RGBA | undefined\n\n constructor(textBuffer: BrowserTextBuffer) {\n this.textBuffer = textBuffer\n }\n\n static create(textBuffer: BrowserTextBuffer): BrowserTextBufferView {\n return new BrowserTextBufferView(textBuffer)\n }\n\n // Compat\n get ptr(): number {\n return 1\n }\n\n get lineInfo() {\n const lines = this.getAllWrappedLines()\n const lineStarts: number[] = []\n const lineWidths: number[] = []\n const lineSources: number[] = []\n const lineWraps: number[] = []\n let maxWidth = 0\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n lineStarts.push(offset)\n const lineText = lines[i].map((c) => c.text).join(\"\")\n const w = lineText.length\n lineWidths.push(w)\n lineSources.push(0)\n lineWraps.push(0)\n if (w > maxWidth) maxWidth = w\n offset += lineText.length + 1\n }\n\n return { lineStarts, lineWidths, maxLineWidth: maxWidth, lineSources, lineWraps }\n }\n\n get logicalLineInfo() {\n return this.lineInfo\n }\n\n setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this._selection = { start, end }\n this._selectionBg = bgColor\n this._selectionFg = fgColor\n }\n\n updateSelection(end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n if (this._selection) {\n this._selection.end = end\n }\n if (bgColor) this._selectionBg = bgColor\n if (fgColor) this._selectionFg = fgColor\n }\n\n resetSelection(): void {\n this._selection = null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this._selection\n }\n\n hasSelection(): boolean {\n return this._selection !== null\n }\n\n setLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n updateLocalSelection(\n _anchorX: number,\n _anchorY: number,\n _focusX: number,\n _focusY: number,\n _bgColor?: RGBA,\n _fgColor?: RGBA,\n ): boolean {\n return false\n }\n\n resetLocalSelection(): void {}\n\n getSelectedText(): string {\n if (!this._selection) return \"\"\n const text = this.textBuffer.getPlainText()\n const start = Math.min(this._selection.start, this._selection.end)\n const end = Math.max(this._selection.start, this._selection.end)\n return text.slice(start, end)\n }\n\n getPlainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n setWrapWidth(width: number | null): void {\n this._wrapWidth = width\n }\n\n setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this._wrapMode = mode\n }\n\n setViewportSize(width: number, height: number): void {\n this._viewportWidth = width\n this._viewportHeight = height\n\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setViewport(x: number, y: number, width: number, height: number): void {\n this._viewportX = x\n this._viewportY = y\n this._viewportWidth = width\n this._viewportHeight = height\n\n // Sync wrap width with viewport width (matches Zig TextBufferView.setViewport behavior)\n if (this._wrapMode !== \"none\" && width > 0 && this._wrapWidth !== width) {\n this._wrapWidth = width\n }\n }\n\n setTabIndicator(_indicator: string | number): void {}\n\n setTabIndicatorColor(_color: RGBA): void {}\n\n setTruncate(truncate: boolean): void {\n this._truncate = truncate\n }\n\n private getAllWrappedLines(): VisibleLineChunk[][] {\n const chunks = this.textBuffer.getChunks()\n if (chunks.length === 0) return []\n\n const dfg = this.textBuffer.defaultFg ?? defaultFg\n const dbg = this.textBuffer.defaultBg ?? defaultBg\n\n // First, build logical lines from chunks\n const logicalLines: VisibleLineChunk[][] = [[]]\n\n for (const chunk of chunks) {\n const parts = chunk.text.split(\"\\n\")\n for (let i = 0; i < parts.length; i++) {\n if (i > 0) {\n logicalLines.push([])\n }\n if (parts[i].length > 0) {\n const vlc: VisibleLineChunk = {\n text: parts[i],\n fg: chunk.fg ?? dfg,\n bg: chunk.bg ?? dbg,\n attributes: chunk.attributes ?? 0,\n }\n if (chunk.link) vlc.link = chunk.link\n logicalLines[logicalLines.length - 1].push(vlc)\n }\n }\n }\n\n // Apply wrapping\n if (this._wrapMode === \"none\" || !this._wrapWidth || this._wrapWidth <= 0) {\n return logicalLines\n }\n\n const wrappedLines: VisibleLineChunk[][] = []\n const wrapWidth = this._wrapWidth\n\n for (const logicalLine of logicalLines) {\n // Flatten line text to handle wrapping\n const lineText = logicalLine.map((c) => c.text).join(\"\")\n\n if (lineText.length <= wrapWidth) {\n wrappedLines.push(logicalLine)\n continue\n }\n\n if (this._wrapMode === \"char\") {\n // Character wrapping\n let pos = 0\n while (pos < lineText.length) {\n const end = Math.min(pos + wrapWidth, lineText.length)\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n } else {\n // Word wrapping\n let pos = 0\n while (pos < lineText.length) {\n let end = Math.min(pos + wrapWidth, lineText.length)\n if (end < lineText.length) {\n // Look for a space to break at\n let breakPos = end\n while (breakPos > pos && lineText[breakPos] !== \" \") {\n breakPos--\n }\n if (breakPos > pos) {\n end = breakPos + 1 // Include the space\n }\n }\n const sliceChunks = this.sliceChunks(logicalLine, pos, end)\n wrappedLines.push(sliceChunks)\n pos = end\n }\n }\n }\n\n return wrappedLines\n }\n\n private sliceChunks(chunks: VisibleLineChunk[], start: number, end: number): VisibleLineChunk[] {\n const result: VisibleLineChunk[] = []\n let offset = 0\n\n for (const chunk of chunks) {\n const chunkStart = offset\n const chunkEnd = offset + chunk.text.length\n\n if (chunkEnd <= start || chunkStart >= end) {\n offset = chunkEnd\n continue\n }\n\n const sliceStart = Math.max(0, start - chunkStart)\n const sliceEnd = Math.min(chunk.text.length, end - chunkStart)\n const slicedText = chunk.text.slice(sliceStart, sliceEnd)\n\n if (slicedText.length > 0) {\n const sliced: VisibleLineChunk = {\n text: slicedText,\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n }\n if (chunk.link) sliced.link = chunk.link\n result.push(sliced)\n }\n\n offset = chunkEnd\n }\n\n return result\n }\n\n measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n // Temporarily set wrap width for measurement\n const oldWrapWidth = this._wrapWidth\n if (width > 0 && this._wrapMode !== \"none\") {\n this._wrapWidth = width\n } else if (width === 0) {\n // width=0 means measure without wrapping\n this._wrapWidth = null\n }\n\n const lines = this.getAllWrappedLines()\n this._wrapWidth = oldWrapWidth\n\n let maxWidth = 0\n for (const line of lines) {\n const lineWidth = line.reduce((sum, c) => sum + c.text.length, 0)\n if (lineWidth > maxWidth) maxWidth = lineWidth\n }\n\n return {\n lineCount: lines.length,\n maxWidth,\n }\n }\n\n getVirtualLineCount(): number {\n return this.getAllWrappedLines().length\n }\n\n getVisibleLines(): VisibleLine[] | null {\n const allLines = this.getAllWrappedLines()\n if (allLines.length === 0) return null\n\n const startLine = this._viewportY\n const endLine =\n this._viewportHeight > 0 ? Math.min(startLine + this._viewportHeight, allLines.length) : allLines.length\n\n const visibleLines: VisibleLine[] = []\n for (let i = startLine; i < endLine; i++) {\n if (i >= 0 && i < allLines.length) {\n visibleLines.push({ chunks: allLines[i] })\n }\n }\n\n return visibleLines\n }\n\n destroy(): void {}\n}\n", "// Stub SyntaxStyle for browser - no native Zig backing needed\nexport class BrowserSyntaxStyle {\n private _destroyed = false\n\n static create(): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromTheme(_theme: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n static fromStyles(_styles: any): BrowserSyntaxStyle {\n return new BrowserSyntaxStyle()\n }\n\n get ptr(): number {\n return 0\n }\n\n registerStyle(_name: string, _style: any): number {\n return 0\n }\n\n resolveStyleId(_name: string): number | null {\n return null\n }\n\n getStyleId(_name: string): number | null {\n return null\n }\n\n getStyleCount(): number {\n return 0\n }\n\n clearNameCache(): void {}\n\n getStyle(_name: string): any {\n return undefined\n }\n\n mergeStyles(..._styleNames: string[]): { attributes: number } {\n return { attributes: 0 }\n }\n\n clearCache(): void {}\n getCacheSize(): number {\n return 0\n }\n getAllStyles(): Map<string, any> {\n return new Map()\n }\n getRegisteredNames(): string[] {\n return []\n }\n\n destroy(): void {\n this._destroyed = true\n }\n}\n", "// Stub for opentui/packages/core/src/animation/Timeline.ts\nexport class Timeline {\n public isPlaying: boolean = false\n public isComplete: boolean = false\n public duration: number = 1000\n public loop: boolean = false\n public synced: boolean = false\n public currentTime: number = 0\n public items: any[] = []\n public subTimelines: any[] = []\n\n constructor(_options: any = {}) {}\n addStateChangeListener(_listener: any): void {}\n removeStateChangeListener(_listener: any): void {}\n add(_target: any, _options: any): this { return this }\n call(_callback: () => void): this { return this }\n play(): this {\n this.isPlaying = true\n return this\n }\n pause(): this {\n this.isPlaying = false\n return this\n }\n restart(): void {}\n update(_deltaTime: number): void {}\n}\n\nclass TimelineEngine {\n defaults = { frameRate: 60 }\n attach(_renderer: any): void {}\n detach(): void {}\n register(_timeline: Timeline): void {}\n unregister(_timeline: Timeline): void {}\n clear(): void {}\n update(_deltaTime: number): void {}\n}\n\nexport const engine = new TimelineEngine()\n\nexport function createTimeline(options: any = {}): Timeline {\n return new Timeline(options)\n}\n", "// Copied from https://github.com/enquirer/enquirer/blob/36785f3399a41cd61e9d28d1eb9c2fcd73d69b4c/lib/keypress.js\nimport { Buffer } from \"node:buffer\"\nimport { parseKittyKeyboard } from \"./parse.keypress-kitty\"\n\nconst metaKeyCodeRe = /^(?:\\x1b)([a-zA-Z0-9])$/\n\nconst fnKeyRe = /^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/\n\nconst keyName: Record<string, string> = {\n /* xterm/gnome ESC O letter */\n OP: \"f1\",\n OQ: \"f2\",\n OR: \"f3\",\n OS: \"f4\",\n /* xterm/rxvt ESC [ number ~ */\n \"[11~\": \"f1\",\n \"[12~\": \"f2\",\n \"[13~\": \"f3\",\n \"[14~\": \"f4\",\n /* from Cygwin and used in libuv */\n \"[[A\": \"f1\",\n \"[[B\": \"f2\",\n \"[[C\": \"f3\",\n \"[[D\": \"f4\",\n \"[[E\": \"f5\",\n /* common */\n \"[15~\": \"f5\",\n \"[17~\": \"f6\",\n \"[18~\": \"f7\",\n \"[19~\": \"f8\",\n \"[20~\": \"f9\",\n \"[21~\": \"f10\",\n \"[23~\": \"f11\",\n \"[24~\": \"f12\",\n /* xterm ESC [ letter */\n \"[A\": \"up\",\n \"[B\": \"down\",\n \"[C\": \"right\",\n \"[D\": \"left\",\n \"[E\": \"clear\",\n \"[F\": \"end\",\n \"[H\": \"home\",\n /* xterm/gnome ESC O letter */\n OA: \"up\",\n OB: \"down\",\n OC: \"right\",\n OD: \"left\",\n OE: \"clear\",\n OF: \"end\",\n OH: \"home\",\n /* xterm/rxvt ESC [ number ~ */\n \"[1~\": \"home\",\n \"[2~\": \"insert\",\n \"[3~\": \"delete\",\n \"[4~\": \"end\",\n \"[5~\": \"pageup\",\n \"[6~\": \"pagedown\",\n /* putty */\n \"[[5~\": \"pageup\",\n \"[[6~\": \"pagedown\",\n /* rxvt */\n \"[7~\": \"home\",\n \"[8~\": \"end\",\n /* rxvt keys with modifiers */\n \"[a\": \"up\",\n \"[b\": \"down\",\n \"[c\": \"right\",\n \"[d\": \"left\",\n \"[e\": \"clear\",\n /* option + arrow keys (old style) */\n f: \"right\",\n b: \"left\",\n p: \"up\",\n n: \"down\",\n\n \"[2$\": \"insert\",\n \"[3$\": \"delete\",\n \"[5$\": \"pageup\",\n \"[6$\": \"pagedown\",\n \"[7$\": \"home\",\n \"[8$\": \"end\",\n\n Oa: \"up\",\n Ob: \"down\",\n Oc: \"right\",\n Od: \"left\",\n Oe: \"clear\",\n\n \"[2^\": \"insert\",\n \"[3^\": \"delete\",\n \"[5^\": \"pageup\",\n \"[6^\": \"pagedown\",\n \"[7^\": \"home\",\n \"[8^\": \"end\",\n /* misc. */\n \"[Z\": \"tab\",\n}\n\nexport const nonAlphanumericKeys = [...Object.values(keyName), \"backspace\"]\n\nconst isShiftKey = (code: string) => {\n return [\"[a\", \"[b\", \"[c\", \"[d\", \"[e\", \"[2$\", \"[3$\", \"[5$\", \"[6$\", \"[7$\", \"[8$\", \"[Z\"].includes(code)\n}\n\nconst isCtrlKey = (code: string) => {\n return [\"Oa\", \"Ob\", \"Oc\", \"Od\", \"Oe\", \"[2^\", \"[3^\", \"[5^\", \"[6^\", \"[7^\", \"[8^\"].includes(code)\n}\n\nexport type KeyEventType = \"press\" | \"repeat\" | \"release\"\n\nexport interface ParsedKey {\n name: string\n ctrl: boolean\n meta: boolean\n shift: boolean\n option: boolean\n sequence: string\n number: boolean\n raw: string\n eventType: KeyEventType\n source: \"raw\" | \"kitty\"\n code?: string\n super?: boolean\n hyper?: boolean\n capsLock?: boolean\n numLock?: boolean\n baseCode?: number\n repeated?: boolean\n}\n\nexport type ParseKeypressOptions = {\n useKittyKeyboard?: boolean\n}\n\nconst modifyOtherKeysRe = /^\\x1b\\[27;(\\d+);(\\d+)~$/\n\nexport const parseKeypress = (s: Buffer | string = \"\", options: ParseKeypressOptions = {}): ParsedKey | null => {\n let parts\n\n if (Buffer.isBuffer(s)) {\n if (s[0]! > 127 && s[1] === undefined) {\n ;(s[0] as unknown as number) -= 128\n s = \"\\x1b\" + String(s)\n } else {\n s = String(s)\n }\n } else if (s !== undefined && typeof s !== \"string\") {\n s = String(s)\n } else if (!s) {\n s = \"\"\n }\n\n // Filter out mouse events (SGR and basic)\n if (/^\\x1b\\[<\\d+;\\d+;\\d+[Mm]$/.test(s)) {\n return null\n }\n if (s.startsWith(\"\\x1b[M\") && s.length >= 6) {\n return null\n }\n\n // Filter out terminal response sequences (not keyboard events)\n // These are responses to terminal queries and should not be treated as key presses\n\n // Window/cell size reports: ESC[4;height;width t or ESC[8;rows;cols t\n if (/^\\x1b\\[\\d+;\\d+;\\d+t$/.test(s)) {\n return null\n }\n\n // Cursor position reports (DSR): ESC[row;col R\n if (/^\\x1b\\[\\d+;\\d+R$/.test(s)) {\n return null\n }\n\n // Device Attributes (DA) responses: ESC[?...c\n if (/^\\x1b\\[\\?[\\d;]+c$/.test(s)) {\n return null\n }\n\n // Mode reports: ESC[?...;...$y\n if (/^\\x1b\\[\\?[\\d;]+\\$y$/.test(s)) {\n return null\n }\n\n // Focus events: ESC[I (focus in), ESC[O (focus out)\n // Note: ESC[O is also used for SS3 sequences (like arrow keys), but those have a character after O\n if (s === \"\\x1b[I\" || s === \"\\x1b[O\") {\n return null\n }\n\n // OSC (Operating System Command) responses: ESC]...ESC\\ or ESC]...BEL\n if (/^\\x1b\\][\\d;].*(\\x1b\\\\|\\x07)$/.test(s)) {\n return null\n }\n\n // Bracketed paste mode markers: ESC[200~ (start), ESC[201~ (end)\n if (s === \"\\x1b[200~\" || s === \"\\x1b[201~\") {\n return null\n }\n\n const key: ParsedKey = {\n name: \"\",\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n number: false,\n sequence: s,\n raw: s,\n eventType: \"press\",\n source: \"raw\",\n }\n\n key.sequence = key.sequence || s || key.name\n\n // Check for Kitty keyboard protocol if enabled\n if (options.useKittyKeyboard) {\n const kittyResult = parseKittyKeyboard(s)\n if (kittyResult) {\n return kittyResult\n }\n }\n\n // Check for modifyOtherKeys sequences (CSI u protocol variant)\n // Format: CSI 27 ; modifier ; code ~\n // This is sent by terminals (xterm, iTerm2, Ghostty, etc.) with modifyOtherKeys mode enabled\n // to encode modified versions of keys that don't normally have modifier variants\n // Examples: CSI 27;2;13~ (shift+enter), CSI 27;5;13~ (ctrl+enter), CSI 27;5;27~ (ctrl+escape)\n const modifyOtherKeysMatch = modifyOtherKeysRe.exec(s)\n if (modifyOtherKeysMatch) {\n const modifier = parseInt(modifyOtherKeysMatch[1]!, 10) - 1\n const charCode = parseInt(modifyOtherKeysMatch[2]!, 10)\n\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2)\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n\n // Handle common keys by their ASCII codes\n if (charCode === 13) {\n key.name = \"return\"\n } else if (charCode === 27) {\n key.name = \"escape\"\n } else if (charCode === 9) {\n key.name = \"tab\"\n } else if (charCode === 32) {\n key.name = \"space\"\n } else if (charCode === 127 || charCode === 8) {\n key.name = \"backspace\"\n } else {\n // For other character codes, use the character itself\n const char = String.fromCharCode(charCode)\n key.name = char\n key.sequence = char\n if (charCode >= 48 && charCode <= 57) {\n key.number = true\n }\n }\n\n return key\n }\n\n if (s === \"\\r\" || s === \"\\x1b\\r\") {\n // carriage return\n key.name = \"return\"\n key.meta = s.length === 2\n } else if (s === \"\\n\" || s === \"\\x1b\\n\") {\n // linefeed\n key.name = \"linefeed\"\n key.meta = s.length === 2\n } else if (s === \"\\t\") {\n // tab\n key.name = \"tab\"\n } else if (s === \"\\b\" || s === \"\\x1b\\b\" || s === \"\\x7f\" || s === \"\\x1b\\x7f\") {\n // backspace or ctrl+h\n // On OSX, \\x7f is also backspace\n key.name = \"backspace\"\n key.meta = s.charAt(0) === \"\\x1b\"\n } else if (s === \"\\x1b\" || s === \"\\x1b\\x1b\") {\n // escape key\n key.name = \"escape\"\n key.meta = s.length === 2\n } else if (s === \" \" || s === \"\\x1b \") {\n key.name = \"space\"\n key.meta = s.length === 2\n } else if (s === \"\\x00\") {\n // ctrl+space\n key.name = \"space\"\n key.ctrl = true\n } else if (s.length === 1 && s <= \"\\x1a\") {\n // ctrl+letter\n key.name = String.fromCharCode(s.charCodeAt(0) + \"a\".charCodeAt(0) - 1)\n key.ctrl = true\n } else if (s.length === 1 && s >= \"0\" && s <= \"9\") {\n // number - keep the actual number character for vim commands\n key.name = s\n key.number = true\n } else if (s.length === 1 && s >= \"a\" && s <= \"z\") {\n // lowercase letter\n key.name = s\n } else if (s.length === 1 && s >= \"A\" && s <= \"Z\") {\n // shift+letter\n key.name = s.toLowerCase()\n key.shift = true\n } else if (s.length === 1) {\n // Special characters (like $, ^, etc.) - preserve the character\n key.name = s\n } else if ((parts = metaKeyCodeRe.exec(s))) {\n // meta+character key\n key.meta = true\n const char = parts[1]!\n const isUpperCase = /^[A-Z]$/.test(char)\n\n // Check if uppercase F or B map to arrow keys (old terminal style)\n if (char === \"F\") {\n key.name = \"right\"\n } else if (char === \"B\") {\n key.name = \"left\"\n } else if (isUpperCase) {\n key.shift = true\n key.name = char\n } else {\n key.name = char\n }\n } else if (s.length === 2 && s[0] === \"\\x1b\" && s[1]! <= \"\\x1a\") {\n // meta+ctrl+letter (ESC + control character)\n key.meta = true\n key.ctrl = true\n key.name = String.fromCharCode(s.charCodeAt(1) + \"a\".charCodeAt(0) - 1)\n } else if ((parts = fnKeyRe.exec(s))) {\n const segs = [...s]\n\n if (segs[0] === \"\\u001b\" && segs[1] === \"\\u001b\") {\n key.option = true\n key.meta = true\n }\n\n // ansi escape sequence\n // reassemble the key code leaving out leading \\x1b's,\n // the modifier key bitflag and any meaningless \"1;\" sequence\n const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join(\"\")\n\n const modifier = parseInt(parts[3] || parts[5] || \"1\", 10) - 1\n\n // Parse the key modifier\n // Terminal modifier bits: 1=Shift, 2=Alt/Option, 4=Ctrl, 8=Super, 16=Hyper\n // Note: meta flag is set for Alt/Option (bit 2)\n key.ctrl = !!(modifier & 4)\n key.meta = !!(modifier & 2) // Alt/Option sets meta\n key.shift = !!(modifier & 1)\n key.option = !!(modifier & 2) // Alt/Option modifier specifically\n key.super = !!(modifier & 8)\n key.hyper = !!(modifier & 16)\n key.code = code\n\n const keyNameResult = keyName[code]\n if (keyNameResult) {\n key.name = keyNameResult\n key.shift = isShiftKey(code) || key.shift\n key.ctrl = isCtrlKey(code) || key.ctrl\n } else {\n // If we matched the regex but didn't find a valid key name,\n // reset the key to default state (unknown sequence)\n key.name = \"\"\n key.code = undefined\n }\n } else if (s === \"\\x1b[3~\") {\n // delete key\n key.name = \"delete\"\n key.meta = false\n key.code = \"[3~\"\n }\n\n return key\n}\n", "const singletonCacheSymbol = Symbol.for(\"@opentui/core/singleton\")\n\n/**\n * Ensures a value is initialized once per process,\n * persists across Bun hot reloads, and is type-safe.\n */\nexport function singleton<T>(key: string, factory: () => T): T {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = (globalThis[singletonCacheSymbol] ??= {})\n if (!(key in bag)) {\n bag[key] = factory()\n }\n return bag[key] as T\n}\n\nexport function destroySingleton(key: string): void {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n if (bag && key in bag) {\n delete bag[key]\n }\n}\n\nexport function hasSingleton(key: string): boolean {\n // @ts-expect-error this symbol is only used in this file and is not part of the public API\n const bag = globalThis[singletonCacheSymbol]\n return bag && key in bag\n}\n", "import { singleton } from \"./singleton.ts\"\n\n/**\n * Environment variable registry\n *\n * Usage:\n * ```ts\n * import { registerEnvVar, env } from \"./lib/env.ts\";\n *\n * // Register environment variables\n * registerEnvVar({\n * name: \"DEBUG\",\n * description: \"Enable debug logging\",\n * type: \"boolean\",\n * default: false\n * });\n *\n * registerEnvVar({\n * name: \"PORT\",\n * description: \"Server port number\",\n * type: \"number\",\n * default: 3000\n * });\n *\n * // Access environment variables\n * if (env.DEBUG) {\n * console.log(\"Debug mode enabled\");\n * }\n *\n * const port = env.PORT; // number\n * ```\n */\n\nexport interface EnvVarConfig {\n name: string\n description: string\n default?: string | boolean | number\n type?: \"string\" | \"boolean\" | \"number\"\n}\n\nexport const envRegistry: Record<string, EnvVarConfig> = singleton(\"env-registry\", () => ({}))\n\nexport function registerEnvVar(config: EnvVarConfig): void {\n const existing = envRegistry[config.name]\n if (existing) {\n if (\n existing.description !== config.description ||\n existing.type !== config.type ||\n existing.default !== config.default\n ) {\n throw new Error(\n `Environment variable \"${config.name}\" is already registered with different configuration. ` +\n `Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`,\n )\n }\n return\n }\n envRegistry[config.name] = config\n}\n\nfunction normalizeBoolean(value: string): boolean {\n const lowerValue = value.toLowerCase()\n return [\"true\", \"1\", \"on\", \"yes\"].includes(lowerValue)\n}\n\nfunction parseEnvValue(config: EnvVarConfig): string | boolean | number {\n const envValue = process.env[config.name]\n\n if (envValue === undefined && config.default !== undefined) {\n return config.default\n }\n\n if (envValue === undefined) {\n throw new Error(`Required environment variable ${config.name} is not set. ${config.description}`)\n }\n\n switch (config.type) {\n case \"boolean\":\n return typeof envValue === \"boolean\" ? envValue : normalizeBoolean(envValue)\n case \"number\":\n const numValue = Number(envValue)\n if (isNaN(numValue)) {\n throw new Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`)\n }\n return numValue\n case \"string\":\n default:\n return envValue\n }\n}\n\nclass EnvStore {\n private parsedValues: Map<string, string | boolean | number> = new Map()\n\n get(key: string): any {\n if (this.parsedValues.has(key)) {\n return this.parsedValues.get(key)!\n }\n\n if (!(key in envRegistry)) {\n throw new Error(`Environment variable ${key} is not registered.`)\n }\n\n try {\n const value = parseEnvValue(envRegistry[key])\n this.parsedValues.set(key, value)\n return value\n } catch (error) {\n throw new Error(`Failed to parse env var ${key}: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n\n has(key: string): boolean {\n return key in envRegistry\n }\n\n clearCache(): void {\n this.parsedValues.clear()\n }\n}\n\nconst envStore = singleton(\"env-store\", () => new EnvStore())\n\nexport function clearEnvCache(): void {\n envStore.clearCache()\n}\n\nexport function generateEnvMarkdown(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"# Environment Variables\\n\\nNo environment variables registered.\\n\"\n }\n\n let markdown = \"# Environment Variables\\n\\n\"\n\n for (const config of configs) {\n markdown += `## ${config.name}\\n\\n`\n markdown += `${config.description}\\n\\n`\n\n markdown += `**Type:** \\`${config.type || \"string\"}\\` \\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n markdown += `**Default:** \\`${defaultValue}\\`\\n`\n } else {\n markdown += \"**Default:** *Required*\\n\"\n }\n\n markdown += \"\\n\"\n }\n\n return markdown\n}\n\nexport function generateEnvColored(): string {\n const configs = Object.values(envRegistry)\n\n if (configs.length === 0) {\n return \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\nNo environment variables registered.\\n\"\n }\n\n let output = \"\\x1b[1;36mEnvironment Variables\\x1b[0m\\n\\n\"\n\n for (const config of configs) {\n output += `\\x1b[1;33m${config.name}\\x1b[0m\\n`\n output += `${config.description}\\n`\n output += `\\x1b[32mType:\\x1b[0m \\x1b[36m${config.type || \"string\"}\\x1b[0m\\n`\n\n if (config.default !== undefined) {\n const defaultValue = typeof config.default === \"string\" ? `\"${config.default}\"` : String(config.default)\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[35m${defaultValue}\\x1b[0m\\n`\n } else {\n output += `\\x1b[32mDefault:\\x1b[0m \\x1b[31mRequired\\x1b[0m\\n`\n }\n\n output += \"\\n\"\n }\n\n return output\n}\n\nexport const env = new Proxy({} as Record<string, any>, {\n get(target, prop: string) {\n if (typeof prop !== \"string\") {\n return undefined\n }\n return envStore.get(prop)\n },\n\n has(target, prop: string) {\n return envStore.has(prop)\n },\n\n ownKeys() {\n return Object.keys(envRegistry)\n },\n\n getOwnPropertyDescriptor(target, prop: string) {\n if (envStore.has(prop)) {\n return {\n enumerable: true,\n configurable: true,\n get: () => envStore.get(prop),\n }\n }\n return undefined\n },\n})\n", "import os from \"os\"\nimport path from \"path\"\nimport { EventEmitter } from \"events\"\nimport { singleton } from \"./singleton\"\nimport { env, registerEnvVar } from \"./env\"\nimport { isValidDirectoryName } from \"./validate-dir-name\"\n\n// Register environment variables for XDG directories\nregisterEnvVar({\n name: \"XDG_CONFIG_HOME\",\n description: \"Base directory for user-specific configuration files\",\n type: \"string\",\n default: \"\",\n})\n\nregisterEnvVar({\n name: \"XDG_DATA_HOME\",\n description: \"Base directory for user-specific data files\",\n type: \"string\",\n default: \"\",\n})\n\nexport interface DataPaths {\n globalConfigPath: string\n globalConfigFile: string\n localConfigFile: string\n globalDataPath: string\n}\n\nexport interface DataPathsEvents {\n \"paths:changed\": [paths: DataPaths]\n}\n\nexport class DataPathsManager extends EventEmitter<DataPathsEvents> {\n private _appName: string\n private _globalConfigPath?: string\n private _globalConfigFile?: string\n private _localConfigFile?: string\n private _globalDataPath?: string\n constructor() {\n super()\n this._appName = \"opentui\"\n }\n\n get appName(): string {\n return this._appName\n }\n\n set appName(value: string) {\n if (!isValidDirectoryName(value)) {\n throw new Error(`Invalid app name \"${value}\": must be a valid directory name`)\n }\n if (this._appName !== value) {\n this._appName = value\n this._globalConfigPath = undefined\n this._globalConfigFile = undefined\n this._localConfigFile = undefined\n this._globalDataPath = undefined\n this.emit(\"paths:changed\", this.toObject())\n }\n }\n\n get globalConfigPath(): string {\n if (this._globalConfigPath === undefined) {\n const homeDir = os.homedir()\n const xdgConfigHome = env.XDG_CONFIG_HOME\n const baseConfigDir = xdgConfigHome || path.join(homeDir, \".config\")\n this._globalConfigPath = path.join(baseConfigDir, this._appName)\n }\n return this._globalConfigPath\n }\n\n get globalConfigFile(): string {\n if (this._globalConfigFile === undefined) {\n this._globalConfigFile = path.join(this.globalConfigPath, \"init.ts\")\n }\n return this._globalConfigFile\n }\n\n get localConfigFile(): string {\n if (this._localConfigFile === undefined) {\n this._localConfigFile = path.join(process.cwd(), `.${this._appName}.ts`)\n }\n return this._localConfigFile\n }\n\n get globalDataPath(): string {\n if (this._globalDataPath === undefined) {\n const homeDir = os.homedir()\n const xdgDataHome = env.XDG_DATA_HOME\n const baseDataDir = xdgDataHome || path.join(homeDir, \".local/share\")\n this._globalDataPath = path.join(baseDataDir, this._appName)\n }\n return this._globalDataPath\n }\n\n toObject(): DataPaths {\n return {\n globalConfigPath: this.globalConfigPath,\n globalConfigFile: this.globalConfigFile,\n localConfigFile: this.localConfigFile,\n globalDataPath: this.globalDataPath,\n }\n }\n}\n\nexport function getDataPaths(): DataPathsManager {\n return singleton(\"data-paths-opentui\", () => new DataPathsManager())\n}\n", "import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { TextBuffer, type TextChunk } from \"../text-buffer\"\nimport { TextBufferView } from \"../text-buffer-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext, type LineInfoProvider } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { LineInfo } from \"../zig\"\nimport { SyntaxStyle } from \"../syntax-style\"\n\nexport interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {\n fg?: string | RGBA\n bg?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n truncate?: boolean\n}\n\nexport abstract class TextBufferRenderable extends Renderable implements LineInfoProvider {\n public selectable: boolean = true\n\n protected _defaultFg: RGBA\n protected _defaultBg: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n protected _scrollX: number = 0\n protected _scrollY: number = 0\n protected _truncate: boolean = false\n\n protected textBuffer: TextBuffer\n protected textBufferView: TextBufferView\n protected _textBufferSyntaxStyle: SyntaxStyle\n\n protected _defaultOptions = {\n fg: RGBA.fromValues(1, 1, 1, 1),\n bg: RGBA.fromValues(0, 0, 0, 0),\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n truncate: false,\n } satisfies Partial<TextBufferOptions>\n\n constructor(ctx: RenderContext, options: TextBufferOptions) {\n super(ctx, options)\n\n this._defaultFg = parseColor(options.fg ?? this._defaultOptions.fg)\n this._defaultBg = parseColor(options.bg ?? this._defaultOptions.bg)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n this._truncate = options.truncate ?? this._defaultOptions.truncate\n\n this.textBuffer = TextBuffer.create(this._ctx.widthMethod)\n this.textBufferView = TextBufferView.create(this.textBuffer)\n\n this._textBufferSyntaxStyle = SyntaxStyle.create()\n this.textBuffer.setSyntaxStyle(this._textBufferSyntaxStyle)\n\n this.textBufferView.setWrapMode(this._wrapMode)\n this.setupMeasureFunc()\n\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (this._tabIndicator !== undefined) {\n this.textBufferView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n if (this._wrapMode !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n\n this.textBufferView.setTruncate(this._truncate)\n\n this.updateTextInfo()\n }\n\n protected onMouseEvent(event: any): void {\n if (event.type === \"scroll\") {\n this.handleScroll(event)\n }\n }\n\n protected handleScroll(event: any): void {\n if (!event.scroll) return\n\n const { direction, delta } = event.scroll\n\n if (direction === \"up\") {\n this.scrollY -= delta\n } else if (direction === \"down\") {\n this.scrollY += delta\n }\n\n if (this._wrapMode === \"none\") {\n if (direction === \"left\") {\n this.scrollX -= delta\n } else if (direction === \"right\") {\n this.scrollX += delta\n }\n }\n }\n\n public get lineInfo(): LineInfo {\n return this.textBufferView.logicalLineInfo\n }\n\n public get lineCount(): number {\n return this.textBuffer.getLineCount()\n }\n\n public get virtualLineCount(): number {\n return this.textBufferView.getVirtualLineCount()\n }\n\n public get scrollY(): number {\n return this._scrollY\n }\n\n public set scrollY(value: number) {\n const maxScrollY = Math.max(0, this.scrollHeight - this.height)\n const clamped = Math.max(0, Math.min(value, maxScrollY))\n if (this._scrollY !== clamped) {\n this._scrollY = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollX(): number {\n return this._scrollX\n }\n\n public set scrollX(value: number) {\n const maxScrollX = Math.max(0, this.scrollWidth - this.width)\n const clamped = Math.max(0, Math.min(value, maxScrollX))\n if (this._scrollX !== clamped) {\n this._scrollX = clamped\n this.updateViewportOffset()\n this.requestRender()\n }\n }\n\n public get scrollWidth(): number {\n return this.lineInfo.maxLineWidth\n }\n\n public get scrollHeight(): number {\n return this.lineInfo.lineStarts.length\n }\n\n public get maxScrollY(): number {\n return Math.max(0, this.scrollHeight - this.height)\n }\n\n public get maxScrollX(): number {\n return Math.max(0, this.scrollWidth - this.width)\n }\n\n protected updateViewportOffset(): void {\n // Update the viewport with the new scroll position\n if (this.width > 0 && this.height > 0) {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, this.width, this.height)\n }\n }\n\n get plainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n get textLength(): number {\n return this.textBuffer.length\n }\n\n get fg(): RGBA {\n return this._defaultFg\n }\n\n set fg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.fg)\n if (this._defaultFg !== newColor) {\n this._defaultFg = newColor\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.onFgChanged(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get bg(): RGBA {\n return this._defaultBg\n }\n\n set bg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.bg)\n if (this._defaultBg !== newColor) {\n this._defaultBg = newColor\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.onBgChanged(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n this.onAttributesChanged(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.textBufferView.setWrapMode(this._wrapMode)\n if (value !== \"none\" && this.width > 0) {\n this.textBufferView.setWrapWidth(this.width)\n }\n // Changing wrap mode can change dimensions, so mark yoga node dirty to trigger re-measurement\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.textBufferView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n get truncate(): boolean {\n return this._truncate\n }\n\n set truncate(value: boolean) {\n if (this._truncate !== value) {\n this._truncate = value\n this.textBufferView.setTruncate(value)\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.textBufferView.setViewport(this._scrollX, this._scrollY, width, height)\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n return true\n }\n\n return this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n protected updateTextInfo(): void {\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n\n this.yogaNode.markDirty()\n this.requestRender()\n this.emit(\"line-info-change\")\n }\n\n // Undefined = 0,\n // Exactly = 1,\n // AtMost = 2\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // When widthMode is Undefined, Yoga is asking for the intrinsic/natural width\n // Pass width=0 to measureForDimensions to signal we want max-content (no wrapping)\n // The Zig code treats width=0 with wrap_mode != none as null wrap_width,\n // which triggers no-wrap mode and returns iter_mod.getMaxLineWidth()\n let effectiveWidth: number\n if (widthMode === MeasureMode.Undefined || isNaN(width)) {\n effectiveWidth = 0\n } else {\n effectiveWidth = width\n }\n\n const effectiveHeight = isNaN(height) ? 1 : height\n\n const measureResult = this.textBufferView.measureForDimensions(\n Math.floor(effectiveWidth),\n Math.floor(effectiveHeight),\n )\n\n const measuredWidth = measureResult ? Math.max(1, measureResult.maxWidth) : 1\n const measuredHeight = measureResult ? Math.max(1, measureResult.lineCount) : 1\n\n if (widthMode === MeasureMode.AtMost && this._positionType !== \"absolute\") {\n return {\n width: Math.min(effectiveWidth, measuredWidth),\n height: Math.min(effectiveHeight, measuredHeight),\n }\n }\n\n // NOTE: Yoga may use these measurements or not.\n // If the yoga node settings and the parent allow this node to grow, it will.\n return {\n width: measuredWidth,\n height: measuredHeight,\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n let changed: boolean\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n changed = true\n } else if (selection?.isStart) {\n changed = this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n } else {\n changed = this.textBufferView.updateLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.textBufferView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.textBufferView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.textBufferView.getSelection()\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.textBuffer.ptr) {\n buffer.drawTextBuffer(this.textBufferView, this.x, this.y)\n }\n }\n\n destroy(): void {\n if (this.isDestroyed) return\n\n this.textBuffer.setSyntaxStyle(null)\n this._textBufferSyntaxStyle.destroy()\n this.textBufferView.destroy()\n this.textBuffer.destroy()\n super.destroy()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onBgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n // Override in subclasses if needed\n }\n}\n", "import type { TextRenderable } from \".\"\nimport { BaseRenderable, type BaseRenderableOptions } from \"../Renderable\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { isStyledText, StyledText } from \"../lib/styled-text\"\nimport { type TextChunk } from \"../text-buffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface TextNodeOptions extends BaseRenderableOptions {\n fg?: string | RGBA\n bg?: string | RGBA\n attributes?: number\n link?: { url: string }\n}\n\nconst BrandedTextNodeRenderable: unique symbol = Symbol.for(\"@opentui/core/TextNodeRenderable\")\n\nexport function isTextNodeRenderable(obj: any): obj is TextNodeRenderable {\n return !!obj?.[BrandedTextNodeRenderable]\n}\n\nfunction styledTextToTextNodes(styledText: StyledText): TextNodeRenderable[] {\n return styledText.chunks.map((chunk) => {\n const node = new TextNodeRenderable({\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n link: chunk.link,\n })\n node.add(chunk.text)\n return node\n })\n}\n\nexport class TextNodeRenderable extends BaseRenderable {\n [BrandedTextNodeRenderable] = true\n\n private _fg?: RGBA\n private _bg?: RGBA\n private _attributes: number\n private _link?: { url: string }\n private _children: (string | TextNodeRenderable)[] = []\n public parent: TextNodeRenderable | null = null\n\n constructor(options: TextNodeOptions) {\n super(options)\n\n this._fg = options.fg ? parseColor(options.fg) : undefined\n this._bg = options.bg ? parseColor(options.bg) : undefined\n this._attributes = options.attributes ?? 0\n this._link = options.link\n }\n\n public get children(): (string | TextNodeRenderable)[] {\n return this._children\n }\n\n public set children(children: (string | TextNodeRenderable)[]) {\n this._children = children\n this.requestRender()\n }\n\n public requestRender(): void {\n this.markDirty()\n this.parent?.requestRender()\n }\n\n public add(obj: TextNodeRenderable | StyledText | string, index?: number): number {\n if (typeof obj === \"string\") {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n this.requestRender()\n return insertIndex\n }\n\n if (isTextNodeRenderable(obj)) {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n obj.parent = this\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n obj.parent = this\n this.requestRender()\n return insertIndex\n }\n\n if (isStyledText(obj)) {\n const textNodes = styledTextToTextNodes(obj)\n if (index !== undefined) {\n this._children.splice(index, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return insertIndex\n }\n\n throw new Error(\"TextNodeRenderable only accepts strings, TextNodeRenderable instances, or StyledText instances\")\n }\n\n public replace(obj: TextNodeRenderable | string, index: number) {\n this._children[index] = obj\n if (typeof obj !== \"string\") {\n obj.parent = this\n }\n this.requestRender()\n }\n\n public insertBefore(\n child: string | TextNodeRenderable | StyledText,\n anchorNode: TextNodeRenderable | string | unknown,\n ): this {\n if (!anchorNode || !isTextNodeRenderable(anchorNode)) {\n throw new Error(\"Anchor must be a TextNodeRenderable\")\n }\n\n const anchorIndex = this._children.indexOf(anchorNode)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor node not found in children\")\n }\n\n if (typeof child === \"string\") {\n this._children.splice(anchorIndex, 0, child)\n } else if (isTextNodeRenderable(child)) {\n this._children.splice(anchorIndex, 0, child)\n child.parent = this\n } else if (child instanceof StyledText) {\n const textNodes = styledTextToTextNodes(child)\n this._children.splice(anchorIndex, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n } else {\n throw new Error(\"Child must be a string, TextNodeRenderable, or StyledText instance\")\n }\n\n this.requestRender()\n return this\n }\n\n public remove(id: string): this {\n const childIndex = this.getRenderableIndex(id)\n if (childIndex === -1) {\n throw new Error(\"Child not found in children\")\n }\n\n const child = this._children[childIndex] as TextNodeRenderable\n\n this._children.splice(childIndex, 1)\n child.parent = null\n this.requestRender()\n return this\n }\n\n public clear(): void {\n this._children = []\n this.requestRender()\n }\n\n public mergeStyles(parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } }): {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n link?: { url: string }\n } {\n return {\n fg: this._fg ?? parentStyle.fg,\n bg: this._bg ?? parentStyle.bg,\n attributes: this._attributes | parentStyle.attributes,\n link: this._link ?? parentStyle.link,\n }\n }\n\n public gatherWithInheritedStyle(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n const currentStyle = this.mergeStyles(parentStyle)\n\n const chunks: TextChunk[] = []\n\n for (const child of this._children) {\n if (typeof child === \"string\") {\n chunks.push({\n __isChunk: true,\n text: child,\n fg: currentStyle.fg,\n bg: currentStyle.bg,\n attributes: currentStyle.attributes,\n link: currentStyle.link,\n })\n } else {\n const childChunks = child.gatherWithInheritedStyle(currentStyle)\n chunks.push(...childChunks)\n }\n }\n\n this.markClean()\n\n return chunks\n }\n\n public static fromString(text: string, options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n node.add(text)\n return node\n }\n\n public static fromNodes(nodes: TextNodeRenderable[], options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n for (const childNode of nodes) {\n node.add(childNode)\n }\n return node\n }\n\n public toChunks(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number; link?: { url: string } } = {\n fg: undefined,\n bg: undefined,\n attributes: 0,\n },\n ): TextChunk[] {\n return this.gatherWithInheritedStyle(parentStyle)\n }\n\n public getChildren(): BaseRenderable[] {\n return this._children.filter((child): child is TextNodeRenderable => typeof child !== \"string\")\n }\n\n public getChildrenCount(): number {\n return this._children.length\n }\n\n public getRenderable(id: string): BaseRenderable | undefined {\n return this._children.find((child): child is TextNodeRenderable => typeof child !== \"string\" && child.id === id)\n }\n\n public getRenderableIndex(id: string): number {\n return this._children.findIndex((child) => isTextNodeRenderable(child) && child.id === id)\n }\n\n public get fg(): RGBA | undefined {\n return this._fg\n }\n\n public set fg(fg: RGBA | string | undefined) {\n if (!fg) {\n this._fg = undefined\n this.requestRender()\n return\n }\n this._fg = parseColor(fg)\n this.requestRender()\n }\n\n public set bg(bg: RGBA | string | undefined) {\n if (!bg) {\n this._bg = undefined\n this.requestRender()\n return\n }\n this._bg = parseColor(bg)\n this.requestRender()\n }\n\n public get bg(): RGBA | undefined {\n return this._bg\n }\n\n public set attributes(attributes: number) {\n this._attributes = attributes\n this.requestRender()\n }\n\n public get attributes(): number {\n return this._attributes\n }\n\n public set link(link: { url: string } | undefined) {\n this._link = link\n this.requestRender()\n }\n\n public get link(): { url: string } | undefined {\n return this._link\n }\n\n public findDescendantById(id: string): BaseRenderable | undefined {\n return undefined\n }\n}\n\nexport class RootTextNodeRenderable extends TextNodeRenderable {\n textParent: TextRenderable\n\n constructor(\n private readonly ctx: RenderContext,\n options: TextNodeOptions,\n textParent: TextRenderable,\n ) {\n super(options)\n this.textParent = textParent\n }\n\n public requestRender(): void {\n this.markDirty()\n this.ctx.requestRender()\n }\n}\n", "// Browser stub for node:util\nexport function inspect(obj: any, _options?: any): string {\n try {\n return JSON.stringify(obj, null, 2)\n } catch {\n return String(obj)\n }\n}\n\nexport function format(fmt: string, ...args: any[]): string {\n let i = 0\n return fmt.replace(/%[sdjifoO%]/g, (match) => {\n if (match === \"%%\") return \"%\"\n if (i >= args.length) return match\n return String(args[i++])\n })\n}\n\nexport function promisify(fn: Function): Function {\n return (...args: any[]) =>\n new Promise((resolve, reject) => {\n fn(...args, (err: any, result: any) => {\n if (err) reject(err)\n else resolve(result)\n })\n })\n}\n\nexport function isDeepStrictEqual(a: any, b: any): boolean {\n return JSON.stringify(a) === JSON.stringify(b)\n}\n\nexport default { inspect, format, promisify, isDeepStrictEqual }\n", "import { isRenderable, BrandedRenderable, registerMaybeMakeRenderable } from \"../../renderable-brand\"\nimport type { Renderable, RenderableOptions } from \"../../Renderable\"\nimport type { RenderContext } from \"../../types\"\nimport util from \"node:util\"\n\nexport type VChild = VNode | Renderable | VChild[] | null | undefined | false\n\nexport interface PendingCall {\n method: string\n args: any[]\n isProperty?: boolean\n}\n\nconst BrandedVNode: unique symbol = Symbol.for(\"@opentui/core/VNode\")\n\nexport interface VNode<P = any, C = VChild[]> {\n [BrandedVNode]: true\n type: Construct<P>\n props?: P\n children?: C\n __delegateMap?: Record<string, string>\n __pendingCalls?: PendingCall[]\n}\n\n// Type that represents a VNode with Renderable methods available for chaining\nexport type ProxiedVNode<TCtor extends RenderableConstructor<any>> = VNode<\n TCtor extends RenderableConstructor<infer P> ? P : any\n> & {\n [K in keyof InstanceType<TCtor>]: InstanceType<TCtor>[K] extends (...args: infer Args) => any\n ? (...args: Args) => ProxiedVNode<TCtor>\n : InstanceType<TCtor>[K]\n}\n\nexport interface RenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>> {\n new (ctx: RenderContext, options: P): Renderable\n}\n\nexport type FunctionalConstruct<P = any> = (props: P, children?: VChild[]) => VNode\n\nexport type Construct<P = any> =\n | RenderableConstructor<P extends RenderableOptions<any> ? P : never>\n | FunctionalConstruct<P>\n\nfunction isRenderableConstructor<P extends RenderableOptions<any> = RenderableOptions<any>>(\n value: any,\n): value is RenderableConstructor<P> {\n return typeof value === \"function\" && value.prototype && !!value.prototype[BrandedRenderable]\n}\n\nfunction flattenChildren(children: VChild[]): VChild[] {\n const result: VChild[] = []\n for (const child of children) {\n if (Array.isArray(child)) {\n result.push(...flattenChildren(child))\n } else if (child !== null && child !== undefined && child !== false) {\n result.push(child)\n }\n }\n return result\n}\n\n// Overloads for proper typing\nexport function h<TCtor extends RenderableConstructor<any>>(\n type: TCtor,\n props?: TCtor extends RenderableConstructor<infer P> ? P : never,\n ...children: VChild[]\n): ProxiedVNode<TCtor>\nexport function h<P>(type: FunctionalConstruct<P>, props?: P, ...children: VChild[]): VNode<P>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): VNode<P> | ProxiedVNode<any>\nexport function h<P>(type: Construct<P>, props?: P, ...children: VChild[]): any {\n if (typeof type !== \"function\") {\n throw new TypeError(\"h() received an invalid vnode type\")\n }\n\n const vnode: VNode<P> = {\n [BrandedVNode]: true,\n type,\n props,\n children: flattenChildren(children),\n __pendingCalls: [],\n }\n\n if (isRenderableConstructor(type)) {\n return new Proxy(vnode, {\n get(target, prop, receiver) {\n // Return VNode properties directly\n if (prop in target) {\n return Reflect.get(target, prop, receiver)\n }\n\n if (typeof prop === \"string\") {\n const prototype = type.prototype\n const hasMethod =\n prototype &&\n (typeof prototype[prop] === \"function\" ||\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop))\n\n if (hasMethod) {\n return (...args: any[]) => {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args })\n return target\n }\n }\n }\n\n return Reflect.get(target, prop, receiver)\n },\n\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && isRenderableConstructor(type)) {\n const prototype = type.prototype\n const descriptor =\n Object.getOwnPropertyDescriptor(prototype, prop) ||\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype), prop)\n\n if (descriptor && descriptor.set) {\n target.__pendingCalls = target.__pendingCalls || []\n target.__pendingCalls.push({ method: prop, args: [value], isProperty: true })\n return true\n }\n }\n\n return Reflect.set(target, prop, value, receiver)\n },\n })\n }\n\n return vnode\n}\n\nexport function isVNode(node: any): node is VNode {\n return node && node[BrandedVNode]\n}\n\nexport function maybeMakeRenderable(\n ctx: RenderContext,\n node: Renderable | VNode<any, any[]> | unknown,\n): Renderable | null {\n if (isRenderable(node)) return node\n if (isVNode(node)) return instantiate(ctx, node)\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"maybeMakeRenderable received an invalid node\", util.inspect(node, { depth: 2 }))\n }\n return null\n}\n\n// Register with renderable-brand so Renderable.ts can call this without a circular import.\nregisterMaybeMakeRenderable(maybeMakeRenderable)\n\nexport function wrapWithDelegates<T extends InstanceType<RenderableConstructor>>(\n instance: T,\n delegateMap: Record<string, string> | undefined,\n): T {\n if (!delegateMap || Object.keys(delegateMap).length === 0) return instance\n\n const descendantCache = new Map<string, Renderable | undefined>()\n\n const getDescendant = (id: string): Renderable | undefined => {\n if (descendantCache.has(id)) {\n const cached = descendantCache.get(id)\n if (cached !== undefined) {\n return cached\n }\n }\n const descendant = (instance as Renderable).findDescendantById(id)\n if (descendant) {\n descendantCache.set(id, descendant)\n }\n return descendant\n }\n\n const proxy = new Proxy(instance as any, {\n get(target, prop, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n const value = (host as any)[prop]\n if (typeof value === \"function\") {\n return value.bind(host)\n }\n return value\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === \"string\" && delegateMap[prop]) {\n const host = getDescendant(delegateMap[prop])\n if (host) {\n return Reflect.set(host as any, prop, value)\n }\n }\n return Reflect.set(target, prop, value, receiver)\n },\n })\n return proxy\n}\n\nexport type InstantiateFn<NodeType extends VNode | Renderable> = Renderable & { __node?: NodeType }\n\nexport function instantiate<NodeType extends VNode | Renderable>(\n ctx: RenderContext,\n node: NodeType,\n): InstantiateFn<NodeType> {\n if (isRenderable(node)) return node\n\n if (!node || typeof node !== \"object\") {\n throw new TypeError(\"mount() received an invalid vnode\")\n }\n\n const vnode = node as VNode\n const { type, props } = vnode\n const children = flattenChildren(vnode.children || [])\n const delegateMap = (vnode as any).__delegateMap as Record<string, string> | undefined\n\n if (isRenderableConstructor(type)) {\n const instance = new type(ctx, (props || {}) as any)\n\n for (const child of children) {\n if (isRenderable(child)) {\n instance.add(child)\n } else {\n const mounted = instantiate(ctx, child as NodeType)\n instance.add(mounted)\n }\n }\n\n const delegatedInstance = wrapWithDelegates(instance, delegateMap)\n\n const pendingCalls = (vnode as any).__pendingCalls as PendingCall[] | undefined\n if (pendingCalls) {\n for (const call of pendingCalls) {\n if (call.isProperty) {\n ;(delegatedInstance as any)[call.method] = call.args[0]\n } else {\n ;(delegatedInstance as any)[call.method].apply(delegatedInstance, call.args)\n }\n }\n }\n\n return delegatedInstance\n }\n\n // Functional construct: resolve to a concrete vnode and mount it\n const resolved = (type as FunctionalConstruct)(props || ({} as any), children)\n const inst = instantiate(ctx, resolved)\n\n return wrapWithDelegates(inst, delegateMap) as InstantiateFn<NodeType>\n}\n\nexport type DelegateMap<T> = Partial<Record<keyof T, string>>\n\nexport type ValidateShape<Given, AllowedKeys> = {\n [K in keyof Given]: K extends keyof AllowedKeys ? NonNullable<Given[K]> : never\n}\n\ntype InferNode<T> = T extends InstantiateFn<infer U> ? U : never\n\nexport function delegate<\n Factory extends InstantiateFn<any>,\n InnerNode extends InferNode<Factory>,\n TargetMap extends Record<keyof InnerNode, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: Factory): Renderable\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n TargetMap extends Record<keyof InstanceType<ConstructorType>, string>,\n const Mapping extends Partial<TargetMap>,\n>(mapping: ValidateShape<Mapping, TargetMap>, vnode: ProxiedVNode<ConstructorType>): ProxiedVNode<ConstructorType>\n\nexport function delegate<\n ConstructorType extends RenderableConstructor<any>,\n const Mapping extends DelegateMap<InstanceType<ConstructorType>>,\n>(mapping: ValidateShape<Mapping, string>, vnode: VNode & { type: ConstructorType }): VNode\n\n/**\n * Controlled delegation that routes selected properties/methods\n * to a descendant renderable identified by ID.\n */\nexport function delegate<NodeType extends VNode | Renderable | InstantiateFn<any>>(\n mapping: Record<string, string>,\n vnode: NodeType,\n): VNode | Renderable {\n if (isRenderable(vnode)) {\n return wrapWithDelegates(vnode, mapping)\n }\n if (!vnode || typeof vnode !== \"object\") return vnode\n vnode.__delegateMap = { ...(vnode.__delegateMap || {}), ...mapping }\n return vnode\n}\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] +\\S/,\n listReplaceTask: /^\\[[ xX]\\] +/,\n listTaskCheckbox: /\\[[ xX]\\]/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (const item of list.items) {\n this.lexer.state.top = false;\n item.tokens = this.lexer.blockTokens(item.text, []);\n if (item.task) {\n // Remove checkbox markdown from item tokens\n item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n if (item.tokens[0]?.type === 'text' || item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].raw = item.tokens[0].raw.replace(this.rules.other.listReplaceTask, '');\n item.tokens[0].text = item.tokens[0].text.replace(this.rules.other.listReplaceTask, '');\n for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n break;\n }\n }\n }\n\n const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n if (taskRaw) {\n const checkboxToken: Tokens.Checkbox = {\n type: 'checkbox',\n raw: taskRaw[0] + ' ',\n checked: taskRaw[0] !== '[ ]',\n };\n item.checked = checkboxToken.checked;\n if (list.loose) {\n if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n item.tokens[0].tokens.unshift(checkboxToken);\n } else {\n item.tokens.unshift({\n type: 'paragraph',\n raw: checkboxToken.raw,\n text: checkboxToken.raw,\n tokens: [checkboxToken],\n });\n }\n } else {\n item.tokens.unshift(checkboxToken);\n }\n }\n }\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = item.tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (const item of list.items) {\n item.loose = true;\n for (const token of item.tokens) {\n if (token.type === 'text') {\n token.type = 'paragraph';\n }\n }\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n public inlineQueue: { src: string, tokens: Token[] }[];\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escape(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escape(token.text) as RendererOutput);\n }\n}\n", "import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n\n checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n return raw as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[]): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n break;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n break;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n break;\n }\n case 'code': {\n out += this.renderer.code(token);\n break;\n }\n case 'table': {\n out += this.renderer.table(token);\n break;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n break;\n }\n case 'list': {\n out += this.renderer.list(token);\n break;\n }\n case 'checkbox': {\n out += this.renderer.checkbox(token);\n break;\n }\n case 'html': {\n out += this.renderer.html(token);\n break;\n }\n case 'def': {\n out += this.renderer.def(token);\n break;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n break;\n }\n case 'text': {\n out += this.renderer.text(token);\n break;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'checkbox': {\n out += renderer.checkbox(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import {\n type ColorInput,\n OptimizedBuffer,\n parseColor,\n Renderable,\n type RenderableOptions,\n type RenderContext,\n RGBA,\n} from \"../index\"\n\nconst defaultThumbBackgroundColor = RGBA.fromHex(\"#9a9ea3\")\nconst defaultTrackBackgroundColor = RGBA.fromHex(\"#252527\")\n\nexport interface SliderOptions extends RenderableOptions<SliderRenderable> {\n orientation: \"vertical\" | \"horizontal\"\n value?: number\n min?: number\n max?: number\n viewPortSize?: number\n backgroundColor?: ColorInput\n foregroundColor?: ColorInput\n onChange?: (value: number) => void\n}\n\nexport class SliderRenderable extends Renderable {\n public readonly orientation: \"vertical\" | \"horizontal\"\n private _value: number\n private _min: number\n private _max: number\n private _viewPortSize: number\n private _backgroundColor: RGBA\n private _foregroundColor: RGBA\n private _onChange?: (value: number) => void\n\n constructor(ctx: RenderContext, options: SliderOptions) {\n super(ctx, { flexShrink: 0, ...options })\n this.orientation = options.orientation\n this._min = options.min ?? 0\n this._max = options.max ?? 100\n this._value = options.value ?? this._min\n this._viewPortSize = options.viewPortSize ?? Math.max(1, (this._max - this._min) * 0.1)\n this._onChange = options.onChange\n this._backgroundColor = options.backgroundColor ? parseColor(options.backgroundColor) : defaultTrackBackgroundColor\n this._foregroundColor = options.foregroundColor ? parseColor(options.foregroundColor) : defaultThumbBackgroundColor\n\n this.setupMouseHandling()\n }\n\n get value(): number {\n return this._value\n }\n\n set value(newValue: number) {\n const clamped = Math.max(this._min, Math.min(this._max, newValue))\n if (clamped !== this._value) {\n this._value = clamped\n this._onChange?.(clamped)\n this.emit(\"change\", { value: clamped })\n this.requestRender()\n }\n }\n\n get min(): number {\n return this._min\n }\n\n set min(newMin: number) {\n if (newMin !== this._min) {\n this._min = newMin\n if (this._value < newMin) {\n this.value = newMin\n }\n this.requestRender()\n }\n }\n\n get max(): number {\n return this._max\n }\n\n set max(newMax: number) {\n if (newMax !== this._max) {\n this._max = newMax\n if (this._value > newMax) {\n this.value = newMax\n }\n this.requestRender()\n }\n }\n\n set viewPortSize(size: number) {\n const clampedSize = Math.max(0.01, Math.min(size, this._max - this._min))\n if (clampedSize !== this._viewPortSize) {\n this._viewPortSize = clampedSize\n this.requestRender()\n }\n }\n\n get viewPortSize(): number {\n return this._viewPortSize\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: ColorInput) {\n this._backgroundColor = parseColor(value)\n this.requestRender()\n }\n\n get foregroundColor(): RGBA {\n return this._foregroundColor\n }\n\n set foregroundColor(value: ColorInput) {\n this._foregroundColor = parseColor(value)\n this.requestRender()\n }\n\n private calculateDragOffsetVirtual(event: any): number {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const mousePos = (this.orientation === \"vertical\" ? event.y : event.x) - trackStart\n const virtualMousePos = Math.max(\n 0,\n Math.min((this.orientation === \"vertical\" ? this.height : this.width) * 2, mousePos * 2),\n )\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.max(0, Math.min(virtualThumbSize, virtualMousePos - virtualThumbStart))\n }\n\n private setupMouseHandling(): void {\n let isDragging = false\n let dragOffsetVirtual = 0\n\n this.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n const thumb = this.getThumbRect()\n const inThumb =\n event.x >= thumb.x && event.x < thumb.x + thumb.width && event.y >= thumb.y && event.y < thumb.y + thumb.height\n\n if (inThumb) {\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n } else {\n this.updateValueFromMouseDirect(event)\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n }\n }\n\n this.onMouseDrag = (event) => {\n if (!isDragging) return\n event.stopPropagation()\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n\n this.onMouseUp = (event) => {\n if (isDragging) {\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n isDragging = false\n }\n }\n\n private updateValueFromMouseDirect(event: any): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const ratio = trackSize === 0 ? 0 : clampedMousePos / trackSize\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private updateValueFromMouseWithOffset(event: any, offsetVirtual: number): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const virtualTrackSize = trackSize * 2\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const virtualMousePos = clampedMousePos * 2\n\n const virtualThumbSize = this.getVirtualThumbSize()\n const maxThumbStart = Math.max(0, virtualTrackSize - virtualThumbSize)\n\n let desiredThumbStart = virtualMousePos - offsetVirtual\n desiredThumbStart = Math.max(0, Math.min(maxThumbStart, desiredThumbStart))\n\n const ratio = maxThumbStart === 0 ? 0 : desiredThumbStart / maxThumbStart\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private getThumbRect(): { x: number; y: number; width: number; height: number } {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n\n const realThumbStart = Math.floor(virtualThumbStart / 2)\n const realThumbSize = Math.ceil((virtualThumbStart + virtualThumbSize) / 2) - realThumbStart\n\n if (this.orientation === \"vertical\") {\n return {\n x: this.x,\n y: this.y + realThumbStart,\n width: this.width,\n height: Math.max(1, realThumbSize),\n }\n } else {\n return {\n x: this.x + realThumbStart,\n y: this.y,\n width: Math.max(1, realThumbSize),\n height: this.height,\n }\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.orientation === \"horizontal\") {\n this.renderHorizontal(buffer)\n } else {\n this.renderVertical(buffer)\n }\n }\n\n private renderHorizontal(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startX = Math.max(0, realStartCell)\n const endX = Math.min(this.width - 1, realEndCell)\n\n for (let realX = startX; realX <= endX; realX++) {\n const virtualCellStart = realX * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else {\n const isLeftHalf = thumbStartInCell === virtualCellStart\n if (isLeftHalf) {\n char = \"\u258C\"\n } else {\n char = \"\u2590\"\n }\n }\n\n for (let y = 0; y < this.height; y++) {\n buffer.setCellWithAlphaBlending(this.x + realX, this.y + y, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private renderVertical(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startY = Math.max(0, realStartCell)\n const endY = Math.min(this.height - 1, realEndCell)\n\n for (let realY = startY; realY <= endY; realY++) {\n const virtualCellStart = realY * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"\u2588\"\n } else if (coverage > 0) {\n const virtualPositionInCell = thumbStartInCell - virtualCellStart\n if (virtualPositionInCell === 0) {\n char = \"\u2580\"\n } else {\n char = \"\u2584\"\n }\n }\n\n for (let x = 0; x < this.width; x++) {\n buffer.setCellWithAlphaBlending(this.x + x, this.y + realY, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private getVirtualThumbSize(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return virtualTrackSize\n\n const viewportSize = Math.max(1, this._viewPortSize)\n const contentSize = range + viewportSize\n\n if (contentSize <= viewportSize) return virtualTrackSize\n\n const thumbRatio = viewportSize / contentSize\n const calculatedSize = Math.floor(virtualTrackSize * thumbRatio)\n\n return Math.max(1, Math.min(calculatedSize, virtualTrackSize))\n }\n\n private getVirtualThumbStart(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return 0\n\n const valueRatio = (this._value - this._min) / range\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.round(valueRatio * (virtualTrackSize - virtualThumbSize))\n }\n}\n", "// zig-registry.ts \u2014 Browser-safe types and render-lib registry.\n// Zero native imports. Can be imported by both native and browser code.\n\nimport type {\n CursorStyle,\n CursorStyleOptions,\n DebugOverlayCorner,\n Highlight,\n LineInfo,\n MousePointerStyle,\n WidthMethod,\n} from \"./types\"\nimport type {\n AllocatorStats,\n BuildOptions,\n NativeSpanFeedOptions,\n NativeSpanFeedStats,\n ReserveInfo,\n} from \"./zig-structs\"\nimport type { RGBA } from \"./lib/RGBA\"\nimport type { OptimizedBuffer } from \"./buffer\"\nimport type { TextBuffer } from \"./text-buffer\"\n\n// \u2500\u2500\u2500 Portable types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type Pointer = number\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n}\n\n/**\n * VisualCursor represents a cursor position with both visual and logical coordinates.\n * Visual coordinates (visualRow, visualCol) are VIEWPORT-RELATIVE.\n * This means visualRow=0 is the first visible line in the viewport, not the first line in the document.\n * Logical coordinates (logicalRow, logicalCol) are document-absolute.\n */\nexport interface VisualCursor {\n visualRow: number // Viewport-relative row (0 = top of viewport)\n visualCol: number // Viewport-relative column (0 = left edge of viewport when not wrapping)\n logicalRow: number // Document-absolute row\n logicalCol: number // Document-absolute column\n offset: number // Global display-width offset from buffer start\n}\n\nexport interface LogicalCursor {\n row: number\n col: number\n offset: number\n}\n\nexport interface CursorState {\n x: number\n y: number\n visible: boolean\n style: CursorStyle\n blinking: boolean\n color: RGBA\n}\n\nexport type NativeSpanFeedEventHandler = (eventId: number, arg0: Pointer, arg1: number | bigint) => void\n\n// Re-export types that consumers need\nexport type { LineInfo, AllocatorStats, BuildOptions, ReserveInfo }\n\n// \u2500\u2500\u2500 RenderLib interface \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface RenderLib {\n createRenderer: (width: number, height: number, options?: { testing?: boolean; remote?: boolean }) => Pointer | null\n setTerminalEnvVar: (renderer: Pointer, key: string, value: string) => boolean\n destroyRenderer: (renderer: Pointer) => void\n setUseThread: (renderer: Pointer, useThread: boolean) => void\n setBackgroundColor: (renderer: Pointer, color: RGBA) => void\n setRenderOffset: (renderer: Pointer, offset: number) => void\n updateStats: (renderer: Pointer, time: number, fps: number, frameCallbackTime: number) => void\n updateMemoryStats: (renderer: Pointer, heapUsed: number, heapTotal: number, arrayBuffers: number) => void\n render: (renderer: Pointer, force: boolean) => void\n getNextBuffer: (renderer: Pointer) => OptimizedBuffer\n getCurrentBuffer: (renderer: Pointer) => OptimizedBuffer\n createOptimizedBuffer: (\n width: number,\n height: number,\n widthMethod: WidthMethod,\n respectAlpha?: boolean,\n id?: string,\n ) => OptimizedBuffer\n destroyOptimizedBuffer: (bufferPtr: Pointer) => void\n drawFrameBuffer: (\n targetBufferPtr: Pointer,\n destX: number,\n destY: number,\n bufferPtr: Pointer,\n sourceX?: number,\n sourceY?: number,\n sourceWidth?: number,\n sourceHeight?: number,\n ) => void\n getBufferWidth: (buffer: Pointer) => number\n getBufferHeight: (buffer: Pointer) => number\n bufferClear: (buffer: Pointer, color: RGBA) => void\n bufferGetCharPtr: (buffer: Pointer) => Pointer\n bufferGetFgPtr: (buffer: Pointer) => Pointer\n bufferGetBgPtr: (buffer: Pointer) => Pointer\n bufferGetAttributesPtr: (buffer: Pointer) => Pointer\n bufferGetRespectAlpha: (buffer: Pointer) => boolean\n bufferSetRespectAlpha: (buffer: Pointer, respectAlpha: boolean) => void\n bufferGetId: (buffer: Pointer) => string\n bufferGetRealCharSize: (buffer: Pointer) => number\n bufferWriteResolvedChars: (buffer: Pointer, outputBuffer: Uint8Array, addLineBreaks: boolean) => number\n bufferDrawText: (\n buffer: Pointer,\n text: string,\n x: number,\n y: number,\n color: RGBA,\n bgColor?: RGBA,\n attributes?: number,\n ) => void\n bufferSetCellWithAlphaBlending: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferSetCell: (\n buffer: Pointer,\n x: number,\n y: number,\n char: string,\n color: RGBA,\n bgColor: RGBA,\n attributes?: number,\n ) => void\n bufferFillRect: (buffer: Pointer, x: number, y: number, width: number, height: number, color: RGBA) => void\n bufferDrawSuperSampleBuffer: (\n buffer: Pointer,\n x: number,\n y: number,\n pixelDataPtr: Pointer,\n pixelDataLength: number,\n format: \"bgra8unorm\" | \"rgba8unorm\",\n alignedBytesPerRow: number,\n ) => void\n bufferDrawPackedBuffer: (\n buffer: Pointer,\n dataPtr: Pointer,\n dataLen: number,\n posX: number,\n posY: number,\n terminalWidthCells: number,\n terminalHeightCells: number,\n ) => void\n bufferDrawGrayscaleBuffer: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrayscaleBufferSupersampled: (\n buffer: Pointer,\n posX: number,\n posY: number,\n intensitiesPtr: Pointer,\n srcWidth: number,\n srcHeight: number,\n fg: RGBA | null,\n bg: RGBA | null,\n ) => void\n bufferDrawGrid: (\n buffer: Pointer,\n borderChars: Uint32Array,\n borderFg: RGBA,\n borderBg: RGBA,\n columnOffsets: Int32Array,\n columnCount: number,\n rowOffsets: Int32Array,\n rowCount: number,\n options: { drawInner: boolean; drawOuter: boolean },\n ) => void\n bufferDrawBox: (\n buffer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n borderChars: Uint32Array,\n packedOptions: number,\n borderColor: RGBA,\n backgroundColor: RGBA,\n title: string | null,\n ) => void\n bufferResize: (buffer: Pointer, width: number, height: number) => void\n resizeRenderer: (renderer: Pointer, width: number, height: number) => void\n setCursorPosition: (renderer: Pointer, x: number, y: number, visible: boolean) => void\n setCursorColor: (renderer: Pointer, color: RGBA) => void\n getCursorState: (renderer: Pointer) => CursorState\n setCursorStyleOptions: (renderer: Pointer, options: CursorStyleOptions) => void\n setDebugOverlay: (renderer: Pointer, enabled: boolean, corner: DebugOverlayCorner) => void\n clearTerminal: (renderer: Pointer) => void\n setTerminalTitle: (renderer: Pointer, title: string) => void\n copyToClipboardOSC52: (renderer: Pointer, target: number, payload: Uint8Array) => boolean\n clearClipboardOSC52: (renderer: Pointer, target: number) => boolean\n addToHitGrid: (renderer: Pointer, x: number, y: number, width: number, height: number, id: number) => void\n clearCurrentHitGrid: (renderer: Pointer) => void\n hitGridPushScissorRect: (renderer: Pointer, x: number, y: number, width: number, height: number) => void\n hitGridPopScissorRect: (renderer: Pointer) => void\n hitGridClearScissorRects: (renderer: Pointer) => void\n addToCurrentHitGridClipped: (\n renderer: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n id: number,\n ) => void\n checkHit: (renderer: Pointer, x: number, y: number) => number\n getHitGridDirty: (renderer: Pointer) => boolean\n dumpHitGrid: (renderer: Pointer) => void\n dumpBuffers: (renderer: Pointer, timestamp?: number) => void\n dumpStdoutBuffer: (renderer: Pointer, timestamp?: number) => void\n restoreTerminalModes: (renderer: Pointer) => void\n enableMouse: (renderer: Pointer, enableMovement: boolean) => void\n disableMouse: (renderer: Pointer) => void\n enableKittyKeyboard: (renderer: Pointer, flags: number) => void\n disableKittyKeyboard: (renderer: Pointer) => void\n setKittyKeyboardFlags: (renderer: Pointer, flags: number) => void\n getKittyKeyboardFlags: (renderer: Pointer) => number\n setupTerminal: (renderer: Pointer, useAlternateScreen: boolean) => void\n suspendRenderer: (renderer: Pointer) => void\n resumeRenderer: (renderer: Pointer) => void\n queryPixelResolution: (renderer: Pointer) => void\n writeOut: (renderer: Pointer, data: string | Uint8Array) => void\n\n // TextBuffer methods\n createTextBuffer: (widthMethod: WidthMethod) => TextBuffer\n destroyTextBuffer: (buffer: Pointer) => void\n textBufferGetLength: (buffer: Pointer) => number\n textBufferGetByteSize: (buffer: Pointer) => number\n\n textBufferReset: (buffer: Pointer) => void\n textBufferClear: (buffer: Pointer) => void\n textBufferRegisterMemBuffer: (buffer: Pointer, bytes: Uint8Array, owned?: boolean) => number\n textBufferReplaceMemBuffer: (buffer: Pointer, memId: number, bytes: Uint8Array, owned?: boolean) => boolean\n textBufferClearMemRegistry: (buffer: Pointer) => void\n textBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n textBufferAppend: (buffer: Pointer, bytes: Uint8Array) => void\n textBufferAppendFromMemId: (buffer: Pointer, memId: number) => void\n textBufferLoadFile: (buffer: Pointer, path: string) => boolean\n textBufferSetStyledText: (\n buffer: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number; link?: { url: string } }>,\n ) => void\n textBufferSetDefaultFg: (buffer: Pointer, fg: RGBA | null) => void\n textBufferSetDefaultBg: (buffer: Pointer, bg: RGBA | null) => void\n textBufferSetDefaultAttributes: (buffer: Pointer, attributes: number | null) => void\n textBufferResetDefaults: (buffer: Pointer) => void\n textBufferGetTabWidth: (buffer: Pointer) => number\n textBufferSetTabWidth: (buffer: Pointer, width: number) => void\n textBufferGetLineCount: (buffer: Pointer) => number\n getPlainTextBytes: (buffer: Pointer, maxLength: number) => Uint8Array | null\n textBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n textBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // TextBufferView methods\n createTextBufferView: (textBuffer: Pointer) => Pointer\n destroyTextBufferView: (view: Pointer) => void\n textBufferViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n textBufferViewResetSelection: (view: Pointer) => void\n textBufferViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n textBufferViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n textBufferViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => boolean\n textBufferViewResetLocalSelection: (view: Pointer) => void\n textBufferViewSetWrapWidth: (view: Pointer, width: number) => void\n textBufferViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n textBufferViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n textBufferViewSetViewport: (view: Pointer, x: number, y: number, width: number, height: number) => void\n textBufferViewGetLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n textBufferViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewGetPlainTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n textBufferViewSetTabIndicator: (view: Pointer, indicator: number) => void\n textBufferViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n textBufferViewSetTruncate: (view: Pointer, truncate: boolean) => void\n textBufferViewMeasureForDimensions: (\n view: Pointer,\n width: number,\n height: number,\n ) => { lineCount: number; maxWidth: number } | null\n textBufferViewGetVirtualLineCount: (view: Pointer) => number\n\n readonly encoder: TextEncoder\n readonly decoder: TextDecoder\n bufferDrawTextBufferView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n bufferDrawEditorView: (buffer: Pointer, view: Pointer, x: number, y: number) => void\n\n // EditBuffer methods\n createEditBuffer: (widthMethod: WidthMethod) => Pointer\n destroyEditBuffer: (buffer: Pointer) => void\n editBufferSetText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferSetTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferReplaceText: (buffer: Pointer, textBytes: Uint8Array) => void\n editBufferReplaceTextFromMem: (buffer: Pointer, memId: number) => void\n editBufferGetText: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferInsertChar: (buffer: Pointer, char: string) => void\n editBufferInsertText: (buffer: Pointer, text: string) => void\n editBufferDeleteChar: (buffer: Pointer) => void\n editBufferDeleteCharBackward: (buffer: Pointer) => void\n editBufferDeleteRange: (buffer: Pointer, startLine: number, startCol: number, endLine: number, endCol: number) => void\n editBufferNewLine: (buffer: Pointer) => void\n editBufferDeleteLine: (buffer: Pointer) => void\n editBufferMoveCursorLeft: (buffer: Pointer) => void\n editBufferMoveCursorRight: (buffer: Pointer) => void\n editBufferMoveCursorUp: (buffer: Pointer) => void\n editBufferMoveCursorDown: (buffer: Pointer) => void\n editBufferGotoLine: (buffer: Pointer, line: number) => void\n editBufferSetCursor: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorToLineCol: (buffer: Pointer, line: number, col: number) => void\n editBufferSetCursorByOffset: (buffer: Pointer, offset: number) => void\n editBufferGetCursorPosition: (buffer: Pointer) => LogicalCursor\n editBufferGetId: (buffer: Pointer) => number\n editBufferGetTextBuffer: (buffer: Pointer) => Pointer\n editBufferDebugLogRope: (buffer: Pointer) => void\n editBufferUndo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferRedo: (buffer: Pointer, maxLength: number) => Uint8Array | null\n editBufferCanUndo: (buffer: Pointer) => boolean\n editBufferCanRedo: (buffer: Pointer) => boolean\n editBufferClearHistory: (buffer: Pointer) => void\n editBufferClear: (buffer: Pointer) => void\n editBufferGetNextWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetPrevWordBoundary: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferGetEOL: (buffer: Pointer) => { row: number; col: number; offset: number }\n editBufferOffsetToPosition: (buffer: Pointer, offset: number) => { row: number; col: number; offset: number } | null\n editBufferPositionToOffset: (buffer: Pointer, row: number, col: number) => number\n editBufferGetLineStartOffset: (buffer: Pointer, row: number) => number\n editBufferGetTextRange: (\n buffer: Pointer,\n startOffset: number,\n endOffset: number,\n maxLength: number,\n ) => Uint8Array | null\n editBufferGetTextRangeByCoords: (\n buffer: Pointer,\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n maxLength: number,\n ) => Uint8Array | null\n\n // EditorView methods\n createEditorView: (editBufferPtr: Pointer, viewportWidth: number, viewportHeight: number) => Pointer\n destroyEditorView: (view: Pointer) => void\n editorViewSetViewportSize: (view: Pointer, width: number, height: number) => void\n editorViewSetViewport: (\n view: Pointer,\n x: number,\n y: number,\n width: number,\n height: number,\n moveCursor: boolean,\n ) => void\n editorViewGetViewport: (view: Pointer) => { offsetY: number; offsetX: number; height: number; width: number }\n editorViewSetScrollMargin: (view: Pointer, margin: number) => void\n editorViewSetWrapMode: (view: Pointer, mode: \"none\" | \"char\" | \"word\") => void\n editorViewGetVirtualLineCount: (view: Pointer) => number\n editorViewGetTotalVirtualLineCount: (view: Pointer) => number\n editorViewGetTextBufferView: (view: Pointer) => Pointer\n editorViewSetSelection: (\n view: Pointer,\n start: number,\n end: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n ) => void\n editorViewResetSelection: (view: Pointer) => void\n editorViewGetSelection: (view: Pointer) => { start: number; end: number } | null\n editorViewSetLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewUpdateSelection: (view: Pointer, end: number, bgColor: RGBA | null, fgColor: RGBA | null) => void\n editorViewUpdateLocalSelection: (\n view: Pointer,\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor: RGBA | null,\n fgColor: RGBA | null,\n updateCursor: boolean,\n followCursor: boolean,\n ) => boolean\n\n editorViewResetLocalSelection: (view: Pointer) => void\n editorViewGetSelectedTextBytes: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetCursor: (view: Pointer) => { row: number; col: number }\n editorViewGetText: (view: Pointer, maxLength: number) => Uint8Array | null\n editorViewGetVisualCursor: (view: Pointer) => VisualCursor\n editorViewMoveUpVisual: (view: Pointer) => void\n editorViewMoveDownVisual: (view: Pointer) => void\n editorViewDeleteSelectedText: (view: Pointer) => void\n editorViewSetCursorByOffset: (view: Pointer, offset: number) => void\n editorViewGetNextWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetPrevWordBoundary: (view: Pointer) => VisualCursor\n editorViewGetEOL: (view: Pointer) => VisualCursor\n editorViewGetVisualSOL: (view: Pointer) => VisualCursor\n editorViewGetVisualEOL: (view: Pointer) => VisualCursor\n editorViewGetLineInfo: (view: Pointer) => LineInfo\n editorViewGetLogicalLineInfo: (view: Pointer) => LineInfo\n editorViewSetPlaceholderStyledText: (\n view: Pointer,\n chunks: Array<{ text: string; fg?: RGBA | null; bg?: RGBA | null; attributes?: number }>,\n ) => void\n editorViewSetTabIndicator: (view: Pointer, indicator: number) => void\n editorViewSetTabIndicatorColor: (view: Pointer, color: RGBA) => void\n\n bufferPushScissorRect: (buffer: Pointer, x: number, y: number, width: number, height: number) => void\n bufferPopScissorRect: (buffer: Pointer) => void\n bufferClearScissorRects: (buffer: Pointer) => void\n bufferPushOpacity: (buffer: Pointer, opacity: number) => void\n bufferPopOpacity: (buffer: Pointer) => void\n bufferGetCurrentOpacity: (buffer: Pointer) => number\n bufferClearOpacity: (buffer: Pointer) => void\n textBufferAddHighlightByCharRange: (buffer: Pointer, highlight: Highlight) => void\n textBufferAddHighlight: (buffer: Pointer, lineIdx: number, highlight: Highlight) => void\n textBufferRemoveHighlightsByRef: (buffer: Pointer, hlRef: number) => void\n textBufferClearLineHighlights: (buffer: Pointer, lineIdx: number) => void\n textBufferClearAllHighlights: (buffer: Pointer) => void\n textBufferSetSyntaxStyle: (buffer: Pointer, style: Pointer | null) => void\n textBufferGetLineHighlights: (buffer: Pointer, lineIdx: number) => Array<Highlight>\n textBufferGetHighlightCount: (buffer: Pointer) => number\n\n getArenaAllocatedBytes: () => number\n getBuildOptions: () => BuildOptions\n getAllocatorStats: () => AllocatorStats\n\n createSyntaxStyle: () => Pointer\n destroySyntaxStyle: (style: Pointer) => void\n syntaxStyleRegister: (style: Pointer, name: string, fg: RGBA | null, bg: RGBA | null, attributes: number) => number\n syntaxStyleResolveByName: (style: Pointer, name: string) => number | null\n syntaxStyleGetStyleCount: (style: Pointer) => number\n\n getTerminalCapabilities: (renderer: Pointer) => any\n processCapabilityResponse: (renderer: Pointer, response: string) => void\n\n encodeUnicode: (\n text: string,\n widthMethod: WidthMethod,\n ) => { ptr: Pointer; data: Array<{ width: number; char: number }> } | null\n freeUnicode: (encoded: { ptr: Pointer; data: Array<{ width: number; char: number }> }) => void\n bufferDrawChar: (buffer: Pointer, char: number, x: number, y: number, fg: RGBA, bg: RGBA, attributes?: number) => void\n\n registerNativeSpanFeedStream: (stream: Pointer, handler: NativeSpanFeedEventHandler) => void\n unregisterNativeSpanFeedStream: (stream: Pointer) => void\n createNativeSpanFeed: (options?: NativeSpanFeedOptions | null) => Pointer\n attachNativeSpanFeed: (stream: Pointer) => number\n destroyNativeSpanFeed: (stream: Pointer) => void\n streamWrite: (stream: Pointer, data: Uint8Array | string) => number\n streamCommit: (stream: Pointer) => number\n streamDrainSpans: (stream: Pointer, outBuffer: Uint8Array, maxSpans: number) => number\n streamClose: (stream: Pointer) => number\n streamSetOptions: (stream: Pointer, options: NativeSpanFeedOptions) => number\n streamGetStats: (stream: Pointer) => NativeSpanFeedStats | null\n streamReserve: (stream: Pointer, minLen: number) => { status: number; info: ReserveInfo | null }\n streamCommitReserved: (stream: Pointer, length: number) => number\n\n onNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onceNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n offNativeEvent: (name: string, handler: (data: ArrayBuffer) => void) => void\n onAnyNativeEvent: (handler: (name: string, data: ArrayBuffer) => void) => void\n}\n\n// \u2500\u2500\u2500 Registry \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _renderLib: RenderLib | undefined\n\nexport function registerRenderLib(lib: RenderLib): void {\n _renderLib = lib\n}\n\nexport function resolveRenderLib(): RenderLib {\n if (!_renderLib) {\n throw new Error(\"No RenderLib registered. In Bun, import '@opentui/core' or '@opentui/core/native' (which loads zig.ts). In browsers, call registerRenderLib() with a browser implementation.\")\n }\n return _renderLib\n}\n\nexport function hasRenderLib(): boolean {\n return _renderLib !== undefined\n}\n\n// In Bun, auto-load the native FFI render lib by importing zig.ts.\n// The variable path prevents bundlers (esbuild, Vite) from statically\n// resolving and including zig.ts in browser bundles.\n// In browsers, typeof Bun is undefined so this block is skipped entirely.\nif (typeof globalThis.Bun !== \"undefined\") {\n const zigPath = \"./zig\"\n try {\n await import(zigPath)\n } catch {\n // Native module not available (e.g. not built yet).\n // resolveRenderLib() will throw a clear error if called.\n }\n}\n\n", "import { Renderable, type ViewportBounds } from \"..\"\nimport { coordinateToCharacterIndex, fonts } from \"./ascii.font\"\n\nclass SelectionAnchor {\n private relativeX: number\n private relativeY: number\n\n constructor(\n private renderable: Renderable,\n absoluteX: number,\n absoluteY: number,\n ) {\n this.relativeX = absoluteX - this.renderable.x\n this.relativeY = absoluteY - this.renderable.y\n }\n\n get x(): number {\n return this.renderable.x + this.relativeX\n }\n\n get y(): number {\n return this.renderable.y + this.relativeY\n }\n}\n\nexport class Selection {\n private _anchor: SelectionAnchor\n private _focus: { x: number; y: number }\n private _selectedRenderables: Renderable[] = []\n private _touchedRenderables: Renderable[] = []\n private _isActive: boolean = true\n private _isDragging: boolean = true\n private _isStart: boolean = false\n\n constructor(anchorRenderable: Renderable, anchor: { x: number; y: number }, focus: { x: number; y: number }) {\n this._anchor = new SelectionAnchor(anchorRenderable, anchor.x, anchor.y)\n this._focus = { ...focus }\n }\n\n get isStart(): boolean {\n return this._isStart\n }\n\n set isStart(value: boolean) {\n this._isStart = value\n }\n\n get anchor(): { x: number; y: number } {\n return { x: this._anchor.x, y: this._anchor.y }\n }\n\n get focus(): { x: number; y: number } {\n return { ...this._focus }\n }\n\n set focus(value: { x: number; y: number }) {\n this._focus = { ...value }\n }\n\n get isActive(): boolean {\n return this._isActive\n }\n\n set isActive(value: boolean) {\n this._isActive = value\n }\n\n get isDragging(): boolean {\n return this._isDragging\n }\n\n set isDragging(value: boolean) {\n this._isDragging = value\n }\n\n get bounds(): ViewportBounds {\n const minX = Math.min(this._anchor.x, this._focus.x)\n const maxX = Math.max(this._anchor.x, this._focus.x)\n const minY = Math.min(this._anchor.y, this._focus.y)\n const maxY = Math.max(this._anchor.y, this._focus.y)\n\n // Selection bounds are inclusive of both anchor and focus\n // A selection from (0,0) to (0,0) covers 1 cell\n // A selection from (0,0) to (5,3) covers cells from (0,0) to (5,3) inclusive\n const width = maxX - minX + 1\n const height = maxY - minY + 1\n\n return {\n x: minX,\n y: minY,\n width,\n height,\n }\n }\n\n updateSelectedRenderables(selectedRenderables: Renderable[]): void {\n this._selectedRenderables = selectedRenderables\n }\n\n get selectedRenderables(): Renderable[] {\n return this._selectedRenderables\n }\n\n updateTouchedRenderables(touchedRenderables: Renderable[]): void {\n this._touchedRenderables = touchedRenderables\n }\n\n get touchedRenderables(): Renderable[] {\n return this._touchedRenderables\n }\n\n getSelectedText(): string {\n const selectedTexts = this._selectedRenderables\n // Sort by reading order: top-to-bottom, then left-to-right\n .sort((a, b) => {\n const aY = a.y\n const bY = b.y\n if (aY !== bY) {\n return aY - bY\n }\n return a.x - b.x\n })\n .filter((renderable) => !renderable.isDestroyed)\n .map((renderable) => renderable.getSelectedText())\n .filter((text) => text)\n return selectedTexts.join(\"\\n\")\n }\n}\n\nexport interface LocalSelectionBounds {\n anchorX: number\n anchorY: number\n focusX: number\n focusY: number\n isActive: boolean\n}\n\nexport function convertGlobalToLocalSelection(\n globalSelection: Selection | null,\n localX: number,\n localY: number,\n): LocalSelectionBounds | null {\n if (!globalSelection?.isActive) {\n return null\n }\n\n return {\n anchorX: globalSelection.anchor.x - localX,\n anchorY: globalSelection.anchor.y - localY,\n focusX: globalSelection.focus.x - localX,\n focusY: globalSelection.focus.y - localY,\n isActive: true,\n }\n}\n\nexport class ASCIIFontSelectionHelper {\n private localSelection: { start: number; end: number } | null = null\n\n constructor(\n private getText: () => string,\n private getFont: () => keyof typeof fonts,\n ) {}\n\n hasSelection(): boolean {\n return this.localSelection !== null\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.localSelection\n }\n\n shouldStartSelection(localX: number, localY: number, width: number, height: number): boolean {\n if (localX < 0 || localX >= width || localY < 0 || localY >= height) {\n return false\n }\n\n const text = this.getText()\n const font = this.getFont()\n const charIndex = coordinateToCharacterIndex(localX, text, font)\n\n return charIndex >= 0 && charIndex <= text.length\n }\n\n onLocalSelectionChanged(localSelection: LocalSelectionBounds | null, width: number, height: number): boolean {\n const previousSelection = this.localSelection\n\n if (!localSelection?.isActive) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n const text = this.getText()\n const font = this.getFont()\n\n const selStart = { x: localSelection.anchorX, y: localSelection.anchorY }\n const selEnd = { x: localSelection.focusX, y: localSelection.focusY }\n\n if (height - 1 < selStart.y || 0 > selEnd.y) {\n this.localSelection = null\n return previousSelection !== null\n }\n\n let startCharIndex = 0\n let endCharIndex = text.length\n\n if (selStart.y > height - 1) {\n // Selection starts below us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selStart.y >= 0 && selStart.y <= height - 1) {\n // Selection starts within our Y range - use the actual start X coordinate\n if (selStart.x > 0) {\n startCharIndex = coordinateToCharacterIndex(selStart.x, text, font)\n }\n }\n\n if (selEnd.y < 0) {\n // Selection ends above us - we're not selected\n this.localSelection = null\n return previousSelection !== null\n } else if (selEnd.y >= 0 && selEnd.y <= height - 1) {\n // Selection ends within our Y range - use the actual end X coordinate\n if (selEnd.x >= 0) {\n endCharIndex = coordinateToCharacterIndex(selEnd.x, text, font)\n } else {\n endCharIndex = 0\n }\n }\n\n if (startCharIndex < endCharIndex && startCharIndex >= 0 && endCharIndex <= text.length) {\n this.localSelection = { start: startCharIndex, end: endCharIndex }\n } else {\n this.localSelection = null\n }\n\n return (\n previousSelection?.start !== this.localSelection?.start || previousSelection?.end !== this.localSelection?.end\n )\n }\n}\n", "import { EventEmitter } from \"events\"\nimport type { RenderContext, CursorStyle, CursorStyleOptions, MousePointerStyle, WidthMethod } from \"./core-shims/types\"\nimport type { RGBA } from \"./core-shims/rgba\"\n\nexport class BrowserKeyHandler extends EventEmitter {\n constructor() {\n super()\n }\n\n processInput(_data: string): boolean {\n return false\n }\n}\n\nexport class BrowserInternalKeyHandler extends BrowserKeyHandler {\n private renderableHandlers: Map<string, Set<Function>> = new Map()\n\n onInternal(event: string, handler: Function): void {\n if (!this.renderableHandlers.has(event)) {\n this.renderableHandlers.set(event, new Set())\n }\n this.renderableHandlers.get(event)!.add(handler)\n }\n\n offInternal(event: string, handler: Function): void {\n const handlers = this.renderableHandlers.get(event)\n if (handlers) {\n handlers.delete(handler)\n }\n }\n\n override emit(event: string, ...args: any[]): boolean {\n // Emit to global listeners first\n const hasGlobal = super.emit(event, ...args)\n\n // Then emit to renderable handlers\n const renderableSet = this.renderableHandlers.get(event)\n if (renderableSet && renderableSet.size > 0) {\n for (const handler of [...renderableSet]) {\n try {\n handler(...args)\n } catch (e) {\n console.error(`[BrowserInternalKeyHandler] Error in ${event} handler:`, e)\n }\n // Check propagation\n if (args[0] && args[0].propagationStopped) break\n }\n return true\n }\n\n return hasGlobal\n }\n}\n\nexport class BrowserRenderContext extends EventEmitter implements RenderContext {\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n private _renderRequested = false\n private _onRenderRequest: (() => void) | null = null\n private _lifecyclePasses: Set<any> = new Set()\n private _focusedRenderable: any | null = null\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n public cursorBlinking: boolean = false\n\n public keyInput: BrowserKeyHandler\n public _internalKeyInput: BrowserInternalKeyHandler\n\n constructor(width: number, height: number, widthMethod: WidthMethod = \"wcwidth\") {\n super()\n this._width = width\n this._height = height\n this._widthMethod = widthMethod\n this.keyInput = new BrowserKeyHandler()\n this._internalKeyInput = new BrowserInternalKeyHandler()\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get capabilities(): any {\n return null\n }\n\n get hasSelection(): boolean {\n return false\n }\n\n get currentFocusedRenderable(): any | null {\n return this._focusedRenderable\n }\n\n setOnRenderRequest(callback: () => void): void {\n this._onRenderRequest = callback\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n this.emit(\"resize\", width, height)\n }\n\n // RenderContext interface methods\n addToHitGrid(_x: number, _y: number, _width: number, _height: number, _id: number): void {}\n\n pushHitGridScissorRect(_x: number, _y: number, _width: number, _height: number): void {}\n\n popHitGridScissorRect(): void {}\n\n clearHitGridScissorRects(): void {}\n\n requestRender(): void {\n if (this._renderRequested) return\n this._renderRequested = true\n this._onRenderRequest?.()\n this._renderRequested = false\n }\n\n setCursorPosition(_x: number, _y: number, _visible: boolean): void {}\n\n setCursorStyle(options: CursorStyleOptions): void {\n if (options.color) {\n this.cursorColor = options.color\n }\n if (options.style) {\n this.cursorStyleType = options.style\n }\n if (options.blinking !== undefined) {\n this.cursorBlinking = options.blinking\n }\n }\n\n setCursorColor(color: RGBA): void {\n this.cursorColor = color\n }\n\n setMousePointer(_shape: MousePointerStyle): void {}\n\n requestLive(): void {}\n\n dropLive(): void {}\n\n getSelection(): any | null {\n return null\n }\n\n requestSelectionUpdate(): void {}\n\n focusRenderable(renderable: any): void {\n if (this._focusedRenderable && this._focusedRenderable !== renderable) {\n this._focusedRenderable.blur?.()\n }\n this._focusedRenderable = renderable\n }\n\n registerLifecyclePass(renderable: any): void {\n this._lifecyclePasses.add(renderable)\n }\n\n unregisterLifecyclePass(renderable: any): void {\n this._lifecyclePasses.delete(renderable)\n }\n\n getLifecyclePasses(): Set<any> {\n return this._lifecyclePasses\n }\n\n clearSelection(): void {}\n\n startSelection(_renderable: any, _x: number, _y: number): void {}\n\n updateSelection(\n _currentRenderable: any | undefined,\n _x: number,\n _y: number,\n _options?: { finishDragging?: boolean },\n ): void {}\n}\n", "\nvar loadYoga = (() => {\n var _scriptDir = import.meta.url;\n \n return (\nfunction(loadYoga) {\n loadYoga = loadYoga || {};\n\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H;H=\"data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMkAEEBIQQgA0EIaiAAQfwAaiIFIAAgAUEBdGpB8gBqIgEvAQAQHwJAAkAgAyoCCCIHIAIqAgAiBlwEQCAHIAdbBEAgAi0ABCECDAILIAYgBlwhBAsgAi0ABCECIARFDQAgAy0ADCACQf8BcUYNAQsgBSABIAYgAhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgA0EQaiQACwoAIABBMGtBCkkLBQAQAgALBAAgAAsUACAABEAgACAAKAIAKAIEEQAACwsrAQF/IAAoAgwiAQRAIAEQIwsgACgCACIBBEAgACABNgIEIAEQIwsgABAjC4EEAQN/IwBBEGsiAyQAIABCADcCBCAAQcEgOwAVIABCADcCDCAAQoCAgICAgIACNwIYIAAgAC0AF0HgAXE6ABcgACAALQAAQeABcUEFcjoAACAAIAAtABRBgAFxOgAUIABBIGpBAEHOABAqGiAAQgA3AXIgAEGEgBA2AW4gAEEANgF6IABCADcCgAEgAEIANwKIASAAQgA3ApABIABCADcCoAEgAEKAgICAgICA4P8ANwKYASAAQQA6AKgBIABBrAFqQQBBxAEQKhogAEHwAmohBCAAQbABaiECA0AgAkKAgID8i4CAwL9/NwIQIAJCgYCAgBA3AgggAkKAgID8i4CAwL9/NwIAIAJBGGoiAiAERw0ACyAAQoCAgPyLgIDAv383AvACIABCgICA/IuAgMC/fzcCgAMgAEKBgICAEDcC+AIgAEKAgID+h4CA4P8ANwKUAyAAQoCAgP6HgIDg/wA3AowDIABBiANqIgIgAi0AAEH4AXE6AAAgAEGcA2pBAEHYABAqGiAAQQA6AIQEIABBgICA/gc2AoAEIABBADoA/AMgAEGAgID+BzYC+AMgACABNgL0AyABBEAgAS0ACEEBcQRAIAAgAC0AFEHzAXFBCHI6ABQgACAALwAVQfD/A3FBBHI7ABULIANBEGokACAADwsgA0GiGjYCACADEHIQJAALMwAgACABQQJ0QfwlaigCAEECdGoqApQDIABBFGoiACABQQEgAhAiIAAgAUEBIAIQIZKSC44DAQp/IwBB0AJrIgEkACAAKALoAyIDIAAoAuwDIgVHBEAgAUGMAmohBiABQeABaiEHIAFBIGohCCABQRxqIQkgAUEQaiEEA0AgAygCACICLQAXQRB0QYCAMHFBgIAgRgRAIAFBCGpBAEHEAhAqGiABQYCAgP4HNgIMIARBADoACCAEQgA3AgAgCUEAQcQBECoaIAghAANAIABCgICA/IuAgMC/fzcCECAAQoGAgIAQNwIIIABCgICA/IuAgMC/fzcCACAAQRhqIgAgB0cNAAsgAUKAgID8i4CAwL9/NwPwASABQoGAgIAQNwPoASABQoCAgPyLgIDAv383A+ABIAFCgICA/oeAgOD/ADcChAIgAUKAgID+h4CA4P8ANwL8ASABIAEtAPgBQfgBcToA+AEgBkEAQcAAECoaIAJBmAFqIAFBCGpBxAIQKxogAkIANwKMAyACIAItAAAiAEEBciIKQfsBcSAKIABBBHEbOgAAIAIQTyACEF4LIANBBGoiAyAFRw0ACwsgAUHQAmokAAtMAQF/QQEhAQJAIAAtAB5BB3ENACAALQAiQQdxDQAgAC0ALkEHcQ0AIAAtACpBB3ENACAALQAmQQdxDQAgAC0AKEEHcUEARyEBCyABC3YCAX8BfSMAQRBrIgQkACAEQQhqIAAgAUECdEHcJWooAgAgAhBQQwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAACXQwAAAAAgBSAFWxsLogQCBn8CfgJ/QQghBAJAAkAgAEFHSw0AA0BBCCAEIARBCE0bIQRB6DopAwAiBwJ/QQggAEEDakF8cSAAQQhNGyIAQf8ATQRAIABBA3ZBAWsMAQsgAEEdIABnIgFrdkEEcyABQQJ0a0HuAGogAEH/H00NABpBPyAAQR4gAWt2QQJzIAFBAXRrQccAaiIBIAFBP08bCyIDrYgiCFBFBEADQCAIIAh6IgiIIQcCfiADIAinaiIDQQR0IgJB6DJqKAIAIgEgAkHgMmoiBkcEQCABIAQgABBjIgUNBSABKAIEIgUgASgCCDYCCCABKAIIIAU2AgQgASAGNgIIIAEgAkHkMmoiAigCADYCBCACIAE2AgAgASgCBCABNgIIIANBAWohAyAHQgGIDAELQeg6Qeg6KQMAQn4gA62JgzcDACAHQgGFCyIIQgBSDQALQeg6KQMAIQcLAkAgB1BFBEBBPyAHeadrIgZBBHQiAkHoMmooAgAhAQJAIAdCgICAgARUDQBB4wAhAyABIAJB4DJqIgJGDQADQCADRQ0BIAEgBCAAEGMiBQ0FIANBAWshAyABKAIIIgEgAkcNAAsgAiEBCyAAQTBqEGQNASABRQ0EIAEgBkEEdEHgMmoiAkYNBANAIAEgBCAAEGMiBQ0EIAEoAggiASACRw0ACwwECyAAQTBqEGRFDQMLQQAhBSAEIARBAWtxDQEgAEFHTQ0ACwsgBQwBC0EACwtwAgF/AX0jAEEQayIEJAAgBEEIaiAAIAFBAnRB7CVqKAIAIAIQKEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAIAUgBVsbC6ADAQN/IAEgAEEEaiIEakEBa0EAIAFrcSIFIAJqIAAgACgCACIBakEEa00EfyAAKAIEIgMgACgCCDYCCCAAKAIIIAM2AgQgBCAFRwRAIAAgAEEEaygCAEF+cWsiAyAFIARrIgQgAygCAGoiBTYCACAFQXxxIANqQQRrIAU2AgAgACAEaiIAIAEgBGsiATYCAAsCQCABIAJBGGpPBEAgACACakEIaiIDIAEgAmtBCGsiATYCACABQXxxIANqQQRrIAFBAXI2AgAgAwJ/IAMoAgBBCGsiAUH/AE0EQCABQQN2QQFrDAELIAFnIQQgAUEdIARrdkEEcyAEQQJ0a0HuAGogAUH/H00NABpBPyABQR4gBGt2QQJzIARBAXRrQccAaiIBIAFBP08bCyIBQQR0IgRB4DJqNgIEIAMgBEHoMmoiBCgCADYCCCAEIAM2AgAgAygCCCADNgIEQeg6Qeg6KQMAQgEgAa2GhDcDACAAIAJBCGoiATYCACABQXxxIABqQQRrIAE2AgAMAQsgACABakEEayABNgIACyAAQQRqBSADCwvmAwEFfwJ/QbAwKAIAIgEgAEEHakF4cSIDaiECAkAgA0EAIAEgAk8bDQAgAj8AQRB0SwRAIAIQFkUNAQtBsDAgAjYCACABDAELQfw7QTA2AgBBfwsiAkF/RwRAIAAgAmoiA0EQayIBQRA2AgwgAUEQNgIAAkACf0HgOigCACIABH8gACgCCAVBAAsgAkYEQCACIAJBBGsoAgBBfnFrIgRBBGsoAgAhBSAAIAM2AghBcCAEIAVBfnFrIgAgACgCAGpBBGstAABBAXFFDQEaIAAoAgQiAyAAKAIINgIIIAAoAgggAzYCBCAAIAEgAGsiATYCAAwCCyACQRA2AgwgAkEQNgIAIAIgAzYCCCACIAA2AgRB4DogAjYCAEEQCyACaiIAIAEgAGsiATYCAAsgAUF8cSAAakEEayABQQFyNgIAIAACfyAAKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABQR0gAWciA2t2QQRzIANBAnRrQe4AaiABQf8fTQ0AGkE/IAFBHiADa3ZBAnMgA0EBdGtBxwBqIgEgAUE/TxsLIgFBBHQiA0HgMmo2AgQgACADQegyaiIDKAIANgIIIAMgADYCACAAKAIIIAA2AgRB6DpB6DopAwBCASABrYaENwMACyACQX9HC80BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQSBqIgEvAQAQHwJAAkAgAyoCCCIHIAIqAgAiBlwEQCAHIAdbBEAgAi0ABCECDAILIAYgBlwhBAsgAi0ABCECIARFDQAgAy0ADCACQf8BcUYNAQsgBSABIAYgAhA5A0AgAC0AACIBQQRxDQEgACABQQRyOgAAIAAoAhAiAQRAIAAgAREAAAsgAEGAgID+BzYCnAEgACgC5AMiAA0ACwsgA0EQaiQAC0ABAX8CQEGsOy0AAEEBcQRAQag7KAIAIQIMAQtBAUGAJxAMIQJBrDtBAToAAEGoOyACNgIACyACIAAgAUEAEBMLzQECA38CfSMAQRBrIgMkAEEBIQQgA0EIaiAAQfwAaiIFIAAgAUEBdGpBMmoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALDwAgASAAKAIAaiACOQMACw0AIAEgACgCAGorAwALCwAgAARAIAAQIwsLxwECBH8CfSMAQRBrIgIkACACQQhqIABB/ABqIgQgAEEeaiIFLwEAEB9BASEDAkACQCACKgIIIgcgASoCACIGXARAIAcgB1sEQCABLQAEIQEMAgsgBiAGXCEDCyABLQAEIQEgA0UNACACLQAMIAFB/wFxRg0BCyAEIAUgBiABEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyACQRBqJAALlgMCA34CfyAAvSICQjSIp0H/D3EiBEH/D0YEQCAARAAAAAAAAPA/oiIAIACjDwsgAkIBhiIBQoCAgICAgIDw/wBYBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgIDw/wBRGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEH/B0oEQANAAkAgAUKAgICAgICACH0iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEH/B0oNAAtB/wchBAsCQCABQoCAgICAgIAIfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIQUgAUIBhiEBIAUNAAsLIAJCgICAgICAgICAf4MgAUKAgICAgICACH0gBK1CNIaEIAFBASAEa62IIARBAEobhL8LiwEBA38DQCAAQQR0IgFB5DJqIAFB4DJqIgI2AgAgAUHoMmogAjYCACAAQQFqIgBBwABHDQALQTAQZBpBmDtBBjYCAEGcO0EANgIAEJwBQZw7Qcg7KAIANgIAQcg7QZg7NgIAQcw7QcMBNgIAQdA7QQA2AgAQjwFB0DtByDsoAgA2AgBByDtBzDs2AgALjwEBAn8jAEEQayIEJAACfUMAAAAAIAAvABVBgOAAcUUNABogBEEIaiAAQRRqIgBBASACQQJGQQF0IAFB/gFxQQJHGyIFIAIQNgJAIAQtAAxFDQAgBEEIaiAAIAUgAhA2IAQtAAxBA0YNACAAIAEgAiADEIEBDAELIAAgASACIAMQgAGMCyEDIARBEGokACADC4QBAQJ/AkACQCAAKALoAyICIAAoAuwDIgNGDQADQCACKAIAIAFGDQEgAkEEaiICIANHDQALDAELIAIgA0YNACABLQAXQRB0QYCAMHFBgIAgRgRAIAAgACgC4ANBAWs2AuADCyACIAJBBGoiASADIAFrEDMaIAAgA0EEazYC7ANBAQ8LQQALCwBByDEgACABEEkLPAAgAEUEQCACQQVHQQAgAhtFBEBBuDAgAyAEEEkaDwsgAyAEEHAaDwsgACABIAIgAyAEIAAoAgQRDQAaCyYBAX8jAEEQayIBJAAgASAANgIMQbgwQdglIAAQSRogAUEQaiQAC4cDAwN/BXwCfSAAKgKgA7siBiACoCECIAAqApwDuyIHIAGgIQggACgC9AMqAhgiC0MAAAAAXARAIAAqApADuyEJIAAqAowDIQwgACAHIAu7IgFBACAALQAAQRBxIgNBBHYiBBA0OAKcAyAAIAYgAUEAIAQQNDgCoAMgASAMuyIHohBsIgYgBmIiBEUgBplELUMc6+I2Gj9jcUUEQCAEIAZEAAAAAAAA8L+gmUQtQxzr4jYaP2NFciEFCyACIAmgIQogCCAHoCEHAn8gASAJohBsIgYgBmIiBEUEQEEAIAaZRC1DHOviNho/Yw0BGgsgBCAGRAAAAAAAAPC/oJlELUMc6+I2Gj9jRXILIQQgACAHIAEgA0EARyIDIAVxIAMgBUEBc3EQNCAIIAFBACADEDSTOAKMAyAAIAogASADIARxIAMgBEEBc3EQNCACIAFBACADEDSTOAKQAwsgACgC6AMiAyAAKALsAyIARwRAA0AgAygCACAIIAIQcyADQQRqIgMgAEcNAAsLC1UBAX0gAEEUaiIAIAEgAkECSSICIAQgBRA1IQYgACABIAIgBCAFEC0iBUMAAAAAYCADIAVecQR9IAUFIAZDAAAAAGBFBEAgAw8LIAYgAyADIAZdGwsLeAEBfwJAIAAoAgAiAgRAA0AgAUUNAiACIAEoAgQ2AgQgAiABKAIINgIIIAEoAgAhASAAKAIAIQAgAigCACICDQALCyAAIAEQPA8LAkAgAEUNACAAKAIAIgFFDQAgAEEANgIAA0AgASgCACEAIAEQIyAAIgENAAsLC5kCAgZ/AX0gAEEUaiEHQQMhBCAALQAUQQJ2QQNxIQUCQAJ/AkAgAUEBIAAoAuQDGyIIQQJGBEACQCAFQQJrDgIEAAILQQIhBAwDC0ECIQRBACAFQQFLDQEaCyAECyEGIAUhBAsgACAEIAggAyACIARBAkkiBRsQbiEKIAAgBiAIIAIgAyAFGxBuIQMgAEGcA2oiAEEBIAFBAkZBAXQiCCAFG0ECdGogCiAHIAQgASACECKSOAIAIABBAyABQQJHQQF0IgkgBRtBAnRqIAogByAEIAEgAhAhkjgCACAAIAhBASAGQQF2IgQbQQJ0aiADIAcgBiABIAIQIpI4AgAgACAJQQMgBBtBAnRqIAMgByAGIAEgAhAhkjgCAAvUAgEDfyMAQdACayIBJAAgAUEIakEAQcQCECoaIAFBADoAGCABQgA3AxAgAUGAgID+BzYCDCABQRxqQQBBxAEQKhogAUHgAWohAyABQSBqIQIDQCACQoCAgPyLgIDAv383AhAgAkKBgICAEDcCCCACQoCAgPyLgIDAv383AgAgAkEYaiICIANHDQALIAFCgICA/IuAgMC/fzcD8AEgAUKBgICAEDcD6AEgAUKAgID8i4CAwL9/NwPgASABQoCAgP6HgIDg/wA3AoQCIAFCgICA/oeAgOD/ADcC/AEgASABLQD4AUH4AXE6APgBIAFBjAJqQQBBwAAQKhogAEGYAWogAUEIakHEAhArGiAAQgA3AowDIAAgAC0AAEEBcjoAACAAEE8gACgC6AMiAiAAKALsAyIARwRAA0AgAigCABB3IAJBBGoiAiAARw0ACwsgAUHQAmokAAuuAgIKfwJ9IwBBIGsiASQAIAFBgAI7AB4gAEHuAGohByAAQfgDaiEFIABB8gBqIQggAEH2AGohCSAAQfwAaiEDQQAhAANAIAFBEGogAyAJIAFBHmogBGotAAAiAkEBdCIEaiIGLwEAEB8CQAJAIAEtABRFDQAgAUEIaiADIAYvAQAQHyABIAMgBCAIai8BABAfIAEtAAwgAS0ABEcNAAJAIAEqAggiDCAMXCIKIAEqAgAiCyALXHJFBEAgDCALk4tDF7fROF0NAQwCCyAKRSALIAtbcg0BCyABQRBqIAMgBi8BABAfDAELIAFBEGogAyAEIAdqLwEAEB8LIAUgAkEDdGoiAiABLQAUOgAEIAIgASgCEDYCAEEBIQQgACECQQEhACACRQ0ACyABQSBqJAALMgACf0EAIAAvABVBgOAAcUGAwABGDQAaQQEgABA7QwAAAABcDQAaIAAQQEMAAAAAXAsLewEBfSADIASTIgMgA1sEfUMAAAAAIABBFGoiACABIAIgBSAGEDUiByAEkyAHIAdcGyIHQ///f38gACABIAIgBSAGEC0iBSAEkyAFIAVcGyIEIAMgAyAEXhsiAyADIAddGyAHIAMgAyADXBsgAyADWyAHIAdbcRsFIAMLC98FAwR/BX0BfCAJQwAAAABdIAhDAAAAAF1yBH8gDQUgBSESIAEhEyADIRQgByERIAwqAhgiFUMAAAAAXARAIAG7IBW7IhZBAEEAEDQhEyADuyAWQQBBABA0IRQgBbsgFkEAQQAQNCESIAe7IBZBAEEAEDQhEQsCf0EAIAAgBEcNABogEiATk4tDF7fROF0gEyATXCINIBIgElxyRQ0AGkEAIBIgElsNABogDQshDAJAIAIgBkcNACAUIBRcIg0gESARXHJFBEAgESAUk4tDF7fROF0hDwwBCyARIBFbDQAgDSEPC0EBIQ5BASENAkAgDA0AIAEgCpMhAQJAIABFBEAgASABXCIAIAggCFxyRQRAQQAhDCABIAiTi0MXt9E4XUUNAgwDC0EAIQwgCCAIWw0BIAANAgwBCyAAQQJGIQwgAEECRw0AIARBAUcNACABIAhgDQECQCAIIAhcIgAgASABXHJFBEAgASAIk4tDF7fROF1FDQEMAwtBACENIAEgAVsNAkEBIQ0gAA0CC0EAIQ0MAQtBACENIAggCFwiACABIAVdRXINACAMRSABIAFcIhAgBSAFXHIgBEECR3JyDQBBASENIAEgCGANAEEAIQ0gACAQcg0AIAEgCJOLQxe30ThdIQ0LAkAgDw0AIAMgC5MhAQJAAkAgAkUEQCABIAFcIgIgCSAJXHJFBEBBACEAIAEgCZOLQxe30ThdRQ0CDAQLQQAhACAJIAlbDQEgAg0DDAELIAJBAkYhACACQQJHIAZBAUdyDQAgASAJYARADAMLIAkgCVwiACABIAFcckUEQCABIAmTi0MXt9E4XUUNAgwDC0EAIQ4gASABWw0CQQEhDiAADQIMAQsgCSAJXCICIAEgB11Fcg0AIABFIAEgAVwiBCAHIAdcciAGQQJHcnINACABIAlgDQFBACEOIAIgBHINASABIAmTi0MXt9E4XSEODAELQQAhDgsgDSAOcQsL4wEBA38jAEEQayIBJAACQAJAIAAtABRBCHFFDQBBASEDIAAvABVB8AFxQdAARg0AIAEgABAyIAEoAgQhAAJAIAEoAgAiAkUEQEEAIQMgAEUNAQsDQCACKALsAyACKALoAyICa0ECdSAATQ0DIAIgAEECdGooAgAiAC8AFSAALQAXQRB0ciIAQYDgAHFBgMAARyAAQYAecUGACkZxIgMNASABEC4gASgCBCIAIAEoAgAiAnINAAsLIAEoAggiAEUNAANAIAAoAgAhAiAAECMgAiIADQALCyABQRBqJAAgAw8LEAIAC7IBAQR/AkACQCAAKAIEIgMgACgCACIEKALsAyAEKALoAyIBa0ECdUkEQCABIANBAnRqIQIDQCACKAIAIgEtABdBEHRBgIAwcUGAgCBHDQMgASgC7AMgASgC6ANGDQJBDBAeIgIgBDYCBCACIAM2AgggAiAAKAIINgIAQQAhAyAAQQA2AgQgACABNgIAIAAgAjYCCCABIQQgASgC6AMiAiABKALsA0cNAAsLEAIACyAAEC4LC4wQAgx/B30jAEEgayINJAAgDUEIaiABEDIgDSgCCCIOIA0oAgwiDHIEQCADQQEgAxshFSAAQRRqIRQgBUEBaiEWA0ACQAJAAn8CQAJAAkACQAJAIAwgDigC7AMgDigC6AMiDmtBAnVJBEAgDiAMQQJ0aigCACILLwAVIAstABdBEHRyIgxBgIAwcUGAgBBGDQgCQAJAIAxBDHZBA3EOAwEKAAoLIAkhFyAKIRogASgC9AMtABRBBHFFBEAgACoClAMgFEECQQEQMCAUQQJBARAvkpMhFyAAKgKYAyAUQQBBARAwIBRBAEEBEC+SkyEaCyALQRRqIQ8gAS0AFEECdkEDcSEQAkACfwJAIANBAkciE0UEQEEAIQ5BAyEMAkAgEEECaw4CBAACC0ECIQwMAwtBAiEMQQAgEEEBSw0BGgsgDAshDiAQIQwLIA9BAkEBIBcQIiAPQQJBASAXECGSIR0gD0EAQQEgFxAiIRwgD0EAQQEgFxAhIRsgCyoC+AMhGAJAAkACQAJAIAstAPwDQQFrDgIBAAILIBggF5RDCtcjPJQhGAsgGEMAAAAAYEUNACAdIAsgA0EAIBcgFxAxkiEYDAELIA1BGGogDyALQTJqIhAgAxBFQwAAwH8hGCANLQAcRQ0AIA1BGGogDyAQIAMQRCANLQAcRQ0AIA1BGGogDyAQIAMQRSANLQAcQQNGDQAgDUEYaiAPIBAgAxBEIA0tABxBA0YNACALQQIgAyAAKgKUAyAUQQIgAxBLIBRBAiADEFKSkyAPQQIgAyAXEFEgD0ECIAMgFxCDAZKTIBcgFxAlIRgLIBwgG5IhHCALKgKABCEZAkACQAJAIAstAIQEQQFrDgIBAAILIBkgGpRDCtcjPJQhGQsgGUMAAAAAYEUNACAcIAsgA0EBIBogFxAxkiEZDAMLIA1BGGogDyALQTJqIhAQQwJAIA0tABxFDQAgDUEYaiAPIBAQQiANLQAcRQ0AIA1BGGogDyAQEEMgDS0AHEEDRg0AIA1BGGogDyAQEEIgDS0AHEEDRg0AIAtBACADIAAqApgDIBRBACADEEsgFEEAIAMQUpKTIA9BACADIBoQUSAPQQAgAyAaEIMBkpMgGiAXECUhGQwDC0MAAMB/IRkgGCAYXA0GIAtB/ABqIhAgC0H6AGoiEi8BABAgIhsgG1sNAwwFCyALLQAAQQhxDQggCxBPIAAgCyACIAstABRBA3EiDCAVIAwbIAQgFiAGIAsqApwDIAeSIAsqAqADIAiSIAkgChB+IBFyIQxBACERIAxBAXFFDQhBASERIAsgCy0AAEEBcjoAAAwICxACAAsgGCAYXCAZIBlcRg0BIAtB/ABqIhAgC0H6AGoiEi8BABAgIhsgG1wNASAYIBhcBEAgGSAckyAQIAsvAXoQIJQgHZIhGAwCCyAZIBlbDQELIBwgGCAdkyAQIBIvAQAQIJWSIRkLIBggGFwNASAZIBlbDQMLQQAMAQtBAQshEiALIBcgGCACQQFHIAxBAklxIBdDAAAAAF5xIBJxIhAbIBkgA0ECIBIgEBsgGSAZXCAXIBpBAEEGIAQgBSAGED0aIAsqApQDIA9BAkEBIBcQIiAPQQJBASAXECGSkiEYIAsqApgDIA9BAEEBIBcQIiAPQQBBASAXECGSkiEZC0EBIRAgCyAYIBkgA0EAQQAgFyAaQQFBASAEIAUgBhA9GiAAIAEgCyADIAxBASAXIBoQggEgACABIAsgAyAOQQAgFyAaEIIBIBFBAXFFBEAgCy0AAEEBcSEQCyABLQAUIhJBAnZBA3EhDAJAAn8CQAJAAkACQAJAAkACQAJAAkACfwJAIBNFBEBBACERQQMhDiAMQQJrDgIDDQELQQIhDkEAIAxBAUsNARoLIA4LIREgEkEEcUUNBCASQQhxRQ0BIAwhDgsgASEMIA8QXw0BDAILAkAgCy0ANEEHcQ0AIAstADhBB3ENACALLQBCQQdxDQAgDCEOIAEhDCALQUBrLwEAQQdxRQ0CDAELIAwhDgsgACEMCwJ/AkACQAJAIA5BAWsOAwABAgULIAtBmANqIQ4gC0GoA2ohE0EBIRIgDEGYA2oMAgsgC0GUA2ohDiALQZwDaiETQQIhEiAMQZQDagwBCyALQZQDaiEOIAtBpANqIRNBACESIAxBlANqCyEMIAsgEkECdGogDCoCACAOKgIAkyATKgIAkzgCnAMLIBFBAXFFDQUCQAJAIBFBAnEEQCABIQwgDxBfDQEMAgsgCy0ANEEHcQ0AIAstADhBB3ENACALLQBCQQdxDQAgASEMIAtBQGsvAQBBB3FFDQELIAAhDAsgEUEBaw4DAQIDAAsQJAALIAtBmANqIREgC0GoA2ohDkEBIRMgDEGYA2oMAgsgC0GUA2ohESALQZwDaiEOQQIhEyAMQZQDagwBCyALQZQDaiERIAtBpANqIQ5BACETIAxBlANqCyEMIAsgE0ECdGogDCoCACARKgIAkyAOKgIAkzgCnAMLIAsqAqADIRsgCyoCnAMgB0MAAAAAIA8QXxuTIRcCfQJAIAstADRBB3ENACALLQA4QQdxDQAgCy0AQkEHcQ0AIAtBQGsvAQBBB3ENAEMAAAAADAELIAgLIRogCyAXOAKcAyALIBsgGpM4AqADIBAhEQsgDUEIahAuIA0oAgwiDCANKAIIIg5yDQALCyANKAIQIgwEQANAIAwoAgAhACAMECMgACIMDQALCyANQSBqJAAgEUEBcQt2AgF/AX0jAEEQayIEJAAgBEEIaiAAIAFBAnRB7CVqKAIAIAIQUEMAAMB/IQUCQAJAAkAgBC0ADEEBaw4CAAECCyAEKgIIIQUMAQsgBCoCCCADlEMK1yM8lCEFCyAEQRBqJAAgBUMAAAAAl0MAAAAAIAUgBVsbC3gCAX8BfSMAQRBrIgQkACAEQQhqIABBAyACQQJHQQF0IAFB/gFxQQJHGyACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt4AgF/AX0jAEEQayIEJAAgBEEIaiAAQQEgAkECRkEBdCABQf4BcUECRxsgAhA2QwAAwH8hBQJAAkACQCAELQAMQQFrDgIAAQILIAQqAgghBQwBCyAEKgIIIAOUQwrXIzyUIQULIARBEGokACAFQwAAAAAgBSAFWxsLoA0BBH8jAEEQayIJJAAgCUEIaiACQRRqIgggA0ECRkEBdEEBIARB/gFxQQJGIgobIgsgAxA2IAYgByAKGyEHAkACQAJAAkACQAJAIAktAAxFDQAgCUEIaiAIIAsgAxA2IAktAAxBA0YNACAIIAQgAyAHEIEBIABBFGogBCADEDCSIAggBCADIAcQIpIhBkEBIQMCQAJ/AkACQAJAAkAgBA4EAgMBAAcLQQIhAwwBC0EAIQMLIAMgC0YNAgJAAkAgBA4EAgIAAQYLIABBlANqIQNBAAwCCyAAQZQDaiEDQQAMAQsgAEGYA2ohA0EBCyEAIAMqAgAgAiAAQQJ0aioClAOTIAaTIQYLIAIgBEECdEHcJWooAgBBAnRqIAY4ApwDDAULIAlBCGogCCADQQJHQQF0QQMgChsiCiADEDYCQCAJLQAMRQ0AIAlBCGogCCAKIAMQNiAJLQAMQQNGDQACfwJAAkACQCAEDgQCAgABBQsgAEGUA2ohBUEADAILIABBlANqIQVBAAwBCyAAQZgDaiEFQQELIQEgBSoCACACQZQDaiIFIAFBAnRqKgIAkyAAQRRqIAQgAxAvkyAIIAQgAyAHECGTIAggBCADIAcQgAGTIQZBASEDAkACfwJAAkACQAJAIAQOBAIDAQAHC0ECIQMMAQtBACEDCyADIAtGDQICQAJAIAQOBAICAAEGCyAAQZQDaiEDQQAMAgsgAEGUA2ohA0EADAELIABBmANqIQNBAQshACADKgIAIAUgAEECdGoqAgCTIAaTIQYLIAIgBEECdEHcJWooAgBBAnRqIAY4ApwDDAULAkACQAJAIAUEQCABLQAUQQR2QQdxIgBBBUsNCEEBIAB0IgBBMnENASAAQQlxBEAgBEECdEHcJWooAgAhACAIIAQgAyAGEEEgASAAQQJ0IgBqIgEqArwDkiEGIAAgAmogAigC9AMtABRBAnEEfSAGBSAGIAEqAswDkgs4ApwDDAkLIAEgBEECdEHsJWooAgBBAnRqIgAqArwDIAggBCADIAYQYpIhBiACKAL0Ay0AFEECcUUEQCAGIAAqAswDkiEGCwJAAkACQAJAIAQOBAEBAgAICyABKgKUAyACKgKUA5MhB0ECIQMMAgsgASoCmAMgAioCmAOTIQdBASEDAkAgBA4CAgAHC0EDIQMMAQsgASoClAMgAioClAOTIQdBACEDCyACIANBAnRqIAcgBpM4ApwDDAgLIAIvABZBD3EiBUUEQCABLQAVQQR2IQULIAVBBUYEQCABLQAUQQhxRQ0CCyABLwAVQYCAA3FBgIACRgRAIAVBAmsOAgEHAwsgBUEISw0HQQEgBXRB8wNxDQYgBUECRw0CC0EAIQACfQJ/AkACQAJAAkACfwJAAkACQCAEDgQCAgABBAsgASoClAMhB0ECIQAgAUG8A2oMAgsgASoClAMhByABQcQDagwBCyABKgKYAyEHAkACQCAEDgIAAQMLQQMhACABQcADagwBC0EBIQAgAUHIA2oLIQUgByAFKgIAkyABQbwDaiIIIABBAnRqKgIAkyIHIAIoAvQDLQAUQQJxDQUaAkAgBA4EAAIDBAELQQMhACABQdADagwECxAkAAtBASEAIAFB2ANqDAILQQIhACABQcwDagwBC0EAIQAgAUHUA2oLIQUgByAFKgIAkyABIABBAnRqKgLMA5MLIAIgBEECdCIFQfwlaigCAEECdGoqApQDIAJBFGoiACAEQQEgBhAiIAAgBEEBIAYQIZKSk0MAAAA/lCAIIAVB3CVqKAIAIgVBAnRqKgIAkiAAIAQgAyAGEEGSIQYgAiAFQQJ0aiACKAL0Ay0AFEECcQR9IAYFIAYgASAFQQJ0aioCzAOSCzgCnAMMBgsgAS8AFUGAgANxQYCAAkcNBAsgASAEQQJ0QewlaigCAEECdGoiACoCvAMgCCAEIAMgBhBikiEGIAIoAvQDLQAUQQJxRQRAIAYgACoCzAOSIQYLAkACQCAEDgQBAQMAAgsgASoClAMgAioClAOTIQdBAiEDDAMLIAEqApgDIAIqApgDkyEHQQEhAwJAIAQOAgMAAQtBAyEDDAILECQACyABKgKUAyACKgKUA5MhB0EAIQMLIAIgA0ECdGogByAGkzgCnAMMAQsgBEECdEHcJWooAgAhACAIIAQgAyAGEEEgASAAQQJ0IgBqIgEqArwDkiEGIAAgAmogAigC9AMtABRBAnEEfSAGBSAGIAEqAswDkgs4ApwDCyAJQRBqJAALcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QewlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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\";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n\n return loadYoga.ready\n}\n);\n})();\nexport default loadYoga;", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n", "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYoga from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n} from './wrapAssembly.ts';\n\nconst Yoga = wrapAssembly(await loadYoga());\nexport default Yoga;\nexport * from './generated/YGEnums.ts';\n", "// Core shims barrel \u2014 aliased as @opentui/core by Vite\n// Re-exports portable code from opentui and swaps in browser replacements.\n// Vite aliases intercept zig, buffer, text-buffer, text-buffer-view,\n// syntax-style, renderer, console, etc. before they reach the filesystem.\n\n// \u2500\u2500\u2500 Pure TS re-exports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// RGBA and color utilities (our own copy to avoid pulling in opentui's lib/index)\nexport { RGBA, parseColor, hexToRgb, rgbToHex, hsvToRgb } from \"./rgba\"\nexport type { ColorInput } from \"./rgba\"\n\n// Types\nexport {\n TextAttributes,\n ATTRIBUTE_BASE_BITS,\n ATTRIBUTE_BASE_MASK,\n getBaseAttributes,\n DebugOverlayCorner,\n} from \"./types\"\nexport type {\n RenderContext,\n ThemeMode,\n CursorStyle,\n CursorStyleOptions,\n MousePointerStyle,\n WidthMethod,\n Timeout,\n ViewportBounds,\n Highlight,\n LineInfo,\n LineInfoProvider,\n CapturedSpan,\n CapturedLine,\n CapturedFrame,\n} from \"./types\"\n\n// \u2500\u2500\u2500 Re-exports from opentui source (Vite intercepts Zig deps) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Renderable base classes (needed by our own code \u2014 main.tsx uses RootRenderable)\n// NOTE: The opentui react package imports from the real opentui barrel instead\n// (redirected by the Vite plugin) to avoid cross-barrel circular dependency issues.\nexport {\n Renderable,\n BaseRenderable,\n RootRenderable,\n LayoutEvents,\n RenderableEvents,\n isRenderable,\n} from \"../../../../opentui/packages/core/src/Renderable\"\nexport type {\n RenderableOptions,\n LayoutOptions,\n BaseRenderableOptions,\n Position,\n RenderCommand,\n} from \"../../../../opentui/packages/core/src/Renderable\"\n\n// Border (pure TS)\nexport {\n BorderChars,\n BorderCharArrays,\n isValidBorderStyle,\n parseBorderStyle,\n getBorderFromSides,\n getBorderSides,\n borderCharsToArray,\n} from \"../../../../opentui/packages/core/src/lib/border\"\nexport type {\n BorderCharacters,\n BorderStyle,\n BorderSides,\n BorderConfig,\n BoxDrawOptions,\n BorderSidesConfig,\n} from \"../../../../opentui/packages/core/src/lib/border\"\n\n// Styled text (pure TS)\nexport {\n StyledText,\n isStyledText,\n stringToStyledText,\n t,\n bold,\n italic,\n underline,\n strikethrough,\n dim,\n reverse,\n blink,\n fg,\n bg,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n} from \"../../../../opentui/packages/core/src/lib/styled-text\"\n\n// Yoga options (pure TS)\nexport {\n parseAlign,\n parseAlignItems,\n parseFlexDirection,\n parseJustify,\n parseOverflow,\n parsePositionType,\n parseWrap,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\nexport type {\n AlignString,\n FlexDirectionString,\n JustifyString,\n OverflowString,\n PositionTypeString,\n WrapString,\n} from \"../../../../opentui/packages/core/src/lib/yoga.options\"\n\n// Renderable validations (pure TS)\nexport {\n validateOptions,\n isPositionType,\n isDimensionType,\n isFlexBasisType,\n isSizeType,\n isMarginType,\n isPaddingType,\n isPositionTypeType,\n isOverflowType,\n} from \"../../../../opentui/packages/core/src/lib/renderable.validations\"\n\n// Selection (pure TS)\nexport {\n Selection,\n convertGlobalToLocalSelection,\n} from \"../../../../opentui/packages/core/src/lib/selection\"\n\n// VNode composition (pure TS)\nexport { maybeMakeRenderable } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\nexport type { VNode } from \"../../../../opentui/packages/core/src/renderables/composition/vnode\"\n\n// \u2500\u2500\u2500 Renderable subclasses (re-exported from individual files, not barrel) \u2500\n\n// These are needed by @opentui/react for the component catalogue and host-config.\n// File-level shims (zig, buffer, renderer, etc.) handle their internal imports.\nexport * from \"../../../../opentui/packages/core/src/renderables/Box\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Text\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextNode\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Code\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Diff\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Input\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Select\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TabSelect\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Textarea\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBox\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ScrollBar\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Slider\"\nexport * from \"../../../../opentui/packages/core/src/renderables/ASCIIFont\"\nexport * from \"../../../../opentui/packages/core/src/renderables/LineNumberRenderable\"\nexport * from \"../../../../opentui/packages/core/src/renderables/Markdown\"\nexport * from \"../../../../opentui/packages/core/src/renderables/FrameBuffer\"\nexport * from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\nimport { TextBufferRenderable } from \"../../../../opentui/packages/core/src/renderables/TextBufferRenderable\"\n\n// Gridland extension: textAlign property on TextBufferRenderable\n// Proxies to the BrowserTextBufferView's textAlign property for centered text rendering.\nObject.defineProperty(TextBufferRenderable.prototype, \"textAlign\", {\n get(this: any) {\n return this.textBufferView?.textAlign ?? \"left\"\n },\n set(this: any, value: \"left\" | \"center\" | \"right\") {\n if (this.textBufferView) {\n this.textBufferView.textAlign = value\n this.requestRender()\n }\n },\n enumerable: true,\n configurable: true,\n})\n\n// \u2500\u2500\u2500 Browser replacements \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// Buffer \u2014 browser replacement\nexport { BrowserBuffer as OptimizedBuffer } from \"../browser-buffer\"\n\n// TextBuffer \u2014 browser replacement\nexport { BrowserTextBuffer as TextBuffer } from \"../browser-text-buffer\"\nexport type { TextChunk } from \"../browser-text-buffer\"\n\n// TextBufferView \u2014 browser replacement\nexport { BrowserTextBufferView as TextBufferView } from \"../browser-text-buffer-view\"\n\n// SyntaxStyle \u2014 browser stub\nexport { BrowserSyntaxStyle as SyntaxStyle } from \"../browser-syntax-style\"\n\n// \u2500\u2500\u2500 Stubs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function resolveRenderLib(): any {\n return null\n}\n\nexport type RenderLib = any\nexport type Pointer = number\n\n// KeyHandler (re-implemented for browser)\nexport {\n BrowserKeyHandler as KeyHandler,\n BrowserInternalKeyHandler as InternalKeyHandler,\n} from \"../browser-render-context\"\n\n// Renderer \u2014 re-exported from shimmed source path (resolved to renderer-stub.ts)\nexport {\n CliRenderer,\n CliRenderEvents,\n createCliRenderer,\n} from \"../../../../opentui/packages/core/src/renderer\"\nexport type { MouseEvent } from \"../../../../opentui/packages/core/src/renderer\"\n\n// Timeline & engine \u2014 re-exported from shimmed source path (resolved to timeline-stub.ts)\nexport {\n Timeline,\n engine,\n createTimeline,\n} from \"../../../../opentui/packages/core/src/animation/Timeline\"\n\n// Yoga re-export\nexport * as Yoga from \"yoga-layout\"\n\n// Stub types for mouse\nexport type MouseEventType = any\n\n// Utils\nexport function createTextAttributes(opts: {\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n blink?: boolean\n inverse?: boolean\n hidden?: boolean\n strikethrough?: boolean\n} = {}): number {\n const TA = {\n NONE: 0, BOLD: 1, DIM: 2, ITALIC: 4, UNDERLINE: 8,\n BLINK: 16, INVERSE: 32, HIDDEN: 64, STRIKETHROUGH: 128,\n }\n let attr = TA.NONE\n if (opts.bold) attr |= TA.BOLD\n if (opts.italic) attr |= TA.ITALIC\n if (opts.underline) attr |= TA.UNDERLINE\n if (opts.dim) attr |= TA.DIM\n if (opts.blink) attr |= TA.BLINK\n if (opts.inverse) attr |= TA.INVERSE\n if (opts.hidden) attr |= TA.HIDDEN\n if (opts.strikethrough) attr |= TA.STRIKETHROUGH\n return attr\n}\n\nexport function attributesWithLink(baseAttributes: number, linkId: number): number {\n return (baseAttributes & 0xff) | ((linkId & 0xffffff) << 8)\n}\n\nexport function getLinkId(attributes: number): number {\n return (attributes >>> 8) & 0xffffff\n}\n\nexport function visualizeRenderableTree(..._args: any[]): void {}\n", "import type { RGBA } from \"./core-shims/rgba\"\nimport type { CapturedLine, CapturedSpan, CursorStyle } from \"./core-shims/types\"\nimport { attributesWithLink } from \"./core-shims/index\"\n\n// Attribute flags matching TextAttributes from opentui core\nconst CONTINUATION = 0xc0000000\n\ninterface ScissorRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport type WidthMethod = \"wcwidth\" | \"unicode\"\n\nexport interface BorderDrawOptions {\n x: number\n y: number\n width: number\n height: number\n borderStyle?: string\n customBorderChars?: Uint32Array\n border: boolean | string[]\n borderColor: RGBA\n backgroundColor: RGBA\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n}\n\nexport class BrowserBuffer {\n public id: string\n public respectAlpha: boolean\n\n private _width: number\n private _height: number\n private _widthMethod: WidthMethod\n\n // Cell data - same layout as native OptimizedBuffer\n public char: Uint32Array\n public fg: Float32Array\n public bg: Float32Array\n public attributes: Uint32Array\n\n private scissorStack: ScissorRect[] = []\n private opacityStack: number[] = []\n\n // Link registry for clickable links\n public linkRegistry: Map<number, string> = new Map()\n private nextLinkId: number = 1\n /** Cursor rendering config -- set by renderer before pipeline, read by drawEditorView */\n public cursorColor: RGBA | null = null\n public cursorStyleType: CursorStyle = \"block\"\n /** Line cursor position -- set by drawEditorView during pipeline, read by renderer after */\n public lineCursorPosition: { x: number; y: number } | null = null\n\n constructor(\n width: number,\n height: number,\n options: { respectAlpha?: boolean; id?: string; widthMethod?: WidthMethod } = {},\n ) {\n this._width = width\n this._height = height\n this._widthMethod = options.widthMethod ?? \"wcwidth\"\n this.respectAlpha = options.respectAlpha ?? false\n this.id = options.id ?? `browser-buffer-${Math.random().toString(36).slice(2, 8)}`\n\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n\n // Fill with spaces\n this.char.fill(0x20) // space\n }\n\n static create(\n width: number,\n height: number,\n widthMethod: WidthMethod,\n options?: { respectAlpha?: boolean; id?: string },\n ): BrowserBuffer {\n return new BrowserBuffer(width, height, { ...options, widthMethod })\n }\n\n get width(): number {\n return this._width\n }\n\n get height(): number {\n return this._height\n }\n\n get widthMethod(): WidthMethod {\n return this._widthMethod\n }\n\n get ptr(): number {\n return 0\n }\n\n get buffers() {\n return {\n char: this.char,\n fg: this.fg,\n bg: this.bg,\n attributes: this.attributes,\n }\n }\n\n setRespectAlpha(respectAlpha: boolean): void {\n this.respectAlpha = respectAlpha\n }\n\n getNativeId(): string {\n return this.id\n }\n\n registerLink(url: string): number {\n const id = this.nextLinkId++\n this.linkRegistry.set(id, url)\n return id\n }\n\n getLinkUrl(linkId: number): string | undefined {\n return this.linkRegistry.get(linkId)\n }\n\n private isInScissor(x: number, y: number): boolean {\n if (this.scissorStack.length === 0) return true\n const rect = this.scissorStack[this.scissorStack.length - 1]\n return x >= rect.x && x < rect.x + rect.width && y >= rect.y && y < rect.y + rect.height\n }\n\n private getCurrentOpacityMultiplier(): number {\n if (this.opacityStack.length === 0) return 1\n return this.opacityStack[this.opacityStack.length - 1]\n }\n\n private applyOpacity(color: RGBA): RGBA {\n const multiplier = this.getCurrentOpacityMultiplier()\n if (multiplier >= 1) return color\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a * multiplier,\n buffer: new Float32Array([color.r, color.g, color.b, color.a * multiplier]),\n toInts: color.toInts,\n equals: color.equals,\n map: color.map,\n toString: color.toString,\n } as RGBA\n }\n\n clear(bg?: RGBA): void {\n const size = this._width * this._height\n this.char.fill(0x20) // space\n this.attributes.fill(0)\n this.linkRegistry.clear()\n this.nextLinkId = 1\n\n if (bg) {\n for (let i = 0; i < size; i++) {\n const offset = i * 4\n this.bg[offset] = bg.r\n this.bg[offset + 1] = bg.g\n this.bg[offset + 2] = bg.b\n this.bg[offset + 3] = bg.a\n // Clear fg\n this.fg[offset] = 0\n this.fg[offset + 1] = 0\n this.fg[offset + 2] = 0\n this.fg[offset + 3] = 0\n }\n } else {\n this.fg.fill(0)\n this.bg.fill(0)\n }\n }\n\n setCell(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = char.codePointAt(0) ?? 0x20\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n setCellWithAlphaBlending(\n x: number,\n y: number,\n char: string,\n fgColor: RGBA,\n bgColor: RGBA,\n attr: number = 0,\n ): void {\n // For the PoC, same as setCell\n this.setCell(x, y, char, fgColor, bgColor, attr)\n }\n\n drawChar(charCode: number, x: number, y: number, fgColor: RGBA, bgColor: RGBA, attr: number = 0): void {\n if (x < 0 || x >= this._width || y < 0 || y >= this._height) return\n if (!this.isInScissor(x, y)) return\n\n const idx = y * this._width + x\n const offset = idx * 4\n\n const effectiveBg = this.applyOpacity(bgColor)\n const effectiveFg = this.applyOpacity(fgColor)\n\n this.char[idx] = charCode\n this.attributes[idx] = attr\n\n this.fg[offset] = effectiveFg.r\n this.fg[offset + 1] = effectiveFg.g\n this.fg[offset + 2] = effectiveFg.b\n this.fg[offset + 3] = effectiveFg.a\n\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n\n drawText(\n text: string,\n x: number,\n y: number,\n fgColor: RGBA,\n bgColor?: RGBA,\n attr: number = 0,\n _selection?: { start: number; end: number; bgColor?: RGBA; fgColor?: RGBA } | null,\n ): void {\n const transparentBg: RGBA = {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n const bg = bgColor ?? transparentBg\n\n let curX = x\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0) {\n this.setCell(curX, y, ch, fgColor, bg, attr)\n }\n curX++\n }\n }\n\n fillRect(x: number, y: number, width: number, height: number, bgColor: RGBA): void {\n for (let row = y; row < y + height && row < this._height; row++) {\n for (let col = x; col < x + width && col < this._width; col++) {\n if (col < 0 || row < 0) continue\n if (!this.isInScissor(col, row)) continue\n\n const idx = row * this._width + col\n const offset = idx * 4\n const effectiveBg = this.applyOpacity(bgColor)\n\n this.char[idx] = 0x20\n this.bg[offset] = effectiveBg.r\n this.bg[offset + 1] = effectiveBg.g\n this.bg[offset + 2] = effectiveBg.b\n this.bg[offset + 3] = effectiveBg.a\n }\n }\n }\n\n drawBox(options: BorderDrawOptions): void {\n const {\n x,\n y,\n width,\n height,\n border,\n borderColor,\n backgroundColor,\n shouldFill = true,\n title,\n titleAlignment = \"left\",\n } = options\n\n if (width <= 0 || height <= 0) return\n\n // Parse border sides\n const sides = {\n top: border === true || (Array.isArray(border) && border.includes(\"top\")),\n right: border === true || (Array.isArray(border) && border.includes(\"right\")),\n bottom: border === true || (Array.isArray(border) && border.includes(\"bottom\")),\n left: border === true || (Array.isArray(border) && border.includes(\"left\")),\n }\n\n // Get border chars (use customBorderChars or default rounded)\n const borderChars = options.customBorderChars ?? this.getDefaultBorderChars(options.borderStyle)\n\n // Fill background\n if (shouldFill) {\n const fillStartX = x + (sides.left ? 1 : 0)\n const fillStartY = y + (sides.top ? 1 : 0)\n const fillWidth = width - (sides.left ? 1 : 0) - (sides.right ? 1 : 0)\n const fillHeight = height - (sides.top ? 1 : 0) - (sides.bottom ? 1 : 0)\n if (fillWidth > 0 && fillHeight > 0) {\n this.fillRect(fillStartX, fillStartY, fillWidth, fillHeight, backgroundColor)\n }\n }\n\n if (!border) return\n\n const transparent: RGBA = { r: 0, g: 0, b: 0, a: 0, buffer: new Float32Array([0, 0, 0, 0]) } as RGBA\n\n // Draw borders\n // borderChars layout: [topLeft, topRight, bottomLeft, bottomRight, horizontal, vertical, topT, bottomT, leftT, rightT, cross]\n const topLeft = borderChars[0]\n const topRight = borderChars[1]\n const bottomLeft = borderChars[2]\n const bottomRight = borderChars[3]\n const horizontal = borderChars[4]\n const vertical = borderChars[5]\n\n // Top border\n if (sides.top) {\n if (sides.left) this.drawChar(topLeft, x, y, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y, borderColor, transparent)\n }\n if (sides.right && width > 1) this.drawChar(topRight, x + width - 1, y, borderColor, transparent)\n }\n\n // Bottom border\n if (sides.bottom && height > 1) {\n if (sides.left) this.drawChar(bottomLeft, x, y + height - 1, borderColor, transparent)\n for (let col = 1; col < width - 1; col++) {\n this.drawChar(horizontal, x + col, y + height - 1, borderColor, transparent)\n }\n if (sides.right && width > 1)\n this.drawChar(bottomRight, x + width - 1, y + height - 1, borderColor, transparent)\n }\n\n // Left border\n if (sides.left) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x, y + row, borderColor, transparent)\n }\n }\n\n // Right border\n if (sides.right && width > 1) {\n for (let row = 1; row < height - 1; row++) {\n this.drawChar(vertical, x + width - 1, y + row, borderColor, transparent)\n }\n }\n\n // Draw title on top border\n if (title && sides.top && width > 4) {\n const maxTitleLen = width - 4\n const truncatedTitle = title.length > maxTitleLen ? title.slice(0, maxTitleLen) : title\n let titleX: number\n if (titleAlignment === \"center\") {\n titleX = x + Math.floor((width - truncatedTitle.length) / 2)\n } else if (titleAlignment === \"right\") {\n titleX = x + width - truncatedTitle.length - 2\n } else {\n titleX = x + 2\n }\n this.drawText(truncatedTitle, titleX, y, borderColor, transparent)\n }\n }\n\n private getDefaultBorderChars(borderStyle?: string): Uint32Array {\n // Rounded border chars by default\n const styles: Record<string, number[]> = {\n rounded: [0x256d, 0x256e, 0x2570, 0x256f, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n single: [0x250c, 0x2510, 0x2514, 0x2518, 0x2500, 0x2502, 0x252c, 0x2534, 0x251c, 0x2524, 0x253c],\n double: [0x2554, 0x2557, 0x255a, 0x255d, 0x2550, 0x2551, 0x2566, 0x2569, 0x2560, 0x2563, 0x256c],\n heavy: [0x250f, 0x2513, 0x2517, 0x251b, 0x2501, 0x2503, 0x2533, 0x253b, 0x2523, 0x252b, 0x254b],\n }\n const chars = styles[borderStyle ?? \"rounded\"] ?? styles.rounded\n return new Uint32Array(chars)\n }\n\n pushScissorRect(x: number, y: number, width: number, height: number): void {\n if (this.scissorStack.length > 0) {\n // Intersect with current scissor\n const current = this.scissorStack[this.scissorStack.length - 1]\n const nx = Math.max(x, current.x)\n const ny = Math.max(y, current.y)\n const nw = Math.min(x + width, current.x + current.width) - nx\n const nh = Math.min(y + height, current.y + current.height) - ny\n this.scissorStack.push({ x: nx, y: ny, width: Math.max(0, nw), height: Math.max(0, nh) })\n } else {\n this.scissorStack.push({ x, y, width, height })\n }\n }\n\n popScissorRect(): void {\n this.scissorStack.pop()\n }\n\n clearScissorRects(): void {\n this.scissorStack = []\n }\n\n pushOpacity(opacity: number): void {\n const current = this.getCurrentOpacityMultiplier()\n this.opacityStack.push(current * opacity)\n }\n\n popOpacity(): void {\n this.opacityStack.pop()\n }\n\n getCurrentOpacity(): number {\n return this.getCurrentOpacityMultiplier()\n }\n\n clearOpacity(): void {\n this.opacityStack = []\n }\n\n resize(width: number, height: number): void {\n this._width = width\n this._height = height\n const size = width * height\n this.char = new Uint32Array(size)\n this.fg = new Float32Array(size * 4)\n this.bg = new Float32Array(size * 4)\n this.attributes = new Uint32Array(size)\n this.char.fill(0x20)\n }\n\n // Read buffer into CapturedLine[] for testing\n getSpanLines(): CapturedLine[] {\n const lines: CapturedLine[] = []\n\n for (let row = 0; row < this._height; row++) {\n const spans: CapturedSpan[] = []\n let currentSpan: CapturedSpan | null = null\n\n for (let col = 0; col < this._width; col++) {\n const idx = row * this._width + col\n const offset = idx * 4\n\n // Skip continuation chars\n if (this.attributes[idx] & CONTINUATION) continue\n\n const charCode = this.char[idx]\n const ch = charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n const fgR = this.fg[offset]\n const fgG = this.fg[offset + 1]\n const fgB = this.fg[offset + 2]\n const fgA = this.fg[offset + 3]\n const bgR = this.bg[offset]\n const bgG = this.bg[offset + 1]\n const bgB = this.bg[offset + 2]\n const bgA = this.bg[offset + 3]\n const attr = this.attributes[idx] & 0xff\n\n const fg: RGBA = {\n r: fgR, g: fgG, b: fgB, a: fgA,\n buffer: new Float32Array([fgR, fgG, fgB, fgA]),\n } as RGBA\n const bg: RGBA = {\n r: bgR, g: bgG, b: bgB, a: bgA,\n buffer: new Float32Array([bgR, bgG, bgB, bgA]),\n } as RGBA\n\n if (\n currentSpan &&\n currentSpan.fg.r === fgR &&\n currentSpan.fg.g === fgG &&\n currentSpan.fg.b === fgB &&\n currentSpan.fg.a === fgA &&\n currentSpan.bg.r === bgR &&\n currentSpan.bg.g === bgG &&\n currentSpan.bg.b === bgB &&\n currentSpan.bg.a === bgA &&\n currentSpan.attributes === attr\n ) {\n currentSpan.text += ch\n currentSpan.width += 1\n } else {\n if (currentSpan) spans.push(currentSpan)\n currentSpan = { text: ch, fg, bg, attributes: attr, width: 1 }\n }\n }\n\n if (currentSpan) spans.push(currentSpan)\n lines.push({ spans })\n }\n\n return lines\n }\n\n // Draw a text buffer view into the buffer\n drawTextBufferView(view: any, x: number, y: number): void {\n if (!view || !view.getVisibleLines) return\n\n const lines = view.getVisibleLines()\n if (!lines) return\n\n const textAlign = view.textAlign as string | undefined\n const viewWidth = view._viewportWidth as number | undefined\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx]\n if (!line) continue\n\n let curX = x\n if (textAlign && textAlign !== \"left\" && viewWidth) {\n const lineWidth = line.chunks.reduce((sum: number, c: any) => sum + c.text.length, 0)\n if (textAlign === \"center\") {\n curX = x + Math.floor((viewWidth - lineWidth) / 2)\n } else if (textAlign === \"right\") {\n curX = x + viewWidth - lineWidth\n }\n }\n for (const chunk of line.chunks) {\n const text = chunk.text\n const fgColor = chunk.fg\n const bgColor = chunk.bg\n let attr = chunk.attributes ?? 0\n\n // Encode link ID into attributes if chunk has a link\n if (chunk.link && chunk.link.url) {\n const linkId = this.registerLink(chunk.link.url)\n attr = attributesWithLink(attr, linkId)\n }\n\n for (const ch of text) {\n if (curX >= this._width) break\n if (curX >= 0 && y + lineIdx >= 0 && y + lineIdx < this._height) {\n this.setCell(curX, y + lineIdx, ch, fgColor, bgColor, attr)\n }\n curX++\n }\n }\n }\n }\n\n drawTextBuffer(textBufferView: any, x: number, y: number): void {\n this.drawTextBufferView(textBufferView, x, y)\n }\n\n drawFrameBuffer(\n destX: number,\n destY: number,\n frameBuffer: BrowserBuffer,\n sourceX: number = 0,\n sourceY: number = 0,\n sourceWidth?: number,\n sourceHeight?: number,\n ): void {\n const sw = sourceWidth ?? frameBuffer.width\n const sh = sourceHeight ?? frameBuffer.height\n const srcChar = frameBuffer.char\n const srcFg = frameBuffer.fg\n const srcBg = frameBuffer.bg\n const srcAttr = frameBuffer.attributes\n const srcCols = frameBuffer.width\n\n for (let row = 0; row < sh; row++) {\n const srcRow = sourceY + row\n const dstRow = destY + row\n if (srcRow < 0 || srcRow >= frameBuffer.height) continue\n if (dstRow < 0 || dstRow >= this._height) continue\n\n for (let col = 0; col < sw; col++) {\n const srcCol = sourceX + col\n const dstCol = destX + col\n if (srcCol < 0 || srcCol >= frameBuffer.width) continue\n if (dstCol < 0 || dstCol >= this._width) continue\n if (!this.isInScissor(dstCol, dstRow)) continue\n\n const srcIdx = srcRow * srcCols + srcCol\n const dstIdx = dstRow * this._width + dstCol\n const srcOffset = srcIdx * 4\n const dstOffset = dstIdx * 4\n\n this.char[dstIdx] = srcChar[srcIdx]\n this.attributes[dstIdx] = srcAttr[srcIdx]\n\n // Apply opacity to fg\n const fgA = srcFg[srcOffset + 3]\n const opacityMul = this.getCurrentOpacityMultiplier()\n this.fg[dstOffset] = srcFg[srcOffset]\n this.fg[dstOffset + 1] = srcFg[srcOffset + 1]\n this.fg[dstOffset + 2] = srcFg[srcOffset + 2]\n this.fg[dstOffset + 3] = fgA * opacityMul\n\n // Apply opacity to bg\n const bgA = srcBg[srcOffset + 3]\n this.bg[dstOffset] = srcBg[srcOffset]\n this.bg[dstOffset + 1] = srcBg[srcOffset + 1]\n this.bg[dstOffset + 2] = srcBg[srcOffset + 2]\n this.bg[dstOffset + 3] = bgA * opacityMul\n }\n }\n }\n drawEditorView(editorView: any, x: number, y: number): void {\n if (!editorView) return\n\n const viewport = editorView.getViewport()\n const text = editorView.getText()\n const lines = text.split(\"\\n\")\n\n // Default colors\n const dfg = editorView.editBuffer?._defaultFg ?? {\n r: 1, g: 1, b: 1, a: 1,\n buffer: new Float32Array([1, 1, 1, 1]),\n } as RGBA\n const dbg = editorView.editBuffer?._defaultBg ?? {\n r: 0, g: 0, b: 0, a: 0,\n buffer: new Float32Array([0, 0, 0, 0]),\n } as RGBA\n\n const visibleRows = viewport.height > 0 ? viewport.height : this._height - y\n\n if (text === \"\" && editorView._placeholderChunks && editorView._placeholderChunks.length > 0) {\n // Draw placeholder text; offset by 1 cell for line cursor so it doesn't overlap\n let curX = this.cursorStyleType === \"line\" ? x + 1 : x\n for (const chunk of editorView._placeholderChunks) {\n const chunkFg = chunk.fg ?? dfg\n const chunkBg = chunk.bg ?? dbg\n const attr = (chunk.attributes ?? 0) | 2 // DIM attribute = 1 << 1\n for (const ch of chunk.text) {\n if (curX >= this._width) break\n if (curX >= 0 && y >= 0 && y < this._height) {\n this.setCell(curX, y, ch, chunkFg, chunkBg, attr)\n }\n curX++\n }\n }\n } else {\n // Draw text lines\n for (let row = 0; row < visibleRows; row++) {\n const lineIdx = viewport.offsetY + row\n if (lineIdx < 0 || lineIdx >= lines.length) continue\n const dstRow = y + row\n if (dstRow < 0 || dstRow >= this._height) continue\n\n const line = lines[lineIdx]\n for (let col = 0; col < line.length; col++) {\n const srcCol = viewport.offsetX + col\n if (srcCol < 0 || srcCol >= line.length) continue\n const dstCol = x + col\n if (dstCol < 0 || dstCol >= this._width) break\n\n this.setCell(dstCol, dstRow, line[srcCol], dfg, dbg, 0)\n }\n }\n }\n\n // Draw cursor\n const cursor = editorView.getVisualCursor()\n if (cursor) {\n const cursorX = x + cursor.visualCol\n const cursorY = y + cursor.visualRow\n if (cursorX >= 0 && cursorX < this._width && cursorY >= 0 && cursorY < this._height) {\n const cursorFg = this.cursorColor ?? dfg\n if (this.cursorStyleType === \"line\") {\n // Line cursor: store position for renderer to build cursor overlay\n this.lineCursorPosition = { x: cursorX, y: cursorY }\n } else {\n // Block cursor: overwrite cell with INVERSE\n const idx = cursorY * this._width + cursorX\n const charCode = this.char[idx]\n const ch = charCode === 0 || charCode === 0x20 ? \" \" : String.fromCodePoint(charCode)\n const offset = idx * 4\n const cellBg = {\n r: this.bg[offset],\n g: this.bg[offset + 1],\n b: this.bg[offset + 2],\n a: this.bg[offset + 3] || 1,\n } as RGBA\n this.setCell(cursorX, cursorY, ch, cursorFg, cellBg, 32) // INVERSE = 1 << 5 = 32\n }\n }\n }\n }\n drawSuperSampleBuffer(): void {}\n drawPackedBuffer(): void {}\n drawGrayscaleBuffer(): void {}\n drawGrayscaleBufferSupersampled(): void {}\n drawGrid(): void {}\n encodeUnicode(_text: string): null {\n return null\n }\n freeUnicode(): void {}\n getRealCharBytes(): Uint8Array {\n return new Uint8Array(0)\n }\n destroy(): void {}\n}\n\n// Export as OptimizedBuffer so opentui source code imports work directly\nexport { BrowserBuffer as OptimizedBuffer }\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { RGBA } from \"./core-shims/rgba\"\nimport type { SelectionManager } from \"./selection-manager\"\n\n/** Cursor overlay info produced by the render pipeline, consumed by the painter */\nexport interface CursorOverlay {\n x: number\n y: number\n color: RGBA\n blinking: boolean\n}\n\nconst TextAttributes = {\n BOLD: 1 << 0,\n DIM: 1 << 1,\n ITALIC: 1 << 2,\n UNDERLINE: 1 << 3,\n UNDERLINE_DASHED: 1 << 4,\n INVERSE: 1 << 5,\n UNDERLINE_DOTTED: 1 << 6,\n}\n\nconst CONTINUATION = 0xc0000000\nconst LINE_CURSOR_WIDTH = 8\nconst CURSOR_BLINK_INTERVAL_MS = 530\n\n// Box-drawing character definitions (U+2500\u2013U+257F)\n// Each entry defines which directions extend from cell center and the line weight.\ninterface BoxDrawDef {\n left?: boolean\n right?: boolean\n up?: boolean\n down?: boolean\n type: \"light\" | \"heavy\" | \"double\"\n arc?: \"tl\" | \"tr\" | \"bl\" | \"br\" // rounded corner arc direction\n}\n\nconst BOX_DRAWING_MAP: Record<number, BoxDrawDef> = {\n // Light lines\n 0x2500: { left: true, right: true, type: \"light\" }, // \u2500\n 0x2502: { up: true, down: true, type: \"light\" }, // \u2502\n 0x250c: { right: true, down: true, type: \"light\" }, // \u250C\n 0x2510: { left: true, down: true, type: \"light\" }, // \u2510\n 0x2514: { right: true, up: true, type: \"light\" }, // \u2514\n 0x2518: { left: true, up: true, type: \"light\" }, // \u2518\n 0x251c: { up: true, down: true, right: true, type: \"light\" }, // \u251C\n 0x2524: { up: true, down: true, left: true, type: \"light\" }, // \u2524\n 0x252c: { left: true, right: true, down: true, type: \"light\" }, // \u252C\n 0x2534: { left: true, right: true, up: true, type: \"light\" }, // \u2534\n 0x253c: { left: true, right: true, up: true, down: true, type: \"light\" }, // \u253C\n\n // Heavy lines\n 0x2501: { left: true, right: true, type: \"heavy\" }, // \u2501\n 0x2503: { up: true, down: true, type: \"heavy\" }, // \u2503\n 0x250f: { right: true, down: true, type: \"heavy\" }, // \u250F\n 0x2513: { left: true, down: true, type: \"heavy\" }, // \u2513\n 0x2517: { right: true, up: true, type: \"heavy\" }, // \u2517\n 0x251b: { left: true, up: true, type: \"heavy\" }, // \u251B\n 0x2523: { up: true, down: true, right: true, type: \"heavy\" }, // \u2523\n 0x252b: { up: true, down: true, left: true, type: \"heavy\" }, // \u252B\n 0x2533: { left: true, right: true, down: true, type: \"heavy\" }, // \u2533\n 0x253b: { left: true, right: true, up: true, type: \"heavy\" }, // \u253B\n 0x254b: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254B\n\n // Light/heavy mixed (treat as light for simplicity of joins)\n 0x250d: { right: true, down: true, type: \"heavy\" }, // \u250D\n 0x250e: { right: true, down: true, type: \"heavy\" }, // \u250E\n 0x2511: { left: true, down: true, type: \"heavy\" }, // \u2511\n 0x2512: { left: true, down: true, type: \"heavy\" }, // \u2512\n 0x2515: { right: true, up: true, type: \"heavy\" }, // \u2515\n 0x2516: { right: true, up: true, type: \"heavy\" }, // \u2516\n 0x2519: { left: true, up: true, type: \"heavy\" }, // \u2519\n 0x251a: { left: true, up: true, type: \"heavy\" }, // \u251A\n 0x251d: { up: true, down: true, right: true, type: \"heavy\" }, // \u251D\n 0x251e: { up: true, down: true, right: true, type: \"light\" }, // \u251E\n 0x251f: { up: true, down: true, right: true, type: \"light\" }, // \u251F\n 0x2520: { up: true, down: true, right: true, type: \"heavy\" }, // \u2520\n 0x2521: { up: true, down: true, right: true, type: \"heavy\" }, // \u2521\n 0x2522: { up: true, down: true, right: true, type: \"heavy\" }, // \u2522\n 0x2525: { up: true, down: true, left: true, type: \"heavy\" }, // \u2525\n 0x2526: { up: true, down: true, left: true, type: \"light\" }, // \u2526\n 0x2527: { up: true, down: true, left: true, type: \"light\" }, // \u2527\n 0x2528: { up: true, down: true, left: true, type: \"heavy\" }, // \u2528\n 0x2529: { up: true, down: true, left: true, type: \"heavy\" }, // \u2529\n 0x252a: { up: true, down: true, left: true, type: \"heavy\" }, // \u252A\n 0x252d: { left: true, right: true, down: true, type: \"heavy\" }, // \u252D\n 0x252e: { left: true, right: true, down: true, type: \"heavy\" }, // \u252E\n 0x252f: { left: true, right: true, down: true, type: \"heavy\" }, // \u252F\n 0x2530: { left: true, right: true, down: true, type: \"heavy\" }, // \u2530\n 0x2531: { left: true, right: true, down: true, type: \"heavy\" }, // \u2531\n 0x2532: { left: true, right: true, down: true, type: \"heavy\" }, // \u2532\n 0x2535: { left: true, right: true, up: true, type: \"heavy\" }, // \u2535\n 0x2536: { left: true, right: true, up: true, type: \"heavy\" }, // \u2536\n 0x2537: { left: true, right: true, up: true, type: \"heavy\" }, // \u2537\n 0x2538: { left: true, right: true, up: true, type: \"heavy\" }, // \u2538\n 0x2539: { left: true, right: true, up: true, type: \"heavy\" }, // \u2539\n 0x253a: { left: true, right: true, up: true, type: \"heavy\" }, // \u253A\n 0x253d: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253D\n 0x253e: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253E\n 0x253f: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u253F\n 0x2540: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2540\n 0x2541: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2541\n 0x2542: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2542\n 0x2543: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2543\n 0x2544: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2544\n 0x2545: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2545\n 0x2546: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2546\n 0x2547: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2547\n 0x2548: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2548\n 0x2549: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u2549\n 0x254a: { left: true, right: true, up: true, down: true, type: \"heavy\" }, // \u254A\n\n // Dashed lines (render as solid light/heavy)\n 0x2504: { left: true, right: true, type: \"light\" }, // \u2504\n 0x2505: { left: true, right: true, type: \"heavy\" }, // \u2505\n 0x2506: { up: true, down: true, type: \"light\" }, // \u2506\n 0x2507: { up: true, down: true, type: \"heavy\" }, // \u2507\n 0x2508: { left: true, right: true, type: \"light\" }, // \u2508\n 0x2509: { left: true, right: true, type: \"heavy\" }, // \u2509\n 0x250a: { up: true, down: true, type: \"light\" }, // \u250A\n 0x250b: { up: true, down: true, type: \"heavy\" }, // \u250B\n\n // Double lines\n 0x2550: { left: true, right: true, type: \"double\" }, // \u2550\n 0x2551: { up: true, down: true, type: \"double\" }, // \u2551\n 0x2552: { right: true, down: true, type: \"double\" }, // \u2552\n 0x2553: { right: true, down: true, type: \"double\" }, // \u2553\n 0x2554: { right: true, down: true, type: \"double\" }, // \u2554\n 0x2555: { left: true, down: true, type: \"double\" }, // \u2555\n 0x2556: { left: true, down: true, type: \"double\" }, // \u2556\n 0x2557: { left: true, down: true, type: \"double\" }, // \u2557\n 0x2558: { right: true, up: true, type: \"double\" }, // \u2558\n 0x2559: { right: true, up: true, type: \"double\" }, // \u2559\n 0x255a: { right: true, up: true, type: \"double\" }, // \u255A\n 0x255b: { left: true, up: true, type: \"double\" }, // \u255B\n 0x255c: { left: true, up: true, type: \"double\" }, // \u255C\n 0x255d: { left: true, up: true, type: \"double\" }, // \u255D\n 0x255e: { up: true, down: true, right: true, type: \"double\" }, // \u255E\n 0x255f: { up: true, down: true, right: true, type: \"double\" }, // \u255F\n 0x2560: { up: true, down: true, right: true, type: \"double\" }, // \u2560\n 0x2561: { up: true, down: true, left: true, type: \"double\" }, // \u2561\n 0x2562: { up: true, down: true, left: true, type: \"double\" }, // \u2562\n 0x2563: { up: true, down: true, left: true, type: \"double\" }, // \u2563\n 0x2564: { left: true, right: true, down: true, type: \"double\" }, // \u2564\n 0x2565: { left: true, right: true, down: true, type: \"double\" }, // \u2565\n 0x2566: { left: true, right: true, down: true, type: \"double\" }, // \u2566\n 0x2567: { left: true, right: true, up: true, type: \"double\" }, // \u2567\n 0x2568: { left: true, right: true, up: true, type: \"double\" }, // \u2568\n 0x2569: { left: true, right: true, up: true, type: \"double\" }, // \u2569\n 0x256a: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256A\n 0x256b: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256B\n 0x256c: { left: true, right: true, up: true, down: true, type: \"double\" }, // \u256C\n\n // Rounded corners\n 0x256d: { right: true, down: true, type: \"light\", arc: \"tl\" }, // \u256D\n 0x256e: { left: true, down: true, type: \"light\", arc: \"tr\" }, // \u256E\n 0x256f: { left: true, up: true, type: \"light\", arc: \"br\" }, // \u256F\n 0x2570: { right: true, up: true, type: \"light\", arc: \"bl\" }, // \u2570\n\n // Diagonal lines (render as simple connecting lines)\n 0x2571: { type: \"light\" }, // \u2571 (forward slash)\n 0x2572: { type: \"light\" }, // \u2572 (backslash)\n 0x2573: { type: \"light\" }, // \u2573 (cross)\n\n // Half lines\n 0x2574: { left: true, type: \"light\" }, // \u2574\n 0x2575: { up: true, type: \"light\" }, // \u2575\n 0x2576: { right: true, type: \"light\" }, // \u2576\n 0x2577: { down: true, type: \"light\" }, // \u2577\n 0x2578: { left: true, type: \"heavy\" }, // \u2578\n 0x2579: { up: true, type: \"heavy\" }, // \u2579\n 0x257a: { right: true, type: \"heavy\" }, // \u257A\n 0x257b: { down: true, type: \"heavy\" }, // \u257B\n 0x257c: { left: true, right: true, type: \"light\" }, // \u257C (light left, heavy right)\n 0x257d: { up: true, down: true, type: \"light\" }, // \u257D (light up, heavy down)\n 0x257e: { left: true, right: true, type: \"heavy\" }, // \u257E (heavy left, light right)\n 0x257f: { up: true, down: true, type: \"heavy\" }, // \u257F (heavy up, light down)\n}\n\nexport interface CanvasPainterOptions {\n fontFamily?: string\n fontSize?: number\n}\n\nexport class CanvasPainter {\n private cellWidth: number = 0\n private cellHeight: number = 0\n private fontFamily: string\n private fontSize: number\n private baselineOffset: number = 0\n\n constructor(options: CanvasPainterOptions = {}) {\n this.fontFamily = options.fontFamily ?? \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\"\n this.fontSize = options.fontSize ?? 14\n }\n\n measureCell(ctx: CanvasRenderingContext2D): { width: number; height: number } {\n ctx.font = `${this.fontSize}px ${this.fontFamily}`\n const metrics = ctx.measureText(\"M\")\n this.cellWidth = metrics.width\n this.cellHeight = Math.ceil(this.fontSize * 1.4)\n this.baselineOffset = Math.ceil(this.fontSize * 1.1)\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n getCellSize(): { width: number; height: number } {\n return { width: this.cellWidth, height: this.cellHeight }\n }\n\n paint(ctx: CanvasRenderingContext2D, buffer: BrowserBuffer, selection?: SelectionManager, cursor?: CursorOverlay | null): void {\n const { char, fg, bg, attributes } = buffer\n const cols = buffer.width\n const rows = buffer.height\n const cw = this.cellWidth\n const ch = this.cellHeight\n\n // Pass 1: Background rects \u2014 batch adjacent same-color cells per row\n for (let row = 0; row < rows; row++) {\n let runStartCol = 0\n let runR = -1,\n runG = -1,\n runB = -1,\n runA = -1\n\n for (let col = 0; col <= cols; col++) {\n let r = 0,\n g = 0,\n b = 0,\n a = 0\n if (col < cols) {\n const idx = row * cols + col\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n if (isInverse) {\n // INVERSE: use fg color as background\n r = fg[offset]\n g = fg[offset + 1]\n b = fg[offset + 2]\n a = fg[offset + 3]\n } else {\n r = bg[offset]\n g = bg[offset + 1]\n b = bg[offset + 2]\n a = bg[offset + 3]\n }\n }\n\n if (col < cols && r === runR && g === runG && b === runB && a === runA) {\n continue\n }\n\n // Flush previous run\n if (runA > 0 && col > runStartCol) {\n ctx.fillStyle = rgbaToCSS(runR, runG, runB, runA)\n ctx.fillRect(runStartCol * cw, row * ch, (col - runStartCol) * cw, ch)\n }\n\n runStartCol = col\n runR = r\n runG = g\n runB = b\n runA = a\n }\n }\n\n // Pass 2: Foreground characters\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const idx = row * cols + col\n\n // Skip continuation cells (wide char placeholders)\n if (attributes[idx] & CONTINUATION) continue\n\n const charCode = char[idx]\n if (charCode === 0 || charCode === 0x20) continue // skip spaces\n\n const offset = idx * 4\n const attr = attributes[idx] & 0xff\n const isInverse = !!(attr & TextAttributes.INVERSE)\n\n let fgR: number, fgG: number, fgB: number, fgA: number\n if (isInverse) {\n // INVERSE: use bg color as text color\n fgR = bg[offset]\n fgG = bg[offset + 1]\n fgB = bg[offset + 2]\n fgA = bg[offset + 3]\n // If bg is transparent, use black (default terminal bg) as text color\n if (fgA === 0) {\n fgR = 0; fgG = 0; fgB = 0; fgA = 1\n }\n } else {\n fgR = fg[offset]\n fgG = fg[offset + 1]\n fgB = fg[offset + 2]\n fgA = fg[offset + 3]\n }\n\n if (fgA === 0) continue\n\n const isBold = !!(attr & TextAttributes.BOLD)\n const isItalic = !!(attr & TextAttributes.ITALIC)\n const isDim = !!(attr & TextAttributes.DIM)\n const isUnderline = !!(attr & TextAttributes.UNDERLINE)\n\n const effectiveA = isDim ? fgA * 0.5 : fgA\n\n // Box-drawing character rendering\n if (charCode >= 0x2500 && charCode <= 0x257f) {\n const def = BOX_DRAWING_MAP[charCode]\n if (def) {\n const cellX = col * cw\n const cellY = row * ch\n const cx = cellX + cw / 2\n const cy = cellY + ch / 2\n ctx.strokeStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n ctx.lineCap = \"square\"\n\n if (def.type === \"double\") {\n // Draw two parallel lines for each direction\n const gap = Math.max(2, Math.round(cw / 5))\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.left) {\n ctx.moveTo(cellX, cy - gap / 2); ctx.lineTo(cx, cy - gap / 2)\n ctx.moveTo(cellX, cy + gap / 2); ctx.lineTo(cx, cy + gap / 2)\n }\n if (def.right) {\n ctx.moveTo(cx, cy - gap / 2); ctx.lineTo(cellX + cw, cy - gap / 2)\n ctx.moveTo(cx, cy + gap / 2); ctx.lineTo(cellX + cw, cy + gap / 2)\n }\n if (def.up) {\n ctx.moveTo(cx - gap / 2, cellY); ctx.lineTo(cx - gap / 2, cy)\n ctx.moveTo(cx + gap / 2, cellY); ctx.lineTo(cx + gap / 2, cy)\n }\n if (def.down) {\n ctx.moveTo(cx - gap / 2, cy); ctx.lineTo(cx - gap / 2, cellY + ch)\n ctx.moveTo(cx + gap / 2, cy); ctx.lineTo(cx + gap / 2, cellY + ch)\n }\n ctx.stroke()\n } else if (def.arc) {\n // Rounded corners: use ellipse to handle rectangular cells (ch \u2260 cw)\n const rx = cw / 2\n const ry = ch / 2\n ctx.lineWidth = 1\n ctx.beginPath()\n if (def.arc === \"tl\") {\n // \u256D: arc from right edge to bottom edge\n ctx.ellipse(cellX + cw, cellY + ch, rx, ry, 0, Math.PI, Math.PI * 1.5)\n } else if (def.arc === \"tr\") {\n // \u256E: arc from left edge to bottom edge\n ctx.ellipse(cellX, cellY + ch, rx, ry, 0, Math.PI * 1.5, Math.PI * 2)\n } else if (def.arc === \"bl\") {\n // \u2570: arc from right edge to top edge\n ctx.ellipse(cellX + cw, cellY, rx, ry, 0, Math.PI * 0.5, Math.PI)\n } else if (def.arc === \"br\") {\n // \u256F: arc from left edge to top edge\n ctx.ellipse(cellX, cellY, rx, ry, 0, 0, Math.PI * 0.5)\n }\n ctx.stroke()\n } else if (charCode === 0x2571 || charCode === 0x2572 || charCode === 0x2573) {\n // Diagonal lines\n ctx.lineWidth = 1\n ctx.beginPath()\n if (charCode === 0x2571 || charCode === 0x2573) {\n // \u2571 forward slash\n ctx.moveTo(cellX + cw, cellY)\n ctx.lineTo(cellX, cellY + ch)\n }\n if (charCode === 0x2572 || charCode === 0x2573) {\n // \u2572 backslash\n ctx.moveTo(cellX, cellY)\n ctx.lineTo(cellX + cw, cellY + ch)\n }\n ctx.stroke()\n } else {\n ctx.lineWidth = def.type === \"heavy\" ? 2 : 1\n ctx.beginPath()\n if (def.left) { ctx.moveTo(cellX, cy); ctx.lineTo(cx, cy) }\n if (def.right) { ctx.moveTo(cx, cy); ctx.lineTo(cellX + cw, cy) }\n if (def.up) { ctx.moveTo(cx, cellY); ctx.lineTo(cx, cy) }\n if (def.down) { ctx.moveTo(cx, cy); ctx.lineTo(cx, cellY + ch) }\n ctx.stroke()\n }\n continue\n }\n }\n\n // Normal text rendering\n ctx.fillStyle = rgbaToCSS(fgR, fgG, fgB, effectiveA)\n\n // Build font string\n let fontStyle = \"\"\n if (isItalic) fontStyle += \"italic \"\n if (isBold) fontStyle += \"bold \"\n fontStyle += `${this.fontSize}px ${this.fontFamily}`\n ctx.font = fontStyle\n\n const character = String.fromCodePoint(charCode)\n const x = col * cw\n const y = row * this.cellHeight + this.baselineOffset\n\n ctx.fillText(character, x, y)\n\n // Draw underline\n if (isUnderline) {\n const isDashed = !!(attr & TextAttributes.UNDERLINE_DASHED)\n const isDotted = !!(attr & TextAttributes.UNDERLINE_DOTTED)\n ctx.strokeStyle = ctx.fillStyle\n ctx.lineWidth = 1\n const underlineY = row * this.cellHeight + this.baselineOffset + 2\n if (isDotted) {\n ctx.lineCap = \"round\"\n ctx.setLineDash([0.5, 2.5])\n } else if (isDashed) {\n ctx.setLineDash([2, 2])\n }\n ctx.beginPath()\n ctx.moveTo(x, underlineY)\n ctx.lineTo(x + cw, underlineY)\n ctx.stroke()\n if (isDotted || isDashed) {\n ctx.setLineDash([])\n ctx.lineCap = \"butt\"\n }\n }\n }\n }\n\n // Pass 3: Line cursor overlay\n if (cursor) {\n const visible = !cursor.blinking || Math.floor(performance.now() / CURSOR_BLINK_INTERVAL_MS) % 2 === 0\n if (visible) {\n ctx.fillStyle = rgbaToCSS(cursor.color.r, cursor.color.g, cursor.color.b, cursor.color.a ?? 1)\n ctx.fillRect(cursor.x * cw, cursor.y * ch, LINE_CURSOR_WIDTH, ch)\n }\n }\n\n // Pass 4: Selection overlay\n if (selection?.active) {\n ctx.fillStyle = \"rgba(51, 153, 255, 0.3)\"\n for (let row = 0; row < rows; row++) {\n let runStart = -1\n for (let col = 0; col <= cols; col++) {\n const selected = col < cols && selection.isSelected(col, row)\n if (selected && runStart === -1) {\n runStart = col\n } else if (!selected && runStart !== -1) {\n ctx.fillRect(runStart * cw, row * ch, (col - runStart) * cw, ch)\n runStart = -1\n }\n }\n }\n }\n }\n}\n\nfunction rgbaToCSS(r: number, g: number, b: number, a: number): string {\n const ri = Math.round(r * 255)\n const gi = Math.round(g * 255)\n const bi = Math.round(b * 255)\n return `rgba(${ri},${gi},${bi},${a})`\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\n\ninterface SelectionRange {\n startCol: number\n startRow: number\n endCol: number\n endRow: number\n}\n\nexport class SelectionManager {\n private _startCol: number = 0\n private _startRow: number = 0\n private _endCol: number = 0\n private _endRow: number = 0\n private _active: boolean = false\n private _selecting: boolean = false\n\n startSelection(col: number, row: number): void {\n this._startCol = col\n this._startRow = row\n this._endCol = col\n this._endRow = row\n this._selecting = true\n this._active = true\n }\n\n updateSelection(col: number, row: number): void {\n if (!this._selecting) return\n this._endCol = col\n this._endRow = row\n }\n\n endSelection(): void {\n this._selecting = false\n // If start and end are the same cell, clear the selection\n if (this._startCol === this._endCol && this._startRow === this._endRow) {\n this._active = false\n }\n }\n\n clearSelection(): void {\n this._active = false\n this._selecting = false\n }\n\n get active(): boolean {\n return this._active\n }\n\n get selecting(): boolean {\n return this._selecting\n }\n\n /** Returns the selection range normalized to reading order (top-left to bottom-right) */\n getSelectedRange(): SelectionRange | null {\n if (!this._active) return null\n\n let startCol = this._startCol\n let startRow = this._startRow\n let endCol = this._endCol\n let endRow = this._endRow\n\n // Normalize to reading order\n if (startRow > endRow || (startRow === endRow && startCol > endCol)) {\n const tmpCol = startCol\n const tmpRow = startRow\n startCol = endCol\n startRow = endRow\n endCol = tmpCol\n endRow = tmpRow\n }\n\n return { startCol, startRow, endCol, endRow }\n }\n\n isSelected(col: number, row: number): boolean {\n const range = this.getSelectedRange()\n if (!range) return false\n\n const { startCol, startRow, endCol, endRow } = range\n\n if (row < startRow || row > endRow) return false\n if (startRow === endRow) {\n return col >= startCol && col < endCol\n }\n if (row === startRow) return col >= startCol\n if (row === endRow) return col < endCol\n return true\n }\n\n getSelectedText(buffer: BrowserBuffer): string {\n const range = this.getSelectedRange()\n if (!range) return \"\"\n\n const { startCol, startRow, endCol, endRow } = range\n const lines: string[] = []\n\n for (let row = startRow; row <= endRow; row++) {\n let lineStart = row === startRow ? startCol : 0\n let lineEnd = row === endRow ? endCol : buffer.width\n\n // Build the line text\n let line = \"\"\n for (let col = lineStart; col < lineEnd && col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n\n // Trim trailing spaces\n lines.push(line.trimEnd())\n }\n\n return lines.join(\"\\n\")\n }\n}\n", "import type { BrowserBuffer } from \"./browser-buffer\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\n/**\n * Shared render pipeline used by both BrowserRenderer and HeadlessRenderer.\n * Runs lifecycle passes, calculates layout, collects and executes render commands.\n */\nexport function executeRenderPipeline(\n buffer: BrowserBuffer,\n renderContext: BrowserRenderContext,\n root: any,\n deltaTime: number,\n): void {\n // Clear buffer\n buffer.clear()\n\n // Run lifecycle passes\n const lifecyclePasses = renderContext.getLifecyclePasses()\n for (const renderable of lifecyclePasses) {\n if (renderable.onLifecyclePass) {\n renderable.onLifecyclePass()\n }\n }\n\n // Calculate layout\n root.calculateLayout()\n\n // Collect render commands\n const renderList: any[] = []\n root.updateLayout(deltaTime, renderList)\n\n // Execute render commands\n for (const cmd of renderList) {\n switch (cmd.action) {\n case \"pushScissorRect\":\n buffer.pushScissorRect(cmd.x, cmd.y, cmd.width, cmd.height)\n break\n case \"popScissorRect\":\n buffer.popScissorRect()\n break\n case \"pushOpacity\":\n buffer.pushOpacity(cmd.opacity)\n break\n case \"popOpacity\":\n buffer.popOpacity()\n break\n case \"render\":\n cmd.renderable.render(buffer, deltaTime)\n break\n }\n }\n\n // Clear scissor/opacity stacks\n buffer.clearScissorRects()\n buffer.clearOpacity()\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { CanvasPainter, type CursorOverlay } from \"./canvas-painter\"\nimport { SelectionManager } from \"./selection-manager\"\nimport { getLinkId } from \"./core-shims/index\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\n// We import these via the core-shims alias in the Vite build\n// but for the renderer we import directly to avoid circular deps\nlet RootRenderableClass: any = null\n\nexport function setRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport class BrowserRenderer {\n public canvas: HTMLCanvasElement\n public ctx2d: CanvasRenderingContext2D\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n public painter: CanvasPainter\n public selection: SelectionManager\n\n private cols: number\n private rows: number\n private cellWidth: number = 0\n private cellHeight: number = 0\n private rafId: number | null = null\n private lastTime: number = 0\n private needsRender: boolean = true\n private isDragOver: boolean = false\n private cleanupListeners: (() => void)[] = []\n private mouseDownCell: { col: number; row: number } | null = null\n private backgroundColor: string | null = null\n\n constructor(canvas: HTMLCanvasElement, cols: number, rows: number, options?: { backgroundColor?: string }) {\n this.canvas = canvas\n this.cols = cols\n this.rows = rows\n\n const ctx2d = canvas.getContext(\"2d\")\n if (!ctx2d) throw new Error(\"Could not get 2d context\")\n this.ctx2d = ctx2d\n\n // Measure cell size\n this.painter = new CanvasPainter()\n const cellSize = this.painter.measureCell(this.ctx2d)\n this.cellWidth = cellSize.width\n this.cellHeight = cellSize.height\n\n // Size canvas\n const dpr = window.devicePixelRatio || 1\n canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n canvas.style.width = `${cols * this.cellWidth}px`\n canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.backgroundColor = options?.backgroundColor ?? null\n\n // Text cursor for the canvas\n canvas.style.cursor = \"text\"\n\n // Create buffer\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n\n // Create render context\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n this.needsRender = true\n })\n\n // Create selection manager\n this.selection = new SelectionManager()\n\n // Create root renderable\n if (!RootRenderableClass) {\n throw new Error(\"RootRenderableClass not set. Call setRootRenderableClass before creating BrowserRenderer.\")\n }\n this.root = new RootRenderableClass(this.renderContext)\n\n // Set up DOM event listeners\n this.setupDomListeners()\n }\n\n private pixelToCell(clientX: number, clientY: number): { col: number; row: number } {\n const rect = this.canvas.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n const col = Math.floor(x / this.cellWidth)\n const row = Math.floor(y / this.cellHeight)\n return {\n col: Math.max(0, Math.min(col, this.cols - 1)),\n row: Math.max(0, Math.min(row, this.rows - 1)),\n }\n }\n\n private setupDomListeners(): void {\n // --- Drag-and-drop ---\n const onDragOver = (e: DragEvent) => {\n e.preventDefault()\n }\n this.canvas.addEventListener(\"dragover\", onDragOver)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragover\", onDragOver))\n\n const onDrop = (e: DragEvent) => {\n e.preventDefault()\n const files = e.dataTransfer?.files\n if (!files || files.length === 0) return\n const file = files[0]\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n file.text().then((content) => {\n this.renderContext.emit(\"file-drop\", {\n name: file.name,\n content,\n type: file.type,\n size: file.size,\n })\n })\n }\n this.canvas.addEventListener(\"drop\", onDrop)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"drop\", onDrop))\n\n // --- Mouse selection ---\n const onMouseDown = (e: MouseEvent) => {\n // Only left button\n if (e.button !== 0) return\n this.canvas.focus()\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n this.mouseDownCell = { col, row }\n this.selection.startSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousedown\", onMouseDown)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousedown\", onMouseDown))\n\n const onMouseMove = (e: MouseEvent) => {\n // Update cursor style based on whether we're hovering a link\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const linkId = getLinkId(this.buffer.attributes[idx])\n this.canvas.style.cursor = linkId > 0 ? \"pointer\" : \"text\"\n }\n\n if (!this.selection.selecting) return\n this.selection.updateSelection(col, row)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"mousemove\", onMouseMove)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"mousemove\", onMouseMove))\n\n const onMouseUp = (e: MouseEvent) => {\n const wasSelecting = this.selection.selecting\n if (wasSelecting) {\n this.selection.endSelection()\n this.needsRender = true\n }\n\n // Check for link click: same cell as mousedown (no drag)\n if (e.button === 0 && this.mouseDownCell) {\n const { col, row } = this.pixelToCell(e.clientX, e.clientY)\n if (col === this.mouseDownCell.col && row === this.mouseDownCell.row) {\n const idx = row * this.buffer.width + col\n if (idx >= 0 && idx < this.buffer.attributes.length) {\n const attr = this.buffer.attributes[idx]\n const linkId = getLinkId(attr)\n if (linkId > 0) {\n const url = this.buffer.getLinkUrl(linkId)\n if (url) {\n window.open(url, \"_blank\")\n }\n }\n }\n }\n this.mouseDownCell = null\n }\n }\n window.addEventListener(\"mouseup\", onMouseUp)\n this.cleanupListeners.push(() => window.removeEventListener(\"mouseup\", onMouseUp))\n\n // --- Drag enter/leave for visual feedback ---\n const onDragEnter = (e: DragEvent) => {\n e.preventDefault()\n if (this.isDragOver) return\n this.isDragOver = true\n this.renderContext.emit(\"drag-enter\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragenter\", onDragEnter)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragenter\", onDragEnter))\n\n const onDragLeave = (e: DragEvent) => {\n // Only emit when truly leaving the canvas (not entering a child)\n if (e.relatedTarget && this.canvas.contains(e.relatedTarget as Node)) return\n this.isDragOver = false\n this.renderContext.emit(\"drag-leave\", undefined)\n this.needsRender = true\n }\n this.canvas.addEventListener(\"dragleave\", onDragLeave)\n this.cleanupListeners.push(() => this.canvas.removeEventListener(\"dragleave\", onDragLeave))\n\n // --- Paste ---\n const onPaste = (e: ClipboardEvent) => {\n if (document.activeElement !== this.canvas) return\n const text = e.clipboardData?.getData(\"text/plain\")\n if (text) {\n e.preventDefault()\n this.renderContext.emit(\"paste\", text)\n }\n }\n document.addEventListener(\"paste\", onPaste)\n this.cleanupListeners.push(() => document.removeEventListener(\"paste\", onPaste))\n }\n\n start(): void {\n this.lastTime = performance.now()\n this.loop()\n }\n\n stop(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n for (const cleanup of this.cleanupListeners) {\n cleanup()\n }\n this.cleanupListeners = []\n }\n\n private loop = (): void => {\n this.rafId = requestAnimationFrame(this.loop)\n\n const now = performance.now()\n const deltaTime = now - this.lastTime\n this.lastTime = now\n\n let didRender = false\n if (this.needsRender) {\n this.needsRender = false\n didRender = true\n\n // Pass cursor config from render context to buffer before rendering\n this.buffer.cursorColor = this.renderContext.cursorColor\n this.buffer.cursorStyleType = this.renderContext.cursorStyleType\n this.buffer.lineCursorPosition = null\n\n executeRenderPipeline(this.buffer, this.renderContext, this.root, deltaTime)\n }\n\n // Build cursor overlay from buffer position + render context config\n const cursorOverlay = this.buildCursorOverlay()\n\n // Repaint when render pipeline ran, or every frame when blinking cursor is active\n if (!didRender && !cursorOverlay?.blinking) return\n\n // Paint to canvas\n const dpr = window.devicePixelRatio || 1\n this.ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0)\n if (this.backgroundColor) {\n this.ctx2d.fillStyle = this.backgroundColor\n this.ctx2d.fillRect(0, 0, this.canvas.width, this.canvas.height)\n } else {\n this.ctx2d.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n this.painter.paint(this.ctx2d, this.buffer, this.selection, cursorOverlay)\n }\n\n private buildCursorOverlay(): CursorOverlay | null {\n const pos = this.buffer.lineCursorPosition\n if (!pos || !this.renderContext.cursorColor) return null\n return {\n x: pos.x,\n y: pos.y,\n color: this.renderContext.cursorColor,\n blinking: this.renderContext.cursorBlinking,\n }\n }\n\n resize(cols: number, rows: number): void {\n this.cols = cols\n this.rows = rows\n\n const dpr = window.devicePixelRatio || 1\n this.canvas.width = Math.ceil(cols * this.cellWidth * dpr)\n this.canvas.height = Math.ceil(rows * this.cellHeight * dpr)\n this.canvas.style.width = `${cols * this.cellWidth}px`\n this.canvas.style.height = `${rows * this.cellHeight}px`\n this.ctx2d.scale(dpr, dpr)\n\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n this.needsRender = true\n }\n\n private static PREVENT_DEFAULT_KEYS = new Set([\n \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\",\n \" \", \"PageUp\", \"PageDown\", \"Tab\", \"Home\", \"End\",\n ])\n\n private static MODIFIER_KEYS = new Set([\"Alt\", \"Control\", \"Meta\", \"Shift\"])\n\n private static KEY_MAP: Record<string, string> = {\n ArrowUp: \"up\",\n ArrowDown: \"down\",\n ArrowLeft: \"left\",\n ArrowRight: \"right\",\n Enter: \"return\",\n Backspace: \"backspace\",\n Delete: \"delete\",\n Tab: \"tab\",\n Escape: \"escape\",\n Home: \"home\",\n End: \"end\",\n \" \": \"space\",\n PageUp: \"pageup\",\n PageDown: \"pagedown\",\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n // Prevent browser default for navigation keys (scrolling) and printable\n // characters (e.g. \"/\" triggers Quick Find in Firefox). Cmd/Ctrl shortcuts\n // like Cmd+C, Cmd+V are preserved.\n if (BrowserRenderer.PREVENT_DEFAULT_KEYS.has(event.key) ||\n (event.key.length === 1 && !event.metaKey && !event.ctrlKey)) {\n event.preventDefault()\n }\n\n // Copy selected text to clipboard (Cmd+C, Ctrl+C, or Option+C on Mac where key is \"\u00E7\")\n if (this.selection.active && (event.key === \"c\" || event.key === \"\u00E7\") && (event.metaKey || event.ctrlKey || event.altKey)) {\n const text = this.selection.getSelectedText(this.buffer)\n if (text) {\n navigator.clipboard.writeText(text).catch(() => {\n // Fallback: temporary textarea + execCommand\n const ta = document.createElement(\"textarea\")\n ta.value = text\n ta.style.position = \"fixed\"\n ta.style.left = \"-9999px\"\n document.body.appendChild(ta)\n ta.select()\n document.execCommand(\"copy\")\n document.body.removeChild(ta)\n })\n }\n event.preventDefault()\n return\n }\n\n // Any other keypress clears the selection (standard terminal behavior)\n // But ignore modifier-only keys so the user can press Option/Ctrl/Cmd before C\n const modifierOnly = BrowserRenderer.MODIFIER_KEYS.has(event.key)\n if (this.selection.active && !modifierOnly) {\n this.selection.clearSelection()\n this.needsRender = true\n }\n\n // Translate browser KeyboardEvent to OpenTUI KeyEvent format\n const keyEvent = {\n name: BrowserRenderer.KEY_MAP[event.key] ?? (event.key.length === 1 ? event.key : event.key.toLowerCase()),\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n shift: event.shiftKey,\n option: event.altKey,\n sequence: event.key,\n number: false,\n raw: event.key,\n eventType: \"press\" as const,\n source: \"raw\" as const,\n _defaultPrevented: false,\n _propagationStopped: false,\n get defaultPrevented() {\n return this._defaultPrevented\n },\n get propagationStopped() {\n return this._propagationStopped\n },\n preventDefault() {\n this._defaultPrevented = true\n },\n stopPropagation() {\n this._propagationStopped = true\n },\n }\n\n this.renderContext._internalKeyInput.emit(\"keypress\", keyEvent)\n this.renderContext.keyInput.emit(\"keypress\", keyEvent)\n }\n}\n", "import { createContext, useContext } from \"react\"\nimport type { BrowserRenderContext } from \"./browser-render-context\"\n\nexport interface BrowserContextValue {\n renderContext: BrowserRenderContext\n}\n\nexport const BrowserContext = createContext<BrowserContextValue | null>(null)\n\nexport function useBrowserContext(): BrowserContextValue {\n const ctx = useContext(BrowserContext)\n if (!ctx) {\n throw new Error(\"useBrowserContext must be used within a BrowserContext.Provider\")\n }\n return ctx\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { BrowserRenderer } from \"./browser-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\n// Cast needed: ErrorBoundary uses opentui's JSX intrinsics internally,\n// which causes a type conflict with React's JSX types during DTS builds.\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\nexport interface BrowserRoot {\n render(node: ReactNode): void\n unmount(): void\n}\n\nexport function createBrowserRoot(renderer: BrowserRenderer): BrowserRoot {\n let unmountFn: (() => void) | null = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider value={{ keyHandler: renderer.renderContext.keyInput as any, renderer: renderer.renderContext as any }}>\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n unmountFn = _render(element, renderer.root)\n },\n unmount() {\n if (unmountFn) {\n // Reconciler cleanup would happen here\n }\n },\n }\n}\n", "export interface ReadableCharBuffer {\n width: number\n height: number\n char: Uint32Array\n}\n\nexport function bufferToText(buffer: ReadableCharBuffer): string {\n const lines: string[] = []\n for (let row = 0; row < buffer.height; row++) {\n let line = \"\"\n for (let col = 0; col < buffer.width; col++) {\n const idx = row * buffer.width + col\n const charCode = buffer.char[idx]\n line += charCode === 0 ? \" \" : String.fromCodePoint(charCode)\n }\n lines.push(line.trimEnd())\n }\n // Trim trailing empty lines\n while (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop()\n }\n return lines.join(\"\\n\")\n}\n", "import { BrowserBuffer } from \"./browser-buffer\"\nimport { BrowserRenderContext } from \"./browser-render-context\"\nimport { bufferToText } from \"./buffer-to-text\"\nimport { executeRenderPipeline } from \"./render-pipeline\"\n\nlet RootRenderableClass: any = null\n\nexport function setHeadlessRootRenderableClass(cls: any): void {\n RootRenderableClass = cls\n}\n\nexport interface HeadlessRendererOptions {\n cols: number\n rows: number\n}\n\nexport class HeadlessRenderer {\n public buffer: BrowserBuffer\n public renderContext: BrowserRenderContext\n public root: any // RootRenderable\n\n constructor(options: HeadlessRendererOptions) {\n const { cols, rows } = options\n\n this.buffer = BrowserBuffer.create(cols, rows, \"wcwidth\")\n this.renderContext = new BrowserRenderContext(cols, rows)\n this.renderContext.setOnRenderRequest(() => {\n // No-op for headless \u2014 we render on demand\n })\n\n if (!RootRenderableClass) {\n throw new Error(\n \"RootRenderableClass not set. Call setHeadlessRootRenderableClass before creating HeadlessRenderer.\",\n )\n }\n this.root = new RootRenderableClass(this.renderContext)\n }\n\n renderOnce(): void {\n executeRenderPipeline(this.buffer, this.renderContext, this.root, 0)\n }\n\n toText(): string {\n return bufferToText(this.buffer)\n }\n\n resize(cols: number, rows: number): void {\n this.buffer.resize(cols, rows)\n this.renderContext.resize(cols, rows)\n this.root.resize(cols, rows)\n }\n}\n", "import React, { type ReactNode } from \"react\"\nimport type { HeadlessRenderer } from \"./headless-renderer\"\nimport { BrowserContext } from \"./browser-context\"\n\nimport { _render, reconciler, AppContext, ErrorBoundary as _ErrorBoundary } from \"@gridland/core\"\n\nconst ErrorBoundary = _ErrorBoundary as unknown as React.ComponentType<{ children: React.ReactNode }>\n\n// flushSync was renamed to flushSyncFromReconciler in react-reconciler 0.32.0\nconst _r = reconciler as typeof reconciler & { flushSyncFromReconciler?: typeof reconciler.flushSync }\nconst flushSync = _r.flushSyncFromReconciler ?? _r.flushSync\n\nexport interface HeadlessRoot {\n render(node: ReactNode): void\n renderToText(node: ReactNode): string\n unmount(): void\n}\n\nexport function createHeadlessRoot(renderer: HeadlessRenderer): HeadlessRoot {\n let container: any = null\n\n return {\n render(node: ReactNode) {\n const element = (\n <BrowserContext.Provider value={{ renderContext: renderer.renderContext }}>\n <AppContext.Provider\n value={{\n keyHandler: renderer.renderContext.keyInput as any,\n renderer: renderer.renderContext as any,\n }}\n >\n <ErrorBoundary>{node}</ErrorBoundary>\n </AppContext.Provider>\n </BrowserContext.Provider>\n )\n container = _render(element, renderer.root)\n },\n renderToText(node: ReactNode): string {\n flushSync(() => {\n this.render(node)\n })\n renderer.renderOnce()\n return renderer.toText()\n },\n unmount() {\n if (container) {\n reconciler.updateContainer(null, container, null, () => {})\n // @ts-expect-error the types for `react-reconciler` are not up to date with the library.\n reconciler.flushSyncWork()\n container = null\n }\n },\n }\n}\n", "import type { ReactNode } from \"react\"\nimport { BrowserRenderer, setRootRenderableClass } from \"./browser-renderer\"\nimport { createBrowserRoot } from \"./create-browser-root\"\nimport { CanvasPainter } from \"./canvas-painter\"\nimport { RootRenderable } from \"@gridland/core\"\n\nexport interface MountOptions {\n /** Number of columns (auto-calculated from canvas size if omitted) */\n cols?: number\n /** Number of rows (auto-calculated from canvas size if omitted) */\n rows?: number\n /** Font size in pixels (default: 14) */\n fontSize?: number\n /** Font family (default: monospace stack) */\n fontFamily?: string\n /** Listen for keyboard events on the canvas (default: true) */\n keyboard?: boolean\n /** Auto-resize when canvas size changes (default: true) */\n autoResize?: boolean\n}\n\nexport interface MountResult {\n renderer: BrowserRenderer\n unmount: () => void\n resize: (cols: number, rows: number) => void\n}\n\n/**\n * Imperative API to mount Gridland content into a canvas element.\n *\n * ```ts\n * const canvas = document.getElementById(\"my-canvas\") as HTMLCanvasElement\n * const { unmount } = mountGridland(canvas, <App />)\n * ```\n */\nexport function mountGridland(\n canvas: HTMLCanvasElement,\n element: ReactNode,\n options: MountOptions = {},\n): MountResult {\n const {\n fontSize = 14,\n fontFamily = \"'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace\",\n keyboard = true,\n autoResize = true,\n } = options\n\n // Set up RootRenderable\n setRootRenderableClass(RootRenderable)\n\n // Calculate grid dimensions\n const painter = new CanvasPainter({ fontSize, fontFamily })\n const tempCtx = canvas.getContext(\"2d\")!\n const cellSize = painter.measureCell(tempCtx)\n\n let cols = options.cols ?? Math.max(1, Math.floor(canvas.clientWidth / cellSize.width))\n let rows = options.rows ?? Math.max(1, Math.floor(canvas.clientHeight / cellSize.height))\n\n const renderer = new BrowserRenderer(canvas, cols, rows)\n const root = createBrowserRoot(renderer)\n\n root.render(element)\n renderer.start()\n\n // Always make canvas focusable via click\n canvas.tabIndex = 0\n\n // Keyboard\n let keydownHandler: ((e: KeyboardEvent) => void) | null = null\n if (keyboard) {\n keydownHandler = (e: KeyboardEvent) => renderer.handleKeyDown(e)\n canvas.addEventListener(\"keydown\", keydownHandler)\n }\n\n // Auto-resize\n let resizeObserver: ResizeObserver | null = null\n if (autoResize) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n const newCols = Math.max(1, Math.floor(width / cellSize.width))\n const newRows = Math.max(1, Math.floor(height / cellSize.height))\n if (newCols !== cols || newRows !== rows) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n }\n }\n })\n resizeObserver.observe(canvas)\n }\n\n return {\n renderer,\n unmount() {\n if (keydownHandler) {\n canvas.removeEventListener(\"keydown\", keydownHandler)\n }\n resizeObserver?.disconnect()\n renderer.stop()\n root.unmount()\n },\n resize(newCols: number, newRows: number) {\n cols = newCols\n rows = newRows\n renderer.resize(newCols, newRows)\n },\n }\n}\n", "/**\n * SSR-safe utilities for @gridland/web.\n * These can be imported in any environment (Node.js, browser, edge).\n */\n\n/** Check if running in a browser environment */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\"\n}\n\n/** Check if canvas is supported */\nexport function isCanvasSupported(): boolean {\n if (!isBrowser()) return false\n const canvas = document.createElement(\"canvas\")\n return !!canvas.getContext(\"2d\")\n}\n\n/** Calculate grid dimensions from pixel dimensions and font size */\nexport function calculateGridSize(\n widthPx: number,\n heightPx: number,\n cellWidth: number,\n cellHeight: number,\n): { cols: number; rows: number } {\n return {\n cols: Math.max(1, Math.floor(widthPx / cellWidth)),\n rows: Math.max(1, Math.floor(heightPx / cellHeight)),\n }\n}\n", "import { useEffect, useState } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport interface DroppedFile {\n name: string\n content: string\n type: string\n size: number\n}\n\nexport function useFileDrop(callback: (file: DroppedFile) => void): { isDragOver: boolean } {\n const { renderContext } = useBrowserContext()\n const [isDragOver, setIsDragOver] = useState(false)\n\n useEffect(() => {\n const handler = (file: DroppedFile) => {\n callback(file)\n }\n const onDragEnter = () => setIsDragOver(true)\n const onDragLeave = () => setIsDragOver(false)\n\n renderContext.on(\"file-drop\", handler)\n renderContext.on(\"drag-enter\", onDragEnter)\n renderContext.on(\"drag-leave\", onDragLeave)\n return () => {\n renderContext.off(\"file-drop\", handler)\n renderContext.off(\"drag-enter\", onDragEnter)\n renderContext.off(\"drag-leave\", onDragLeave)\n }\n }, [renderContext, callback])\n\n return { isDragOver }\n}\n", "import { useEffect } from \"react\"\nimport { useBrowserContext } from \"./browser-context\"\n\nexport function usePaste(callback: (text: string) => void): void {\n const { renderContext } = useBrowserContext()\n\n useEffect(() => {\n const handler = (text: string) => {\n callback(text)\n }\n renderContext.on(\"paste\", handler)\n return () => {\n renderContext.off(\"paste\", handler)\n }\n }, [renderContext, callback])\n}\n"],
|
|
5
|
+
"mappings": ";;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACFA,IAAM,iBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,MAAM,KAAK;AAAA,EACX,KAAK,KAAK;AAAA,EACV,QAAQ,KAAK;AAAA,EACb,WAAW,KAAK;AAAA,EAChB,OAAO,KAAK;AAAA,EACZ,SAAS,KAAK;AAAA,EACd,QAAQ,KAAK;AAAA,EACb,eAAe,KAAK;AACtB;;;ACTO,IAAM,eAAN,MAAmB;AAAA,EAChB,aAAa,oBAAI,IAAiC;AAAA,EAE1D,GAAG,OAAwB,UAA0B;AACnD,UAAM,OAAO,KAAK,WAAW,IAAI,KAAK,KAAK,CAAC;AAC5C,SAAK,KAAK,QAAQ;AAClB,SAAK,WAAW,IAAI,OAAO,IAAI;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAwB,UAA0B;AAC5D,WAAO,KAAK,GAAG,OAAO,QAAQ;AAAA,EAChC;AAAA,EAEA,IAAI,OAAwB,UAA0B;AACpD,WAAO,KAAK,eAAe,OAAO,QAAQ;AAAA,EAC5C;AAAA,EAEA,eAAe,OAAwB,UAA0B;AAC/D,UAAM,OAAO,KAAK,WAAW,IAAI,KAAK;AACtC,QAAI,MAAM;AACR,YAAM,MAAM,KAAK,QAAQ,QAAQ;AACjC,UAAI,QAAQ,GAAI,MAAK,OAAO,KAAK,CAAC;AAClC,UAAI,KAAK,WAAW,EAAG,MAAK,WAAW,OAAO,KAAK;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,OAA+B;AAChD,QAAI,OAAO;AACT,WAAK,WAAW,OAAO,KAAK;AAAA,IAC9B,OAAO;AACL,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,UAA2B,MAAsB;AACpD,UAAM,OAAO,KAAK,WAAW,IAAI,KAAK;AACtC,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,eAAW,YAAY,CAAC,GAAG,IAAI,GAAG;AAChC,eAAS,GAAG,IAAI;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,OAAwB,UAA0B;AACrD,UAAM,UAAU,IAAI,SAAgB;AAClC,WAAK,eAAe,OAAO,OAAO;AAClC,eAAS,GAAG,IAAI;AAAA,IAClB;AACA,WAAO,KAAK,GAAG,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEA,cAAc,OAAgC;AAC5C,WAAO,KAAK,WAAW,IAAI,KAAK,GAAG,UAAU;AAAA,EAC/C;AAAA,EAEA,UAAU,OAAoC;AAC5C,WAAO,CAAC,GAAI,KAAK,WAAW,IAAI,KAAK,KAAK,CAAC,CAAE;AAAA,EAC/C;AAAA,EAEA,aAAkC;AAChC,WAAO,CAAC,GAAG,KAAK,WAAW,KAAK,CAAC;AAAA,EACnC;AAAA,EAEA,gBAAgB,IAAkB;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,kBAA0B;AACxB,WAAO;AAAA,EACT;AACF;;;AC7EA,IAAI,YAAY,MAAM;AACpB,MAAI,aAAa,YAAY;AAE7B,UACF,SAASA,WAAU;AACjB,IAAAA,YAAWA,aAAY,CAAC;AAG1B,QAAIC;AAAE,IAAAA,OAAIA,KAAE,OAAOD,cAAa,cAAcA,YAAW,CAAC;AAAG,QAAI,IAAG;AAAG,IAAAC,GAAE,QAAM,IAAI,QAAQ,SAAS,GAAEC,IAAE;AAAC,WAAG;AAAE,WAAGA;AAAA,IAAC,CAAC;AAAE,QAAI,KAAG,OAAO,OAAO,CAAC,GAAED,EAAC,GAAEE,KAAE;AAAG,mBAAa,OAAO,YAAU,SAAS,kBAAgBA,KAAE,SAAS,cAAc;AAAK,mBAAaA,KAAE;AAAY,UAAIA,GAAE,QAAQ,OAAO,IAAEA,KAAEA,GAAE,OAAO,GAAEA,GAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAEA,KAAE;AAAG,QAAI,KAAGF,GAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAEG,KAAEH,GAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAE,WAAO,OAAOA,IAAE,EAAE;AAAE,SAAG;AAAK,QAAII;AAAE,IAAAJ,GAAE,eAAaI,KAAEJ,GAAE;AACje,QAAI,gBAAcA,GAAE,iBAAe;AAAG,gBAAU,OAAO,eAAaK,GAAE,iCAAiC;AAAE,QAAI,IAAG,KAAG;AAAG,aAASC,GAAE,GAAEL,IAAE,GAAE;AAAC,UAAEA,KAAE;AAAE,eAAQM,KAAE,IAAG,EAAEN,MAAG,MAAI;AAAC,YAAI,IAAE,EAAEA,IAAG;AAAE,YAAG,CAAC,EAAE;AAAM,YAAG,IAAE,KAAI;AAAC,cAAI,IAAE,EAAEA,IAAG,IAAE;AAAG,cAAG,QAAM,IAAE,KAAK,CAAAM,MAAG,OAAO,cAAc,IAAE,OAAK,IAAE,CAAC;AAAA,eAAM;AAAC,gBAAI,IAAE,EAAEN,IAAG,IAAE;AAAG,gBAAE,QAAM,IAAE,QAAM,IAAE,OAAK,KAAG,KAAG,IAAE,KAAG,IAAE,MAAI,KAAG,KAAG,KAAG,KAAG,IAAE,EAAEA,IAAG,IAAE;AAAG,oBAAM,IAAEM,MAAG,OAAO,aAAa,CAAC,KAAG,KAAG,OAAMA,MAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI;AAAA,UAAE;AAAA,QAAC,MAAM,CAAAA,MAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AACve,QAAI,IAAG,IAAG,GAAEC,IAAE,IAAGC,IAAEC,IAAE,IAAG;AAAG,aAAS,KAAI;AAAC,UAAI,IAAE,GAAG;AAAO,WAAG;AAAE,MAAAV,GAAE,QAAM,KAAG,IAAI,UAAU,CAAC;AAAE,MAAAA,GAAE,SAAOQ,KAAE,IAAI,WAAW,CAAC;AAAE,MAAAR,GAAE,SAAOS,KAAE,IAAI,WAAW,CAAC;AAAE,MAAAT,GAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAE,MAAAA,GAAE,UAAQ,KAAG,IAAI,YAAY,CAAC;AAAE,MAAAA,GAAE,UAAQU,KAAE,IAAI,YAAY,CAAC;AAAE,MAAAV,GAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAE,MAAAA,GAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,IAAC;AAAC,QAAI,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,KAAI;AAAC,UAAI,IAAEA,GAAE,OAAO,MAAM;AAAE,SAAG,QAAQ,CAAC;AAAA,IAAC;AAAC,QAAIW,KAAE,GAAE,KAAG,MAAKC,KAAE;AAChZ,aAASP,GAAE,GAAE;AAAC,UAAGL,GAAE,QAAQ,CAAAA,GAAE,QAAQ,CAAC;AAAE,UAAE,aAAW,IAAE;AAAI,MAAAG,GAAE,CAAC;AAAE,WAAG;AAAG,UAAE,IAAI,YAAY,aAAa,IAAE,0CAA0C;AAAE,SAAG,CAAC;AAAE,YAAM;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,EAAE,WAAW,uCAAuC;AAAA,IAAC;AAAC,QAAI;AAAE,QAAE;AAAw86F,QAAG,CAAC,GAAG,CAAC,GAAE;AAAC,UAAI,KAAG;AAAE,UAAEH,GAAE,aAAWA,GAAE,WAAW,IAAGE,EAAC,IAAEA,KAAE;AAAA,IAAE;AACxv7F,aAAS,KAAI;AAAC,UAAI,IAAE;AAAE,UAAG;AAAC,YAAG,KAAG,KAAGE,GAAE,QAAO,IAAI,WAAWA,EAAC;AAAE,YAAG,GAAG,CAAC,EAAE,KAAG;AAAC,cAAIH,KAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,IAAI,WAAWA,GAAE,MAAM;AAAE,eAAI,IAAE,GAAE,IAAEA,GAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAEA,GAAE,WAAW,CAAC;AAAE,cAAIM,KAAE;AAAA,QAAC,SAAO,GAAE;AAAC,gBAAM,MAAM,2CAA2C;AAAA,QAAE;AAAA,YAAM,CAAAA,KAAE;AAAO,YAAI,IAAEA;AAAE,YAAG,EAAE,QAAO;AAAE,cAAK;AAAA,MAAkD,SAAO,GAAE;AAAC,QAAAF,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAC7V,aAAS,KAAI;AAAC,aAAOD,MAAG,cAAY,OAAO,QAAM,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,eAAO,GAAG;AAAA,MAAC,CAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,YAAG,CAAC,EAAE,GAAG,OAAK,yCAAuC,IAAE;AAAI,eAAO,EAAE,YAAY;AAAA,MAAC,CAAC,EAAE,MAAM,WAAU;AAAC,eAAO,GAAG;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAK,IAAE,EAAE,SAAQ,GAAE,MAAM,EAAEJ,EAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,UAAG,WAAS,EAAE,QAAM;AAAW,UAAE,EAAE,QAAQ,kBAAiB,GAAG;AAAE,UAAIC,KAAE,EAAE,WAAW,CAAC;AAAE,aAAO,MAAIA,MAAG,MAAIA,KAAE,MAAI,IAAE;AAAA,IAAC;AACxb,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAE,GAAG,CAAC;AAAE,aAAO,WAAU;AAAC,eAAOA,GAAE,MAAM,MAAK,SAAS;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIY,KAAE,CAAC,CAAC,GAAE,EAAC,OAAM,OAAM,GAAE,EAAC,OAAM,KAAI,GAAE,EAAC,OAAM,KAAE,GAAE,EAAC,OAAM,MAAE,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIZ,KAAE,OAAM,IAAE,GAAG,GAAE,SAASM,IAAE;AAAC,aAAK,OAAK;AAAE,aAAK,UAAQA;AAAE,QAAAA,KAAE,MAAMA,EAAC,EAAE;AAAM,mBAASA,OAAI,KAAK,QAAM,KAAK,SAAS,IAAE,OAAKA,GAAE,QAAQ,sBAAqB,EAAE;AAAA,MAAE,CAAC;AAAE,QAAE,YAAU,OAAO,OAAON,GAAE,SAAS;AAAE,QAAE,UAAU,cAAY;AAAE,QAAE,UAAU,WAAS,WAAU;AAAC,eAAO,WAAS,KAAK,UAAQ,KAAK,OAAK,KAAK,OAAK,OAAK,KAAK;AAAA,MAAO;AAAE,aAAO;AAAA,IAAC;AAAC,QAAIa,KAAE;AAC/e,aAASC,GAAE,GAAE;AAAC,YAAM,IAAID,GAAE,CAAC;AAAA,IAAE;AAAC,QAAIE,KAAE,OAAG;AAAC,WAAGD,GAAE,sCAAoC,CAAC;AAAE,aAAOF,GAAE,CAAC,EAAE;AAAA,IAAK,GAAE,KAAG,OAAG;AAAC,cAAO,GAAE;AAAA,QAAC,KAAK;AAAO,iBAAO;AAAA,QAAE,KAAK;AAAK,iBAAO;AAAA,QAAE,KAAK;AAAG,iBAAO;AAAA,QAAE,KAAK;AAAG,iBAAO;AAAA,QAAE;AAAQ,cAAIZ,KAAE,GAAG,SAAO,GAAG,IAAI,IAAEY,GAAE;AAAO,UAAAA,GAAEZ,EAAC,IAAE,EAAC,IAAG,GAAE,OAAM,EAAC;AAAE,iBAAOA;AAAA,MAAC;AAAA,IAAC,GAAE,KAAG,QAAO,KAAG;AAAO,aAASgB,GAAE,GAAE;AAAC,eAAQhB,KAAE,IAAG,EAAE,CAAC,IAAG,CAAAA,MAAG,GAAG,EAAE,GAAG,CAAC;AAAE,aAAOA;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC;AAAE,aAAS,KAAI;AAAC,aAAK,EAAE,UAAQ;AAAC,YAAI,IAAE,EAAE,IAAI;AAAE,UAAE,EAAE,IAAE;AAAG,UAAE,QAAQ,EAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIiB,KAAE,QAAOC,KAAE,CAAC;AACpb,aAAS,GAAG,GAAElB,IAAE;AAAC,WAAI,WAASA,MAAGc,GAAE,6BAA6B,GAAE,EAAE,IAAG,CAAAd,KAAE,EAAE,GAAGA,EAAC,GAAE,IAAE,EAAE;AAAE,aAAOA;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAE,GAAG,CAAC;AAAE,UAAIA,KAAEgB,GAAE,CAAC;AAAE,MAAAG,GAAE,CAAC;AAAE,aAAOnB;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,iBAAS,KAAGc,GAAEd,KAAE,uBAAqB,GAAG,CAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,KAAI;AAAA,IAAC;AAAC,QAAI,KAAG;AAAG,aAAS,GAAG,GAAE;AAAC,QAAE,EAAE,MAAM;AAAM,YAAI,EAAE,MAAM,UAAQ,EAAE,IAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAEA,IAAE,GAAE;AAAC,UAAGA,OAAI,EAAE,QAAO;AAAE,UAAG,WAAS,EAAE,EAAE,QAAO;AAAK,UAAE,GAAG,GAAEA,IAAE,EAAE,CAAC;AAAE,aAAO,SAAO,IAAE,OAAK,EAAE,GAAG,CAAC;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAEA,IAAE;AAAC,MAAAA,KAAE,GAAG,GAAEA,EAAC;AAAE,aAAOkB,GAAElB,EAAC;AAAA,IAAC;AAC/e,QAAI,KAAG;AAAO,aAAS,GAAG,GAAE;AAAC,YAAM,IAAI,GAAG,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,MAAAA,GAAE,KAAGA,GAAE,KAAG,GAAG,0CAA0C;AAAE,OAAC,CAACA,GAAE,MAAI,CAAC,CAACA,GAAE,KAAG,GAAG,kDAAkD;AAAE,MAAAA,GAAE,QAAM,EAAC,OAAM,EAAC;AAAE,aAAOoB,GAAE,OAAO,OAAO,GAAE,EAAC,GAAE,EAAC,OAAMpB,GAAC,EAAC,CAAC,CAAC;AAAA,IAAC;AAAC,aAASoB,GAAE,GAAE;AAAC,UAAG,gBAAc,OAAO,qBAAqB,QAAOA,KAAE,CAAApB,OAAGA,IAAE;AAAE,WAAG,IAAI,qBAAqB,CAAAA,OAAG;AAAC,WAAGA,GAAE,CAAC;AAAA,MAAC,CAAC;AAAE,MAAAoB,KAAE,CAAApB,OAAG;AAAC,YAAI,IAAEA,GAAE;AAAE,UAAE,KAAG,GAAG,SAASA,IAAE,EAAC,GAAE,EAAC,GAAEA,EAAC;AAAE,eAAOA;AAAA,MAAC;AAAE,WAAG,CAAAA,OAAG;AAAC,WAAG,WAAWA,EAAC;AAAA,MAAC;AAAE,aAAOoB,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AACjd,aAAS,GAAG,GAAE;AAAC,aAAK,EAAE,UAAQ;AAAC,YAAIpB,KAAE,EAAE,IAAI;AAAE,UAAE,IAAI,EAAEA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,KAAK,aAAaQ,GAAE,KAAG,CAAC,CAAC;AAAA,IAAC;AAAC,QAAIa,KAAE,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,EAAE,GAAErB,IAAE,GAAE;AAAC,eAASM,GAAEgB,IAAE;AAAC,QAAAA,KAAE,EAAEA,EAAC;AAAE,QAAAA,GAAE,WAAS,EAAE,UAAQ,GAAG,iCAAiC;AAAE,iBAAQC,KAAE,GAAEA,KAAE,EAAE,QAAO,EAAEA,GAAE,CAAAC,GAAE,EAAED,EAAC,GAAED,GAAEC,EAAC,CAAC;AAAA,MAAC;AAAC,QAAE,QAAQ,SAASD,IAAE;AAAC,WAAGA,EAAC,IAAEtB;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE,MAAMA,GAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAAA,GAAE,QAAQ,CAACsB,IAAEC,OAAI;AAAC,UAAE,eAAeD,EAAC,IAAE,EAAEC,EAAC,IAAE,EAAED,EAAC,KAAG,EAAE,KAAKA,EAAC,GAAED,GAAE,eAAeC,EAAC,MAAID,GAAEC,EAAC,IAAE,CAAC,IAAGD,GAAEC,EAAC,EAAE,KAAK,MAAI;AAAC,YAAEC,EAAC,IAAE,EAAED,EAAC;AAAE,YAAE;AAAE,gBAAI,EAAE,UAAQhB,GAAE,CAAC;AAAA,QAAC,CAAC;AAAA,MAAE,CAAC;AAAE,YAAI,EAAE,UAAQA,GAAE,CAAC;AAAA,IAAC;AACne,aAAS,GAAG,GAAE;AAAC,cAAO,GAAE;AAAA,QAAC,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,wBAAsB,CAAC;AAAA,MAAE;AAAA,IAAC;AAC/I,aAASkB,GAAE,GAAExB,IAAE,IAAE,CAAC,GAAE;AAAC,UAAG,EAAE,oBAAmBA,IAAG,OAAM,IAAI,UAAU,yDAAyD;AAAE,UAAIM,KAAEN,GAAE;AAAK,WAAGc,GAAE,WAASR,KAAE,+CAA+C;AAAE,UAAG,EAAE,eAAe,CAAC,GAAE;AAAC,YAAG,EAAE,GAAG;AAAO,QAAAQ,GAAE,2BAAyBR,KAAE,SAAS;AAAA,MAAC;AAAC,QAAE,CAAC,IAAEN;AAAE,aAAO,GAAG,CAAC;AAAE,MAAAqB,GAAE,eAAe,CAAC,MAAIrB,KAAEqB,GAAE,CAAC,GAAE,OAAOA,GAAE,CAAC,GAAErB,GAAE,QAAQ,OAAG,EAAE,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,MAAAc,GAAE,EAAE,EAAE,EAAE,EAAE,OAAK,2BAA2B;AAAA,IAAC;AAAC,aAASW,KAAG;AAAA,IAAC;AACpb,aAAS,GAAG,GAAEzB,IAAE,GAAE;AAAC,UAAG,WAAS,EAAEA,EAAC,EAAE,GAAE;AAAC,YAAIM,KAAE,EAAEN,EAAC;AAAE,UAAEA,EAAC,IAAE,WAAU;AAAC,YAAEA,EAAC,EAAE,EAAE,eAAe,UAAU,MAAM,KAAGc,GAAE,eAAa,IAAE,mDAAiD,UAAU,SAAO,yBAAuB,EAAEd,EAAC,EAAE,IAAE,IAAI;AAAE,iBAAO,EAAEA,EAAC,EAAE,EAAE,UAAU,MAAM,EAAE,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,UAAEA,EAAC,EAAE,IAAE,CAAC;AAAE,UAAEA,EAAC,EAAE,EAAEM,GAAE,CAAC,IAAEA;AAAA,MAAC;AAAA,IAAC;AACjT,aAAS,GAAG,GAAEN,IAAE;AAAC,MAAAD,GAAE,eAAe,CAAC,KAAGe,GAAE,kCAAgC,IAAE,SAAS,GAAE,GAAGf,IAAE,GAAE,CAAC,GAAEA,GAAE,eAAe,MAAM,KAAGe,GAAE,iGAAiG,GAAEf,GAAE,CAAC,EAAE,EAAE,MAAM,IAAEC,MAAGD,GAAE,CAAC,IAAEC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAE;AAAC,WAAK,OAAK;AAAE,WAAK,cAAYtB;AAAE,WAAK,IAAE;AAAE,WAAK,IAAEM;AAAE,WAAK,IAAE;AAAE,WAAK,KAAG;AAAE,WAAK,KAAG;AAAE,WAAK,KAAGgB;AAAE,WAAK,KAAG,CAAC;AAAA,IAAC;AACtX,aAAS,GAAG,GAAEtB,IAAE,GAAE;AAAC,aAAKA,OAAI,IAAG,CAAAA,GAAE,MAAIc,GAAE,kCAAgC,EAAE,OAAK,0BAAwBd,GAAE,IAAI,GAAE,IAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAG,SAAOA,GAAE,QAAO,KAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI,GAAE;AAAE,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,aAAO,GAAGd,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA,IAAC;AAClX,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAG,SAAOA,IAAE;AAAC,aAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI;AAAE,YAAG,KAAK,IAAG;AAAC,cAAI,IAAE,KAAK,GAAG;AAAE,mBAAO,KAAG,EAAE,KAAK,KAAK,GAAE,CAAC;AAAE,iBAAO;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAC,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,OAAC,KAAK,MAAId,GAAE,EAAE,EAAE,MAAIc,GAAE,sCAAoCd,GAAE,EAAE,IAAEA,GAAE,EAAE,EAAE,OAAKA,GAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAE,UAAE,GAAGA,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAE,UAAG,KAAK,GAAG,SAAO,WAASA,GAAE,EAAE,KAAGc,GAAE,iDAAiD,GACrf,KAAK,IAAG;AAAA,QAAC,KAAK;AAAE,UAAAd,GAAE,EAAE,MAAI,OAAK,IAAEA,GAAE,EAAE,IAAEc,GAAE,sCAAoCd,GAAE,EAAE,IAAEA,GAAE,EAAE,EAAE,OAAKA,GAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAE;AAAA,QAAM,KAAK;AAAE,cAAEA,GAAE,EAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAGA,GAAE,EAAE,MAAI,KAAK,KAAEA,GAAE,EAAE;AAAA,eAAM;AAAC,gBAAIM,KAAEN,GAAE,MAAM;AAAE,gBAAE,KAAK,GAAG,GAAE,GAAG,WAAU;AAAC,cAAAM,GAAE,QAAQ,EAAE;AAAA,YAAC,CAAC,CAAC;AAAE,qBAAO,KAAG,EAAE,KAAK,KAAK,GAAE,CAAC;AAAA,UAAC;AAAC;AAAA,QAAM;AAAQ,UAAAQ,GAAE,6BAA6B;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AACrV,aAAS,GAAG,GAAEd,IAAE;AAAC,UAAG,SAAOA,GAAE,QAAO,KAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI,GAAE;AAAE,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,MAAAd,GAAE,EAAE,EAAE,MAAIc,GAAE,qCAAmCd,GAAE,EAAE,EAAE,OAAK,wBAAsB,KAAK,IAAI;AAAE,aAAO,GAAGA,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA,IAAC;AACtU,aAAS,EAAE,GAAEA,IAAE,GAAEM,IAAE;AAAC,WAAK,OAAK;AAAE,WAAK,IAAEN;AAAE,WAAK,KAAG;AAAE,WAAK,KAAGM;AAAE,WAAK,KAAG;AAAG,WAAK,IAAE,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG;AAAO,iBAASN,GAAE,IAAE,KAAK,aAAW,MAAI,KAAK,aAAWM,KAAE,KAAG,IAAG,KAAK,IAAE;AAAA,IAAK;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,MAAAD,GAAE,eAAe,CAAC,KAAG,GAAG,qCAAqC;AAAE,MAAAA,GAAE,CAAC,IAAEC;AAAE,MAAAD,GAAE,CAAC,EAAE,IAAE;AAAA,IAAM;AACxS,aAAS,GAAG,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC;AAAE,aAAO,WAAU;AAAC,UAAE,SAAO;AAAE,eAAO,OAAO,GAAE,SAAS;AAAE,YAAG,EAAE,SAAS,GAAG,GAAE;AAAC,cAAIM,KAAEP,GAAE,aAAW,CAAC;AAAE,UAAAO,KAAE,KAAG,EAAE,SAAOA,GAAE,MAAM,MAAK,CAACN,EAAC,EAAE,OAAO,CAAC,CAAC,IAAEM,GAAE,KAAK,MAAKN,EAAC;AAAA,QAAC,MAAM,CAAAM,KAAE,GAAG,IAAIN,EAAC,EAAE,MAAM,MAAK,CAAC;AAAE,eAAOM;AAAA,MAAC;AAAA,IAAC;AAAC,aAASoB,GAAE,GAAE1B,IAAE;AAAC,UAAEgB,GAAE,CAAC;AAAE,UAAI,IAAE,EAAE,SAAS,GAAG,IAAE,GAAG,GAAEhB,EAAC,IAAE,GAAG,IAAIA,EAAC;AAAE,oBAAY,OAAO,KAAGc,GAAE,6CAA2C,IAAE,OAAKd,EAAC;AAAE,aAAO;AAAA,IAAC;AAAC,QAAI,KAAG;AAC1X,aAAS,GAAG,GAAEA,IAAE;AAAC,eAAS,EAAE,GAAE;AAAC,UAAE,CAAC,KAAG,EAAE,CAAC,MAAI,GAAG,CAAC,IAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAGM,GAAE,KAAK,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,MAAI;AAAC,UAAIA,KAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAAN,GAAE,QAAQ,CAAC;AAAE,YAAM,IAAI,GAAG,IAAE,OAAKM,GAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAAA,IAAE;AAC/J,aAAS,GAAG,GAAEN,IAAE,GAAEM,IAAE,GAAE;AAAC,UAAI,IAAEN,GAAE;AAAO,UAAE,KAAGc,GAAE,gFAAgF;AAAE,UAAI,IAAE,SAAOd,GAAE,CAAC,KAAG,SAAO,GAAEsB,KAAE;AAAG,WAAI,IAAE,GAAE,IAAEtB,GAAE,QAAO,EAAE,EAAE,KAAG,SAAOA,GAAE,CAAC,KAAG,WAASA,GAAE,CAAC,EAAE,GAAE;AAAC,QAAAsB,KAAE;AAAG;AAAA,MAAK;AAAC,UAAIC,KAAE,WAASvB,GAAE,CAAC,EAAE,MAAK,IAAE,IAAE,GAAE,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAO,WAAU;AAAC,kBAAU,WAAS,KAAGc,GAAE,cAAY,IAAE,kBAAgB,UAAU,SAAO,0BAAwB,IAAE,QAAQ;AAAE,UAAE,SAAO;AAAE,UAAE,SAAO,IAAE,IAAE;AAAE,UAAE,CAAC,IAAE;AAAE,YAAG,GAAE;AAAC,cAAIa,KAAE3B,GAAE,CAAC,EAAE,WAAW,GAAE,IAAI;AAAE,YAAE,CAAC,IAAE2B;AAAA,QAAC;AAAC,iBAAQC,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IACvf5B,GAAE4B,KAAE,CAAC,EAAE,WAAW,GAAE,UAAUA,EAAC,CAAC,GAAE,EAAE,KAAK,EAAEA,EAAC,CAAC;AAAE,QAAAA,KAAEtB,GAAE,MAAM,MAAK,CAAC;AAAE,YAAGgB,GAAE,IAAG,CAAC;AAAA,YAAO,UAAQO,KAAE,IAAE,IAAE,GAAEA,KAAE7B,GAAE,QAAO6B,MAAI;AAAC,cAAIC,KAAE,MAAID,KAAEF,KAAE,EAAEE,KAAE,CAAC;AAAE,mBAAO7B,GAAE6B,EAAC,EAAE,KAAG7B,GAAE6B,EAAC,EAAE,EAAEC,EAAC;AAAA,QAAC;AAAC,QAAAH,KAAEJ,KAAEvB,GAAE,CAAC,EAAE,aAAa4B,EAAC,IAAE;AAAO,eAAOD;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE3B,IAAE;AAAC,eAAQ,IAAE,CAAC,GAAEM,KAAE,GAAEA,KAAE,GAAEA,KAAI,GAAE,KAAKG,GAAET,KAAE,IAAEM,MAAG,CAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,UAAE,KAAG,MAAI,EAAEM,GAAE,CAAC,EAAE,OAAKA,GAAE,CAAC,IAAE,QAAO,GAAG,KAAK,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,UAAG,SAAO,EAAE,QAAM;AAAO,UAAIZ,KAAE,OAAO;AAAE,aAAM,aAAWA,MAAG,YAAUA,MAAG,eAAaA,KAAE,EAAE,SAAS,IAAE,KAAG;AAAA,IAAC;AACpc,aAAS,GAAG,GAAEA,IAAE;AAAC,cAAOA,IAAE;AAAA,QAAC,KAAK;AAAE,iBAAO,SAAS,GAAE;AAAC,mBAAO,KAAK,aAAa,GAAG,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,SAAS,GAAE;AAAC,mBAAO,KAAK,aAAa,GAAG,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,yBAAuB,CAAC;AAAA,MAAE;AAAA,IAAC;AAC9M,aAAS,GAAG,GAAEA,IAAE,GAAE;AAAC,cAAOA,IAAE;AAAA,QAAC,KAAK;AAAE,iBAAO,IAAE,SAASM,IAAE;AAAC,mBAAO,GAAGA,EAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAO,EAAEA,EAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,IAAE,SAASA,IAAE;AAAC,mBAAOC,GAAED,MAAG,CAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAO,GAAGA,MAAG,CAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,IAAE,SAASA,IAAE;AAAC,mBAAOE,GAAEF,MAAG,CAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAOG,GAAEH,MAAG,CAAC;AAAA,UAAC;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,2BAAyB,CAAC;AAAA,MAAE;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,eAAQ,IAAE,IAAGM,KAAE,GAAE,EAAEA,MAAGN,KAAE,IAAG,EAAEM,IAAE;AAAC,YAAI,IAAEC,GAAE,IAAE,IAAED,MAAG,CAAC;AAAE,YAAG,KAAG,EAAE;AAAM,aAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAC9Z,aAAS,GAAG,GAAEN,IAAE,GAAE;AAAC,iBAAS,MAAI,IAAE;AAAY,UAAG,IAAE,EAAE,QAAO;AAAE,WAAG;AAAE,UAAIM,KAAEN;AAAE,UAAE,IAAE,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE;AAAO,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,CAAAO,GAAEP,MAAG,CAAC,IAAE,EAAE,WAAW,CAAC,GAAEA,MAAG;AAAE,MAAAO,GAAEP,MAAG,CAAC,IAAE;AAAE,aAAOA,KAAEM;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,IAAE,EAAE;AAAA,IAAM;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,eAAQ,IAAE,GAAEM,KAAE,IAAG,EAAE,KAAGN,KAAE,MAAI;AAAC,YAAI,IAAEQ,GAAE,IAAE,IAAE,KAAG,CAAC;AAAE,YAAG,KAAG,EAAE;AAAM,UAAE;AAAE,iBAAO,KAAG,KAAG,OAAMF,MAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI,KAAGA,MAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AACvY,aAAS,GAAG,GAAEN,IAAE,GAAE;AAAC,iBAAS,MAAI,IAAE;AAAY,UAAG,IAAE,EAAE,QAAO;AAAE,UAAIM,KAAEN;AAAE,UAAEM,KAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,EAAE,WAAW,CAAC;AAAE,YAAG,SAAO,KAAG,SAAO,GAAE;AAAC,cAAI,IAAE,EAAE,WAAW,EAAE,CAAC;AAAE,cAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,QAAI;AAAC,QAAAE,GAAER,MAAG,CAAC,IAAE;AAAE,QAAAA,MAAG;AAAE,YAAGA,KAAE,IAAE,EAAE;AAAA,MAAK;AAAC,MAAAQ,GAAER,MAAG,CAAC,IAAE;AAAE,aAAOA,KAAEM;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,eAAQN,KAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAIM,KAAE,EAAE,WAAW,CAAC;AAAE,iBAAOA,MAAG,SAAOA,MAAG,EAAE;AAAE,QAAAN,MAAG;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIA,KAAE,GAAG,CAAC;AAAE,aAAO,WAASA,KAAEgB,GAAE,CAAC,IAAEhB;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIA,KAAE,GAAG;AAAO,SAAG,KAAK,CAAC;AAAE,aAAOA;AAAA,IAAC;AACre,aAAS,GAAG,GAAEA,IAAE;AAAC,eAAQ,IAAE,MAAM,CAAC,GAAEM,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IAAE,GAAGG,GAAET,KAAE,IAAEM,MAAG,CAAC,GAAE,eAAaA,EAAC;AAAE,aAAO;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC,GAAE,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,IAAAO,KAAEd,GAAE,eAAa,GAAG,cAAc;AAAE,IAAAA,GAAE,sBAAoB,WAAU;AAAC,eAAQ,IAAE,GAAEC,KAAE,GAAEA,KAAEY,GAAE,QAAO,EAAEZ,GAAE,YAASY,GAAEZ,EAAC,KAAG,EAAE;AAAE,aAAO;AAAA,IAAC;AAAE,IAAAD,GAAE,kBAAgB,WAAU;AAAC,eAAQ,IAAE,GAAE,IAAEa,GAAE,QAAO,EAAE,EAAE,KAAG,WAASA,GAAE,CAAC,EAAE,QAAOA,GAAE,CAAC;AAAE,aAAO;AAAA,IAAI;AAAE,SAAGb,GAAE,mBAAiB,GAAG,kBAAkB;AAAE,aAAQ,KAAG,MAAM,GAAG,GAAE,KAAG,GAAE,MAAI,IAAG,EAAE,GAAG,IAAG,EAAE,IAAE,OAAO,aAAa,EAAE;AAAE,SAAG;AAAG,IAAAA,GAAE,4BAA0B,WAAU;AAAC,aAAO,OAAO,KAAKmB,EAAC,EAAE;AAAA,IAAM;AACthB,IAAAnB,GAAE,4BAA0B,WAAU;AAAC,UAAI,IAAE,CAAC,GAAEC;AAAE,WAAIA,MAAKkB,GAAE,CAAAA,GAAE,eAAelB,EAAC,KAAG,EAAE,KAAKkB,GAAElB,EAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAE,IAAAD,GAAE,sBAAoB;AAAG,IAAAA,GAAE,mBAAiB,SAAS,GAAE;AAAC,MAAAkB,KAAE;AAAE,QAAE,UAAQA,MAAGA,GAAE,EAAE;AAAA,IAAC;AAAE,SAAGlB,GAAE,gBAAc,GAAG,eAAe;AAAE,IAAA0B,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,UAAG,EAAE,gBAAgBA,MAAG,aAAaA,IAAG,QAAM;AAAG,UAAIzB,KAAE,KAAK,EAAE,EAAE,GAAE,IAAE,KAAK,EAAE,GAAEM,KAAE,EAAE,EAAE,EAAE;AAAE,WAAI,IAAE,EAAE,EAAE,GAAEN,GAAE,IAAG,KAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAKM,GAAE,IAAG,KAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAON,OAAIM,MAAG,MAAI;AAAA,IAAC;AACva,IAAAmB,GAAE,UAAU,QAAM,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,UAAG,KAAK,EAAE,GAAG,QAAO,KAAK,EAAE,MAAM,SAAO,GAAE;AAAK,UAAI,IAAEL,IAAEpB,KAAE,QAAO,IAAEA,GAAE,QAAOM,KAAE,OAAO,eAAe,IAAI,GAAE,IAAE,KAAK;AAAE,UAAE,EAAE,EAAE,KAAKN,IAAEM,IAAE,EAAC,GAAE,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,GAAE,EAAE,GAAE,IAAG,EAAE,IAAG,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,EAAC,EAAC,EAAC,CAAC,CAAC;AAAE,QAAE,EAAE,MAAM,SAAO;AAAE,QAAE,EAAE,IAAE;AAAG,aAAO;AAAA,IAAC;AAAE,IAAAmB,GAAE,UAAU,QAAQ,IAAE,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,WAAK,EAAE,KAAG,CAAC,KAAK,EAAE,MAAIX,GAAE,uCAAuC;AAAE,SAAG,IAAI;AAAE,SAAG,KAAK,CAAC;AAAE,WAAK,EAAE,OAAK,KAAK,EAAE,IAAE,QAAO,KAAK,EAAE,IAAE;AAAA,IAAO;AAAE,IAAAW,GAAE,UAAU,YAAU,WAAU;AAAC,aAAM,CAAC,KAAK,EAAE;AAAA,IAAC;AAClgB,IAAAA,GAAE,UAAU,cAAY,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,WAAK,EAAE,KAAG,CAAC,KAAK,EAAE,MAAIX,GAAE,uCAAuC;AAAE,QAAE,KAAK,IAAI;AAAE,YAAI,EAAE,UAAQG,MAAGA,GAAE,EAAE;AAAE,WAAK,EAAE,IAAE;AAAG,aAAO;AAAA,IAAI;AAAE,MAAE,UAAU,KAAG,SAAS,GAAE;AAAC,WAAK,OAAK,IAAE,KAAK,GAAG,CAAC;AAAG,aAAO;AAAA,IAAC;AAAE,MAAE,UAAU,KAAG,SAAS,GAAE;AAAC,WAAK,KAAG,KAAK,EAAE,CAAC;AAAA,IAAC;AAAE,MAAE,UAAU,iBAAe;AAAE,MAAE,UAAU,uBAAqB;AAAG,MAAE,UAAU,eAAa,SAAS,GAAE;AAAC,UAAG,SAAO,EAAE,GAAE,QAAQ,EAAE;AAAA,IAAC;AAC9Z,MAAE,UAAU,eAAa,SAAS,GAAE;AAAC,eAASjB,KAAG;AAAC,eAAO,KAAK,KAAG,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,KAAK,IAAG,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,MAAK,GAAE,EAAC,CAAC;AAAA,MAAC;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC;AAAE,UAAG,CAAC,EAAE,QAAO,KAAK,GAAG,CAAC,GAAE;AAAK,UAAIM,KAAE,GAAG,KAAK,GAAE,CAAC;AAAE,UAAG,WAASA,IAAE;AAAC,YAAG,MAAIA,GAAE,EAAE,MAAM,MAAM,QAAOA,GAAE,EAAE,IAAE,GAAEA,GAAE,EAAE,IAAE,GAAEA,GAAE,MAAM;AAAE,QAAAA,KAAEA,GAAE,MAAM;AAAE,aAAK,GAAG,CAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,MAAAA,KAAE,KAAK,EAAE,GAAG,CAAC;AAAE,MAAAA,KAAE,GAAGA,EAAC;AAAE,UAAG,CAACA,GAAE,QAAON,GAAE,KAAK,IAAI;AAAE,MAAAM,KAAE,KAAK,KAAGA,GAAE,KAAGA,GAAE;AAAY,UAAI,IAAE,GAAG,GAAE,KAAK,GAAEA,GAAE,CAAC;AAAE,aAAO,SAAO,IAAEN,GAAE,KAAK,IAAI,IAAE,KAAK,KAAG,GAAGM,GAAE,EAAE,GAAE,EAAC,GAAEA,IAAE,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAGA,GAAE,EAAE,GAAE,EAAC,GAAEA,IAAE,GAAE,EAAC,CAAC;AAAA,IAAC;AACve,SAAGP,GAAE,mBAAiB,GAAG,kBAAkB;AAC3C,QAAI,KAAG,cAAY,OAAO,OAAK,OAAK,SAAS,GAAE;AAAC,UAAIC,KAAE,IAAG,IAAE;AAAE,UAAE,EAAE,QAAQ,sBAAqB,EAAE;AAAE,SAAE;AAAC,YAAIM,KAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,QAAAA,KAAEA,MAAG,IAAE,KAAG;AACnf,aAAG,IAAE,OAAK,IAAE,KAAG;AAAE,YAAIgB,MAAG,IAAE,MAAI,IAAE;AAAE,QAAAtB,MAAG,OAAO,aAAaM,EAAC;AAAE,eAAK,MAAIN,MAAG,OAAO,aAAa,CAAC;AAAG,eAAK,MAAIA,MAAG,OAAO,aAAasB,EAAC;AAAA,MAAE,SAAO,IAAE,EAAE;AAAQ,aAAOtB;AAAA,IAAC,GAAE,KAAG;AAAA,MAAC,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE;AAAC,QAAAF,GAAE,wBAAsB,IAAEC,GAAE,GAAE,CAAC,IAAE,MAAI,WAAS,CAACL,KAAEA,KAAEK,GAAE,GAAEL,EAAC,IAAE,KAAG,oBAAmB,GAAEM,KAAEA,KAAED,GAAE,GAAEC,EAAC,IAAE,KAAG,kBAAkB,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAEgB,GAAE,CAAC;AAAE,QAAAhB,KAAE,GAAGA,IAAE,SAAS;AAAE,YAAEe,GAAE,CAAC;AAAE,YAAIT,KAAE,CAAC,EAAE,OAAM,IAAEN,GAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,EAAE,GAAEsB,KAAE,EAAE,EAAE;AAAY,YAAE,GAAG,GAAE,WAAU;AAAC,YAAE,EAAE,GAAG,QAAQ,SAAS,GAAE;AAAC,gBAAG,KAAK,CAAC,MAAI,EAAE,CAAC,EAAE,OAAM,IAAI,GAAG,2BACje,IAAE,oCAAoC;AAAA,UAAE,EAAE,KAAK,IAAI,CAAC;AAAE,iBAAO,eAAe,MAAK,YAAW,EAAC,OAAM,EAAC,CAAC;AAAE,eAAK,YAAY,MAAM,MAAKhB,GAAE,KAAK,SAAS,CAAC;AAAA,QAAC,CAAC;AAAE,UAAE,cAAY,WAAU;AAAC,mBAAO,KAAGQ,GAAE,oCAAoC;AAAE,cAAI,IAAEQ,GAAE,UAAU,MAAM,QAAO,CAAC,IAAI,EAAE,OAAOhB,GAAE,KAAK,SAAS,CAAC,CAAC;AAAE,aAAG,CAAC;AAAE,cAAI,IAAE,EAAE;AAAE,YAAE,oBAAoB;AAAE,YAAE,KAAG;AAAG,iBAAO,iBAAiB,MAAK,EAAC,GAAE,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,UAAAc,GAAE,IAAI;AAAE,cAAE,EAAE;AAAE,cAAE,GAAG,GAAE,CAAC;AAAE,UAAAF,GAAE,eAAe,CAAC,IAAEJ,GAAE,4CAA0C,CAAC,IAAEI,GAAE,CAAC,IAAE;AAAA,QAAI;AAAE,UAAE,aAAW,WAAU;AAAC,mBAC9f,KAAGJ,GAAE,mCAAmC;AAAE,aAAG,IAAI;AAAE,cAAI,IAAE,KAAK,EAAE;AAAE,cAAE,GAAG,GAAE,CAAC;AAAE,UAAAI,GAAE,eAAe,CAAC,IAAE,OAAOA,GAAE,CAAC,IAAEJ,GAAE,gDAA8C,CAAC;AAAA,QAAC;AAAE,UAAE,YAAU,OAAO,OAAO,CAAC;AAAE,iBAAQS,MAAK,EAAE,GAAE,UAAUA,EAAC,IAAE,EAAEA,EAAC;AAAE,eAAO,GAAG,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIvB,KAAE,GAAG,CAAC;AAAE,eAAO,GAAG,CAAC;AAAE,YAAI,IAAEA,GAAE,IAAGM,KAAEN,GAAE,GAAE,IAAEA,GAAE,IAAG,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,UAAE,CAAC,CAAC,GAAE,GAAE,OAAG;AAAC,cAAIsB,KAAE,CAAC;AAAE,YAAE,QAAQ,CAACC,IAAE,MAAI;AAAC,gBAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAG,IAAEA,GAAE,IAAGI,KAAE,EAAE,IAAE,EAAE,MAAM,GAAEC,KAAEL,GAAE,IAAGM,KAAEN,GAAE;AAAG,YAAAD,GAAEC,GAAE,EAAE,IAAE,EAAC,MAAK,CAAAO,OAAG,EAAE,aAAa,EAAE,GAAEA,EAAC,CAAC,GAAE,OAAM,CAACA,IAAE,OAAK;AAAC,kBAAIC,KAAE,CAAC;AAAE,cAAAH;AAAA,gBAAEC;AAAA,gBACrfC;AAAA,gBAAEH,GAAE,WAAWI,IAAE,EAAE;AAAA,cAAC;AAAE,iBAAGA,EAAC;AAAA,YAAC,EAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC,EAAC,MAAK/B,GAAE,MAAK,cAAa,SAASuB,IAAE;AAAC,gBAAI,IAAE,CAAC,GAAE;AAAE,iBAAI,KAAKD,GAAE,GAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,KAAKC,EAAC;AAAE,YAAAjB,GAAEiB,EAAC;AAAE,mBAAO;AAAA,UAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,qBAAQ,KAAKD,GAAE,KAAG,EAAE,KAAK,GAAG,OAAM,IAAI,UAAU,sBAAoB,IAAE,GAAG;AAAE,gBAAI,IAAE,EAAE;AAAE,iBAAI,KAAKA,GAAE,CAAAA,GAAE,CAAC,EAAE,MAAM,GAAE,EAAE,CAAC,CAAC;AAAE,qBAAOC,MAAGA,GAAE,KAAKjB,IAAE,CAAC;AAAE,mBAAO;AAAA,UAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAEA,GAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,WAAU;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAEM,IAAE,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE;AAAA,UAAC,MAAKxB;AAAA,UAAE,cAAa,SAAS,GAAE;AAAC,mBAAM,CAAC,CAAC;AAAA,UAAC;AAAA,UAAE,YAAW,SAAS,GAAEsB,IAAE;AAAC,mBAAOA,KAAEhB,KAAE;AAAA,UAAC;AAAA,UAAE,gBAAe;AAAA,UAChgB,sBAAqB,SAAS,GAAE;AAAC,gBAAG,MAAI,EAAE,KAAIgB,KAAE;AAAA,qBAAW,MAAI,EAAE,CAAAA,KAAEf;AAAA,qBAAU,MAAI,EAAE,CAAAe,KAAEd;AAAA,gBAAO,OAAM,IAAI,UAAU,gCAA8BR,EAAC;AAAE,mBAAO,KAAK,aAAasB,GAAE,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,UAAE,GAAE;AAAA,QAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEtB,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,YAAEP,GAAE,CAAC;AAAE,YAAEU,GAAE,GAAE,CAAC;AAAE,QAAAJ,OAAIA,KAAEI,GAAE,GAAEJ,EAAC;AAAG,cAAI,IAAEI,GAAEH,IAAE,CAAC;AAAG,YAAEG,GAAE,GAAE,CAAC;AAAE,YAAIC,KAAE,GAAG,CAAC;AAAE,WAAGA,IAAE,WAAU;AAAC,aAAG,sBAAoB,IAAE,yBAAwB,CAACrB,EAAC,CAAC;AAAA,QAAC,CAAC;AAAE,UAAE,CAAC,GAAEN,IAAE,CAAC,GAAEM,KAAE,CAACA,EAAC,IAAE,CAAC,GAAE,SAASsB,IAAE;AAAC,UAAAA,KAAEA,GAAE,CAAC;AAAE,cAAGtB,IAAE;AAAC,gBAAIuB,KAAED,GAAE;AAAE,gBAAIE,KAAED,GAAE;AAAA,UAAC,MAAM,CAAAC,KAAEL,GAAE;AAAU,UAAAG,KAAE,GAAGD,IAAE,WAAU;AAAC,gBAAG,OAAO,eAAe,IAAI,MAAI,GAAG,OAAM,IAAId,GAAE,4BAClgB,CAAC;AAAE,gBAAG,WAASkB,GAAE,EAAE,OAAM,IAAIlB,GAAE,IAAE,gCAAgC;AAAE,gBAAI,KAAGkB,GAAE,EAAE,UAAU,MAAM;AAAE,gBAAG,WAAS,GAAG,OAAM,IAAIlB,GAAE,6BAA2B,IAAE,yCAAuC,UAAU,SAAO,mBAAiB,OAAO,KAAKkB,GAAE,CAAC,EAAE,SAAS,IAAE,uBAAuB;AAAE,mBAAO,GAAG,MAAM,MAAK,SAAS;AAAA,UAAC,CAAC;AAAE,cAAI,KAAG,OAAO,OAAOD,IAAE,EAAC,aAAY,EAAC,OAAMF,GAAC,EAAC,CAAC;AAAE,UAAAA,GAAE,YAAU;AAAG,cAAIG,KAAE,IAAI,GAAG,GAAEH,IAAE,IAAG,GAAEC,IAAE,GAAEP,IAAE,CAAC;AAAE,UAAAO,KAAE,IAAI,EAAE,GAAEE,IAAE,MAAG,KAAE;AAAE,UAAAD,KAAE,IAAI,EAAE,IAAE,KAAIC,IAAE,OAAG,KAAE;AAAE,cAAI,KAAG,IAAI,EAAE,IAAE,WAAUA,IAAE,OAAG,IAAE;AAAE,aAAG,CAAC,IAAE;AAAA,YAAC,aAAYD;AAAA,YACrf,IAAG;AAAA,UAAE;AAAE,aAAGH,IAAEC,EAAC;AAAE,iBAAM,CAACC,IAAEC,IAAE,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE9B,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAE;AAAC,YAAIgB,KAAE,GAAG,GAAEhB,EAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,YAAE0B,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAASH,IAAE;AAAC,mBAAS,IAAG;AAAC,eAAG,iBAAe,IAAE,yBAAwBD,EAAC;AAAA,UAAC;AAAC,UAAAC,KAAEA,GAAE,CAAC;AAAE,cAAI,IAAEA,GAAE,OAAK,MAAIvB;AAAE,UAAAA,GAAE,WAAW,IAAI,MAAIA,KAAE,OAAOA,GAAE,UAAU,CAAC,CAAC;AAAG,cAAI,IAAEuB,GAAE,EAAE;AAAY,qBAAS,EAAEvB,EAAC,KAAG,EAAE,IAAE,IAAE,GAAE,EAAEA,EAAC,IAAE,MAAI,GAAG,GAAEA,IAAE,CAAC,GAAE,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAG,YAAE,CAAC,GAAEsB,IAAE,SAAS,GAAE;AAAC,gBAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAE,MAAK,GAAE,CAAC;AAAE,uBAAS,EAAEtB,EAAC,EAAE,KAAG,EAAE,IAAE,IAAE,GAAE,EAAEA,EAAC,IAAE,KAAG,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE,GAAE;AAAC,YAAEN,MAAGI,GAAE;AAAE,YAAI,IAAE;AAAA,UAAGJ;AAAA,UACrf;AAAA,QAAC;AAAE,YAAE0B,GAAEpB,IAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAASgB,IAAE;AAAC,UAAAA,KAAEA,GAAE,CAAC;AAAE,cAAIC,KAAE,iBAAeD,GAAE;AAAK,qBAASA,GAAE,EAAE,MAAIA,GAAE,EAAE,IAAE,CAAC;AAAG,cAAG,WAASA,GAAE,EAAE,EAAEtB,KAAE,CAAC,EAAE,OAAM,IAAIa,GAAE,iFAA+Eb,KAAE,KAAG,kBAAgBsB,GAAE,OAAK,qGAAqG;AAAE,UAAAA,GAAE,EAAE,EAAEtB,KAAE,CAAC,IAAE,MAAI;AAAC,eAAG,sBAAoBsB,GAAE,OAAK,yBAAwB,CAAC;AAAA,UAAC;AAAE,YAAE,CAAC,GAAE,GAAE,SAAS,GAAE;AAAC,cAAE,OAAO,GAAE,GAAE,IAAI;AAAE,YAAAA,GAAE,EAAE,EAAEtB,KAAE,CAAC,IAAE,GAAGuB,IAAE,GAAE,MAAK,GAAE,CAAC;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MACrf,GAAE,SAAS,GAAEvB,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAE;AAAC,YAAIC,KAAE,GAAG,GAAEjB,EAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,YAAE0B,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAAS,GAAE;AAAC,mBAAS,IAAG;AAAC,eAAG,iBAAe,IAAE,yBAAwBH,EAAC;AAAA,UAAC;AAAC,cAAE,EAAE,CAAC;AAAE,cAAI,IAAE,EAAE,OAAK,MAAIvB;AAAE,UAAAA,GAAE,WAAW,IAAI,MAAIA,KAAE,OAAOA,GAAE,UAAU,CAAC,CAAC;AAAG,UAAAsB,MAAG,EAAE,EAAE,GAAG,KAAKtB,EAAC;AAAE,cAAI,IAAE,EAAE,EAAE,GAAE2B,KAAE,EAAE3B,EAAC;AAAE,qBAAS2B,MAAG,WAASA,GAAE,KAAGA,GAAE,cAAY,EAAE,QAAMA,GAAE,MAAI,IAAE,KAAG,EAAE,IAAE,IAAE,GAAE,EAAE,YAAU,EAAE,MAAK,EAAE3B,EAAC,IAAE,MAAI,GAAG,GAAEA,IAAE,CAAC,GAAE,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAG,YAAE,CAAC,GAAEuB,IAAE,SAASK,IAAE;AAAC,YAAAA,KAAE,GAAG,GAAEA,IAAE,GAAE,GAAE,CAAC;AAAE,uBAAS,EAAE5B,EAAC,EAAE,KAAG4B,GAAE,IAAE,IAAE,GAAE,EAAE5B,EAAC,IAAE4B,MAAG,EAAE5B,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE4B;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE5B,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB;AAAA,UAAE;AAAA,UACnf,EAAC,MAAKxB,IAAE,cAAa,SAAS,GAAE;AAAC,gBAAIM,KAAES,GAAE,CAAC;AAAE,eAAG,CAAC;AAAE,mBAAOT;AAAA,UAAC,GAAE,YAAW,SAAS,GAAEA,IAAE;AAAC,mBAAO,GAAGA,EAAC;AAAA,UAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,KAAI;AAAA,QAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,SAASM,IAAE;AAAC,iBAAOA;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,iBAAO;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,GAAGN,IAAE,CAAC,GAAE,GAAE,KAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE;AAAC,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,eAAK,MAAI,IAAE;AAAY,YAAE,GAAG,CAAC;AAAE,YAAI,IAAE,CAAAsB,OAAGA;AAAE,YAAG,MAAIhB,IAAE;AAAC,cAAI,IAAE,KAAG,IAAE;AAAE,cAAE,CAAAgB,OAAGA,MAAG,MAAI;AAAA,QAAC;AAAC,YAAEtB,GAAE,SAAS,UAAU,IAAE,SAASsB,IAAEC,IAAE;AAAC,iBAAOA,OAAI;AAAA,QAAC,IAAE,SAASD,IAAEC,IAAE;AAAC,iBAAOA;AAAA,QAAC;AACxf,QAAAC,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,GAAE,YAAW,GAAE,gBAAe,GAAE,sBAAqB,GAAGA,IAAE,GAAE,MAAIM,EAAC,GAAE,GAAE,KAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,iBAASM,GAAE,GAAE;AAAC,gBAAI;AAAE,cAAI,IAAEG;AAAE,iBAAO,IAAI,EAAE,IAAG,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,QAAC;AAAC,YAAI,IAAE,CAAC,WAAU,YAAW,YAAW,aAAY,YAAW,aAAY,cAAa,YAAY,EAAET,EAAC;AAAE,YAAEgB,GAAE,CAAC;AAAE,QAAAQ,GAAE,GAAE,EAAC,MAAK,GAAE,cAAalB,IAAE,gBAAe,GAAE,sBAAqBA,GAAC,GAAE,EAAC,IAAG,KAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,YAAI,IAAE,kBAAgBA;AAAE,QAAAwB,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,SAASM,IAAE;AAAC,cAAI,IAAEG,GAAEH,MAAG,CAAC,GAAE,IAAEA,KAAE;AAAE,cAAG,EAAE,UAAQ,IAAE,GAAEgB,KAAE,GAAEA,MAAG,GAAE,EAAEA,IAAE;AAAC,gBAAIC,KACzf,IAAED;AAAE,gBAAGA,MAAG,KAAG,KAAG,EAAEC,EAAC,GAAE;AAAC,kBAAE,IAAElB,GAAE,GAAE,GAAEkB,KAAE,CAAC,IAAE;AAAG,kBAAG,WAAS,EAAE,KAAI,IAAE;AAAA,kBAAO,MAAG,OAAO,aAAa,CAAC,GAAE,KAAG;AAAE,kBAAEA,KAAE;AAAA,YAAC;AAAA,UAAC;AAAA,eAAK;AAAC,gBAAE,MAAM,CAAC;AAAE,iBAAID,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IAAE,OAAO,aAAa,EAAE,IAAEA,EAAC,CAAC;AAAE,gBAAE,EAAE,KAAK,EAAE;AAAA,UAAC;AAAC,UAAAH,GAAEb,EAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,uBAAa,gBAAc,IAAE,IAAI,WAAW,CAAC;AAAG,cAAI,GAAE,IAAE,YAAU,OAAO;AAAE,eAAG,aAAa,cAAY,aAAa,qBAAmB,aAAa,aAAWQ,GAAE,uCAAuC;AAAE,cAAG,KAAG,GAAE;AAAC,gBAAIQ,KAAE;AAAE,iBAAI,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,kBAAIC,KAAE,EAAE,WAAW,CAAC;AAAE,qBAAKA,KAAED,OAAI,QACnfC,KAAED,MAAG,IAAE,SAAOC,MAAG,SAAOA,MAAGD,MAAG,GAAE,EAAE,KAAGA,MAAG;AAAA,YAAC;AAAC,gBAAEA;AAAA,UAAC,MAAM,KAAE,EAAE;AAAO,UAAAA,KAAE,GAAG,IAAE,IAAE,CAAC;AAAE,UAAAC,KAAED,KAAE;AAAE,UAAAb,GAAEa,MAAG,CAAC,IAAE;AAAE,cAAG,KAAG,GAAE;AAAC,gBAAG,IAAEC,IAAEA,KAAE,IAAE,GAAE,IAAE,GAAE,IAAEA,IAAE;AAAC,cAAAA,KAAE,IAAEA,KAAE;AAAE,uBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,oBAAI,IAAE,EAAE,WAAW,CAAC;AAAE,oBAAG,SAAO,KAAG,SAAO,GAAE;AAAC,sBAAI,IAAE,EAAE,WAAW,EAAE,CAAC;AAAE,sBAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,gBAAI;AAAC,oBAAG,OAAK,GAAE;AAAC,sBAAG,KAAGA,GAAE;AAAM,oBAAE,GAAG,IAAE;AAAA,gBAAC,OAAK;AAAC,sBAAG,QAAM,GAAE;AAAC,wBAAG,IAAE,KAAGA,GAAE;AAAM,sBAAE,GAAG,IAAE,MAAI,KAAG;AAAA,kBAAC,OAAK;AAAC,wBAAG,SAAO,GAAE;AAAC,0BAAG,IAAE,KAAGA,GAAE;AAAM,wBAAE,GAAG,IAAE,MAAI,KAAG;AAAA,oBAAE,OAAK;AAAC,0BAAG,IAAE,KAAGA,GAAE;AAAM,wBAAE,GAAG,IAAE,MAAI,KAAG;AAAG,wBAAE,GAAG,IAAE,MAAI,KAAG,KAAG;AAAA,oBAAE;AAAC,sBAAE,GAAG,IAAE,MAAI,KAAG,IAAE;AAAA,kBAAE;AAAC,oBAAE,GAAG,IAAE,MAAI,IAAE;AAAA,gBAAE;AAAA,cAAC;AAAC,gBAAE,CAAC,IAAE;AAAA,YAAC;AAAA,UAAC,WAAS,EAAE,MAAI,IAC1f,GAAE,IAAE,GAAE,EAAE,EAAE,KAAE,EAAE,WAAW,CAAC,GAAE,MAAI,MAAIJ,GAAEI,EAAC,GAAET,GAAE,wDAAwD,IAAG,EAAES,KAAE,CAAC,IAAE;AAAA,cAAO,MAAI,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAEA,KAAE,CAAC,IAAE,EAAE,CAAC;AAAE,mBAAOjB,MAAGA,GAAE,KAAKa,IAAEG,EAAC;AAAE,iBAAOA;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,SAAShB,IAAE;AAAC,UAAAa,GAAEb,EAAC;AAAA,QAAC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAEgB,GAAE,CAAC;AAAE,YAAG,MAAIhB,IAAE;AAAC,cAAIM,KAAE;AAAG,cAAI,IAAE;AAAG,cAAI,IAAE;AAAG,cAAI,IAAE,MAAI;AAAG,cAAIgB,KAAE;AAAA,QAAC,MAAM,OAAItB,OAAIM,KAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,MAAIG,IAAEa,KAAE;AAAG,QAAAE,GAAE,GAAE,EAAC,MAAK,GAAE,cAAa,SAASD,IAAE;AAAC,mBAAQ,IAAEd,GAAEc,MAAG,CAAC,GAAE,IAAE,EAAE,GAAE,GAAE,IAAEA,KAAE,GAAEI,KAAE,GAAEA,MAAG,GAAE,EAAEA,IAAE;AAAC,gBAAIC,KAAEL,KAAE,IAAEI,KAAE3B;AAAE,gBAAG2B,MAAG,KAAG,KAAG,EAAEC,MAAGN,EAAC,EAAE,KAAEhB,GAAE,GAAEsB,KAAE,CAAC,GAAE,WAC5e,IAAE,IAAE,KAAG,KAAG,OAAO,aAAa,CAAC,GAAE,KAAG,IAAG,IAAEA,KAAE5B;AAAA,UAAC;AAAC,UAAAmB,GAAEI,EAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,sBAAU,OAAO,KAAGT,GAAE,+CAA6C,CAAC;AAAE,cAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,IAAE,IAAEd,EAAC;AAAE,UAAAS,GAAE,KAAG,CAAC,IAAE,KAAGa;AAAE,YAAE,GAAE,IAAE,GAAE,IAAEtB,EAAC;AAAE,mBAAOuB,MAAGA,GAAE,KAAKJ,IAAE,CAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,SAASI,IAAE;AAAC,UAAAJ,GAAEI,EAAC;AAAA,QAAC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEvB,IAAE,GAAEM,IAAE,GAAE,GAAE;AAAC,WAAG,CAAC,IAAE,EAAC,MAAKU,GAAEhB,EAAC,GAAE,IAAG0B,GAAE,GAAEpB,EAAC,GAAE,GAAEoB,GAAE,GAAE,CAAC,GAAE,IAAG,CAAC,EAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE1B,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAEC,IAAE,GAAE;AAAC,WAAG,CAAC,EAAE,GAAG,KAAK,EAAC,IAAGP,GAAEhB,EAAC,GAAE,IAAG,GAAE,IAAG0B,GAAEpB,IAAE,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAGoB,GAAEJ,IAAEC,EAAC,GAAE,IAAG,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEvB,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE;AAAA,UAAC,IAAG;AAAA,UAAG,MAAKxB;AAAA,UACzf,gBAAe;AAAA,UAAE,cAAa,WAAU;AAAA,UAAC;AAAA,UAAE,YAAW,WAAU;AAAA,UAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAN,KAAEe,GAAEf,EAAC;AAAE,YAAE,GAAG,CAAC;AAAE,YAAI,IAAE,CAAC;AAAE,QAAAS,GAAEH,MAAG,CAAC,IAAE,GAAG,CAAC;AAAE,eAAO,EAAEN,IAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAN,KAAEe,GAAEf,EAAC;AAAE,YAAE,GAAG,CAAC;AAAE,UAAEA,IAAE,GAAE,MAAKM,EAAC;AAAA,MAAC;AAAA,MAAE,GAAE;AAAA,MAAG,GAAE,SAAS,GAAEN,IAAE;AAAC,YAAI,IAAE,GAAG,GAAEA,EAAC,GAAEM,KAAE,EAAE,CAAC;AAAE,QAAAN,KAAEM,GAAE,OAAK,OAAK,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAI,CAAC,EAAE,KAAK,GAAG,IAAE;AAAI,YAAI,IAAE,GAAGN,EAAC;AAAE,YAAG,WAAS,EAAE,QAAO;AAAE,YAAI,IAAE,MAAM,IAAE,CAAC;AAAE,YAAE,GAAG,CAAC,GAAEsB,IAAEC,IAAE,MAAI;AAAC,mBAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,EAAE,qBAAqB,IAAE,CAAC,GAAE,KAAG,EAAE,IAAE,CAAC,EAAE;AAAe,cAAE,EAAED,EAAC,EAAE;AAAA,YAAM;AAAA,YACnf;AAAA,UAAC;AAAE,eAAI,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,CAAC,EAAE,MAAI,EAAE,IAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAAE,cAAG,CAAChB,GAAE,GAAG,QAAOA,GAAE,WAAWiB,IAAE,CAAC;AAAA,QAAC,CAAC;AAAE,eAAO,GAAGvB,EAAC,IAAE;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAE,MAAIY,GAAE,CAAC,EAAE,MAAI;AAAA,MAAE;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIZ,KAAEe,GAAE,CAAC;AAAE,WAAGf,EAAC;AAAE,WAAG,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,WAAU;AAAC,QAAAI,GAAE,EAAE;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEJ,IAAE,GAAE;AAAC,UAAE,WAAW,GAAEA,IAAEA,KAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIA,KAAE,EAAE;AAAO,eAAK;AAAE,YAAG,aAAW,EAAE,QAAM;AAAG,iBAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,GAAE;AAAC,cAAIM,KAAEN,MAAG,IAAE,MAAG;AAAG,UAAAM,KAAE,KAAK,IAAIA,IAAE,IAAE,SAAS;AAAE,cAAI,IAAE;AAAK,UAAAA,KAAE,KAAK,IAAI,GAAEA,EAAC;AAAE,cAAE,EAAE,IAAI,KAAK,GAAE,YAAWA,MAAG,QAAMA,KAAE,SAAO,KAAK;AAAE,aAAE;AAAC,gBAAG;AAAC,iBAAG,KAAK,IAAE,GAAG,aAAW,UAAQ,EAAE;AAAE,iBAAG;AAAE,kBAAI,IAAE;AAAE,oBAAM;AAAA,YAAC,SAAO,GAAE;AAAA,YAAC;AAAC,gBAC/f;AAAA,UAAM;AAAC,cAAG,EAAE,QAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAA,MAAE,GAAE,WAAU;AAAC,eAAO;AAAA,MAAE;AAAA,MAAE,GAAE,WAAU;AAAC,eAAO;AAAA,MAAE;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAEM,IAAE;AAAC,iBAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAEG,GAAET,MAAG,CAAC,GAAEsB,KAAEb,GAAET,KAAE,KAAG,CAAC;AAAE,UAAAA,MAAG;AAAE,mBAAQuB,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,gBAAI,IAAE,EAAE,IAAEA,EAAC,GAAE,IAAE,GAAG,CAAC;AAAE,kBAAI,KAAG,OAAK,MAAI,MAAI,IAAE,KAAGrB,IAAGG,GAAE,GAAE,CAAC,CAAC,GAAE,EAAE,SAAO,KAAG,EAAE,KAAK,CAAC;AAAA,UAAC;AAAC,eAAGiB;AAAA,QAAC;AAAC,QAAAb,GAAEH,MAAG,CAAC,IAAE;AAAE,eAAO;AAAA,MAAC;AAAA,IAAC;AACvR,KAAC,WAAU;AAAC,eAAS,EAAE,GAAE;AAAC,QAAAP,GAAE,MAAI,EAAE;AAAQ,aAAGA,GAAE,IAAI;AAAE,WAAG;AAAE,aAAGA,GAAE,IAAI;AAAE,WAAG,QAAQA,GAAE,IAAI,CAAC;AAAE,QAAAW;AAAI,QAAAX,GAAE,0BAAwBA,GAAE,uBAAuBW,EAAC;AAAE,aAAGA,OAAI,SAAO,OAAK,cAAc,EAAE,GAAE,KAAG,OAAMC,OAAI,IAAEA,IAAEA,KAAE,MAAK,EAAE;AAAA,MAAG;AAAC,eAASX,GAAE,GAAE;AAAC,UAAE,EAAE,QAAQ;AAAA,MAAC;AAAC,eAAS,EAAE,GAAE;AAAC,eAAO,GAAG,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO,YAAY,YAAY,GAAEM,EAAC;AAAA,QAAC,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO;AAAA,QAAC,CAAC,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,UAAAJ,GAAE,4CAA0C,CAAC;AAAE,UAAAE,GAAE,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,UAAIE,KAAE,EAAC,GAAE,GAAE;AAAE,MAAAI;AAAI,MAAAX,GAAE,0BAAwBA,GAAE,uBAAuBW,EAAC;AAAE,UAAGX,GAAE,gBAAgB,KAAG;AAAC,eAAOA,GAAE;AAAA,UAAgBO;AAAA,UACjiB;AAAA,QAAC;AAAA,MAAC,SAAO,GAAE;AAAC,QAAAJ,GAAE,wDAAsD,CAAC,GAAE,GAAG,CAAC;AAAA,MAAC;AAAC,OAAC,WAAU;AAAC,eAAOC,MAAG,cAAY,OAAO,YAAY,wBAAsB,GAAG,CAAC,KAAG,cAAY,OAAO,QAAM,EAAEH,EAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO,YAAY,qBAAqB,GAAEM,EAAC,EAAE,KAAKN,IAAE,SAAS,GAAE;AAAC,YAAAE,GAAE,oCAAkC,CAAC;AAAE,YAAAA,GAAE,2CAA2C;AAAE,mBAAO,EAAEF,EAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,GAAG,EAAE,MAAM,EAAE;AAAE,aAAM,CAAC;AAAA,IAAC,GAAG;AAClb,IAAAD,GAAE,qBAAmB,WAAU;AAAC,cAAOA,GAAE,qBAAmBA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI,KAAGA,GAAE,iBAAe,WAAU;AAAC,cAAO,KAAGA,GAAE,iBAAeA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,IAAAA,GAAE,+BAA6B,WAAU;AAAC,cAAOA,GAAE,+BAA6BA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI,KAAGA,GAAE,UAAQ,WAAU;AAAC,cAAO,KAAGA,GAAE,UAAQA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC,GAAEoB,KAAEpB,GAAE,QAAM,WAAU;AAAC,cAAOoB,KAAEpB,GAAE,QAAMA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAC9b,IAAAA,GAAE,eAAa,WAAU;AAAC,cAAOA,GAAE,eAAaA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI;AAAG,IAAAY,KAAE,SAAS,KAAI;AAAC,YAAI,GAAG;AAAE,aAAKA,KAAE;AAAA,IAAG;AAC1H,aAAS,KAAI;AAAC,eAAS,IAAG;AAAC,YAAG,CAAC,OAAK,KAAG,MAAGZ,GAAE,YAAU,MAAG,CAAC,KAAI;AAAC,aAAG,EAAE;AAAE,aAAGA,EAAC;AAAE,cAAGA,GAAE,qBAAqB,CAAAA,GAAE,qBAAqB;AAAE,cAAGA,GAAE,QAAQ,MAAI,cAAY,OAAOA,GAAE,YAAUA,GAAE,UAAQ,CAACA,GAAE,OAAO,IAAGA,GAAE,QAAQ,UAAQ;AAAC,gBAAIC,KAAED,GAAE,QAAQ,MAAM;AAAE,eAAG,QAAQC,EAAC;AAAA,UAAC;AAAC,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAG,EAAE,IAAEU,KAAG;AAAC,YAAGX,GAAE,OAAO,MAAI,cAAY,OAAOA,GAAE,WAASA,GAAE,SAAO,CAACA,GAAE,MAAM,IAAGA,GAAE,OAAO,SAAQ,IAAG;AAAE,WAAG,EAAE;AAAE,YAAEW,OAAIX,GAAE,aAAWA,GAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,YAAAA,GAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC;AAAE,YAAE;AAAA,QAAC,GAAE,CAAC,KAAG,EAAE;AAAA,MAAE;AAAA,IAAC;AAC7e,QAAGA,GAAE,QAAQ,MAAI,cAAY,OAAOA,GAAE,YAAUA,GAAE,UAAQ,CAACA,GAAE,OAAO,IAAG,IAAEA,GAAE,QAAQ,SAAQ,CAAAA,GAAE,QAAQ,IAAI,EAAE;AAAE,OAAG;AAG9G,WAAOD,UAAS;AAAA,EAClB;AAEA,GAAG;AACH,IAAO,+BAAQ;;;ACjEf,IAAYkC,QAAK,0BAALA,QAAK;AAALA,EAAAA,OAAAA,OAAK,MAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,WAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,QAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,SAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,SAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,UAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,cAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,aAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,aAAA,IAAA,CAAA,IAAA;AAAA,SAALA;AAAK,GAAA,CAAA,CAAA;AAYjB,IAAYC,YAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,WAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,YAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAKrB,IAAYC,YAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,OAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,QAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAKrB,IAAYC,YAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,SAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,KAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,KAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAMrB,IAAYC,UAAO,0BAAPA,UAAO;AAAPA,EAAAA,SAAAA,SAAO,MAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,MAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,UAAA,IAAA,CAAA,IAAA;AAAA,SAAPA;AAAO,GAAA,CAAA,CAAA;AAMnB,IAAYC,OAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,QAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,YAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,UAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAYhB,IAAYC,SAAM,0BAANA,SAAM;AAANA,EAAAA,QAAAA,QAAM,MAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,kBAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,8CAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,iCAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,UAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,SAAA,IAAA,UAAA,IAAA;AAAA,SAANA;AAAM,GAAA,CAAA,CAAA;AASlB,IAAYC,sBAAmB,0BAAnBA,sBAAmB;AAAnBA,EAAAA,qBAAAA,qBAAmB,cAAA,IAAA,CAAA,IAAA;AAAA,SAAnBA;AAAmB,GAAA,CAAA,CAAA;AAI/B,IAAYC,gBAAa,0BAAbA,gBAAa;AAAbA,EAAAA,eAAAA,eAAa,QAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,eAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,KAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,YAAA,IAAA,CAAA,IAAA;AAAA,SAAbA;AAAa,GAAA,CAAA,CAAA;AAOzB,IAAYC,SAAM,0BAANA,SAAM;AAANA,EAAAA,QAAAA,QAAM,QAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,CAAA,IAAA;AAAA,SAANA;AAAM,GAAA,CAAA,CAAA;AAMlB,IAAYC,UAAO,0BAAPA,UAAO;AAAPA,EAAAA,SAAAA,SAAO,WAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,QAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,SAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,cAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,aAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,aAAA,IAAA,CAAA,IAAA;AAAA,SAAPA;AAAO,GAAA,CAAA,CAAA;AASnB,IAAYC,WAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AASpB,IAAYC,cAAW,0BAAXA,cAAW;AAAXA,EAAAA,aAAAA,aAAW,WAAA,IAAA,CAAA,IAAA;AAAXA,EAAAA,aAAAA,aAAW,SAAA,IAAA,CAAA,IAAA;AAAXA,EAAAA,aAAAA,aAAW,QAAA,IAAA,CAAA,IAAA;AAAA,SAAXA;AAAW,GAAA,CAAA,CAAA;AAMvB,IAAYC,WAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AAKpB,IAAYC,WAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,QAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,QAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AAMpB,IAAYC,eAAY,0BAAZA,eAAY;AAAZA,EAAAA,cAAAA,cAAY,QAAA,IAAA,CAAA,IAAA;AAAZA,EAAAA,cAAAA,cAAY,UAAA,IAAA,CAAA,IAAA;AAAZA,EAAAA,cAAAA,cAAY,UAAA,IAAA,CAAA,IAAA;AAAA,SAAZA;AAAY,GAAA,CAAA,CAAA;AAMxB,IAAYC,OAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,WAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,SAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAOhB,IAAYC,OAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,QAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,aAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAMhB,IAAMC,YAAY;EAChBC,YAAYnB,MAAMoB;EAClBC,kBAAkBrB,MAAMsB;EACxBC,cAAcvB,MAAMwB;EACpBC,gBAAgBzB,MAAM0B;EACtBC,eAAe3B,MAAM4B;EACrBC,gBAAgB7B,MAAM8B;EACtBC,qBAAqB/B,MAAMgC;EAC3BC,oBAAoBjC,MAAMkC;EAC1BC,oBAAoBnC,MAAMoC;EAC1BC,uBAAuBpC,UAAUqC;EACjCC,wBAAwBtC,UAAUuC;EAClCC,iBAAiBvC,UAAUwC;EAC3BC,kBAAkBzC,UAAU0C;EAC5BC,mBAAmB1C,UAAU2C;EAC7BC,eAAe5C,UAAU6C;EACzBC,eAAe9C,UAAU+C;EACzBC,cAAc/C,QAAQgD;EACtBC,cAAcjD,QAAQkD;EACtBC,kBAAkBnD,QAAQoD;EAC1BC,WAAWpD,KAAKqD;EAChBC,UAAUtD,KAAKuD;EACfC,YAAYxD,KAAKyD;EACjBC,aAAa1D,KAAK2D;EAClBC,YAAY5D,KAAK6D;EACjBC,UAAU9D,KAAK+D;EACfC,iBAAiBhE,KAAKiE;EACtBC,eAAelE,KAAKmE;EACpBC,UAAUpE,KAAKqE;EACfC,aAAarE,OAAOgD;EACpBsB,2BAA2BtE,OAAOuE;EAClCC,0DAA0DxE,OAAOyE;EACjEC,4CAA4C1E,OAAO2E;EACnDC,YAAY5E,OAAOoE;EACnBS,gBAAgB7E,OAAO8E;EACvBC,qCAAqC9E,oBAAoB+E;EACzDC,uBAAuB/E,cAAcgF;EACrCC,+BAA+BjF,cAAckF;EAC7CC,oBAAoBnF,cAAcoF;EAClCC,4BAA4BrF,cAAcsF;EAC1CC,eAAetF,OAAO+E;EACtBQ,YAAYvF,OAAOmF;EACnBK,YAAYxF,OAAOiE;EACnBwB,oBAAoBxF,QAAQY;EAC5B6E,gBAAgBzF,QAAQc;EACxB4E,kBAAkB1F,QAAQgB;EAC1B2E,uBAAuB3F,QAAQsB;EAC/BsE,sBAAsB5F,QAAQwB;EAC9BqE,sBAAsB7F,QAAQ0B;EAC9BoE,iBAAiB7F,SAAS8F;EAC1BC,gBAAgB/F,SAASgG;EACzBC,gBAAgBjG,SAASkG;EACzBC,iBAAiBnG,SAASoG;EAC1BC,mBAAmBrG,SAASsG;EAC5BC,iBAAiBvG,SAASwG;EAC1BC,wBAAwBxG,YAAYyG;EACpCC,sBAAsB1G,YAAY2G;EAClCC,sBAAsB5G,YAAY6G;EAClCC,mBAAmB7G,SAAS8G;EAC5BC,gBAAgB/G,SAASgH;EACzBC,kBAAkBhH,SAASiH;EAC3BC,iBAAiBlH,SAASmH;EAC1BC,iBAAiBpH,SAASqH;EAC1BC,sBAAsBrH,aAAasH;EACnCC,wBAAwBvH,aAAawH;EACrCC,wBAAwBzH,aAAa0H;EACrCC,gBAAgB1H,KAAKqG;EACrBsB,YAAY3H,KAAK4H;EACjBC,cAAc7H,KAAK8H;EACnBC,WAAW/H,KAAKI;EAChB4H,cAAc/H,KAAKgI;EACnBC,WAAWjI,KAAKA;EAChBkI,mBAAmBlI,KAAKmI;AAC1B;AACA,IAAA,kBAAelI;;;ACbA,SAAf,aAAqCmI,KAAgB;AACnD,WAASC,MAAMC,WAAWC,MAAMC,IAAI;AAClC,UAAMC,WAAWH,UAAUC,IAAI;AAE/BD,cAAUC,IAAI,IAAI,WAAmB;AAAA,eAAAG,OAAAC,UAAAC,QAANC,OAAI,IAAAC,MAAAJ,IAAA,GAAAK,OAAA,GAAAA,OAAAL,MAAAK,QAAA;AAAJF,aAAIE,IAAA,IAAAJ,UAAAI,IAAA;MAAA;AACjC,aAAOP,GAAGQ,KAAK,MAAMP,UAAU,GAAGI,IAAI;IACxC;EACF;AAEA,aAAWI,UAAU,CACnB,eACA,aACA,gBACA,YACA,aACA,eACA,gBACA,eACA,gBACA,cACA,QAAQ,GACP;AACD,UAAMC,UAAU;MACd,CAACC,KAAKC,KAAK,GAAGhB,IAAIiB,KAAKf,UAAUW,MAAM;MACvC,CAACE,KAAKG,OAAO,GAAGlB,IAAIiB,KAAKf,UAAU,GAAGW,MAAM,SAAS;MACrD,CAACE,KAAKI,IAAI,GAAGnB,IAAIiB,KAAKf,UAAU,GAAGW,MAAM,MAAM;IACjD;AAEAZ,UAAMD,IAAIiB,KAAKf,WAAWW,QAAQ,SAAUR,UAAmB;AAAA,eAAAe,QAAAb,UAAAC,QAANC,OAAI,IAAAC,MAAAU,QAAA,IAAAA,QAAA,IAAA,CAAA,GAAAC,QAAA,GAAAA,QAAAD,OAAAC,SAAA;AAAJZ,aAAIY,QAAA,CAAA,IAAAd,UAAAc,KAAA;MAAA;AAI3D,YAAMC,QAAQb,KAAKc,IAAI;AACvB,UAAIC,MAAMC;AAEV,UAAIH,UAAU,QAAQ;AACpBE,eAAOT,KAAKI;AACZM,mBAAWC;MACb,WAAW,OAAOJ,UAAU,UAAU;AACpCE,eAAOF,MAAME;AACbC,mBAAWH,MAAMK,QAAQ;MAC3B,OAAO;AACLH,eACE,OAAOF,UAAU,YAAYA,MAAMM,SAAS,GAAG,IAC3Cb,KAAKG,UACLH,KAAKC;AACXS,mBAAWI,WAAWP,KAAK;AAC3B,YACEA,UAAUI,UACV,CAACI,OAAOC,MAAMT,KAAK,KACnBQ,OAAOC,MAAMN,QAAQ,GACrB;AACA,gBAAM,IAAIO,MAAM,iBAAiBV,KAAK,QAAQT,MAAM,EAAE;QACxD;MACF;AAEA,UAAI,CAACC,QAAQU,IAAI,EACf,OAAM,IAAIQ,MACR,sBAAsBnB,MAAM,wBAAwBS,KAAK,GAC3D;AAEF,UAAIG,aAAaC,QAAW;AAC1B,eAAOZ,QAAQU,IAAI,EAAEZ,KAAK,MAAM,GAAGH,MAAMgB,QAAQ;MACnD,OAAO;AACL,eAAOX,QAAQU,IAAI,EAAEZ,KAAK,MAAM,GAAGH,IAAI;MACzC;IACF,CAAC;EACH;AAEA,WAASwB,oBAAoBC,iBAAiB;AAC5C,WAAOlC,IAAImC,gBAAgBC,UAAU;MACnCC,SAAS,WAAa;AACpB,cAAM;UAACC;UAAOC;QAAM,IAAIL,gBAAgB,GAAA3B,SAAO;AAC/C,eAAO;UACL+B,OAAOA,SAASE;UAChBD,QAAQA,UAAUC;QACpB;MACF;IACF,CAAC;EACH;AAEAvC,QAAMD,IAAIiB,KAAKf,WAAW,kBAAkB,SAAUG,UAAUoC,aAAa;AAG3E,QAAIA,aAAa;AACf,aAAOpC,SAASO,KAAK,MAAMqB,oBAAoBQ,WAAW,CAAC;IAC7D,OAAO;AACL,aAAO,KAAKC,iBAAiB;IAC/B;EACF,CAAC;AAED,WAASC,gBAAgBC,iBAAiB;AACxC,WAAO5C,IAAI6C,gBAAgBT,UAAU;MAACU,SAASF;IAAe,CAAC;EACjE;AAEA3C,QAAMD,IAAIiB,KAAKf,WAAW,kBAAkB,SAAUG,UAAU0C,aAAa;AAC3E1C,aAASO,KAAK,MAAM+B,gBAAgBI,WAAW,CAAC;EAClD,CAAC;AAED9C,QAAMD,IAAIgD,OAAO9C,WAAW,QAAQ,WAAY;AAG9CF,QAAIgD,OAAOC,QAAQ,IAAI;EACzB,CAAC;AAEDhD,QAAMD,IAAIiB,MAAM,UAAU,CAACiC,IAAGC,WAAW;AAEvC,WAAOA,SACHnD,IAAIiB,KAAKmC,iBAAiBD,MAAM,IAChCnD,IAAIiB,KAAKoC,cAAc;EAC7B,CAAC;AAEDpD,QAAMD,IAAIiB,KAAKf,WAAW,QAAQ,WAAY;AAG5CF,QAAIiB,KAAKgC,QAAQ,IAAI;EACvB,CAAC;AAEDhD,QAAMD,IAAIiB,KAAKf,WAAW,iBAAiB,WAAY;AACrD,aAASoD,KAAI,GAAGC,KAAI,KAAKC,cAAc,GAAGF,KAAIC,IAAG,EAAED,IAAG;AACpD,WAAKG,SAAS,CAAC,EAAEC,cAAc;IACjC;AACA,SAAKC,KAAK;EACZ,CAAC;AAED1D,QACED,IAAIiB,KAAKf,WACT,mBACA,SAAUG,UAAgE;AAAA,QAAtDiC,QAAK/B,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGiC;AAAG,QAAED,SAAMhC,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGiC;AAAG,QAAEoB,YAASrD,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGsD,UAAUC;AAEnE,WAAOzD,SAASO,KAAK,MAAM0B,OAAOC,QAAQqB,SAAS;EACrD,CACF;AAEA,SAAO;IACLZ,QAAQhD,IAAIgD;IACZ/B,MAAMjB,IAAIiB;IACV,GAAG8C;EACL;AACF;;;AC3TA,IAAMC,OAAOC,aAAa,MAAMC,6BAAS,CAAC;AAC1C,IAAA,cAAeF;;;ACsBR,SAAS,WAAW,OAAyC;AAClE,MAAI,SAAS,MAAM;AACjB,WAAO,MAAM;AAAA,EACf;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf;AACE,aAAO,MAAM;AAAA,EACjB;AACF;AAEO,SAAS,gBAAgB,OAAyC;AACvE,MAAI,SAAS,MAAM;AACjB,WAAO,MAAM;AAAA,EACf;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf,KAAK;AACH,aAAO,MAAM;AAAA,IACf;AACE,aAAO,MAAM;AAAA,EACjB;AACF;AA0FO,SAAS,mBAAmB,OAAiD;AAClF,MAAI,SAAS,MAAM;AACjB,WAAO,cAAc;AAAA,EACvB;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB,KAAK;AACH,aAAO,cAAc;AAAA,IACvB;AACE,aAAO,cAAc;AAAA,EACzB;AACF;AAkBO,SAAS,aAAa,OAA2C;AACtE,MAAI,SAAS,MAAM;AACjB,WAAO,QAAQ;AAAA,EACjB;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB;AACE,aAAO,QAAQ;AAAA,EACnB;AACF;AAwCO,SAAS,cAAc,OAA4C;AACxE,MAAI,SAAS,MAAM;AACjB,WAAO,SAAS;AAAA,EAClB;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,SAAS;AAAA,IAClB,KAAK;AACH,aAAO,SAAS;AAAA,IAClB,KAAK;AACH,aAAO,SAAS;AAAA,IAClB;AACE,aAAO,SAAS;AAAA,EACpB;AACF;AAEO,SAAS,kBAAkB,OAAgD;AAChF,MAAI,SAAS,MAAM;AACjB,WAAO,aAAa;AAAA,EACtB;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,aAAa;AAAA,IACtB,KAAK;AACH,aAAO,aAAa;AAAA,IACtB,KAAK;AACH,aAAO,aAAa;AAAA,IACtB;AACE,aAAO,aAAa;AAAA,EACxB;AACF;AAoBO,SAAS,UAAU,OAAwC;AAChE,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK;AAAA,EACd;AACA,UAAQ,MAAM,YAAY,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO,KAAK;AAAA,IACd,KAAK;AACH,aAAO,KAAK;AAAA,IACd,KAAK;AACH,aAAO,KAAK;AAAA,IACd;AACE,aAAO,KAAK;AAAA,EAChB;AACF;;;ACrVO,IAAM,oBAAmC,uBAAO,IAAI,0BAA0B;AAE9E,SAASG,cAAa,KAAmB;AAC9C,SAAO,CAAC,CAAC,MAAM,iBAAiB;AAClC;AAIA,IAAI,uBAA8D;AAE3D,SAAS,4BAA4B,IAAkC;AAC5E,yBAAuB;AACzB;AAEO,SAAS,oBAAoB,KAAU,MAAgB;AAC5D,SAAO,uBAAuB,KAAK,IAAI,KAAK;AAC9C;;;ACjBO,SAAS,gBAAgB,IAAY,SAA8C;AACxF,MAAI,OAAO,QAAQ,UAAU,UAAU;AACrC,QAAI,QAAQ,QAAQ,GAAG;AACrB,YAAM,IAAI,UAAU,gCAAgC,EAAE,KAAK,QAAQ,KAAK,EAAE;AAAA,IAC5E;AAAA,EACF;AACA,MAAI,OAAO,QAAQ,WAAW,UAAU;AACtC,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,IAAI,UAAU,iCAAiC,EAAE,KAAK,QAAQ,MAAM,EAAE;AAAA,IAC9E;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,OAAmC;AACnE,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG,GAAG;AACpD,UAAM,UAAU,MAAM,MAAM,GAAG,EAAE;AACjC,UAAM,MAAM,WAAW,OAAO;AAC9B,WAAO,CAAC,OAAO,MAAM,GAAG;AAAA,EAC1B;AACA,SAAO;AACT;AAEO,SAAS,aAAa,OAAqD;AAChF,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,GAAG;AACrD,WAAO;AAAA,EACT;AACA,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,EACT;AACA,SAAO,kBAAkB,KAAK;AAChC;AAEO,SAAS,cAAc,OAA4C;AACxE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAO,kBAAkB,KAAK;AAChC;AAEO,SAAS,eAAe,OAAqD;AAClF,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,GAAG;AACrD,WAAO;AAAA,EACT;AACA,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,EACT;AACA,SAAO,kBAAkB,KAAK;AAChC;AAEO,SAAS,mBAAmB,OAAyC;AAC1E,SAAO,UAAU,cAAc,UAAU;AAC3C;AAEO,SAAS,eAAe,OAAqC;AAClE,SAAO,UAAU,aAAa,UAAU,YAAY,UAAU;AAChE;AAEO,SAAS,gBAAgB,OAAqD;AACnF,SAAO,eAAe,KAAK;AAC7B;AAEO,SAAS,gBAAgB,OAAkD;AAChF,MAAI,UAAU,UAAa,UAAU,QAAQ;AAC3C,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,WAAW,OAAwD;AACjF,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,KAAK,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAO,kBAAkB,KAAK;AAChC;;;ACmDO,IAAe,iBAAf,MAAe,wBAAuB,aAAa;AAAA,EACxD,CAAC,iBAAiB,IAAI;AAAA,EAEtB,OAAe,mBAAmB;AAAA,EACxB;AAAA,EACM;AAAA,EACN,SAAkB;AAAA,EACrB,SAAgC;AAAA,EAC7B,WAAoB;AAAA,EAE9B,YAAY,SAAgC;AAC1C,UAAM;AACN,SAAK,MAAM,gBAAe;AAC1B,SAAK,MAAM,QAAQ,MAAM,cAAc,KAAK,GAAG;AAAA,EACjD;AAAA,EAWA,IAAW,KAAa;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,GAAG,OAAe;AAC3B,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,YAAkB;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEU,YAAkB;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEO,UAAgB;AAAA,EAGvB;AAAA,EAEO,qBAA2B;AAAA,EAGlC;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ,OAAgB;AACjC,SAAK,WAAW;AAAA,EAClB;AACF;AAEA,IAAM,aAAqB,YAAK,OAAO,OAAO;AAC9C,WAAW,kBAAkB,KAAK;AAClC,WAAW,oBAAoB,CAAC;AAEzB,IAAe,aAAf,MAAe,oBAAmB,eAAe;AAAA,EACtD,OAAO,sBAA+C,oBAAI,IAAI;AAAA,EAEpD,eAAwB;AAAA,EACxB;AAAA,EACA,cAAsB;AAAA,EACtB,cAAsB;AAAA,EACtB,KAAa;AAAA,EACb,KAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,cAAsB;AAAA,EACtB,eAAuB;AAAA,EACzB;AAAA,EACD,aAAsB;AAAA,EACnB;AAAA,EACA,cAAsC;AAAA,EAEtC,aAAsB;AAAA,EACtB,WAAoB;AAAA,EACpB,kBAAoD;AAAA,EACpD,eAAqD;AAAA,EAEvD,QAAiB;AAAA,EACf,aAAqB;AAAA,EAEvB,sBAAgD;AAAA,EAChD,iBAAuD;AAAA,EACvD,kBAAgF,CAAC;AAAA,EACjF,iBAA4D;AAAA,EAC5D,gBAAkE,CAAC;AAAA,EAEjE;AAAA,EACA,gBAAoC;AAAA,EACpC,YAA4B;AAAA,EAC5B,YAAsB,CAAC;AAAA,EACvB,WAAmB;AAAA,EACrB,cAAsB;AAAA,EAEtB,oBAA6C,oBAAI,IAAI;AAAA,EACnD,yBAAuC,CAAC;AAAA,EACxC,yBAAuC,CAAC;AAAA,EAC1C,kBAA2B;AAAA,EAC5B,SAA4B;AAAA,EAE3B,2BAAoC;AAAA,EACpC,8BAA4C,CAAC;AAAA,EAC7C,sBAAuC,oBAAI,IAAI;AAAA,EAEhD,kBAAuC;AAAA,EAEvC;AAAA,EACA;AAAA,EAEP,YAAY,KAAoB,SAAiC;AAC/D,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,gBAAW,oBAAoB,IAAI,KAAK,KAAK,IAAI;AAEjD,oBAAgB,KAAK,IAAI,OAAO;AAEhC,SAAK,eAAe,QAAQ;AAC5B,SAAK,cAAc,QAAQ;AAE3B,SAAK,SAAS,QAAQ,SAAS;AAC/B,SAAK,UAAU,QAAQ,UAAU;AAEjC,QAAI,OAAO,KAAK,WAAW,UAAU;AACnC,WAAK,cAAc,KAAK;AAAA,IAC1B;AACA,QAAI,OAAO,KAAK,YAAY,UAAU;AACpC,WAAK,eAAe,KAAK;AAAA,IAC3B;AAEA,SAAK,UAAU,QAAQ,UAAU;AACjC,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,WAAW,QAAQ,YAAY;AACpC,SAAK,QAAQ,QAAQ,QAAQ;AAC7B,SAAK,aAAa,KAAK,SAAS,KAAK,WAAW,IAAI;AACpD,SAAK,WAAW,QAAQ,YAAY,SAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,OAAO,CAAC,IAAI;AAG5F,SAAK,WAAW,YAAK,KAAK,OAAO,UAAU;AAC3C,SAAK,SAAS,WAAW,KAAK,WAAW,QAAQ,OAAO,QAAQ,IAAI;AACpE,SAAK,oBAAoB,OAAO;AAEhC,SAAK,kBAAkB,OAAO;AAE9B,QAAI,KAAK,UAAU;AACjB,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,IAAoB,KAAK;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAoB,GAAG,OAAe;AACpC,QAAI,KAAK,QAAQ;AACf,WAAK,OAAO,kBAAkB,OAAO,KAAK,EAAE;AAC5C,WAAK,OAAO,kBAAkB,IAAI,OAAO,IAAI;AAAA,IAC/C;AACA,UAAM,KAAK;AAAA,EACb;AAAA,EAEA,IAAW,YAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,UAAU,OAAgB;AACnC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAW,MAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,cAAgC;AACzC,UAAM,MAAM,KAAK,SAAS,iBAAiB;AAC3C,WAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ;AAAA,EAC1C;AAAA,EAEA,IAAW,QAAQ,OAAgB;AACjC,QAAI,KAAK,aAAa,MAAO;AAE7B,UAAM,aAAa,KAAK;AACxB,SAAK,WAAW;AAChB,SAAK,SAAS,WAAW,QAAQ,QAAQ,OAAO,QAAQ,IAAI;AAE5D,QAAI,KAAK,OAAO;AACd,UAAI,CAAC,cAAc,OAAO;AACxB,aAAK,mBAAmB,CAAC;AAAA,MAC3B,WAAW,cAAc,CAAC,OAAO;AAC/B,aAAK,mBAAmB,EAAE;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,KAAK,UAAU;AACjB,WAAK,KAAK;AAAA,IACZ;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,UAAkB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ,OAAe;AAChC,UAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AAC9C,QAAI,KAAK,aAAa,SAAS;AAC7B,WAAK,WAAW;AAChB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,eAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,WAAsC;AAG9D,WAAO;AAAA,EACT;AAAA,EAEO,kBAA0B;AAC/B,WAAO;AAAA,EACT;AAAA,EAEO,qBAAqBC,IAAWC,IAAoB;AACzD,WAAO;AAAA,EACT;AAAA,EAEO,QAAc;AACnB,QAAI,KAAK,gBAAgB,KAAK,YAAY,CAAC,KAAK,WAAY;AAE5D,SAAK,KAAK,gBAAgB,IAAI;AAC9B,SAAK,WAAW;AAChB,SAAK,cAAc;AAEnB,SAAK,kBAAkB,CAAC,QAAkB;AACxC,UAAI,KAAK,aAAc;AACvB,WAAK,cAAc,MAAM,IAAI,GAAG;AAEhC,UAAI,KAAK,aAAc;AACvB,UAAI,CAAC,IAAI,oBAAoB,KAAK,gBAAgB;AAChD,aAAK,eAAe,GAAG;AAAA,MACzB;AAAA,IACF;AAEA,SAAK,eAAe,CAAC,UAAsB;AACzC,UAAI,KAAK,aAAc;AACvB,WAAK,gBAAgB,KAAK,MAAM,KAAK;AAErC,UAAI,KAAK,aAAc;AACvB,UAAI,CAAC,MAAM,oBAAoB,KAAK,aAAa;AAC/C,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAEA,SAAK,IAAI,kBAAkB,WAAW,YAAY,KAAK,eAAe;AACtE,SAAK,IAAI,kBAAkB,WAAW,SAAS,KAAK,YAAY;AAChE,SAAK,KAAK,uBAAwB;AAAA,EACpC;AAAA,EAEO,OAAa;AAClB,QAAI,CAAC,KAAK,YAAY,CAAC,KAAK,WAAY;AAExC,SAAK,WAAW;AAChB,SAAK,cAAc;AAEnB,QAAI,KAAK,iBAAiB;AACxB,WAAK,IAAI,kBAAkB,YAAY,YAAY,KAAK,eAAe;AACvE,WAAK,kBAAkB;AAAA,IACzB;AAEA,QAAI,KAAK,cAAc;AACrB,WAAK,IAAI,kBAAkB,YAAY,SAAS,KAAK,YAAY;AACjE,WAAK,eAAe;AAAA,IACtB;AAEA,SAAK,KAAK,uBAAwB;AAAA,EACpC;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,OAAgB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,YAAoB;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,KAAK,OAAgB;AAC9B,QAAI,KAAK,UAAU,MAAO;AAE1B,SAAK,QAAQ;AAEb,QAAI,KAAK,UAAU;AACjB,YAAM,QAAQ,QAAQ,IAAI;AAC1B,WAAK,mBAAmB,KAAK;AAAA,IAC/B;AAAA,EACF;AAAA,EAEU,mBAAmB,OAAqB;AAChD,SAAK,cAAc;AACnB,SAAK,QAAQ,mBAAmB,KAAK;AAAA,EACvC;AAAA,EAKO,mBAAmB,IAAoC;AAC5D,eAAW,SAAS,KAAK,wBAAwB;AAC/C,UAAI,MAAM,OAAO,GAAI,QAAO;AAC5B,UAAI,aAAa,KAAK,GAAG;AACvB,cAAM,QAAQ,MAAM,mBAAmB,EAAE;AACzC,YAAI,MAAO,QAAO;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEO,gBAAgB;AACrB,SAAK,UAAU;AACf,SAAK,KAAK,cAAc;AAAA,EAC1B;AAAA,EAEA,IAAW,aAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,WAAW,OAAe;AACnC,QAAI,KAAK,gBAAgB,MAAO;AAChC,SAAK,cAAc;AACnB,QAAI,KAAK,OAAQ,MAAK,OAAO,2BAA2B;AACxD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,aAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,WAAW,OAAe;AACnC,QAAI,KAAK,gBAAgB,MAAO;AAChC,SAAK,cAAc;AACnB,QAAI,KAAK,OAAQ,MAAK,OAAO,2BAA2B;AACxD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,IAAY;AACrB,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;AAAA,IACxC;AACA,WAAO,KAAK,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,IAAW,EAAE,OAAe;AAC1B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,IAAW,MAAkD;AAC3D,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,IAAI,OAAmD;AAChE,QAAI,eAAe,KAAK,KAAK,UAAU,QAAW;AAChD,WAAK,YAAY,EAAE,KAAK,MAAM,CAAC;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAW,QAAoD;AAC7D,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,MAAM,OAAmD;AAClE,QAAI,eAAe,KAAK,KAAK,UAAU,QAAW;AAChD,WAAK,YAAY,EAAE,OAAO,MAAM,CAAC;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,IAAW,SAAqD;AAC9D,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,OAAO,OAAmD;AACnE,QAAI,eAAe,KAAK,KAAK,UAAU,QAAW;AAChD,WAAK,YAAY,EAAE,QAAQ,MAAM,CAAC;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,IAAW,OAAmD;AAC5D,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,KAAK,OAAmD;AACjE,QAAI,eAAe,KAAK,KAAK,UAAU,QAAW;AAChD,WAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,IAAW,IAAY;AACrB,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;AAAA,IACxC;AACA,WAAO,KAAK,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,IAAW,EAAE,OAAe;AAC1B,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,IAAW,QAAgB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,MAAM,OAAuC;AACtD,QAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAK,SAAS;AACd,WAAK,SAAS,SAAS,KAAK;AAE5B,UAAI,OAAO,UAAU,YAAY,KAAK,gBAAgB,GAAG;AACvD,aAAK,cAAc;AACnB,aAAK,SAAS,cAAc,CAAC;AAAA,MAC/B;AAEA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAiB;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,OAAO,OAAuC;AACvD,QAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAK,UAAU;AACf,WAAK,SAAS,UAAU,KAAK;AAE7B,UAAI,OAAO,UAAU,YAAY,KAAK,gBAAgB,GAAG;AACvD,aAAK,cAAc;AACnB,aAAK,SAAS,cAAc,CAAC;AAAA,MAC/B;AAEA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAiB;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,OAAO,OAAe;AAC/B,QAAI,KAAK,YAAY,OAAO;AAC1B,WAAK,UAAU;AACf,WAAK,QAAQ,kBAAkB;AAC/B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,oBAA0B;AAChC,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEQ,qBAA2B;AACjC,QAAI,KAAK,iBAAiB;AACxB,WAAK,uBAAuB,KAAK,CAAC,GAAGC,OAAO,EAAE,SAASA,GAAE,SAAS,IAAI,EAAE,SAASA,GAAE,SAAS,KAAK,CAAE;AACnG,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEO,iCAA+C;AACpD,QACE,CAAC,KAAK,4BACN,KAAK,4BAA4B,WAAW,KAAK,uBAAuB,QACxE;AACA,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,MAAM,KAAK,SAAS,iBAAiB;AAC3C,UAAM,OAAkB,QAAQ,KAAK,QAAQ,IAAI,MAAM;AAEvD,UAAM,SAAS,CAAC,GAAG,KAAK,sBAAsB;AAC9C,WAAO,KAAK,CAAC,GAAGA,OAAM;AACpB,YAAM,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE;AAClC,YAAM,KAAK,SAAS,MAAMA,GAAE,IAAIA,GAAE;AAClC,aAAO,KAAK;AAAA,IACd,CAAC;AAED,SAAK,8BAA8B;AACnC,SAAK,2BAA2B;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,oBAAoB,SAA8C;AACxE,UAAM,OAAO,KAAK;AAElB,QAAI,gBAAgB,QAAQ,SAAS,GAAG;AACtC,WAAK,aAAa,QAAQ,SAAS;AAAA,IACrC;AAEA,QAAI,WAAW,QAAQ,QAAQ,GAAG;AAChC,WAAK,YAAY,QAAQ,QAAQ;AAAA,IACnC;AACA,QAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,WAAK,aAAa,QAAQ,SAAS;AAAA,IACrC;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,WAAK,YAAY,QAAQ,QAAQ;AAAA,IACnC,OAAO;AACL,WAAK,YAAY,CAAC;AAAA,IACpB;AAEA,QAAI,QAAQ,eAAe,QAAW;AACpC,WAAK,cAAc,QAAQ;AAC3B,WAAK,cAAc,QAAQ,UAAU;AAAA,IACvC,OAAO;AAGL,YAAM,mBAAmB,OAAO,QAAQ,UAAU;AAClD,YAAM,oBAAoB,OAAO,QAAQ,WAAW;AACpD,WAAK,cAAc,oBAAoB,oBAAoB,IAAI;AAC/D,WAAK,cAAc,KAAK,WAAW;AAAA,IACrC;AAEA,SAAK,iBAAiB,mBAAmB,QAAQ,aAAa,CAAC;AAC/D,SAAK,YAAY,UAAU,QAAQ,QAAQ,CAAC;AAC5C,SAAK,cAAc,gBAAgB,QAAQ,UAAU,CAAC;AACtD,SAAK,kBAAkB,aAAa,QAAQ,cAAc,CAAC;AAC3D,SAAK,aAAa,WAAW,QAAQ,SAAS,CAAC;AAE/C,QAAI,gBAAgB,QAAQ,KAAK,GAAG;AAClC,WAAK,SAAS,QAAQ;AACtB,WAAK,SAAS,SAAS,QAAQ,KAAK;AAAA,IACtC;AACA,QAAI,gBAAgB,QAAQ,MAAM,GAAG;AACnC,WAAK,UAAU,QAAQ;AACvB,WAAK,SAAS,UAAU,QAAQ,MAAM;AAAA,IACxC;AAEA,SAAK,gBAAgB,QAAQ,aAAa,aAAa,aAAa;AACpE,QAAI,KAAK,kBAAkB,YAAY;AACrC,WAAK,gBAAgB,kBAAkB,KAAK,aAAa,CAAC;AAAA,IAC5D;AAEA,SAAK,YAAY,QAAQ,aAAa,WAAW,WAAW,QAAQ,aAAa,WAAW,WAAW;AACvG,QAAI,KAAK,cAAc,WAAW;AAChC,WAAK,YAAY,cAAc,KAAK,SAAS,CAAC;AAAA,IAChD;AAGA,UAAM,mBACJ,QAAQ,QAAQ,UAChB,QAAQ,UAAU,UAClB,QAAQ,WAAW,UACnB,QAAQ,SAAS;AACnB,QAAI,kBAAkB;AACpB,WAAK,YAAY;AAAA,QACf,KAAK,QAAQ;AAAA,QACb,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ;AAAA,MAChB;AACA,WAAK,mBAAmB,KAAK,SAAS;AAAA,IACxC;AAEA,QAAI,WAAW,QAAQ,QAAQ,GAAG;AAChC,WAAK,YAAY,QAAQ,QAAQ;AAAA,IACnC;AACA,QAAI,WAAW,QAAQ,SAAS,GAAG;AACjC,WAAK,aAAa,QAAQ,SAAS;AAAA,IACrC;AAEA,SAAK,sBAAsB,OAAO;AAAA,EACpC;AAAA,EAEQ,sBAAsB,SAA8C;AAC1E,UAAM,OAAO,KAAK;AAElB,QAAI,aAAa,QAAQ,MAAM,GAAG;AAChC,WAAK,UAAU,KAAK,KAAK,QAAQ,MAAM;AAAA,IACzC;AAEA,QAAI,aAAa,QAAQ,OAAO,GAAG;AACjC,WAAK,UAAU,KAAK,YAAY,QAAQ,OAAO;AAAA,IACjD;AACA,QAAI,aAAa,QAAQ,OAAO,GAAG;AACjC,WAAK,UAAU,KAAK,UAAU,QAAQ,OAAO;AAAA,IAC/C;AACA,QAAI,aAAa,QAAQ,SAAS,GAAG;AACnC,WAAK,UAAU,KAAK,KAAK,QAAQ,SAAS;AAAA,IAC5C;AACA,QAAI,aAAa,QAAQ,WAAW,GAAG;AACrC,WAAK,UAAU,KAAK,OAAO,QAAQ,WAAW;AAAA,IAChD;AACA,QAAI,aAAa,QAAQ,YAAY,GAAG;AACtC,WAAK,UAAU,KAAK,QAAQ,QAAQ,YAAY;AAAA,IAClD;AACA,QAAI,aAAa,QAAQ,UAAU,GAAG;AACpC,WAAK,UAAU,KAAK,MAAM,QAAQ,UAAU;AAAA,IAC9C;AAEA,QAAI,cAAc,QAAQ,OAAO,GAAG;AAClC,WAAK,WAAW,KAAK,KAAK,QAAQ,OAAO;AAAA,IAC3C;AAEA,QAAI,cAAc,QAAQ,QAAQ,GAAG;AACnC,WAAK,WAAW,KAAK,YAAY,QAAQ,QAAQ;AAAA,IACnD;AACA,QAAI,cAAc,QAAQ,QAAQ,GAAG;AACnC,WAAK,WAAW,KAAK,UAAU,QAAQ,QAAQ;AAAA,IACjD;AACA,QAAI,cAAc,QAAQ,UAAU,GAAG;AACrC,WAAK,WAAW,KAAK,KAAK,QAAQ,UAAU;AAAA,IAC9C;AACA,QAAI,cAAc,QAAQ,YAAY,GAAG;AACvC,WAAK,WAAW,KAAK,OAAO,QAAQ,YAAY;AAAA,IAClD;AACA,QAAI,cAAc,QAAQ,aAAa,GAAG;AACxC,WAAK,WAAW,KAAK,QAAQ,QAAQ,aAAa;AAAA,IACpD;AACA,QAAI,cAAc,QAAQ,WAAW,GAAG;AACtC,WAAK,WAAW,KAAK,MAAM,QAAQ,WAAW;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,IAAI,SAAS,cAAqD;AAChE,QAAI,CAAC,mBAAmB,YAAY,KAAK,KAAK,kBAAkB,aAAc;AAE9E,SAAK,gBAAgB;AACrB,SAAK,SAAS,gBAAgB,kBAAkB,YAAY,CAAC;AAC7D,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,WAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,UAA6C;AACxD,QAAI,CAAC,eAAe,QAAQ,KAAK,KAAK,cAAc,SAAU;AAE9D,SAAK,YAAY;AACjB,SAAK,SAAS,YAAY,cAAc,QAAQ,CAAC;AACjD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,YAAY,UAA0B;AAC3C,SAAK,YAAY,EAAE,GAAG,KAAK,WAAW,GAAG,SAAS;AAClD,SAAK,mBAAmB,QAAQ;AAAA,EAClC;AAAA,EAEQ,mBAAmB,UAA0B;AACnD,UAAM,OAAO,KAAK;AAClB,UAAM,EAAE,KAAK,OAAO,QAAQ,KAAK,IAAI;AAErC,QAAI,eAAe,GAAG,GAAG;AACvB,UAAI,QAAQ,QAAQ;AAClB,aAAK,gBAAgB,KAAK,GAAG;AAAA,MAC/B,OAAO;AACL,aAAK,YAAY,KAAK,KAAK,GAAG;AAAA,MAChC;AAAA,IACF;AACA,QAAI,eAAe,KAAK,GAAG;AACzB,UAAI,UAAU,QAAQ;AACpB,aAAK,gBAAgB,KAAK,KAAK;AAAA,MACjC,OAAO;AACL,aAAK,YAAY,KAAK,OAAO,KAAK;AAAA,MACpC;AAAA,IACF;AACA,QAAI,eAAe,MAAM,GAAG;AAC1B,UAAI,WAAW,QAAQ;AACrB,aAAK,gBAAgB,KAAK,MAAM;AAAA,MAClC,OAAO;AACL,aAAK,YAAY,KAAK,QAAQ,MAAM;AAAA,MACtC;AAAA,IACF;AACA,QAAI,eAAe,IAAI,GAAG;AACxB,UAAI,SAAS,QAAQ;AACnB,aAAK,gBAAgB,KAAK,IAAI;AAAA,MAChC,OAAO;AACL,aAAK,YAAY,KAAK,MAAM,IAAI;AAAA,MAClC;AAAA,IACF;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,SAAS,MAAiC;AACnD,QAAI,QAAQ,MAAM;AAChB,WAAK,SAAS,YAAY,CAAC;AAAA,IAC7B,OAAO;AACL,WAAK,SAAS,YAAY,IAAI;AAAA,IAChC;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,WAAW,QAAmC;AACvD,UAAM,QAAQ,UAAU,OAAO,IAAI;AACnC,SAAK,cAAc;AACnB,SAAK,SAAS,cAAc,KAAK;AACjC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,cAAc,WAAmD;AAC1E,SAAK,SAAS,iBAAiB,mBAAmB,SAAS,CAAC;AAC5D,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,SAAS,MAAqC;AACvD,SAAK,SAAS,YAAY,UAAU,IAAI,CAAC;AACzC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,WAAW,YAA4C;AAChE,SAAK,SAAS,cAAc,gBAAgB,UAAU,CAAC;AACvD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,eAAe,gBAAkD;AAC1E,SAAK,SAAS,kBAAkB,aAAa,cAAc,CAAC;AAC5D,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,UAAU,WAA2C;AAC9D,SAAK,SAAS,aAAa,WAAW,SAAS,CAAC;AAChD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,UAAU,OAA2C;AAC9D,QAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAK,SAAS,aAAa,KAAK;AAChC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAS,UAAoD;AACtE,QAAI,WAAW,QAAQ,GAAG;AACxB,WAAK,SAAS,YAAY,QAAQ;AAClC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAS,UAAoD;AACtE,QAAI,WAAW,QAAQ,GAAG;AACxB,WAAK,SAAS,YAAY,QAAQ;AAClC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,UAAU,WAAqD;AACxE,QAAI,WAAW,SAAS,GAAG;AACzB,WAAK,SAAS,aAAa,SAAS;AACpC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,UAAU,WAAqD;AACxE,QAAI,WAAW,SAAS,GAAG;AACzB,WAAK,SAAS,aAAa,SAAS;AACpC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,OAAO,QAA2D;AAC3E,QAAI,aAAa,MAAM,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,KAAK,MAAM;AACxC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,QAAQ,SAA4D;AAC7E,QAAI,aAAa,OAAO,GAAG;AACzB,WAAK,SAAS,UAAU,KAAK,YAAY,OAAO;AAChD,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,QAAQ,SAA4D;AAC7E,QAAI,aAAa,OAAO,GAAG;AACzB,WAAK,SAAS,UAAU,KAAK,UAAU,OAAO;AAC9C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,UAAU,QAA2D;AAC9E,QAAI,aAAa,MAAM,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,KAAK,MAAM;AACxC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,YAAY,QAA2D;AAChF,QAAI,aAAa,MAAM,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,OAAO,MAAM;AAC1C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,aAAa,QAA2D;AACjF,QAAI,aAAa,MAAM,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,QAAQ,MAAM;AAC3C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,WAAW,QAA2D;AAC/E,QAAI,aAAa,MAAM,GAAG;AACxB,WAAK,SAAS,UAAU,KAAK,MAAM,MAAM;AACzC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,QAAQ,SAAmD;AACpE,QAAI,cAAc,OAAO,GAAG;AAC1B,WAAK,SAAS,WAAW,KAAK,KAAK,OAAO;AAC1C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAS,UAAoD;AACtE,QAAI,cAAc,QAAQ,GAAG;AAC3B,WAAK,SAAS,WAAW,KAAK,YAAY,QAAQ;AAClD,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,SAAS,UAAoD;AACtE,QAAI,cAAc,QAAQ,GAAG;AAC3B,WAAK,SAAS,WAAW,KAAK,UAAU,QAAQ;AAChD,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,WAAW,SAAmD;AACvE,QAAI,cAAc,OAAO,GAAG;AAC1B,WAAK,SAAS,WAAW,KAAK,KAAK,OAAO;AAC1C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,aAAa,SAAmD;AACzE,QAAI,cAAc,OAAO,GAAG;AAC1B,WAAK,SAAS,WAAW,KAAK,OAAO,OAAO;AAC5C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,cAAc,SAAmD;AAC1E,QAAI,cAAc,OAAO,GAAG;AAC1B,WAAK,SAAS,WAAW,KAAK,QAAQ,OAAO;AAC7C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,YAAY,SAAmD;AACxE,QAAI,cAAc,OAAO,GAAG;AAC1B,WAAK,SAAS,WAAW,KAAK,MAAM,OAAO;AAC3C,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,gBAA0B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,mBAAyB;AAC9B,UAAM,SAAS,KAAK,SAAS,kBAAkB;AAE/C,UAAM,OAAO,KAAK;AAClB,UAAM,OAAO,KAAK;AAClB,UAAM,WAAW,KAAK;AACtB,UAAM,YAAY,KAAK;AAEvB,SAAK,KAAK,OAAO;AACjB,SAAK,KAAK,OAAO;AAEjB,UAAM,WAAW,KAAK,IAAI,OAAO,OAAO,CAAC;AACzC,UAAM,YAAY,KAAK,IAAI,OAAO,QAAQ,CAAC;AAC3C,UAAM,cAAc,aAAa,YAAY,cAAc;AAE3D,SAAK,cAAc;AACnB,SAAK,eAAe;AAEpB,QAAI,aAAa;AACf,WAAK,eAAe,UAAU,SAAS;AAAA,IACzC;AAEA,UAAM,kBAAkB,SAAS,KAAK,MAAM,SAAS,KAAK;AAC1D,QAAI,iBAAiB;AACnB,UAAI,KAAK,OAAQ,MAAK,OAAO,2BAA2B;AAAA,IAC1D;AAAA,EACF;AAAA,EAEU,eAAe,OAAe,QAAsB;AAC5D,QAAI,KAAK,UAAU;AAEjB,WAAK,wBAAwB,OAAO,MAAM;AAC1C,WAAK,SAAS,OAAO,MAAM;AAC3B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEU,wBAAwB,OAAe,QAAsB;AACrE,QAAI,CAAC,KAAK,SAAU;AAEpB,QAAI,SAAS,KAAK,UAAU,GAAG;AAC7B;AAAA,IACF;AAEA,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,OAAO,OAAO,MAAM;AAAA,IACvC,OAAO;AACL,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEU,oBAA0B;AAClC,UAAMC,KAAI,KAAK;AACf,UAAMC,KAAI,KAAK;AAEf,QAAID,MAAK,KAAKC,MAAK,GAAG;AACpB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,cAAc,KAAK,KAAK;AAC9B,WAAK,cAAc,cAAgB,OAAOD,IAAGC,IAAG,aAAa,EAAE,cAAc,MAAM,IAAI,eAAe,KAAK,EAAE,GAAG,CAAC;AAAA,IACnH,SAAS,OAAO;AACd,cAAQ,MAAM,qCAAqC,KAAK,EAAE,KAAK,KAAK;AACpE,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,SAAS,OAAe,QAAsB;AACtD,SAAK,eAAe;AACpB,SAAK,KAAK,QAAQ;AAAA,EAEpB;AAAA,EAEQ,cAAc,KAAiB;AACrC,QAAI,IAAI,QAAQ;AACd,UAAI,OAAO,OAAO,IAAI,EAAE;AAAA,IAC1B;AACA,QAAI,SAAS;AAAA,EACf;AAAA,EAEO,IAAI,KAA+C,OAAwB;AAChF,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,oBAAoB,KAAK,MAAM,GAAG;AACrD,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,aAAa;AAC1B,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,gBAAQ,KAAK,sBAAsB,WAAW,EAAE,sCAAsC;AAAA,MACxF;AACA,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,UAAU,SAAY,KAAK,uBAAuB,KAAK,IAAI;AAEpF,QAAI,kBAAkB;AACpB,aAAO,KAAK,aAAa,YAAY,gBAAgB;AAAA,IACvD;AAEA,QAAI,WAAW,WAAW,MAAM;AAC9B,WAAK,SAAS,YAAY,WAAW,cAAc,CAAC;AACpD,WAAK,uBAAuB,OAAO,KAAK,uBAAuB,QAAQ,UAAU,GAAG,CAAC;AAAA,IACvF,OAAO;AACL,WAAK,cAAc,UAAU;AAC7B,WAAK,kBAAkB;AACvB,WAAK,kBAAkB,IAAI,WAAW,IAAI,UAAU;AACpD,WAAK,uBAAuB,KAAK,UAAU;AAE3C,UAAI,OAAO,WAAW,oBAAoB,YAAY;AACpD,aAAK,KAAK,sBAAsB,UAAU;AAAA,MAC5C;AAEA,UAAI,WAAW,aAAa,GAAG;AAC7B,aAAK,mBAAmB,WAAW,UAAU;AAAA,MAC/C;AAAA,IACF;AAEA,UAAM,kBAAkB,WAAW,cAAc;AACjD,UAAM,gBAAgB,KAAK,uBAAuB;AAClD,SAAK,uBAAuB,KAAK,UAAU;AAC3C,SAAK,SAAS,YAAY,iBAAiB,aAAa;AAExD,SAAK,2BAA2B;AAChC,SAAK,oBAAoB,IAAI,UAAU;AAEvC,SAAK,cAAc;AAEnB,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,KAA+C,QAAuC;AACjG,QAAI,CAAC,QAAQ;AACX,aAAO,KAAK,IAAI,GAAG;AAAA,IACrB;AAEA,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,oBAAoB,KAAK,MAAM,GAAG;AACrD,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,aAAa;AAC1B,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,gBAAQ,KAAK,sBAAsB,WAAW,EAAE,+CAA+C;AAAA,MACjG;AACA,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,aAAa,MAAM,GAAG;AACzB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,QAAI,OAAO,aAAa;AACtB,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,gBAAQ,KAAK,kBAAkB,OAAO,EAAE,+CAA+C;AAAA,MACzF;AACA,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,KAAK,kBAAkB,IAAI,OAAO,EAAE,GAAG;AAC1C,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,gBAAQ,KAAK,kBAAkB,OAAO,EAAE,qCAAqC,KAAK,EAAE,yBAAyB;AAAA,MAC/G;AACA,aAAO;AAAA,IACT;AAEA,QAAI,eAAe,UAAU,WAAW,OAAO,OAAO,IAAI;AACxD,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,gBAAQ,KAAK,kCAAkC,WAAW,EAAE,wCAAwC;AAAA,MACtG;AACA,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,WAAW,MAAM;AAC9B,WAAK,SAAS,YAAY,WAAW,cAAc,CAAC;AACpD,WAAK,uBAAuB,OAAO,KAAK,uBAAuB,QAAQ,UAAU,GAAG,CAAC;AAAA,IACvF,OAAO;AACL,WAAK,cAAc,UAAU;AAC7B,WAAK,kBAAkB;AACvB,WAAK,kBAAkB,IAAI,WAAW,IAAI,UAAU;AACpD,WAAK,uBAAuB,KAAK,UAAU;AAE3C,UAAI,OAAO,WAAW,oBAAoB,YAAY;AACpD,aAAK,KAAK,sBAAsB,UAAU;AAAA,MAC5C;AAEA,UAAI,WAAW,aAAa,GAAG;AAC7B,aAAK,mBAAmB,WAAW,UAAU;AAAA,MAC/C;AAAA,IACF;AAEA,SAAK,2BAA2B;AAEhC,UAAM,cAAc,KAAK,uBAAuB,QAAQ,MAAM;AAC9D,UAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa,KAAK,uBAAuB,MAAM,CAAC;AAE3F,SAAK,uBAAuB,OAAO,eAAe,GAAG,UAAU;AAC/D,SAAK,SAAS,YAAY,WAAW,cAAc,GAAG,aAAa;AAEnE,SAAK,oBAAoB,IAAI,UAAU;AAEvC,SAAK,cAAc;AAEnB,WAAO;AAAA,EACT;AAAA;AAAA,EAGO,cAAc,IAAoC;AACvD,WAAO,KAAK,kBAAkB,IAAI,EAAE;AAAA,EACtC;AAAA,EAEO,OAAO,IAAkB;AAC9B,QAAI,CAAC,IAAI;AACP;AAAA,IACF;AAEA,QAAI,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAClC,YAAM,MAAM,KAAK,kBAAkB,IAAI,EAAE;AACzC,UAAI,KAAK;AACP,YAAI,IAAI,aAAa,GAAG;AACtB,eAAK,mBAAmB,CAAC,IAAI,UAAU;AAAA,QACzC;AAEA,cAAM,kBAAkB,IAAI,cAAc;AAC1C,aAAK,SAAS,YAAY,eAAe;AACzC,aAAK,cAAc;AAEnB,YAAI,SAAS;AACb,YAAI,SAAS;AACb,aAAK,KAAK,wBAAwB,GAAG;AACrC,aAAK,kBAAkB,OAAO,EAAE;AAEhC,cAAM,QAAQ,KAAK,uBAAuB,UAAU,CAACC,SAAQA,KAAI,OAAO,EAAE;AAC1E,YAAI,UAAU,IAAI;AAChB,eAAK,uBAAuB,OAAO,OAAO,CAAC;AAAA,QAC7C;AAEA,cAAM,cAAc,KAAK,uBAAuB,UAAU,CAACA,SAAQA,KAAI,OAAO,EAAE;AAChF,YAAI,gBAAgB,IAAI;AACtB,eAAK,uBAAuB,OAAO,aAAa,CAAC;AAAA,QACnD;AAEA,aAAK,2BAA2B;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EAEU,WAAiB;AAAA,EAG3B;AAAA,EAEO,cAA4B;AACjC,WAAO,CAAC,GAAG,KAAK,sBAAsB;AAAA,EACxC;AAAA,EAEO,mBAA2B;AAChC,WAAO,KAAK,uBAAuB;AAAA,EACrC;AAAA,EAEO,aAAa,WAAmB,aAA8B,CAAC,GAAS;AAC7E,QAAI,CAAC,KAAK,QAAS;AAEnB,SAAK,SAAS,SAAS;AAGvB,QAAI,KAAK,aAAc;AASvB,SAAK,iBAAiB;AAItB,QAAI,KAAK,oBAAoB,OAAO,GAAG;AACrC,iBAAW,SAAS,KAAK,qBAAqB;AAC5C,YAAI,CAAC,MAAM,aAAa;AACtB,gBAAM,iBAAiB;AAAA,QACzB;AAAA,MACF;AACA,WAAK,oBAAoB,MAAM;AAAA,IACjC;AAGA,QAAI,KAAK,aAAc;AAGvB,UAAM,oBAAoB,KAAK,WAAW;AAC1C,QAAI,mBAAmB;AACrB,iBAAW,KAAK,EAAE,QAAQ,eAAe,SAAS,KAAK,SAAS,CAAC;AAAA,IACnE;AAEA,eAAW,KAAK,EAAE,QAAQ,UAAU,YAAY,KAAK,CAAC;AAEtD,SAAK,mBAAmB;AAExB,UAAM,oBAAoB,KAAK,cAAc,aAAa,KAAK,QAAQ,KAAK,KAAK,SAAS;AAC1F,QAAI,mBAAmB;AACrB,YAAM,cAAc,KAAK,eAAe;AACxC,iBAAW,KAAK;AAAA,QACd,QAAQ;AAAA,QACR,GAAG,YAAY;AAAA,QACf,GAAG,YAAY;AAAA,QACf,OAAO,YAAY;AAAA,QACnB,QAAQ,YAAY;AAAA,QACpB,SAAS,KAAK;AAAA,QACd,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,IACH;AACA,UAAM,kBAAkB,KAAK,oBAAoB;AACjD,eAAW,SAAS,KAAK,wBAAwB;AAC/C,UAAI,CAAC,gBAAgB,SAAS,MAAM,GAAG,GAAG;AACxC,cAAM,iBAAiB;AACvB;AAAA,MACF;AACA,YAAM,aAAa,WAAW,UAAU;AAAA,IAC1C;AAEA,QAAI,mBAAmB;AACrB,iBAAW,KAAK,EAAE,QAAQ,iBAAiB,CAAC;AAAA,IAC9C;AACA,QAAI,mBAAmB;AACrB,iBAAW,KAAK,EAAE,QAAQ,aAAa,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEO,OAAO,QAAyB,WAAyB;AAC9D,QAAI,eAAe;AACnB,QAAI,KAAK,YAAY,KAAK,aAAa;AACrC,qBAAe,KAAK;AAAA,IACtB;AAEA,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,KAAK,MAAM,cAAc,SAAS;AAAA,IACtD;AAEA,SAAK,WAAW,cAAc,SAAS;AAEvC,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,KAAK,MAAM,cAAc,SAAS;AAAA,IACrD;AAEA,SAAK,UAAU;AACf,SAAK,KAAK,aAAa,KAAK,GAAG,KAAK,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,GAAG;AAExE,QAAI,KAAK,YAAY,KAAK,aAAa;AACrC,aAAO,gBAAgB,KAAK,GAAG,KAAK,GAAG,KAAK,WAAW;AAAA,IACzD;AAAA,EACF;AAAA,EAEU,sBAAgC;AACxC,WAAO,KAAK,uBAAuB,IAAI,CAAC,UAAU,MAAM,GAAG;AAAA,EAC7D;AAAA,EAEU,SAAS,WAAyB;AAAA,EAG5C;AAAA,EAEU,iBAA0E;AAClF,WAAO;AAAA,MACL,GAAG,KAAK,WAAW,IAAI,KAAK;AAAA,MAC5B,GAAG,KAAK,WAAW,IAAI,KAAK;AAAA,MAC5B,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EAEU,WAAW,QAAyB,WAAyB;AAAA,EAGvE;AAAA,EAEA,IAAW,cAAuB;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,UAAgB;AACrB,QAAI,KAAK,cAAc;AACrB;AAAA,IACF;AAEA,SAAK,eAAe;AAEpB,QAAI,KAAK,QAAQ;AACf,WAAK,OAAO,OAAO,KAAK,EAAE;AAAA,IAC5B;AAEA,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,QAAQ;AACzB,WAAK,cAAc;AAAA,IACrB;AAEA,eAAW,SAAS,KAAK,wBAAwB;AAC/C,WAAK,OAAO,MAAM,EAAE;AAAA,IACtB;AAEA,SAAK,yBAAyB,CAAC;AAC/B,SAAK,kBAAkB,MAAM;AAC7B,gBAAW,oBAAoB,OAAO,KAAK,GAAG;AAE9C,SAAK,KAAK;AACV,SAAK,mBAAmB;AAExB,SAAK,YAAY;AAEjB,QAAI;AACF,WAAK,SAAS,KAAK;AAAA,IACrB,SAAS,GAAG;AAAA,IAEZ;AAAA,EACF;AAAA,EAEO,qBAA2B;AAGhC,UAAM,WAAW,CAAC,GAAG,KAAK,sBAAsB;AAChD,eAAW,SAAS,UAAU;AAC5B,YAAM,mBAAmB;AAAA,IAC3B;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEU,cAAoB;AAAA,EAG9B;AAAA,EAEO,kBAAkB,OAAyB;AAChD,SAAK,gBAAgB,KAAK,MAAM,KAAK;AACrC,SAAK,gBAAgB,MAAM,IAAI,GAAG,KAAK,MAAM,KAAK;AAClD,SAAK,aAAa,KAAK;AAEvB,QAAI,KAAK,UAAU,CAAC,MAAM,oBAAoB;AAC5C,WAAK,OAAO,kBAAkB,KAAK;AAAA,IACrC;AAAA,EACF;AAAA,EAEU,aAAa,OAAyB;AAAA,EAGhD;AAAA,EAEA,IAAW,QAAQ,SAAoD;AACrE,QAAI,QAAS,MAAK,iBAAiB;AAAA,QAC9B,MAAK,iBAAiB;AAAA,EAC7B;AAAA,EAEA,IAAW,YAAY,SAAoD;AACzE,QAAI,QAAS,MAAK,gBAAgB,MAAM,IAAI;AAAA,QACvC,QAAO,KAAK,gBAAgB,MAAM;AAAA,EACzC;AAAA,EAEA,IAAW,UAAU,SAAoD;AACvE,QAAI,QAAS,MAAK,gBAAgB,IAAI,IAAI;AAAA,QACrC,QAAO,KAAK,gBAAgB,IAAI;AAAA,EACvC;AAAA,EAEA,IAAW,YAAY,SAAoD;AACzE,QAAI,QAAS,MAAK,gBAAgB,MAAM,IAAI;AAAA,QACvC,QAAO,KAAK,gBAAgB,MAAM;AAAA,EACzC;AAAA,EAEA,IAAW,YAAY,SAAoD;AACzE,QAAI,QAAS,MAAK,gBAAgB,MAAM,IAAI;AAAA,QACvC,QAAO,KAAK,gBAAgB,MAAM;AAAA,EACzC;AAAA,EAEA,IAAW,eAAe,SAAoD;AAC5E,QAAI,QAAS,MAAK,gBAAgB,UAAU,IAAI;AAAA,QAC3C,QAAO,KAAK,gBAAgB,UAAU;AAAA,EAC7C;AAAA,EAEA,IAAW,YAAY,SAAoD;AACzE,QAAI,QAAS,MAAK,gBAAgB,MAAM,IAAI;AAAA,QACvC,QAAO,KAAK,gBAAgB,MAAM;AAAA,EACzC;AAAA,EAEA,IAAW,YAAY,SAAoD;AACzE,QAAI,QAAS,MAAK,gBAAgB,MAAM,IAAI;AAAA,QACvC,QAAO,KAAK,gBAAgB,MAAM;AAAA,EACzC;AAAA,EAEA,IAAW,WAAW,SAAoD;AACxE,QAAI,QAAS,MAAK,gBAAgB,KAAK,IAAI;AAAA,QACtC,QAAO,KAAK,gBAAgB,KAAK;AAAA,EACxC;AAAA,EAEA,IAAW,cAAc,SAAoD;AAC3E,QAAI,QAAS,MAAK,gBAAgB,QAAQ,IAAI;AAAA,QACzC,QAAO,KAAK,gBAAgB,QAAQ;AAAA,EAC3C;AAAA,EAEA,IAAW,QAAQ,SAAoD;AACrE,SAAK,iBAAiB;AAAA,EACxB;AAAA,EACA,IAAW,UAAqD;AAC9D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,UAAU,SAAgD;AACnE,QAAI,QAAS,MAAK,cAAc,MAAM,IAAI;AAAA,QACrC,QAAO,KAAK,cAAc,MAAM;AAAA,EACvC;AAAA,EACA,IAAW,YAAmD;AAC5D,WAAO,KAAK,cAAc,MAAM;AAAA,EAClC;AAAA,EAEA,IAAW,aAAa,SAAmC;AACzD,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EACA,IAAW,eAAyC;AAClD,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,kBAAkB,SAA8C;AACtE,SAAK,UAAU,QAAQ;AACvB,SAAK,cAAc,QAAQ;AAC3B,SAAK,YAAY,QAAQ;AACzB,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,QAAQ;AAC3B,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,cAAc,QAAQ;AAC3B,SAAK,cAAc,QAAQ;AAC3B,SAAK,aAAa,QAAQ;AAC1B,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,UAAU,QAAQ;AACvB,SAAK,YAAY,QAAQ;AACzB,SAAK,eAAe,QAAQ;AAAA,EAC9B;AACF;;;ACp/CO,IAAM,cAAqD;AAAA,EAChE,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AACF;AAsDO,SAAS,mBAAmB,OAAsC;AACvE,QAAM,QAAQ,IAAI,YAAY,EAAE;AAChC,QAAM,CAAC,IAAI,MAAM,QAAQ,YAAY,CAAC;AACtC,QAAM,CAAC,IAAI,MAAM,SAAS,YAAY,CAAC;AACvC,QAAM,CAAC,IAAI,MAAM,WAAW,YAAY,CAAC;AACzC,QAAM,CAAC,IAAI,MAAM,YAAY,YAAY,CAAC;AAC1C,QAAM,CAAC,IAAI,MAAM,WAAW,YAAY,CAAC;AACzC,QAAM,CAAC,IAAI,MAAM,SAAS,YAAY,CAAC;AACvC,QAAM,CAAC,IAAI,MAAM,KAAK,YAAY,CAAC;AACnC,QAAM,CAAC,IAAI,MAAM,QAAQ,YAAY,CAAC;AACtC,QAAM,CAAC,IAAI,MAAM,MAAM,YAAY,CAAC;AACpC,QAAM,CAAC,IAAI,MAAM,OAAO,YAAY,CAAC;AACrC,QAAM,EAAE,IAAI,MAAM,MAAM,YAAY,CAAC;AACrC,SAAO;AACT;AAGO,IAAM,mBAAqD;AAAA,EAChE,QAAQ,mBAAmB,YAAY,MAAM;AAAA,EAC7C,QAAQ,mBAAmB,YAAY,MAAM;AAAA,EAC7C,SAAS,mBAAmB,YAAY,OAAO;AAAA,EAC/C,OAAO,mBAAmB,YAAY,KAAK;AAC7C;;;ACjKO,IAAMC,kBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,MAAM,KAAK;AAAA;AAAA,EACX,KAAK,KAAK;AAAA;AAAA,EACV,QAAQ,KAAK;AAAA;AAAA,EACb,WAAW,KAAK;AAAA;AAAA,EAChB,OAAO,KAAK;AAAA;AAAA,EACZ,SAAS,KAAK;AAAA;AAAA,EACd,QAAQ,KAAK;AAAA;AAAA,EACb,eAAe,KAAK;AAAA;AACtB;;;AChBO,IAAM,OAAN,MAAM,MAAK;AAAA,EAChB;AAAA,EAEA,YAAY,QAAsB;AAChC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAO,UAAU,OAAqB;AACpC,WAAO,IAAI,MAAK,KAAK;AAAA,EACvB;AAAA,EAEA,OAAO,WAAW,GAAW,GAAWC,IAAW,IAAY,GAAK;AAClE,WAAO,IAAI,MAAK,IAAI,aAAa,CAAC,GAAG,GAAGA,IAAG,CAAC,CAAC,CAAC;AAAA,EAChD;AAAA,EAEA,OAAO,SAAS,GAAW,GAAWA,IAAW,IAAY,KAAK;AAChE,WAAO,IAAI,MAAK,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,KAAKA,KAAI,KAAK,IAAI,GAAG,CAAC,CAAC;AAAA,EACxE;AAAA,EAEA,OAAO,QAAQ,KAAmB;AAChC,WAAO,SAAS,GAAG;AAAA,EACrB;AAAA,EAEA,SAA2C;AACzC,WAAO,CAAC,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA,EAChH;AAAA,EAEA,IAAI,IAAY;AACd,WAAO,KAAK,OAAO,CAAC;AAAA,EACtB;AAAA,EAEA,IAAI,EAAE,OAAe;AACnB,SAAK,OAAO,CAAC,IAAI;AAAA,EACnB;AAAA,EAEA,IAAI,IAAY;AACd,WAAO,KAAK,OAAO,CAAC;AAAA,EACtB;AAAA,EAEA,IAAI,EAAE,OAAe;AACnB,SAAK,OAAO,CAAC,IAAI;AAAA,EACnB;AAAA,EAEA,IAAI,IAAY;AACd,WAAO,KAAK,OAAO,CAAC;AAAA,EACtB;AAAA,EAEA,IAAI,EAAE,OAAe;AACnB,SAAK,OAAO,CAAC,IAAI;AAAA,EACnB;AAAA,EAEA,IAAI,IAAY;AACd,WAAO,KAAK,OAAO,CAAC;AAAA,EACtB;AAAA,EAEA,IAAI,EAAE,OAAe;AACnB,SAAK,OAAO,CAAC,IAAI;AAAA,EACnB;AAAA,EAEA,IAAO,IAA0B;AAC/B,WAAO,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,WAAW;AACT,WAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpG;AAAA,EAEA,OAAO,OAAuB;AAC5B,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM;AAAA,EAC5F;AACF;AAIO,SAAS,SAAS,KAAmB;AAC1C,QAAM,IAAI,QAAQ,MAAM,EAAE;AAE1B,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,EAC1D,WAAW,IAAI,WAAW,GAAG;AAC3B,UAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,EAC5E;AAEA,MAAI,CAAC,mBAAmB,KAAK,GAAG,KAAK,CAAC,mBAAmB,KAAK,GAAG,GAAG;AAClE,YAAQ,KAAK,sBAAsB,GAAG,yBAAyB;AAC/D,WAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,EACnC;AAEA,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAC9C,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAC9C,QAAMA,KAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI;AAC9C,QAAM,IAAI,IAAI,WAAW,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI,MAAM;AAEvE,SAAO,KAAK,WAAW,GAAG,GAAGA,IAAG,CAAC;AACnC;AA8DA,IAAM,kBAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,aAAa;AACf;AAEO,SAAS,WAAW,OAAyB;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,aAAa,MAAM,YAAY;AAErC,QAAI,eAAe,eAAe;AAChC,aAAO,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,IACnC;AAEA,QAAI,gBAAgB,UAAU,GAAG;AAC/B,aAAO,SAAS,gBAAgB,UAAU,CAAC;AAAA,IAC7C;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACA,SAAO;AACT;;;ACtMA,IAAM,oBAAmC,uBAAO,IAAI,0BAA0B;AAgBvE,SAAS,aAAa,KAA6B;AACxD,SAAO,OAAO,IAAI,iBAAiB;AACrC;AAEO,IAAM,aAAN,MAAiB;AAAA,EACtB,CAAC,iBAAiB,IAAI;AAAA,EAEf;AAAA,EAEP,YAAY,QAAqB;AAC/B,SAAK,SAAS;AAAA,EAChB;AACF;;;ACjBO,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EACrB,QAAgB;AAAA,EAChB,UAAuB,CAAC;AAAA,EACxB,aAA0B;AAAA,EAC1B,aAA0B;AAAA,EAC1B,qBAA6B;AAAA,EAC7B,eAAoB;AAAA,EACpB,YAAoB;AAAA,EACpB;AAAA,EAER,YAAY,aAA0B;AACpC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,OAAO,OAAO,aAA6C;AACzD,WAAO,IAAI,mBAAkB,WAAW;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,IAAI,YAAY,EAAE,OAAO,KAAK,KAAK,EAAE;AAAA,EAC9C;AAAA,EAEA,QAAQ,MAAoB;AAC1B,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,MACb;AAAA,QACE,WAAW;AAAA,QACX;AAAA,QACA,IAAI,KAAK,cAAc;AAAA,QACvB,IAAI,KAAK,cAAc;AAAA,QACvB,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,MAAoB;AACzB,SAAK,SAAS;AACd,SAAK,QAAQ,KAAK;AAAA,MAChB,WAAW;AAAA,MACX;AAAA,MACA,IAAI,KAAK,cAAc;AAAA,MACvB,IAAI,KAAK,cAAc;AAAA,MACvB,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,YAAmC;AAC/C,SAAK,UAAU,WAAW,OAAO,IAAI,CAAC,WAAW;AAAA,MAC/C,WAAW;AAAA,MACX,MAAM,MAAM;AAAA,MACZ,IAAI,MAAM,MAAM,KAAK,cAAc;AAAA,MACnC,IAAI,MAAM,MAAM,KAAK,cAAc;AAAA,MACnC,YAAY,MAAM,cAAc,KAAK;AAAA,MACrC,MAAM,MAAM;AAAA,IACd,EAAE;AACF,SAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAAA,EACtD;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,aAAqB,WAA2B;AAC3D,WAAO,KAAK,MAAM,MAAM,aAAa,SAAS;AAAA,EAChD;AAAA,EAEA,eAAuB;AACrB,QAAI,KAAK,MAAM,WAAW,EAAG,QAAO;AACpC,WAAO,KAAK,MAAM,MAAM,IAAI,EAAE;AAAA,EAChC;AAAA,EAEA,YAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAaC,KAAuB;AAClC,SAAK,aAAaA;AAAA,EACpB;AAAA,EAEA,aAAaC,KAAuB;AAClC,SAAK,aAAaA;AAAA,EACpB;AAAA,EAEA,qBAAqB,YAAiC;AACpD,SAAK,qBAAqB,cAAc;AAAA,EAC1C;AAAA,EAEA,gBAAsB;AACpB,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,oBAA4B;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAe,OAAkB;AAC/B,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,iBAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,OAAqB;AAC/B,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,wBAAwB,YAAuB;AAAA,EAAC;AAAA,EAChD,aAAa,UAAkB,YAAuB;AAAA,EAAC;AAAA,EACvD,sBAAsB,QAAsB;AAAA,EAAC;AAAA,EAC7C,oBAAoB,UAAwB;AAAA,EAAC;AAAA,EAC7C,qBAA2B;AAAA,EAAC;AAAA,EAC5B,kBAAkB,UAAyB;AACzC,WAAO,CAAC;AAAA,EACV;AAAA,EACA,oBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA,EACA,SAAS,OAAqB;AAAA,EAAC;AAAA,EAE/B,QAAc;AACZ,SAAK,QAAQ;AACb,SAAK,UAAU,CAAC;AAAA,EAClB;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM;AACX,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,UAAgB;AACd,SAAK,QAAQ;AACb,SAAK,UAAU,CAAC;AAAA,EAClB;AACF;;;AC9JA,IAAM,YAAkB;AAAA,EACtB,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC;AAEA,IAAM,YAAkB;AAAA,EACtB,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EAAG,GAAG;AAAA,EACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC;AAEO,IAAM,wBAAN,MAAM,uBAAsB;AAAA,EACzB;AAAA,EACA,aAA4B;AAAA,EAC5B,YAAsC;AAAA,EACtC,aAAqB;AAAA,EACrB,aAAqB;AAAA,EACrB,iBAAyB;AAAA,EACzB,kBAA0B;AAAA,EAC1B,YAAqB;AAAA,EACtB,YAAyC;AAAA,EACxC,aAAoD;AAAA,EACpD;AAAA,EACA;AAAA,EAER,YAAY,YAA+B;AACzC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,OAAO,OAAO,YAAsD;AAClE,WAAO,IAAI,uBAAsB,UAAU;AAAA,EAC7C;AAAA;AAAA,EAGA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW;AACb,UAAM,QAAQ,KAAK,mBAAmB;AACtC,UAAM,aAAuB,CAAC;AAC9B,UAAM,aAAuB,CAAC;AAC9B,UAAM,cAAwB,CAAC;AAC/B,UAAM,YAAsB,CAAC;AAC7B,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,iBAAW,KAAK,MAAM;AACtB,YAAM,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AACpD,YAAMC,KAAI,SAAS;AACnB,iBAAW,KAAKA,EAAC;AACjB,kBAAY,KAAK,CAAC;AAClB,gBAAU,KAAK,CAAC;AAChB,UAAIA,KAAI,SAAU,YAAWA;AAC7B,gBAAU,SAAS,SAAS;AAAA,IAC9B;AAEA,WAAO,EAAE,YAAY,YAAY,cAAc,UAAU,aAAa,UAAU;AAAA,EAClF;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,OAAe,KAAa,SAAgB,SAAsB;AAC7E,SAAK,aAAa,EAAE,OAAO,IAAI;AAC/B,SAAK,eAAe;AACpB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,gBAAgB,KAAa,SAAgB,SAAsB;AACjE,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,QAAI,QAAS,MAAK,eAAe;AACjC,QAAI,QAAS,MAAK,eAAe;AAAA,EACnC;AAAA,EAEA,iBAAuB;AACrB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,eAAsD;AACpD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,kBACE,UACA,UACA,SACA,SACA,UACA,UACS;AACT,WAAO;AAAA,EACT;AAAA,EAEA,qBACE,UACA,UACA,SACA,SACA,UACA,UACS;AACT,WAAO;AAAA,EACT;AAAA,EAEA,sBAA4B;AAAA,EAAC;AAAA,EAE7B,kBAA0B;AACxB,QAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,UAAM,OAAO,KAAK,WAAW,aAAa;AAC1C,UAAM,QAAQ,KAAK,IAAI,KAAK,WAAW,OAAO,KAAK,WAAW,GAAG;AACjE,UAAM,MAAM,KAAK,IAAI,KAAK,WAAW,OAAO,KAAK,WAAW,GAAG;AAC/D,WAAO,KAAK,MAAM,OAAO,GAAG;AAAA,EAC9B;AAAA,EAEA,eAAuB;AACrB,WAAO,KAAK,WAAW,aAAa;AAAA,EACtC;AAAA,EAEA,aAAa,OAA4B;AACvC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAY,MAAsC;AAChD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,gBAAgB,OAAe,QAAsB;AACnD,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AAEvB,QAAI,KAAK,cAAc,UAAU,QAAQ,KAAK,KAAK,eAAe,OAAO;AACvE,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,YAAYC,IAAWC,IAAW,OAAe,QAAsB;AACrE,SAAK,aAAaD;AAClB,SAAK,aAAaC;AAClB,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AAGvB,QAAI,KAAK,cAAc,UAAU,QAAQ,KAAK,KAAK,eAAe,OAAO;AACvE,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,gBAAgB,YAAmC;AAAA,EAAC;AAAA,EAEpD,qBAAqB,QAAoB;AAAA,EAAC;AAAA,EAE1C,YAAY,UAAyB;AACnC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEQ,qBAA2C;AACjD,UAAM,SAAS,KAAK,WAAW,UAAU;AACzC,QAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AAEjC,UAAM,MAAM,KAAK,WAAW,aAAa;AACzC,UAAM,MAAM,KAAK,WAAW,aAAa;AAGzC,UAAM,eAAqC,CAAC,CAAC,CAAC;AAE9C,eAAW,SAAS,QAAQ;AAC1B,YAAM,QAAQ,MAAM,KAAK,MAAM,IAAI;AACnC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAI,IAAI,GAAG;AACT,uBAAa,KAAK,CAAC,CAAC;AAAA,QACtB;AACA,YAAI,MAAM,CAAC,EAAE,SAAS,GAAG;AACvB,gBAAM,MAAwB;AAAA,YAC5B,MAAM,MAAM,CAAC;AAAA,YACb,IAAI,MAAM,MAAM;AAAA,YAChB,IAAI,MAAM,MAAM;AAAA,YAChB,YAAY,MAAM,cAAc;AAAA,UAClC;AACA,cAAI,MAAM,KAAM,KAAI,OAAO,MAAM;AACjC,uBAAa,aAAa,SAAS,CAAC,EAAE,KAAK,GAAG;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,cAAc,UAAU,CAAC,KAAK,cAAc,KAAK,cAAc,GAAG;AACzE,aAAO;AAAA,IACT;AAEA,UAAM,eAAqC,CAAC;AAC5C,UAAM,YAAY,KAAK;AAEvB,eAAW,eAAe,cAAc;AAEtC,YAAM,WAAW,YAAY,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAEvD,UAAI,SAAS,UAAU,WAAW;AAChC,qBAAa,KAAK,WAAW;AAC7B;AAAA,MACF;AAEA,UAAI,KAAK,cAAc,QAAQ;AAE7B,YAAI,MAAM;AACV,eAAO,MAAM,SAAS,QAAQ;AAC5B,gBAAM,MAAM,KAAK,IAAI,MAAM,WAAW,SAAS,MAAM;AACrD,gBAAM,cAAc,KAAK,YAAY,aAAa,KAAK,GAAG;AAC1D,uBAAa,KAAK,WAAW;AAC7B,gBAAM;AAAA,QACR;AAAA,MACF,OAAO;AAEL,YAAI,MAAM;AACV,eAAO,MAAM,SAAS,QAAQ;AAC5B,cAAI,MAAM,KAAK,IAAI,MAAM,WAAW,SAAS,MAAM;AACnD,cAAI,MAAM,SAAS,QAAQ;AAEzB,gBAAI,WAAW;AACf,mBAAO,WAAW,OAAO,SAAS,QAAQ,MAAM,KAAK;AACnD;AAAA,YACF;AACA,gBAAI,WAAW,KAAK;AAClB,oBAAM,WAAW;AAAA,YACnB;AAAA,UACF;AACA,gBAAM,cAAc,KAAK,YAAY,aAAa,KAAK,GAAG;AAC1D,uBAAa,KAAK,WAAW;AAC7B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,QAA4B,OAAe,KAAiC;AAC9F,UAAM,SAA6B,CAAC;AACpC,QAAI,SAAS;AAEb,eAAW,SAAS,QAAQ;AAC1B,YAAM,aAAa;AACnB,YAAM,WAAW,SAAS,MAAM,KAAK;AAErC,UAAI,YAAY,SAAS,cAAc,KAAK;AAC1C,iBAAS;AACT;AAAA,MACF;AAEA,YAAM,aAAa,KAAK,IAAI,GAAG,QAAQ,UAAU;AACjD,YAAM,WAAW,KAAK,IAAI,MAAM,KAAK,QAAQ,MAAM,UAAU;AAC7D,YAAM,aAAa,MAAM,KAAK,MAAM,YAAY,QAAQ;AAExD,UAAI,WAAW,SAAS,GAAG;AACzB,cAAM,SAA2B;AAAA,UAC/B,MAAM;AAAA,UACN,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,UACV,YAAY,MAAM;AAAA,QACpB;AACA,YAAI,MAAM,KAAM,QAAO,OAAO,MAAM;AACpC,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,eAAS;AAAA,IACX;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,OAAe,QAAgE;AAElG,UAAM,eAAe,KAAK;AAC1B,QAAI,QAAQ,KAAK,KAAK,cAAc,QAAQ;AAC1C,WAAK,aAAa;AAAA,IACpB,WAAW,UAAU,GAAG;AAEtB,WAAK,aAAa;AAAA,IACpB;AAEA,UAAM,QAAQ,KAAK,mBAAmB;AACtC,SAAK,aAAa;AAElB,QAAI,WAAW;AACf,eAAW,QAAQ,OAAO;AACxB,YAAM,YAAY,KAAK,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AAChE,UAAI,YAAY,SAAU,YAAW;AAAA,IACvC;AAEA,WAAO;AAAA,MACL,WAAW,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBAA8B;AAC5B,WAAO,KAAK,mBAAmB,EAAE;AAAA,EACnC;AAAA,EAEA,kBAAwC;AACtC,UAAM,WAAW,KAAK,mBAAmB;AACzC,QAAI,SAAS,WAAW,EAAG,QAAO;AAElC,UAAM,YAAY,KAAK;AACvB,UAAM,UACJ,KAAK,kBAAkB,IAAI,KAAK,IAAI,YAAY,KAAK,iBAAiB,SAAS,MAAM,IAAI,SAAS;AAEpG,UAAM,eAA8B,CAAC;AACrC,aAAS,IAAI,WAAW,IAAI,SAAS,KAAK;AACxC,UAAI,KAAK,KAAK,IAAI,SAAS,QAAQ;AACjC,qBAAa,KAAK,EAAE,QAAQ,SAAS,CAAC,EAAE,CAAC;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,UAAgB;AAAA,EAAC;AACnB;;;ACnVO,IAAM,qBAAN,MAAM,oBAAmB;AAAA,EACtB,aAAa;AAAA,EAErB,OAAO,SAA6B;AAClC,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,OAAO,UAAU,QAAiC;AAChD,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,OAAO,WAAW,SAAkC;AAClD,WAAO,IAAI,oBAAmB;AAAA,EAChC;AAAA,EAEA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,OAAe,QAAqB;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,OAA8B;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAA8B;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAwB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,iBAAuB;AAAA,EAAC;AAAA,EAExB,SAAS,OAAoB;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,aAA+C;AAC5D,WAAO,EAAE,YAAY,EAAE;AAAA,EACzB;AAAA,EAEA,aAAmB;AAAA,EAAC;AAAA,EACpB,eAAuB;AACrB,WAAO;AAAA,EACT;AAAA,EACA,eAAiC;AAC/B,WAAO,oBAAI,IAAI;AAAA,EACjB;AAAA,EACA,qBAA+B;AAC7B,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,UAAgB;AACd,SAAK,aAAa;AAAA,EACpB;AACF;;;AChCA,IAAM,iBAAN,MAAqB;AAAA,EACnB,WAAW,EAAE,WAAW,GAAG;AAAA,EAC3B,OAAO,WAAsB;AAAA,EAAC;AAAA,EAC9B,SAAe;AAAA,EAAC;AAAA,EAChB,SAAS,WAA2B;AAAA,EAAC;AAAA,EACrC,WAAW,WAA2B;AAAA,EAAC;AAAA,EACvC,QAAc;AAAA,EAAC;AAAA,EACf,OAAO,YAA0B;AAAA,EAAC;AACpC;AAEO,IAAM,SAAS,IAAI,eAAe;;;AC9BzC,IAAM,UAAkC;AAAA;AAAA,EAEtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA;AAAA,EAER,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA;AAAA,EAER,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA;AAAA,EAEN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA,EACR,QAAQ;AAAA;AAAA,EAER,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAEP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA;AAAA,EAEN,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EAEH,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAEP,MAAM;AACR;AAEO,IAAM,sBAAsB,CAAC,GAAG,OAAO,OAAO,OAAO,GAAG,WAAW;;;AClG1E,IAAM,uBAAuB,uBAAO,IAAI,yBAAyB;AAM1D,SAAS,UAAa,KAAa,SAAqB;AAE7D,QAAM,MAAO,WAAW,oBAAoB,MAAM,CAAC;AACnD,MAAI,EAAE,OAAO,MAAM;AACjB,QAAI,GAAG,IAAI,QAAQ;AAAA,EACrB;AACA,SAAO,IAAI,GAAG;AAChB;;;AC2BO,IAAM,cAA4C,UAAU,gBAAgB,OAAO,CAAC,EAAE;AAEtF,SAAS,eAAe,QAA4B;AACzD,QAAM,WAAW,YAAY,OAAO,IAAI;AACxC,MAAI,UAAU;AACZ,QACE,SAAS,gBAAgB,OAAO,eAChC,SAAS,SAAS,OAAO,QACzB,SAAS,YAAY,OAAO,SAC5B;AACA,YAAM,IAAI;AAAA,QACR,yBAAyB,OAAO,IAAI,mEACrB,KAAK,UAAU,QAAQ,CAAC,UAAU,KAAK,UAAU,MAAM,CAAC;AAAA,MACzE;AAAA,IACF;AACA;AAAA,EACF;AACA,cAAY,OAAO,IAAI,IAAI;AAC7B;AAEA,SAAS,iBAAiB,OAAwB;AAChD,QAAM,aAAa,MAAM,YAAY;AACrC,SAAO,CAAC,QAAQ,KAAK,MAAM,KAAK,EAAE,SAAS,UAAU;AACvD;AAEA,SAAS,cAAc,QAAiD;AACtE,QAAM,WAAW,QAAQ,IAAI,OAAO,IAAI;AAExC,MAAI,aAAa,UAAa,OAAO,YAAY,QAAW;AAC1D,WAAO,OAAO;AAAA,EAChB;AAEA,MAAI,aAAa,QAAW;AAC1B,UAAM,IAAI,MAAM,iCAAiC,OAAO,IAAI,gBAAgB,OAAO,WAAW,EAAE;AAAA,EAClG;AAEA,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,OAAO,aAAa,YAAY,WAAW,iBAAiB,QAAQ;AAAA,IAC7E,KAAK;AACH,YAAM,WAAW,OAAO,QAAQ;AAChC,UAAI,MAAM,QAAQ,GAAG;AACnB,cAAM,IAAI,MAAM,wBAAwB,OAAO,IAAI,iCAAiC,QAAQ,EAAE;AAAA,MAChG;AACA,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,WAAN,MAAe;AAAA,EACL,eAAuD,oBAAI,IAAI;AAAA,EAEvE,IAAI,KAAkB;AACpB,QAAI,KAAK,aAAa,IAAI,GAAG,GAAG;AAC9B,aAAO,KAAK,aAAa,IAAI,GAAG;AAAA,IAClC;AAEA,QAAI,EAAE,OAAO,cAAc;AACzB,YAAM,IAAI,MAAM,wBAAwB,GAAG,qBAAqB;AAAA,IAClE;AAEA,QAAI;AACF,YAAM,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC5C,WAAK,aAAa,IAAI,KAAK,KAAK;AAChC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,2BAA2B,GAAG,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,IAC7G;AAAA,EACF;AAAA,EAEA,IAAI,KAAsB;AACxB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,aAAmB;AACjB,SAAK,aAAa,MAAM;AAAA,EAC1B;AACF;AAEA,IAAM,WAAW,UAAU,aAAa,MAAM,IAAI,SAAS,CAAC;AA6DrD,IAAM,MAAM,IAAI,MAAM,CAAC,GAA0B;AAAA,EACtD,IAAI,QAAQ,MAAc;AACxB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AACA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AAAA,EAEA,IAAI,QAAQ,MAAc;AACxB,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AAAA,EAEA,UAAU;AACR,WAAO,OAAO,KAAK,WAAW;AAAA,EAChC;AAAA,EAEA,yBAAyB,QAAQ,MAAc;AAC7C,QAAI,SAAS,IAAI,IAAI,GAAG;AACtB,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,KAAK,MAAM,SAAS,IAAI,IAAI;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF,CAAC;;;ACxMD,eAAe;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AACX,CAAC;AAED,eAAe;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AACX,CAAC;;;ACIM,IAAe,uBAAf,cAA4C,WAAuC;AAAA,EACjF,aAAsB;AAAA,EAEnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAsC;AAAA,EACtC,qBAAkD;AAAA,EAClD;AAAA,EACA;AAAA,EACA,WAAmB;AAAA,EACnB,WAAmB;AAAA,EACnB,YAAqB;AAAA,EAErB;AAAA,EACA;AAAA,EACA;AAAA,EAEA,kBAAkB;AAAA,IAC1B,IAAI,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,IAC9B,IAAI,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,IAC9B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,UAAU;AAAA,EACZ;AAAA,EAEA,YAAY,KAAoB,SAA4B;AAC1D,UAAM,KAAK,OAAO;AAElB,SAAK,aAAa,WAAW,QAAQ,MAAM,KAAK,gBAAgB,EAAE;AAClE,SAAK,aAAa,WAAW,QAAQ,MAAM,KAAK,gBAAgB,EAAE;AAClE,SAAK,qBAAqB,QAAQ,cAAc,KAAK,gBAAgB;AACrE,SAAK,eAAe,QAAQ,cAAc,WAAW,QAAQ,WAAW,IAAI,KAAK,gBAAgB;AACjG,SAAK,eAAe,QAAQ,cAAc,WAAW,QAAQ,WAAW,IAAI,KAAK,gBAAgB;AACjG,SAAK,aAAa,QAAQ,cAAc,KAAK,gBAAgB;AAC7D,SAAK,YAAY,QAAQ,YAAY,KAAK,gBAAgB;AAC1D,SAAK,gBAAgB,QAAQ,gBAAgB,KAAK,gBAAgB;AAClE,SAAK,qBAAqB,QAAQ,oBAC9B,WAAW,QAAQ,iBAAiB,IACpC,KAAK,gBAAgB;AACzB,SAAK,YAAY,QAAQ,YAAY,KAAK,gBAAgB;AAE1D,SAAK,aAAa,kBAAW,OAAO,KAAK,KAAK,WAAW;AACzD,SAAK,iBAAiB,sBAAe,OAAO,KAAK,UAAU;AAE3D,SAAK,yBAAyB,mBAAY,OAAO;AACjD,SAAK,WAAW,eAAe,KAAK,sBAAsB;AAE1D,SAAK,eAAe,YAAY,KAAK,SAAS;AAC9C,SAAK,iBAAiB;AAEtB,SAAK,WAAW,aAAa,KAAK,UAAU;AAC5C,SAAK,WAAW,aAAa,KAAK,UAAU;AAC5C,SAAK,WAAW,qBAAqB,KAAK,kBAAkB;AAE5D,QAAI,KAAK,kBAAkB,QAAW;AACpC,WAAK,eAAe,gBAAgB,KAAK,aAAa;AAAA,IACxD;AACA,QAAI,KAAK,uBAAuB,QAAW;AACzC,WAAK,eAAe,qBAAqB,KAAK,kBAAkB;AAAA,IAClE;AAEA,QAAI,KAAK,cAAc,UAAU,KAAK,QAAQ,GAAG;AAC/C,WAAK,eAAe,aAAa,KAAK,KAAK;AAAA,IAC7C;AAEA,QAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAG;AACrC,WAAK,eAAe,YAAY,KAAK,UAAU,KAAK,UAAU,KAAK,OAAO,KAAK,MAAM;AAAA,IACvF;AAEA,SAAK,eAAe,YAAY,KAAK,SAAS;AAE9C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEU,aAAa,OAAkB;AACvC,QAAI,MAAM,SAAS,UAAU;AAC3B,WAAK,aAAa,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EAEU,aAAa,OAAkB;AACvC,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,EAAE,WAAW,MAAM,IAAI,MAAM;AAEnC,QAAI,cAAc,MAAM;AACtB,WAAK,WAAW;AAAA,IAClB,WAAW,cAAc,QAAQ;AAC/B,WAAK,WAAW;AAAA,IAClB;AAEA,QAAI,KAAK,cAAc,QAAQ;AAC7B,UAAI,cAAc,QAAQ;AACxB,aAAK,WAAW;AAAA,MAClB,WAAW,cAAc,SAAS;AAChC,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAW,WAAqB;AAC9B,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,IAAW,YAAoB;AAC7B,WAAO,KAAK,WAAW,aAAa;AAAA,EACtC;AAAA,EAEA,IAAW,mBAA2B;AACpC,WAAO,KAAK,eAAe,oBAAoB;AAAA,EACjD;AAAA,EAEA,IAAW,UAAkB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ,OAAe;AAChC,UAAM,aAAa,KAAK,IAAI,GAAG,KAAK,eAAe,KAAK,MAAM;AAC9D,UAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,UAAU,CAAC;AACvD,QAAI,KAAK,aAAa,SAAS;AAC7B,WAAK,WAAW;AAChB,WAAK,qBAAqB;AAC1B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,UAAkB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,QAAQ,OAAe;AAChC,UAAM,aAAa,KAAK,IAAI,GAAG,KAAK,cAAc,KAAK,KAAK;AAC5D,UAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,UAAU,CAAC;AACvD,QAAI,KAAK,aAAa,SAAS;AAC7B,WAAK,WAAW;AAChB,WAAK,qBAAqB;AAC1B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAW,cAAsB;AAC/B,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAW,eAAuB;AAChC,WAAO,KAAK,SAAS,WAAW;AAAA,EAClC;AAAA,EAEA,IAAW,aAAqB;AAC9B,WAAO,KAAK,IAAI,GAAG,KAAK,eAAe,KAAK,MAAM;AAAA,EACpD;AAAA,EAEA,IAAW,aAAqB;AAC9B,WAAO,KAAK,IAAI,GAAG,KAAK,cAAc,KAAK,KAAK;AAAA,EAClD;AAAA,EAEU,uBAA6B;AAErC,QAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAG;AACrC,WAAK,eAAe,YAAY,KAAK,UAAU,KAAK,UAAU,KAAK,OAAO,KAAK,MAAM;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK,WAAW,aAAa;AAAA,EACtC;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,IAAI,KAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,GAAG,OAAkC;AACvC,UAAM,WAAW,WAAW,SAAS,KAAK,gBAAgB,EAAE;AAC5D,QAAI,KAAK,eAAe,UAAU;AAChC,WAAK,aAAa;AAClB,WAAK,WAAW,aAAa,KAAK,UAAU;AAC5C,WAAK,YAAY,QAAQ;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,cAAgC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY,OAAkC;AAChD,UAAM,WAAW,QAAQ,WAAW,KAAK,IAAI,KAAK,gBAAgB;AAClE,QAAI,KAAK,iBAAiB,UAAU;AAClC,WAAK,eAAe;AACpB,UAAI,KAAK,oBAAoB;AAC3B,aAAK,qBAAqB,KAAK,kBAAkB;AAAA,MACnD;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,cAAgC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY,OAAkC;AAChD,UAAM,WAAW,QAAQ,WAAW,KAAK,IAAI,KAAK,gBAAgB;AAClE,QAAI,KAAK,iBAAiB,UAAU;AAClC,WAAK,eAAe;AACpB,UAAI,KAAK,oBAAoB;AAC3B,aAAK,qBAAqB,KAAK,kBAAkB;AAAA,MACnD;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,KAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,GAAG,OAAkC;AACvC,UAAM,WAAW,WAAW,SAAS,KAAK,gBAAgB,EAAE;AAC5D,QAAI,KAAK,eAAe,UAAU;AAChC,WAAK,aAAa;AAClB,WAAK,WAAW,aAAa,KAAK,UAAU;AAC5C,WAAK,YAAY,QAAQ;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,WAAW,OAAe;AAC5B,QAAI,KAAK,uBAAuB,OAAO;AACrC,WAAK,qBAAqB;AAC1B,WAAK,WAAW,qBAAqB,KAAK,kBAAkB;AAC5D,WAAK,oBAAoB,KAAK;AAC9B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,WAAqC;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAiC;AAC5C,QAAI,KAAK,cAAc,OAAO;AAC5B,WAAK,YAAY;AACjB,WAAK,eAAe,YAAY,KAAK,SAAS;AAC9C,UAAI,UAAU,UAAU,KAAK,QAAQ,GAAG;AACtC,aAAK,eAAe,aAAa,KAAK,KAAK;AAAA,MAC7C;AAEA,WAAK,SAAS,UAAU;AACxB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,eAA4C;AAC9C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa,OAAoC;AACnD,QAAI,KAAK,kBAAkB,OAAO;AAChC,WAAK,gBAAgB;AACrB,UAAI,UAAU,QAAW;AACvB,aAAK,eAAe,gBAAgB,KAAK;AAAA,MAC3C;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,oBAAsC;AACxC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,kBAAkB,OAAkC;AACtD,UAAM,WAAW,QAAQ,WAAW,KAAK,IAAI;AAC7C,QAAI,KAAK,uBAAuB,UAAU;AACxC,WAAK,qBAAqB;AAC1B,UAAI,aAAa,QAAW;AAC1B,aAAK,eAAe,qBAAqB,QAAQ;AAAA,MACnD;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAgB;AAC3B,QAAI,KAAK,cAAc,OAAO;AAC5B,WAAK,YAAY;AACjB,WAAK,eAAe,YAAY,KAAK;AACrC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEU,SAAS,OAAe,QAAsB;AACtD,SAAK,eAAe,YAAY,KAAK,UAAU,KAAK,UAAU,OAAO,MAAM;AAC3E,SAAK,SAAS,UAAU;AACxB,SAAK,cAAc;AACnB,SAAK,KAAK,kBAAkB;AAAA,EAC9B;AAAA,EAEU,wBAAiC;AACzC,QAAI,KAAK,oBAAoB;AAC3B,aAAO,KAAK,qBAAqB,KAAK,kBAAkB;AAAA,IAC1D;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,qBAAqB,gBAAsD;AACjF,QAAI,CAAC,gBAAgB,UAAU;AAC7B,WAAK,eAAe,oBAAoB;AACxC,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,eAAe;AAAA,MACzB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEU,iBAAuB;AAC/B,QAAI,KAAK,oBAAoB;AAC3B,WAAK,qBAAqB,KAAK,kBAAkB;AAAA,IACnD;AAEA,SAAK,SAAS,UAAU;AACxB,SAAK,cAAc;AACnB,SAAK,KAAK,kBAAkB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAyB;AAC/B,UAAM,cAAc,CAClB,OACA,WACA,QACA,eACsC;AAKtC,UAAI;AACJ,UAAI,cAAc,YAAY,aAAa,MAAM,KAAK,GAAG;AACvD,yBAAiB;AAAA,MACnB,OAAO;AACL,yBAAiB;AAAA,MACnB;AAEA,YAAM,kBAAkB,MAAM,MAAM,IAAI,IAAI;AAE5C,YAAM,gBAAgB,KAAK,eAAe;AAAA,QACxC,KAAK,MAAM,cAAc;AAAA,QACzB,KAAK,MAAM,eAAe;AAAA,MAC5B;AAEA,YAAM,gBAAgB,gBAAgB,KAAK,IAAI,GAAG,cAAc,QAAQ,IAAI;AAC5E,YAAM,iBAAiB,gBAAgB,KAAK,IAAI,GAAG,cAAc,SAAS,IAAI;AAE9E,UAAI,cAAc,YAAY,UAAU,KAAK,kBAAkB,YAAY;AACzE,eAAO;AAAA,UACL,OAAO,KAAK,IAAI,gBAAgB,aAAa;AAAA,UAC7C,QAAQ,KAAK,IAAI,iBAAiB,cAAc;AAAA,QAClD;AAAA,MACF;AAIA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,SAAK,SAAS,eAAe,WAAW;AAAA,EAC1C;AAAA,EAEA,qBAAqBC,IAAWC,IAAoB;AAClD,QAAI,CAAC,KAAK,WAAY,QAAO;AAE7B,UAAM,SAASD,KAAI,KAAK;AACxB,UAAM,SAASC,KAAI,KAAK;AAExB,WAAO,UAAU,KAAK,SAAS,KAAK,SAAS,UAAU,KAAK,SAAS,KAAK;AAAA,EAC5E;AAAA,EAEA,mBAAmB,WAAsC;AACvD,UAAM,iBAAiB,8BAA8B,WAAW,KAAK,GAAG,KAAK,CAAC;AAC9E,SAAK,qBAAqB;AAE1B,QAAI;AACJ,QAAI,CAAC,gBAAgB,UAAU;AAC7B,WAAK,eAAe,oBAAoB;AACxC,gBAAU;AAAA,IACZ,WAAW,WAAW,SAAS;AAC7B,gBAAU,KAAK,eAAe;AAAA,QAC5B,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF,OAAO;AACL,gBAAU,KAAK,eAAe;AAAA,QAC5B,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF;AAEA,QAAI,SAAS;AACX,WAAK,cAAc;AAAA,IACrB;AAEA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK,eAAe,gBAAgB;AAAA,EAC7C;AAAA,EAEA,eAAwB;AACtB,WAAO,KAAK,eAAe,aAAa;AAAA,EAC1C;AAAA,EAEA,eAAsD;AACpD,WAAO,KAAK,eAAe,aAAa;AAAA,EAC1C;AAAA,EAEA,OAAO,QAAyB,WAAyB;AACvD,QAAI,CAAC,KAAK,QAAS;AAEnB,SAAK,UAAU;AACf,SAAK,KAAK,aAAa,KAAK,GAAG,KAAK,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,GAAG;AAExE,SAAK,WAAW,MAAM;AAEtB,QAAI,KAAK,YAAY,KAAK,aAAa;AACrC,aAAO,gBAAgB,KAAK,GAAG,KAAK,GAAG,KAAK,WAAW;AAAA,IACzD;AAAA,EACF;AAAA,EAEU,WAAW,QAA+B;AAClD,QAAI,KAAK,WAAW,KAAK;AACvB,aAAO,eAAe,KAAK,gBAAgB,KAAK,GAAG,KAAK,CAAC;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,YAAa;AAEtB,SAAK,WAAW,eAAe,IAAI;AACnC,SAAK,uBAAuB,QAAQ;AACpC,SAAK,eAAe,QAAQ;AAC5B,SAAK,WAAW,QAAQ;AACxB,UAAM,QAAQ;AAAA,EAChB;AAAA,EAEU,YAAY,UAAsB;AAAA,EAE5C;AAAA,EAEU,YAAY,UAAsB;AAAA,EAE5C;AAAA,EAEU,oBAAoB,eAA6B;AAAA,EAE3D;AACF;;;ACvfA,IAAM,4BAA2C,uBAAO,IAAI,kCAAkC;AAEvF,SAAS,qBAAqB,KAAqC;AACxE,SAAO,CAAC,CAAC,MAAM,yBAAyB;AAC1C;AAEA,SAAS,sBAAsB,YAA8C;AAC3E,SAAO,WAAW,OAAO,IAAI,CAAC,UAAU;AACtC,UAAM,OAAO,IAAI,mBAAmB;AAAA,MAClC,IAAI,MAAM;AAAA,MACV,IAAI,MAAM;AAAA,MACV,YAAY,MAAM;AAAA,MAClB,MAAM,MAAM;AAAA,IACd,CAAC;AACD,SAAK,IAAI,MAAM,IAAI;AACnB,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,qBAAN,MAAM,4BAA2B,eAAe;AAAA,EACrD,CAAC,yBAAyB,IAAI;AAAA,EAEtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAA6C,CAAC;AAAA,EAC/C,SAAoC;AAAA,EAE3C,YAAY,SAA0B;AACpC,UAAM,OAAO;AAEb,SAAK,MAAM,QAAQ,KAAK,WAAW,QAAQ,EAAE,IAAI;AACjD,SAAK,MAAM,QAAQ,KAAK,WAAW,QAAQ,EAAE,IAAI;AACjD,SAAK,cAAc,QAAQ,cAAc;AACzC,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEA,IAAW,WAA4C;AACrD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,SAAS,UAA2C;AAC7D,SAAK,YAAY;AACjB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,gBAAsB;AAC3B,SAAK,UAAU;AACf,SAAK,QAAQ,cAAc;AAAA,EAC7B;AAAA,EAEO,IAAI,KAA+C,OAAwB;AAChF,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,UAAU,QAAW;AACvB,aAAK,UAAU,OAAO,OAAO,GAAG,GAAG;AACnC,aAAK,cAAc;AACnB,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,KAAK,UAAU;AACnC,WAAK,UAAU,KAAK,GAAG;AACvB,WAAK,cAAc;AACnB,aAAO;AAAA,IACT;AAEA,QAAI,qBAAqB,GAAG,GAAG;AAC7B,UAAI,UAAU,QAAW;AACvB,aAAK,UAAU,OAAO,OAAO,GAAG,GAAG;AACnC,YAAI,SAAS;AACb,aAAK,cAAc;AACnB,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,KAAK,UAAU;AACnC,WAAK,UAAU,KAAK,GAAG;AACvB,UAAI,SAAS;AACb,WAAK,cAAc;AACnB,aAAO;AAAA,IACT;AAEA,QAAI,aAAa,GAAG,GAAG;AACrB,YAAM,YAAY,sBAAsB,GAAG;AAC3C,UAAI,UAAU,QAAW;AACvB,aAAK,UAAU,OAAO,OAAO,GAAG,GAAG,SAAS;AAC5C,kBAAU,QAAQ,CAAC,SAAU,KAAK,SAAS,IAAK;AAChD,aAAK,cAAc;AACnB,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,KAAK,UAAU;AACnC,WAAK,UAAU,KAAK,GAAG,SAAS;AAChC,gBAAU,QAAQ,CAAC,SAAU,KAAK,SAAS,IAAK;AAChD,WAAK,cAAc;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,IAAI,MAAM,gGAAgG;AAAA,EAClH;AAAA,EAEO,QAAQ,KAAkC,OAAe;AAC9D,SAAK,UAAU,KAAK,IAAI;AACxB,QAAI,OAAO,QAAQ,UAAU;AAC3B,UAAI,SAAS;AAAA,IACf;AACA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,aACL,OACA,YACM;AACN,QAAI,CAAC,cAAc,CAAC,qBAAqB,UAAU,GAAG;AACpD,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAEA,UAAM,cAAc,KAAK,UAAU,QAAQ,UAAU;AACrD,QAAI,gBAAgB,IAAI;AACtB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAEA,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,UAAU,OAAO,aAAa,GAAG,KAAK;AAAA,IAC7C,WAAW,qBAAqB,KAAK,GAAG;AACtC,WAAK,UAAU,OAAO,aAAa,GAAG,KAAK;AAC3C,YAAM,SAAS;AAAA,IACjB,WAAW,iBAAiB,YAAY;AACtC,YAAM,YAAY,sBAAsB,KAAK;AAC7C,WAAK,UAAU,OAAO,aAAa,GAAG,GAAG,SAAS;AAClD,gBAAU,QAAQ,CAAC,SAAU,KAAK,SAAS,IAAK;AAAA,IAClD,OAAO;AACL,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAEA,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,IAAkB;AAC9B,UAAM,aAAa,KAAK,mBAAmB,EAAE;AAC7C,QAAI,eAAe,IAAI;AACrB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,UAAM,QAAQ,KAAK,UAAU,UAAU;AAEvC,SAAK,UAAU,OAAO,YAAY,CAAC;AACnC,UAAM,SAAS;AACf,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEO,QAAc;AACnB,SAAK,YAAY,CAAC;AAClB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,YAAY,aAKjB;AACA,WAAO;AAAA,MACL,IAAI,KAAK,OAAO,YAAY;AAAA,MAC5B,IAAI,KAAK,OAAO,YAAY;AAAA,MAC5B,YAAY,KAAK,cAAc,YAAY;AAAA,MAC3C,MAAM,KAAK,SAAS,YAAY;AAAA,IAClC;AAAA,EACF;AAAA,EAEO,yBACL,cAAoF;AAAA,IAClF,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,YAAY;AAAA,EACd,GACa;AACb,UAAM,eAAe,KAAK,YAAY,WAAW;AAEjD,UAAM,SAAsB,CAAC;AAE7B,eAAW,SAAS,KAAK,WAAW;AAClC,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,KAAK;AAAA,UACV,WAAW;AAAA,UACX,MAAM;AAAA,UACN,IAAI,aAAa;AAAA,UACjB,IAAI,aAAa;AAAA,UACjB,YAAY,aAAa;AAAA,UACzB,MAAM,aAAa;AAAA,QACrB,CAAC;AAAA,MACH,OAAO;AACL,cAAM,cAAc,MAAM,yBAAyB,YAAY;AAC/D,eAAO,KAAK,GAAG,WAAW;AAAA,MAC5B;AAAA,IACF;AAEA,SAAK,UAAU;AAEf,WAAO;AAAA,EACT;AAAA,EAEA,OAAc,WAAW,MAAc,UAAoC,CAAC,GAAuB;AACjG,UAAM,OAAO,IAAI,oBAAmB,OAAO;AAC3C,SAAK,IAAI,IAAI;AACb,WAAO;AAAA,EACT;AAAA,EAEA,OAAc,UAAU,OAA6B,UAAoC,CAAC,GAAuB;AAC/G,UAAM,OAAO,IAAI,oBAAmB,OAAO;AAC3C,eAAW,aAAa,OAAO;AAC7B,WAAK,IAAI,SAAS;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAAA,EAEO,SACL,cAAoF;AAAA,IAClF,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,YAAY;AAAA,EACd,GACa;AACb,WAAO,KAAK,yBAAyB,WAAW;AAAA,EAClD;AAAA,EAEO,cAAgC;AACrC,WAAO,KAAK,UAAU,OAAO,CAAC,UAAuC,OAAO,UAAU,QAAQ;AAAA,EAChG;AAAA,EAEO,mBAA2B;AAChC,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEO,cAAc,IAAwC;AAC3D,WAAO,KAAK,UAAU,KAAK,CAAC,UAAuC,OAAO,UAAU,YAAY,MAAM,OAAO,EAAE;AAAA,EACjH;AAAA,EAEO,mBAAmB,IAAoB;AAC5C,WAAO,KAAK,UAAU,UAAU,CAAC,UAAU,qBAAqB,KAAK,KAAK,MAAM,OAAO,EAAE;AAAA,EAC3F;AAAA,EAEA,IAAW,KAAuB;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,GAAGC,KAA+B;AAC3C,QAAI,CAACA,KAAI;AACP,WAAK,MAAM;AACX,WAAK,cAAc;AACnB;AAAA,IACF;AACA,SAAK,MAAM,WAAWA,GAAE;AACxB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,GAAGC,KAA+B;AAC3C,QAAI,CAACA,KAAI;AACP,WAAK,MAAM;AACX,WAAK,cAAc;AACnB;AAAA,IACF;AACA,SAAK,MAAM,WAAWA,GAAE;AACxB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,KAAuB;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,WAAW,YAAoB;AACxC,SAAK,cAAc;AACnB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,aAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,KAAK,MAAmC;AACjD,SAAK,QAAQ;AACb,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAW,OAAoC;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,mBAAmB,IAAwC;AAChE,WAAO;AAAA,EACT;AACF;;;ACjTO,SAAS,QAAQ,KAAU,UAAwB;AACxD,MAAI;AACF,WAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,EACpC,QAAQ;AACN,WAAO,OAAO,GAAG;AAAA,EACnB;AACF;AAEO,SAAS,OAAO,QAAgB,MAAqB;AAC1D,MAAI,IAAI;AACR,SAAO,IAAI,QAAQ,gBAAgB,CAAC,UAAU;AAC5C,QAAI,UAAU,KAAM,QAAO;AAC3B,QAAI,KAAK,KAAK,OAAQ,QAAO;AAC7B,WAAO,OAAO,KAAK,GAAG,CAAC;AAAA,EACzB,CAAC;AACH;AAEO,SAAS,UAAU,IAAwB;AAChD,SAAO,IAAI,SACT,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,OAAG,GAAG,MAAM,CAAC,KAAU,WAAgB;AACrC,UAAI,IAAK,QAAO,GAAG;AAAA,UACd,SAAQ,MAAM;AAAA,IACrB,CAAC;AAAA,EACH,CAAC;AACL;AAEO,SAAS,kBAAkB,GAAQC,IAAiB;AACzD,SAAO,KAAK,UAAU,CAAC,MAAM,KAAK,UAAUA,EAAC;AAC/C;AAEA,IAAO,oBAAQ,EAAE,SAAS,QAAQ,WAAW,kBAAkB;;;ACnB/D,IAAM,eAA8B,uBAAO,IAAI,qBAAqB;AA8BpE,SAAS,wBACP,OACmC;AACnC,SAAO,OAAO,UAAU,cAAc,MAAM,aAAa,CAAC,CAAC,MAAM,UAAU,iBAAiB;AAC9F;AAEA,SAAS,gBAAgB,UAA8B;AACrD,QAAM,SAAmB,CAAC;AAC1B,aAAW,SAAS,UAAU;AAC5B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,KAAK,GAAG,gBAAgB,KAAK,CAAC;AAAA,IACvC,WAAW,UAAU,QAAQ,UAAU,UAAa,UAAU,OAAO;AACnE,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAyEO,SAAS,QAAQ,MAA0B;AAChD,SAAO,QAAQ,KAAK,YAAY;AAClC;AAEO,SAASC,qBACd,KACA,MACmB;AACnB,MAAIC,cAAa,IAAI,EAAG,QAAO;AAC/B,MAAI,QAAQ,IAAI,EAAG,QAAO,YAAY,KAAK,IAAI;AAC/C,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,YAAQ,KAAK,gDAAgD,kBAAK,QAAQ,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAAA,EAC/F;AACA,SAAO;AACT;AAGA,4BAA4BD,oBAAmB;AAExC,SAAS,kBACd,UACA,aACG;AACH,MAAI,CAAC,eAAe,OAAO,KAAK,WAAW,EAAE,WAAW,EAAG,QAAO;AAElE,QAAM,kBAAkB,oBAAI,IAAoC;AAEhE,QAAM,gBAAgB,CAAC,OAAuC;AAC5D,QAAI,gBAAgB,IAAI,EAAE,GAAG;AAC3B,YAAM,SAAS,gBAAgB,IAAI,EAAE;AACrC,UAAI,WAAW,QAAW;AACxB,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,aAAc,SAAwB,mBAAmB,EAAE;AACjE,QAAI,YAAY;AACd,sBAAgB,IAAI,IAAI,UAAU;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,MAAM,UAAiB;AAAA,IACvC,IAAI,QAAQ,MAAM,UAAU;AAC1B,UAAI,OAAO,SAAS,YAAY,YAAY,IAAI,GAAG;AACjD,cAAM,OAAO,cAAc,YAAY,IAAI,CAAC;AAC5C,YAAI,MAAM;AACR,gBAAM,QAAS,KAAa,IAAI;AAChC,cAAI,OAAO,UAAU,YAAY;AAC/B,mBAAO,MAAM,KAAK,IAAI;AAAA,UACxB;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,IAC3C;AAAA,IACA,IAAI,QAAQ,MAAM,OAAO,UAAU;AACjC,UAAI,OAAO,SAAS,YAAY,YAAY,IAAI,GAAG;AACjD,cAAM,OAAO,cAAc,YAAY,IAAI,CAAC;AAC5C,YAAI,MAAM;AACR,iBAAO,QAAQ,IAAI,MAAa,MAAM,KAAK;AAAA,QAC7C;AAAA,MACF;AACA,aAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AAAA,IAClD;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAIO,SAAS,YACd,KACA,MACyB;AACzB,MAAIC,cAAa,IAAI,EAAG,QAAO;AAE/B,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,UAAM,IAAI,UAAU,mCAAmC;AAAA,EACzD;AAEA,QAAM,QAAQ;AACd,QAAM,EAAE,MAAM,MAAM,IAAI;AACxB,QAAM,WAAW,gBAAgB,MAAM,YAAY,CAAC,CAAC;AACrD,QAAM,cAAe,MAAc;AAEnC,MAAI,wBAAwB,IAAI,GAAG;AACjC,UAAM,WAAW,IAAI,KAAK,KAAM,SAAS,CAAC,CAAS;AAEnD,eAAW,SAAS,UAAU;AAC5B,UAAIA,cAAa,KAAK,GAAG;AACvB,iBAAS,IAAI,KAAK;AAAA,MACpB,OAAO;AACL,cAAM,UAAU,YAAY,KAAK,KAAiB;AAClD,iBAAS,IAAI,OAAO;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,oBAAoB,kBAAkB,UAAU,WAAW;AAEjE,UAAM,eAAgB,MAAc;AACpC,QAAI,cAAc;AAChB,iBAAW,QAAQ,cAAc;AAC/B,YAAI,KAAK,YAAY;AACnB;AAAC,UAAC,kBAA0B,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC;AAAA,QACxD,OAAO;AACL;AAAC,UAAC,kBAA0B,KAAK,MAAM,EAAE,MAAM,mBAAmB,KAAK,IAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,WAAY,KAA6B,SAAU,CAAC,GAAW,QAAQ;AAC7E,QAAM,OAAO,YAAY,KAAK,QAAQ;AAEtC,SAAO,kBAAkB,MAAM,WAAW;AAC5C;;;ACrPO,SAASC,IAA4G;AAC1H,SAAO,EACL,OAAO,OACP,QAAQ,OACR,YAAY,MACZ,KAAK,MACL,OAAO,MACP,UAAU,OACV,UAAU,MACV,QAAQ,OACR,WAAW,MACX,YAAY,KACd;AACF;AAEO,IAAIC,IAAqCD,EAAa;AAEtD,SAASE,EAA+DC,IAA0D;AACvIF,MAAYE;AACd;ACxBA,IAAMC,IAAW,EAAE,MAAM,MAAM,KAAK;AAEpC,SAASC,EAAKC,IAAwBC,IAAM,IAAI;AAC9C,MAAIC,KAAS,OAAOF,MAAU,WAAWA,KAAQA,GAAM,QACjDG,IAAM,EACV,SAAS,CAACC,GAAuBC,MAAyB;AACxD,QAAIC,IAAY,OAAOD,KAAQ,WAAWA,IAAMA,EAAI;AACpD,WAAAC,IAAYA,EAAU,QAAQC,EAAM,OAAO,IAAI,GAC/CL,KAASA,GAAO,QAAQE,GAAME,CAAS,GAChCH;EACT,GACA,UAAU,MACD,IAAI,OAAOD,IAAQD,CAAG,EAEjC;AACA,SAAOE;AACT;AAEA,IAAMK,MAAsB,MAAM;AAClC,MAAI;AAEF,WAAO,CAAC,CAAC,IAAI,OAAO,cAAc;EACpC,QAAQ;AAGN,WAAO;EACT;AACA,GAAG;AATH,IAWaD,IAAQ,EACnB,kBAAkB,0BAClB,mBAAmB,eACnB,wBAAwB,iBACxB,gBAAgB,QAChB,YAAY,MACZ,mBAAmB,MACnB,iBAAiB,MACjB,cAAc,QACd,mBAAmB,OACnB,eAAe,OACf,qBAAqB,QACrB,WAAW,YACX,iBAAiB,qBACjB,iBAAiB,YACjB,yBAAyB,kCACzB,0BAA0B,oBAC1B,iBAAiB,QACjB,oBAAoB,2BACpB,YAAY,kBACZ,iBAAiB,gBACjB,kBAAkB,aAClB,SAAS,UACT,cAAc,YACd,gBAAgB,QAChB,iBAAiB,cACjB,mBAAmB,aACnB,iBAAiB,aACjB,kBAAkB,cAClB,gBAAgB,aAChB,WAAW,SACX,SAAS,WACT,mBAAmB,kCACnB,iBAAiB,oCACjB,mBAAmB,MACnB,iBAAiB,MACjB,mBAAmB,iCACnB,qBAAqB,iBACrB,YAAY,WACZ,eAAe,YACf,oBAAoB,qDACpB,uBAAuB,sDACvB,cAAc,8CACd,OAAO,gBACP,eAAe,QACf,UAAU,OACV,WAAW,OACX,WAAW,SACX,gBAAgB,YAChB,WAAW,UACX,eAAe,QACf,eAAe,OACf,eAAgBE,CAAAA,OAAiB,IAAI,OAAO,WAAWA,EAAI,8BAA+B,GAC1F,iBAAkBC,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,oDAAqD,GACpI,SAAUA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,oDAAoD,GAC3H,kBAAmBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,iBAAiB,GACjG,mBAAoBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,IAAI,GACrF,gBAAiBA,CAAAA,OAAmB,IAAI,OAAO,QAAQ,KAAK,IAAI,GAAGA,KAAS,CAAC,CAAC,sBAAsB,GAAG,EACzG;AArEA,IA2EMC,KAAU;AA3EhB,IA4EMC,KAAY;AA5ElB,IA6EMC,KAAS;AA7Ef,IA8EMC,IAAK;AA9EX,IA+EMC,KAAU;AA/EhB,IAgFMC,IAAS;AAhFf,IAiFMC,KAAe;AAjFrB,IAkFMC,KAAWnB,EAAKkB,EAAY,EAC/B,QAAQ,SAASD,CAAM,EACvB,QAAQ,cAAc,mBAAmB,EACzC,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,eAAe,SAAS,EAChC,QAAQ,YAAY,cAAc,EAClC,QAAQ,SAAS,mBAAmB,EACpC,QAAQ,YAAY,EAAE,EACtB,SAAS;AA1FZ,IA2FMG,KAAcpB,EAAKkB,EAAY,EAClC,QAAQ,SAASD,CAAM,EACvB,QAAQ,cAAc,mBAAmB,EACzC,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,eAAe,SAAS,EAChC,QAAQ,YAAY,cAAc,EAClC,QAAQ,SAAS,mBAAmB,EACpC,QAAQ,UAAU,mCAAmC,EACrD,SAAS;AAnGZ,IAoGMI,IAAa;AApGnB,IAqGMC,KAAY;AArGlB,IAsGMC,IAAc;AAtGpB,IAuGMC,KAAMxB,EAAK,6GAA6G,EAC3H,QAAQ,SAASuB,CAAW,EAC5B,QAAQ,SAAS,8DAA8D,EAC/E,SAAS;AA1GZ,IA4GME,KAAOzB,EAAK,sCAAsC,EACrD,QAAQ,SAASiB,CAAM,EACvB,SAAS;AA9GZ,IAgHMS,IAAO;AAhHb,IAsHMC,IAAW;AAtHjB,IAuHMC,KAAO5B,EACX,6dASK,GAAG,EACP,QAAQ,WAAW2B,CAAQ,EAC3B,QAAQ,OAAOD,CAAI,EACnB,QAAQ,aAAa,0EAA0E,EAC/F,SAAS;AArIZ,IAuIMG,KAAY7B,EAAKqB,CAAU,EAC9B,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,aAAa,EAAE,EACvB,QAAQ,UAAU,EAAE,EACpB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,wBAAwB,EACxC,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAOW,CAAI,EACnB,SAAS;AAjJZ,IAmJMI,KAAa9B,EAAK,yCAAyC,EAC9D,QAAQ,aAAa6B,EAAS,EAC9B,SAAS;AArJZ,IA2JME,IAAc,EAClB,YAAAD,IACA,MAAMjB,IACN,KAAAW,IACA,QAAAV,IACA,SAAAE,IACA,IAAAD,GACA,MAAAa,IACA,UAAAT,IACA,MAAAM,IACA,SAAAb,IACA,WAAAiB,IACA,OAAO9B,GACP,MAAMuB,GACR;AAzKA,IAiLMU,KAAWhC,EACf,6JAEsF,EACrF,QAAQ,MAAMe,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,cAAc,SAAS,EAC/B,QAAQ,QAAQ,wBAAyB,EACzC,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,wBAAwB,EACxC,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAOW,CAAI,EACnB,SAAS;AA7LZ,IA+LMO,KAAsC,EAC1C,GAAGF,GACH,UAAUX,IACV,OAAOY,IACP,WAAWhC,EAAKqB,CAAU,EACvB,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW,uBAAuB,EAC1C,QAAQ,aAAa,EAAE,EACvB,QAAQ,SAASiB,EAAQ,EACzB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,UAAU,gDAAgD,EAClE,QAAQ,QAAQ,wBAAwB,EACxC,QAAQ,QAAQ,6DAA6D,EAC7E,QAAQ,OAAON,CAAI,EACnB,SAAS,EACd;AA9MA,IAoNMQ,KAA2C,EAC/C,GAAGH,GACH,MAAM/B,EACJ,wIAEwE,EACvE,QAAQ,WAAW2B,CAAQ,EAC3B,QAAQ,QAAQ,mKAGkB,EAClC,SAAS,GACZ,KAAK,qEACL,SAAS,0BACT,QAAQ5B,GACR,UAAU,oCACV,WAAWC,EAAKqB,CAAU,EACvB,QAAQ,MAAMN,CAAE,EAChB,QAAQ,WAAW;EAAiB,EACpC,QAAQ,YAAYI,EAAQ,EAC5B,QAAQ,UAAU,EAAE,EACpB,QAAQ,cAAc,SAAS,EAC/B,QAAQ,WAAW,EAAE,EACrB,QAAQ,SAAS,EAAE,EACnB,QAAQ,SAAS,EAAE,EACnB,QAAQ,QAAQ,EAAE,EAClB,SAAS,EACd;AA/OA,IAqPMgB,KAAS;AArPf,IAsPMC,KAAa;AAtPnB,IAuPMC,KAAK;AAvPX,IAwPMC,KAAa;AAxPnB,IA2PMC,IAAe;AA3PrB,IA4PMC,IAAsB;AA5P5B,IA6PMC,KAAyB;AA7P/B,IA8PMC,KAAc1C,EAAK,yBAAyB,GAAG,EAClD,QAAQ,eAAewC,CAAmB,EAAE,SAAS;AA/PxD,IAkQMG,KAA0B;AAlQhC,IAmQMC,KAAiC;AAnQvC,IAoQMC,KAAoC;AApQ1C,IAuQMC,KAAY9C,EAAK,0BAA0B,GAAG,EACjD,QAAQ,QAAQ,mGAAmG,EACnH,QAAQ,YAAYS,KAAqB,aAAa,WAAW,EACjE,QAAQ,QAAQ,yBAAyB,EACzC,QAAQ,QAAQ,gBAAgB,EAChC,SAAS;AA5QZ,IA8QMsC,KAAqB;AA9Q3B,IAgRMC,KAAiBhD,EAAK+C,IAAoB,GAAG,EAChD,QAAQ,UAAUR,CAAY,EAC9B,SAAS;AAlRZ,IAoRMU,KAAoBjD,EAAK+C,IAAoB,GAAG,EACnD,QAAQ,UAAUJ,EAAuB,EACzC,SAAS;AAtRZ,IAwRMO,KACJ;AAzRF,IAkSMC,KAAoBnD,EAAKkD,IAAuB,IAAI,EACvD,QAAQ,kBAAkBT,EAAsB,EAChD,QAAQ,eAAeD,CAAmB,EAC1C,QAAQ,UAAUD,CAAY,EAC9B,SAAS;AAtSZ,IAwSMa,KAAuBpD,EAAKkD,IAAuB,IAAI,EAC1D,QAAQ,kBAAkBL,EAAiC,EAC3D,QAAQ,eAAeD,EAA8B,EACrD,QAAQ,UAAUD,EAAuB,EACzC,SAAS;AA5SZ,IA+SMU,KAAoBrD,EACxB,oNAMiC,IAAI,EACpC,QAAQ,kBAAkByC,EAAsB,EAChD,QAAQ,eAAeD,CAAmB,EAC1C,QAAQ,UAAUD,CAAY,EAC9B,SAAS;AA1TZ,IA4TMe,KAAiBtD,EAAK,aAAa,IAAI,EAC1C,QAAQ,UAAUuC,CAAY,EAC9B,SAAS;AA9TZ,IAgUMgB,KAAWvD,EAAK,qCAAqC,EACxD,QAAQ,UAAU,8BAA8B,EAChD,QAAQ,SAAS,8IAA8I,EAC/J,SAAS;AAnUZ,IAqUMwD,KAAiBxD,EAAK2B,CAAQ,EAAE,QAAQ,aAAa,KAAK,EAAE,SAAS;AArU3E,IAsUM8B,KAAMzD,EACV,0JAKsC,EACrC,QAAQ,WAAWwD,EAAc,EACjC,QAAQ,aAAa,6EAA6E,EAClG,SAAS;AA/UZ,IAiVME,IAAe;AAjVrB,IAmVMC,KAAO3D,EAAK,mEAAmE,EAClF,QAAQ,SAAS0D,CAAY,EAC7B,QAAQ,QAAQ,yCAAyC,EACzD,QAAQ,SAAS,6DAA6D,EAC9E,SAAS;AAvVZ,IAyVME,KAAU5D,EAAK,yBAAyB,EAC3C,QAAQ,SAAS0D,CAAY,EAC7B,QAAQ,OAAOnC,CAAW,EAC1B,SAAS;AA5VZ,IA8VMsC,KAAS7D,EAAK,uBAAuB,EACxC,QAAQ,OAAOuB,CAAW,EAC1B,SAAS;AAhWZ,IAkWMuC,KAAgB9D,EAAK,yBAAyB,GAAG,EACpD,QAAQ,WAAW4D,EAAO,EAC1B,QAAQ,UAAUC,EAAM,EACxB,SAAS;AArWZ,IAuWME,KAA2B;AAvWjC,IA6WMC,IAAe,EACnB,YAAYjE,GACZ,gBAAAuD,IACA,UAAAC,IACA,WAAAT,IACA,IAAAT,IACA,MAAMD,IACN,KAAKrC,GACL,gBAAAiD,IACA,mBAAAG,IACA,mBAAAE,IACA,QAAAlB,IACA,MAAAwB,IACA,QAAAE,IACA,aAAAnB,IACA,SAAAkB,IACA,eAAAE,IACA,KAAAL,IACA,MAAMnB,IACN,KAAKvC,EACP;AAjYA,IAyYMkE,KAA6C,EACjD,GAAGD,GACH,MAAMhE,EAAK,yBAAyB,EACjC,QAAQ,SAAS0D,CAAY,EAC7B,SAAS,GACZ,SAAS1D,EAAK,+BAA+B,EAC1C,QAAQ,SAAS0D,CAAY,EAC7B,SAAS,EACd;AAjZA,IAuZMQ,IAAwC,EAC5C,GAAGF,GACH,mBAAmBZ,IACnB,gBAAgBH,IAChB,KAAKjD,EAAK,gEAAgE,EACvE,QAAQ,YAAY+D,EAAwB,EAC5C,QAAQ,SAAS,2EAA2E,EAC5F,SAAS,GACZ,YAAY,8EACZ,KAAK,2EACL,MAAM/D,EAAK,qNAAqN,EAC7N,QAAQ,YAAY+D,EAAwB,EAC5C,SAAS,EACd;AApaA,IA0aMI,KAA2C,EAC/C,GAAGD,GACH,IAAIlE,EAAKqC,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,SAAS,GAC3C,MAAMrC,EAAKkE,EAAU,IAAI,EACtB,QAAQ,QAAQ,eAAe,EAC/B,QAAQ,WAAW,GAAG,EACtB,SAAS,EACd;AAjbA,IAubaE,IAAQ,EACnB,QAAQrC,GACR,KAAKE,IACL,UAAUC,GACZ;AA3bA,IA6bamC,IAAS,EACpB,QAAQL,GACR,KAAKE,GACL,QAAQC,IACR,UAAUF,GACZ;AC/cA,IAAMK,KAAkD,EACtD,KAAK,SACL,KAAK,QACL,KAAK,QACL,KAAK,UACL,KAAK,QACP;AANA,IAOMC,KAAwBC,CAAAA,OAAeF,GAAmBE,EAAE;AAE3D,SAASrC,EAAOP,IAAc6C,GAAkB;AACrD,MAAIA,GAAAA;AACF,QAAIjE,EAAM,WAAW,KAAKoB,EAAI,EAC5B,QAAOA,GAAK,QAAQpB,EAAM,eAAe+D,EAAoB;EAAA,WAG3D/D,EAAM,mBAAmB,KAAKoB,EAAI,EACpC,QAAOA,GAAK,QAAQpB,EAAM,uBAAuB+D,EAAoB;AAIzE,SAAO3C;AACT;AAgBO,SAAS8C,EAASC,IAAc;AACrC,MAAI;AACFA,IAAAA,KAAO,UAAUA,EAAI,EAAE,QAAQnE,EAAM,eAAe,GAAG;EACzD,QAAQ;AACN,WAAO;EACT;AACA,SAAOmE;AACT;AAEO,SAASC,EAAWC,IAAkBC,GAAgB;AAG3D,MAAMC,KAAMF,GAAS,QAAQrE,EAAM,UAAU,CAACwE,GAAOC,GAAQC,MAAQ;AACjE,QAAIC,IAAU,OACVC,IAAOH;AACX,WAAO,EAAEG,KAAQ,KAAKF,EAAIE,CAAI,MAAM,OAAMD,KAAU,CAACA;AACrD,WAAIA,IAGK,MAGA;EAEX,CAAC,GACDE,IAAQN,GAAI,MAAMvE,EAAM,SAAS,GAC/B8E,IAAI;AAUR,MAPKD,EAAM,CAAC,EAAE,KAAK,KACjBA,EAAM,MAAM,GAEVA,EAAM,SAAS,KAAK,CAACA,EAAM,GAAG,EAAE,GAAG,KAAK,KAC1CA,EAAM,IAAI,GAGRP,EACF,KAAIO,EAAM,SAASP,EACjBO,GAAM,OAAOP,CAAK;MAElB,QAAOO,EAAM,SAASP,IAAOO,GAAM,KAAK,EAAE;AAI9C,SAAOC,IAAID,EAAM,QAAQC,IAEvBD,GAAMC,CAAC,IAAID,EAAMC,CAAC,EAAE,KAAK,EAAE,QAAQ9E,EAAM,WAAW,GAAG;AAEzD,SAAO6E;AACT;AAUO,SAASE,EAAML,IAAaM,GAAWC,IAAkB;AAC9D,MAAMC,IAAIR,GAAI;AACd,MAAIQ,MAAM,EACR,QAAO;AAIT,MAAIC,IAAU;AAGd,SAAOA,IAAUD,KAAG;AAClB,QAAME,IAAWV,GAAI,OAAOQ,IAAIC,IAAU,CAAC;AAC3C,QAAIC,MAAaJ,KAAK,CAACC,GACrBE;aACSC,MAAaJ,KAAKC,GAC3BE;QAEA;EAEJ;AAEA,SAAOT,GAAI,MAAM,GAAGQ,IAAIC,CAAO;AACjC;AAEO,SAASE,GAAmBX,IAAaY,GAAW;AACzD,MAAIZ,GAAI,QAAQY,EAAE,CAAC,CAAC,MAAM,GACxB,QAAO;AAGT,MAAIC,KAAQ;AACZ,WAAST,IAAI,GAAGA,IAAIJ,GAAI,QAAQI,IAC9B,KAAIJ,GAAII,CAAC,MAAM,KACbA;WACSJ,GAAII,CAAC,MAAMQ,EAAE,CAAC,EACvBC,CAAAA;WACSb,GAAII,CAAC,MAAMQ,EAAE,CAAC,MACvBC,MACIA,KAAQ,GACV,QAAOT;AAIb,SAAIS,KAAQ,IACH,KAGF;AACT;ACzIA,SAASC,GAAWC,IAAetC,GAA2CuC,IAAaC,GAAeC,GAA0C;AAClJ,MAAMzB,IAAOhB,EAAK,MACZ0C,IAAQ1C,EAAK,SAAS,MACtB2C,IAAOL,GAAI,CAAC,EAAE,QAAQG,EAAM,MAAM,mBAAmB,IAAI;AAE/DD,IAAM,MAAM,SAAS;AACrB,MAAMI,IAAoC,EACxC,MAAMN,GAAI,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,UAAU,QAC3C,KAAAC,IACA,MAAAvB,GACA,OAAA0B,GACA,MAAAC,GACA,QAAQH,EAAM,aAAaG,CAAI,EACjC;AACA,SAAAH,EAAM,MAAM,SAAS,OACdI;AACT;AAEA,SAASC,GAAuBN,IAAaI,GAAcF,IAAc;AACvE,MAAMK,IAAoBP,GAAI,MAAME,GAAM,MAAM,sBAAsB;AAEtE,MAAIK,MAAsB,KACxB,QAAOH;AAGT,MAAMI,IAAeD,EAAkB,CAAC;AAExC,SAAOH,EACJ,MAAM;CAAI,EACV,IAAIK,OAAQ;AACX,QAAMC,IAAoBD,EAAK,MAAMP,GAAM,MAAM,cAAc;AAC/D,QAAIQ,MAAsB,KACxB,QAAOD;AAGT,QAAM,CAACE,CAAY,IAAID;AAEvB,WAAIC,EAAa,UAAUH,EAAa,SAC/BC,EAAK,MAAMD,EAAa,MAAM,IAGhCC;EACT,CAAC,EACA,KAAK;CAAI;AACd;AAKO,IAAMG,IAAN,MAAiE;EACtE;EACA;EACA;EAEA,YAAYC,GAAuD;AACjE,SAAK,UAAUA,KAAWnH;EAC5B;EAEA,MAAMoH,GAAuC;AAC3C,QAAMf,KAAM,KAAK,MAAM,MAAM,QAAQ,KAAKe,CAAG;AAC7C,QAAIf,MAAOA,GAAI,CAAC,EAAE,SAAS,EACzB,QAAO,EACL,MAAM,SACN,KAAKA,GAAI,CAAC,EACZ;EAEJ;EAEA,KAAKe,GAAsC;AACzC,QAAMf,KAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,IAAK;AACP,UAAMK,IAAOL,GAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,kBAAkB,EAAE;AACjE,aAAO,EACL,MAAM,QACN,KAAKA,GAAI,CAAC,GACV,gBAAgB,YAChB,MAAO,KAAK,QAAQ,WAEhBK,IADAf,EAAMe,GAAM;CAAI,EAEtB;IACF;EACF;EAEA,OAAOU,GAAsC;AAC3C,QAAMf,KAAM,KAAK,MAAM,MAAM,OAAO,KAAKe,CAAG;AAC5C,QAAIf,IAAK;AACP,UAAMC,IAAMD,GAAI,CAAC,GACXK,IAAOE,GAAuBN,GAAKD,GAAI,CAAC,KAAK,IAAI,KAAK,KAAK;AAEjE,aAAO,EACL,MAAM,QACN,KAAAC,GACA,MAAMD,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAIA,GAAI,CAAC,GACpF,MAAAK,EACF;IACF;EACF;EAEA,QAAQU,GAAyC;AAC/C,QAAMf,KAAM,KAAK,MAAM,MAAM,QAAQ,KAAKe,CAAG;AAC7C,QAAIf,IAAK;AACP,UAAIK,IAAOL,GAAI,CAAC,EAAE,KAAK;AAGvB,UAAI,KAAK,MAAM,MAAM,WAAW,KAAKK,CAAI,GAAG;AAC1C,YAAMW,IAAU1B,EAAMe,GAAM,GAAG;AAAA,SAC3B,KAAK,QAAQ,YAEN,CAACW,KAAW,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAO,OAElEX,IAAOW,EAAQ,KAAK;MAExB;AAEA,aAAO,EACL,MAAM,WACN,KAAKhB,GAAI,CAAC,GACV,OAAOA,GAAI,CAAC,EAAE,QACd,MAAAK,GACA,QAAQ,KAAK,MAAM,OAAOA,CAAI,EAChC;IACF;EACF;EAEA,GAAGU,GAAoC;AACrC,QAAMf,KAAM,KAAK,MAAM,MAAM,GAAG,KAAKe,CAAG;AACxC,QAAIf,GACF,QAAO,EACL,MAAM,MACN,KAAKV,EAAMU,GAAI,CAAC,GAAG;CAAI,EACzB;EAEJ;EAEA,WAAWe,GAA4C;AACrD,QAAMf,KAAM,KAAK,MAAM,MAAM,WAAW,KAAKe,CAAG;AAChD,QAAIf,IAAK;AACP,UAAIiB,IAAQ3B,EAAMU,GAAI,CAAC,GAAG;CAAI,EAAE,MAAM;CAAI,GACtCC,IAAM,IACNI,IAAO,IACLa,IAAkB,CAAC;AAEzB,aAAOD,EAAM,SAAS,KAAG;AACvB,YAAIE,IAAe,OACbC,IAAe,CAAC,GAElB/B;AACJ,aAAKA,IAAI,GAAGA,IAAI4B,EAAM,QAAQ5B,IAE5B,KAAI,KAAK,MAAM,MAAM,gBAAgB,KAAK4B,EAAM5B,CAAC,CAAC,EAChD+B,GAAa,KAAKH,EAAM5B,CAAC,CAAC,GAC1B8B,IAAe;iBACN,CAACA,EACVC,GAAa,KAAKH,EAAM5B,CAAC,CAAC;YAE1B;AAGJ4B,YAAQA,EAAM,MAAM5B,CAAC;AAErB,YAAMgC,IAAaD,EAAa,KAAK;CAAI,GACnCE,IAAcD,EAEjB,QAAQ,KAAK,MAAM,MAAM,yBAAyB;OAAU,EAC5D,QAAQ,KAAK,MAAM,MAAM,0BAA0B,EAAE;AACxDpB,YAAMA,IAAM,GAAGA,CAAG;EAAKoB,CAAU,KAAKA,GACtChB,IAAOA,IAAO,GAAGA,CAAI;EAAKiB,CAAW,KAAKA;AAI1C,YAAMC,IAAM,KAAK,MAAM,MAAM;AAM7B,YALA,KAAK,MAAM,MAAM,MAAM,MACvB,KAAK,MAAM,YAAYD,GAAaJ,GAAQ,IAAI,GAChD,KAAK,MAAM,MAAM,MAAMK,GAGnBN,EAAM,WAAW,EACnB;AAGF,YAAMO,KAAYN,EAAO,GAAG,EAAE;AAE9B,YAAIM,IAAW,SAAS,OAEtB;AACK,YAAIA,IAAW,SAAS,cAAc;AAE3C,cAAMC,IAAWD,IACXE,IAAUD,EAAS,MAAM;IAAOR,EAAM,KAAK;CAAI,GAC/CU,IAAW,KAAK,WAAWD,CAAO;AACxCR,YAAOA,EAAO,SAAS,CAAC,IAAIS,GAE5B1B,IAAMA,EAAI,UAAU,GAAGA,EAAI,SAASwB,EAAS,IAAI,MAAM,IAAIE,EAAS,KACpEtB,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAASoB,EAAS,KAAK,MAAM,IAAIE,EAAS;AACxE;QACF,WAAWH,IAAW,SAAS,QAAQ;AAErC,cAAMC,IAAWD,IACXE,IAAUD,EAAS,MAAM;IAAOR,EAAM,KAAK;CAAI,GAC/CU,IAAW,KAAK,KAAKD,CAAO;AAClCR,YAAOA,EAAO,SAAS,CAAC,IAAIS,GAE5B1B,IAAMA,EAAI,UAAU,GAAGA,EAAI,SAASuB,GAAU,IAAI,MAAM,IAAIG,EAAS,KACrEtB,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAASoB,EAAS,IAAI,MAAM,IAAIE,EAAS,KACvEV,IAAQS,EAAQ,UAAUR,EAAO,GAAG,EAAE,EAAG,IAAI,MAAM,EAAE,MAAM;CAAI;AAC/D;QACF;MACF;AAEA,aAAO,EACL,MAAM,cACN,KAAAjB,GACA,QAAAiB,GACA,MAAAb,EACF;IACF;EACF;EAEA,KAAKU,GAAsC;AACzC,QAAIf,KAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AACxC,QAAIf,IAAK;AACP,UAAIvF,IAAOuF,GAAI,CAAC,EAAE,KAAK,GACjB4B,IAAYnH,EAAK,SAAS,GAE1Be,IAAoB,EACxB,MAAM,QACN,KAAK,IACL,SAASoG,GACT,OAAOA,IAAY,CAACnH,EAAK,MAAM,GAAG,EAAE,IAAI,IACxC,OAAO,OACP,OAAO,CAAC,EACV;AAEAA,UAAOmH,IAAY,aAAanH,EAAK,MAAM,EAAE,CAAC,KAAK,KAAKA,CAAI,IAExD,KAAK,QAAQ,aACfA,IAAOmH,IAAYnH,IAAO;AAI5B,UAAMoH,IAAY,KAAK,MAAM,MAAM,cAAcpH,CAAI,GACjDqH,IAAoB;AAExB,aAAOf,KAAK;AACV,YAAIgB,IAAW,OACX9B,IAAM,IACN+B,IAAe;AAKnB,YAJI,EAAEhC,KAAM6B,EAAU,KAAKd,CAAG,MAI1B,KAAK,MAAM,MAAM,GAAG,KAAKA,CAAG,EAC9B;AAGFd,YAAMD,GAAI,CAAC,GACXe,IAAMA,EAAI,UAAUd,EAAI,MAAM;AAE9B,YAAIgC,IAAOjC,GAAI,CAAC,EAAE,MAAM;GAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAkBkC,OAAc,IAAI,OAAO,IAAIA,EAAE,MAAM,CAAC,GACjHC,KAAWpB,EAAI,MAAM;GAAM,CAAC,EAAE,CAAC,GAC/BqB,IAAY,CAACH,EAAK,KAAK,GAEvBvH,IAAS;AAmBb,YAlBI,KAAK,QAAQ,YACfA,IAAS,GACTsH,IAAeC,EAAK,UAAU,KACrBG,IACT1H,IAASsF,GAAI,CAAC,EAAE,SAAS,KAEzBtF,IAASsF,GAAI,CAAC,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,GACpDtF,IAASA,IAAS,IAAI,IAAIA,GAC1BsH,IAAeC,EAAK,MAAMvH,CAAM,GAChCA,KAAUsF,GAAI,CAAC,EAAE,SAGfoC,KAAa,KAAK,MAAM,MAAM,UAAU,KAAKD,EAAQ,MACvDlC,KAAOkC,KAAW;GAClBpB,IAAMA,EAAI,UAAUoB,GAAS,SAAS,CAAC,GACvCJ,IAAW,OAGT,CAACA,GAAU;AACb,cAAMM,IAAkB,KAAK,MAAM,MAAM,gBAAgB3H,CAAM,GACzD4H,IAAU,KAAK,MAAM,MAAM,QAAQ5H,CAAM,GACzC6H,IAAmB,KAAK,MAAM,MAAM,iBAAiB7H,CAAM,GAC3D8H,KAAoB,KAAK,MAAM,MAAM,kBAAkB9H,CAAM,GAC7D+H,KAAiB,KAAK,MAAM,MAAM,eAAe/H,CAAM;AAG7D,iBAAOqG,KAAK;AACV,gBAAM2B,IAAU3B,EAAI,MAAM;GAAM,CAAC,EAAE,CAAC,GAChC4B;AAgCJ,gBA/BAR,KAAWO,GAGP,KAAK,QAAQ,YACfP,KAAWA,GAAS,QAAQ,KAAK,MAAM,MAAM,oBAAoB,IAAI,GACrEQ,IAAsBR,MAEtBQ,IAAsBR,GAAS,QAAQ,KAAK,MAAM,MAAM,eAAe,MAAM,GAI3EI,EAAiB,KAAKJ,EAAQ,KAK9BK,GAAkB,KAAKL,EAAQ,KAK/BM,GAAe,KAAKN,EAAQ,KAK5BE,EAAgB,KAAKF,EAAQ,KAK7BG,EAAQ,KAAKH,EAAQ,EACvB;AAGF,gBAAIQ,EAAoB,OAAO,KAAK,MAAM,MAAM,YAAY,KAAKjI,KAAU,CAACyH,GAAS,KAAK,EACxFH,MAAgB;IAAOW,EAAoB,MAAMjI,CAAM;iBAClD;AAgBL,kBAdI0H,KAKAH,EAAK,QAAQ,KAAK,MAAM,MAAM,eAAe,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,KAAK,KAG9FM,EAAiB,KAAKN,CAAI,KAG1BO,GAAkB,KAAKP,CAAI,KAG3BK,EAAQ,KAAKL,CAAI,EACnB;AAGFD,mBAAgB;IAAOG;YACzB;AAEI,aAACC,KAAa,CAACD,GAAS,KAAK,MAC/BC,IAAY,OAGdnC,KAAOyC,IAAU;GACjB3B,IAAMA,EAAI,UAAU2B,EAAQ,SAAS,CAAC,GACtCT,IAAOU,EAAoB,MAAMjI,CAAM;UACzC;QACF;AAEKc,UAAK,UAEJsG,IACFtG,EAAK,QAAQ,OACJ,KAAK,MAAM,MAAM,gBAAgB,KAAKyE,CAAG,MAClD6B,IAAoB,QAIxBtG,EAAK,MAAM,KAAK,EACd,MAAM,aACN,KAAAyE,GACA,MAAM,CAAC,CAAC,KAAK,QAAQ,OAAO,KAAK,MAAM,MAAM,WAAW,KAAK+B,CAAY,GACzE,OAAO,OACP,MAAMA,GACN,QAAQ,CAAC,EACX,CAAC,GAEDxG,EAAK,OAAOyE;MACd;AAGA,UAAM2C,IAAWpH,EAAK,MAAM,GAAG,EAAE;AACjC,UAAIoH,EACFA,GAAS,MAAMA,EAAS,IAAI,QAAQ,GACpCA,EAAS,OAAOA,EAAS,KAAK,QAAQ;UAGtC;AAEFpH,QAAK,MAAMA,EAAK,IAAI,QAAQ;AAG5B,eAAWqH,KAAQrH,EAAK,OAAO;AAG7B,YAFA,KAAK,MAAM,MAAM,MAAM,OACvBqH,EAAK,SAAS,KAAK,MAAM,YAAYA,EAAK,MAAM,CAAC,CAAC,GAC9CA,EAAK,MAAM;AAGb,cADAA,EAAK,OAAOA,EAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,GAC9DA,EAAK,OAAO,CAAC,GAAG,SAAS,UAAUA,EAAK,OAAO,CAAC,GAAG,SAAS,aAAa;AAC3EA,cAAK,OAAO,CAAC,EAAE,MAAMA,EAAK,OAAO,CAAC,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,GACpFA,EAAK,OAAO,CAAC,EAAE,OAAOA,EAAK,OAAO,CAAC,EAAE,KAAK,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE;AACtF,qBAASxD,IAAI,KAAK,MAAM,YAAY,SAAS,GAAGA,KAAK,GAAGA,IACtD,KAAI,KAAK,MAAM,MAAM,WAAW,KAAK,KAAK,MAAM,YAAYA,CAAC,EAAE,GAAG,GAAG;AACnE,mBAAK,MAAM,YAAYA,CAAC,EAAE,MAAM,KAAK,MAAM,YAAYA,CAAC,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE;AAC1G;YACF;UAEJ;AAEA,cAAMyD,IAAU,KAAK,MAAM,MAAM,iBAAiB,KAAKD,EAAK,GAAG;AAC/D,cAAIC,GAAS;AACX,gBAAMC,IAAiC,EACrC,MAAM,YACN,KAAKD,EAAQ,CAAC,IAAI,KAClB,SAASA,EAAQ,CAAC,MAAM,MAC1B;AACAD,cAAK,UAAUE,EAAc,SACzBvH,EAAK,QACHqH,EAAK,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,SAASA,EAAK,OAAO,CAAC,EAAE,IAAI,KAAK,YAAYA,EAAK,OAAO,CAAC,KAAKA,EAAK,OAAO,CAAC,EAAE,UACxHA,EAAK,OAAO,CAAC,EAAE,MAAME,EAAc,MAAMF,EAAK,OAAO,CAAC,EAAE,KACxDA,EAAK,OAAO,CAAC,EAAE,OAAOE,EAAc,MAAMF,EAAK,OAAO,CAAC,EAAE,MACzDA,EAAK,OAAO,CAAC,EAAE,OAAO,QAAQE,CAAa,KAE3CF,EAAK,OAAO,QAAQ,EAClB,MAAM,aACN,KAAKE,EAAc,KACnB,MAAMA,EAAc,KACpB,QAAQ,CAACA,CAAa,EACxB,CAAC,IAGHF,EAAK,OAAO,QAAQE,CAAa;UAErC;QACF;AAEA,YAAI,CAACvH,EAAK,OAAO;AAEf,cAAMwH,IAAUH,EAAK,OAAO,OAAOX,OAAKA,EAAE,SAAS,OAAO,GACpDe,IAAwBD,EAAQ,SAAS,KAAKA,EAAQ,KAAKd,OAAK,KAAK,MAAM,MAAM,QAAQ,KAAKA,EAAE,GAAG,CAAC;AAE1G1G,YAAK,QAAQyH;QACf;MACF;AAGA,UAAIzH,EAAK,MACP,UAAWqH,KAAQrH,EAAK,OAAO;AAC7BqH,UAAK,QAAQ;AACb,iBAAWvC,KAASuC,EAAK,OACnBvC,GAAM,SAAS,WACjBA,EAAM,OAAO;MAGnB;AAGF,aAAO9E;IACT;EACF;EAEA,KAAKuF,GAAsC;AACzC,QAAMf,KAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,GAQF,QAP2B,EACzB,MAAM,QACN,OAAO,MACP,KAAKA,GAAI,CAAC,GACV,KAAKA,GAAI,CAAC,MAAM,SAASA,GAAI,CAAC,MAAM,YAAYA,GAAI,CAAC,MAAM,SAC3D,MAAMA,GAAI,CAAC,EACb;EAGJ;EAEA,IAAIe,GAAqC;AACvC,QAAMf,KAAM,KAAK,MAAM,MAAM,IAAI,KAAKe,CAAG;AACzC,QAAIf,IAAK;AACP,UAAMxC,IAAMwC,GAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAK,MAAM,MAAM,qBAAqB,GAAG,GAC5EtB,IAAOsB,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,cAAc,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAI,IACtHI,IAAQJ,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,UAAU,GAAGA,GAAI,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,IAAIA,GAAI,CAAC;AACrH,aAAO,EACL,MAAM,OACN,KAAAxC,GACA,KAAKwC,GAAI,CAAC,GACV,MAAAtB,GACA,OAAA0B,EACF;IACF;EACF;EAEA,MAAMW,GAAuC;AAC3C,QAAMf,KAAM,KAAK,MAAM,MAAM,MAAM,KAAKe,CAAG;AAK3C,QAJI,CAACf,MAID,CAAC,KAAK,MAAM,MAAM,eAAe,KAAKA,GAAI,CAAC,CAAC,EAE9C;AAGF,QAAMkD,IAAUvE,EAAWqB,GAAI,CAAC,CAAC,GAC3BmD,IAASnD,GAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,EAAE,MAAM,GAAG,GACvEoD,IAAOpD,GAAI,CAAC,GAAG,KAAK,IAAIA,GAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAmB,EAAE,EAAE,MAAM;CAAI,IAAI,CAAC,GAE9F6C,IAAqB,EACzB,MAAM,SACN,KAAK7C,GAAI,CAAC,GACV,QAAQ,CAAC,GACT,OAAO,CAAC,GACR,MAAM,CAAC,EACT;AAEA,QAAIkD,EAAQ,WAAWC,EAAO,QAK9B;AAAA,eAAWE,KAASF,EACd,MAAK,MAAM,MAAM,gBAAgB,KAAKE,CAAK,IAC7CR,EAAK,MAAM,KAAK,OAAO,IACd,KAAK,MAAM,MAAM,iBAAiB,KAAKQ,CAAK,IACrDR,EAAK,MAAM,KAAK,QAAQ,IACf,KAAK,MAAM,MAAM,eAAe,KAAKQ,CAAK,IACnDR,EAAK,MAAM,KAAK,MAAM,IAEtBA,EAAK,MAAM,KAAK,IAAI;AAIxB,eAASxD,IAAI,GAAGA,IAAI6D,EAAQ,QAAQ7D,IAClCwD,GAAK,OAAO,KAAK,EACf,MAAMK,EAAQ7D,CAAC,GACf,QAAQ,KAAK,MAAM,OAAO6D,EAAQ7D,CAAC,CAAC,GACpC,QAAQ,MACR,OAAOwD,EAAK,MAAMxD,CAAC,EACrB,CAAC;AAGH,eAAWP,KAAOsE,EAChBP,GAAK,KAAK,KAAKlE,EAAWG,GAAK+D,EAAK,OAAO,MAAM,EAAE,IAAI,CAACS,GAAMjE,OACrD,EACL,MAAMiE,GACN,QAAQ,KAAK,MAAM,OAAOA,CAAI,GAC9B,QAAQ,OACR,OAAOT,EAAK,MAAMxD,CAAC,EACrB,EACD,CAAC;AAGJ,aAAOwD;IAAAA;EACT;EAEA,SAAS9B,GAAyC;AAChD,QAAMf,KAAM,KAAK,MAAM,MAAM,SAAS,KAAKe,CAAG;AAC9C,QAAIf,GACF,QAAO,EACL,MAAM,WACN,KAAKA,GAAI,CAAC,GACV,OAAOA,GAAI,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,IAAI,GACtC,MAAMA,GAAI,CAAC,GACX,QAAQ,KAAK,MAAM,OAAOA,GAAI,CAAC,CAAC,EAClC;EAEJ;EAEA,UAAUe,GAA2C;AACnD,QAAMf,KAAM,KAAK,MAAM,MAAM,UAAU,KAAKe,CAAG;AAC/C,QAAIf,IAAK;AACP,UAAMK,IAAOL,GAAI,CAAC,EAAE,OAAOA,GAAI,CAAC,EAAE,SAAS,CAAC,MAAM;IAC9CA,GAAI,CAAC,EAAE,MAAM,GAAG,EAAE,IAClBA,GAAI,CAAC;AACT,aAAO,EACL,MAAM,aACN,KAAKA,GAAI,CAAC,GACV,MAAAK,GACA,QAAQ,KAAK,MAAM,OAAOA,CAAI,EAChC;IACF;EACF;EAEA,KAAKU,GAAsC;AACzC,QAAMf,KAAM,KAAK,MAAM,MAAM,KAAK,KAAKe,CAAG;AAC1C,QAAIf,GACF,QAAO,EACL,MAAM,QACN,KAAKA,GAAI,CAAC,GACV,MAAMA,GAAI,CAAC,GACX,QAAQ,KAAK,MAAM,OAAOA,GAAI,CAAC,CAAC,EAClC;EAEJ;EAEA,OAAOe,GAAwC;AAC7C,QAAMf,KAAM,KAAK,MAAM,OAAO,OAAO,KAAKe,CAAG;AAC7C,QAAIf,GACF,QAAO,EACL,MAAM,UACN,KAAKA,GAAI,CAAC,GACV,MAAMA,GAAI,CAAC,EACb;EAEJ;EAEA,IAAIe,GAAqC;AACvC,QAAMf,KAAM,KAAK,MAAM,OAAO,IAAI,KAAKe,CAAG;AAC1C,QAAIf,GACF,QAAI,CAAC,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,UAAU,KAAKA,GAAI,CAAC,CAAC,IACpE,KAAK,MAAM,MAAM,SAAS,OACjB,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,QAAQ,KAAKA,GAAI,CAAC,CAAC,MACxE,KAAK,MAAM,MAAM,SAAS,QAExB,CAAC,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,MAAM,kBAAkB,KAAKA,GAAI,CAAC,CAAC,IAChF,KAAK,MAAM,MAAM,aAAa,OACrB,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,MAAM,gBAAgB,KAAKA,GAAI,CAAC,CAAC,MACpF,KAAK,MAAM,MAAM,aAAa,QAGzB,EACL,MAAM,QACN,KAAKA,GAAI,CAAC,GACV,QAAQ,KAAK,MAAM,MAAM,QACzB,YAAY,KAAK,MAAM,MAAM,YAC7B,OAAO,OACP,MAAMA,GAAI,CAAC,EACb;EAEJ;EAEA,KAAKe,GAAqD;AACxD,QAAMf,KAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,IAAK;AACP,UAAMuD,IAAavD,GAAI,CAAC,EAAE,KAAK;AAC/B,UAAI,CAAC,KAAK,QAAQ,YAAY,KAAK,MAAM,MAAM,kBAAkB,KAAKuD,CAAU,GAAG;AAEjF,YAAI,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAU,EACpD;AAIF,YAAMC,IAAalE,EAAMiE,EAAW,MAAM,GAAG,EAAE,GAAG,IAAI;AACtD,aAAKA,EAAW,SAASC,EAAW,UAAU,MAAM,EAClD;MAEJ,OAAO;AAEL,YAAMC,IAAiB7D,GAAmBI,GAAI,CAAC,GAAG,IAAI;AACtD,YAAIyD,MAAmB,GAErB;AAGF,YAAIA,IAAiB,IAAI;AAEvB,cAAMC,KADQ1D,GAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,IAAI,IAAI,KACtBA,GAAI,CAAC,EAAE,SAASyD;AACxCzD,UAAAA,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,UAAU,GAAGyD,CAAc,GAC3CzD,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,UAAU,GAAG0D,CAAO,EAAE,KAAK,GAC3C1D,GAAI,CAAC,IAAI;QACX;MACF;AACA,UAAItB,IAAOsB,GAAI,CAAC,GACZI,IAAQ;AACZ,UAAI,KAAK,QAAQ,UAAU;AAEzB,YAAM1C,IAAO,KAAK,MAAM,MAAM,kBAAkB,KAAKgB,CAAI;AAErDhB,cACFgB,IAAOhB,EAAK,CAAC,GACb0C,IAAQ1C,EAAK,CAAC;MAElB,MACE0C,KAAQJ,GAAI,CAAC,IAAIA,GAAI,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI;AAGzC,aAAAtB,IAAOA,EAAK,KAAK,GACb,KAAK,MAAM,MAAM,kBAAkB,KAAKA,CAAI,MAC1C,KAAK,QAAQ,YAAY,CAAE,KAAK,MAAM,MAAM,gBAAgB,KAAK6E,CAAU,IAE7E7E,IAAOA,EAAK,MAAM,CAAC,IAEnBA,IAAOA,EAAK,MAAM,GAAG,EAAE,IAGpBqB,GAAWC,IAAK,EACrB,MAAMtB,KAAOA,EAAK,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,GAChE,OAAO0B,KAAQA,EAAM,QAAQ,KAAK,MAAM,OAAO,gBAAgB,IAAI,EACrE,GAAGJ,GAAI,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;IACnC;EACF;EAEA,QAAQe,GAAa4C,IAAoE;AACvF,QAAI3D;AACJ,SAAKA,IAAM,KAAK,MAAM,OAAO,QAAQ,KAAKe,CAAG,OACvCf,IAAM,KAAK,MAAM,OAAO,OAAO,KAAKe,CAAG,IAAI;AAC/C,UAAM6C,KAAc5D,EAAI,CAAC,KAAKA,EAAI,CAAC,GAAG,QAAQ,KAAK,MAAM,MAAM,qBAAqB,GAAG,GACjFtC,IAAOiG,GAAMC,EAAW,YAAY,CAAC;AAC3C,UAAI,CAAClG,GAAM;AACT,YAAM2C,IAAOL,EAAI,CAAC,EAAE,OAAO,CAAC;AAC5B,eAAO,EACL,MAAM,QACN,KAAKK,GACL,MAAAA,EACF;MACF;AACA,aAAON,GAAWC,GAAKtC,GAAMsC,EAAI,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK;IAC7D;EACF;EAEA,SAASe,GAAa8C,IAAmBC,IAAW,IAA2C;AAC7F,QAAI/E,IAAQ,KAAK,MAAM,OAAO,eAAe,KAAKgC,CAAG;AAIrD,QAHI,CAAChC,KAGDA,EAAM,CAAC,KAAK+E,EAAS,MAAM,KAAK,MAAM,MAAM,mBAAmB,EAAG;AAItE,QAAI,EAFa/E,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK,OAExB,CAAC+E,KAAY,KAAK,MAAM,OAAO,YAAY,KAAKA,CAAQ,GAAG;AAE1E,UAAMC,IAAU,CAAC,GAAGhF,EAAM,CAAC,CAAC,EAAE,SAAS,GACnCiF,GAAQC,GAASC,IAAaH,GAASI,IAAgB,GAErDC,IAASrF,EAAM,CAAC,EAAE,CAAC,MAAM,MAAM,KAAK,MAAM,OAAO,oBAAoB,KAAK,MAAM,OAAO;AAM7F,WALAqF,EAAO,YAAY,GAGnBP,KAAYA,GAAU,MAAM,KAAK9C,EAAI,SAASgD,CAAO,IAE7ChF,IAAQqF,EAAO,KAAKP,EAAS,MAAM,QAAM;AAG/C,YAFAG,IAASjF,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,GAExE,CAACiF,EAAQ;AAIb,YAFAC,IAAU,CAAC,GAAGD,CAAM,EAAE,QAElBjF,EAAM,CAAC,KAAKA,EAAM,CAAC,GAAG;AACxBmF,eAAcD;AACd;QACF,YAAWlF,EAAM,CAAC,KAAKA,EAAM,CAAC,MACxBgF,IAAU,KAAK,GAAGA,IAAUE,KAAW,IAAI;AAC7CE,eAAiBF;AACjB;QACF;AAKF,YAFAC,KAAcD,GAEVC,IAAa,EAAG;AAGpBD,YAAU,KAAK,IAAIA,GAASA,IAAUC,IAAaC,CAAa;AAEhE,YAAME,IAAiB,CAAC,GAAGtF,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAClCkB,KAAMc,EAAI,MAAM,GAAGgD,IAAUhF,EAAM,QAAQsF,IAAiBJ,CAAO;AAGzE,YAAI,KAAK,IAAIF,GAASE,CAAO,IAAI,GAAG;AAClC,cAAM5D,IAAOJ,GAAI,MAAM,GAAG,EAAE;AAC5B,iBAAO,EACL,MAAM,MACN,KAAAA,IACA,MAAAI,GACA,QAAQ,KAAK,MAAM,aAAaA,CAAI,EACtC;QACF;AAGA,YAAMA,IAAOJ,GAAI,MAAM,GAAG,EAAE;AAC5B,eAAO,EACL,MAAM,UACN,KAAAA,IACA,MAAAI,GACA,QAAQ,KAAK,MAAM,aAAaA,CAAI,EACtC;MACF;IACF;EACF;EAEA,SAASU,GAA0C;AACjD,QAAMf,KAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,IAAK;AACP,UAAIK,IAAOL,GAAI,CAAC,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAmB,GAAG,GAC3DsE,IAAmB,KAAK,MAAM,MAAM,aAAa,KAAKjE,CAAI,GAC1DkE,IAA0B,KAAK,MAAM,MAAM,kBAAkB,KAAKlE,CAAI,KAAK,KAAK,MAAM,MAAM,gBAAgB,KAAKA,CAAI;AAC3H,aAAIiE,KAAoBC,MACtBlE,IAAOA,EAAK,UAAU,GAAGA,EAAK,SAAS,CAAC,IAEnC,EACL,MAAM,YACN,KAAKL,GAAI,CAAC,GACV,MAAAK,EACF;IACF;EACF;EAEA,GAAGU,GAAoC;AACrC,QAAMf,KAAM,KAAK,MAAM,OAAO,GAAG,KAAKe,CAAG;AACzC,QAAIf,GACF,QAAO,EACL,MAAM,MACN,KAAKA,GAAI,CAAC,EACZ;EAEJ;EAEA,IAAIe,GAAqC;AACvC,QAAMf,KAAM,KAAK,MAAM,OAAO,IAAI,KAAKe,CAAG;AAC1C,QAAIf,GACF,QAAO,EACL,MAAM,OACN,KAAKA,GAAI,CAAC,GACV,MAAMA,GAAI,CAAC,GACX,QAAQ,KAAK,MAAM,aAAaA,GAAI,CAAC,CAAC,EACxC;EAEJ;EAEA,SAASe,GAAsC;AAC7C,QAAMf,KAAM,KAAK,MAAM,OAAO,SAAS,KAAKe,CAAG;AAC/C,QAAIf,IAAK;AACP,UAAIK,GAAM3B;AACV,aAAIsB,GAAI,CAAC,MAAM,OACbK,IAAOL,GAAI,CAAC,GACZtB,IAAO,YAAY2B,MAEnBA,IAAOL,GAAI,CAAC,GACZtB,IAAO2B,IAGF,EACL,MAAM,QACN,KAAKL,GAAI,CAAC,GACV,MAAAK,GACA,MAAA3B,GACA,QAAQ,CACN,EACE,MAAM,QACN,KAAK2B,GACL,MAAAA,EACF,CACF,EACF;IACF;EACF;EAEA,IAAIU,GAAsC;AACxC,QAAIf;AACJ,QAAIA,KAAM,KAAK,MAAM,OAAO,IAAI,KAAKe,CAAG,GAAG;AACzC,UAAIV,GAAM3B;AACV,UAAIsB,GAAI,CAAC,MAAM,IACbK,KAAOL,GAAI,CAAC,GACZtB,IAAO,YAAY2B;WACd;AAEL,YAAImE;AACJ;AACEA,cAAcxE,GAAI,CAAC,GACnBA,GAAI,CAAC,IAAI,KAAK,MAAM,OAAO,WAAW,KAAKA,GAAI,CAAC,CAAC,IAAI,CAAC,KAAK;eACpDwE,MAAgBxE,GAAI,CAAC;AAC9BK,YAAOL,GAAI,CAAC,GACRA,GAAI,CAAC,MAAM,SACbtB,IAAO,YAAYsB,GAAI,CAAC,IAExBtB,IAAOsB,GAAI,CAAC;MAEhB;AACA,aAAO,EACL,MAAM,QACN,KAAKA,GAAI,CAAC,GACV,MAAAK,GACA,MAAA3B,GACA,QAAQ,CACN,EACE,MAAM,QACN,KAAK2B,GACL,MAAAA,EACF,CACF,EACF;IACF;EACF;EAEA,WAAWU,GAAsC;AAC/C,QAAMf,KAAM,KAAK,MAAM,OAAO,KAAK,KAAKe,CAAG;AAC3C,QAAIf,IAAK;AACP,UAAMd,IAAU,KAAK,MAAM,MAAM;AACjC,aAAO,EACL,MAAM,QACN,KAAKc,GAAI,CAAC,GACV,MAAMA,GAAI,CAAC,GACX,SAAAd,EACF;IACF;EACF;AACF;ACp4BO,IAAMuF,IAAN,MAAMC,EAAuD;EAClE;EACA;EACA;EAMO;EAEC;EAER,YAAY5D,GAAuD;AAEjE,SAAK,SAAS,CAAC,GACf,KAAK,OAAO,QAAQ,uBAAO,OAAO,IAAI,GACtC,KAAK,UAAUA,KAAWnH,GAC1B,KAAK,QAAQ,YAAY,KAAK,QAAQ,aAAa,IAAIkH,KACvD,KAAK,YAAY,KAAK,QAAQ,WAC9B,KAAK,UAAU,UAAU,KAAK,SAC9B,KAAK,UAAU,QAAQ,MACvB,KAAK,cAAc,CAAC,GACpB,KAAK,QAAQ,EACX,QAAQ,OACR,YAAY,OACZ,KAAK,KACP;AAEA,QAAMV,KAAQ,EACZ,OAAA5F,GACA,OAAO4D,EAAM,QACb,QAAQC,EAAO,OACjB;AAEI,SAAK,QAAQ,YACf+B,GAAM,QAAQhC,EAAM,UACpBgC,GAAM,SAAS/B,EAAO,YACb,KAAK,QAAQ,QACtB+B,GAAM,QAAQhC,EAAM,KAChB,KAAK,QAAQ,SACfgC,GAAM,SAAS/B,EAAO,SAEtB+B,GAAM,SAAS/B,EAAO,MAG1B,KAAK,UAAU,QAAQ+B;EACzB;EAKA,WAAW,QAAQ;AACjB,WAAO,EACL,OAAAhC,GACA,QAAAC,EACF;EACF;EAKA,OAAO,IAAoD2C,GAAaD,IAAuD;AAE7H,WADc,IAAI4D,EAAqC5D,EAAO,EACjD,IAAIC,CAAG;EACtB;EAKA,OAAO,UAA0DA,GAAaD,IAAuD;AAEnI,WADc,IAAI4D,EAAqC5D,EAAO,EACjD,aAAaC,CAAG;EAC/B;EAKA,IAAIA,GAAa;AACfA,QAAMA,EAAI,QAAQxG,EAAM,gBAAgB;CAAI,GAE5C,KAAK,YAAYwG,GAAK,KAAK,MAAM;AAEjC,aAAS1B,KAAI,GAAGA,KAAI,KAAK,YAAY,QAAQA,MAAK;AAChD,UAAMsF,IAAO,KAAK,YAAYtF,EAAC;AAC/B,WAAK,aAAasF,EAAK,KAAKA,EAAK,MAAM;IACzC;AACA,WAAA,KAAK,cAAc,CAAC,GAEb,KAAK;EACd;EAOA,YAAY5D,GAAaG,KAAkB,CAAC,GAAG0D,IAAuB,OAAO;AAK3E,SAJI,KAAK,QAAQ,aACf7D,IAAMA,EAAI,QAAQxG,EAAM,eAAe,MAAM,EAAE,QAAQA,EAAM,WAAW,EAAE,IAGrEwG,KAAK;AACV,UAAIT;AAEJ,UAAI,KAAK,QAAQ,YAAY,OAAO,KAAMuE,QACpCvE,IAAQuE,EAAa,KAAK,EAAE,OAAO,KAAK,GAAG9D,GAAKG,EAAM,MACxDH,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK,GACV,QAEF,KACR,EACC;AAIF,UAAIA,IAAQ,KAAK,UAAU,MAAMS,CAAG,GAAG;AACrCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,GAAO,GAAG,EAAE;AAC1BZ,UAAM,IAAI,WAAW,KAAKkB,MAAc,SAG1CA,EAAU,OAAO;IAEjBN,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,GAAO,GAAG,EAAE;AAE1BM,WAAW,SAAS,eAAeA,GAAW,SAAS,UACzDA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,OAAOS,CAAG,GAAG;AACtCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,QAAQS,CAAG,GAAG;AACvCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,GAAGS,CAAG,GAAG;AAClCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,WAAWS,CAAG,GAAG;AAC1CA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,CAAG,GAAG;AACnCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,GAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,eAAeA,GAAW,SAAS,UACzDA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,KAC/B,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAC/B,KAAK,OAAO,MAAMlB,EAAM,GAAG,MACrC,KAAK,OAAO,MAAMA,EAAM,GAAG,IAAI,EAC7B,MAAMA,EAAM,MACZ,OAAOA,EAAM,MACf,GACAY,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,MAAMS,CAAG,GAAG;AACrCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAIA,UAAIwE,IAAS/D;AACb,UAAI,KAAK,QAAQ,YAAY,YAAY;AACvC,YAAIgE,IAAa,IAAA,GACXC,IAAUjE,EAAI,MAAM,CAAC,GACvBkE;AACJ,aAAK,QAAQ,WAAW,WAAW,QAASC,OAAkB;AAC5DD,cAAYC,EAAc,KAAK,EAAE,OAAO,KAAK,GAAGF,CAAO,GACnD,OAAOC,KAAc,YAAYA,KAAa,MAChDF,IAAa,KAAK,IAAIA,GAAYE,CAAS;QAE/C,CAAC,GACGF,IAAa,IAAA,KAAYA,KAAc,MACzCD,IAAS/D,EAAI,UAAU,GAAGgE,IAAa,CAAC;MAE5C;AACA,UAAI,KAAK,MAAM,QAAQzE,IAAQ,KAAK,UAAU,UAAUwE,CAAM,IAAI;AAChE,YAAMtD,IAAYN,GAAO,GAAG,EAAE;AAC1B0D,aAAwBpD,GAAW,SAAS,eAC9CA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,IAAI,GACrB,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,GAAO,KAAKZ,CAAK,GAEnBsE,IAAuBE,EAAO,WAAW/D,EAAI,QAC7CA,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,GAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,UACtBA,EAAU,QAAQA,EAAU,IAAI,SAAS;CAAI,IAAI,KAAK;KAAQlB,EAAM,KACpEkB,EAAU,QAAQ;IAAOlB,EAAM,MAC/B,KAAK,YAAY,IAAI,GACrB,KAAK,YAAY,GAAG,EAAE,EAAG,MAAMkB,EAAU,QAEzCN,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAEA,UAAIS,GAAK;AACP,YAAMoE,IAAS,4BAA4BpE,EAAI,WAAW,CAAC;AAC3D,YAAI,KAAK,QAAQ,QAAQ;AACvB,kBAAQ,MAAMoE,CAAM;AACpB;QACF,MACE,OAAM,IAAI,MAAMA,CAAM;MAE1B;IACF;AAEA,WAAA,KAAK,MAAM,MAAM,MACVjE;EACT;EAEA,OAAOH,GAAaG,KAAkB,CAAC,GAAG;AACxC,WAAA,KAAK,YAAY,KAAK,EAAE,KAAAH,GAAK,QAAAG,GAAO,CAAC,GAC9BA;EACT;EAKA,aAAaH,GAAaG,KAAkB,CAAC,GAAY;AAEvD,QAAI2C,IAAY9C,GACZhC,IAAgC;AAGpC,QAAI,KAAK,OAAO,OAAO;AACrB,UAAM4E,IAAQ,OAAO,KAAK,KAAK,OAAO,KAAK;AAC3C,UAAIA,EAAM,SAAS,EACjB,SAAQ5E,IAAQ,KAAK,UAAU,MAAM,OAAO,cAAc,KAAK8E,CAAS,MAAM,OACxEF,GAAM,SAAS5E,EAAM,CAAC,EAAE,MAAMA,EAAM,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC,MAClE8E,IAAYA,EAAU,MAAM,GAAG9E,EAAM,KAAK,IACtC,MAAM,IAAI,OAAOA,EAAM,CAAC,EAAE,SAAS,CAAC,IAAI,MACxC8E,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,cAAc,SAAS;IAI/E;AAGA,YAAQ9E,IAAQ,KAAK,UAAU,MAAM,OAAO,eAAe,KAAK8E,CAAS,MAAM,OAC7EA,KAAYA,EAAU,MAAM,GAAG9E,EAAM,KAAK,IAAI,OAAO8E,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,eAAe,SAAS;AAI3H,QAAI7E;AACJ,YAAQD,IAAQ,KAAK,UAAU,MAAM,OAAO,UAAU,KAAK8E,CAAS,MAAM,OACxE7E,KAASD,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,SAAS,GACtC8E,IAAYA,EAAU,MAAM,GAAG9E,EAAM,QAAQC,CAAM,IAAI,MAAM,IAAI,OAAOD,EAAM,CAAC,EAAE,SAASC,IAAS,CAAC,IAAI,MAAM6E,EAAU,MAAM,KAAK,UAAU,MAAM,OAAO,UAAU,SAAS;AAI/KA,QAAY,KAAK,QAAQ,OAAO,cAAc,KAAK,EAAE,OAAO,KAAK,GAAGA,CAAS,KAAKA;AAElF,QAAIuB,IAAe,OACftB,IAAW;AACf,WAAO/C,KAAK;AACLqE,YACHtB,IAAW,KAEbsB,IAAe;AAEf,UAAI9E;AAGJ,UAAI,KAAK,QAAQ,YAAY,QAAQ,KAAMuE,QACrCvE,IAAQuE,EAAa,KAAK,EAAE,OAAO,KAAK,GAAG9D,GAAKG,EAAM,MACxDH,IAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK,GACV,QAEF,KACR,EACC;AAIF,UAAIA,IAAQ,KAAK,UAAU,OAAOS,CAAG,GAAG;AACtCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,CAAG,GAAG;AACnCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,KAAKS,CAAG,GAAG;AACpCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,QAAQS,GAAK,KAAK,OAAO,KAAK,GAAG;AAC1DA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM;AACpC,YAAMkB,IAAYN,GAAO,GAAG,EAAE;AAC1BZ,UAAM,SAAS,UAAUkB,GAAW,SAAS,UAC/CA,EAAU,OAAOlB,EAAM,KACvBkB,EAAU,QAAQlB,EAAM,QAExBY,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,GAAK8C,GAAWC,CAAQ,GAAG;AAC7D/C,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,GAAGS,CAAG,GAAG;AAClCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,IAAIS,CAAG,GAAG;AACnCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAIA,IAAQ,KAAK,UAAU,SAASS,CAAG,GAAG;AACxCA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAGA,UAAI,CAAC,KAAK,MAAM,WAAWA,IAAQ,KAAK,UAAU,IAAIS,CAAG,IAAI;AAC3DA,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GACpCY,GAAO,KAAKZ,CAAK;AACjB;MACF;AAIA,UAAIwE,IAAS/D;AACb,UAAI,KAAK,QAAQ,YAAY,aAAa;AACxC,YAAIgE,IAAa,IAAA,GACXC,IAAUjE,EAAI,MAAM,CAAC,GACvBkE;AACJ,aAAK,QAAQ,WAAW,YAAY,QAASC,CAAAA,OAAkB;AAC7DD,cAAYC,GAAc,KAAK,EAAE,OAAO,KAAK,GAAGF,CAAO,GACnD,OAAOC,KAAc,YAAYA,KAAa,MAChDF,IAAa,KAAK,IAAIA,GAAYE,CAAS;QAE/C,CAAC,GACGF,IAAa,IAAA,KAAYA,KAAc,MACzCD,IAAS/D,EAAI,UAAU,GAAGgE,IAAa,CAAC;MAE5C;AACA,UAAIzE,IAAQ,KAAK,UAAU,WAAWwE,CAAM,GAAG;AAC7C/D,YAAMA,EAAI,UAAUT,EAAM,IAAI,MAAM,GAChCA,EAAM,IAAI,MAAM,EAAE,MAAM,QAC1BwD,IAAWxD,EAAM,IAAI,MAAM,EAAE,IAE/B8E,IAAe;AACf,YAAM5D,IAAYN,GAAO,GAAG,EAAE;AAC1BM,WAAW,SAAS,UACtBA,EAAU,OAAOlB,EAAM,KACvBkB,EAAU,QAAQlB,EAAM,QAExBY,GAAO,KAAKZ,CAAK;AAEnB;MACF;AAEA,UAAIS,GAAK;AACP,YAAMoE,IAAS,4BAA4BpE,EAAI,WAAW,CAAC;AAC3D,YAAI,KAAK,QAAQ,QAAQ;AACvB,kBAAQ,MAAMoE,CAAM;AACpB;QACF,MACE,OAAM,IAAI,MAAMA,CAAM;MAE1B;IACF;AAEA,WAAOjE;EACT;AACF;AC/cO,IAAMmE,IAAN,MAAgE;EACrE;EACA;EACA,YAAYvE,GAAuD;AACjE,SAAK,UAAUA,KAAWnH;EAC5B;EAEA,MAAM2G,GAAqC;AACzC,WAAO;EACT;EAEA,KAAK,EAAE,MAAAD,GAAM,MAAAiF,IAAM,SAAApG,EAAQ,GAAgC;AACzD,QAAMqG,KAAcD,MAAQ,IAAI,MAAM/K,EAAM,aAAa,IAAI,CAAC,GAExDiL,IAAOnF,EAAK,QAAQ9F,EAAM,eAAe,EAAE,IAAI;;AAErD,WAAKgL,IAME,gCACHrJ,EAAOqJ,CAAU,IACjB,QACCrG,IAAUsG,IAAOtJ,EAAOsJ,GAAM,IAAI,KACnC;IATK,iBACFtG,IAAUsG,IAAOtJ,EAAOsJ,GAAM,IAAI,KACnC;;EAQR;EAEA,WAAW,EAAE,QAAAtE,EAAO,GAAsC;AAExD,WAAO;EADM,KAAK,OAAO,MAAMA,CAAM,CACT;;EAC9B;EAEA,KAAK,EAAE,MAAAb,EAAK,GAA6C;AACvD,WAAOA;EACT;EAEA,IAAIC,GAAmC;AACrC,WAAO;EACT;EAEA,QAAQ,EAAE,QAAAY,GAAQ,OAAAuE,GAAM,GAAmC;AACzD,WAAO,KAAKA,EAAK,IAAI,KAAK,OAAO,YAAYvE,CAAM,CAAC,MAAMuE,EAAK;;EACjE;EAEA,GAAGnF,GAAkC;AACnC,WAAO;;EACT;EAEA,KAAKA,GAAoC;AACvC,QAAMoF,KAAUpF,EAAM,SAChBqF,IAAQrF,EAAM,OAEhBsF,IAAO;AACX,aAASC,IAAI,GAAGA,IAAIvF,EAAM,MAAM,QAAQuF,KAAK;AAC3C,UAAMhD,IAAOvC,EAAM,MAAMuF,CAAC;AAC1BD,WAAQ,KAAK,SAAS/C,CAAI;IAC5B;AAEA,QAAMiD,IAAOJ,KAAU,OAAO,MACxBK,IAAaL,MAAWC,MAAU,IAAM,aAAaA,IAAQ,MAAO;AAC1E,WAAO,MAAMG,IAAOC,IAAY;IAAQH,IAAO,OAAOE,IAAO;;EAC/D;EAEA,SAASjD,GAAuC;AAC9C,WAAO,OAAO,KAAK,OAAO,MAAMA,EAAK,MAAM,CAAC;;EAC9C;EAEA,SAAS,EAAE,SAAAmD,EAAQ,GAAoC;AACrD,WAAO,aACFA,IAAU,gBAAgB,MAC3B;EACN;EAEA,UAAU,EAAE,QAAA9E,EAAO,GAAqC;AACtD,WAAO,MAAM,KAAK,OAAO,YAAYA,CAAM,CAAC;;EAC9C;EAEA,MAAMZ,GAAqC;AACzC,QAAI2F,KAAS,IAGT3C,IAAO;AACX,aAASuC,IAAI,GAAGA,IAAIvF,EAAM,OAAO,QAAQuF,IACvCvC,MAAQ,KAAK,UAAUhD,EAAM,OAAOuF,CAAC,CAAC;AAExCI,IAAAA,MAAU,KAAK,SAAS,EAAE,MAAM3C,EAAqB,CAAC;AAEtD,QAAIsC,IAAO;AACX,aAASC,IAAI,GAAGA,IAAIvF,EAAM,KAAK,QAAQuF,KAAK;AAC1C,UAAM/G,IAAMwB,EAAM,KAAKuF,CAAC;AAExBvC,UAAO;AACP,eAAS4C,IAAI,GAAGA,IAAIpH,EAAI,QAAQoH,IAC9B5C,MAAQ,KAAK,UAAUxE,EAAIoH,CAAC,CAAC;AAG/BN,WAAQ,KAAK,SAAS,EAAE,MAAMtC,EAAqB,CAAC;IACtD;AACA,WAAIsC,MAAMA,IAAO,UAAUA,CAAI,aAExB;;IAEHK,KACA;IACAL,IACA;;EACN;EAEA,SAAS,EAAE,MAAAvF,EAAK,GAAkD;AAChE,WAAO;EAASA,CAAI;;EACtB;EAEA,UAAUC,GAAyC;AACjD,QAAM6F,KAAU,KAAK,OAAO,YAAY7F,EAAM,MAAM,GAC9CwF,IAAOxF,EAAM,SAAS,OAAO;AAInC,YAHYA,EAAM,QACd,IAAIwF,CAAI,WAAWxF,EAAM,KAAK,OAC9B,IAAIwF,CAAI,OACCK,KAAU,KAAKL,CAAI;;EAClC;EAKA,OAAO,EAAE,QAAA5E,EAAO,GAAkC;AAChD,WAAO,WAAW,KAAK,OAAO,YAAYA,CAAM,CAAC;EACnD;EAEA,GAAG,EAAE,QAAAA,EAAO,GAA8B;AACxC,WAAO,OAAO,KAAK,OAAO,YAAYA,CAAM,CAAC;EAC/C;EAEA,SAAS,EAAE,MAAAb,EAAK,GAAoC;AAClD,WAAO,SAASnE,EAAOmE,GAAM,IAAI,CAAC;EACpC;EAEA,GAAGC,GAAkC;AACnC,WAAO;EACT;EAEA,IAAI,EAAE,QAAAY,EAAO,GAA+B;AAC1C,WAAO,QAAQ,KAAK,OAAO,YAAYA,CAAM,CAAC;EAChD;EAEA,KAAK,EAAE,MAAAxC,GAAM,OAAA0B,IAAO,QAAAc,EAAO,GAAgC;AACzD,QAAMb,IAAO,KAAK,OAAO,YAAYa,CAAM,GACrCkF,IAAY3H,EAASC,CAAI;AAC/B,QAAI0H,MAAc,KAChB,QAAO/F;AAET3B,QAAO0H;AACP,QAAIC,IAAM,cAAc3H,IAAO;AAC/B,WAAI0B,OACFiG,KAAO,aAAcnK,EAAOkE,EAAK,IAAK,MAExCiG,KAAO,MAAMhG,IAAO,QACbgG;EACT;EAEA,MAAM,EAAE,MAAA3H,GAAM,OAAA0B,IAAO,MAAAC,GAAM,QAAAa,EAAO,GAAiC;AAC7DA,UACFb,IAAO,KAAK,OAAO,YAAYa,GAAQ,KAAK,OAAO,YAAY;AAEjE,QAAMkF,IAAY3H,EAASC,CAAI;AAC/B,QAAI0H,MAAc,KAChB,QAAOlK,EAAOmE,CAAI;AAEpB3B,QAAO0H;AAEP,QAAIC,IAAM,aAAa3H,CAAI,UAAU2B,CAAI;AACzC,WAAID,OACFiG,KAAO,WAAWnK,EAAOkE,EAAK,CAAC,MAEjCiG,KAAO,KACAA;EACT;EAEA,KAAK/F,GAAoD;AACvD,WAAO,YAAYA,KAASA,EAAM,SAC9B,KAAK,OAAO,YAAYA,EAAM,MAAM,IACnC,aAAaA,KAASA,EAAM,UAAUA,EAAM,OAAyBpE,EAAOoE,EAAM,IAAI;EAC7F;AACF;AC/LO,IAAMgG,IAAN,MAA6C;EAElD,OAAO,EAAE,MAAAjG,EAAK,GAAkC;AAC9C,WAAOA;EACT;EAEA,GAAG,EAAE,MAAAA,EAAK,GAA8B;AACtC,WAAOA;EACT;EAEA,SAAS,EAAE,MAAAA,EAAK,GAAoC;AAClD,WAAOA;EACT;EAEA,IAAI,EAAE,MAAAA,EAAK,GAA+B;AACxC,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAA6C;AACvD,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAA6D;AACvE,WAAOA;EACT;EAEA,KAAK,EAAE,MAAAA,EAAK,GAAgC;AAC1C,WAAO,KAAKA;EACd;EAEA,MAAM,EAAE,MAAAA,EAAK,GAAiC;AAC5C,WAAO,KAAKA;EACd;EAEA,KAAqB;AACnB,WAAO;EACT;EAEA,SAAS,EAAE,KAAAJ,EAAI,GAAoC;AACjD,WAAOA;EACT;AACF;ACtCO,IAAMsG,IAAN,MAAMC,GAAwD;EACnE;EACA;EACA;EACA,YAAY1F,GAAuD;AACjE,SAAK,UAAUA,KAAWnH,GAC1B,KAAK,QAAQ,WAAW,KAAK,QAAQ,YAAY,IAAI0L,KACrD,KAAK,WAAW,KAAK,QAAQ,UAC7B,KAAK,SAAS,UAAU,KAAK,SAC7B,KAAK,SAAS,SAAS,MACvB,KAAK,eAAe,IAAIiB;EAC1B;EAKA,OAAO,MAAsDpF,GAAiBJ,IAAuD;AAEnI,WADe,IAAI0F,GAAsC1F,EAAO,EAClD,MAAMI,CAAM;EAC5B;EAKA,OAAO,YAA4DA,GAAiBJ,IAAuD;AAEzI,WADe,IAAI0F,GAAsC1F,EAAO,EAClD,YAAYI,CAAM;EAClC;EAKA,MAAMA,GAA+B;AACnC,QAAImF,KAAM;AAEV,aAAShH,IAAI,GAAGA,IAAI6B,EAAO,QAAQ7B,KAAK;AACtC,UAAMoH,IAAWvF,EAAO7B,CAAC;AAGzB,UAAI,KAAK,QAAQ,YAAY,YAAYoH,EAAS,IAAI,GAAG;AACvD,YAAMC,IAAeD,GACfE,IAAM,KAAK,QAAQ,WAAW,UAAUD,EAAa,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,GAAGA,CAAY;AACpG,YAAIC,MAAQ,SAAS,CAAC,CAAC,SAAS,MAAM,WAAW,QAAQ,SAAS,cAAc,QAAQ,QAAQ,OAAO,aAAa,MAAM,EAAE,SAASD,EAAa,IAAI,GAAG;AACvJL,UAAAA,MAAOM,KAAO;AACd;QACF;MACF;AAEA,UAAMrG,IAAQmG;AAEd,cAAQnG,EAAM,MAAM;QAClB,KAAK,SAAS;AACZ+F,UAAAA,MAAO,KAAK,SAAS,MAAM/F,CAAK;AAChC;QACF;QACA,KAAK,MAAM;AACT+F,UAAAA,MAAO,KAAK,SAAS,GAAG/F,CAAK;AAC7B;QACF;QACA,KAAK,WAAW;AACd+F,UAAAA,MAAO,KAAK,SAAS,QAAQ/F,CAAK;AAClC;QACF;QACA,KAAK,QAAQ;AACX+F,UAAAA,MAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,SAAS;AACZ+F,UAAAA,MAAO,KAAK,SAAS,MAAM/F,CAAK;AAChC;QACF;QACA,KAAK,cAAc;AACjB+F,UAAAA,MAAO,KAAK,SAAS,WAAW/F,CAAK;AACrC;QACF;QACA,KAAK,QAAQ;AACX+F,UAAAA,MAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,YAAY;AACf+F,UAAAA,MAAO,KAAK,SAAS,SAAS/F,CAAK;AACnC;QACF;QACA,KAAK,QAAQ;AACX+F,UAAAA,MAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QACA,KAAK,OAAO;AACV+F,UAAAA,MAAO,KAAK,SAAS,IAAI/F,CAAK;AAC9B;QACF;QACA,KAAK,aAAa;AAChB+F,UAAAA,MAAO,KAAK,SAAS,UAAU/F,CAAK;AACpC;QACF;QACA,KAAK,QAAQ;AACX+F,UAAAA,MAAO,KAAK,SAAS,KAAK/F,CAAK;AAC/B;QACF;QAEA,SAAS;AACP,cAAM6E,IAAS,iBAAiB7E,EAAM,OAAO;AAC7C,cAAI,KAAK,QAAQ,OACf,QAAA,QAAQ,MAAM6E,CAAM,GACb;AAEP,gBAAM,IAAI,MAAMA,CAAM;QAE1B;MACF;IACF;AAEA,WAAOkB;EACT;EAKA,YAAYnF,GAAiB0F,KAAoF,KAAK,UAAwB;AAC5I,QAAIP,IAAM;AAEV,aAAShH,IAAI,GAAGA,IAAI6B,EAAO,QAAQ7B,KAAK;AACtC,UAAMoH,IAAWvF,EAAO7B,CAAC;AAGzB,UAAI,KAAK,QAAQ,YAAY,YAAYoH,EAAS,IAAI,GAAG;AACvD,YAAME,IAAM,KAAK,QAAQ,WAAW,UAAUF,EAAS,IAAI,EAAE,KAAK,EAAE,QAAQ,KAAK,GAAGA,CAAQ;AAC5F,YAAIE,MAAQ,SAAS,CAAC,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM,EAAE,SAASF,EAAS,IAAI,GAAG;AAClIJ,eAAOM,KAAO;AACd;QACF;MACF;AAEA,UAAMrG,IAAQmG;AAEd,cAAQnG,EAAM,MAAM;QAClB,KAAK,UAAU;AACb+F,eAAOO,GAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,GAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,GAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,KAAK,SAAS;AACZ+F,eAAOO,GAAS,MAAMtG,CAAK;AAC3B;QACF;QACA,KAAK,YAAY;AACf+F,eAAOO,GAAS,SAAStG,CAAK;AAC9B;QACF;QACA,KAAK,UAAU;AACb+F,eAAOO,GAAS,OAAOtG,CAAK;AAC5B;QACF;QACA,KAAK,MAAM;AACT+F,eAAOO,GAAS,GAAGtG,CAAK;AACxB;QACF;QACA,KAAK,YAAY;AACf+F,eAAOO,GAAS,SAAStG,CAAK;AAC9B;QACF;QACA,KAAK,MAAM;AACT+F,eAAOO,GAAS,GAAGtG,CAAK;AACxB;QACF;QACA,KAAK,OAAO;AACV+F,eAAOO,GAAS,IAAItG,CAAK;AACzB;QACF;QACA,KAAK,QAAQ;AACX+F,eAAOO,GAAS,KAAKtG,CAAK;AAC1B;QACF;QACA,SAAS;AACP,cAAM6E,IAAS,iBAAiB7E,EAAM,OAAO;AAC7C,cAAI,KAAK,QAAQ,OACf,QAAA,QAAQ,MAAM6E,CAAM,GACb;AAEP,gBAAM,IAAI,MAAMA,CAAM;QAE1B;MACF;IACF;AACA,WAAOkB;EACT;AACF;ACpMO,IAAMQ,IAAN,MAA6D;EAClE;EACA;EAEA,YAAY/F,GAAuD;AACjE,SAAK,UAAUA,KAAWnH;EAC5B;EAEA,OAAO,mBAAmB,oBAAI,IAAI,CAChC,cACA,eACA,oBACA,cACF,CAAC;EAED,OAAO,+BAA+B,oBAAI,IAAI,CAC5C,cACA,eACA,kBACF,CAAC;EAKD,WAAWmN,GAAkB;AAC3B,WAAOA;EACT;EAKA,YAAYnL,GAAoB;AAC9B,WAAOA;EACT;EAKA,iBAAiBuF,GAA8B;AAC7C,WAAOA;EACT;EAKA,aAAaH,GAAa;AACxB,WAAOA;EACT;EAKA,eAAe;AACb,WAAO,KAAK,QAAQ0D,EAAO,MAAMA,EAAO;EAC1C;EAKA,gBAAgB;AACd,WAAO,KAAK,QAAQ8B,EAAQ,QAAsCA,EAAQ;EAC5E;AACF;ACpDO,IAAMQ,IAAN,MAA6D;EAClE,WAAWrN,EAA2C;EACtD,UAAU,KAAK;EAEf,QAAQ,KAAK,cAAc,IAAI;EAC/B,cAAc,KAAK,cAAc,KAAK;EAEtC,SAAS6M;EACT,WAAWlB;EACX,eAAeiB;EACf,QAAQ7B;EACR,YAAY5D;EACZ,QAAQgG;EAER,eAAeG,GAAuD;AACpE,SAAK,IAAI,GAAGA,CAAI;EAClB;EAKA,WAAW9F,GAA8B+F,IAA2D;AAClG,QAAIC,IAAyB,CAAC;AAC9B,aAAW5G,KAASY,EAElB,SADAgG,IAASA,EAAO,OAAOD,GAAS,KAAK,MAAM3G,CAAK,CAAC,GACzCA,EAAM,MAAM;MAClB,KAAK,SAAS;AACZ,YAAM6G,IAAa7G;AACnB,iBAAWgD,KAAQ6D,EAAW,OAC5BD,KAASA,EAAO,OAAO,KAAK,WAAW5D,EAAK,QAAQ2D,EAAQ,CAAC;AAE/D,iBAAWnI,KAAOqI,EAAW,KAC3B,UAAW7D,KAAQxE,EACjBoI,KAASA,EAAO,OAAO,KAAK,WAAW5D,EAAK,QAAQ2D,EAAQ,CAAC;AAGjE;MACF;MACA,KAAK,QAAQ;AACX,YAAMG,IAAY9G;AAClB4G,YAASA,EAAO,OAAO,KAAK,WAAWE,EAAU,OAAOH,EAAQ,CAAC;AACjE;MACF;MACA,SAAS;AACP,YAAMP,IAAepG;AACjB,aAAK,SAAS,YAAY,cAAcoG,EAAa,IAAI,IAC3D,KAAK,SAAS,WAAW,YAAYA,EAAa,IAAI,EAAE,QAASW,OAAgB;AAC/E,cAAMnG,IAASwF,EAAaW,CAAW,EAAE,KAAK,IAAA,CAAQ;AACtDH,cAASA,EAAO,OAAO,KAAK,WAAWhG,GAAQ+F,EAAQ,CAAC;QAC1D,CAAC,IACQP,EAAa,WACtBQ,IAASA,EAAO,OAAO,KAAK,WAAWR,EAAa,QAAQO,EAAQ,CAAC;MAEzE;IACF;AAEF,WAAOC;EACT;EAEA,OAAOF,GAAuD;AAC5D,QAAMM,KAAwE,KAAK,SAAS,cAAc,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,EAAE;AAE3I,WAAAN,EAAK,QAASO,OAAS;AAErB,UAAMC,IAAO,EAAE,GAAGD,EAAK;AA4DvB,UAzDAC,EAAK,QAAQ,KAAK,SAAS,SAASA,EAAK,SAAS,OAG9CD,EAAK,eACPA,EAAK,WAAW,QAASE,OAAQ;AAC/B,YAAI,CAACA,EAAI,KACP,OAAM,IAAI,MAAM,yBAAyB;AAE3C,YAAI,cAAcA,GAAK;AACrB,cAAMC,IAAeJ,GAAW,UAAUG,EAAI,IAAI;AAC9CC,cAEFJ,GAAW,UAAUG,EAAI,IAAI,IAAI,YAAYT,GAAM;AACjD,gBAAIL,IAAMc,EAAI,SAAS,MAAM,MAAMT,CAAI;AACvC,mBAAIL,MAAQ,UACVA,IAAMe,EAAa,MAAM,MAAMV,CAAI,IAE9BL;UACT,IAEAW,GAAW,UAAUG,EAAI,IAAI,IAAIA,EAAI;QAEzC;AACA,YAAI,eAAeA,GAAK;AACtB,cAAI,CAACA,EAAI,SAAUA,EAAI,UAAU,WAAWA,EAAI,UAAU,SACxD,OAAM,IAAI,MAAM,6CAA6C;AAE/D,cAAME,IAAWL,GAAWG,EAAI,KAAK;AACjCE,cACFA,EAAS,QAAQF,EAAI,SAAS,IAE9BH,GAAWG,EAAI,KAAK,IAAI,CAACA,EAAI,SAAS,GAEpCA,EAAI,UACFA,EAAI,UAAU,UACZH,GAAW,aACbA,GAAW,WAAW,KAAKG,EAAI,KAAK,IAEpCH,GAAW,aAAa,CAACG,EAAI,KAAK,IAE3BA,EAAI,UAAU,aACnBH,GAAW,cACbA,GAAW,YAAY,KAAKG,EAAI,KAAK,IAErCH,GAAW,cAAc,CAACG,EAAI,KAAK;QAI3C;AACI,yBAAiBA,KAAOA,EAAI,gBAC9BH,GAAW,YAAYG,EAAI,IAAI,IAAIA,EAAI;MAE3C,CAAC,GACDD,EAAK,aAAaF,KAIhBC,EAAK,UAAU;AACjB,YAAMX,IAAW,KAAK,SAAS,YAAY,IAAIvB,EAAwC,KAAK,QAAQ;AACpG,iBAAWuC,KAAQL,EAAK,UAAU;AAChC,cAAI,EAAEK,KAAQhB,GACZ,OAAM,IAAI,MAAM,aAAagB,CAAI,kBAAkB;AAErD,cAAI,CAAC,WAAW,QAAQ,EAAE,SAASA,CAAI,EAErC;AAEF,cAAMC,IAAeD,GACfE,IAAeP,EAAK,SAASM,CAAY,GACzCH,IAAed,EAASiB,CAAY;AAE1CjB,YAASiB,CAAY,IAAI,IAAIb,MAAoB;AAC/C,gBAAIL,IAAMmB,EAAa,MAAMlB,GAAUI,CAAI;AAC3C,mBAAIL,MAAQ,UACVA,IAAMe,EAAa,MAAMd,GAAUI,CAAI,IAEjCL,KAAO;UACjB;QACF;AACAa,UAAK,WAAWZ;MAClB;AACA,UAAIW,EAAK,WAAW;AAClB,YAAMQ,IAAY,KAAK,SAAS,aAAa,IAAIlH,EAAyC,KAAK,QAAQ;AACvG,iBAAW+G,KAAQL,EAAK,WAAW;AACjC,cAAI,EAAEK,KAAQG,GACZ,OAAM,IAAI,MAAM,cAAcH,CAAI,kBAAkB;AAEtD,cAAI,CAAC,WAAW,SAAS,OAAO,EAAE,SAASA,CAAI,EAE7C;AAEF,cAAMI,IAAgBJ,GAChBK,IAAgBV,EAAK,UAAUS,CAAa,GAC5CE,IAAgBH,EAAUC,CAAa;AAG7CD,YAAUC,CAAa,IAAI,IAAIhB,MAAoB;AACjD,gBAAIL,IAAMsB,EAAc,MAAMF,GAAWf,CAAI;AAC7C,mBAAIL,MAAQ,UACVA,IAAMuB,EAAc,MAAMH,GAAWf,CAAI,IAEpCL;UACT;QACF;AACAa,UAAK,YAAYO;MACnB;AAGA,UAAIR,EAAK,OAAO;AACd,YAAMY,IAAQ,KAAK,SAAS,SAAS,IAAItB;AACzC,iBAAWe,KAAQL,EAAK,OAAO;AAC7B,cAAI,EAAEK,KAAQO,GACZ,OAAM,IAAI,MAAM,SAASP,CAAI,kBAAkB;AAEjD,cAAI,CAAC,WAAW,OAAO,EAAE,SAASA,CAAI,EAEpC;AAEF,cAAMQ,IAAYR,GACZS,IAAYd,EAAK,MAAMa,CAAS,GAChCE,IAAWH,EAAMC,CAAS;AAC5BvB,YAAO,iBAAiB,IAAIe,CAAI,IAElCO,EAAMC,CAAS,IAAKG,OAAiB;AACnC,gBAAI,KAAK,SAAS,SAAS1B,EAAO,6BAA6B,IAAIe,CAAI,EACrE,SAAQ,YAAW;AACjB,kBAAMjB,IAAM,MAAM0B,EAAU,KAAKF,GAAOI,CAAG;AAC3C,qBAAOD,EAAS,KAAKH,GAAOxB,CAAG;YACjC,GAAG;AAGL,gBAAMA,IAAM0B,EAAU,KAAKF,GAAOI,CAAG;AACrC,mBAAOD,EAAS,KAAKH,GAAOxB,CAAG;UACjC,IAGAwB,EAAMC,CAAS,IAAI,IAAIpB,MAAoB;AACzC,gBAAI,KAAK,SAAS,MAChB,SAAQ,YAAW;AACjB,kBAAIL,IAAM,MAAM0B,EAAU,MAAMF,GAAOnB,CAAI;AAC3C,qBAAIL,MAAQ,UACVA,IAAM,MAAM2B,EAAS,MAAMH,GAAOnB,CAAI,IAEjCL;YACT,GAAG;AAGL,gBAAIA,IAAM0B,EAAU,MAAMF,GAAOnB,CAAI;AACrC,mBAAIL,MAAQ,UACVA,IAAM2B,EAAS,MAAMH,GAAOnB,CAAI,IAE3BL;UACT;QAEJ;AACAa,UAAK,QAAQW;MACf;AAGA,UAAIZ,EAAK,YAAY;AACnB,YAAMiB,IAAa,KAAK,SAAS,YAC3BC,IAAiBlB,EAAK;AAC5BC,UAAK,aAAa,SAASlH,GAAO;AAChC,cAAI4G,IAAyB,CAAC;AAC9B,iBAAAA,EAAO,KAAKuB,EAAe,KAAK,MAAMnI,CAAK,CAAC,GACxCkI,MACFtB,IAASA,EAAO,OAAOsB,EAAW,KAAK,MAAMlI,CAAK,CAAC,IAE9C4G;QACT;MACF;AAEA,WAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGM,EAAK;IAC9C,CAAC,GAEM;EACT;EAEA,WAAWvN,GAAkD;AAC3D,WAAA,KAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGA,EAAI,GACpC;EACT;EAEA,MAAM8G,GAAaD,IAAuD;AACxE,WAAO2D,EAAO,IAAI1D,GAAKD,MAAW,KAAK,QAAQ;EACjD;EAEA,OAAOI,GAAiBJ,IAAuD;AAC7E,WAAOyF,EAAQ,MAAoCrF,GAAQJ,MAAW,KAAK,QAAQ;EACrF;EAEQ,cAAc4H,GAAoB;AAuExC,WA/D+B,CAAC3H,GAAaD,MAAsE;AACjH,UAAM6H,IAAU,EAAE,GAAG7H,EAAQ,GACvB7G,IAAM,EAAE,GAAG,KAAK,UAAU,GAAG0O,EAAQ,GAErCC,IAAa,KAAK,QAAQ,CAAC,CAAC3O,EAAI,QAAQ,CAAC,CAACA,EAAI,KAAK;AAGzD,UAAI,KAAK,SAAS,UAAU,QAAQ0O,EAAQ,UAAU,MACpD,QAAOC,EAAW,IAAI,MAAM,oIAAoI,CAAC;AAInK,UAAI,OAAO7H,IAAQ,OAAeA,MAAQ,KACxC,QAAO6H,EAAW,IAAI,MAAM,gDAAgD,CAAC;AAE/E,UAAI,OAAO7H,KAAQ,SACjB,QAAO6H,EAAW,IAAI,MAAM,0CACxB,OAAO,UAAU,SAAS,KAAK7H,CAAG,IAAI,mBAAmB,CAAC;AAQhE,UALI9G,EAAI,UACNA,EAAI,MAAM,UAAUA,GACpBA,EAAI,MAAM,QAAQyO,IAGhBzO,EAAI,MACN,SAAQ,YAAW;AACjB,YAAM4O,IAAe5O,EAAI,QAAQ,MAAMA,EAAI,MAAM,WAAW8G,CAAG,IAAIA,GAE7DG,IAAS,OADDjH,EAAI,QAAQ,MAAMA,EAAI,MAAM,aAAa,IAAKyO,IAAYjE,EAAO,MAAMA,EAAO,WACjEoE,GAAc5O,CAAG,GACtC6O,IAAkB7O,EAAI,QAAQ,MAAMA,EAAI,MAAM,iBAAiBiH,CAAM,IAAIA;AAC3EjH,UAAI,cACN,MAAM,QAAQ,IAAI,KAAK,WAAW6O,GAAiB7O,EAAI,UAAU,CAAC;AAGpE,YAAM0B,KAAO,OADE1B,EAAI,QAAQ,MAAMA,EAAI,MAAM,cAAc,IAAKyO,IAAYnC,EAAQ,QAAQA,EAAQ,aACxEuC,GAAiB7O,CAAG;AAC9C,eAAOA,EAAI,QAAQ,MAAMA,EAAI,MAAM,YAAY0B,EAAI,IAAIA;MACzD,GAAG,EAAE,MAAMiN,CAAU;AAGvB,UAAI;AACE3O,UAAI,UACN8G,IAAM9G,EAAI,MAAM,WAAW8G,CAAG;AAGhC,YAAIG,KADUjH,EAAI,QAAQA,EAAI,MAAM,aAAa,IAAKyO,IAAYjE,EAAO,MAAMA,EAAO,WACnE1D,GAAK9G,CAAG;AACvBA,UAAI,UACNiH,IAASjH,EAAI,MAAM,iBAAiBiH,CAAM,IAExCjH,EAAI,cACN,KAAK,WAAWiH,GAAQjH,EAAI,UAAU;AAGxC,YAAI0B,KADW1B,EAAI,QAAQA,EAAI,MAAM,cAAc,IAAKyO,IAAYnC,EAAQ,QAAQA,EAAQ,aAC1ErF,GAAQjH,CAAG;AAC7B,eAAIA,EAAI,UACN0B,IAAO1B,EAAI,MAAM,YAAY0B,CAAI,IAE5BA;MACT,SAAQoN,GAAG;AACT,eAAOH,EAAWG,CAAU;MAC9B;IACF;EAGF;EAEQ,QAAQC,GAAiBC,IAAgB;AAC/C,WAAQF,OAAuC;AAG7C,UAFAA,EAAE,WAAW;4DAETC,GAAQ;AACV,YAAME,IAAM,mCACRhN,EAAO6M,EAAE,UAAU,IAAI,IAAI,IAC3B;AACJ,eAAIE,KACK,QAAQ,QAAQC,CAAG,IAErBA;MACT;AAEA,UAAID,GACF,QAAO,QAAQ,OAAOF,CAAC;AAEzB,YAAMA;IACR;EACF;AACF;AChWA,IAAMI,IAAiB,IAAIpC;AAqBpB,SAASqC,EAAOrI,IAAa9G,GAAsD;AACxF,SAAOkP,EAAe,MAAMpI,IAAK9G,CAAG;AACtC;AAOAmP,EAAO,UACLA,EAAO,aAAa,SAAStI,IAAwB;AACnD,SAAAqI,EAAe,WAAWrI,EAAO,GACjCsI,EAAO,WAAWD,EAAe,UACjCvP,EAAewP,EAAO,QAAQ,GACvBA;AACT;AAKFA,EAAO,cAAc1P;AAErB0P,EAAO,WAAWzP;AAMlByP,EAAO,MAAM,YAAYpC,IAAyB;AAChD,SAAAmC,EAAe,IAAI,GAAGnC,EAAI,GAC1BoC,EAAO,WAAWD,EAAe,UACjCvP,EAAewP,EAAO,QAAQ,GACvBA;AACT;AAMAA,EAAO,aAAa,SAASlI,IAA8B+F,GAA2D;AACpH,SAAOkC,EAAe,WAAWjI,IAAQ+F,CAAQ;AACnD;AASAmC,EAAO,cAAcD,EAAe;AAKpCC,EAAO,SAAS7C;AAChB6C,EAAO,SAAS7C,EAAQ;AACxB6C,EAAO,WAAW/D;AAClB+D,EAAO,eAAe9C;AACtB8C,EAAO,QAAQ3E;AACf2E,EAAO,QAAQ3E,EAAO;AACtB2E,EAAO,YAAYvI;AACnBuI,EAAO,QAAQvC;AACfuC,EAAO,QAAQA;AAER,IAAMtI,KAAUsI,EAAO;AAAvB,IACMC,KAAaD,EAAO;AAD1B,IAEME,KAAMF,EAAO;AAFnB,IAGMZ,KAAaY,EAAO;AAH1B,IAIMG,KAAcH,EAAO;AAJ3B,IAMMI,KAASC,EAAQ;AANvB,IAOMC,KAAQC,EAAO;;;ACnG5B,IAAM,8BAA8B,KAAK,QAAQ,SAAS;AAC1D,IAAM,8BAA8B,KAAK,QAAQ,SAAS;;;ACyhB1D,IAAI,OAAO,WAAW,QAAQ,aAAa;AACzC,QAAM,UAAU;AAChB,MAAI;AACF,UAAM,OAAO;AAAA,EACf,QAAQ;AAAA,EAGR;AACF;;;ACnaO,SAAS,8BACd,iBACA,QACA,QAC6B;AAC7B,MAAI,CAAC,iBAAiB,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,SAAS,gBAAgB,OAAO,IAAI;AAAA,IACpC,SAAS,gBAAgB,OAAO,IAAI;AAAA,IACpC,QAAQ,gBAAgB,MAAM,IAAI;AAAA,IAClC,QAAQ,gBAAgB,MAAM,IAAI;AAAA,IAClC,UAAU;AAAA,EACZ;AACF;;;ACrJO,IAAM,oBAAN,cAAgC,aAAa;AAAA,EAClD,cAAc;AACZ,UAAM;AAAA,EACR;AAAA,EAEA,aAAa,OAAwB;AACnC,WAAO;AAAA,EACT;AACF;AAEO,IAAM,4BAAN,cAAwC,kBAAkB;AAAA,EACvD,qBAAiD,oBAAI,IAAI;AAAA,EAEjE,WAAW,OAAe,SAAyB;AACjD,QAAI,CAAC,KAAK,mBAAmB,IAAI,KAAK,GAAG;AACvC,WAAK,mBAAmB,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,IAC9C;AACA,SAAK,mBAAmB,IAAI,KAAK,EAAG,IAAI,OAAO;AAAA,EACjD;AAAA,EAEA,YAAY,OAAe,SAAyB;AAClD,UAAM,WAAW,KAAK,mBAAmB,IAAI,KAAK;AAClD,QAAI,UAAU;AACZ,eAAS,OAAO,OAAO;AAAA,IACzB;AAAA,EACF;AAAA,EAES,KAAK,UAAkB,MAAsB;AAEpD,UAAM,YAAY,MAAM,KAAK,OAAO,GAAG,IAAI;AAG3C,UAAM,gBAAgB,KAAK,mBAAmB,IAAI,KAAK;AACvD,QAAI,iBAAiB,cAAc,OAAO,GAAG;AAC3C,iBAAW,WAAW,CAAC,GAAG,aAAa,GAAG;AACxC,YAAI;AACF,kBAAQ,GAAG,IAAI;AAAA,QACjB,SAAS,GAAG;AACV,kBAAQ,MAAM,wCAAwC,KAAK,aAAa,CAAC;AAAA,QAC3E;AAEA,YAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,mBAAoB;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAN,cAAmC,aAAsC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,mBAAwC;AAAA,EACxC,mBAA6B,oBAAI,IAAI;AAAA,EACrC,qBAAiC;AAAA,EAClC,cAA2B;AAAA,EAC3B,kBAA+B;AAAA,EAC/B,iBAA0B;AAAA,EAE1B;AAAA,EACA;AAAA,EAEP,YAAY,OAAe,QAAgB,cAA2B,WAAW;AAC/E,UAAM;AACN,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,WAAW,IAAI,kBAAkB;AACtC,SAAK,oBAAoB,IAAI,0BAA0B;AAAA,EACzD;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAoB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,eAAwB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,2BAAuC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,mBAAmB,UAA4B;AAC7C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,OAAO,OAAe,QAAsB;AAC1C,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,OAAO,MAAM;AAAA,EACnC;AAAA;AAAA,EAGA,aAAa,IAAY,IAAY,QAAgB,SAAiB,KAAmB;AAAA,EAAC;AAAA,EAE1F,uBAAuB,IAAY,IAAY,QAAgB,SAAuB;AAAA,EAAC;AAAA,EAEvF,wBAA8B;AAAA,EAAC;AAAA,EAE/B,2BAAiC;AAAA,EAAC;AAAA,EAElC,gBAAsB;AACpB,QAAI,KAAK,iBAAkB;AAC3B,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,kBAAkB,IAAY,IAAY,UAAyB;AAAA,EAAC;AAAA,EAEpE,eAAe,SAAmC;AAChD,QAAI,QAAQ,OAAO;AACjB,WAAK,cAAc,QAAQ;AAAA,IAC7B;AACA,QAAI,QAAQ,OAAO;AACjB,WAAK,kBAAkB,QAAQ;AAAA,IACjC;AACA,QAAI,QAAQ,aAAa,QAAW;AAClC,WAAK,iBAAiB,QAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,eAAe,OAAmB;AAChC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,gBAAgB,QAAiC;AAAA,EAAC;AAAA,EAElD,cAAoB;AAAA,EAAC;AAAA,EAErB,WAAiB;AAAA,EAAC;AAAA,EAElB,eAA2B;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,yBAA+B;AAAA,EAAC;AAAA,EAEhC,gBAAgB,YAAuB;AACrC,QAAI,KAAK,sBAAsB,KAAK,uBAAuB,YAAY;AACrE,WAAK,mBAAmB,OAAO;AAAA,IACjC;AACA,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,sBAAsB,YAAuB;AAC3C,SAAK,iBAAiB,IAAI,UAAU;AAAA,EACtC;AAAA,EAEA,wBAAwB,YAAuB;AAC7C,SAAK,iBAAiB,OAAO,UAAU;AAAA,EACzC;AAAA,EAEA,qBAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAuB;AAAA,EAAC;AAAA,EAExB,eAAe,aAAkB,IAAY,IAAkB;AAAA,EAAC;AAAA,EAEhE,gBACE,oBACA,IACA,IACA,UACM;AAAA,EAAC;AACX;;;AC1LA,IAAIC,aAAY,MAAM;AACpB,MAAI,aAAa,YAAY;AAE7B,UACF,SAASA,WAAU;AACjB,IAAAA,YAAWA,aAAY,CAAC;AAG1B,QAAIC;AAAE,IAAAA,OAAIA,KAAE,OAAOD,cAAa,cAAcA,YAAW,CAAC;AAAG,QAAI,IAAG;AAAG,IAAAC,GAAE,QAAM,IAAI,QAAQ,SAAS,GAAEC,IAAE;AAAC,WAAG;AAAE,WAAGA;AAAA,IAAC,CAAC;AAAE,QAAI,KAAG,OAAO,OAAO,CAAC,GAAED,EAAC,GAAEE,KAAE;AAAG,mBAAa,OAAO,YAAU,SAAS,kBAAgBA,KAAE,SAAS,cAAc;AAAK,mBAAaA,KAAE;AAAY,UAAIA,GAAE,QAAQ,OAAO,IAAEA,KAAEA,GAAE,OAAO,GAAEA,GAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAEA,KAAE;AAAG,QAAI,KAAGF,GAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAEG,KAAEH,GAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAE,WAAO,OAAOA,IAAE,EAAE;AAAE,SAAG;AAAK,QAAII;AAAE,IAAAJ,GAAE,eAAaI,KAAEJ,GAAE;AACje,QAAI,gBAAcA,GAAE,iBAAe;AAAG,gBAAU,OAAO,eAAaK,GAAE,iCAAiC;AAAE,QAAI,IAAG,KAAG;AAAG,aAASC,GAAE,GAAEL,IAAE,GAAE;AAAC,UAAEA,KAAE;AAAE,eAAQM,KAAE,IAAG,EAAEN,MAAG,MAAI;AAAC,YAAI,IAAE,EAAEA,IAAG;AAAE,YAAG,CAAC,EAAE;AAAM,YAAG,IAAE,KAAI;AAAC,cAAI,IAAE,EAAEA,IAAG,IAAE;AAAG,cAAG,QAAM,IAAE,KAAK,CAAAM,MAAG,OAAO,cAAc,IAAE,OAAK,IAAE,CAAC;AAAA,eAAM;AAAC,gBAAI,IAAE,EAAEN,IAAG,IAAE;AAAG,gBAAE,QAAM,IAAE,QAAM,IAAE,OAAK,KAAG,KAAG,IAAE,KAAG,IAAE,MAAI,KAAG,KAAG,KAAG,KAAG,IAAE,EAAEA,IAAG,IAAE;AAAG,oBAAM,IAAEM,MAAG,OAAO,aAAa,CAAC,KAAG,KAAG,OAAMA,MAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI;AAAA,UAAE;AAAA,QAAC,MAAM,CAAAA,MAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AACve,QAAI,IAAG,IAAG,GAAEC,IAAE,IAAGC,IAAEC,IAAE,IAAG;AAAG,aAAS,KAAI;AAAC,UAAI,IAAE,GAAG;AAAO,WAAG;AAAE,MAAAV,GAAE,QAAM,KAAG,IAAI,UAAU,CAAC;AAAE,MAAAA,GAAE,SAAOQ,KAAE,IAAI,WAAW,CAAC;AAAE,MAAAR,GAAE,SAAOS,KAAE,IAAI,WAAW,CAAC;AAAE,MAAAT,GAAE,SAAO,IAAE,IAAI,WAAW,CAAC;AAAE,MAAAA,GAAE,UAAQ,KAAG,IAAI,YAAY,CAAC;AAAE,MAAAA,GAAE,UAAQU,KAAE,IAAI,YAAY,CAAC;AAAE,MAAAV,GAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAE,MAAAA,GAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,IAAC;AAAC,QAAI,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,KAAI;AAAC,UAAI,IAAEA,GAAE,OAAO,MAAM;AAAE,SAAG,QAAQ,CAAC;AAAA,IAAC;AAAC,QAAIW,KAAE,GAAE,KAAG,MAAKC,KAAE;AAChZ,aAASP,GAAE,GAAE;AAAC,UAAGL,GAAE,QAAQ,CAAAA,GAAE,QAAQ,CAAC;AAAE,UAAE,aAAW,IAAE;AAAI,MAAAG,GAAE,CAAC;AAAE,WAAG;AAAG,UAAE,IAAI,YAAY,aAAa,IAAE,0CAA0C;AAAE,SAAG,CAAC;AAAE,YAAM;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,EAAE,WAAW,uCAAuC;AAAA,IAAC;AAAC,QAAI;AAAE,QAAE;AAAw86F,QAAG,CAAC,GAAG,CAAC,GAAE;AAAC,UAAI,KAAG;AAAE,UAAEH,GAAE,aAAWA,GAAE,WAAW,IAAGE,EAAC,IAAEA,KAAE;AAAA,IAAE;AACxv7F,aAAS,KAAI;AAAC,UAAI,IAAE;AAAE,UAAG;AAAC,YAAG,KAAG,KAAGE,GAAE,QAAO,IAAI,WAAWA,EAAC;AAAE,YAAG,GAAG,CAAC,EAAE,KAAG;AAAC,cAAIH,KAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,IAAI,WAAWA,GAAE,MAAM;AAAE,eAAI,IAAE,GAAE,IAAEA,GAAE,QAAO,EAAE,EAAE,GAAE,CAAC,IAAEA,GAAE,WAAW,CAAC;AAAE,cAAIM,KAAE;AAAA,QAAC,SAAO,GAAE;AAAC,gBAAM,MAAM,2CAA2C;AAAA,QAAE;AAAA,YAAM,CAAAA,KAAE;AAAO,YAAI,IAAEA;AAAE,YAAG,EAAE,QAAO;AAAE,cAAK;AAAA,MAAkD,SAAO,GAAE;AAAC,QAAAF,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAC7V,aAAS,KAAI;AAAC,aAAOD,MAAG,cAAY,OAAO,QAAM,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,eAAO,GAAG;AAAA,MAAC,CAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,YAAG,CAAC,EAAE,GAAG,OAAK,yCAAuC,IAAE;AAAI,eAAO,EAAE,YAAY;AAAA,MAAC,CAAC,EAAE,MAAM,WAAU;AAAC,eAAO,GAAG;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAK,IAAE,EAAE,SAAQ,GAAE,MAAM,EAAEJ,EAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,UAAG,WAAS,EAAE,QAAM;AAAW,UAAE,EAAE,QAAQ,kBAAiB,GAAG;AAAE,UAAIC,KAAE,EAAE,WAAW,CAAC;AAAE,aAAO,MAAIA,MAAG,MAAIA,KAAE,MAAI,IAAE;AAAA,IAAC;AACxb,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAE,GAAG,CAAC;AAAE,aAAO,WAAU;AAAC,eAAOA,GAAE,MAAM,MAAK,SAAS;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIY,KAAE,CAAC,CAAC,GAAE,EAAC,OAAM,OAAM,GAAE,EAAC,OAAM,KAAI,GAAE,EAAC,OAAM,KAAE,GAAE,EAAC,OAAM,MAAE,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIZ,KAAE,OAAM,IAAE,GAAG,GAAE,SAASM,IAAE;AAAC,aAAK,OAAK;AAAE,aAAK,UAAQA;AAAE,QAAAA,KAAE,MAAMA,EAAC,EAAE;AAAM,mBAASA,OAAI,KAAK,QAAM,KAAK,SAAS,IAAE,OAAKA,GAAE,QAAQ,sBAAqB,EAAE;AAAA,MAAE,CAAC;AAAE,QAAE,YAAU,OAAO,OAAON,GAAE,SAAS;AAAE,QAAE,UAAU,cAAY;AAAE,QAAE,UAAU,WAAS,WAAU;AAAC,eAAO,WAAS,KAAK,UAAQ,KAAK,OAAK,KAAK,OAAK,OAAK,KAAK;AAAA,MAAO;AAAE,aAAO;AAAA,IAAC;AAAC,QAAIa,KAAE;AAC/e,aAASC,GAAE,GAAE;AAAC,YAAM,IAAID,GAAE,CAAC;AAAA,IAAE;AAAC,QAAIE,KAAE,OAAG;AAAC,WAAGD,GAAE,sCAAoC,CAAC;AAAE,aAAOF,GAAE,CAAC,EAAE;AAAA,IAAK,GAAE,KAAG,OAAG;AAAC,cAAO,GAAE;AAAA,QAAC,KAAK;AAAO,iBAAO;AAAA,QAAE,KAAK;AAAK,iBAAO;AAAA,QAAE,KAAK;AAAG,iBAAO;AAAA,QAAE,KAAK;AAAG,iBAAO;AAAA,QAAE;AAAQ,cAAIZ,KAAE,GAAG,SAAO,GAAG,IAAI,IAAEY,GAAE;AAAO,UAAAA,GAAEZ,EAAC,IAAE,EAAC,IAAG,GAAE,OAAM,EAAC;AAAE,iBAAOA;AAAA,MAAC;AAAA,IAAC,GAAE,KAAG,QAAO,KAAG;AAAO,aAASgB,GAAE,GAAE;AAAC,eAAQhB,KAAE,IAAG,EAAE,CAAC,IAAG,CAAAA,MAAG,GAAG,EAAE,GAAG,CAAC;AAAE,aAAOA;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC;AAAE,aAAS,KAAI;AAAC,aAAK,EAAE,UAAQ;AAAC,YAAI,IAAE,EAAE,IAAI;AAAE,UAAE,EAAE,IAAE;AAAG,UAAE,QAAQ,EAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIiB,KAAE,QAAOC,KAAE,CAAC;AACpb,aAAS,GAAG,GAAElB,IAAE;AAAC,WAAI,WAASA,MAAGc,GAAE,6BAA6B,GAAE,EAAE,IAAG,CAAAd,KAAE,EAAE,GAAGA,EAAC,GAAE,IAAE,EAAE;AAAE,aAAOA;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAE,GAAG,CAAC;AAAE,UAAIA,KAAEgB,GAAE,CAAC;AAAE,MAAAG,GAAE,CAAC;AAAE,aAAOnB;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,iBAAS,KAAGc,GAAEd,KAAE,uBAAqB,GAAG,CAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,KAAI;AAAA,IAAC;AAAC,QAAI,KAAG;AAAG,aAAS,GAAG,GAAE;AAAC,QAAE,EAAE,MAAM;AAAM,YAAI,EAAE,MAAM,UAAQ,EAAE,IAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAEA,IAAE,GAAE;AAAC,UAAGA,OAAI,EAAE,QAAO;AAAE,UAAG,WAAS,EAAE,EAAE,QAAO;AAAK,UAAE,GAAG,GAAEA,IAAE,EAAE,CAAC;AAAE,aAAO,SAAO,IAAE,OAAK,EAAE,GAAG,CAAC;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAEA,IAAE;AAAC,MAAAA,KAAE,GAAG,GAAEA,EAAC;AAAE,aAAOkB,GAAElB,EAAC;AAAA,IAAC;AAC/e,QAAI,KAAG;AAAO,aAAS,GAAG,GAAE;AAAC,YAAM,IAAI,GAAG,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,MAAAA,GAAE,KAAGA,GAAE,KAAG,GAAG,0CAA0C;AAAE,OAAC,CAACA,GAAE,MAAI,CAAC,CAACA,GAAE,KAAG,GAAG,kDAAkD;AAAE,MAAAA,GAAE,QAAM,EAAC,OAAM,EAAC;AAAE,aAAOoB,GAAE,OAAO,OAAO,GAAE,EAAC,GAAE,EAAC,OAAMpB,GAAC,EAAC,CAAC,CAAC;AAAA,IAAC;AAAC,aAASoB,GAAE,GAAE;AAAC,UAAG,gBAAc,OAAO,qBAAqB,QAAOA,KAAE,CAAApB,OAAGA,IAAE;AAAE,WAAG,IAAI,qBAAqB,CAAAA,OAAG;AAAC,WAAGA,GAAE,CAAC;AAAA,MAAC,CAAC;AAAE,MAAAoB,KAAE,CAAApB,OAAG;AAAC,YAAI,IAAEA,GAAE;AAAE,UAAE,KAAG,GAAG,SAASA,IAAE,EAAC,GAAE,EAAC,GAAEA,EAAC;AAAE,eAAOA;AAAA,MAAC;AAAE,WAAG,CAAAA,OAAG;AAAC,WAAG,WAAWA,EAAC;AAAA,MAAC;AAAE,aAAOoB,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AACjd,aAAS,GAAG,GAAE;AAAC,aAAK,EAAE,UAAQ;AAAC,YAAIpB,KAAE,EAAE,IAAI;AAAE,UAAE,IAAI,EAAEA,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,KAAK,aAAaQ,GAAE,KAAG,CAAC,CAAC;AAAA,IAAC;AAAC,QAAIa,KAAE,CAAC,GAAE,KAAG,CAAC;AAAE,aAAS,EAAE,GAAErB,IAAE,GAAE;AAAC,eAASM,GAAEgB,IAAE;AAAC,QAAAA,KAAE,EAAEA,EAAC;AAAE,QAAAA,GAAE,WAAS,EAAE,UAAQ,GAAG,iCAAiC;AAAE,iBAAQC,KAAE,GAAEA,KAAE,EAAE,QAAO,EAAEA,GAAE,CAAAC,GAAE,EAAED,EAAC,GAAED,GAAEC,EAAC,CAAC;AAAA,MAAC;AAAC,QAAE,QAAQ,SAASD,IAAE;AAAC,WAAGA,EAAC,IAAEtB;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE,MAAMA,GAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAAA,GAAE,QAAQ,CAACsB,IAAEC,OAAI;AAAC,UAAE,eAAeD,EAAC,IAAE,EAAEC,EAAC,IAAE,EAAED,EAAC,KAAG,EAAE,KAAKA,EAAC,GAAED,GAAE,eAAeC,EAAC,MAAID,GAAEC,EAAC,IAAE,CAAC,IAAGD,GAAEC,EAAC,EAAE,KAAK,MAAI;AAAC,YAAEC,EAAC,IAAE,EAAED,EAAC;AAAE,YAAE;AAAE,gBAAI,EAAE,UAAQhB,GAAE,CAAC;AAAA,QAAC,CAAC;AAAA,MAAE,CAAC;AAAE,YAAI,EAAE,UAAQA,GAAE,CAAC;AAAA,IAAC;AACne,aAAS,GAAG,GAAE;AAAC,cAAO,GAAE;AAAA,QAAC,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE,KAAK;AAAE,iBAAO;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,wBAAsB,CAAC;AAAA,MAAE;AAAA,IAAC;AAC/I,aAASkB,GAAE,GAAExB,IAAE,IAAE,CAAC,GAAE;AAAC,UAAG,EAAE,oBAAmBA,IAAG,OAAM,IAAI,UAAU,yDAAyD;AAAE,UAAIM,KAAEN,GAAE;AAAK,WAAGc,GAAE,WAASR,KAAE,+CAA+C;AAAE,UAAG,EAAE,eAAe,CAAC,GAAE;AAAC,YAAG,EAAE,GAAG;AAAO,QAAAQ,GAAE,2BAAyBR,KAAE,SAAS;AAAA,MAAC;AAAC,QAAE,CAAC,IAAEN;AAAE,aAAO,GAAG,CAAC;AAAE,MAAAqB,GAAE,eAAe,CAAC,MAAIrB,KAAEqB,GAAE,CAAC,GAAE,OAAOA,GAAE,CAAC,GAAErB,GAAE,QAAQ,OAAG,EAAE,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,MAAAc,GAAE,EAAE,EAAE,EAAE,EAAE,OAAK,2BAA2B;AAAA,IAAC;AAAC,aAASW,KAAG;AAAA,IAAC;AACpb,aAAS,GAAG,GAAEzB,IAAE,GAAE;AAAC,UAAG,WAAS,EAAEA,EAAC,EAAE,GAAE;AAAC,YAAIM,KAAE,EAAEN,EAAC;AAAE,UAAEA,EAAC,IAAE,WAAU;AAAC,YAAEA,EAAC,EAAE,EAAE,eAAe,UAAU,MAAM,KAAGc,GAAE,eAAa,IAAE,mDAAiD,UAAU,SAAO,yBAAuB,EAAEd,EAAC,EAAE,IAAE,IAAI;AAAE,iBAAO,EAAEA,EAAC,EAAE,EAAE,UAAU,MAAM,EAAE,MAAM,MAAK,SAAS;AAAA,QAAC;AAAE,UAAEA,EAAC,EAAE,IAAE,CAAC;AAAE,UAAEA,EAAC,EAAE,EAAEM,GAAE,CAAC,IAAEA;AAAA,MAAC;AAAA,IAAC;AACjT,aAAS,GAAG,GAAEN,IAAE;AAAC,MAAAD,GAAE,eAAe,CAAC,KAAGe,GAAE,kCAAgC,IAAE,SAAS,GAAE,GAAGf,IAAE,GAAE,CAAC,GAAEA,GAAE,eAAe,MAAM,KAAGe,GAAE,iGAAiG,GAAEf,GAAE,CAAC,EAAE,EAAE,MAAM,IAAEC,MAAGD,GAAE,CAAC,IAAEC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAE;AAAC,WAAK,OAAK;AAAE,WAAK,cAAYtB;AAAE,WAAK,IAAE;AAAE,WAAK,IAAEM;AAAE,WAAK,IAAE;AAAE,WAAK,KAAG;AAAE,WAAK,KAAG;AAAE,WAAK,KAAGgB;AAAE,WAAK,KAAG,CAAC;AAAA,IAAC;AACtX,aAAS,GAAG,GAAEtB,IAAE,GAAE;AAAC,aAAKA,OAAI,IAAG,CAAAA,GAAE,MAAIc,GAAE,kCAAgC,EAAE,OAAK,0BAAwBd,GAAE,IAAI,GAAE,IAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAG,SAAOA,GAAE,QAAO,KAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI,GAAE;AAAE,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,aAAO,GAAGd,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA,IAAC;AAClX,aAAS,GAAG,GAAEA,IAAE;AAAC,UAAG,SAAOA,IAAE;AAAC,aAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI;AAAE,YAAG,KAAK,IAAG;AAAC,cAAI,IAAE,KAAK,GAAG;AAAE,mBAAO,KAAG,EAAE,KAAK,KAAK,GAAE,CAAC;AAAE,iBAAO;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAC,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,OAAC,KAAK,MAAId,GAAE,EAAE,EAAE,MAAIc,GAAE,sCAAoCd,GAAE,EAAE,IAAEA,GAAE,EAAE,EAAE,OAAKA,GAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAE,UAAE,GAAGA,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAE,UAAG,KAAK,GAAG,SAAO,WAASA,GAAE,EAAE,KAAGc,GAAE,iDAAiD,GACrf,KAAK,IAAG;AAAA,QAAC,KAAK;AAAE,UAAAd,GAAE,EAAE,MAAI,OAAK,IAAEA,GAAE,EAAE,IAAEc,GAAE,sCAAoCd,GAAE,EAAE,IAAEA,GAAE,EAAE,EAAE,OAAKA,GAAE,EAAE,EAAE,QAAM,wBAAsB,KAAK,IAAI;AAAE;AAAA,QAAM,KAAK;AAAE,cAAEA,GAAE,EAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAGA,GAAE,EAAE,MAAI,KAAK,KAAEA,GAAE,EAAE;AAAA,eAAM;AAAC,gBAAIM,KAAEN,GAAE,MAAM;AAAE,gBAAE,KAAK,GAAG,GAAE,GAAG,WAAU;AAAC,cAAAM,GAAE,QAAQ,EAAE;AAAA,YAAC,CAAC,CAAC;AAAE,qBAAO,KAAG,EAAE,KAAK,KAAK,GAAE,CAAC;AAAA,UAAC;AAAC;AAAA,QAAM;AAAQ,UAAAQ,GAAE,6BAA6B;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AACrV,aAAS,GAAG,GAAEd,IAAE;AAAC,UAAG,SAAOA,GAAE,QAAO,KAAK,MAAIc,GAAE,yBAAuB,KAAK,IAAI,GAAE;AAAE,MAAAd,GAAE,KAAGc,GAAE,kBAAgB,GAAGd,EAAC,IAAE,YAAU,KAAK,IAAI;AAAE,MAAAA,GAAE,EAAE,KAAGc,GAAE,qDAAmD,KAAK,IAAI;AAAE,MAAAd,GAAE,EAAE,EAAE,MAAIc,GAAE,qCAAmCd,GAAE,EAAE,EAAE,OAAK,wBAAsB,KAAK,IAAI;AAAE,aAAO,GAAGA,GAAE,EAAE,GAAEA,GAAE,EAAE,EAAE,GAAE,KAAK,CAAC;AAAA,IAAC;AACtU,aAAS,EAAE,GAAEA,IAAE,GAAEM,IAAE;AAAC,WAAK,OAAK;AAAE,WAAK,IAAEN;AAAE,WAAK,KAAG;AAAE,WAAK,KAAGM;AAAE,WAAK,KAAG;AAAG,WAAK,IAAE,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG,KAAK,KAAG;AAAO,iBAASN,GAAE,IAAE,KAAK,aAAW,MAAI,KAAK,aAAWM,KAAE,KAAG,IAAG,KAAK,IAAE;AAAA,IAAK;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,MAAAD,GAAE,eAAe,CAAC,KAAG,GAAG,qCAAqC;AAAE,MAAAA,GAAE,CAAC,IAAEC;AAAE,MAAAD,GAAE,CAAC,EAAE,IAAE;AAAA,IAAM;AACxS,aAAS,GAAG,GAAEC,IAAE;AAAC,UAAI,IAAE,CAAC;AAAE,aAAO,WAAU;AAAC,UAAE,SAAO;AAAE,eAAO,OAAO,GAAE,SAAS;AAAE,YAAG,EAAE,SAAS,GAAG,GAAE;AAAC,cAAIM,KAAEP,GAAE,aAAW,CAAC;AAAE,UAAAO,KAAE,KAAG,EAAE,SAAOA,GAAE,MAAM,MAAK,CAACN,EAAC,EAAE,OAAO,CAAC,CAAC,IAAEM,GAAE,KAAK,MAAKN,EAAC;AAAA,QAAC,MAAM,CAAAM,KAAE,GAAG,IAAIN,EAAC,EAAE,MAAM,MAAK,CAAC;AAAE,eAAOM;AAAA,MAAC;AAAA,IAAC;AAAC,aAASoB,GAAE,GAAE1B,IAAE;AAAC,UAAEgB,GAAE,CAAC;AAAE,UAAI,IAAE,EAAE,SAAS,GAAG,IAAE,GAAG,GAAEhB,EAAC,IAAE,GAAG,IAAIA,EAAC;AAAE,oBAAY,OAAO,KAAGc,GAAE,6CAA2C,IAAE,OAAKd,EAAC;AAAE,aAAO;AAAA,IAAC;AAAC,QAAI,KAAG;AAC1X,aAAS,GAAG,GAAEA,IAAE;AAAC,eAAS,EAAE,GAAE;AAAC,UAAE,CAAC,KAAG,EAAE,CAAC,MAAI,GAAG,CAAC,IAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAGM,GAAE,KAAK,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,MAAI;AAAC,UAAIA,KAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAAN,GAAE,QAAQ,CAAC;AAAE,YAAM,IAAI,GAAG,IAAE,OAAKM,GAAE,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAAA,IAAE;AAC/J,aAAS,GAAG,GAAEN,IAAE,GAAEM,IAAE,GAAE;AAAC,UAAI,IAAEN,GAAE;AAAO,UAAE,KAAGc,GAAE,gFAAgF;AAAE,UAAI,IAAE,SAAOd,GAAE,CAAC,KAAG,SAAO,GAAEsB,KAAE;AAAG,WAAI,IAAE,GAAE,IAAEtB,GAAE,QAAO,EAAE,EAAE,KAAG,SAAOA,GAAE,CAAC,KAAG,WAASA,GAAE,CAAC,EAAE,GAAE;AAAC,QAAAsB,KAAE;AAAG;AAAA,MAAK;AAAC,UAAIC,KAAE,WAASvB,GAAE,CAAC,EAAE,MAAK,IAAE,IAAE,GAAE,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAO,WAAU;AAAC,kBAAU,WAAS,KAAGc,GAAE,cAAY,IAAE,kBAAgB,UAAU,SAAO,0BAAwB,IAAE,QAAQ;AAAE,UAAE,SAAO;AAAE,UAAE,SAAO,IAAE,IAAE;AAAE,UAAE,CAAC,IAAE;AAAE,YAAG,GAAE;AAAC,cAAIa,KAAE3B,GAAE,CAAC,EAAE,WAAW,GAAE,IAAI;AAAE,YAAE,CAAC,IAAE2B;AAAA,QAAC;AAAC,iBAAQC,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IACvf5B,GAAE4B,KAAE,CAAC,EAAE,WAAW,GAAE,UAAUA,EAAC,CAAC,GAAE,EAAE,KAAK,EAAEA,EAAC,CAAC;AAAE,QAAAA,KAAEtB,GAAE,MAAM,MAAK,CAAC;AAAE,YAAGgB,GAAE,IAAG,CAAC;AAAA,YAAO,UAAQO,KAAE,IAAE,IAAE,GAAEA,KAAE7B,GAAE,QAAO6B,MAAI;AAAC,cAAIC,KAAE,MAAID,KAAEF,KAAE,EAAEE,KAAE,CAAC;AAAE,mBAAO7B,GAAE6B,EAAC,EAAE,KAAG7B,GAAE6B,EAAC,EAAE,EAAEC,EAAC;AAAA,QAAC;AAAC,QAAAH,KAAEJ,KAAEvB,GAAE,CAAC,EAAE,aAAa4B,EAAC,IAAE;AAAO,eAAOD;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE3B,IAAE;AAAC,eAAQ,IAAE,CAAC,GAAEM,KAAE,GAAEA,KAAE,GAAEA,KAAI,GAAE,KAAKG,GAAET,KAAE,IAAEM,MAAG,CAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,UAAE,KAAG,MAAI,EAAEM,GAAE,CAAC,EAAE,OAAKA,GAAE,CAAC,IAAE,QAAO,GAAG,KAAK,CAAC;AAAA,IAAE;AAAC,aAAS,GAAG,GAAE;AAAC,UAAG,SAAO,EAAE,QAAM;AAAO,UAAIZ,KAAE,OAAO;AAAE,aAAM,aAAWA,MAAG,YAAUA,MAAG,eAAaA,KAAE,EAAE,SAAS,IAAE,KAAG;AAAA,IAAC;AACpc,aAAS,GAAG,GAAEA,IAAE;AAAC,cAAOA,IAAE;AAAA,QAAC,KAAK;AAAE,iBAAO,SAAS,GAAE;AAAC,mBAAO,KAAK,aAAa,GAAG,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,SAAS,GAAE;AAAC,mBAAO,KAAK,aAAa,GAAG,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,yBAAuB,CAAC;AAAA,MAAE;AAAA,IAAC;AAC9M,aAAS,GAAG,GAAEA,IAAE,GAAE;AAAC,cAAOA,IAAE;AAAA,QAAC,KAAK;AAAE,iBAAO,IAAE,SAASM,IAAE;AAAC,mBAAO,GAAGA,EAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAO,EAAEA,EAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,IAAE,SAASA,IAAE;AAAC,mBAAOC,GAAED,MAAG,CAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAO,GAAGA,MAAG,CAAC;AAAA,UAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,IAAE,SAASA,IAAE;AAAC,mBAAOE,GAAEF,MAAG,CAAC;AAAA,UAAC,IAAE,SAASA,IAAE;AAAC,mBAAOG,GAAEH,MAAG,CAAC;AAAA,UAAC;AAAA,QAAE;AAAQ,gBAAM,IAAI,UAAU,2BAAyB,CAAC;AAAA,MAAE;AAAA,IAAC;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,eAAQ,IAAE,IAAGM,KAAE,GAAE,EAAEA,MAAGN,KAAE,IAAG,EAAEM,IAAE;AAAC,YAAI,IAAEC,GAAE,IAAE,IAAED,MAAG,CAAC;AAAE,YAAG,KAAG,EAAE;AAAM,aAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAC9Z,aAAS,GAAG,GAAEN,IAAE,GAAE;AAAC,iBAAS,MAAI,IAAE;AAAY,UAAG,IAAE,EAAE,QAAO;AAAE,WAAG;AAAE,UAAIM,KAAEN;AAAE,UAAE,IAAE,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE;AAAO,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,CAAAO,GAAEP,MAAG,CAAC,IAAE,EAAE,WAAW,CAAC,GAAEA,MAAG;AAAE,MAAAO,GAAEP,MAAG,CAAC,IAAE;AAAE,aAAOA,KAAEM;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,aAAO,IAAE,EAAE;AAAA,IAAM;AAAC,aAAS,GAAG,GAAEN,IAAE;AAAC,eAAQ,IAAE,GAAEM,KAAE,IAAG,EAAE,KAAGN,KAAE,MAAI;AAAC,YAAI,IAAEQ,GAAE,IAAE,IAAE,KAAG,CAAC;AAAE,YAAG,KAAG,EAAE;AAAM,UAAE;AAAE,iBAAO,KAAG,KAAG,OAAMF,MAAG,OAAO,aAAa,QAAM,KAAG,IAAG,QAAM,IAAE,IAAI,KAAGA,MAAG,OAAO,aAAa,CAAC;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AACvY,aAAS,GAAG,GAAEN,IAAE,GAAE;AAAC,iBAAS,MAAI,IAAE;AAAY,UAAG,IAAE,EAAE,QAAO;AAAE,UAAIM,KAAEN;AAAE,UAAEM,KAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,EAAE,WAAW,CAAC;AAAE,YAAG,SAAO,KAAG,SAAO,GAAE;AAAC,cAAI,IAAE,EAAE,WAAW,EAAE,CAAC;AAAE,cAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,QAAI;AAAC,QAAAE,GAAER,MAAG,CAAC,IAAE;AAAE,QAAAA,MAAG;AAAE,YAAGA,KAAE,IAAE,EAAE;AAAA,MAAK;AAAC,MAAAQ,GAAER,MAAG,CAAC,IAAE;AAAE,aAAOA,KAAEM;AAAA,IAAC;AAAC,aAAS,GAAG,GAAE;AAAC,eAAQN,KAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAIM,KAAE,EAAE,WAAW,CAAC;AAAE,iBAAOA,MAAG,SAAOA,MAAG,EAAE;AAAE,QAAAN,MAAG;AAAA,MAAC;AAAC,aAAOA;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIA,KAAE,GAAG,CAAC;AAAE,aAAO,WAASA,KAAEgB,GAAE,CAAC,IAAEhB;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC;AAAE,aAAS,GAAG,GAAE;AAAC,UAAIA,KAAE,GAAG;AAAO,SAAG,KAAK,CAAC;AAAE,aAAOA;AAAA,IAAC;AACre,aAAS,GAAG,GAAEA,IAAE;AAAC,eAAQ,IAAE,MAAM,CAAC,GAAEM,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IAAE,GAAGG,GAAET,KAAE,IAAEM,MAAG,CAAC,GAAE,eAAaA,EAAC;AAAE,aAAO;AAAA,IAAC;AAAC,QAAI,KAAG,CAAC,GAAE,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,IAAAO,KAAEd,GAAE,eAAa,GAAG,cAAc;AAAE,IAAAA,GAAE,sBAAoB,WAAU;AAAC,eAAQ,IAAE,GAAEC,KAAE,GAAEA,KAAEY,GAAE,QAAO,EAAEZ,GAAE,YAASY,GAAEZ,EAAC,KAAG,EAAE;AAAE,aAAO;AAAA,IAAC;AAAE,IAAAD,GAAE,kBAAgB,WAAU;AAAC,eAAQ,IAAE,GAAE,IAAEa,GAAE,QAAO,EAAE,EAAE,KAAG,WAASA,GAAE,CAAC,EAAE,QAAOA,GAAE,CAAC;AAAE,aAAO;AAAA,IAAI;AAAE,SAAGb,GAAE,mBAAiB,GAAG,kBAAkB;AAAE,aAAQ,KAAG,MAAM,GAAG,GAAE,KAAG,GAAE,MAAI,IAAG,EAAE,GAAG,IAAG,EAAE,IAAE,OAAO,aAAa,EAAE;AAAE,SAAG;AAAG,IAAAA,GAAE,4BAA0B,WAAU;AAAC,aAAO,OAAO,KAAKmB,EAAC,EAAE;AAAA,IAAM;AACthB,IAAAnB,GAAE,4BAA0B,WAAU;AAAC,UAAI,IAAE,CAAC,GAAEC;AAAE,WAAIA,MAAKkB,GAAE,CAAAA,GAAE,eAAelB,EAAC,KAAG,EAAE,KAAKkB,GAAElB,EAAC,CAAC;AAAE,aAAO;AAAA,IAAC;AAAE,IAAAD,GAAE,sBAAoB;AAAG,IAAAA,GAAE,mBAAiB,SAAS,GAAE;AAAC,MAAAkB,KAAE;AAAE,QAAE,UAAQA,MAAGA,GAAE,EAAE;AAAA,IAAC;AAAE,SAAGlB,GAAE,gBAAc,GAAG,eAAe;AAAE,IAAA0B,GAAE,UAAU,YAAU,SAAS,GAAE;AAAC,UAAG,EAAE,gBAAgBA,MAAG,aAAaA,IAAG,QAAM;AAAG,UAAIzB,KAAE,KAAK,EAAE,EAAE,GAAE,IAAE,KAAK,EAAE,GAAEM,KAAE,EAAE,EAAE,EAAE;AAAE,WAAI,IAAE,EAAE,EAAE,GAAEN,GAAE,IAAG,KAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAKM,GAAE,IAAG,KAAEA,GAAE,GAAG,CAAC,GAAEA,KAAEA,GAAE;AAAE,aAAON,OAAIM,MAAG,MAAI;AAAA,IAAC;AACva,IAAAmB,GAAE,UAAU,QAAM,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,UAAG,KAAK,EAAE,GAAG,QAAO,KAAK,EAAE,MAAM,SAAO,GAAE;AAAK,UAAI,IAAEL,IAAEpB,KAAE,QAAO,IAAEA,GAAE,QAAOM,KAAE,OAAO,eAAe,IAAI,GAAE,IAAE,KAAK;AAAE,UAAE,EAAE,EAAE,KAAKN,IAAEM,IAAE,EAAC,GAAE,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,GAAE,EAAE,GAAE,IAAG,EAAE,IAAG,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,GAAE,GAAE,EAAE,EAAC,EAAC,EAAC,CAAC,CAAC;AAAE,QAAE,EAAE,MAAM,SAAO;AAAE,QAAE,EAAE,IAAE;AAAG,aAAO;AAAA,IAAC;AAAE,IAAAmB,GAAE,UAAU,QAAQ,IAAE,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,WAAK,EAAE,KAAG,CAAC,KAAK,EAAE,MAAIX,GAAE,uCAAuC;AAAE,SAAG,IAAI;AAAE,SAAG,KAAK,CAAC;AAAE,WAAK,EAAE,OAAK,KAAK,EAAE,IAAE,QAAO,KAAK,EAAE,IAAE;AAAA,IAAO;AAAE,IAAAW,GAAE,UAAU,YAAU,WAAU;AAAC,aAAM,CAAC,KAAK,EAAE;AAAA,IAAC;AAClgB,IAAAA,GAAE,UAAU,cAAY,WAAU;AAAC,WAAK,EAAE,KAAG,GAAG,IAAI;AAAE,WAAK,EAAE,KAAG,CAAC,KAAK,EAAE,MAAIX,GAAE,uCAAuC;AAAE,QAAE,KAAK,IAAI;AAAE,YAAI,EAAE,UAAQG,MAAGA,GAAE,EAAE;AAAE,WAAK,EAAE,IAAE;AAAG,aAAO;AAAA,IAAI;AAAE,MAAE,UAAU,KAAG,SAAS,GAAE;AAAC,WAAK,OAAK,IAAE,KAAK,GAAG,CAAC;AAAG,aAAO;AAAA,IAAC;AAAE,MAAE,UAAU,KAAG,SAAS,GAAE;AAAC,WAAK,KAAG,KAAK,EAAE,CAAC;AAAA,IAAC;AAAE,MAAE,UAAU,iBAAe;AAAE,MAAE,UAAU,uBAAqB;AAAG,MAAE,UAAU,eAAa,SAAS,GAAE;AAAC,UAAG,SAAO,EAAE,GAAE,QAAQ,EAAE;AAAA,IAAC;AAC9Z,MAAE,UAAU,eAAa,SAAS,GAAE;AAAC,eAASjB,KAAG;AAAC,eAAO,KAAK,KAAG,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,KAAK,IAAG,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAG,KAAK,EAAE,GAAE,EAAC,GAAE,MAAK,GAAE,EAAC,CAAC;AAAA,MAAC;AAAC,UAAI,IAAE,KAAK,GAAG,CAAC;AAAE,UAAG,CAAC,EAAE,QAAO,KAAK,GAAG,CAAC,GAAE;AAAK,UAAIM,KAAE,GAAG,KAAK,GAAE,CAAC;AAAE,UAAG,WAASA,IAAE;AAAC,YAAG,MAAIA,GAAE,EAAE,MAAM,MAAM,QAAOA,GAAE,EAAE,IAAE,GAAEA,GAAE,EAAE,IAAE,GAAEA,GAAE,MAAM;AAAE,QAAAA,KAAEA,GAAE,MAAM;AAAE,aAAK,GAAG,CAAC;AAAE,eAAOA;AAAA,MAAC;AAAC,MAAAA,KAAE,KAAK,EAAE,GAAG,CAAC;AAAE,MAAAA,KAAE,GAAGA,EAAC;AAAE,UAAG,CAACA,GAAE,QAAON,GAAE,KAAK,IAAI;AAAE,MAAAM,KAAE,KAAK,KAAGA,GAAE,KAAGA,GAAE;AAAY,UAAI,IAAE,GAAG,GAAE,KAAK,GAAEA,GAAE,CAAC;AAAE,aAAO,SAAO,IAAEN,GAAE,KAAK,IAAI,IAAE,KAAK,KAAG,GAAGM,GAAE,EAAE,GAAE,EAAC,GAAEA,IAAE,GAAE,GAAE,GAAE,MAAK,GAAE,EAAC,CAAC,IAAE,GAAGA,GAAE,EAAE,GAAE,EAAC,GAAEA,IAAE,GAAE,EAAC,CAAC;AAAA,IAAC;AACve,SAAGP,GAAE,mBAAiB,GAAG,kBAAkB;AAC3C,QAAI,KAAG,cAAY,OAAO,OAAK,OAAK,SAAS,GAAE;AAAC,UAAIC,KAAE,IAAG,IAAE;AAAE,UAAE,EAAE,QAAQ,sBAAqB,EAAE;AAAE,SAAE;AAAC,YAAIM,KAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,YAAI,IAAE,oEAAoE,QAAQ,EAAE,OAAO,GAAG,CAAC;AAAE,QAAAA,KAAEA,MAAG,IAAE,KAAG;AACnf,aAAG,IAAE,OAAK,IAAE,KAAG;AAAE,YAAIgB,MAAG,IAAE,MAAI,IAAE;AAAE,QAAAtB,MAAG,OAAO,aAAaM,EAAC;AAAE,eAAK,MAAIN,MAAG,OAAO,aAAa,CAAC;AAAG,eAAK,MAAIA,MAAG,OAAO,aAAasB,EAAC;AAAA,MAAE,SAAO,IAAE,EAAE;AAAQ,aAAOtB;AAAA,IAAC,GAAE,KAAG;AAAA,MAAC,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE;AAAC,QAAAF,GAAE,wBAAsB,IAAEC,GAAE,GAAE,CAAC,IAAE,MAAI,WAAS,CAACL,KAAEA,KAAEK,GAAE,GAAEL,EAAC,IAAE,KAAG,oBAAmB,GAAEM,KAAEA,KAAED,GAAE,GAAEC,EAAC,IAAE,KAAG,kBAAkB,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAEgB,GAAE,CAAC;AAAE,QAAAhB,KAAE,GAAGA,IAAE,SAAS;AAAE,YAAEe,GAAE,CAAC;AAAE,YAAIT,KAAE,CAAC,EAAE,OAAM,IAAEN,GAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,EAAE,GAAEsB,KAAE,EAAE,EAAE;AAAY,YAAE,GAAG,GAAE,WAAU;AAAC,YAAE,EAAE,GAAG,QAAQ,SAAS,GAAE;AAAC,gBAAG,KAAK,CAAC,MAAI,EAAE,CAAC,EAAE,OAAM,IAAI,GAAG,2BACje,IAAE,oCAAoC;AAAA,UAAE,EAAE,KAAK,IAAI,CAAC;AAAE,iBAAO,eAAe,MAAK,YAAW,EAAC,OAAM,EAAC,CAAC;AAAE,eAAK,YAAY,MAAM,MAAKhB,GAAE,KAAK,SAAS,CAAC;AAAA,QAAC,CAAC;AAAE,UAAE,cAAY,WAAU;AAAC,mBAAO,KAAGQ,GAAE,oCAAoC;AAAE,cAAI,IAAEQ,GAAE,UAAU,MAAM,QAAO,CAAC,IAAI,EAAE,OAAOhB,GAAE,KAAK,SAAS,CAAC,CAAC;AAAE,aAAG,CAAC;AAAE,cAAI,IAAE,EAAE;AAAE,YAAE,oBAAoB;AAAE,YAAE,KAAG;AAAG,iBAAO,iBAAiB,MAAK,EAAC,GAAE,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,UAAAc,GAAE,IAAI;AAAE,cAAE,EAAE;AAAE,cAAE,GAAG,GAAE,CAAC;AAAE,UAAAF,GAAE,eAAe,CAAC,IAAEJ,GAAE,4CAA0C,CAAC,IAAEI,GAAE,CAAC,IAAE;AAAA,QAAI;AAAE,UAAE,aAAW,WAAU;AAAC,mBAC9f,KAAGJ,GAAE,mCAAmC;AAAE,aAAG,IAAI;AAAE,cAAI,IAAE,KAAK,EAAE;AAAE,cAAE,GAAG,GAAE,CAAC;AAAE,UAAAI,GAAE,eAAe,CAAC,IAAE,OAAOA,GAAE,CAAC,IAAEJ,GAAE,gDAA8C,CAAC;AAAA,QAAC;AAAE,UAAE,YAAU,OAAO,OAAO,CAAC;AAAE,iBAAQS,MAAK,EAAE,GAAE,UAAUA,EAAC,IAAE,EAAEA,EAAC;AAAE,eAAO,GAAG,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIvB,KAAE,GAAG,CAAC;AAAE,eAAO,GAAG,CAAC;AAAE,YAAI,IAAEA,GAAE,IAAGM,KAAEN,GAAE,GAAE,IAAEA,GAAE,IAAG,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,UAAE,CAAC,CAAC,GAAE,GAAE,OAAG;AAAC,cAAIsB,KAAE,CAAC;AAAE,YAAE,QAAQ,CAACC,IAAE,MAAI;AAAC,gBAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,GAAE,IAAG,IAAEA,GAAE,IAAGI,KAAE,EAAE,IAAE,EAAE,MAAM,GAAEC,KAAEL,GAAE,IAAGM,KAAEN,GAAE;AAAG,YAAAD,GAAEC,GAAE,EAAE,IAAE,EAAC,MAAK,CAAAO,OAAG,EAAE,aAAa,EAAE,GAAEA,EAAC,CAAC,GAAE,OAAM,CAACA,IAAE,OAAK;AAAC,kBAAIC,KAAE,CAAC;AAAE,cAAAH;AAAA,gBAAEC;AAAA,gBACrfC;AAAA,gBAAEH,GAAE,WAAWI,IAAE,EAAE;AAAA,cAAC;AAAE,iBAAGA,EAAC;AAAA,YAAC,EAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC,EAAC,MAAK/B,GAAE,MAAK,cAAa,SAASuB,IAAE;AAAC,gBAAI,IAAE,CAAC,GAAE;AAAE,iBAAI,KAAKD,GAAE,GAAE,CAAC,IAAEA,GAAE,CAAC,EAAE,KAAKC,EAAC;AAAE,YAAAjB,GAAEiB,EAAC;AAAE,mBAAO;AAAA,UAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,qBAAQ,KAAKD,GAAE,KAAG,EAAE,KAAK,GAAG,OAAM,IAAI,UAAU,sBAAoB,IAAE,GAAG;AAAE,gBAAI,IAAE,EAAE;AAAE,iBAAI,KAAKA,GAAE,CAAAA,GAAE,CAAC,EAAE,MAAM,GAAE,EAAE,CAAC,CAAC;AAAE,qBAAOC,MAAGA,GAAE,KAAKjB,IAAE,CAAC;AAAE,mBAAO;AAAA,UAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAEA,GAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,WAAU;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAEM,IAAE,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE;AAAA,UAAC,MAAKxB;AAAA,UAAE,cAAa,SAAS,GAAE;AAAC,mBAAM,CAAC,CAAC;AAAA,UAAC;AAAA,UAAE,YAAW,SAAS,GAAEsB,IAAE;AAAC,mBAAOA,KAAEhB,KAAE;AAAA,UAAC;AAAA,UAAE,gBAAe;AAAA,UAChgB,sBAAqB,SAAS,GAAE;AAAC,gBAAG,MAAI,EAAE,KAAIgB,KAAE;AAAA,qBAAW,MAAI,EAAE,CAAAA,KAAEf;AAAA,qBAAU,MAAI,EAAE,CAAAe,KAAEd;AAAA,gBAAO,OAAM,IAAI,UAAU,gCAA8BR,EAAC;AAAE,mBAAO,KAAK,aAAasB,GAAE,KAAG,CAAC,CAAC;AAAA,UAAC;AAAA,UAAE,GAAE;AAAA,QAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEtB,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAEC,IAAE,GAAE,GAAE,GAAE,GAAE;AAAC,YAAEP,GAAE,CAAC;AAAE,YAAEU,GAAE,GAAE,CAAC;AAAE,QAAAJ,OAAIA,KAAEI,GAAE,GAAEJ,EAAC;AAAG,cAAI,IAAEI,GAAEH,IAAE,CAAC;AAAG,YAAEG,GAAE,GAAE,CAAC;AAAE,YAAIC,KAAE,GAAG,CAAC;AAAE,WAAGA,IAAE,WAAU;AAAC,aAAG,sBAAoB,IAAE,yBAAwB,CAACrB,EAAC,CAAC;AAAA,QAAC,CAAC;AAAE,UAAE,CAAC,GAAEN,IAAE,CAAC,GAAEM,KAAE,CAACA,EAAC,IAAE,CAAC,GAAE,SAASsB,IAAE;AAAC,UAAAA,KAAEA,GAAE,CAAC;AAAE,cAAGtB,IAAE;AAAC,gBAAIuB,KAAED,GAAE;AAAE,gBAAIE,KAAED,GAAE;AAAA,UAAC,MAAM,CAAAC,KAAEL,GAAE;AAAU,UAAAG,KAAE,GAAGD,IAAE,WAAU;AAAC,gBAAG,OAAO,eAAe,IAAI,MAAI,GAAG,OAAM,IAAId,GAAE,4BAClgB,CAAC;AAAE,gBAAG,WAASkB,GAAE,EAAE,OAAM,IAAIlB,GAAE,IAAE,gCAAgC;AAAE,gBAAI,KAAGkB,GAAE,EAAE,UAAU,MAAM;AAAE,gBAAG,WAAS,GAAG,OAAM,IAAIlB,GAAE,6BAA2B,IAAE,yCAAuC,UAAU,SAAO,mBAAiB,OAAO,KAAKkB,GAAE,CAAC,EAAE,SAAS,IAAE,uBAAuB;AAAE,mBAAO,GAAG,MAAM,MAAK,SAAS;AAAA,UAAC,CAAC;AAAE,cAAI,KAAG,OAAO,OAAOD,IAAE,EAAC,aAAY,EAAC,OAAMF,GAAC,EAAC,CAAC;AAAE,UAAAA,GAAE,YAAU;AAAG,cAAIG,KAAE,IAAI,GAAG,GAAEH,IAAE,IAAG,GAAEC,IAAE,GAAEP,IAAE,CAAC;AAAE,UAAAO,KAAE,IAAI,EAAE,GAAEE,IAAE,MAAG,KAAE;AAAE,UAAAD,KAAE,IAAI,EAAE,IAAE,KAAIC,IAAE,OAAG,KAAE;AAAE,cAAI,KAAG,IAAI,EAAE,IAAE,WAAUA,IAAE,OAAG,IAAE;AAAE,aAAG,CAAC,IAAE;AAAA,YAAC,aAAYD;AAAA,YACrf,IAAG;AAAA,UAAE;AAAE,aAAGH,IAAEC,EAAC;AAAE,iBAAM,CAACC,IAAEC,IAAE,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE9B,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAE;AAAC,YAAIgB,KAAE,GAAG,GAAEhB,EAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,YAAE0B,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAASH,IAAE;AAAC,mBAAS,IAAG;AAAC,eAAG,iBAAe,IAAE,yBAAwBD,EAAC;AAAA,UAAC;AAAC,UAAAC,KAAEA,GAAE,CAAC;AAAE,cAAI,IAAEA,GAAE,OAAK,MAAIvB;AAAE,UAAAA,GAAE,WAAW,IAAI,MAAIA,KAAE,OAAOA,GAAE,UAAU,CAAC,CAAC;AAAG,cAAI,IAAEuB,GAAE,EAAE;AAAY,qBAAS,EAAEvB,EAAC,KAAG,EAAE,IAAE,IAAE,GAAE,EAAEA,EAAC,IAAE,MAAI,GAAG,GAAEA,IAAE,CAAC,GAAE,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAG,YAAE,CAAC,GAAEsB,IAAE,SAAS,GAAE;AAAC,gBAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAE,MAAK,GAAE,CAAC;AAAE,uBAAS,EAAEtB,EAAC,EAAE,KAAG,EAAE,IAAE,IAAE,GAAE,EAAEA,EAAC,IAAE,KAAG,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE,GAAE;AAAC,YAAEN,MAAGI,GAAE;AAAE,YAAI,IAAE;AAAA,UAAGJ;AAAA,UACrf;AAAA,QAAC;AAAE,YAAE0B,GAAEpB,IAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAASgB,IAAE;AAAC,UAAAA,KAAEA,GAAE,CAAC;AAAE,cAAIC,KAAE,iBAAeD,GAAE;AAAK,qBAASA,GAAE,EAAE,MAAIA,GAAE,EAAE,IAAE,CAAC;AAAG,cAAG,WAASA,GAAE,EAAE,EAAEtB,KAAE,CAAC,EAAE,OAAM,IAAIa,GAAE,iFAA+Eb,KAAE,KAAG,kBAAgBsB,GAAE,OAAK,qGAAqG;AAAE,UAAAA,GAAE,EAAE,EAAEtB,KAAE,CAAC,IAAE,MAAI;AAAC,eAAG,sBAAoBsB,GAAE,OAAK,yBAAwB,CAAC;AAAA,UAAC;AAAE,YAAE,CAAC,GAAE,GAAE,SAAS,GAAE;AAAC,cAAE,OAAO,GAAE,GAAE,IAAI;AAAE,YAAAA,GAAE,EAAE,EAAEtB,KAAE,CAAC,IAAE,GAAGuB,IAAE,GAAE,MAAK,GAAE,CAAC;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MACrf,GAAE,SAAS,GAAEvB,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAE;AAAC,YAAIC,KAAE,GAAG,GAAEjB,EAAC;AAAE,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,YAAE0B,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,GAAE,CAAC,CAAC,GAAE,SAAS,GAAE;AAAC,mBAAS,IAAG;AAAC,eAAG,iBAAe,IAAE,yBAAwBH,EAAC;AAAA,UAAC;AAAC,cAAE,EAAE,CAAC;AAAE,cAAI,IAAE,EAAE,OAAK,MAAIvB;AAAE,UAAAA,GAAE,WAAW,IAAI,MAAIA,KAAE,OAAOA,GAAE,UAAU,CAAC,CAAC;AAAG,UAAAsB,MAAG,EAAE,EAAE,GAAG,KAAKtB,EAAC;AAAE,cAAI,IAAE,EAAE,EAAE,GAAE2B,KAAE,EAAE3B,EAAC;AAAE,qBAAS2B,MAAG,WAASA,GAAE,KAAGA,GAAE,cAAY,EAAE,QAAMA,GAAE,MAAI,IAAE,KAAG,EAAE,IAAE,IAAE,GAAE,EAAE,YAAU,EAAE,MAAK,EAAE3B,EAAC,IAAE,MAAI,GAAG,GAAEA,IAAE,CAAC,GAAE,EAAEA,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE;AAAG,YAAE,CAAC,GAAEuB,IAAE,SAASK,IAAE;AAAC,YAAAA,KAAE,GAAG,GAAEA,IAAE,GAAE,GAAE,CAAC;AAAE,uBAAS,EAAE5B,EAAC,EAAE,KAAG4B,GAAE,IAAE,IAAE,GAAE,EAAE5B,EAAC,IAAE4B,MAAG,EAAE5B,EAAC,EAAE,EAAE,IAAE,CAAC,IAAE4B;AAAE,mBAAM,CAAC;AAAA,UAAC,CAAC;AAAE,iBAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE5B,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB;AAAA,UAAE;AAAA,UACnf,EAAC,MAAKxB,IAAE,cAAa,SAAS,GAAE;AAAC,gBAAIM,KAAES,GAAE,CAAC;AAAE,eAAG,CAAC;AAAE,mBAAOT;AAAA,UAAC,GAAE,YAAW,SAAS,GAAEA,IAAE;AAAC,mBAAO,GAAGA,EAAC;AAAA,UAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,KAAI;AAAA,QAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,SAASM,IAAE;AAAC,iBAAOA;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,iBAAO;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,GAAGN,IAAE,CAAC,GAAE,GAAE,KAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE;AAAC,QAAAN,KAAEgB,GAAEhB,EAAC;AAAE,eAAK,MAAI,IAAE;AAAY,YAAE,GAAG,CAAC;AAAE,YAAI,IAAE,CAAAsB,OAAGA;AAAE,YAAG,MAAIhB,IAAE;AAAC,cAAI,IAAE,KAAG,IAAE;AAAE,cAAE,CAAAgB,OAAGA,MAAG,MAAI;AAAA,QAAC;AAAC,YAAEtB,GAAE,SAAS,UAAU,IAAE,SAASsB,IAAEC,IAAE;AAAC,iBAAOA,OAAI;AAAA,QAAC,IAAE,SAASD,IAAEC,IAAE;AAAC,iBAAOA;AAAA,QAAC;AACxf,QAAAC,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,GAAE,YAAW,GAAE,gBAAe,GAAE,sBAAqB,GAAGA,IAAE,GAAE,MAAIM,EAAC,GAAE,GAAE,KAAI,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,iBAASM,GAAE,GAAE;AAAC,gBAAI;AAAE,cAAI,IAAEG;AAAE,iBAAO,IAAI,EAAE,IAAG,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,QAAC;AAAC,YAAI,IAAE,CAAC,WAAU,YAAW,YAAW,aAAY,YAAW,aAAY,cAAa,YAAY,EAAET,EAAC;AAAE,YAAEgB,GAAE,CAAC;AAAE,QAAAQ,GAAE,GAAE,EAAC,MAAK,GAAE,cAAalB,IAAE,gBAAe,GAAE,sBAAqBA,GAAC,GAAE,EAAC,IAAG,KAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,YAAI,IAAE,kBAAgBA;AAAE,QAAAwB,GAAE,GAAE,EAAC,MAAKxB,IAAE,cAAa,SAASM,IAAE;AAAC,cAAI,IAAEG,GAAEH,MAAG,CAAC,GAAE,IAAEA,KAAE;AAAE,cAAG,EAAE,UAAQ,IAAE,GAAEgB,KAAE,GAAEA,MAAG,GAAE,EAAEA,IAAE;AAAC,gBAAIC,KACzf,IAAED;AAAE,gBAAGA,MAAG,KAAG,KAAG,EAAEC,EAAC,GAAE;AAAC,kBAAE,IAAElB,GAAE,GAAE,GAAEkB,KAAE,CAAC,IAAE;AAAG,kBAAG,WAAS,EAAE,KAAI,IAAE;AAAA,kBAAO,MAAG,OAAO,aAAa,CAAC,GAAE,KAAG;AAAE,kBAAEA,KAAE;AAAA,YAAC;AAAA,UAAC;AAAA,eAAK;AAAC,gBAAE,MAAM,CAAC;AAAE,iBAAID,KAAE,GAAEA,KAAE,GAAE,EAAEA,GAAE,GAAEA,EAAC,IAAE,OAAO,aAAa,EAAE,IAAEA,EAAC,CAAC;AAAE,gBAAE,EAAE,KAAK,EAAE;AAAA,UAAC;AAAC,UAAAH,GAAEb,EAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,uBAAa,gBAAc,IAAE,IAAI,WAAW,CAAC;AAAG,cAAI,GAAE,IAAE,YAAU,OAAO;AAAE,eAAG,aAAa,cAAY,aAAa,qBAAmB,aAAa,aAAWQ,GAAE,uCAAuC;AAAE,cAAG,KAAG,GAAE;AAAC,gBAAIQ,KAAE;AAAE,iBAAI,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,kBAAIC,KAAE,EAAE,WAAW,CAAC;AAAE,qBAAKA,KAAED,OAAI,QACnfC,KAAED,MAAG,IAAE,SAAOC,MAAG,SAAOA,MAAGD,MAAG,GAAE,EAAE,KAAGA,MAAG;AAAA,YAAC;AAAC,gBAAEA;AAAA,UAAC,MAAM,KAAE,EAAE;AAAO,UAAAA,KAAE,GAAG,IAAE,IAAE,CAAC;AAAE,UAAAC,KAAED,KAAE;AAAE,UAAAb,GAAEa,MAAG,CAAC,IAAE;AAAE,cAAG,KAAG,GAAE;AAAC,gBAAG,IAAEC,IAAEA,KAAE,IAAE,GAAE,IAAE,GAAE,IAAEA,IAAE;AAAC,cAAAA,KAAE,IAAEA,KAAE;AAAE,uBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,oBAAI,IAAE,EAAE,WAAW,CAAC;AAAE,oBAAG,SAAO,KAAG,SAAO,GAAE;AAAC,sBAAI,IAAE,EAAE,WAAW,EAAE,CAAC;AAAE,sBAAE,UAAQ,IAAE,SAAO,MAAI,IAAE;AAAA,gBAAI;AAAC,oBAAG,OAAK,GAAE;AAAC,sBAAG,KAAGA,GAAE;AAAM,oBAAE,GAAG,IAAE;AAAA,gBAAC,OAAK;AAAC,sBAAG,QAAM,GAAE;AAAC,wBAAG,IAAE,KAAGA,GAAE;AAAM,sBAAE,GAAG,IAAE,MAAI,KAAG;AAAA,kBAAC,OAAK;AAAC,wBAAG,SAAO,GAAE;AAAC,0BAAG,IAAE,KAAGA,GAAE;AAAM,wBAAE,GAAG,IAAE,MAAI,KAAG;AAAA,oBAAE,OAAK;AAAC,0BAAG,IAAE,KAAGA,GAAE;AAAM,wBAAE,GAAG,IAAE,MAAI,KAAG;AAAG,wBAAE,GAAG,IAAE,MAAI,KAAG,KAAG;AAAA,oBAAE;AAAC,sBAAE,GAAG,IAAE,MAAI,KAAG,IAAE;AAAA,kBAAE;AAAC,oBAAE,GAAG,IAAE,MAAI,IAAE;AAAA,gBAAE;AAAA,cAAC;AAAC,gBAAE,CAAC,IAAE;AAAA,YAAC;AAAA,UAAC,WAAS,EAAE,MAAI,IAC1f,GAAE,IAAE,GAAE,EAAE,EAAE,KAAE,EAAE,WAAW,CAAC,GAAE,MAAI,MAAIJ,GAAEI,EAAC,GAAET,GAAE,wDAAwD,IAAG,EAAES,KAAE,CAAC,IAAE;AAAA,cAAO,MAAI,IAAE,GAAE,IAAE,GAAE,EAAE,EAAE,GAAEA,KAAE,CAAC,IAAE,EAAE,CAAC;AAAE,mBAAOjB,MAAGA,GAAE,KAAKa,IAAEG,EAAC;AAAE,iBAAOA;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,SAAShB,IAAE;AAAC,UAAAa,GAAEb,EAAC;AAAA,QAAC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAE;AAAC,YAAEgB,GAAE,CAAC;AAAE,YAAG,MAAIhB,IAAE;AAAC,cAAIM,KAAE;AAAG,cAAI,IAAE;AAAG,cAAI,IAAE;AAAG,cAAI,IAAE,MAAI;AAAG,cAAIgB,KAAE;AAAA,QAAC,MAAM,OAAItB,OAAIM,KAAE,IAAG,IAAE,IAAG,IAAE,IAAG,IAAE,MAAIG,IAAEa,KAAE;AAAG,QAAAE,GAAE,GAAE,EAAC,MAAK,GAAE,cAAa,SAASD,IAAE;AAAC,mBAAQ,IAAEd,GAAEc,MAAG,CAAC,GAAE,IAAE,EAAE,GAAE,GAAE,IAAEA,KAAE,GAAEI,KAAE,GAAEA,MAAG,GAAE,EAAEA,IAAE;AAAC,gBAAIC,KAAEL,KAAE,IAAEI,KAAE3B;AAAE,gBAAG2B,MAAG,KAAG,KAAG,EAAEC,MAAGN,EAAC,EAAE,KAAEhB,GAAE,GAAEsB,KAAE,CAAC,GAAE,WAC5e,IAAE,IAAE,KAAG,KAAG,OAAO,aAAa,CAAC,GAAE,KAAG,IAAG,IAAEA,KAAE5B;AAAA,UAAC;AAAC,UAAAmB,GAAEI,EAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,YAAW,SAASA,IAAE,GAAE;AAAC,sBAAU,OAAO,KAAGT,GAAE,+CAA6C,CAAC;AAAE,cAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,IAAE,IAAEd,EAAC;AAAE,UAAAS,GAAE,KAAG,CAAC,IAAE,KAAGa;AAAE,YAAE,GAAE,IAAE,GAAE,IAAEtB,EAAC;AAAE,mBAAOuB,MAAGA,GAAE,KAAKJ,IAAE,CAAC;AAAE,iBAAO;AAAA,QAAC,GAAE,gBAAe,GAAE,sBAAqB,IAAG,GAAE,SAASI,IAAE;AAAC,UAAAJ,GAAEI,EAAC;AAAA,QAAC,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEvB,IAAE,GAAEM,IAAE,GAAE,GAAE;AAAC,WAAG,CAAC,IAAE,EAAC,MAAKU,GAAEhB,EAAC,GAAE,IAAG0B,GAAE,GAAEpB,EAAC,GAAE,GAAEoB,GAAE,GAAE,CAAC,GAAE,IAAG,CAAC,EAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE1B,IAAE,GAAEM,IAAE,GAAE,GAAE,GAAEgB,IAAEC,IAAE,GAAE;AAAC,WAAG,CAAC,EAAE,GAAG,KAAK,EAAC,IAAGP,GAAEhB,EAAC,GAAE,IAAG,GAAE,IAAG0B,GAAEpB,IAAE,CAAC,GAAE,IAAG,GAAE,IAAG,GAAE,IAAGoB,GAAEJ,IAAEC,EAAC,GAAE,IAAG,EAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEvB,IAAE;AAAC,QAAAA,KAAEgB,GAAEhB,EAAC;AAAE,QAAAwB,GAAE,GAAE;AAAA,UAAC,IAAG;AAAA,UAAG,MAAKxB;AAAA,UACzf,gBAAe;AAAA,UAAE,cAAa,WAAU;AAAA,UAAC;AAAA,UAAE,YAAW,WAAU;AAAA,UAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE,GAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAN,KAAEe,GAAEf,EAAC;AAAE,YAAE,GAAG,CAAC;AAAE,YAAI,IAAE,CAAC;AAAE,QAAAS,GAAEH,MAAG,CAAC,IAAE,GAAG,CAAC;AAAE,eAAO,EAAEN,IAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEA,IAAE,GAAEM,IAAE;AAAC,YAAE,GAAG,CAAC;AAAE,QAAAN,KAAEe,GAAEf,EAAC;AAAE,YAAE,GAAG,CAAC;AAAE,UAAEA,IAAE,GAAE,MAAKM,EAAC;AAAA,MAAC;AAAA,MAAE,GAAE;AAAA,MAAG,GAAE,SAAS,GAAEN,IAAE;AAAC,YAAI,IAAE,GAAG,GAAEA,EAAC,GAAEM,KAAE,EAAE,CAAC;AAAE,QAAAN,KAAEM,GAAE,OAAK,OAAK,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS,GAAE;AAAC,iBAAO,EAAE;AAAA,QAAI,CAAC,EAAE,KAAK,GAAG,IAAE;AAAI,YAAI,IAAE,GAAGN,EAAC;AAAE,YAAG,WAAS,EAAE,QAAO;AAAE,YAAI,IAAE,MAAM,IAAE,CAAC;AAAE,YAAE,GAAG,CAAC,GAAEsB,IAAEC,IAAE,MAAI;AAAC,mBAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,CAAC,IAAE,EAAE,IAAE,CAAC,EAAE,qBAAqB,IAAE,CAAC,GAAE,KAAG,EAAE,IAAE,CAAC,EAAE;AAAe,cAAE,EAAED,EAAC,EAAE;AAAA,YAAM;AAAA,YACnf;AAAA,UAAC;AAAE,eAAI,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,EAAE,GAAE,IAAE,CAAC,EAAE,MAAI,EAAE,IAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAAE,cAAG,CAAChB,GAAE,GAAG,QAAOA,GAAE,WAAWiB,IAAE,CAAC;AAAA,QAAC,CAAC;AAAE,eAAO,GAAGvB,EAAC,IAAE;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAE,MAAIY,GAAE,CAAC,EAAE,MAAI;AAAA,MAAE;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIZ,KAAEe,GAAE,CAAC;AAAE,WAAGf,EAAC;AAAE,WAAG,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,WAAU;AAAC,QAAAI,GAAE,EAAE;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAEJ,IAAE,GAAE;AAAC,UAAE,WAAW,GAAEA,IAAEA,KAAE,CAAC;AAAA,MAAC;AAAA,MAAE,GAAE,SAAS,GAAE;AAAC,YAAIA,KAAE,EAAE;AAAO,eAAK;AAAE,YAAG,aAAW,EAAE,QAAM;AAAG,iBAAQ,IAAE,GAAE,KAAG,GAAE,KAAG,GAAE;AAAC,cAAIM,KAAEN,MAAG,IAAE,MAAG;AAAG,UAAAM,KAAE,KAAK,IAAIA,IAAE,IAAE,SAAS;AAAE,cAAI,IAAE;AAAK,UAAAA,KAAE,KAAK,IAAI,GAAEA,EAAC;AAAE,cAAE,EAAE,IAAI,KAAK,GAAE,YAAWA,MAAG,QAAMA,KAAE,SAAO,KAAK;AAAE,aAAE;AAAC,gBAAG;AAAC,iBAAG,KAAK,IAAE,GAAG,aAAW,UAAQ,EAAE;AAAE,iBAAG;AAAE,kBAAI,IAAE;AAAE,oBAAM;AAAA,YAAC,SAAO,GAAE;AAAA,YAAC;AAAC,gBAC/f;AAAA,UAAM;AAAC,cAAG,EAAE,QAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAA,MAAE,GAAE,WAAU;AAAC,eAAO;AAAA,MAAE;AAAA,MAAE,GAAE,WAAU;AAAC,eAAO;AAAA,MAAE;AAAA,MAAE,GAAE,SAAS,GAAEN,IAAE,GAAEM,IAAE;AAAC,iBAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAEG,GAAET,MAAG,CAAC,GAAEsB,KAAEb,GAAET,KAAE,KAAG,CAAC;AAAE,UAAAA,MAAG;AAAE,mBAAQuB,KAAE,GAAEA,KAAED,IAAEC,MAAI;AAAC,gBAAI,IAAE,EAAE,IAAEA,EAAC,GAAE,IAAE,GAAG,CAAC;AAAE,kBAAI,KAAG,OAAK,MAAI,MAAI,IAAE,KAAGrB,IAAGG,GAAE,GAAE,CAAC,CAAC,GAAE,EAAE,SAAO,KAAG,EAAE,KAAK,CAAC;AAAA,UAAC;AAAC,eAAGiB;AAAA,QAAC;AAAC,QAAAb,GAAEH,MAAG,CAAC,IAAE;AAAE,eAAO;AAAA,MAAC;AAAA,IAAC;AACvR,KAAC,WAAU;AAAC,eAAS,EAAE,GAAE;AAAC,QAAAP,GAAE,MAAI,EAAE;AAAQ,aAAGA,GAAE,IAAI;AAAE,WAAG;AAAE,aAAGA,GAAE,IAAI;AAAE,WAAG,QAAQA,GAAE,IAAI,CAAC;AAAE,QAAAW;AAAI,QAAAX,GAAE,0BAAwBA,GAAE,uBAAuBW,EAAC;AAAE,aAAGA,OAAI,SAAO,OAAK,cAAc,EAAE,GAAE,KAAG,OAAMC,OAAI,IAAEA,IAAEA,KAAE,MAAK,EAAE;AAAA,MAAG;AAAC,eAASX,GAAE,GAAE;AAAC,UAAE,EAAE,QAAQ;AAAA,MAAC;AAAC,eAAS,EAAE,GAAE;AAAC,eAAO,GAAG,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO,YAAY,YAAY,GAAEM,EAAC;AAAA,QAAC,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO;AAAA,QAAC,CAAC,EAAE,KAAK,GAAE,SAAS,GAAE;AAAC,UAAAJ,GAAE,4CAA0C,CAAC;AAAE,UAAAE,GAAE,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,UAAIE,KAAE,EAAC,GAAE,GAAE;AAAE,MAAAI;AAAI,MAAAX,GAAE,0BAAwBA,GAAE,uBAAuBW,EAAC;AAAE,UAAGX,GAAE,gBAAgB,KAAG;AAAC,eAAOA,GAAE;AAAA,UAAgBO;AAAA,UACjiB;AAAA,QAAC;AAAA,MAAC,SAAO,GAAE;AAAC,QAAAJ,GAAE,wDAAsD,CAAC,GAAE,GAAG,CAAC;AAAA,MAAC;AAAC,OAAC,WAAU;AAAC,eAAOC,MAAG,cAAY,OAAO,YAAY,wBAAsB,GAAG,CAAC,KAAG,cAAY,OAAO,QAAM,EAAEH,EAAC,IAAE,MAAM,GAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,iBAAO,YAAY,qBAAqB,GAAEM,EAAC,EAAE,KAAKN,IAAE,SAAS,GAAE;AAAC,YAAAE,GAAE,oCAAkC,CAAC;AAAE,YAAAA,GAAE,2CAA2C;AAAE,mBAAO,EAAEF,EAAC;AAAA,UAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,GAAG,EAAE,MAAM,EAAE;AAAE,aAAM,CAAC;AAAA,IAAC,GAAG;AAClb,IAAAD,GAAE,qBAAmB,WAAU;AAAC,cAAOA,GAAE,qBAAmBA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI,KAAGA,GAAE,iBAAe,WAAU;AAAC,cAAO,KAAGA,GAAE,iBAAeA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,IAAAA,GAAE,+BAA6B,WAAU;AAAC,cAAOA,GAAE,+BAA6BA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI,KAAGA,GAAE,UAAQ,WAAU;AAAC,cAAO,KAAGA,GAAE,UAAQA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC,GAAEoB,KAAEpB,GAAE,QAAM,WAAU;AAAC,cAAOoB,KAAEpB,GAAE,QAAMA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAC9b,IAAAA,GAAE,eAAa,WAAU;AAAC,cAAOA,GAAE,eAAaA,GAAE,IAAI,GAAG,MAAM,MAAK,SAAS;AAAA,IAAC;AAAE,QAAI;AAAG,IAAAY,KAAE,SAAS,KAAI;AAAC,YAAI,GAAG;AAAE,aAAKA,KAAE;AAAA,IAAG;AAC1H,aAAS,KAAI;AAAC,eAAS,IAAG;AAAC,YAAG,CAAC,OAAK,KAAG,MAAGZ,GAAE,YAAU,MAAG,CAAC,KAAI;AAAC,aAAG,EAAE;AAAE,aAAGA,EAAC;AAAE,cAAGA,GAAE,qBAAqB,CAAAA,GAAE,qBAAqB;AAAE,cAAGA,GAAE,QAAQ,MAAI,cAAY,OAAOA,GAAE,YAAUA,GAAE,UAAQ,CAACA,GAAE,OAAO,IAAGA,GAAE,QAAQ,UAAQ;AAAC,gBAAIC,KAAED,GAAE,QAAQ,MAAM;AAAE,eAAG,QAAQC,EAAC;AAAA,UAAC;AAAC,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAG,EAAE,IAAEU,KAAG;AAAC,YAAGX,GAAE,OAAO,MAAI,cAAY,OAAOA,GAAE,WAASA,GAAE,SAAO,CAACA,GAAE,MAAM,IAAGA,GAAE,OAAO,SAAQ,IAAG;AAAE,WAAG,EAAE;AAAE,YAAEW,OAAIX,GAAE,aAAWA,GAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,YAAAA,GAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC;AAAE,YAAE;AAAA,QAAC,GAAE,CAAC,KAAG,EAAE;AAAA,MAAE;AAAA,IAAC;AAC7e,QAAGA,GAAE,QAAQ,MAAI,cAAY,OAAOA,GAAE,YAAUA,GAAE,UAAQ,CAACA,GAAE,OAAO,IAAG,IAAEA,GAAE,QAAQ,SAAQ,CAAAA,GAAE,QAAQ,IAAI,EAAE;AAAE,OAAG;AAG9G,WAAOD,UAAS;AAAA,EAClB;AAEA,GAAG;AACH,IAAOkC,gCAAQlC;;;ACjEf,IAAYmC,SAAK,0BAALA,QAAK;AAALA,EAAAA,OAAAA,OAAK,MAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,WAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,QAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,SAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,SAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,UAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,cAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,aAAA,IAAA,CAAA,IAAA;AAALA,EAAAA,OAAAA,OAAK,aAAA,IAAA,CAAA,IAAA;AAAA,SAALA;AAAK,GAAA,CAAA,CAAA;AAYjB,IAAYC,aAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,WAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,YAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAKrB,IAAYC,aAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,OAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,QAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAKrB,IAAYC,aAAS,0BAATA,YAAS;AAATA,EAAAA,WAAAA,WAAS,SAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,KAAA,IAAA,CAAA,IAAA;AAATA,EAAAA,WAAAA,WAAS,KAAA,IAAA,CAAA,IAAA;AAAA,SAATA;AAAS,GAAA,CAAA,CAAA;AAMrB,IAAYC,WAAO,0BAAPA,UAAO;AAAPA,EAAAA,SAAAA,SAAO,MAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,MAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,UAAA,IAAA,CAAA,IAAA;AAAA,SAAPA;AAAO,GAAA,CAAA,CAAA;AAMnB,IAAYC,QAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,QAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,YAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,UAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,KAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAYhB,IAAYC,UAAM,0BAANA,SAAM;AAANA,EAAAA,QAAAA,QAAM,MAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,kBAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,8CAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,iCAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,UAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,SAAA,IAAA,UAAA,IAAA;AAAA,SAANA;AAAM,GAAA,CAAA,CAAA;AASlB,IAAYC,uBAAmB,0BAAnBA,sBAAmB;AAAnBA,EAAAA,qBAAAA,qBAAmB,cAAA,IAAA,CAAA,IAAA;AAAA,SAAnBA;AAAmB,GAAA,CAAA,CAAA;AAI/B,IAAYC,iBAAa,0BAAbA,gBAAa;AAAbA,EAAAA,eAAAA,eAAa,QAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,eAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,KAAA,IAAA,CAAA,IAAA;AAAbA,EAAAA,eAAAA,eAAa,YAAA,IAAA,CAAA,IAAA;AAAA,SAAbA;AAAa,GAAA,CAAA,CAAA;AAOzB,IAAYC,UAAM,0BAANA,SAAM;AAANA,EAAAA,QAAAA,QAAM,QAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,CAAA,IAAA;AAANA,EAAAA,QAAAA,QAAM,KAAA,IAAA,CAAA,IAAA;AAAA,SAANA;AAAM,GAAA,CAAA,CAAA;AAMlB,IAAYC,WAAO,0BAAPA,UAAO;AAAPA,EAAAA,SAAAA,SAAO,WAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,QAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,SAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,cAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,aAAA,IAAA,CAAA,IAAA;AAAPA,EAAAA,SAAAA,SAAO,aAAA,IAAA,CAAA,IAAA;AAAA,SAAPA;AAAO,GAAA,CAAA,CAAA;AASnB,IAAYC,YAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,OAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AASpB,IAAYC,eAAW,0BAAXA,cAAW;AAAXA,EAAAA,aAAAA,aAAW,WAAA,IAAA,CAAA,IAAA;AAAXA,EAAAA,aAAAA,aAAW,SAAA,IAAA,CAAA,IAAA;AAAXA,EAAAA,aAAAA,aAAW,QAAA,IAAA,CAAA,IAAA;AAAA,SAAXA;AAAW,GAAA,CAAA,CAAA;AAMvB,IAAYC,YAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,MAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AAKpB,IAAYC,YAAQ,0BAARA,WAAQ;AAARA,EAAAA,UAAAA,UAAQ,SAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,QAAA,IAAA,CAAA,IAAA;AAARA,EAAAA,UAAAA,UAAQ,QAAA,IAAA,CAAA,IAAA;AAAA,SAARA;AAAQ,GAAA,CAAA,CAAA;AAMpB,IAAYC,gBAAY,0BAAZA,eAAY;AAAZA,EAAAA,cAAAA,cAAY,QAAA,IAAA,CAAA,IAAA;AAAZA,EAAAA,cAAAA,cAAY,UAAA,IAAA,CAAA,IAAA;AAAZA,EAAAA,cAAAA,cAAY,UAAA,IAAA,CAAA,IAAA;AAAA,SAAZA;AAAY,GAAA,CAAA,CAAA;AAMxB,IAAYC,QAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,WAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,OAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,SAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAOhB,IAAYC,QAAI,0BAAJA,OAAI;AAAJA,EAAAA,MAAAA,MAAI,QAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,MAAA,IAAA,CAAA,IAAA;AAAJA,EAAAA,MAAAA,MAAI,aAAA,IAAA,CAAA,IAAA;AAAA,SAAJA;AAAI,GAAA,CAAA,CAAA;AAMhB,IAAMC,aAAY;EAChBC,YAAYnB,OAAMoB;EAClBC,kBAAkBrB,OAAMsB;EACxBC,cAAcvB,OAAMwB;EACpBC,gBAAgBzB,OAAM0B;EACtBC,eAAe3B,OAAM4B;EACrBC,gBAAgB7B,OAAM8B;EACtBC,qBAAqB/B,OAAMgC;EAC3BC,oBAAoBjC,OAAMkC;EAC1BC,oBAAoBnC,OAAMoC;EAC1BC,uBAAuBpC,WAAUqC;EACjCC,wBAAwBtC,WAAUuC;EAClCC,iBAAiBvC,WAAUwC;EAC3BC,kBAAkBzC,WAAU0C;EAC5BC,mBAAmB1C,WAAU2C;EAC7BC,eAAe5C,WAAU6C;EACzBC,eAAe9C,WAAU+C;EACzBC,cAAc/C,SAAQgD;EACtBC,cAAcjD,SAAQkD;EACtBC,kBAAkBnD,SAAQoD;EAC1BC,WAAWpD,MAAKqD;EAChBC,UAAUtD,MAAKuD;EACfC,YAAYxD,MAAKyD;EACjBC,aAAa1D,MAAK2D;EAClBC,YAAY5D,MAAK6D;EACjBC,UAAU9D,MAAK+D;EACfC,iBAAiBhE,MAAKiE;EACtBC,eAAelE,MAAKmE;EACpBC,UAAUpE,MAAKqE;EACfC,aAAarE,QAAOgD;EACpBsB,2BAA2BtE,QAAOuE;EAClCC,0DAA0DxE,QAAOyE;EACjEC,4CAA4C1E,QAAO2E;EACnDC,YAAY5E,QAAOoE;EACnBS,gBAAgB7E,QAAO8E;EACvBC,qCAAqC9E,qBAAoB+E;EACzDC,uBAAuB/E,eAAcgF;EACrCC,+BAA+BjF,eAAckF;EAC7CC,oBAAoBnF,eAAcoF;EAClCC,4BAA4BrF,eAAcsF;EAC1CC,eAAetF,QAAO+E;EACtBQ,YAAYvF,QAAOmF;EACnBK,YAAYxF,QAAOiE;EACnBwB,oBAAoBxF,SAAQY;EAC5B6E,gBAAgBzF,SAAQc;EACxB4E,kBAAkB1F,SAAQgB;EAC1B2E,uBAAuB3F,SAAQsB;EAC/BsE,sBAAsB5F,SAAQwB;EAC9BqE,sBAAsB7F,SAAQ0B;EAC9BoE,iBAAiB7F,UAAS8F;EAC1BC,gBAAgB/F,UAASgG;EACzBC,gBAAgBjG,UAASkG;EACzBC,iBAAiBnG,UAASoG;EAC1BC,mBAAmBrG,UAASsG;EAC5BC,iBAAiBvG,UAASwG;EAC1BC,wBAAwBxG,aAAYyG;EACpCC,sBAAsB1G,aAAY2G;EAClCC,sBAAsB5G,aAAY6G;EAClCC,mBAAmB7G,UAAS8G;EAC5BC,gBAAgB/G,UAASgH;EACzBC,kBAAkBhH,UAASiH;EAC3BC,iBAAiBlH,UAASmH;EAC1BC,iBAAiBpH,UAASqH;EAC1BC,sBAAsBrH,cAAasH;EACnCC,wBAAwBvH,cAAawH;EACrCC,wBAAwBzH,cAAa0H;EACrCC,gBAAgB1H,MAAKqG;EACrBsB,YAAY3H,MAAK4H;EACjBC,cAAc7H,MAAK8H;EACnBC,WAAW/H,MAAKI;EAChB4H,cAAc/H,MAAKgI;EACnBC,WAAWjI,MAAKA;EAChBkI,mBAAmBlI,MAAKmI;AAC1B;AACA,IAAAC,mBAAenI;;;ACbA,SAAfoI,cAAqCC,KAAgB;AACnD,WAASC,MAAMC,WAAWC,MAAMC,IAAI;AAClC,UAAMC,WAAWH,UAAUC,IAAI;AAE/BD,cAAUC,IAAI,IAAI,WAAmB;AAAA,eAAAG,OAAAC,UAAAC,QAANC,OAAI,IAAAC,MAAAJ,IAAA,GAAAK,OAAA,GAAAA,OAAAL,MAAAK,QAAA;AAAJF,aAAIE,IAAA,IAAAJ,UAAAI,IAAA;MAAA;AACjC,aAAOP,GAAGQ,KAAK,MAAMP,UAAU,GAAGI,IAAI;IACxC;EACF;AAEA,aAAWI,UAAU,CACnB,eACA,aACA,gBACA,YACA,aACA,eACA,gBACA,eACA,gBACA,cACA,QAAQ,GACP;AACD,UAAMC,UAAU;MACd,CAACC,MAAKC,KAAK,GAAGhB,IAAIiB,KAAKf,UAAUW,MAAM;MACvC,CAACE,MAAKG,OAAO,GAAGlB,IAAIiB,KAAKf,UAAU,GAAGW,MAAM,SAAS;MACrD,CAACE,MAAKI,IAAI,GAAGnB,IAAIiB,KAAKf,UAAU,GAAGW,MAAM,MAAM;IACjD;AAEAZ,UAAMD,IAAIiB,KAAKf,WAAWW,QAAQ,SAAUR,UAAmB;AAAA,eAAAe,QAAAb,UAAAC,QAANC,OAAI,IAAAC,MAAAU,QAAA,IAAAA,QAAA,IAAA,CAAA,GAAAC,QAAA,GAAAA,QAAAD,OAAAC,SAAA;AAAJZ,aAAIY,QAAA,CAAA,IAAAd,UAAAc,KAAA;MAAA;AAI3D,YAAMC,QAAQb,KAAKc,IAAI;AACvB,UAAIC,MAAMC;AAEV,UAAIH,UAAU,QAAQ;AACpBE,eAAOT,MAAKI;AACZM,mBAAWC;MACb,WAAW,OAAOJ,UAAU,UAAU;AACpCE,eAAOF,MAAME;AACbC,mBAAWH,MAAMK,QAAQ;MAC3B,OAAO;AACLH,eACE,OAAOF,UAAU,YAAYA,MAAMM,SAAS,GAAG,IAC3Cb,MAAKG,UACLH,MAAKC;AACXS,mBAAWI,WAAWP,KAAK;AAC3B,YACEA,UAAUI,UACV,CAACI,OAAOC,MAAMT,KAAK,KACnBQ,OAAOC,MAAMN,QAAQ,GACrB;AACA,gBAAM,IAAIO,MAAM,iBAAiBV,KAAK,QAAQT,MAAM,EAAE;QACxD;MACF;AAEA,UAAI,CAACC,QAAQU,IAAI,EACf,OAAM,IAAIQ,MACR,sBAAsBnB,MAAM,wBAAwBS,KAAK,GAC3D;AAEF,UAAIG,aAAaC,QAAW;AAC1B,eAAOZ,QAAQU,IAAI,EAAEZ,KAAK,MAAM,GAAGH,MAAMgB,QAAQ;MACnD,OAAO;AACL,eAAOX,QAAQU,IAAI,EAAEZ,KAAK,MAAM,GAAGH,IAAI;MACzC;IACF,CAAC;EACH;AAEA,WAASwB,oBAAoBC,iBAAiB;AAC5C,WAAOlC,IAAImC,gBAAgBC,UAAU;MACnCC,SAAS,WAAa;AACpB,cAAM;UAACC;UAAOC;QAAM,IAAIL,gBAAgB,GAAA3B,SAAO;AAC/C,eAAO;UACL+B,OAAOA,SAASE;UAChBD,QAAQA,UAAUC;QACpB;MACF;IACF,CAAC;EACH;AAEAvC,QAAMD,IAAIiB,KAAKf,WAAW,kBAAkB,SAAUG,UAAUoC,aAAa;AAG3E,QAAIA,aAAa;AACf,aAAOpC,SAASO,KAAK,MAAMqB,oBAAoBQ,WAAW,CAAC;IAC7D,OAAO;AACL,aAAO,KAAKC,iBAAiB;IAC/B;EACF,CAAC;AAED,WAASC,gBAAgBC,iBAAiB;AACxC,WAAO5C,IAAI6C,gBAAgBT,UAAU;MAACU,SAASF;IAAe,CAAC;EACjE;AAEA3C,QAAMD,IAAIiB,KAAKf,WAAW,kBAAkB,SAAUG,UAAU0C,aAAa;AAC3E1C,aAASO,KAAK,MAAM+B,gBAAgBI,WAAW,CAAC;EAClD,CAAC;AAED9C,QAAMD,IAAIgD,OAAO9C,WAAW,QAAQ,WAAY;AAG9CF,QAAIgD,OAAOC,QAAQ,IAAI;EACzB,CAAC;AAEDhD,QAAMD,IAAIiB,MAAM,UAAU,CAACiC,IAAGC,WAAW;AAEvC,WAAOA,SACHnD,IAAIiB,KAAKmC,iBAAiBD,MAAM,IAChCnD,IAAIiB,KAAKoC,cAAc;EAC7B,CAAC;AAEDpD,QAAMD,IAAIiB,KAAKf,WAAW,QAAQ,WAAY;AAG5CF,QAAIiB,KAAKgC,QAAQ,IAAI;EACvB,CAAC;AAEDhD,QAAMD,IAAIiB,KAAKf,WAAW,iBAAiB,WAAY;AACrD,aAASoD,KAAI,GAAGC,KAAI,KAAKC,cAAc,GAAGF,KAAIC,IAAG,EAAED,IAAG;AACpD,WAAKG,SAAS,CAAC,EAAEC,cAAc;IACjC;AACA,SAAKC,KAAK;EACZ,CAAC;AAED1D,QACED,IAAIiB,KAAKf,WACT,mBACA,SAAUG,UAAgE;AAAA,QAAtDiC,QAAK/B,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGiC;AAAG,QAAED,SAAMhC,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGiC;AAAG,QAAEoB,YAASrD,UAAAC,SAAA,KAAAD,UAAA,CAAA,MAAAmB,SAAAnB,UAAA,CAAA,IAAGsD,WAAUC;AAEnE,WAAOzD,SAASO,KAAK,MAAM0B,OAAOC,QAAQqB,SAAS;EACrD,CACF;AAEA,SAAO;IACLZ,QAAQhD,IAAIgD;IACZ/B,MAAMjB,IAAIiB;IACV,GAAG8C;EACL;AACF;;;AC3TA,IAAMC,QAAOC,cAAa,MAAMC,8BAAS,CAAC;;;ACoJ1C,OAAO,eAAe,qBAAqB,WAAW,aAAa;AAAA,EACjE,MAAe;AACb,WAAO,KAAK,gBAAgB,aAAa;AAAA,EAC3C;AAAA,EACA,IAAe,OAAoC;AACjD,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,YAAY;AAChC,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAChB,CAAC;AAgFM,SAAS,mBAAmB,gBAAwB,QAAwB;AACjF,SAAQ,iBAAiB,OAAU,SAAS,aAAa;AAC3D;AAEO,SAAS,UAAU,YAA4B;AACpD,SAAQ,eAAe,IAAK;AAC9B;;;ACrQA,IAAM,eAAe;AA0Bd,IAAM,gBAAN,MAAM,eAAc;AAAA,EAClB;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEC,eAA8B,CAAC;AAAA,EAC/B,eAAyB,CAAC;AAAA;AAAA,EAG3B,eAAoC,oBAAI,IAAI;AAAA,EAC3C,aAAqB;AAAA;AAAA,EAEtB,cAA2B;AAAA,EAC3B,kBAA+B;AAAA;AAAA,EAE/B,qBAAsD;AAAA,EAE7D,YACE,OACA,QACA,UAA8E,CAAC,GAC/E;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,eAAe,QAAQ,eAAe;AAC3C,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,KAAK,QAAQ,MAAM,kBAAkB,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAEhF,UAAM,OAAO,QAAQ;AACrB,SAAK,OAAO,IAAI,YAAY,IAAI;AAChC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,aAAa,IAAI,YAAY,IAAI;AAGtC,SAAK,KAAK,KAAK,EAAI;AAAA,EACrB;AAAA,EAEA,OAAO,OACL,OACA,QACA,aACA,SACe;AACf,WAAO,IAAI,eAAc,OAAO,QAAQ,EAAE,GAAG,SAAS,YAAY,CAAC;AAAA,EACrE;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,cAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAc;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,IAAI,KAAK;AAAA,MACT,IAAI,KAAK;AAAA,MACT,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,gBAAgB,cAA6B;AAC3C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,cAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,KAAqB;AAChC,UAAM,KAAK,KAAK;AAChB,SAAK,aAAa,IAAI,IAAI,GAAG;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAoC;AAC7C,WAAO,KAAK,aAAa,IAAI,MAAM;AAAA,EACrC;AAAA,EAEQ,YAAYC,IAAWC,IAAoB;AACjD,QAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,UAAM,OAAO,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC3D,WAAOD,MAAK,KAAK,KAAKA,KAAI,KAAK,IAAI,KAAK,SAASC,MAAK,KAAK,KAAKA,KAAI,KAAK,IAAI,KAAK;AAAA,EACpF;AAAA,EAEQ,8BAAsC;AAC5C,QAAI,KAAK,aAAa,WAAW,EAAG,QAAO;AAC3C,WAAO,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAAA,EACvD;AAAA,EAEQ,aAAa,OAAmB;AACtC,UAAM,aAAa,KAAK,4BAA4B;AACpD,QAAI,cAAc,EAAG,QAAO;AAC5B,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,GAAG,MAAM,IAAI;AAAA,MACb,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;AAAA,MAC1E,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,KAAK,MAAM;AAAA,MACX,UAAU,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAMC,KAAiB;AACrB,UAAM,OAAO,KAAK,SAAS,KAAK;AAChC,SAAK,KAAK,KAAK,EAAI;AACnB,SAAK,WAAW,KAAK,CAAC;AACtB,SAAK,aAAa,MAAM;AACxB,SAAK,aAAa;AAElB,QAAIA,KAAI;AACN,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,cAAM,SAAS,IAAI;AACnB,aAAK,GAAG,MAAM,IAAIA,IAAG;AACrB,aAAK,GAAG,SAAS,CAAC,IAAIA,IAAG;AACzB,aAAK,GAAG,SAAS,CAAC,IAAIA,IAAG;AACzB,aAAK,GAAG,SAAS,CAAC,IAAIA,IAAG;AAEzB,aAAK,GAAG,MAAM,IAAI;AAClB,aAAK,GAAG,SAAS,CAAC,IAAI;AACtB,aAAK,GAAG,SAAS,CAAC,IAAI;AACtB,aAAK,GAAG,SAAS,CAAC,IAAI;AAAA,MACxB;AAAA,IACF,OAAO;AACL,WAAK,GAAG,KAAK,CAAC;AACd,WAAK,GAAG,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,QAAQF,IAAWC,IAAW,MAAc,SAAe,SAAe,OAAe,GAAS;AAChG,QAAID,KAAI,KAAKA,MAAK,KAAK,UAAUC,KAAI,KAAKA,MAAK,KAAK,QAAS;AAC7D,QAAI,CAAC,KAAK,YAAYD,IAAGC,EAAC,EAAG;AAE7B,UAAM,MAAMA,KAAI,KAAK,SAASD;AAC9B,UAAM,SAAS,MAAM;AAErB,UAAM,cAAc,KAAK,aAAa,OAAO;AAC7C,UAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,SAAK,KAAK,GAAG,IAAI,KAAK,YAAY,CAAC,KAAK;AACxC,SAAK,WAAW,GAAG,IAAI;AAEvB,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAElC,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,EACpC;AAAA,EAEA,yBACEA,IACAC,IACA,MACA,SACA,SACA,OAAe,GACT;AAEN,SAAK,QAAQD,IAAGC,IAAG,MAAM,SAAS,SAAS,IAAI;AAAA,EACjD;AAAA,EAEA,SAAS,UAAkBD,IAAWC,IAAW,SAAe,SAAe,OAAe,GAAS;AACrG,QAAID,KAAI,KAAKA,MAAK,KAAK,UAAUC,KAAI,KAAKA,MAAK,KAAK,QAAS;AAC7D,QAAI,CAAC,KAAK,YAAYD,IAAGC,EAAC,EAAG;AAE7B,UAAM,MAAMA,KAAI,KAAK,SAASD;AAC9B,UAAM,SAAS,MAAM;AAErB,UAAM,cAAc,KAAK,aAAa,OAAO;AAC7C,UAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,SAAK,KAAK,GAAG,IAAI;AACjB,SAAK,WAAW,GAAG,IAAI;AAEvB,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAElC,SAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,SAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,EACpC;AAAA,EAEA,SACE,MACAA,IACAC,IACA,SACA,SACA,OAAe,GACf,YACM;AACN,UAAM,gBAAsB;AAAA,MAC1B,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AACA,UAAMC,MAAK,WAAW;AAEtB,QAAI,OAAOF;AACX,eAAW,MAAM,MAAM;AACrB,UAAI,QAAQ,KAAK,OAAQ;AACzB,UAAI,QAAQ,GAAG;AACb,aAAK,QAAQ,MAAMC,IAAG,IAAI,SAASC,KAAI,IAAI;AAAA,MAC7C;AACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAASF,IAAWC,IAAW,OAAe,QAAgB,SAAqB;AACjF,aAAS,MAAMA,IAAG,MAAMA,KAAI,UAAU,MAAM,KAAK,SAAS,OAAO;AAC/D,eAAS,MAAMD,IAAG,MAAMA,KAAI,SAAS,MAAM,KAAK,QAAQ,OAAO;AAC7D,YAAI,MAAM,KAAK,MAAM,EAAG;AACxB,YAAI,CAAC,KAAK,YAAY,KAAK,GAAG,EAAG;AAEjC,cAAM,MAAM,MAAM,KAAK,SAAS;AAChC,cAAM,SAAS,MAAM;AACrB,cAAM,cAAc,KAAK,aAAa,OAAO;AAE7C,aAAK,KAAK,GAAG,IAAI;AACjB,aAAK,GAAG,MAAM,IAAI,YAAY;AAC9B,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAClC,aAAK,GAAG,SAAS,CAAC,IAAI,YAAY;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ,SAAkC;AACxC,UAAM;AAAA,MACJ,GAAAA;AAAA,MACA,GAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA,iBAAiB;AAAA,IACnB,IAAI;AAEJ,QAAI,SAAS,KAAK,UAAU,EAAG;AAG/B,UAAM,QAAQ;AAAA,MACZ,KAAK,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,KAAK;AAAA,MACvE,OAAO,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,MAC3E,QAAQ,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,QAAQ;AAAA,MAC7E,MAAM,WAAW,QAAS,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,MAAM;AAAA,IAC3E;AAGA,UAAM,cAAc,QAAQ,qBAAqB,KAAK,sBAAsB,QAAQ,WAAW;AAG/F,QAAI,YAAY;AACd,YAAM,aAAaD,MAAK,MAAM,OAAO,IAAI;AACzC,YAAM,aAAaC,MAAK,MAAM,MAAM,IAAI;AACxC,YAAM,YAAY,SAAS,MAAM,OAAO,IAAI,MAAM,MAAM,QAAQ,IAAI;AACpE,YAAM,aAAa,UAAU,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS,IAAI;AACtE,UAAI,YAAY,KAAK,aAAa,GAAG;AACnC,aAAK,SAAS,YAAY,YAAY,WAAW,YAAY,eAAe;AAAA,MAC9E;AAAA,IACF;AAEA,QAAI,CAAC,OAAQ;AAEb,UAAM,cAAoB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE;AAI3F,UAAM,UAAU,YAAY,CAAC;AAC7B,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,aAAa,YAAY,CAAC;AAChC,UAAM,cAAc,YAAY,CAAC;AACjC,UAAM,aAAa,YAAY,CAAC;AAChC,UAAM,WAAW,YAAY,CAAC;AAG9B,QAAI,MAAM,KAAK;AACb,UAAI,MAAM,KAAM,MAAK,SAAS,SAASD,IAAGC,IAAG,aAAa,WAAW;AACrE,eAAS,MAAM,GAAG,MAAM,QAAQ,GAAG,OAAO;AACxC,aAAK,SAAS,YAAYD,KAAI,KAAKC,IAAG,aAAa,WAAW;AAAA,MAChE;AACA,UAAI,MAAM,SAAS,QAAQ,EAAG,MAAK,SAAS,UAAUD,KAAI,QAAQ,GAAGC,IAAG,aAAa,WAAW;AAAA,IAClG;AAGA,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,UAAI,MAAM,KAAM,MAAK,SAAS,YAAYD,IAAGC,KAAI,SAAS,GAAG,aAAa,WAAW;AACrF,eAAS,MAAM,GAAG,MAAM,QAAQ,GAAG,OAAO;AACxC,aAAK,SAAS,YAAYD,KAAI,KAAKC,KAAI,SAAS,GAAG,aAAa,WAAW;AAAA,MAC7E;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,aAAK,SAAS,aAAaD,KAAI,QAAQ,GAAGC,KAAI,SAAS,GAAG,aAAa,WAAW;AAAA,IACtF;AAGA,QAAI,MAAM,MAAM;AACd,eAAS,MAAM,GAAG,MAAM,SAAS,GAAG,OAAO;AACzC,aAAK,SAAS,UAAUD,IAAGC,KAAI,KAAK,aAAa,WAAW;AAAA,MAC9D;AAAA,IACF;AAGA,QAAI,MAAM,SAAS,QAAQ,GAAG;AAC5B,eAAS,MAAM,GAAG,MAAM,SAAS,GAAG,OAAO;AACzC,aAAK,SAAS,UAAUD,KAAI,QAAQ,GAAGC,KAAI,KAAK,aAAa,WAAW;AAAA,MAC1E;AAAA,IACF;AAGA,QAAI,SAAS,MAAM,OAAO,QAAQ,GAAG;AACnC,YAAM,cAAc,QAAQ;AAC5B,YAAM,iBAAiB,MAAM,SAAS,cAAc,MAAM,MAAM,GAAG,WAAW,IAAI;AAClF,UAAI;AACJ,UAAI,mBAAmB,UAAU;AAC/B,iBAASD,KAAI,KAAK,OAAO,QAAQ,eAAe,UAAU,CAAC;AAAA,MAC7D,WAAW,mBAAmB,SAAS;AACrC,iBAASA,KAAI,QAAQ,eAAe,SAAS;AAAA,MAC/C,OAAO;AACL,iBAASA,KAAI;AAAA,MACf;AACA,WAAK,SAAS,gBAAgB,QAAQC,IAAG,aAAa,WAAW;AAAA,IACnE;AAAA,EACF;AAAA,EAEQ,sBAAsB,aAAmC;AAE/D,UAAM,SAAmC;AAAA,MACvC,SAAS,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAChG,QAAQ,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAC/F,QAAQ,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,MAC/F,OAAO,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAM;AAAA,IAChG;AACA,UAAM,QAAQ,OAAO,eAAe,SAAS,KAAK,OAAO;AACzD,WAAO,IAAI,YAAY,KAAK;AAAA,EAC9B;AAAA,EAEA,gBAAgBD,IAAWC,IAAW,OAAe,QAAsB;AACzE,QAAI,KAAK,aAAa,SAAS,GAAG;AAEhC,YAAM,UAAU,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAC9D,YAAM,KAAK,KAAK,IAAID,IAAG,QAAQ,CAAC;AAChC,YAAM,KAAK,KAAK,IAAIC,IAAG,QAAQ,CAAC;AAChC,YAAM,KAAK,KAAK,IAAID,KAAI,OAAO,QAAQ,IAAI,QAAQ,KAAK,IAAI;AAC5D,YAAM,KAAK,KAAK,IAAIC,KAAI,QAAQ,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAC9D,WAAK,aAAa,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,QAAQ,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;AAAA,IAC1F,OAAO;AACL,WAAK,aAAa,KAAK,EAAE,GAAAD,IAAG,GAAAC,IAAG,OAAO,OAAO,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,SAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAEA,oBAA0B;AACxB,SAAK,eAAe,CAAC;AAAA,EACvB;AAAA,EAEA,YAAY,SAAuB;AACjC,UAAM,UAAU,KAAK,4BAA4B;AACjD,SAAK,aAAa,KAAK,UAAU,OAAO;AAAA,EAC1C;AAAA,EAEA,aAAmB;AACjB,SAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAEA,oBAA4B;AAC1B,WAAO,KAAK,4BAA4B;AAAA,EAC1C;AAAA,EAEA,eAAqB;AACnB,SAAK,eAAe,CAAC;AAAA,EACvB;AAAA,EAEA,OAAO,OAAe,QAAsB;AAC1C,SAAK,SAAS;AACd,SAAK,UAAU;AACf,UAAM,OAAO,QAAQ;AACrB,SAAK,OAAO,IAAI,YAAY,IAAI;AAChC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,KAAK,IAAI,aAAa,OAAO,CAAC;AACnC,SAAK,aAAa,IAAI,YAAY,IAAI;AACtC,SAAK,KAAK,KAAK,EAAI;AAAA,EACrB;AAAA;AAAA,EAGA,eAA+B;AAC7B,UAAM,QAAwB,CAAC;AAE/B,aAAS,MAAM,GAAG,MAAM,KAAK,SAAS,OAAO;AAC3C,YAAM,QAAwB,CAAC;AAC/B,UAAI,cAAmC;AAEvC,eAAS,MAAM,GAAG,MAAM,KAAK,QAAQ,OAAO;AAC1C,cAAM,MAAM,MAAM,KAAK,SAAS;AAChC,cAAM,SAAS,MAAM;AAGrB,YAAI,KAAK,WAAW,GAAG,IAAI,aAAc;AAEzC,cAAM,WAAW,KAAK,KAAK,GAAG;AAC9B,cAAM,KAAK,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAC/D,cAAM,MAAM,KAAK,GAAG,MAAM;AAC1B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,MAAM;AAC1B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,MAAM,KAAK,GAAG,SAAS,CAAC;AAC9B,cAAM,OAAO,KAAK,WAAW,GAAG,IAAI;AAEpC,cAAME,MAAW;AAAA,UACf,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAC3B,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC/C;AACA,cAAMD,MAAW;AAAA,UACf,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAAK,GAAG;AAAA,UAC3B,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AAAA,QAC/C;AAEA,YACE,eACA,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,GAAG,MAAM,OACrB,YAAY,eAAe,MAC3B;AACA,sBAAY,QAAQ;AACpB,sBAAY,SAAS;AAAA,QACvB,OAAO;AACL,cAAI,YAAa,OAAM,KAAK,WAAW;AACvC,wBAAc,EAAE,MAAM,IAAI,IAAAC,KAAI,IAAAD,KAAI,YAAY,MAAM,OAAO,EAAE;AAAA,QAC/D;AAAA,MACF;AAEA,UAAI,YAAa,OAAM,KAAK,WAAW;AACvC,YAAM,KAAK,EAAE,MAAM,CAAC;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,MAAWF,IAAWC,IAAiB;AACxD,QAAI,CAAC,QAAQ,CAAC,KAAK,gBAAiB;AAEpC,UAAM,QAAQ,KAAK,gBAAgB;AACnC,QAAI,CAAC,MAAO;AAEZ,UAAM,YAAY,KAAK;AACvB,UAAM,YAAY,KAAK;AAEvB,aAAS,UAAU,GAAG,UAAU,MAAM,QAAQ,WAAW;AACvD,YAAM,OAAO,MAAM,OAAO;AAC1B,UAAI,CAAC,KAAM;AAEX,UAAI,OAAOD;AACX,UAAI,aAAa,cAAc,UAAU,WAAW;AAClD,cAAM,YAAY,KAAK,OAAO,OAAO,CAAC,KAAa,MAAW,MAAM,EAAE,KAAK,QAAQ,CAAC;AACpF,YAAI,cAAc,UAAU;AAC1B,iBAAOA,KAAI,KAAK,OAAO,YAAY,aAAa,CAAC;AAAA,QACnD,WAAW,cAAc,SAAS;AAChC,iBAAOA,KAAI,YAAY;AAAA,QACzB;AAAA,MACF;AACA,iBAAW,SAAS,KAAK,QAAQ;AAC/B,cAAM,OAAO,MAAM;AACnB,cAAM,UAAU,MAAM;AACtB,cAAM,UAAU,MAAM;AACtB,YAAI,OAAO,MAAM,cAAc;AAG/B,YAAI,MAAM,QAAQ,MAAM,KAAK,KAAK;AAChC,gBAAM,SAAS,KAAK,aAAa,MAAM,KAAK,GAAG;AAC/C,iBAAO,mBAAmB,MAAM,MAAM;AAAA,QACxC;AAEA,mBAAW,MAAM,MAAM;AACrB,cAAI,QAAQ,KAAK,OAAQ;AACzB,cAAI,QAAQ,KAAKC,KAAI,WAAW,KAAKA,KAAI,UAAU,KAAK,SAAS;AAC/D,iBAAK,QAAQ,MAAMA,KAAI,SAAS,IAAI,SAAS,SAAS,IAAI;AAAA,UAC5D;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe,gBAAqBD,IAAWC,IAAiB;AAC9D,SAAK,mBAAmB,gBAAgBD,IAAGC,EAAC;AAAA,EAC9C;AAAA,EAEA,gBACE,OACA,OACA,aACA,UAAkB,GAClB,UAAkB,GAClB,aACA,cACM;AACN,UAAM,KAAK,eAAe,YAAY;AACtC,UAAM,KAAK,gBAAgB,YAAY;AACvC,UAAM,UAAU,YAAY;AAC5B,UAAM,QAAQ,YAAY;AAC1B,UAAM,QAAQ,YAAY;AAC1B,UAAM,UAAU,YAAY;AAC5B,UAAM,UAAU,YAAY;AAE5B,aAAS,MAAM,GAAG,MAAM,IAAI,OAAO;AACjC,YAAM,SAAS,UAAU;AACzB,YAAM,SAAS,QAAQ;AACvB,UAAI,SAAS,KAAK,UAAU,YAAY,OAAQ;AAChD,UAAI,SAAS,KAAK,UAAU,KAAK,QAAS;AAE1C,eAAS,MAAM,GAAG,MAAM,IAAI,OAAO;AACjC,cAAM,SAAS,UAAU;AACzB,cAAM,SAAS,QAAQ;AACvB,YAAI,SAAS,KAAK,UAAU,YAAY,MAAO;AAC/C,YAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AACzC,YAAI,CAAC,KAAK,YAAY,QAAQ,MAAM,EAAG;AAEvC,cAAM,SAAS,SAAS,UAAU;AAClC,cAAM,SAAS,SAAS,KAAK,SAAS;AACtC,cAAM,YAAY,SAAS;AAC3B,cAAM,YAAY,SAAS;AAE3B,aAAK,KAAK,MAAM,IAAI,QAAQ,MAAM;AAClC,aAAK,WAAW,MAAM,IAAI,QAAQ,MAAM;AAGxC,cAAM,MAAM,MAAM,YAAY,CAAC;AAC/B,cAAM,aAAa,KAAK,4BAA4B;AACpD,aAAK,GAAG,SAAS,IAAI,MAAM,SAAS;AACpC,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM;AAG/B,cAAM,MAAM,MAAM,YAAY,CAAC;AAC/B,aAAK,GAAG,SAAS,IAAI,MAAM,SAAS;AACpC,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM,YAAY,CAAC;AAC5C,aAAK,GAAG,YAAY,CAAC,IAAI,MAAM;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,YAAiBD,IAAWC,IAAiB;AAC1D,QAAI,CAAC,WAAY;AAEjB,UAAM,WAAW,WAAW,YAAY;AACxC,UAAM,OAAO,WAAW,QAAQ;AAChC,UAAM,QAAQ,KAAK,MAAM,IAAI;AAG7B,UAAM,MAAM,WAAW,YAAY,cAAc;AAAA,MAC/C,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AACA,UAAM,MAAM,WAAW,YAAY,cAAc;AAAA,MAC/C,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MAAG,GAAG;AAAA,MACrB,QAAQ,IAAI,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IACvC;AAEA,UAAM,cAAc,SAAS,SAAS,IAAI,SAAS,SAAS,KAAK,UAAUA;AAE3E,QAAI,SAAS,MAAM,WAAW,sBAAsB,WAAW,mBAAmB,SAAS,GAAG;AAE5F,UAAI,OAAO,KAAK,oBAAoB,SAASD,KAAI,IAAIA;AACrD,iBAAW,SAAS,WAAW,oBAAoB;AACjD,cAAM,UAAU,MAAM,MAAM;AAC5B,cAAM,UAAU,MAAM,MAAM;AAC5B,cAAM,QAAQ,MAAM,cAAc,KAAK;AACvC,mBAAW,MAAM,MAAM,MAAM;AAC3B,cAAI,QAAQ,KAAK,OAAQ;AACzB,cAAI,QAAQ,KAAKC,MAAK,KAAKA,KAAI,KAAK,SAAS;AAC3C,iBAAK,QAAQ,MAAMA,IAAG,IAAI,SAAS,SAAS,IAAI;AAAA,UAClD;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,eAAS,MAAM,GAAG,MAAM,aAAa,OAAO;AAC1C,cAAM,UAAU,SAAS,UAAU;AACnC,YAAI,UAAU,KAAK,WAAW,MAAM,OAAQ;AAC5C,cAAM,SAASA,KAAI;AACnB,YAAI,SAAS,KAAK,UAAU,KAAK,QAAS;AAE1C,cAAM,OAAO,MAAM,OAAO;AAC1B,iBAAS,MAAM,GAAG,MAAM,KAAK,QAAQ,OAAO;AAC1C,gBAAM,SAAS,SAAS,UAAU;AAClC,cAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AACzC,gBAAM,SAASD,KAAI;AACnB,cAAI,SAAS,KAAK,UAAU,KAAK,OAAQ;AAEzC,eAAK,QAAQ,QAAQ,QAAQ,KAAK,MAAM,GAAG,KAAK,KAAK,CAAC;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAGA,UAAM,SAAS,WAAW,gBAAgB;AAC1C,QAAI,QAAQ;AACV,YAAM,UAAUA,KAAI,OAAO;AAC3B,YAAM,UAAUC,KAAI,OAAO;AAC3B,UAAI,WAAW,KAAK,UAAU,KAAK,UAAU,WAAW,KAAK,UAAU,KAAK,SAAS;AACnF,cAAM,WAAW,KAAK,eAAe;AACrC,YAAI,KAAK,oBAAoB,QAAQ;AAEnC,eAAK,qBAAqB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,QACrD,OAAO;AAEL,gBAAM,MAAM,UAAU,KAAK,SAAS;AACpC,gBAAM,WAAW,KAAK,KAAK,GAAG;AAC9B,gBAAM,KAAK,aAAa,KAAK,aAAa,KAAO,MAAM,OAAO,cAAc,QAAQ;AACpF,gBAAM,SAAS,MAAM;AACrB,gBAAM,SAAS;AAAA,YACb,GAAG,KAAK,GAAG,MAAM;AAAA,YACjB,GAAG,KAAK,GAAG,SAAS,CAAC;AAAA,YACrB,GAAG,KAAK,GAAG,SAAS,CAAC;AAAA,YACrB,GAAG,KAAK,GAAG,SAAS,CAAC,KAAK;AAAA,UAC5B;AACA,eAAK,QAAQ,SAAS,SAAS,IAAI,UAAU,QAAQ,EAAE;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAA8B;AAAA,EAAC;AAAA,EAC/B,mBAAyB;AAAA,EAAC;AAAA,EAC1B,sBAA4B;AAAA,EAAC;AAAA,EAC7B,kCAAwC;AAAA,EAAC;AAAA,EACzC,WAAiB;AAAA,EAAC;AAAA,EAClB,cAAc,OAAqB;AACjC,WAAO;AAAA,EACT;AAAA,EACA,cAAoB;AAAA,EAAC;AAAA,EACrB,mBAA+B;AAC7B,WAAO,IAAI,WAAW,CAAC;AAAA,EACzB;AAAA,EACA,UAAgB;AAAA,EAAC;AACnB;;;AC3rBA,IAAMG,kBAAiB;AAAA,EACrB,MAAM,KAAK;AAAA,EACX,KAAK,KAAK;AAAA,EACV,QAAQ,KAAK;AAAA,EACb,WAAW,KAAK;AAAA,EAChB,kBAAkB,KAAK;AAAA,EACvB,SAAS,KAAK;AAAA,EACd,kBAAkB,KAAK;AACzB;AAEA,IAAMC,gBAAe;AACrB,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AAajC,IAAM,kBAA8C;AAAA;AAAA,EAElD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC1D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC7D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGvE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,EAG9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAClD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACjD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAChD,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC/C,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EAC9D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACxE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA,EACxE,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,SAAS;AAAA;AAAA;AAAA,EAGxE,MAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EAC5D,MAAQ,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EAC3D,MAAQ,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA,EACzD,MAAQ,EAAE,OAAO,MAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA;AAAA;AAAA,EAG1D,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA,EACxB,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA,EACxB,MAAQ,EAAE,MAAM,QAAQ;AAAA;AAAA;AAAA,EAGxB,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAClC,MAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACrC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,IAAI,MAAM,MAAM,QAAQ;AAAA;AAAA,EAClC,MAAQ,EAAE,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACrC,MAAQ,EAAE,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EACpC,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAAA,EAC9C,MAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ;AAAA;AAAA,EACjD,MAAQ,EAAE,IAAI,MAAM,MAAM,MAAM,MAAM,QAAQ;AAAA;AAChD;AAOO,IAAM,gBAAN,MAAoB;AAAA,EACjB,YAAoB;AAAA,EACpB,aAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,iBAAyB;AAAA,EAEjC,YAAY,UAAgC,CAAC,GAAG;AAC9C,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,WAAW,QAAQ,YAAY;AAAA,EACtC;AAAA,EAEA,YAAY,KAAkE;AAC5E,QAAI,OAAO,GAAG,KAAK,QAAQ,MAAM,KAAK,UAAU;AAChD,UAAM,UAAU,IAAI,YAAY,GAAG;AACnC,SAAK,YAAY,QAAQ;AACzB,SAAK,aAAa,KAAK,KAAK,KAAK,WAAW,GAAG;AAC/C,SAAK,iBAAiB,KAAK,KAAK,KAAK,WAAW,GAAG;AACnD,WAAO,EAAE,OAAO,KAAK,WAAW,QAAQ,KAAK,WAAW;AAAA,EAC1D;AAAA,EAEA,cAAiD;AAC/C,WAAO,EAAE,OAAO,KAAK,WAAW,QAAQ,KAAK,WAAW;AAAA,EAC1D;AAAA,EAEA,MAAM,KAA+B,QAAuB,WAA8B,QAAqC;AAC7H,UAAM,EAAE,MAAM,IAAAC,KAAI,IAAAC,KAAI,WAAW,IAAI;AACrC,UAAM,OAAO,OAAO;AACpB,UAAM,OAAO,OAAO;AACpB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAGhB,aAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,UAAI,cAAc;AAClB,UAAI,OAAO,IACT,OAAO,IACP,OAAO,IACP,OAAO;AAET,eAAS,MAAM,GAAG,OAAO,MAAM,OAAO;AACpC,YAAI,IAAI,GACN,IAAI,GACJC,KAAI,GACJ,IAAI;AACN,YAAI,MAAM,MAAM;AACd,gBAAM,MAAM,MAAM,OAAO;AACzB,gBAAM,SAAS,MAAM;AACrB,gBAAM,OAAO,WAAW,GAAG,IAAI;AAC/B,gBAAM,YAAY,CAAC,EAAE,OAAOJ,gBAAe;AAC3C,cAAI,WAAW;AAEb,gBAAIE,IAAG,MAAM;AACb,gBAAIA,IAAG,SAAS,CAAC;AACjB,YAAAE,KAAIF,IAAG,SAAS,CAAC;AACjB,gBAAIA,IAAG,SAAS,CAAC;AAAA,UACnB,OAAO;AACL,gBAAIC,IAAG,MAAM;AACb,gBAAIA,IAAG,SAAS,CAAC;AACjB,YAAAC,KAAID,IAAG,SAAS,CAAC;AACjB,gBAAIA,IAAG,SAAS,CAAC;AAAA,UACnB;AAAA,QACF;AAEA,YAAI,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQC,OAAM,QAAQ,MAAM,MAAM;AACtE;AAAA,QACF;AAGA,YAAI,OAAO,KAAK,MAAM,aAAa;AACjC,cAAI,YAAY,UAAU,MAAM,MAAM,MAAM,IAAI;AAChD,cAAI,SAAS,cAAc,IAAI,MAAM,KAAK,MAAM,eAAe,IAAI,EAAE;AAAA,QACvE;AAEA,sBAAc;AACd,eAAO;AACP,eAAO;AACP,eAAOA;AACP,eAAO;AAAA,MACT;AAAA,IACF;AAGA,aAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,eAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,cAAM,MAAM,MAAM,OAAO;AAGzB,YAAI,WAAW,GAAG,IAAIH,cAAc;AAEpC,cAAM,WAAW,KAAK,GAAG;AACzB,YAAI,aAAa,KAAK,aAAa,GAAM;AAEzC,cAAM,SAAS,MAAM;AACrB,cAAM,OAAO,WAAW,GAAG,IAAI;AAC/B,cAAM,YAAY,CAAC,EAAE,OAAOD,gBAAe;AAE3C,YAAI,KAAa,KAAa,KAAa;AAC3C,YAAI,WAAW;AAEb,gBAAMG,IAAG,MAAM;AACf,gBAAMA,IAAG,SAAS,CAAC;AACnB,gBAAMA,IAAG,SAAS,CAAC;AACnB,gBAAMA,IAAG,SAAS,CAAC;AAEnB,cAAI,QAAQ,GAAG;AACb,kBAAM;AAAG,kBAAM;AAAG,kBAAM;AAAG,kBAAM;AAAA,UACnC;AAAA,QACF,OAAO;AACL,gBAAMD,IAAG,MAAM;AACf,gBAAMA,IAAG,SAAS,CAAC;AACnB,gBAAMA,IAAG,SAAS,CAAC;AACnB,gBAAMA,IAAG,SAAS,CAAC;AAAA,QACrB;AAEA,YAAI,QAAQ,EAAG;AAEf,cAAM,SAAS,CAAC,EAAE,OAAOF,gBAAe;AACxC,cAAM,WAAW,CAAC,EAAE,OAAOA,gBAAe;AAC1C,cAAM,QAAQ,CAAC,EAAE,OAAOA,gBAAe;AACvC,cAAM,cAAc,CAAC,EAAE,OAAOA,gBAAe;AAE7C,cAAM,aAAa,QAAQ,MAAM,MAAM;AAGvC,YAAI,YAAY,QAAU,YAAY,MAAQ;AAC5C,gBAAM,MAAM,gBAAgB,QAAQ;AACpC,cAAI,KAAK;AACP,kBAAM,QAAQ,MAAM;AACpB,kBAAM,QAAQ,MAAM;AACpB,kBAAM,KAAK,QAAQ,KAAK;AACxB,kBAAM,KAAK,QAAQ,KAAK;AACxB,gBAAI,cAAc,UAAU,KAAK,KAAK,KAAK,UAAU;AACrD,gBAAI,UAAU;AAEd,gBAAI,IAAI,SAAS,UAAU;AAEzB,oBAAM,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC1C,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,IAAI,MAAM;AACZ,oBAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAC5D,oBAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAA,cAC9D;AACA,kBAAI,IAAI,OAAO;AACb,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,QAAQ,IAAI,KAAK,MAAM,CAAC;AACjE,oBAAI,OAAO,IAAI,KAAK,MAAM,CAAC;AAAG,oBAAI,OAAO,QAAQ,IAAI,KAAK,MAAM,CAAC;AAAA,cACnE;AACA,kBAAI,IAAI,IAAI;AACV,oBAAI,OAAO,KAAK,MAAM,GAAG,KAAK;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAC5D,oBAAI,OAAO,KAAK,MAAM,GAAG,KAAK;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA,cAC9D;AACA,kBAAI,IAAI,MAAM;AACZ,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,QAAQ,EAAE;AACjE,oBAAI,OAAO,KAAK,MAAM,GAAG,EAAE;AAAG,oBAAI,OAAO,KAAK,MAAM,GAAG,QAAQ,EAAE;AAAA,cACnE;AACA,kBAAI,OAAO;AAAA,YACb,WAAW,IAAI,KAAK;AAElB,oBAAM,KAAK,KAAK;AAChB,oBAAM,KAAK,KAAK;AAChB,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,IAAI,QAAQ,MAAM;AAEpB,oBAAI,QAAQ,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG;AAAA,cACvE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,OAAO,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,cACtE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,QAAQ,IAAI,OAAO,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE;AAAA,cAClE,WAAW,IAAI,QAAQ,MAAM;AAE3B,oBAAI,QAAQ,OAAO,OAAO,IAAI,IAAI,GAAG,GAAG,KAAK,KAAK,GAAG;AAAA,cACvD;AACA,kBAAI,OAAO;AAAA,YACb,WAAW,aAAa,QAAU,aAAa,QAAU,aAAa,MAAQ;AAE5E,kBAAI,YAAY;AAChB,kBAAI,UAAU;AACd,kBAAI,aAAa,QAAU,aAAa,MAAQ;AAE9C,oBAAI,OAAO,QAAQ,IAAI,KAAK;AAC5B,oBAAI,OAAO,OAAO,QAAQ,EAAE;AAAA,cAC9B;AACA,kBAAI,aAAa,QAAU,aAAa,MAAQ;AAE9C,oBAAI,OAAO,OAAO,KAAK;AACvB,oBAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE;AAAA,cACnC;AACA,kBAAI,OAAO;AAAA,YACb,OAAO;AACL,kBAAI,YAAY,IAAI,SAAS,UAAU,IAAI;AAC3C,kBAAI,UAAU;AACd,kBAAI,IAAI,MAAO;AAAE,oBAAI,OAAO,OAAO,EAAE;AAAG,oBAAI,OAAO,IAAI,EAAE;AAAA,cAAE;AAC3D,kBAAI,IAAI,OAAO;AAAE,oBAAI,OAAO,IAAI,EAAE;AAAG,oBAAI,OAAO,QAAQ,IAAI,EAAE;AAAA,cAAE;AAChE,kBAAI,IAAI,IAAO;AAAE,oBAAI,OAAO,IAAI,KAAK;AAAG,oBAAI,OAAO,IAAI,EAAE;AAAA,cAAE;AAC3D,kBAAI,IAAI,MAAO;AAAE,oBAAI,OAAO,IAAI,EAAE;AAAG,oBAAI,OAAO,IAAI,QAAQ,EAAE;AAAA,cAAE;AAChE,kBAAI,OAAO;AAAA,YACb;AACA;AAAA,UACF;AAAA,QACF;AAGA,YAAI,YAAY,UAAU,KAAK,KAAK,KAAK,UAAU;AAGnD,YAAI,YAAY;AAChB,YAAI,SAAU,cAAa;AAC3B,YAAI,OAAQ,cAAa;AACzB,qBAAa,GAAG,KAAK,QAAQ,MAAM,KAAK,UAAU;AAClD,YAAI,OAAO;AAEX,cAAM,YAAY,OAAO,cAAc,QAAQ;AAC/C,cAAMK,KAAI,MAAM;AAChB,cAAMC,KAAI,MAAM,KAAK,aAAa,KAAK;AAEvC,YAAI,SAAS,WAAWD,IAAGC,EAAC;AAG5B,YAAI,aAAa;AACf,gBAAM,WAAW,CAAC,EAAE,OAAON,gBAAe;AAC1C,gBAAM,WAAW,CAAC,EAAE,OAAOA,gBAAe;AAC1C,cAAI,cAAc,IAAI;AACtB,cAAI,YAAY;AAChB,gBAAM,aAAa,MAAM,KAAK,aAAa,KAAK,iBAAiB;AACjE,cAAI,UAAU;AACZ,gBAAI,UAAU;AACd,gBAAI,YAAY,CAAC,KAAK,GAAG,CAAC;AAAA,UAC5B,WAAW,UAAU;AACnB,gBAAI,YAAY,CAAC,GAAG,CAAC,CAAC;AAAA,UACxB;AACA,cAAI,UAAU;AACd,cAAI,OAAOK,IAAG,UAAU;AACxB,cAAI,OAAOA,KAAI,IAAI,UAAU;AAC7B,cAAI,OAAO;AACX,cAAI,YAAY,UAAU;AACxB,gBAAI,YAAY,CAAC,CAAC;AAClB,gBAAI,UAAU;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ;AACV,YAAM,UAAU,CAAC,OAAO,YAAY,KAAK,MAAM,YAAY,IAAI,IAAI,wBAAwB,IAAI,MAAM;AACrG,UAAI,SAAS;AACX,YAAI,YAAY,UAAU,OAAO,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,KAAK,CAAC;AAC7F,YAAI,SAAS,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,mBAAmB,EAAE;AAAA,MAClE;AAAA,IACF;AAGA,QAAI,WAAW,QAAQ;AACrB,UAAI,YAAY;AAChB,eAAS,MAAM,GAAG,MAAM,MAAM,OAAO;AACnC,YAAI,WAAW;AACf,iBAAS,MAAM,GAAG,OAAO,MAAM,OAAO;AACpC,gBAAM,WAAW,MAAM,QAAQ,UAAU,WAAW,KAAK,GAAG;AAC5D,cAAI,YAAY,aAAa,IAAI;AAC/B,uBAAW;AAAA,UACb,WAAW,CAAC,YAAY,aAAa,IAAI;AACvC,gBAAI,SAAS,WAAW,IAAI,MAAM,KAAK,MAAM,YAAY,IAAI,EAAE;AAC/D,uBAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,UAAU,GAAW,GAAWD,IAAW,GAAmB;AACrE,QAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAM,KAAK,KAAK,MAAM,IAAI,GAAG;AAC7B,QAAM,KAAK,KAAK,MAAMA,KAAI,GAAG;AAC7B,SAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACpC;;;ACtcO,IAAM,mBAAN,MAAuB;AAAA,EACpB,YAAoB;AAAA,EACpB,YAAoB;AAAA,EACpB,UAAkB;AAAA,EAClB,UAAkB;AAAA,EAClB,UAAmB;AAAA,EACnB,aAAsB;AAAA,EAE9B,eAAe,KAAa,KAAmB;AAC7C,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,gBAAgB,KAAa,KAAmB;AAC9C,QAAI,CAAC,KAAK,WAAY;AACtB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,eAAqB;AACnB,SAAK,aAAa;AAElB,QAAI,KAAK,cAAc,KAAK,WAAW,KAAK,cAAc,KAAK,SAAS;AACtE,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,SAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,mBAA0C;AACxC,QAAI,CAAC,KAAK,QAAS,QAAO;AAE1B,QAAI,WAAW,KAAK;AACpB,QAAI,WAAW,KAAK;AACpB,QAAI,SAAS,KAAK;AAClB,QAAI,SAAS,KAAK;AAGlB,QAAI,WAAW,UAAW,aAAa,UAAU,WAAW,QAAS;AACnE,YAAM,SAAS;AACf,YAAM,SAAS;AACf,iBAAW;AACX,iBAAW;AACX,eAAS;AACT,eAAS;AAAA,IACX;AAEA,WAAO,EAAE,UAAU,UAAU,QAAQ,OAAO;AAAA,EAC9C;AAAA,EAEA,WAAW,KAAa,KAAsB;AAC5C,UAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,EAAE,UAAU,UAAU,QAAQ,OAAO,IAAI;AAE/C,QAAI,MAAM,YAAY,MAAM,OAAQ,QAAO;AAC3C,QAAI,aAAa,QAAQ;AACvB,aAAO,OAAO,YAAY,MAAM;AAAA,IAClC;AACA,QAAI,QAAQ,SAAU,QAAO,OAAO;AACpC,QAAI,QAAQ,OAAQ,QAAO,MAAM;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,QAA+B;AAC7C,UAAM,QAAQ,KAAK,iBAAiB;AACpC,QAAI,CAAC,MAAO,QAAO;AAEnB,UAAM,EAAE,UAAU,UAAU,QAAQ,OAAO,IAAI;AAC/C,UAAM,QAAkB,CAAC;AAEzB,aAAS,MAAM,UAAU,OAAO,QAAQ,OAAO;AAC7C,UAAI,YAAY,QAAQ,WAAW,WAAW;AAC9C,UAAI,UAAU,QAAQ,SAAS,SAAS,OAAO;AAG/C,UAAI,OAAO;AACX,eAAS,MAAM,WAAW,MAAM,WAAW,MAAM,OAAO,OAAO,OAAO;AACpE,cAAM,MAAM,MAAM,OAAO,QAAQ;AACjC,cAAM,WAAW,OAAO,KAAK,GAAG;AAChC,gBAAQ,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,MAC9D;AAGA,YAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,IAC3B;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;AC5GO,SAAS,sBACd,QACA,eACA,MACA,WACM;AAEN,SAAO,MAAM;AAGb,QAAM,kBAAkB,cAAc,mBAAmB;AACzD,aAAW,cAAc,iBAAiB;AACxC,QAAI,WAAW,iBAAiB;AAC9B,iBAAW,gBAAgB;AAAA,IAC7B;AAAA,EACF;AAGA,OAAK,gBAAgB;AAGrB,QAAM,aAAoB,CAAC;AAC3B,OAAK,aAAa,WAAW,UAAU;AAGvC,aAAW,OAAO,YAAY;AAC5B,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK;AACH,eAAO,gBAAgB,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,IAAI,MAAM;AAC1D;AAAA,MACF,KAAK;AACH,eAAO,eAAe;AACtB;AAAA,MACF,KAAK;AACH,eAAO,YAAY,IAAI,OAAO;AAC9B;AAAA,MACF,KAAK;AACH,eAAO,WAAW;AAClB;AAAA,MACF,KAAK;AACH,YAAI,WAAW,OAAO,QAAQ,SAAS;AACvC;AAAA,IACJ;AAAA,EACF;AAGA,SAAO,kBAAkB;AACzB,SAAO,aAAa;AACtB;;;AC9CA,IAAI,sBAA2B;AAExB,SAAS,uBAAuB,KAAgB;AACrD,wBAAsB;AACxB;AAEO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EACA,YAAoB;AAAA,EACpB,aAAqB;AAAA,EACrB,QAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,cAAuB;AAAA,EACvB,aAAsB;AAAA,EACtB,mBAAmC,CAAC;AAAA,EACpC,gBAAqD;AAAA,EACrD,kBAAiC;AAAA,EAEzC,YAAY,QAA2B,MAAc,MAAc,SAAwC;AACzG,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,OAAO;AAEZ,UAAM,QAAQ,OAAO,WAAW,IAAI;AACpC,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,0BAA0B;AACtD,SAAK,QAAQ;AAGb,SAAK,UAAU,IAAI,cAAc;AACjC,UAAM,WAAW,KAAK,QAAQ,YAAY,KAAK,KAAK;AACpD,SAAK,YAAY,SAAS;AAC1B,SAAK,aAAa,SAAS;AAG3B,UAAM,MAAM,OAAO,oBAAoB;AACvC,WAAO,QAAQ,KAAK,KAAK,OAAO,KAAK,YAAY,GAAG;AACpD,WAAO,SAAS,KAAK,KAAK,OAAO,KAAK,aAAa,GAAG;AACtD,WAAO,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS;AAC7C,WAAO,MAAM,SAAS,GAAG,OAAO,KAAK,UAAU;AAC/C,SAAK,MAAM,MAAM,KAAK,GAAG;AAEzB,SAAK,kBAAkB,SAAS,mBAAmB;AAGnD,WAAO,MAAM,SAAS;AAGtB,SAAK,SAAS,cAAc,OAAO,MAAM,MAAM,SAAS;AAGxD,SAAK,gBAAgB,IAAI,qBAAqB,MAAM,IAAI;AACxD,SAAK,cAAc,mBAAmB,MAAM;AAC1C,WAAK,cAAc;AAAA,IACrB,CAAC;AAGD,SAAK,YAAY,IAAI,iBAAiB;AAGtC,QAAI,CAAC,qBAAqB;AACxB,YAAM,IAAI,MAAM,2FAA2F;AAAA,IAC7G;AACA,SAAK,OAAO,IAAI,oBAAoB,KAAK,aAAa;AAGtD,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEQ,YAAY,SAAiB,SAA+C;AAClF,UAAM,OAAO,KAAK,OAAO,sBAAsB;AAC/C,UAAMG,KAAI,UAAU,KAAK;AACzB,UAAMC,KAAI,UAAU,KAAK;AACzB,UAAM,MAAM,KAAK,MAAMD,KAAI,KAAK,SAAS;AACzC,UAAM,MAAM,KAAK,MAAMC,KAAI,KAAK,UAAU;AAC1C,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,MAC7C,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA,EAEQ,oBAA0B;AAEhC,UAAM,aAAa,CAAC,MAAiB;AACnC,QAAE,eAAe;AAAA,IACnB;AACA,SAAK,OAAO,iBAAiB,YAAY,UAAU;AACnD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,YAAY,UAAU,CAAC;AAExF,UAAM,SAAS,CAAC,MAAiB;AAC/B,QAAE,eAAe;AACjB,YAAM,QAAQ,EAAE,cAAc;AAC9B,UAAI,CAAC,SAAS,MAAM,WAAW,EAAG;AAClC,YAAM,OAAO,MAAM,CAAC;AACpB,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,KAAK,EAAE,KAAK,CAAC,YAAY;AAC5B,aAAK,cAAc,KAAK,aAAa;AAAA,UACnC,MAAM,KAAK;AAAA,UACX;AAAA,UACA,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,QACb,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,SAAK,OAAO,iBAAiB,QAAQ,MAAM;AAC3C,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,QAAQ,MAAM,CAAC;AAGhF,UAAM,cAAc,CAAC,MAAkB;AAErC,UAAI,EAAE,WAAW,EAAG;AACpB,WAAK,OAAO,MAAM;AAClB,YAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,WAAK,gBAAgB,EAAE,KAAK,IAAI;AAChC,WAAK,UAAU,eAAe,KAAK,GAAG;AACtC,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,cAAc,CAAC,MAAkB;AAErC,YAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,YAAM,MAAM,MAAM,KAAK,OAAO,QAAQ;AACtC,UAAI,OAAO,KAAK,MAAM,KAAK,OAAO,WAAW,QAAQ;AACnD,cAAM,SAAS,UAAU,KAAK,OAAO,WAAW,GAAG,CAAC;AACpD,aAAK,OAAO,MAAM,SAAS,SAAS,IAAI,YAAY;AAAA,MACtD;AAEA,UAAI,CAAC,KAAK,UAAU,UAAW;AAC/B,WAAK,UAAU,gBAAgB,KAAK,GAAG;AACvC,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,YAAY,CAAC,MAAkB;AACnC,YAAM,eAAe,KAAK,UAAU;AACpC,UAAI,cAAc;AAChB,aAAK,UAAU,aAAa;AAC5B,aAAK,cAAc;AAAA,MACrB;AAGA,UAAI,EAAE,WAAW,KAAK,KAAK,eAAe;AACxC,cAAM,EAAE,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,SAAS,EAAE,OAAO;AAC1D,YAAI,QAAQ,KAAK,cAAc,OAAO,QAAQ,KAAK,cAAc,KAAK;AACpE,gBAAM,MAAM,MAAM,KAAK,OAAO,QAAQ;AACtC,cAAI,OAAO,KAAK,MAAM,KAAK,OAAO,WAAW,QAAQ;AACnD,kBAAM,OAAO,KAAK,OAAO,WAAW,GAAG;AACvC,kBAAM,SAAS,UAAU,IAAI;AAC7B,gBAAI,SAAS,GAAG;AACd,oBAAM,MAAM,KAAK,OAAO,WAAW,MAAM;AACzC,kBAAI,KAAK;AACP,uBAAO,KAAK,KAAK,QAAQ;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,SAAK,iBAAiB,KAAK,MAAM,OAAO,oBAAoB,WAAW,SAAS,CAAC;AAGjF,UAAM,cAAc,CAAC,MAAiB;AACpC,QAAE,eAAe;AACjB,UAAI,KAAK,WAAY;AACrB,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAE1F,UAAM,cAAc,CAAC,MAAiB;AAEpC,UAAI,EAAE,iBAAiB,KAAK,OAAO,SAAS,EAAE,aAAqB,EAAG;AACtE,WAAK,aAAa;AAClB,WAAK,cAAc,KAAK,cAAc,MAAS;AAC/C,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,OAAO,iBAAiB,aAAa,WAAW;AACrD,SAAK,iBAAiB,KAAK,MAAM,KAAK,OAAO,oBAAoB,aAAa,WAAW,CAAC;AAG1F,UAAM,UAAU,CAAC,MAAsB;AACrC,UAAI,SAAS,kBAAkB,KAAK,OAAQ;AAC5C,YAAM,OAAO,EAAE,eAAe,QAAQ,YAAY;AAClD,UAAI,MAAM;AACR,UAAE,eAAe;AACjB,aAAK,cAAc,KAAK,SAAS,IAAI;AAAA,MACvC;AAAA,IACF;AACA,aAAS,iBAAiB,SAAS,OAAO;AAC1C,SAAK,iBAAiB,KAAK,MAAM,SAAS,oBAAoB,SAAS,OAAO,CAAC;AAAA,EACjF;AAAA,EAEA,QAAc;AACZ,SAAK,WAAW,YAAY,IAAI;AAChC,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,UAAU,MAAM;AACvB,2BAAqB,KAAK,KAAK;AAC/B,WAAK,QAAQ;AAAA,IACf;AACA,eAAW,WAAW,KAAK,kBAAkB;AAC3C,cAAQ;AAAA,IACV;AACA,SAAK,mBAAmB,CAAC;AAAA,EAC3B;AAAA,EAEQ,OAAO,MAAY;AACzB,SAAK,QAAQ,sBAAsB,KAAK,IAAI;AAE5C,UAAM,MAAM,YAAY,IAAI;AAC5B,UAAM,YAAY,MAAM,KAAK;AAC7B,SAAK,WAAW;AAEhB,QAAI,YAAY;AAChB,QAAI,KAAK,aAAa;AACpB,WAAK,cAAc;AACnB,kBAAY;AAGZ,WAAK,OAAO,cAAc,KAAK,cAAc;AAC7C,WAAK,OAAO,kBAAkB,KAAK,cAAc;AACjD,WAAK,OAAO,qBAAqB;AAEjC,4BAAsB,KAAK,QAAQ,KAAK,eAAe,KAAK,MAAM,SAAS;AAAA,IAC7E;AAGA,UAAM,gBAAgB,KAAK,mBAAmB;AAG9C,QAAI,CAAC,aAAa,CAAC,eAAe,SAAU;AAG5C,UAAM,MAAM,OAAO,oBAAoB;AACvC,SAAK,MAAM,aAAa,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC;AAC5C,QAAI,KAAK,iBAAiB;AACxB,WAAK,MAAM,YAAY,KAAK;AAC5B,WAAK,MAAM,SAAS,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,IACjE,OAAO;AACL,WAAK,MAAM,UAAU,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,IAClE;AACA,SAAK,QAAQ,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,WAAW,aAAa;AAAA,EAC3E;AAAA,EAEQ,qBAA2C;AACjD,UAAM,MAAM,KAAK,OAAO;AACxB,QAAI,CAAC,OAAO,CAAC,KAAK,cAAc,YAAa,QAAO;AACpD,WAAO;AAAA,MACL,GAAG,IAAI;AAAA,MACP,GAAG,IAAI;AAAA,MACP,OAAO,KAAK,cAAc;AAAA,MAC1B,UAAU,KAAK,cAAc;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,OAAO,MAAc,MAAoB;AACvC,SAAK,OAAO;AACZ,SAAK,OAAO;AAEZ,UAAM,MAAM,OAAO,oBAAoB;AACvC,SAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,KAAK,YAAY,GAAG;AACzD,SAAK,OAAO,SAAS,KAAK,KAAK,OAAO,KAAK,aAAa,GAAG;AAC3D,SAAK,OAAO,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS;AAClD,SAAK,OAAO,MAAM,SAAS,GAAG,OAAO,KAAK,UAAU;AACpD,SAAK,MAAM,MAAM,KAAK,GAAG;AAEzB,SAAK,OAAO,OAAO,MAAM,IAAI;AAC7B,SAAK,cAAc,OAAO,MAAM,IAAI;AACpC,SAAK,KAAK,OAAO,MAAM,IAAI;AAC3B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,OAAe,uBAAuB,oBAAI,IAAI;AAAA,IAC5C;AAAA,IAAW;AAAA,IAAa;AAAA,IAAa;AAAA,IACrC;AAAA,IAAK;AAAA,IAAU;AAAA,IAAY;AAAA,IAAO;AAAA,IAAQ;AAAA,EAC5C,CAAC;AAAA,EAED,OAAe,gBAAgB,oBAAI,IAAI,CAAC,OAAO,WAAW,QAAQ,OAAO,CAAC;AAAA,EAE1E,OAAe,UAAkC;AAAA,IAC/C,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EAEA,cAAc,OAA4B;AAIxC,QAAI,iBAAgB,qBAAqB,IAAI,MAAM,GAAG,KACjD,MAAM,IAAI,WAAW,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,SAAU;AAChE,YAAM,eAAe;AAAA,IACvB;AAGA,QAAI,KAAK,UAAU,WAAW,MAAM,QAAQ,OAAO,MAAM,QAAQ,YAAS,MAAM,WAAW,MAAM,WAAW,MAAM,SAAS;AACzH,YAAM,OAAO,KAAK,UAAU,gBAAgB,KAAK,MAAM;AACvD,UAAI,MAAM;AACR,kBAAU,UAAU,UAAU,IAAI,EAAE,MAAM,MAAM;AAE9C,gBAAM,KAAK,SAAS,cAAc,UAAU;AAC5C,aAAG,QAAQ;AACX,aAAG,MAAM,WAAW;AACpB,aAAG,MAAM,OAAO;AAChB,mBAAS,KAAK,YAAY,EAAE;AAC5B,aAAG,OAAO;AACV,mBAAS,YAAY,MAAM;AAC3B,mBAAS,KAAK,YAAY,EAAE;AAAA,QAC9B,CAAC;AAAA,MACH;AACA,YAAM,eAAe;AACrB;AAAA,IACF;AAIA,UAAM,eAAe,iBAAgB,cAAc,IAAI,MAAM,GAAG;AAChE,QAAI,KAAK,UAAU,UAAU,CAAC,cAAc;AAC1C,WAAK,UAAU,eAAe;AAC9B,WAAK,cAAc;AAAA,IACrB;AAGA,UAAM,WAAW;AAAA,MACf,MAAM,iBAAgB,QAAQ,MAAM,GAAG,MAAM,MAAM,IAAI,WAAW,IAAI,MAAM,MAAM,MAAM,IAAI,YAAY;AAAA,MACxG,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM;AAAA,MAChB,QAAQ;AAAA,MACR,KAAK,MAAM;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,IAAI,mBAAmB;AACrB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,qBAAqB;AACvB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,iBAAiB;AACf,aAAK,oBAAoB;AAAA,MAC3B;AAAA,MACA,kBAAkB;AAChB,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF;AAEA,SAAK,cAAc,kBAAkB,KAAK,YAAY,QAAQ;AAC9D,SAAK,cAAc,SAAS,KAAK,YAAY,QAAQ;AAAA,EACvD;AACF;;;ACvYA,SAAS,eAAe,kBAAkB;AAOnC,IAAM,iBAAiB,cAA0C,IAAI;AAErE,SAAS,oBAAyC;AACvD,QAAM,MAAM,WAAW,cAAc;AACrC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACA,SAAO;AACT;;;ACXA,SAAS,SAAS,YAAY,iBAAiB,sBAAsB;AAmBzD;AAfZ,IAAM,gBAAgB;AAOf,SAAS,kBAAkB,UAAwC;AACxE,MAAI,YAAiC;AAErC,SAAO;AAAA,IACL,OAAO,MAAiB;AACtB,YAAM,UACJ,oBAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,eAAe,SAAS,cAAc,GACtE,8BAAC,WAAW,UAAX,EAAoB,OAAO,EAAE,YAAY,SAAS,cAAc,UAAiB,UAAU,SAAS,cAAqB,GACxH,8BAAC,iBAAe,gBAAK,GACvB,GACF;AAEF,kBAAY,QAAQ,SAAS,SAAS,IAAI;AAAA,IAC5C;AAAA,IACA,UAAU;AACR,UAAI,WAAW;AAAA,MAEf;AAAA,IACF;AAAA,EACF;AACF;;;ArDzBA,SAAS,kBAAAC,uBAAsB;;;AsDJxB,SAAS,aAAa,QAAoC;AAC/D,QAAM,QAAkB,CAAC;AACzB,WAAS,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO;AAC5C,QAAI,OAAO;AACX,aAAS,MAAM,GAAG,MAAM,OAAO,OAAO,OAAO;AAC3C,YAAM,MAAM,MAAM,OAAO,QAAQ;AACjC,YAAM,WAAW,OAAO,KAAK,GAAG;AAChC,cAAQ,aAAa,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,IAC9D;AACA,UAAM,KAAK,KAAK,QAAQ,CAAC;AAAA,EAC3B;AAEA,SAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,MAAM,IAAI;AACzD,UAAM,IAAI;AAAA,EACZ;AACA,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACjBA,IAAIC,uBAA2B;AAExB,SAAS,+BAA+B,KAAgB;AAC7D,EAAAA,uBAAsB;AACxB;AAOO,IAAM,mBAAN,MAAuB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEP,YAAY,SAAkC;AAC5C,UAAM,EAAE,MAAM,KAAK,IAAI;AAEvB,SAAK,SAAS,cAAc,OAAO,MAAM,MAAM,SAAS;AACxD,SAAK,gBAAgB,IAAI,qBAAqB,MAAM,IAAI;AACxD,SAAK,cAAc,mBAAmB,MAAM;AAAA,IAE5C,CAAC;AAED,QAAI,CAACA,sBAAqB;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,SAAK,OAAO,IAAIA,qBAAoB,KAAK,aAAa;AAAA,EACxD;AAAA,EAEA,aAAmB;AACjB,0BAAsB,KAAK,QAAQ,KAAK,eAAe,KAAK,MAAM,CAAC;AAAA,EACrE;AAAA,EAEA,SAAiB;AACf,WAAO,aAAa,KAAK,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,MAAc,MAAoB;AACvC,SAAK,OAAO,OAAO,MAAM,IAAI;AAC7B,SAAK,cAAc,OAAO,MAAM,IAAI;AACpC,SAAK,KAAK,OAAO,MAAM,IAAI;AAAA,EAC7B;AACF;;;AC/CA,SAAS,WAAAC,UAAS,YAAY,cAAAC,aAAY,iBAAiBC,uBAAsB;AA2BrE,gBAAAC,YAAA;AAzBZ,IAAMC,iBAAgBF;AAGtB,IAAM,KAAK;AACX,IAAM,YAAY,GAAG,2BAA2B,GAAG;AAQ5C,SAAS,mBAAmB,UAA0C;AAC3E,MAAI,YAAiB;AAErB,SAAO;AAAA,IACL,OAAO,MAAiB;AACtB,YAAM,UACJ,gBAAAC,KAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,eAAe,SAAS,cAAc,GACtE,0BAAAA;AAAA,QAACF,YAAW;AAAA,QAAX;AAAA,UACC,OAAO;AAAA,YACL,YAAY,SAAS,cAAc;AAAA,YACnC,UAAU,SAAS;AAAA,UACrB;AAAA,UAEA,0BAAAE,KAACC,gBAAA,EAAe,gBAAK;AAAA;AAAA,MACvB,GACF;AAEF,kBAAYJ,SAAQ,SAAS,SAAS,IAAI;AAAA,IAC5C;AAAA,IACA,aAAa,MAAyB;AACpC,gBAAU,MAAM;AACd,aAAK,OAAO,IAAI;AAAA,MAClB,CAAC;AACD,eAAS,WAAW;AACpB,aAAO,SAAS,OAAO;AAAA,IACzB;AAAA,IACA,UAAU;AACR,UAAI,WAAW;AACb,mBAAW,gBAAgB,MAAM,WAAW,MAAM,MAAM;AAAA,QAAC,CAAC;AAE1D,mBAAW,cAAc;AACzB,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;;;AxD0GQ,gBAAAK,YAAA;AA5GD,SAAS,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,eAAe;AACjB,GAAa;AACX,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,YAAY,OAA0B,IAAI;AAChD,QAAM,cAAc,OAA+B,IAAI;AACvD,QAAM,UAAU,OAA2B,IAAI;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAG9C,YAAU,MAAM;AACd,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,UAAM,SAAS,UAAU;AACzB,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,2BAAuBC,eAAc;AAGrC,UAAM,UAAU,IAAI,cAAc,EAAE,UAAU,WAAW,CAAC;AAC1D,UAAM,UAAU,OAAO,WAAW,IAAI;AACtC,UAAM,WAAW,QAAQ,YAAY,OAAO;AAE5C,UAAM,gBAAgB,UAAU,sBAAsB;AACtD,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,QAAQ,SAAS,KAAK,CAAC;AACzE,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,SAAS,SAAS,MAAM,CAAC;AAE3E,UAAM,WAAW,IAAI,gBAAgB,QAAQ,MAAM,MAAM,EAAE,gBAAgB,CAAC;AAC5E,gBAAY,UAAU;AAEtB,UAAM,OAAO,kBAAkB,QAAQ;AACvC,YAAQ,UAAU;AAElB,SAAK,OAAO,QAAQ;AACpB,aAAS,MAAM;AAEf,WAAO,WAAW;AAClB,QAAI,WAAW;AACb,aAAO,MAAM;AAAA,IACf;AAEA,cAAU,QAAQ;AAGlB,UAAM,YAAY,CAAC,MAAqB;AACtC,eAAS,cAAc,CAAC;AAAA,IAC1B;AACA,WAAO,iBAAiB,WAAW,SAAS;AAG5C,UAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACrD,iBAAW,SAAS,SAAS;AAC3B,cAAM,EAAE,OAAO,OAAO,IAAI,MAAM;AAChC,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,SAAS,MAAM,CAAC;AAChE,iBAAS,OAAO,SAAS,OAAO;AAAA,MAClC;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,SAAS;AAEhC,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,SAAS;AAC/C,qBAAe,WAAW;AAC1B,eAAS,KAAK;AACd,WAAK,QAAQ;AACb,kBAAY,UAAU;AACtB,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,YAAY,eAAe,CAAC;AAGpD,YAAU,MAAM;AACd,QAAI,QAAQ,SAAS;AACnB,cAAQ,QAAQ,OAAO,QAAQ;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,MAAI,CAAC,UAAU;AAKb,UAAM,WAAW,OAAO,WAAW;AACnC,QAAI,OAAO;AACX,QAAI,UAAU;AACZ,qCAA+BA,eAAc;AAC7C,YAAM,WAAW,IAAI,iBAAiB,EAAE,MAAM,cAAc,MAAM,aAAa,CAAC;AAChF,YAAM,OAAO,mBAAmB,QAAQ;AACxC,aAAO,KAAK,aAAa,QAAQ;AACjC,WAAK,QAAQ;AAAA,IACf;AACA,WACE,gBAAAD,KAAC,SAAI,OAAc,WACjB,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,0BAAwB;AAAA,QACxB,eAAW;AAAA,QACX,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,MAAM;AAAA,UACN,YAAY;AAAA,QACd;AAAA,QAEC;AAAA;AAAA,IACH,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,GAAG;AAAA,MACL;AAAA,MACA;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AyDrMA,SAAS,kBAAAE,uBAAsB;AA+BxB,SAAS,cACd,QACA,SACA,UAAwB,CAAC,GACZ;AACb,QAAM;AAAA,IACJ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,EACf,IAAI;AAGJ,yBAAuBA,eAAc;AAGrC,QAAM,UAAU,IAAI,cAAc,EAAE,UAAU,WAAW,CAAC;AAC1D,QAAM,UAAU,OAAO,WAAW,IAAI;AACtC,QAAM,WAAW,QAAQ,YAAY,OAAO;AAE5C,MAAI,OAAO,QAAQ,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,cAAc,SAAS,KAAK,CAAC;AACtF,MAAI,OAAO,QAAQ,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,eAAe,SAAS,MAAM,CAAC;AAExF,QAAM,WAAW,IAAI,gBAAgB,QAAQ,MAAM,IAAI;AACvD,QAAM,OAAO,kBAAkB,QAAQ;AAEvC,OAAK,OAAO,OAAO;AACnB,WAAS,MAAM;AAGf,SAAO,WAAW;AAGlB,MAAI,iBAAsD;AAC1D,MAAI,UAAU;AACZ,qBAAiB,CAAC,MAAqB,SAAS,cAAc,CAAC;AAC/D,WAAO,iBAAiB,WAAW,cAAc;AAAA,EACnD;AAGA,MAAI,iBAAwC;AAC5C,MAAI,YAAY;AACd,qBAAiB,IAAI,eAAe,CAAC,YAAY;AAC/C,iBAAW,SAAS,SAAS;AAC3B,cAAM,EAAE,OAAO,OAAO,IAAI,MAAM;AAChC,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC9D,cAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,SAAS,MAAM,CAAC;AAChE,YAAI,YAAY,QAAQ,YAAY,MAAM;AACxC,iBAAO;AACP,iBAAO;AACP,mBAAS,OAAO,SAAS,OAAO;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,MAAM;AAAA,EAC/B;AAEA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AACR,UAAI,gBAAgB;AAClB,eAAO,oBAAoB,WAAW,cAAc;AAAA,MACtD;AACA,sBAAgB,WAAW;AAC3B,eAAS,KAAK;AACd,WAAK,QAAQ;AAAA,IACf;AAAA,IACA,OAAO,SAAiB,SAAiB;AACvC,aAAO;AACP,aAAO;AACP,eAAS,OAAO,SAAS,OAAO;AAAA,IAClC;AAAA,EACF;AACF;;;ACtGO,SAAS,YAAqB;AACnC,SAAO,OAAO,WAAW,eAAe,OAAO,aAAa;AAC9D;AAGO,SAAS,oBAA6B;AAC3C,MAAI,CAAC,UAAU,EAAG,QAAO;AACzB,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,CAAC,CAAC,OAAO,WAAW,IAAI;AACjC;AAGO,SAAS,kBACd,SACA,UACA,WACA,YACgC;AAChC,SAAO;AAAA,IACL,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,UAAU,SAAS,CAAC;AAAA,IACjD,MAAM,KAAK,IAAI,GAAG,KAAK,MAAM,WAAW,UAAU,CAAC;AAAA,EACrD;AACF;;;AC5BA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAU7B,SAAS,YAAY,UAAgE;AAC1F,QAAM,EAAE,cAAc,IAAI,kBAAkB;AAC5C,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAElD,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU,CAAC,SAAsB;AACrC,eAAS,IAAI;AAAA,IACf;AACA,UAAM,cAAc,MAAM,cAAc,IAAI;AAC5C,UAAM,cAAc,MAAM,cAAc,KAAK;AAE7C,kBAAc,GAAG,aAAa,OAAO;AACrC,kBAAc,GAAG,cAAc,WAAW;AAC1C,kBAAc,GAAG,cAAc,WAAW;AAC1C,WAAO,MAAM;AACX,oBAAc,IAAI,aAAa,OAAO;AACtC,oBAAc,IAAI,cAAc,WAAW;AAC3C,oBAAc,IAAI,cAAc,WAAW;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,eAAe,QAAQ,CAAC;AAE5B,SAAO,EAAE,WAAW;AACtB;;;AChCA,SAAS,aAAAC,kBAAiB;AAGnB,SAAS,SAAS,UAAwC;AAC/D,QAAM,EAAE,cAAc,IAAI,kBAAkB;AAE5C,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU,CAAC,SAAiB;AAChC,eAAS,IAAI;AAAA,IACf;AACA,kBAAc,GAAG,SAAS,OAAO;AACjC,WAAO,MAAM;AACX,oBAAc,IAAI,SAAS,OAAO;AAAA,IACpC;AAAA,EACF,GAAG,CAAC,eAAe,QAAQ,CAAC;AAC9B;",
|
|
6
|
+
"names": ["loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "isRenderable", "x", "y", "b", "w", "h", "obj", "TextAttributes", "b", "fg", "bg", "w", "x", "y", "x", "y", "fg", "bg", "b", "maybeMakeRenderable", "isRenderable", "_getDefaults", "_defaults", "changeDefaults", "newDefaults", "noopTest", "edit", "regex", "opt", "source", "obj", "name", "val", "valSource", "other", "supportsLookbehind", "bull", "indent", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "html", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "escape", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "link", "reflink", "nolink", "reflinkSearch", "_caseInsensitiveProtocol", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "getEscapeReplacement", "ch", "encode", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "findClosingBracket", "b", "level", "outputLink", "cap", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "_Tokenizer", "options", "src", "trimmed", "lines", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "line", "t", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "rawLine", "nextLineWithoutTabs", "lastItem", "item", "taskRaw", "checkboxToken", "spacers", "hasMultipleLineBreaks", "headers", "aligns", "rows", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "_Lexer", "__Lexer", "next", "lastParagraphClipped", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "errMsg", "keepPrevChar", "_Renderer", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "checked", "header", "k", "content", "cleanHref", "out", "_TextRenderer", "_Parser", "__Parser", "anyToken", "genericToken", "ret", "renderer", "_Hooks", "markdown", "Marked", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "walkTokens", "packWalktokens", "blockType", "origOpt", "throwError", "processedSrc", "processedTokens", "e", "silent", "async", "msg", "markedInstance", "marked", "setOptions", "use", "parseInline", "parser", "_Parser", "lexer", "_Lexer", "loadYoga", "h", "b", "q", "v", "w", "x", "z", "d", "C", "D", "E", "F", "G", "J", "K", "L", "M", "N", "P", "Q", "S", "T", "U", "k", "m", "W", "X", "Z", "u", "t", "y", "B", "I", "yoga_wasm_base64_esm_default", "Align", "BoxSizing", "Dimension", "Direction", "Display", "Edge", "Errata", "ExperimentalFeature", "FlexDirection", "Gutter", "Justify", "LogLevel", "MeasureMode", "NodeType", "Overflow", "PositionType", "Unit", "Wrap", "constants", "ALIGN_AUTO", "Auto", "ALIGN_FLEX_START", "FlexStart", "ALIGN_CENTER", "Center", "ALIGN_FLEX_END", "FlexEnd", "ALIGN_STRETCH", "Stretch", "ALIGN_BASELINE", "Baseline", "ALIGN_SPACE_BETWEEN", "SpaceBetween", "ALIGN_SPACE_AROUND", "SpaceAround", "ALIGN_SPACE_EVENLY", "SpaceEvenly", "BOX_SIZING_BORDER_BOX", "BorderBox", "BOX_SIZING_CONTENT_BOX", "ContentBox", "DIMENSION_WIDTH", "Width", "DIMENSION_HEIGHT", "Height", "DIRECTION_INHERIT", "Inherit", "DIRECTION_LTR", "LTR", "DIRECTION_RTL", "RTL", "DISPLAY_FLEX", "Flex", "DISPLAY_NONE", "None", "DISPLAY_CONTENTS", "Contents", "EDGE_LEFT", "Left", "EDGE_TOP", "Top", "EDGE_RIGHT", "Right", "EDGE_BOTTOM", "Bottom", "EDGE_START", "Start", "EDGE_END", "End", "EDGE_HORIZONTAL", "Horizontal", "EDGE_VERTICAL", "Vertical", "EDGE_ALL", "All", "ERRATA_NONE", "ERRATA_STRETCH_FLEX_BASIS", "StretchFlexBasis", "ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING", "AbsolutePositionWithoutInsetsExcludesPadding", "ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE", "AbsolutePercentAgainstInnerSize", "ERRATA_ALL", "ERRATA_CLASSIC", "Classic", "EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS", "WebFlexBasis", "FLEX_DIRECTION_COLUMN", "Column", "FLEX_DIRECTION_COLUMN_REVERSE", "ColumnReverse", "FLEX_DIRECTION_ROW", "Row", "FLEX_DIRECTION_ROW_REVERSE", "RowReverse", "GUTTER_COLUMN", "GUTTER_ROW", "GUTTER_ALL", "JUSTIFY_FLEX_START", "JUSTIFY_CENTER", "JUSTIFY_FLEX_END", "JUSTIFY_SPACE_BETWEEN", "JUSTIFY_SPACE_AROUND", "JUSTIFY_SPACE_EVENLY", "LOG_LEVEL_ERROR", "Error", "LOG_LEVEL_WARN", "Warn", "LOG_LEVEL_INFO", "Info", "LOG_LEVEL_DEBUG", "Debug", "LOG_LEVEL_VERBOSE", "Verbose", "LOG_LEVEL_FATAL", "Fatal", "MEASURE_MODE_UNDEFINED", "Undefined", "MEASURE_MODE_EXACTLY", "Exactly", "MEASURE_MODE_AT_MOST", "AtMost", "NODE_TYPE_DEFAULT", "Default", "NODE_TYPE_TEXT", "Text", "OVERFLOW_VISIBLE", "Visible", "OVERFLOW_HIDDEN", "Hidden", "OVERFLOW_SCROLL", "Scroll", "POSITION_TYPE_STATIC", "Static", "POSITION_TYPE_RELATIVE", "Relative", "POSITION_TYPE_ABSOLUTE", "Absolute", "UNIT_UNDEFINED", "UNIT_POINT", "Point", "UNIT_PERCENT", "Percent", "UNIT_AUTO", "WRAP_NO_WRAP", "NoWrap", "WRAP_WRAP", "WRAP_WRAP_REVERSE", "WrapReverse", "YGEnums_default", "wrapAssembly", "lib", "patch", "prototype", "name", "fn", "original", "_len", "arguments", "length", "args", "Array", "_key", "call", "fnName", "methods", "Unit", "Point", "Node", "Percent", "Auto", "_len2", "_key2", "value", "pop", "unit", "asNumber", "undefined", "valueOf", "endsWith", "parseFloat", "Number", "isNaN", "Error", "wrapMeasureFunction", "measureFunction", "MeasureCallback", "implement", "measure", "width", "height", "NaN", "measureFunc", "unsetMeasureFunc", "wrapDirtiedFunc", "dirtiedFunction", "DirtiedCallback", "dirtied", "dirtiedFunc", "Config", "destroy", "_", "config", "createWithConfig", "createDefault", "t", "T", "getChildCount", "getChild", "freeRecursive", "free", "direction", "Direction", "LTR", "YGEnums", "Yoga", "wrapAssembly", "loadYoga", "x", "y", "bg", "fg", "TextAttributes", "CONTINUATION", "fg", "bg", "b", "x", "y", "x", "y", "RootRenderable", "RootRenderableClass", "_render", "AppContext", "_ErrorBoundary", "jsx", "ErrorBoundary", "jsx", "RootRenderable", "RootRenderable", "useEffect", "useState", "useState", "useEffect", "useEffect", "useEffect"]
|
|
7
7
|
}
|