{"version":3,"file":"child_process-s5oA6j5C.cjs","sources":["../src/shell/shell-interpreter.ts","../src/threading/worker-transform-cache.ts","../src/shell/commands/npm.ts","../src/shell/commands/pnpm.ts","../src/shell/commands/yarn.ts","../src/shell/commands/bun.ts","../src/shell/commands/node.ts","../src/shell/commands/git.ts","../src/polyfills/child_process.ts"],"sourcesContent":["// Shell interpreter: pipes, &&/||/;, redirections, variable expansion,\r\n// globbing, command substitution, builtins, and registered commands.\r\n\r\nimport type {\r\n  ShellResult,\r\n  ShellContext,\r\n  ShellCommand,\r\n  ListNode,\r\n  PipelineNode,\r\n  CommandNode,\r\n  BuiltinFn,\r\n} from \"./shell-types\";\r\nimport type { MemoryVolume } from \"../memory-volume\";\r\nimport { parse, expandGlob } from \"./shell-parser\";\r\nimport { builtins } from \"./shell-builtins\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  NodepodShell                                                        */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// In a worker, the shell can't spawn new workers directly.\r\n// This callback sends a spawn request to the main thread's ProcessManager.\r\nexport type SpawnChildCallback = (\r\n  command: string,\r\n  args: string[],\r\n  opts?: { cwd?: string; env?: Record<string, string>; stdio?: \"pipe\" | \"inherit\" },\r\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\r\n\r\nexport class NodepodShell {\r\n  private volume: MemoryVolume;\r\n  private cwd: string;\r\n  private env: Record<string, string>;\r\n  private commands = new Map<string, ShellCommand>();\r\n  private lastExit = 0;\r\n  private aliases = new Map<string, string>();\r\n  // serializes concurrent exec() calls to prevent cwd save/restore races\r\n  private _execQueue: Promise<ShellResult> = Promise.resolve({ stdout: \"\", stderr: \"\", exitCode: 0 });\r\n\r\n  private _spawnChild: SpawnChildCallback | null = null;\r\n\r\n  constructor(\r\n    volume: MemoryVolume,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ) {\r\n    this.volume = volume;\r\n    this.cwd = opts?.cwd ?? \"/\";\r\n    this.env = opts?.env ? { ...opts.env } : {};\r\n    this.env.PWD = this.cwd;\r\n  }\r\n\r\n  registerCommand(cmd: ShellCommand): void {\r\n    this.commands.set(cmd.name, cmd);\r\n  }\r\n\r\n  setSpawnChildCallback(cb: SpawnChildCallback | null): void {\r\n    this._spawnChild = cb;\r\n  }\r\n\r\n  getSpawnChildCallback(): SpawnChildCallback | null {\r\n    return this._spawnChild;\r\n  }\r\n\r\n  getCwd(): string {\r\n    return this.cwd;\r\n  }\r\n\r\n  setCwd(cwd: string): void {\r\n    this.cwd = cwd;\r\n    this.env.PWD = cwd;\r\n  }\r\n\r\n  getEnv(): Record<string, string> {\r\n    return this.env;\r\n  }\r\n\r\n  async exec(\r\n    command: string,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ): Promise<ShellResult> {\r\n    // serialize cwd/env-overriding calls to prevent save/restore races\r\n    if (opts?.cwd || opts?.env) {\r\n      const prev = this._execQueue;\r\n      let resolve!: (r: ShellResult) => void;\r\n      this._execQueue = new Promise<ShellResult>((r) => { resolve = r; });\r\n      await prev.catch(() => {});\r\n      try {\r\n        const r = await this._execInner(command, opts);\r\n        resolve(r);\r\n        return r;\r\n      } catch (e) {\r\n        const err: ShellResult = {\r\n          stdout: \"\",\r\n          stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\r\n          exitCode: 1,\r\n        };\r\n        resolve(err);\r\n        return err;\r\n      }\r\n    }\r\n    return this._execInner(command, opts);\r\n  }\r\n\r\n  private async _execInner(\r\n    command: string,\r\n    opts?: { cwd?: string; env?: Record<string, string> },\r\n  ): Promise<ShellResult> {\r\n    const prevCwd = this.cwd;\r\n    const prevEnv = { ...this.env };\r\n\r\n    if (opts?.cwd) {\r\n      this.cwd = opts.cwd;\r\n      this.env.PWD = opts.cwd;\r\n    }\r\n    if (opts?.env) {\r\n      Object.assign(this.env, opts.env);\r\n    }\r\n\r\n    try {\r\n      const expanded = await this.expandCommandSubstitution(command);\r\n\r\n      const ast = parse(expanded, this.env, this.lastExit);\r\n      return await this.execList(ast);\r\n    } catch (e) {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: `shell: ${e instanceof Error ? e.message : String(e)}\\n`,\r\n        exitCode: 1,\r\n      };\r\n    } finally {\r\n      // only restore cwd if cd didn't change it\r\n      if (opts?.cwd && this.cwd === opts.cwd) {\r\n        this.cwd = prevCwd;\r\n        this.env.PWD = prevCwd;\r\n      }\r\n      if (opts?.env) {\r\n        for (const key of Object.keys(opts.env)) {\r\n          if (key in prevEnv) {\r\n            this.env[key] = prevEnv[key];\r\n          } else {\r\n            delete this.env[key];\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /* ---------------------------------------------------------------- */\r\n  /*  AST execution                                                    */\r\n  /* ---------------------------------------------------------------- */\r\n\r\n  private async execList(list: ListNode): Promise<ShellResult> {\r\n    let result: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n\r\n    for (let i = 0; i < list.entries.length; i++) {\r\n      const entry = list.entries[i];\r\n      const pipeResult = await this.execPipeline(entry.pipeline);\r\n\r\n      result = {\r\n        stdout: result.stdout + pipeResult.stdout,\r\n        stderr: result.stderr + pipeResult.stderr,\r\n        exitCode: pipeResult.exitCode,\r\n      };\r\n      this.lastExit = pipeResult.exitCode;\r\n\r\n      if (entry.next === \"&&\" && pipeResult.exitCode !== 0) break;\r\n      if (entry.next === \"||\" && pipeResult.exitCode === 0) break;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private async execPipeline(pipeline: PipelineNode): Promise<ShellResult> {\r\n    if (pipeline.commands.length === 1) {\r\n      return this.execCommand(pipeline.commands[0]);\r\n    }\r\n\r\n    let stdin: string | undefined;\r\n    let lastResult: ShellResult = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    let allStderr = \"\";\r\n\r\n    for (const cmd of pipeline.commands) {\r\n      const result = await this.execCommand(cmd, stdin);\r\n      allStderr += result.stderr;\r\n      stdin = result.stdout;\r\n      lastResult = result;\r\n    }\r\n\r\n    return {\r\n      stdout: lastResult.stdout,\r\n      stderr: allStderr,\r\n      exitCode: lastResult.exitCode,\r\n    };\r\n  }\r\n\r\n  private async execCommand(\r\n    cmd: CommandNode,\r\n    stdin?: string,\r\n  ): Promise<ShellResult> {\r\n    if (cmd.args.length === 0) {\r\n      for (const [k, v] of Object.entries(cmd.assignments)) {\r\n        this.env[k] = v;\r\n      }\r\n      return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    }\r\n\r\n    let expandedArgs: string[] = [];\r\n    for (const arg of cmd.args) {\r\n      expandedArgs.push(...expandGlob(arg, this.cwd, this.volume));\r\n    }\r\n\r\n    const alias = this.aliases.get(expandedArgs[0]);\r\n    if (alias) {\r\n      const aliasArgs = alias.split(/\\s+/);\r\n      expandedArgs = [...aliasArgs, ...expandedArgs.slice(1)];\r\n    }\r\n\r\n    // extract \"sh -c\" commands and execute them\r\n    if (expandedArgs[0] === \"sh\" && expandedArgs[1] === \"-c\" && expandedArgs[2]) {\r\n      return this.exec(expandedArgs[2], { cwd: this.cwd, env: this.env });\r\n    }\r\n\r\n    const name = expandedArgs[0];\r\n    const args = expandedArgs.slice(1);\r\n\r\n    if (stdin === undefined) {\r\n      for (const r of cmd.redirects) {\r\n        if (r.type === \"read\") {\r\n          const p = this.resolvePath(r.target);\r\n          try {\r\n            stdin = this.volume.readFileSync(p, \"utf8\");\r\n          } catch {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: `shell: ${r.target}: No such file or directory\\n`,\r\n              exitCode: 1,\r\n            };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const savedEnv: Record<string, string | undefined> = {};\r\n    for (const [k, v] of Object.entries(cmd.assignments)) {\r\n      savedEnv[k] = this.env[k];\r\n      this.env[k] = v;\r\n    }\r\n\r\n    const ctx = this.buildContext();\r\n    let result: ShellResult;\r\n\r\n    // dispatch: builtin > registered command > PATH lookup > error\r\n    const builtin = builtins.get(name);\r\n    if (builtin) {\r\n      const r = builtin(args, ctx, stdin);\r\n      result = r instanceof Promise ? await r : r;\r\n      if (name === \"cd\") {\r\n        this.cwd = ctx.cwd;\r\n        this.env = ctx.env;\r\n      }\r\n      if (name === \"export\" || name === \"unset\") {\r\n        this.env = ctx.env;\r\n      }\r\n    } else if (name === \"alias\") {\r\n      result = this.handleAlias(args);\r\n    } else if (name === \"source\" || name === \".\") {\r\n      result = await this.handleSource(args);\r\n    } else if (name === \"history\") {\r\n      result = { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    } else if (this.commands.has(name)) {\r\n      try {\r\n        result = await this.commands.get(name)!.execute(args, ctx);\r\n      } catch (e) {\r\n        const msg = e instanceof Error ? e.message : String(e);\r\n        result = {\r\n          stdout: \"\",\r\n          stderr: `${name}: ${msg}\\n`,\r\n          exitCode: 1,\r\n        };\r\n      }\r\n      this.cwd = ctx.cwd;\r\n      this.env = ctx.env;\r\n    } else {\r\n      const resolvedBin = this.resolveFromPath(name);\r\n      if (resolvedBin && this.commands.has(\"node\")) {\r\n        try {\r\n          result = await this.commands\r\n            .get(\"node\")!\r\n            .execute([resolvedBin, ...args], ctx);\r\n        } catch (e) {\r\n          const msg = e instanceof Error ? e.message : String(e);\r\n          result = {\r\n            stdout: \"\",\r\n            stderr: `${name}: ${msg}\\n`,\r\n            exitCode: 1,\r\n          };\r\n        }\r\n        this.cwd = ctx.cwd;\r\n        this.env = ctx.env;\r\n      } else {\r\n        result = {\r\n          stdout: \"\",\r\n          stderr: `${name}: command not found\\n`,\r\n          exitCode: 127,\r\n        };\r\n      }\r\n    }\r\n\r\n    for (const [k, v] of Object.entries(savedEnv)) {\r\n      if (v === undefined) delete this.env[k];\r\n      else this.env[k] = v;\r\n    }\r\n\r\n    result = await this.applyRedirects(result, cmd);\r\n\r\n    this.lastExit = result.exitCode;\r\n    return result;\r\n  }\r\n\r\n  /* ---------------------------------------------------------------- */\r\n  /*  Helpers                                                          */\r\n  /* ---------------------------------------------------------------- */\r\n\r\n  private buildContext(): ShellContext {\r\n    return {\r\n      cwd: this.cwd,\r\n      env: { ...this.env },\r\n      volume: this.volume,\r\n      exec: (cmd, opts) => this.exec(cmd, opts),\r\n    };\r\n  }\r\n\r\n  private resolvePath(p: string): string {\r\n    if (p.startsWith(\"/\")) return this.normalizePath(p);\r\n    return this.normalizePath(`${this.cwd}/${p}`);\r\n  }\r\n\r\n  // Search PATH for a command. Parses .bin stubs to find the real JS entry point.\r\n  private resolveFromPath(name: string): string | null {\r\n    const pathStr = this.env.PATH || \"\";\r\n    const dirs = pathStr.split(\":\");\r\n\r\n    for (const dir of dirs) {\r\n      if (!dir) continue;\r\n      const candidate = `${dir}/${name}`;\r\n      if (!this.volume.existsSync(candidate)) continue;\r\n\r\n      try {\r\n        const content = this.volume.readFileSync(candidate, \"utf8\");\r\n        // bin stubs: node \"/node_modules/pkg/index.js\" \"$@\"\r\n        const match = content.match(/node\\s+\"([^\"]+)\"/);\r\n        if (match && this.volume.existsSync(match[1])) {\r\n          return match[1];\r\n        }\r\n        if (\r\n          content.startsWith(\"#!/\") ||\r\n          content.startsWith(\"'use strict'\") ||\r\n          content.startsWith('\"use strict\"') ||\r\n          content.startsWith(\"var \") ||\r\n          content.startsWith(\"const \") ||\r\n          content.startsWith(\"import \") ||\r\n          content.startsWith(\"module.\")\r\n        ) {\r\n          return candidate;\r\n        }\r\n      } catch {\r\n        /* skip */\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private normalizePath(raw: string): string {\r\n    const parts = raw.split(\"/\").filter(Boolean);\r\n    const stack: string[] = [];\r\n    for (const part of parts) {\r\n      if (part === \"..\") stack.pop();\r\n      else if (part !== \".\") stack.push(part);\r\n    }\r\n    return \"/\" + stack.join(\"/\");\r\n  }\r\n\r\n  private async applyRedirects(\r\n    result: ShellResult,\r\n    cmd: CommandNode,\r\n  ): Promise<ShellResult> {\r\n    let { stdout, stderr, exitCode } = result;\r\n\r\n    for (const r of cmd.redirects) {\r\n      if (r.type === \"stderr-to-stdout\") {\r\n        stdout += stderr;\r\n        stderr = \"\";\r\n        continue;\r\n      }\r\n\r\n      if (r.type === \"write\" || r.type === \"append\") {\r\n        const p = this.resolvePath(r.target);\r\n        try {\r\n          if (r.type === \"append\" && this.volume.existsSync(p)) {\r\n            const existing = this.volume.readFileSync(p, \"utf8\");\r\n            this.volume.writeFileSync(p, existing + stdout);\r\n          } else {\r\n            const dir = this.normalizePath(p.substring(0, p.lastIndexOf(\"/\")));\r\n            if (dir && dir !== \"/\" && !this.volume.existsSync(dir)) {\r\n              this.volume.mkdirSync(dir, { recursive: true });\r\n            }\r\n            this.volume.writeFileSync(p, stdout);\r\n          }\r\n          stdout = \"\";\r\n        } catch (e) {\r\n          stderr += `shell: ${r.target}: ${e instanceof Error ? e.message : \"Cannot write\"}\\n`;\r\n          exitCode = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    return { stdout, stderr, exitCode };\r\n  }\r\n\r\n  private async expandCommandSubstitution(input: string): Promise<string> {\r\n    let result = \"\";\r\n    let i = 0;\r\n\r\n    while (i < input.length) {\r\n      if (input[i] === \"'\") {\r\n        result += \"'\";\r\n        i++;\r\n        while (i < input.length && input[i] !== \"'\") {\r\n          result += input[i++];\r\n        }\r\n        if (i < input.length) result += input[i++];\r\n        continue;\r\n      }\r\n\r\n      if (input[i] === \"$\" && input[i + 1] === \"(\") {\r\n        i += 2;\r\n        let depth = 1;\r\n        let subCmd = \"\";\r\n        while (i < input.length && depth > 0) {\r\n          if (input[i] === \"(\") depth++;\r\n          if (input[i] === \")\") depth--;\r\n          if (depth > 0) subCmd += input[i];\r\n          i++;\r\n        }\r\n        const subResult = await this.exec(subCmd);\r\n        result += subResult.stdout.replace(/\\n$/, \"\");\r\n        continue;\r\n      }\r\n\r\n      if (input[i] === \"`\") {\r\n        i++;\r\n        let subCmd = \"\";\r\n        while (i < input.length && input[i] !== \"`\") {\r\n          subCmd += input[i++];\r\n        }\r\n        if (i < input.length) i++;\r\n        const subResult = await this.exec(subCmd);\r\n        result += subResult.stdout.replace(/\\n$/, \"\");\r\n        continue;\r\n      }\r\n\r\n      result += input[i++];\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  private handleAlias(args: string[]): ShellResult {\r\n    if (args.length === 0) {\r\n      let out = \"\";\r\n      for (const [k, v] of this.aliases) out += `alias ${k}='${v}'\\n`;\r\n      return { stdout: out, stderr: \"\", exitCode: 0 };\r\n    }\r\n    for (const arg of args) {\r\n      const eq = arg.indexOf(\"=\");\r\n      if (eq > 0) {\r\n        let val = arg.slice(eq + 1);\r\n        if (\r\n          (val.startsWith(\"'\") && val.endsWith(\"'\")) ||\r\n          (val.startsWith('\"') && val.endsWith('\"'))\r\n        ) {\r\n          val = val.slice(1, -1);\r\n        }\r\n        this.aliases.set(arg.slice(0, eq), val);\r\n      } else {\r\n        const val = this.aliases.get(arg);\r\n        if (val)\r\n          return { stdout: `alias ${arg}='${val}'\\n`, stderr: \"\", exitCode: 0 };\r\n        return {\r\n          stdout: \"\",\r\n          stderr: `alias: ${arg}: not found\\n`,\r\n          exitCode: 1,\r\n        };\r\n      }\r\n    }\r\n    return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n  }\r\n\r\n  private async handleSource(args: string[]): Promise<ShellResult> {\r\n    if (args.length === 0) {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: \"source: missing file argument\\n\",\r\n        exitCode: 1,\r\n      };\r\n    }\r\n    const p = this.resolvePath(args[0]);\r\n    try {\r\n      const content = this.volume.readFileSync(p, \"utf8\");\r\n      return this.exec(content);\r\n    } catch {\r\n      return {\r\n        stdout: \"\",\r\n        stderr: `source: ${args[0]}: No such file or directory\\n`,\r\n        exitCode: 1,\r\n      };\r\n    }\r\n  }\r\n}\r\n","// Bounded LRU for transformed module source, shared by every ScriptEngine\r\n// created in the same realm (worker or main). Without this, engines created\r\n// without a MemoryHandler fall back to an unbounded Map that grows for the\r\n// lifetime of the worker.\r\n\r\nconst DEFAULT_MAX_ENTRIES = 512;\r\nconst DEFAULT_MAX_BYTES = 32 * 1024 * 1024; // UTF-16 estimate: value.length * 2\r\n\r\nexport class LruTransformCache {\r\n  private _map = new Map<string, string>();\r\n  private _bytes = 0;\r\n  private readonly _maxEntries: number;\r\n  private readonly _maxBytes: number;\r\n\r\n  constructor(maxEntries = DEFAULT_MAX_ENTRIES, maxBytes = DEFAULT_MAX_BYTES) {\r\n    this._maxEntries = maxEntries;\r\n    this._maxBytes = maxBytes;\r\n  }\r\n\r\n  get(key: string): string | undefined {\r\n    const value = this._map.get(key);\r\n    if (value === undefined) return undefined;\r\n    // refresh recency\r\n    this._map.delete(key);\r\n    this._map.set(key, value);\r\n    return value;\r\n  }\r\n\r\n  set(key: string, value: string): this {\r\n    const existing = this._map.get(key);\r\n    if (existing !== undefined) {\r\n      this._bytes -= existing.length * 2;\r\n      this._map.delete(key);\r\n    }\r\n    this._map.set(key, value);\r\n    this._bytes += value.length * 2;\r\n    this._evict();\r\n    return this;\r\n  }\r\n\r\n  has(key: string): boolean {\r\n    return this._map.has(key);\r\n  }\r\n\r\n  delete(key: string): boolean {\r\n    const existing = this._map.get(key);\r\n    if (existing === undefined) return false;\r\n    this._bytes -= existing.length * 2;\r\n    return this._map.delete(key);\r\n  }\r\n\r\n  clear(): void {\r\n    this._map.clear();\r\n    this._bytes = 0;\r\n  }\r\n\r\n  get size(): number {\r\n    return this._map.size;\r\n  }\r\n\r\n  stats(): { entries: number; approxBytes: number } {\r\n    return { entries: this._map.size, approxBytes: this._bytes };\r\n  }\r\n\r\n  private _evict(): void {\r\n    while (\r\n      this._map.size > this._maxEntries ||\r\n      (this._bytes > this._maxBytes && this._map.size > 1)\r\n    ) {\r\n      const oldest = this._map.keys().next().value as string | undefined;\r\n      if (oldest === undefined) break;\r\n      const value = this._map.get(oldest)!;\r\n      this._bytes -= value.length * 2;\r\n      this._map.delete(oldest);\r\n    }\r\n  }\r\n}\r\n\r\nlet singleton: LruTransformCache | null = null;\r\n\r\n// One cache per realm — exactly the scope we want: all ScriptEngines inside\r\n// one process worker (or the main thread fallback path) share transforms.\r\nexport function getWorkerTransformCache(): LruTransformCache {\r\n  if (!singleton) singleton = new LruTransformCache();\r\n  return singleton;\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createNpmCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"npm\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} npm <command>\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a package.json script\\n` +\r\n            `  ${A_CYAN}start${A_RESET}             Alias for npm run start\\n` +\r\n            `  ${A_CYAN}test${A_RESET}              Alias for npm run test\\n` +\r\n            `  ${A_CYAN}install${A_RESET} [pkg]     Install packages\\n` +\r\n            `  ${A_CYAN}uninstall${A_RESET} <pkg>   Remove a package\\n` +\r\n            `  ${A_CYAN}ls${A_RESET}                List installed packages\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project (runs create-<pkg>)\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n` +\r\n            `  ${A_CYAN}info${A_RESET} <pkg>        Show package info\\n` +\r\n            `  ${A_CYAN}exec${A_RESET} <cmd>        Execute a package binary\\n` +\r\n            `  ${A_CYAN}prefix${A_RESET}            Show prefix\\n` +\r\n            `  ${A_CYAN}root${A_RESET}              Show node_modules path\\n` +\r\n            `  ${A_CYAN}bin${A_RESET}               Show bin directory\\n` +\r\n            `  ${A_CYAN}config${A_RESET}            Manage configuration\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"run\":\r\n        case \"run-script\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n        case \"tst\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"install\":\r\n        case \"i\":\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx);\r\n        case \"ci\":\r\n          try {\r\n            deps.removeNodeModules(ctx.cwd);\r\n          } catch {\r\n            /* */\r\n          }\r\n          return deps.installPackages([], ctx);\r\n        case \"uninstall\":\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"un\":\r\n          return deps.uninstallPackages(params.slice(1), ctx);\r\n        case \"ls\":\r\n        case \"list\":\r\n          return deps.listPackages(ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.NPM + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"info\":\r\n        case \"view\":\r\n        case \"show\":\r\n          return deps.npmInfo(params.slice(1), ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"prefix\":\r\n          return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"root\":\r\n          return {\r\n            stdout: ctx.cwd + \"/node_modules\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"bin\":\r\n          return {\r\n            stdout: ctx.cwd + \"/node_modules/.bin\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"pack\":\r\n          return deps.npmPack(ctx);\r\n        case \"config\":\r\n        case \"c\":\r\n          return deps.npmConfig(params.slice(1), ctx);\r\n        case \"outdated\":\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatWarn(\r\n              \"outdated check not available in nodepod\",\r\n              \"npm\",\r\n            ),\r\n            exitCode: 0,\r\n          };\r\n        case \"audit\":\r\n          return {\r\n            stdout: \"found 0 vulnerabilities\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"fund\":\r\n          return {\r\n            stdout: \"0 packages are looking for funding\\n\",\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"cache\":\r\n          if (params[1] === \"clean\" || params[1] === \"clear\") {\r\n            return { stdout: \"Cache cleared.\\n\", stderr: \"\", exitCode: 0 };\r\n          }\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(\r\n              `cache: unknown subcommand ${params[1] ?? \"\"}`,\r\n              \"npm\",\r\n            ),\r\n            exitCode: 1,\r\n          };\r\n        case \"whoami\":\r\n          return { stdout: \"nodepod-user\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"ping\":\r\n          return {\r\n            stdout: `PING ${NPM_REGISTRY_URL_SLASH} - ok\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        case \"set-script\": {\r\n          const scriptName = params[1];\r\n          const scriptCmd = params.slice(2).join(\" \");\r\n          if (!scriptName || !scriptCmd) {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatErr(\r\n                \"Usage: npm set-script <name> <command>\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 1,\r\n            };\r\n          }\r\n          try {\r\n            const pkgPath = ctx.cwd + \"/package.json\";\r\n            const raw = deps.readFile(pkgPath);\r\n            const pkg = JSON.parse(raw);\r\n            if (!pkg.scripts) pkg.scripts = {};\r\n            pkg.scripts[scriptName] = scriptCmd;\r\n            deps.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatWarn(\r\n                \"`set-script` is deprecated. Use `npm pkg set scripts.${scriptName}=\\\"${scriptCmd}\\\"` instead.\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 0,\r\n            };\r\n          } catch (e: any) {\r\n            return {\r\n              stdout: \"\",\r\n              stderr: deps.formatErr(\r\n                e.message || \"Failed to update package.json\",\r\n                \"npm\",\r\n              ),\r\n              exitCode: 1,\r\n            };\r\n          }\r\n        }\r\n        case \"pkg\":\r\n          return deps.npmPkg ? deps.npmPkg(params.slice(1), ctx) : {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(\"npm pkg not implemented\", \"npm\"),\r\n            exitCode: 1,\r\n          };\r\n        default:\r\n          return {\r\n            stdout: \"\",\r\n            stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"npm\"),\r\n            exitCode: 1,\r\n          };\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createPnpmCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"pnpm\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} pnpm <command>\\n\\n` +\r\n            `${A_BOLD}Manage your dependencies:${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET} [pkg]         Install packages\\n` +\r\n            `  ${A_CYAN}install${A_RESET}           Install from manifest\\n` +\r\n            `  ${A_CYAN}remove${A_RESET} <pkg>      Remove a package\\n` +\r\n            `  ${A_CYAN}list${A_RESET}              List installed packages\\n\\n` +\r\n            `${A_BOLD}Run your scripts:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a script\\n` +\r\n            `  ${A_CYAN}exec${A_RESET} <cmd>        Execute a package binary\\n` +\r\n            `  ${A_CYAN}dlx${A_RESET} <pkg>         Download and execute a package\\n\\n` +\r\n            `${A_BOLD}Create a project:${A_RESET}\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project\\n\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"uninstall\":\r\n        case \"un\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"pnpm\");\r\n        case \"list\":\r\n        case \"ls\":\r\n          return deps.listPackages(ctx, \"pnpm\");\r\n        case \"run\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"dlx\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.PNPM + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"audit\":\r\n          return { stdout: \"No known vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"outdated\":\r\n          return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n        case \"why\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"pnpm\"), exitCode: 0 };\r\n        default:\r\n          return { stdout: \"\", stderr: deps.formatErr(`Unknown command \"${sub}\"`, \"pnpm\"), exitCode: 1 };\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createYarnCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"yarn\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub) return deps.installPackages([], ctx, \"yarn\");\r\n      if (sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Usage:${A_RESET} yarn <command>\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET} [pkg]         Install packages\\n` +\r\n            `  ${A_CYAN}install${A_RESET}           Install from manifest\\n` +\r\n            `  ${A_CYAN}remove${A_RESET} <pkg>      Remove a package\\n` +\r\n            `  ${A_CYAN}list${A_RESET}              List installed packages\\n` +\r\n            `  ${A_CYAN}run${A_RESET} <script>      Run a script\\n` +\r\n            `  ${A_CYAN}dlx${A_RESET} <pkg>         Download and execute a package\\n` +\r\n            `  ${A_CYAN}init${A_RESET}              Create a package.json\\n` +\r\n            `  ${A_CYAN}create${A_RESET} <pkg>      Create a project\\n` +\r\n            `  ${A_CYAN}version${A_RESET}           Show version info\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n        case \"uninstall\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"yarn\");\r\n        case \"list\":\r\n        case \"ls\":\r\n          return deps.listPackages(ctx, \"yarn\");\r\n        case \"run\":\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"exec\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"dlx\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.YARN + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"info\":\r\n          return deps.npmInfo(params.slice(1), ctx);\r\n        case \"audit\":\r\n          return { stdout: \"0 vulnerabilities found\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"outdated\":\r\n          return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n        case \"why\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"why: not available in nodepod\", \"yarn\"), exitCode: 0 };\r\n        case \"global\":\r\n          return { stdout: \"\", stderr: deps.formatWarn(\"global: not available in nodepod\", \"yarn\"), exitCode: 0 };\r\n        default:\r\n          // yarn classic treats unknown commands as `yarn run <cmd>`\r\n          return deps.runScript(params, ctx);\r\n      }\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_DIM = \"\\x1b[2m\";\r\nconst A_GREEN = \"\\x1b[32m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\n\r\nexport function createBunCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"bun\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      const sub = params[0];\r\n      if (!sub || sub === \"help\" || sub === \"--help\") {\r\n        return {\r\n          stdout:\r\n            `${A_BOLD}Bun${A_RESET} is a fast JavaScript runtime, package manager, and bundler.\\n\\n` +\r\n            `${A_DIM}Usage:${A_RESET} bun <command> [...flags] [...args]\\n\\n` +\r\n            `${A_BOLD}Commands:${A_RESET}\\n` +\r\n            `  ${A_CYAN}run${A_RESET}       ${A_DIM}Run a package.json script or file${A_RESET}\\n` +\r\n            `  ${A_CYAN}install${A_RESET}   ${A_DIM}Install dependencies from package.json${A_RESET}\\n` +\r\n            `  ${A_CYAN}add${A_RESET}       ${A_DIM}Add a dependency${A_RESET}\\n` +\r\n            `  ${A_CYAN}remove${A_RESET}    ${A_DIM}Remove a dependency${A_RESET}\\n` +\r\n            `  ${A_CYAN}init${A_RESET}      ${A_DIM}Start an empty Bun project${A_RESET}\\n` +\r\n            `  ${A_CYAN}create${A_RESET}    ${A_DIM}Create a new project from a template${A_RESET}\\n` +\r\n            `  ${A_CYAN}test${A_RESET}      ${A_DIM}Run unit tests${A_RESET}\\n` +\r\n            `  ${A_CYAN}x${A_RESET}         ${A_DIM}Execute a package binary (bunx)${A_RESET}\\n` +\r\n            `  ${A_CYAN}pm${A_RESET}        ${A_DIM}Package manager utilities${A_RESET}\\n`,\r\n          stderr: \"\",\r\n          exitCode: 0,\r\n        };\r\n      }\r\n\r\n      switch (sub) {\r\n        case \"run\":\r\n          if (\r\n            params[1] &&\r\n            (params[1].endsWith(\".js\") ||\r\n              params[1].endsWith(\".ts\") ||\r\n              params[1].endsWith(\".mjs\") ||\r\n              params[1].endsWith(\".tsx\") ||\r\n              params[1].endsWith(\".jsx\"))\r\n          ) {\r\n            return deps.executeNodeBinary(params[1], params.slice(2), ctx);\r\n          }\r\n          return deps.runScript(params.slice(1), ctx);\r\n        case \"start\":\r\n          return deps.runScript([\"start\"], ctx);\r\n        case \"test\":\r\n        case \"t\":\r\n          return deps.runScript([\"test\"], ctx);\r\n        case \"install\":\r\n        case \"i\":\r\n          return deps.installPackages(params.slice(1), ctx, \"bun\");\r\n        case \"add\":\r\n          return deps.installPackages(params.slice(1), ctx, \"bun\");\r\n        case \"remove\":\r\n        case \"rm\":\r\n          return deps.uninstallPackages(params.slice(1), ctx, \"bun\");\r\n        case \"x\":\r\n          return deps.npxExecute(params.slice(1), ctx);\r\n        case \"init\":\r\n        case \"create\":\r\n          return deps.npmInitOrCreate(params.slice(1), sub, ctx);\r\n        case \"pm\": {\r\n          const pmSub = params[1];\r\n          if (pmSub === \"ls\" || pmSub === \"list\")\r\n            return deps.listPackages(ctx, \"bun\");\r\n          if (pmSub === \"cache\")\r\n            return { stdout: \"Cache path: /tmp/bun-cache\\n\", stderr: \"\", exitCode: 0 };\r\n          return {\r\n            stdout: `${A_DIM}bun pm: available subcommands: ls, cache${A_RESET}\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        }\r\n        case \"version\":\r\n        case \"-v\":\r\n        case \"--version\":\r\n          return { stdout: VERSIONS.BUN + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        case \"upgrade\":\r\n          return {\r\n            stdout: `${A_GREEN}Bun is already up to date.${A_RESET}\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        default: {\r\n          // bare `bun <file>` runs it directly, otherwise treat as script\r\n          if (params[0] && !params[0].startsWith(\"-\")) {\r\n            const filePath = params[0].startsWith(\"/\")\r\n              ? params[0]\r\n              : `${ctx.cwd}/${params[0]}`.replace(/\\/+/g, \"/\");\r\n            if (deps.hasFile(filePath)) {\r\n              return deps.executeNodeBinary(params[0], params.slice(1), ctx);\r\n            }\r\n            return deps.runScript(params, ctx);\r\n          }\r\n          return {\r\n            stdout: \"\",\r\n            stderr: `error: unknown command \"${sub}\"\\n`,\r\n            exitCode: 1,\r\n          };\r\n        }\r\n      }\r\n    },\r\n  };\r\n}\r\n\r\nexport function createBunxCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"bunx\",\r\n    async execute(params, ctx) {\r\n      return deps.npxExecute(params, ctx);\r\n    },\r\n  };\r\n}\r\n","import type { ShellCommand } from \"../shell-types\";\r\nimport type { PmDeps } from \"./pm-types\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\n\r\nexport function createNodeCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"node\",\r\n    async execute(params, ctx) {\r\n      if (!deps.hasFile(\"/\"))\r\n        return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n      let target: string | null = null;\r\n      let evalCode: string | null = null;\r\n      let printCode: string | null = null;\r\n      const scriptArgs: string[] = [];\r\n      let collectingArgs = false;\r\n\r\n      for (let i = 0; i < params.length; i++) {\r\n        if (collectingArgs) {\r\n          scriptArgs.push(params[i]);\r\n          continue;\r\n        }\r\n        if (params[i] === \"-e\" || params[i] === \"--eval\") {\r\n          evalCode = params[++i] ?? \"\";\r\n        } else if (params[i] === \"-p\" || params[i] === \"--print\") {\r\n          printCode = params[++i] ?? \"\";\r\n        } else if (params[i] === \"--version\" || params[i] === \"-v\") {\r\n          return { stdout: VERSIONS.NODE + \"\\n\", stderr: \"\", exitCode: 0 };\r\n        } else if (params[i] === \"--help\" || params[i] === \"-h\") {\r\n          return {\r\n            stdout: `${A_BOLD}Usage:${A_RESET} node [options] [script.js] [arguments]\\n`,\r\n            stderr: \"\",\r\n            exitCode: 0,\r\n          };\r\n        } else if (\r\n          params[i] === \"-r\" ||\r\n          params[i] === \"--require\" ||\r\n          params[i] === \"--experimental-specifier-resolution\" ||\r\n          params[i] === \"--loader\" ||\r\n          params[i] === \"--import\"\r\n        ) {\r\n          i++;\r\n        } else if (params[i].startsWith(\"-\")) {\r\n          // skip unknown flags (--harmony, --inspect, etc.)\r\n        } else {\r\n          target = params[i];\r\n          collectingArgs = true;\r\n        }\r\n      }\r\n\r\n      if (evalCode !== null) {\r\n        return deps.evalCode(evalCode, ctx);\r\n      }\r\n      if (printCode !== null) {\r\n        return deps.printCode(printCode, ctx);\r\n      }\r\n\r\n      if (!target)\r\n        return {\r\n          stdout: \"\",\r\n          stderr: `${A_BOLD}Usage:${A_RESET} node <file> [args...]\\n`,\r\n          exitCode: 1,\r\n        };\r\n\r\n      return deps.executeNodeBinary(target, scriptArgs, ctx);\r\n    },\r\n  };\r\n}\r\n\r\nexport function createNpxCommand(deps: PmDeps): ShellCommand {\r\n  return {\r\n    name: \"npx\",\r\n    async execute(params, ctx) {\r\n      return deps.npxExecute(params, ctx);\r\n    },\r\n  };\r\n}\r\n","// Virtual git backed by the VFS (.git/ directories).\r\n// GitHub API support when GITHUB_TOKEN is set.\r\n\r\nimport type { ShellCommand, ShellContext, ShellResult } from \"../shell-types\";\r\nimport type { MemoryVolume } from \"../../memory-volume\";\r\nimport { ok, fail, RESET, DIM, GREEN, BOLD_RED, CYAN } from \"../shell-helpers\";\r\nimport { VERSIONS } from \"../../constants/config\";\r\nimport { proxiedFetch } from \"../../cross-origin\";\r\nimport * as pathModule from \"../../polyfills/path\";\r\nimport { createHash } from \"../../polyfills/crypto\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  ANSI helpers                                                       */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst RED = \"\\x1b[31m\";\r\nconst YELLOW = \"\\x1b[33m\";\r\nconst BOLD = \"\\x1b[1m\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Types                                                              */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface IndexEntry {\r\n  path: string;\r\n  hash: string;\r\n  mode: number;\r\n  mtime: number;\r\n}\r\n\r\ninterface CommitData {\r\n  tree: string;\r\n  parent: string | null;\r\n  parent2?: string | null;\r\n  author: string;\r\n  committer: string;\r\n  timestamp: number;\r\n  message: string;\r\n}\r\n\r\ninterface TreeEntry {\r\n  name: string;\r\n  mode: string;\r\n  type: \"blob\" | \"tree\";\r\n  hash: string;\r\n}\r\n\r\ninterface DiffEntry {\r\n  path: string;\r\n  status: \"added\" | \"modified\" | \"deleted\";\r\n  oldContent?: string;\r\n  newContent?: string;\r\n}\r\n\r\ninterface EditOp {\r\n  kind: \"equal\" | \"insert\" | \"delete\";\r\n  oldIdx: number;   // 0-based, -1 for inserts\r\n  newIdx: number;   // 0-based, -1 for deletes\r\n  line: string;\r\n}\r\n\r\ninterface DiffHunk {\r\n  oldStart: number;   // 1-based\r\n  oldCount: number;\r\n  newStart: number;   // 1-based\r\n  newCount: number;\r\n  lines: EditOp[];\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Myers diff algorithm                                               */\r\n/* ------------------------------------------------------------------ */\r\n\r\n// Myers O(ND) diff with backtracking\r\nfunction myersDiff(oldLines: string[], newLines: string[]): EditOp[] {\r\n  const N = oldLines.length;\r\n  const M = newLines.length;\r\n  const MAX = N + M;\r\n\r\n  if (MAX === 0) return [];\r\n\r\n  const vHistory: Map<number, number>[] = [];\r\n  const v = new Map<number, number>();\r\n  v.set(1, 0);\r\n\r\n  let foundD = -1;\r\n\r\n  outer:\r\n  for (let d = 0; d <= MAX; d++) {\r\n    vHistory.push(new Map(v));\r\n\r\n    for (let k = -d; k <= d; k += 2) {\r\n      let x: number;\r\n      if (k === -d || (k !== d && (v.get(k - 1) ?? 0) < (v.get(k + 1) ?? 0))) {\r\n        x = v.get(k + 1) ?? 0;\r\n      } else {\r\n        x = (v.get(k - 1) ?? 0) + 1;\r\n      }\r\n      let y = x - k;\r\n\r\n      while (x < N && y < M && oldLines[x] === newLines[y]) {\r\n        x++;\r\n        y++;\r\n      }\r\n\r\n      v.set(k, x);\r\n\r\n      if (x >= N && y >= M) {\r\n        foundD = d;\r\n        break outer;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (foundD < 0) foundD = MAX;\r\n\r\n  let x = N;\r\n  let y = M;\r\n  const ops: EditOp[] = [];\r\n\r\n  for (let d = foundD; d > 0; d--) {\r\n    const vPrev = vHistory[d];\r\n    const k = x - y;\r\n    let prevK: number;\r\n\r\n    if (k === -d || (k !== d && (vPrev.get(k - 1) ?? 0) < (vPrev.get(k + 1) ?? 0))) {\r\n      prevK = k + 1;\r\n    } else {\r\n      prevK = k - 1;\r\n    }\r\n\r\n    const prevX = vPrev.get(prevK) ?? 0;\r\n    const prevY = prevX - prevK;\r\n\r\n    while (x > prevX && y > prevY) {\r\n      x--;\r\n      y--;\r\n      ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\r\n    }\r\n\r\n    if (d > 0) {\r\n      if (x === prevX) {\r\n        y--;\r\n        ops.push({ kind: \"insert\", oldIdx: -1, newIdx: y, line: newLines[y] });\r\n      } else {\r\n        x--;\r\n        ops.push({ kind: \"delete\", oldIdx: x, newIdx: -1, line: oldLines[x] });\r\n      }\r\n    }\r\n  }\r\n\r\n  while (x > 0 && y > 0) {\r\n    x--;\r\n    y--;\r\n    ops.push({ kind: \"equal\", oldIdx: x, newIdx: y, line: oldLines[x] });\r\n  }\r\n\r\n  ops.reverse();\r\n  return ops;\r\n}\r\n\r\nfunction buildHunks(ops: EditOp[], contextLines = 3): DiffHunk[] {\r\n  const hunks: DiffHunk[] = [];\r\n  if (ops.length === 0) return hunks;\r\n\r\n  const changeIndices: number[] = [];\r\n  for (let i = 0; i < ops.length; i++) {\r\n    if (ops[i].kind !== \"equal\") changeIndices.push(i);\r\n  }\r\n  if (changeIndices.length === 0) return hunks;\r\n\r\n  let groupStart = changeIndices[0];\r\n  let groupEnd = changeIndices[0];\r\n\r\n  const groups: Array<[number, number]> = [];\r\n\r\n  for (let i = 1; i < changeIndices.length; i++) {\r\n    if (changeIndices[i] - groupEnd <= contextLines * 2) {\r\n      groupEnd = changeIndices[i];\r\n    } else {\r\n      groups.push([groupStart, groupEnd]);\r\n      groupStart = changeIndices[i];\r\n      groupEnd = changeIndices[i];\r\n    }\r\n  }\r\n  groups.push([groupStart, groupEnd]);\r\n\r\n  for (const [gStart, gEnd] of groups) {\r\n    const hunkOpsStart = Math.max(0, gStart - contextLines);\r\n    const hunkOpsEnd = Math.min(ops.length - 1, gEnd + contextLines);\r\n\r\n    const hunkOps = ops.slice(hunkOpsStart, hunkOpsEnd + 1);\r\n\r\n    let oldStart = Infinity;\r\n    let newStart = Infinity;\r\n    let oldCount = 0;\r\n    let newCount = 0;\r\n\r\n    for (const op of hunkOps) {\r\n      if (op.kind === \"equal\") {\r\n        if (op.oldIdx < oldStart) oldStart = op.oldIdx;\r\n        if (op.newIdx < newStart) newStart = op.newIdx;\r\n        oldCount++;\r\n        newCount++;\r\n      } else if (op.kind === \"delete\") {\r\n        if (op.oldIdx < oldStart) oldStart = op.oldIdx;\r\n        oldCount++;\r\n      } else {\r\n        if (op.newIdx < newStart) newStart = op.newIdx;\r\n        newCount++;\r\n      }\r\n    }\r\n\r\n    hunks.push({\r\n      oldStart: (oldStart === Infinity ? 0 : oldStart) + 1,\r\n      oldCount,\r\n      newStart: (newStart === Infinity ? 0 : newStart) + 1,\r\n      newCount,\r\n      lines: hunkOps,\r\n    });\r\n  }\r\n\r\n  return hunks;\r\n}\r\n\r\nfunction countChanges(ops: EditOp[]): { insertions: number; deletions: number } {\r\n  let insertions = 0;\r\n  let deletions = 0;\r\n  for (const op of ops) {\r\n    if (op.kind === \"insert\") insertions++;\r\n    else if (op.kind === \"delete\") deletions++;\r\n  }\r\n  return { insertions, deletions };\r\n}\r\n\r\ninterface StashEntry {\r\n  message: string;\r\n  commitHash: string;\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  GitRepo — core operations against the VFS                         */\r\n/* ------------------------------------------------------------------ */\r\n\r\nclass GitRepo {\r\n  private vol: MemoryVolume;\r\n  readonly gitDir: string;\r\n  readonly workDir: string;\r\n\r\n  constructor(vol: MemoryVolume, workDir: string, gitDir: string) {\r\n    this.vol = vol;\r\n    this.workDir = workDir;\r\n    this.gitDir = gitDir;\r\n  }\r\n\r\n  /* -- object store -- */\r\n\r\n  private readStore(): Record<string, { type: string; data: string }> {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/objects/store.json\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw);\r\n    } catch {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  private writeStore(store: Record<string, { type: string; data: string }>): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/objects/store.json\", JSON.stringify(store));\r\n  }\r\n\r\n  hashContent(type: string, content: string): string {\r\n    const header = `${type} ${content.length}\\0`;\r\n    return createHash(\"sha1\").update(header + content).digest(\"hex\") as string;\r\n  }\r\n\r\n  writeObject(type: string, content: string): string {\r\n    const hash = this.hashContent(type, content);\r\n    const store = this.readStore();\r\n    if (!store[hash]) {\r\n      store[hash] = { type, data: content };\r\n      this.writeStore(store);\r\n    }\r\n    return hash;\r\n  }\r\n\r\n  readObject(hash: string): { type: string; data: string } | null {\r\n    const store = this.readStore();\r\n    return store[hash] ?? null;\r\n  }\r\n\r\n  /* -- index (staging area) -- */\r\n\r\n  readIndex(): IndexEntry[] {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/index\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw).entries ?? [];\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  writeIndex(entries: IndexEntry[]): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/index\", JSON.stringify({ entries }));\r\n  }\r\n\r\n  addToIndex(relPath: string, content: string): void {\r\n    const hash = this.writeObject(\"blob\", content);\r\n    const entries = this.readIndex();\r\n    const idx = entries.findIndex((e) => e.path === relPath);\r\n    const entry: IndexEntry = { path: relPath, hash, mode: 100644, mtime: Date.now() };\r\n    if (idx >= 0) entries[idx] = entry;\r\n    else entries.push(entry);\r\n    entries.sort((a, b) => a.path.localeCompare(b.path));\r\n    this.writeIndex(entries);\r\n  }\r\n\r\n  removeFromIndex(relPath: string): void {\r\n    const entries = this.readIndex().filter((e) => e.path !== relPath);\r\n    this.writeIndex(entries);\r\n  }\r\n\r\n  /* -- refs -- */\r\n\r\n  getHEAD(): string {\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    } catch {\r\n      return \"ref: refs/heads/main\";\r\n    }\r\n  }\r\n\r\n  setHEAD(value: string): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/HEAD\", value + \"\\n\");\r\n  }\r\n\r\n  getCurrentBranch(): string | null {\r\n    const head = this.getHEAD();\r\n    if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\r\n    return null;\r\n  }\r\n\r\n  resolveRef(ref: string): string | null {\r\n    if (/^[0-9a-f]{40}$/.test(ref)) return ref;\r\n    if (ref.startsWith(\"ref: \")) {\r\n      const target = ref.slice(5);\r\n      try {\r\n        return (this.vol.readFileSync(this.gitDir + \"/\" + target, \"utf8\" as any) as string).trim();\r\n      } catch {\r\n        return null;\r\n      }\r\n    }\r\n    // try branch, then tag\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/refs/heads/\" + ref, \"utf8\" as any) as string).trim();\r\n    } catch { /* */ }\r\n    try {\r\n      return (this.vol.readFileSync(this.gitDir + \"/refs/tags/\" + ref, \"utf8\" as any) as string).trim();\r\n    } catch { /* */ }\r\n    return null;\r\n  }\r\n\r\n  resolveHEAD(): string | null {\r\n    return this.resolveRef(this.getHEAD());\r\n  }\r\n\r\n  updateBranchRef(branch: string, hash: string): void {\r\n    const refPath = this.gitDir + \"/refs/heads/\" + branch;\r\n    const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\r\n    if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\r\n    this.vol.writeFileSync(refPath, hash + \"\\n\");\r\n  }\r\n\r\n  listBranches(): string[] {\r\n    try {\r\n      return this.vol.readdirSync(this.gitDir + \"/refs/heads\") as string[];\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  deleteBranch(name: string): boolean {\r\n    try {\r\n      const refPath = this.gitDir + \"/refs/heads/\" + name;\r\n      if (this.vol.existsSync(refPath)) {\r\n        this.vol.unlinkSync(refPath);\r\n        return true;\r\n      }\r\n    } catch { /* */ }\r\n    return false;\r\n  }\r\n\r\n  /* -- config -- */\r\n\r\n  readConfig(): string {\r\n    try {\r\n      return this.vol.readFileSync(this.gitDir + \"/config\", \"utf8\" as any) as string;\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n\r\n  writeConfig(content: string): void {\r\n    this.vol.writeFileSync(this.gitDir + \"/config\", content);\r\n  }\r\n\r\n  getConfigValue(key: string): string | null {\r\n    const config = this.readConfig();\r\n    const parts = key.split(\".\");\r\n    if (parts.length < 2) return null;\r\n\r\n    // e.g. remote.origin.url → [remote \"origin\"] / url\r\n    let sectionName: string;\r\n    let subSection: string | null = null;\r\n    let propName: string;\r\n\r\n    if (parts.length === 3) {\r\n      sectionName = parts[0];\r\n      subSection = parts[1];\r\n      propName = parts[2];\r\n    } else {\r\n      sectionName = parts[0];\r\n      propName = parts[1];\r\n    }\r\n\r\n    const lines = config.split(\"\\n\");\r\n    let inSection = false;\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        if (subSection) {\r\n          const pat = `[${sectionName} \"${subSection}\"]`;\r\n          inSection = trimmed === pat;\r\n        } else {\r\n          inSection = trimmed === `[${sectionName}]`;\r\n        }\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (match && match[1] === propName) return match[2].trim();\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  setConfigValue(key: string, value: string): void {\r\n    const parts = key.split(\".\");\r\n    let sectionHeader: string;\r\n    let propName: string;\r\n\r\n    if (parts.length === 3) {\r\n      sectionHeader = `[${parts[0]} \"${parts[1]}\"]`;\r\n      propName = parts[2];\r\n    } else if (parts.length === 2) {\r\n      sectionHeader = `[${parts[0]}]`;\r\n      propName = parts[1];\r\n    } else {\r\n      return;\r\n    }\r\n\r\n    const config = this.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    let sectionIdx = -1;\r\n    let propIdx = -1;\r\n    let inSection = false;\r\n    let lastLineInSection = -1;\r\n\r\n    for (let i = 0; i < lines.length; i++) {\r\n      const trimmed = lines[i].trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        if (inSection && propIdx === -1) lastLineInSection = i - 1;\r\n        inSection = trimmed === sectionHeader;\r\n        if (inSection) sectionIdx = i;\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        lastLineInSection = i;\r\n        const match = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (match && match[1] === propName) propIdx = i;\r\n      }\r\n    }\r\n    if (inSection && lastLineInSection === -1) lastLineInSection = sectionIdx;\r\n\r\n    if (propIdx >= 0) {\r\n      lines[propIdx] = `\\t${propName} = ${value}`;\r\n    } else if (sectionIdx >= 0) {\r\n      lines.splice(lastLineInSection + 1, 0, `\\t${propName} = ${value}`);\r\n    } else {\r\n      if (lines.length > 0 && lines[lines.length - 1] !== \"\") lines.push(\"\");\r\n      lines.push(sectionHeader);\r\n      lines.push(`\\t${propName} = ${value}`);\r\n    }\r\n\r\n    this.writeConfig(lines.join(\"\\n\"));\r\n  }\r\n\r\n  /* -- tree building -- */\r\n\r\n  buildTree(entries: IndexEntry[]): string {\r\n    const root: TreeEntry[] = [];\r\n    const subdirs = new Map<string, IndexEntry[]>();\r\n\r\n    for (const e of entries) {\r\n      const slashIdx = e.path.indexOf(\"/\");\r\n      if (slashIdx === -1) {\r\n        root.push({ name: e.path, mode: String(e.mode), type: \"blob\", hash: e.hash });\r\n      } else {\r\n        const dir = e.path.substring(0, slashIdx);\r\n        const rest: IndexEntry = { ...e, path: e.path.substring(slashIdx + 1) };\r\n        if (!subdirs.has(dir)) subdirs.set(dir, []);\r\n        subdirs.get(dir)!.push(rest);\r\n      }\r\n    }\r\n\r\n    for (const [dir, subEntries] of subdirs) {\r\n      const treeHash = this.buildTree(subEntries);\r\n      root.push({ name: dir, mode: \"40000\", type: \"tree\", hash: treeHash });\r\n    }\r\n\r\n    root.sort((a, b) => a.name.localeCompare(b.name));\r\n    const treeContent = JSON.stringify(root);\r\n    return this.writeObject(\"tree\", treeContent);\r\n  }\r\n\r\n  /* -- commits -- */\r\n\r\n  createCommit(message: string, parent: string | null, tree: string, parent2?: string | null): string {\r\n    const author = `${this.getConfigValue(\"user.name\") ?? \"nodepod-user\"} <${this.getConfigValue(\"user.email\") ?? \"user@nodepod.dev\"}>`;\r\n    const data: CommitData = {\r\n      tree,\r\n      parent,\r\n      author,\r\n      committer: author,\r\n      timestamp: Date.now(),\r\n      message,\r\n    };\r\n    if (parent2) data.parent2 = parent2;\r\n    return this.writeObject(\"commit\", JSON.stringify(data));\r\n  }\r\n\r\n  readCommit(hash: string): CommitData | null {\r\n    const obj = this.readObject(hash);\r\n    if (!obj || obj.type !== \"commit\") return null;\r\n    return JSON.parse(obj.data);\r\n  }\r\n\r\n  walkLog(startHash: string | null, limit: number): Array<{ hash: string } & CommitData> {\r\n    const result: Array<{ hash: string } & CommitData> = [];\r\n    let current = startHash;\r\n    while (current && result.length < limit) {\r\n      const commit = this.readCommit(current);\r\n      if (!commit) break;\r\n      result.push({ hash: current, ...commit });\r\n      current = commit.parent;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /* -- working tree helpers -- */\r\n\r\n  getCommitTree(commitHash: string): Map<string, string> {\r\n    const commit = this.readCommit(commitHash);\r\n    if (!commit) return new Map();\r\n    return this.flattenTree(commit.tree, \"\");\r\n  }\r\n\r\n  private flattenTree(treeHash: string, prefix: string): Map<string, string> {\r\n    const obj = this.readObject(treeHash);\r\n    if (!obj || obj.type !== \"tree\") return new Map();\r\n    const entries: TreeEntry[] = JSON.parse(obj.data);\r\n    const result = new Map<string, string>();\r\n    for (const e of entries) {\r\n      const fullPath = prefix ? prefix + \"/\" + e.name : e.name;\r\n      if (e.type === \"blob\") {\r\n        result.set(fullPath, e.hash);\r\n      } else {\r\n        for (const [k, v] of this.flattenTree(e.hash, fullPath)) {\r\n          result.set(k, v);\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  getBlobContent(hash: string): string | null {\r\n    const obj = this.readObject(hash);\r\n    if (!obj || obj.type !== \"blob\") return null;\r\n    return obj.data;\r\n  }\r\n\r\n  /* -- diff helpers -- */\r\n\r\n  diffWorkingVsIndex(): DiffEntry[] {\r\n    const index = this.readIndex();\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n    const result: DiffEntry[] = [];\r\n    const seen = new Set<string>();\r\n\r\n    this.walkWorkTree(this.workDir, \"\", (relPath, content) => {\r\n      seen.add(relPath);\r\n      const currentHash = this.hashContent(\"blob\", content);\r\n      const indexHash = indexMap.get(relPath);\r\n      if (!indexHash) {\r\n        // untracked, handled separately\r\n      } else if (currentHash !== indexHash) {\r\n        result.push({ path: relPath, status: \"modified\", oldContent: this.getBlobContent(indexHash) ?? \"\", newContent: content });\r\n      }\r\n    });\r\n\r\n    for (const e of index) {\r\n      if (!seen.has(e.path)) {\r\n        result.push({ path: e.path, status: \"deleted\", oldContent: this.getBlobContent(e.hash) ?? \"\" });\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  diffIndexVsHEAD(): DiffEntry[] {\r\n    const index = this.readIndex();\r\n    const headHash = this.resolveHEAD();\r\n    const headTree = headHash ? this.getCommitTree(headHash) : new Map<string, string>();\r\n    const result: DiffEntry[] = [];\r\n\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n\r\n    for (const e of index) {\r\n      const headBlobHash = headTree.get(e.path);\r\n      if (!headBlobHash) {\r\n        result.push({ path: e.path, status: \"added\" });\r\n      } else if (headBlobHash !== e.hash) {\r\n        result.push({ path: e.path, status: \"modified\" });\r\n      }\r\n    }\r\n\r\n    for (const [path] of headTree) {\r\n      if (!indexMap.has(path)) {\r\n        result.push({ path, status: \"deleted\" });\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  getUntrackedFiles(): string[] {\r\n    const index = this.readIndex();\r\n    const indexPaths = new Set(index.map((e) => e.path));\r\n    const untracked: string[] = [];\r\n\r\n    this.walkWorkTree(this.workDir, \"\", (relPath) => {\r\n      if (!indexPaths.has(relPath)) untracked.push(relPath);\r\n    });\r\n\r\n    return untracked.sort();\r\n  }\r\n\r\n  /* -- file tree walker -- */\r\n\r\n  walkWorkTree(dir: string, prefix: string, cb: (relPath: string, content: string) => void): void {\r\n    let entries: string[];\r\n    try {\r\n      entries = this.vol.readdirSync(dir) as string[];\r\n    } catch {\r\n      return;\r\n    }\r\n    for (const name of entries) {\r\n      if (name === \".git\" || name === \"node_modules\") continue;\r\n      const fullPath = dir + \"/\" + name;\r\n      try {\r\n        const stat = this.vol.statSync(fullPath);\r\n        if (stat.isDirectory()) {\r\n          this.walkWorkTree(fullPath, prefix ? prefix + \"/\" + name : name, cb);\r\n        } else if (stat.isFile()) {\r\n          const relPath = prefix ? prefix + \"/\" + name : name;\r\n          const content = this.vol.readFileSync(fullPath, \"utf8\" as any) as string;\r\n          cb(relPath, content);\r\n        }\r\n      } catch { /* skip unreadable */ }\r\n    }\r\n  }\r\n\r\n  /* -- stash -- */\r\n\r\n  readStashList(): StashEntry[] {\r\n    try {\r\n      const raw = this.vol.readFileSync(this.gitDir + \"/refs/stash\", \"utf8\" as any) as string;\r\n      return JSON.parse(raw);\r\n    } catch {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  writeStashList(list: StashEntry[]): void {\r\n    const dir = this.gitDir + \"/refs\";\r\n    if (!this.vol.existsSync(dir)) this.vol.mkdirSync(dir, { recursive: true });\r\n    this.vol.writeFileSync(this.gitDir + \"/refs/stash\", JSON.stringify(list));\r\n  }\r\n\r\n  /* -- remote helpers -- */\r\n\r\n  getRemoteUrl(name: string): string | null {\r\n    return this.getConfigValue(`remote.${name}.url`);\r\n  }\r\n\r\n  parseGitHubUrl(url: string): { owner: string; repo: string } | null {\r\n    let m = url.match(/github\\.com\\/([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\r\n    if (m) return { owner: m[1], repo: m[2] };\r\n    m = url.match(/github\\.com:([^/]+)\\/([^/.]+?)(?:\\.git)?$/);\r\n    if (m) return { owner: m[1], repo: m[2] };\r\n    return null;\r\n  }\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  GitHub API helper                                                  */\r\n/* ------------------------------------------------------------------ */\r\n\r\nasync function githubApi(\r\n  path: string,\r\n  token: string,\r\n  method = \"GET\",\r\n  body?: any,\r\n): Promise<{ ok: boolean; status: number; data: any }> {\r\n  const url = `https://api.github.com${path}`;\r\n  const headers: Record<string, string> = {\r\n    Accept: \"application/vnd.github.v3+json\",\r\n    Authorization: `token ${token}`,\r\n    \"User-Agent\": \"nodepod-git\",\r\n  };\r\n  if (body) headers[\"Content-Type\"] = \"application/json\";\r\n\r\n  const resp = await proxiedFetch(url, {\r\n    method,\r\n    headers,\r\n    body: body ? JSON.stringify(body) : undefined,\r\n  });\r\n\r\n  let data: any;\r\n  try {\r\n    data = await resp.json();\r\n  } catch {\r\n    data = null;\r\n  }\r\n  return { ok: resp.ok, status: resp.status, data };\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Find .git directory                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction findGitDir(vol: MemoryVolume, cwd: string): { gitDir: string; workDir: string } | null {\r\n  let dir = cwd;\r\n  while (true) {\r\n    const gitPath = dir + \"/.git\";\r\n    try {\r\n      if (vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir };\r\n    } catch { /* */ }\r\n    const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\r\n    if (parent === dir) break;\r\n    dir = parent;\r\n  }\r\n  if (vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" };\r\n  return null;\r\n}\r\n\r\nfunction requireRepo(vol: MemoryVolume, cwd: string): { repo: GitRepo } | { error: ShellResult } {\r\n  const found = findGitDir(vol, cwd);\r\n  if (!found) {\r\n    return { error: fail(\"fatal: not a git repository (or any of the parent directories): .git\\n\", 128) };\r\n  }\r\n  return { repo: new GitRepo(vol, found.workDir, found.gitDir) };\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Subcommand handlers                                                */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction gitInit(args: string[], ctx: ShellContext): ShellResult {\r\n  let target = ctx.cwd;\r\n  for (const a of args) {\r\n    if (!a.startsWith(\"-\")) {\r\n      target = pathModule.resolve(ctx.cwd, a);\r\n      break;\r\n    }\r\n  }\r\n\r\n  const gitDir = target + \"/.git\";\r\n  if (ctx.volume.existsSync(gitDir)) {\r\n    return ok(`Reinitialized existing Git repository in ${gitDir}/\\n`);\r\n  }\r\n\r\n  const dirs = [\r\n    gitDir,\r\n    gitDir + \"/objects\",\r\n    gitDir + \"/refs\",\r\n    gitDir + \"/refs/heads\",\r\n    gitDir + \"/refs/tags\",\r\n  ];\r\n  for (const d of dirs) {\r\n    if (!ctx.volume.existsSync(d)) ctx.volume.mkdirSync(d, { recursive: true });\r\n  }\r\n\r\n  ctx.volume.writeFileSync(gitDir + \"/HEAD\", \"ref: refs/heads/main\\n\");\r\n  ctx.volume.writeFileSync(\r\n    gitDir + \"/config\",\r\n    \"[core]\\n\\tbare = false\\n\\tfilemode = false\\n[user]\\n\\tname = nodepod-user\\n\\temail = user@nodepod.dev\\n\",\r\n  );\r\n  ctx.volume.writeFileSync(gitDir + \"/objects/store.json\", \"{}\");\r\n  ctx.volume.writeFileSync(gitDir + \"/index\", '{\"entries\":[]}');\r\n\r\n  if (!ctx.volume.existsSync(target)) ctx.volume.mkdirSync(target, { recursive: true });\r\n\r\n  return ok(`Initialized empty Git repository in ${gitDir}/\\n`);\r\n}\r\n\r\nfunction gitAdd(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const addAll = args.includes(\"-A\") || args.includes(\"--all\") || args.includes(\".\");\r\n  const pathspecs = addAll ? [] : args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (!addAll && pathspecs.length === 0) {\r\n    return fail(\"Nothing specified, nothing added.\\n\");\r\n  }\r\n\r\n  if (addAll) {\r\n    repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n      repo.addToIndex(relPath, content);\r\n    });\r\n    const index = repo.readIndex();\r\n    const toRemove: string[] = [];\r\n    for (const e of index) {\r\n      const fullPath = repo.workDir + \"/\" + e.path;\r\n      if (!ctx.volume.existsSync(fullPath)) toRemove.push(e.path);\r\n    }\r\n    for (const p of toRemove) repo.removeFromIndex(p);\r\n  } else {\r\n    for (const spec of pathspecs) {\r\n      const absPath = pathModule.resolve(ctx.cwd, spec);\r\n      const relPath = pathModule.relative(repo.workDir, absPath);\r\n      if (relPath.startsWith(\"..\")) continue;\r\n\r\n      if (ctx.volume.existsSync(absPath)) {\r\n        try {\r\n          const stat = ctx.volume.statSync(absPath);\r\n          if (stat.isDirectory()) {\r\n            repo.walkWorkTree(absPath, relPath, (rp, content) => {\r\n              repo.addToIndex(rp, content);\r\n            });\r\n          } else {\r\n            const content = ctx.volume.readFileSync(absPath, \"utf8\" as any) as string;\r\n            repo.addToIndex(relPath, content);\r\n          }\r\n        } catch { /* skip */ }\r\n      } else {\r\n        repo.removeFromIndex(relPath);\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(\"\");\r\n}\r\n\r\nfunction gitStatus(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const short = args.includes(\"-s\") || args.includes(\"--short\");\r\n  const porcelain = args.includes(\"--porcelain\");\r\n\r\n  const staged = repo.diffIndexVsHEAD();\r\n  const unstaged = repo.diffWorkingVsIndex();\r\n  const untracked = repo.getUntrackedFiles();\r\n\r\n  if (short || porcelain) {\r\n    let out = \"\";\r\n    for (const d of staged) {\r\n      const code = d.status === \"added\" ? \"A\" : d.status === \"deleted\" ? \"D\" : \"M\";\r\n      out += `${code}  ${d.path}\\n`;\r\n    }\r\n    for (const d of unstaged) {\r\n      const code = d.status === \"deleted\" ? \"D\" : \"M\";\r\n      out += ` ${code} ${d.path}\\n`;\r\n    }\r\n    for (const p of untracked) {\r\n      out += `?? ${p}\\n`;\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  const branch = repo.getCurrentBranch() ?? \"(HEAD detached)\";\r\n  let out = `On branch ${branch}\\n`;\r\n\r\n  if (staged.length === 0 && unstaged.length === 0 && untracked.length === 0) {\r\n    out += \"nothing to commit, working tree clean\\n\";\r\n    return ok(out);\r\n  }\r\n\r\n  if (staged.length > 0) {\r\n    out += `\\nChanges to be committed:\\n`;\r\n    out += `  (use \"git restore --staged <file>...\" to unstage)\\n`;\r\n    for (const d of staged) {\r\n      const label = d.status === \"added\" ? \"new file\" : d.status === \"deleted\" ? \"deleted\" : \"modified\";\r\n      out += `\\t${GREEN}${label}:   ${d.path}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  if (unstaged.length > 0) {\r\n    out += `\\nChanges not staged for commit:\\n`;\r\n    out += `  (use \"git add <file>...\" to update what will be committed)\\n`;\r\n    for (const d of unstaged) {\r\n      const label = d.status === \"deleted\" ? \"deleted\" : \"modified\";\r\n      out += `\\t${RED}${label}:   ${d.path}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  if (untracked.length > 0) {\r\n    out += `\\nUntracked files:\\n`;\r\n    out += `  (use \"git add <file>...\" to include in what will be committed)\\n`;\r\n    for (const p of untracked) {\r\n      out += `\\t${RED}${p}${RESET}\\n`;\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitCommit(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  let message: string | null = null;\r\n  let autoStage = false;\r\n  let allowEmpty = false;\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-m\" || args[i] === \"--message\") {\r\n      message = args[++i] ?? \"\";\r\n    } else if (args[i] === \"-a\" || args[i] === \"--all\") {\r\n      autoStage = true;\r\n    } else if (args[i] === \"--allow-empty\") {\r\n      allowEmpty = true;\r\n    } else if (args[i] === \"--allow-empty-message\") {\r\n      /* */\r\n    } else if (args[i].startsWith(\"-m\")) {\r\n      message = args[i].slice(2);\r\n    }\r\n  }\r\n\r\n  if (message === null) {\r\n    return fail(\"error: switch `m' requires a value\\n\");\r\n  }\r\n\r\n  if (autoStage) {\r\n    const index = repo.readIndex();\r\n    for (const e of index) {\r\n      const fullPath = repo.workDir + \"/\" + e.path;\r\n      if (ctx.volume.existsSync(fullPath)) {\r\n        try {\r\n          const content = ctx.volume.readFileSync(fullPath, \"utf8\" as any) as string;\r\n          repo.addToIndex(e.path, content);\r\n        } catch { /* */ }\r\n      } else {\r\n        repo.removeFromIndex(e.path);\r\n      }\r\n    }\r\n  }\r\n\r\n  const entries = repo.readIndex();\r\n  const staged = repo.diffIndexVsHEAD();\r\n\r\n  if (staged.length === 0 && !allowEmpty) {\r\n    return fail(\"nothing to commit, working tree clean\\n\");\r\n  }\r\n\r\n  const treeHash = repo.buildTree(entries);\r\n  const parent = repo.resolveHEAD();\r\n  const commitHash = repo.createCommit(message, parent, treeHash);\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) {\r\n    repo.updateBranchRef(branch, commitHash);\r\n  } else {\r\n    repo.setHEAD(commitHash);\r\n  }\r\n\r\n  const shortHash = commitHash.slice(0, 7);\r\n  const branchLabel = branch ?? \"HEAD\";\r\n  const isRoot = !parent;\r\n  const out = `[${branchLabel}${isRoot ? \" (root-commit)\" : \"\"} ${shortHash}] ${message}\\n` +\r\n    ` ${staged.length} file${staged.length !== 1 ? \"s\" : \"\"} changed\\n`;\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitLog(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  let limit = 50;\r\n  let oneline = false;\r\n  let format: string | null = null;\r\n\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"--oneline\") {\r\n      oneline = true;\r\n    } else if (args[i] === \"-n\" || args[i] === \"--max-count\") {\r\n      limit = parseInt(args[++i], 10) || 50;\r\n    } else if (args[i].startsWith(\"-\") && /^-\\d+$/.test(args[i])) {\r\n      limit = parseInt(args[i].slice(1), 10) || 50;\r\n    } else if (args[i].startsWith(\"--format=\")) {\r\n      format = args[i].slice(9);\r\n    } else if (args[i].startsWith(\"--pretty=format:\")) {\r\n      format = args[i].slice(16);\r\n    } else if (args[i].startsWith(\"--pretty=\")) {\r\n      format = args[i].slice(9);\r\n    }\r\n  }\r\n\r\n  const head = repo.resolveHEAD();\r\n  if (!head) return ok(\"\");\r\n\r\n  const commits = repo.walkLog(head, limit);\r\n  if (commits.length === 0) return ok(\"\");\r\n\r\n  const currentBranch = repo.getCurrentBranch();\r\n  let out = \"\";\r\n\r\n  for (const c of commits) {\r\n    if (format !== null) {\r\n      let line = format\r\n        .replace(/%H/g, c.hash)\r\n        .replace(/%h/g, c.hash.slice(0, 7))\r\n        .replace(/%s/g, c.message.split(\"\\n\")[0])\r\n        .replace(/%an/g, c.author.split(\" <\")[0])\r\n        .replace(/%ae/g, (c.author.match(/<(.+?)>/) ?? [\"\", \"\"])[1])\r\n        .replace(/%d/g, c.hash === head && currentBranch ? ` (HEAD -> ${currentBranch})` : \"\")\r\n        .replace(/%n/g, \"\\n\");\r\n      out += line + \"\\n\";\r\n    } else if (oneline) {\r\n      const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\r\n      out += `${YELLOW}${c.hash.slice(0, 7)}${RESET}${decoration} ${c.message.split(\"\\n\")[0]}\\n`;\r\n    } else {\r\n      const decoration = c.hash === head && currentBranch ? ` ${YELLOW}(HEAD -> ${CYAN}${currentBranch}${YELLOW})${RESET}` : \"\";\r\n      out += `${YELLOW}commit ${c.hash}${RESET}${decoration}\\n`;\r\n      out += `Author: ${c.author}\\n`;\r\n      out += `Date:   ${new Date(c.timestamp).toUTCString()}\\n`;\r\n      out += `\\n    ${c.message}\\n\\n`;\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitDiff(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const staged = args.includes(\"--staged\") || args.includes(\"--cached\");\r\n  const stat = args.includes(\"--stat\");\r\n\r\n  let diffs: DiffEntry[];\r\n  if (staged) {\r\n    diffs = repo.diffIndexVsHEAD();\r\n    const headHash = repo.resolveHEAD();\r\n    const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\r\n    const index = repo.readIndex();\r\n    const indexMap = new Map(index.map((e) => [e.path, e.hash]));\r\n    for (const d of diffs) {\r\n      const oldHash = headTree.get(d.path);\r\n      const newHash = indexMap.get(d.path);\r\n      d.oldContent = oldHash ? repo.getBlobContent(oldHash) ?? \"\" : \"\";\r\n      d.newContent = newHash ? repo.getBlobContent(newHash) ?? \"\" : \"\";\r\n    }\r\n  } else {\r\n    diffs = repo.diffWorkingVsIndex();\r\n  }\r\n\r\n  if (diffs.length === 0) return ok(\"\");\r\n\r\n  if (stat) {\r\n    let out = \"\";\r\n    let totalIns = 0;\r\n    let totalDel = 0;\r\n    for (const d of diffs) {\r\n      const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\r\n      const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\r\n      const ops = myersDiff(oldLines, newLines);\r\n      const { insertions: ins, deletions: del } = countChanges(ops);\r\n      totalIns += ins;\r\n      totalDel += del;\r\n      out += ` ${d.path} | ${ins + del} ${GREEN}${\"+\"\r\n        .repeat(ins)}${RED}${\"-\".repeat(del)}${RESET}\\n`;\r\n    }\r\n    out += ` ${diffs.length} file${diffs.length !== 1 ? \"s\" : \"\"} changed`;\r\n    if (totalIns > 0) out += `, ${totalIns} insertion${totalIns !== 1 ? \"s\" : \"\"}(+)`;\r\n    if (totalDel > 0) out += `, ${totalDel} deletion${totalDel !== 1 ? \"s\" : \"\"}(-)`;\r\n    out += \"\\n\";\r\n    return ok(out);\r\n  }\r\n\r\n  let out = \"\";\r\n  for (const d of diffs) {\r\n    const oldLines = d.oldContent ? d.oldContent.split(\"\\n\") : [];\r\n    const newLines = d.newContent ? d.newContent.split(\"\\n\") : [];\r\n\r\n    out += `${BOLD}diff --git a/${d.path} b/${d.path}${RESET}\\n`;\r\n    if (d.status === \"added\") out += \"new file mode 100644\\n\";\r\n    if (d.status === \"deleted\") out += \"deleted file mode 100644\\n\";\r\n    out += `--- ${d.status === \"added\" ? \"/dev/null\" : \"a/\" + d.path}\\n`;\r\n    out += `+++ ${d.status === \"deleted\" ? \"/dev/null\" : \"b/\" + d.path}\\n`;\r\n\r\n    const ops = myersDiff(oldLines, newLines);\r\n    const hunks = buildHunks(ops, 3);\r\n\r\n    for (const hunk of hunks) {\r\n      out += `${CYAN}@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@${RESET}\\n`;\r\n      for (const op of hunk.lines) {\r\n        if (op.kind === \"equal\") {\r\n          out += ` ${op.line}\\n`;\r\n        } else if (op.kind === \"delete\") {\r\n          out += `${RED}-${op.line}${RESET}\\n`;\r\n        } else {\r\n          out += `${GREEN}+${op.line}${RESET}\\n`;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\nfunction gitBranch(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  if (args.includes(\"--show-current\")) {\r\n    const branch = repo.getCurrentBranch();\r\n    return ok(branch ? branch + \"\\n\" : \"\\n\");\r\n  }\r\n\r\n  const deleteIdx = args.indexOf(\"-d\") !== -1 ? args.indexOf(\"-d\") : args.indexOf(\"-D\");\r\n  if (deleteIdx >= 0) {\r\n    const name = args[deleteIdx + 1];\r\n    if (!name) return fail(\"error: branch name required\\n\");\r\n    if (name === repo.getCurrentBranch()) {\r\n      return fail(`error: Cannot delete branch '${name}' checked out.\\n`);\r\n    }\r\n    if (repo.deleteBranch(name)) {\r\n      return ok(`Deleted branch ${name}.\\n`);\r\n    }\r\n    return fail(`error: branch '${name}' not found.\\n`);\r\n  }\r\n\r\n  const renameIdx = args.indexOf(\"-m\");\r\n  if (renameIdx >= 0) {\r\n    const oldName = args[renameIdx + 1];\r\n    const newName = args[renameIdx + 2];\r\n    if (!oldName || !newName) return fail(\"error: too few arguments to rename\\n\");\r\n    const hash = repo.resolveRef(oldName);\r\n    if (!hash) return fail(`error: refname ${oldName} not a valid ref\\n`);\r\n    repo.updateBranchRef(newName, hash);\r\n    repo.deleteBranch(oldName);\r\n    if (repo.getCurrentBranch() === oldName) {\r\n      repo.setHEAD(\"ref: refs/heads/\" + newName);\r\n    }\r\n    return ok(`Branch '${oldName}' renamed to '${newName}'.\\n`);\r\n  }\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (nonFlags.length > 0) {\r\n    const name = nonFlags[0];\r\n    const startPoint = nonFlags[1];\r\n    const hash = startPoint ? repo.resolveRef(startPoint) : repo.resolveHEAD();\r\n    if (!hash) return fail(`fatal: not a valid object name: '${startPoint ?? \"HEAD\"}'\\n`, 128);\r\n    repo.updateBranchRef(name, hash);\r\n    return ok(\"\");\r\n  }\r\n\r\n  const branches = repo.listBranches();\r\n  const current = repo.getCurrentBranch();\r\n  let out = \"\";\r\n  for (const b of branches.sort()) {\r\n    if (b === current) {\r\n      out += `* ${GREEN}${b}${RESET}\\n`;\r\n    } else {\r\n      out += `  ${b}\\n`;\r\n    }\r\n  }\r\n  return ok(out);\r\n}\r\n\r\nfunction gitCheckout(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const createNew = args.includes(\"-b\");\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (nonFlags.length === 0) return fail(\"error: you must specify a branch to checkout\\n\");\r\n\r\n  let target: string;\r\n  let newBranchName: string | null = null;\r\n\r\n  if (createNew) {\r\n    const bIdx = args.indexOf(\"-b\");\r\n    newBranchName = args[bIdx + 1];\r\n    if (!newBranchName) return fail(\"error: switch 'b' requires a value\\n\");\r\n    target = args[bIdx + 2] ?? repo.getCurrentBranch() ?? \"HEAD\";\r\n  } else {\r\n    target = nonFlags[0];\r\n  }\r\n\r\n  let commitHash = repo.resolveRef(target);\r\n\r\n  if (createNew) {\r\n    if (!commitHash) commitHash = repo.resolveHEAD();\r\n    if (!commitHash) return fail(`fatal: not a valid object name: '${target}'\\n`, 128);\r\n    repo.updateBranchRef(newBranchName!, commitHash);\r\n    repo.setHEAD(\"ref: refs/heads/\" + newBranchName!);\r\n    return ok(`Switched to a new branch '${newBranchName}'\\n`);\r\n  }\r\n\r\n  const branches = repo.listBranches();\r\n  const isBranch = branches.includes(target);\r\n\r\n  if (!commitHash) {\r\n    return fail(`error: pathspec '${target}' did not match any file(s) known to git.\\n`);\r\n  }\r\n\r\n  const currentHead = repo.resolveHEAD();\r\n  if (commitHash !== currentHead) {\r\n    const targetTree = repo.getCommitTree(commitHash);\r\n    const currentTree = currentHead ? repo.getCommitTree(currentHead) : new Map<string, string>();\r\n\r\n    for (const [path, blobHash] of targetTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) {\r\n          ctx.volume.mkdirSync(dir, { recursive: true });\r\n        }\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    for (const [path] of currentTree) {\r\n      if (!targetTree.has(path)) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        try {\r\n          ctx.volume.unlinkSync(fullPath);\r\n        } catch { /* */ }\r\n      }\r\n    }\r\n\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of targetTree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    newIndex.sort((a, b) => a.path.localeCompare(b.path));\r\n    repo.writeIndex(newIndex);\r\n  }\r\n\r\n  if (isBranch) {\r\n    repo.setHEAD(\"ref: refs/heads/\" + target);\r\n    return ok(`Switched to branch '${target}'\\n`);\r\n  } else {\r\n    repo.setHEAD(commitHash);\r\n    return ok(`HEAD is now at ${commitHash.slice(0, 7)}\\n`);\r\n  }\r\n}\r\n\r\nfunction gitSwitch(args: string[], ctx: ShellContext): ShellResult {\r\n  const newArgs: string[] = [];\r\n  for (let i = 0; i < args.length; i++) {\r\n    if (args[i] === \"-c\" || args[i] === \"--create\") {\r\n      newArgs.push(\"-b\");\r\n    } else {\r\n      newArgs.push(args[i]);\r\n    }\r\n  }\r\n  return gitCheckout(newArgs, ctx);\r\n}\r\n\r\nfunction gitRevParse(args: string[], ctx: ShellContext): ShellResult {\r\n  const found = findGitDir(ctx.volume, ctx.cwd);\r\n\r\n  for (const arg of args) {\r\n    switch (arg) {\r\n      case \"--show-toplevel\":\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        return ok(found.workDir + \"\\n\");\r\n      case \"--is-inside-work-tree\":\r\n        return ok(found ? \"true\\n\" : \"false\\n\");\r\n      case \"--git-dir\":\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        return ok(\".git\\n\");\r\n      case \"--is-bare-repository\":\r\n        return ok(\"false\\n\");\r\n      case \"--abbrev-ref\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (refArg === \"HEAD\" && found) {\r\n          const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n          const branch = repo.getCurrentBranch();\r\n          return ok((branch ?? \"HEAD\") + \"\\n\");\r\n        }\r\n        return ok(\"HEAD\\n\");\r\n      }\r\n      case \"--short\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (refArg === \"HEAD\" && found) {\r\n          const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n          const hash = repo.resolveHEAD();\r\n          return ok(hash ? hash.slice(0, 7) + \"\\n\" : \"\\n\");\r\n        }\r\n        return ok(\"\\n\");\r\n      }\r\n      case \"--verify\": {\r\n        const refArg = args[args.indexOf(arg) + 1];\r\n        if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n        const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n        if (refArg === \"HEAD\") {\r\n          const hash = repo.resolveHEAD();\r\n          if (hash) return ok(hash + \"\\n\");\r\n          return fail(\"fatal: Needed a single revision\\n\", 128);\r\n        }\r\n        const resolved = repo.resolveRef(refArg ?? \"\");\r\n        if (resolved) return ok(resolved + \"\\n\");\r\n        return fail(`fatal: Needed a single revision\\n`, 128);\r\n      }\r\n      default:\r\n        break;\r\n    }\r\n  }\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (nonFlags.length > 0 && found) {\r\n    const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n    for (const ref of nonFlags) {\r\n      if (ref === \"HEAD\") {\r\n        const hash = repo.resolveHEAD();\r\n        if (hash) return ok(hash + \"\\n\");\r\n      } else {\r\n        const hash = repo.resolveRef(ref);\r\n        if (hash) return ok(hash + \"\\n\");\r\n      }\r\n    }\r\n  }\r\n\r\n  return ok(\"\\n\");\r\n}\r\n\r\nfunction gitConfig(args: string[], ctx: ShellContext): ShellResult {\r\n  const found = findGitDir(ctx.volume, ctx.cwd);\r\n\r\n  if (args.includes(\"--list\") || args.includes(\"-l\")) {\r\n    if (!found) return fail(\"fatal: not a git repository\\n\", 128);\r\n    const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n    const config = repo.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    let section = \"\";\r\n    let subSection = \"\";\r\n    let out = \"\";\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      const secMatch = trimmed.match(/^\\[(\\w+)\\s*(?:\"([^\"]*)\")?\\]$/);\r\n      if (secMatch) {\r\n        section = secMatch[1];\r\n        subSection = secMatch[2] ?? \"\";\r\n        continue;\r\n      }\r\n      const kvMatch = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n      if (kvMatch && section) {\r\n        const key = subSection\r\n          ? `${section}.${subSection}.${kvMatch[1]}`\r\n          : `${section}.${kvMatch[1]}`;\r\n        out += `${key}=${kvMatch[2].trim()}\\n`;\r\n      }\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  // no distinction between --global/--local in nodepod\r\n  const filtered = args.filter((a) => a !== \"--global\" && a !== \"--local\" && a !== \"--get\");\r\n\r\n  if (filtered.length === 0) return fail(\"error: key required\\n\");\r\n\r\n  const key = filtered[0];\r\n  const value = filtered[1];\r\n\r\n  if (!found) {\r\n    if (value !== undefined) return fail(\"fatal: not a git repository\\n\", 128);\r\n    return ok(\"\\n\");\r\n  }\r\n\r\n  const repo = new GitRepo(ctx.volume, found.workDir, found.gitDir);\r\n\r\n  if (value !== undefined) {\r\n    repo.setConfigValue(key, value);\r\n    return ok(\"\");\r\n  }\r\n\r\n  const val = repo.getConfigValue(key);\r\n  if (val !== null) return ok(val + \"\\n\");\r\n  return fail(\"\");\r\n}\r\n\r\nfunction gitRemote(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const sub = args[0];\r\n\r\n  if (sub === \"add\") {\r\n    const name = args[1];\r\n    const url = args[2];\r\n    if (!name || !url) return fail(\"usage: git remote add <name> <url>\\n\");\r\n    repo.setConfigValue(`remote.${name}.url`, url);\r\n    repo.setConfigValue(`remote.${name}.fetch`, `+refs/heads/*:refs/remotes/${name}/*`);\r\n    return ok(\"\");\r\n  }\r\n\r\n  if (sub === \"remove\" || sub === \"rm\") {\r\n    const name = args[1];\r\n    if (!name) return fail(\"usage: git remote remove <name>\\n\");\r\n    const config = repo.readConfig();\r\n    const lines = config.split(\"\\n\");\r\n    const out: string[] = [];\r\n    let skip = false;\r\n    for (const line of lines) {\r\n      if (line.trim() === `[remote \"${name}\"]`) {\r\n        skip = true;\r\n        continue;\r\n      }\r\n      if (line.trim().startsWith(\"[\") && skip) skip = false;\r\n      if (!skip) out.push(line);\r\n    }\r\n    repo.writeConfig(out.join(\"\\n\"));\r\n    return ok(\"\");\r\n  }\r\n\r\n  if (sub === \"get-url\") {\r\n    const name = args[1] ?? \"origin\";\r\n    const url = repo.getRemoteUrl(name);\r\n    if (url) return ok(url + \"\\n\");\r\n    return fail(`fatal: No such remote '${name}'\\n`, 2);\r\n  }\r\n\r\n  const verbose = args.includes(\"-v\") || args.includes(\"--verbose\");\r\n  const config = repo.readConfig();\r\n  const remotes: Array<{ name: string; url: string }> = [];\r\n  const lines = config.split(\"\\n\");\r\n  let currentRemote = \"\";\r\n  for (const line of lines) {\r\n    const match = line.trim().match(/^\\[remote\\s+\"([^\"]+)\"\\]$/);\r\n    if (match) {\r\n      currentRemote = match[1];\r\n      continue;\r\n    }\r\n    if (currentRemote) {\r\n      const kvMatch = line.trim().match(/^url\\s*=\\s*(.+)$/);\r\n      if (kvMatch) {\r\n        remotes.push({ name: currentRemote, url: kvMatch[1].trim() });\r\n        currentRemote = \"\";\r\n      }\r\n    }\r\n  }\r\n\r\n  let out = \"\";\r\n  for (const r of remotes) {\r\n    if (verbose) {\r\n      out += `${r.name}\\t${r.url} (fetch)\\n`;\r\n      out += `${r.name}\\t${r.url} (push)\\n`;\r\n    } else {\r\n      out += r.name + \"\\n\";\r\n    }\r\n  }\r\n  return ok(out);\r\n}\r\n\r\nfunction gitMerge(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  if (args.includes(\"--abort\")) {\r\n    try {\r\n      ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_HEAD\");\r\n      ctx.volume.unlinkSync(repo.gitDir + \"/MERGE_MSG\");\r\n    } catch { /* */ }\r\n    return ok(\"Merge aborted.\\n\");\r\n  }\r\n\r\n  const target = args.filter((a) => !a.startsWith(\"-\"))[0];\r\n  if (!target) return fail(\"error: specify a branch to merge\\n\");\r\n\r\n  const targetHash = repo.resolveRef(target);\r\n  if (!targetHash) return fail(`merge: ${target} - not something we can merge\\n`);\r\n\r\n  const currentHash = repo.resolveHEAD();\r\n  if (!currentHash) {\r\n    const branch = repo.getCurrentBranch();\r\n    if (branch) repo.updateBranchRef(branch, targetHash);\r\n    return ok(`Fast-forward\\n`);\r\n  }\r\n\r\n  if (currentHash === targetHash) {\r\n    return ok(\"Already up to date.\\n\");\r\n  }\r\n\r\n  // check for fast-forward\r\n  let walker: string | null = targetHash;\r\n  let isFF = false;\r\n  for (let i = 0; i < 1000; i++) {\r\n    if (walker === currentHash) { isFF = true; break; }\r\n    const commit = repo.readCommit(walker!);\r\n    if (!commit || !commit.parent) break;\r\n    walker = commit.parent;\r\n  }\r\n\r\n  if (isFF) {\r\n    const branch = repo.getCurrentBranch();\r\n    if (branch) repo.updateBranchRef(branch, targetHash);\r\n    else repo.setHEAD(targetHash);\r\n\r\n    const targetTree = repo.getCommitTree(targetHash);\r\n    for (const [path, blobHash] of targetTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of targetTree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    repo.writeIndex(newIndex);\r\n\r\n    return ok(`Updating ${currentHash.slice(0, 7)}..${targetHash.slice(0, 7)}\\nFast-forward\\n`);\r\n  }\r\n\r\n  const entries = repo.readIndex();\r\n  const treeHash = repo.buildTree(entries);\r\n  const mergeMessage = `Merge branch '${target}'`;\r\n  const mergeHash = repo.createCommit(mergeMessage, currentHash, treeHash, targetHash);\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) repo.updateBranchRef(branch, mergeHash);\r\n  else repo.setHEAD(mergeHash);\r\n\r\n  return ok(`Merge made by the 'recursive' strategy.\\n`);\r\n}\r\n\r\nfunction gitStash(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const sub = args[0] ?? \"push\";\r\n\r\n  if (sub === \"list\") {\r\n    const list = repo.readStashList();\r\n    let out = \"\";\r\n    for (let i = 0; i < list.length; i++) {\r\n      out += `stash@{${i}}: ${list[i].message}\\n`;\r\n    }\r\n    return ok(out);\r\n  }\r\n\r\n  if (sub === \"push\" || sub === \"save\" || !args[0]) {\r\n    const message = args.find((a) => !a.startsWith(\"-\")) && args[0] !== \"push\" && args[0] !== \"save\"\r\n      ? args.join(\" \")\r\n      : \"WIP on \" + (repo.getCurrentBranch() ?? \"HEAD\");\r\n\r\n    const unstaged = repo.diffWorkingVsIndex();\r\n    const staged = repo.diffIndexVsHEAD();\r\n    if (unstaged.length === 0 && staged.length === 0) {\r\n      return ok(\"No local changes to save\\n\");\r\n    }\r\n\r\n    const entries = repo.readIndex();\r\n    repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n      repo.addToIndex(relPath, content);\r\n    });\r\n    const allEntries = repo.readIndex();\r\n    const treeHash = repo.buildTree(allEntries);\r\n    const parent = repo.resolveHEAD();\r\n    const stashHash = repo.createCommit(\"stash: \" + message, parent, treeHash);\r\n\r\n    repo.writeIndex(entries);\r\n\r\n    const headHash = repo.resolveHEAD();\r\n    if (headHash) {\r\n      const headTree = repo.getCommitTree(headHash);\r\n      for (const [path, blobHash] of headTree) {\r\n        const content = repo.getBlobContent(blobHash);\r\n        if (content !== null) {\r\n          const fullPath = repo.workDir + \"/\" + path;\r\n          const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n          if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n          ctx.volume.writeFileSync(fullPath, content);\r\n        }\r\n      }\r\n    }\r\n\r\n    const list = repo.readStashList();\r\n    list.unshift({ message, commitHash: stashHash });\r\n    repo.writeStashList(list);\r\n\r\n    return ok(`Saved working directory and index state ${message}\\n`);\r\n  }\r\n\r\n  if (sub === \"pop\" || sub === \"apply\") {\r\n    const idxArg = args[1] ? parseInt(args[1], 10) : 0;\r\n    const list = repo.readStashList();\r\n    if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\r\n\r\n    const entry = list[idxArg];\r\n    const stashTree = repo.getCommitTree(entry.commitHash);\r\n\r\n    for (const [path, blobHash] of stashTree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n\r\n    if (sub === \"pop\") {\r\n      list.splice(idxArg, 1);\r\n      repo.writeStashList(list);\r\n    }\r\n\r\n    return ok(`Applied stash@{${idxArg}}\\n`);\r\n  }\r\n\r\n  if (sub === \"drop\") {\r\n    const idxArg = args[1] ? parseInt(args[1], 10) : 0;\r\n    const list = repo.readStashList();\r\n    if (idxArg >= list.length) return fail(`error: stash@{${idxArg}} does not exist\\n`);\r\n    list.splice(idxArg, 1);\r\n    repo.writeStashList(list);\r\n    return ok(`Dropped stash@{${idxArg}}\\n`);\r\n  }\r\n\r\n  return fail(`error: unknown stash subcommand '${sub}'\\n`);\r\n}\r\n\r\nfunction gitRm(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const cached = args.includes(\"--cached\");\r\n  const paths = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (paths.length === 0) return fail(\"usage: git rm [--cached] <file>...\\n\");\r\n\r\n  for (const p of paths) {\r\n    const absPath = pathModule.resolve(ctx.cwd, p);\r\n    const relPath = pathModule.relative(repo.workDir, absPath);\r\n    repo.removeFromIndex(relPath);\r\n    if (!cached) {\r\n      try { ctx.volume.unlinkSync(absPath); } catch { /* */ }\r\n    }\r\n  }\r\n\r\n  return ok(\"\");\r\n}\r\n\r\nfunction gitReset(args: string[], ctx: ShellContext): ShellResult {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const hard = args.includes(\"--hard\");\r\n  const soft = args.includes(\"--soft\");\r\n  const paths = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  if (paths.length > 0 && !hard && !soft) {\r\n    const headHash = repo.resolveHEAD();\r\n    const headTree = headHash ? repo.getCommitTree(headHash) : new Map<string, string>();\r\n\r\n    for (const p of paths) {\r\n      const absPath = pathModule.resolve(ctx.cwd, p);\r\n      const relPath = pathModule.relative(repo.workDir, absPath);\r\n      const headBlobHash = headTree.get(relPath);\r\n      if (headBlobHash) {\r\n        const entries = repo.readIndex();\r\n        const idx = entries.findIndex((e) => e.path === relPath);\r\n        if (idx >= 0) {\r\n          entries[idx].hash = headBlobHash;\r\n          repo.writeIndex(entries);\r\n        }\r\n      } else {\r\n        repo.removeFromIndex(relPath);\r\n      }\r\n    }\r\n    return ok(\"\");\r\n  }\r\n\r\n  const targetRef = paths[0] ?? \"HEAD\";\r\n  const targetHash = repo.resolveRef(targetRef) ?? repo.resolveHEAD();\r\n  if (!targetHash) return fail(\"fatal: Failed to resolve HEAD\\n\", 128);\r\n\r\n  if (!soft) {\r\n    const tree = repo.getCommitTree(targetHash);\r\n    const newIndex: IndexEntry[] = [];\r\n    for (const [path, blobHash] of tree) {\r\n      newIndex.push({ path, hash: blobHash, mode: 100644, mtime: Date.now() });\r\n    }\r\n    newIndex.sort((a, b) => a.path.localeCompare(b.path));\r\n    repo.writeIndex(newIndex);\r\n  }\r\n\r\n  if (hard) {\r\n    const tree = repo.getCommitTree(targetHash);\r\n    for (const [path, blobHash] of tree) {\r\n      const content = repo.getBlobContent(blobHash);\r\n      if (content !== null) {\r\n        const fullPath = repo.workDir + \"/\" + path;\r\n        const dir = fullPath.substring(0, fullPath.lastIndexOf(\"/\"));\r\n        if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n        ctx.volume.writeFileSync(fullPath, content);\r\n      }\r\n    }\r\n  }\r\n\r\n  const branch = repo.getCurrentBranch();\r\n  if (branch) repo.updateBranchRef(branch, targetHash);\r\n\r\n  return ok(`HEAD is now at ${targetHash.slice(0, 7)}\\n`);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Remote commands (GitHub API)                                       */\r\n/* ------------------------------------------------------------------ */\r\n\r\nfunction requireToken(env: Record<string, string>): string | null {\r\n  return env.GITHUB_TOKEN || env.GH_TOKEN || null;\r\n}\r\n\r\nasync function gitClone(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const url = nonFlags[0];\r\n  if (!url) return fail(\"usage: git clone <repository> [<directory>]\\n\");\r\n\r\n  let branch = \"main\";\r\n  const bIdx = args.indexOf(\"-b\");\r\n  if (bIdx >= 0 && args[bIdx + 1]) branch = args[bIdx + 1];\r\n\r\n  const tmpRepo = new GitRepo(ctx.volume, \"/\", \"/\");\r\n  const gh = tmpRepo.parseGitHubUrl(url);\r\n  if (!gh) {\r\n    return fail(`fatal: repository '${url}' is not a GitHub URL\\n`, 128);\r\n  }\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) {\r\n    return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n  }\r\n\r\n  let targetDir = nonFlags[1] ?? gh.repo;\r\n  if (!targetDir.startsWith(\"/\")) targetDir = pathModule.resolve(ctx.cwd, targetDir);\r\n\r\n  const repoInfo = await githubApi(`/repos/${gh.owner}/${gh.repo}`, token);\r\n  if (!repoInfo.ok) {\r\n    if (repoInfo.status === 404) return fail(`fatal: repository '${url}' not found\\n`, 128);\r\n    return fail(`fatal: GitHub API error: ${repoInfo.status} ${repoInfo.data?.message ?? \"\"}\\n`, 128);\r\n  }\r\n  const defaultBranch = repoInfo.data.default_branch ?? \"main\";\r\n  if (branch === \"main\" && defaultBranch !== \"main\") branch = defaultBranch;\r\n\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${branch}`, token);\r\n  if (!refResp.ok) {\r\n    return fail(`fatal: Remote branch '${branch}' not found\\n`, 128);\r\n  }\r\n  const commitSha = refResp.data.object.sha;\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${commitSha}`, token);\r\n  if (!commitResp.ok) return fail(`fatal: could not fetch commit\\n`, 128);\r\n  const treeSha = commitResp.data.tree.sha;\r\n\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\r\n  if (!treeResp.ok) return fail(`fatal: could not fetch tree\\n`, 128);\r\n\r\n  if (!ctx.volume.existsSync(targetDir)) ctx.volume.mkdirSync(targetDir, { recursive: true });\r\n\r\n  let fileCount = 0;\r\n  const blobs: Array<{ path: string; sha: string }> = [];\r\n  for (const item of treeResp.data.tree) {\r\n    if (item.type === \"blob\") {\r\n      blobs.push({ path: item.path, sha: item.sha });\r\n    }\r\n  }\r\n\r\n  const BATCH_SIZE = 10;\r\n  for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\r\n    const batch = blobs.slice(i, i + BATCH_SIZE);\r\n    const results = await Promise.all(\r\n      batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\r\n    );\r\n    for (let j = 0; j < batch.length; j++) {\r\n      const blobResp = results[j];\r\n      if (!blobResp.ok) continue;\r\n      const filePath = targetDir + \"/\" + batch[j].path;\r\n      const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\r\n      if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n      let content: string;\r\n      if (blobResp.data.encoding === \"base64\") {\r\n        content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\r\n      } else {\r\n        content = blobResp.data.content;\r\n      }\r\n      ctx.volume.writeFileSync(filePath, content);\r\n      fileCount++;\r\n    }\r\n  }\r\n\r\n  const initResult = gitInit([], { ...ctx, cwd: targetDir });\r\n\r\n  const clonedRepo = new GitRepo(ctx.volume, targetDir, targetDir + \"/.git\");\r\n  clonedRepo.setConfigValue(\"remote.origin.url\", url);\r\n  clonedRepo.setConfigValue(\"remote.origin.fetch\", \"+refs/heads/*:refs/remotes/origin/*\");\r\n  clonedRepo.setConfigValue(\"branch.\" + branch + \".remote\", \"origin\");\r\n  clonedRepo.setConfigValue(\"branch.\" + branch + \".merge\", \"refs/heads/\" + branch);\r\n\r\n  clonedRepo.setHEAD(\"ref: refs/heads/\" + branch);\r\n\r\n  clonedRepo.walkWorkTree(targetDir, \"\", (relPath, content) => {\r\n    clonedRepo.addToIndex(relPath, content);\r\n  });\r\n  const entries = clonedRepo.readIndex();\r\n  const treeHash = clonedRepo.buildTree(entries);\r\n  const cloneCommitHash = clonedRepo.createCommit(`Clone of ${url}`, null, treeHash);\r\n  clonedRepo.updateBranchRef(branch, cloneCommitHash);\r\n\r\n  return ok(`Cloning into '${nonFlags[1] ?? gh.repo}'...\\nremote: Enumerating objects: ${fileCount}\\nReceiving objects: 100% (${fileCount}/${fileCount}), done.\\n`);\r\n}\r\n\r\nasync function gitPush(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n  const localBranch = repo.getCurrentBranch();\r\n  if (!localBranch) return fail(\"fatal: not on a branch\\n\", 128);\r\n  const remoteBranch = nonFlags[1] ?? localBranch;\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const headHash = repo.resolveHEAD();\r\n  if (!headHash) return fail(\"fatal: nothing to push\\n\", 128);\r\n\r\n  const commitTree = repo.getCommitTree(headHash);\r\n  const blobShas: Map<string, string> = new Map();\r\n\r\n  for (const [path, localHash] of commitTree) {\r\n    const content = repo.getBlobContent(localHash);\r\n    if (content === null) continue;\r\n    const blobResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs`, token, \"POST\", {\r\n      content: btoa(content),\r\n      encoding: \"base64\",\r\n    });\r\n    if (!blobResp.ok) return fail(`fatal: failed to create blob for ${path}: ${blobResp.data?.message}\\n`, 128);\r\n    blobShas.set(path, blobResp.data.sha);\r\n  }\r\n\r\n  const treeEntries = Array.from(blobShas).map(([path, sha]) => ({\r\n    path,\r\n    mode: \"100644\",\r\n    type: \"blob\",\r\n    sha,\r\n  }));\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees`, token, \"POST\", {\r\n    tree: treeEntries,\r\n  });\r\n  if (!treeResp.ok) return fail(`fatal: failed to create tree: ${treeResp.data?.message}\\n`, 128);\r\n\r\n  let parentSha: string | null = null;\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\r\n  if (refResp.ok) parentSha = refResp.data.object.sha;\r\n\r\n  const commit = repo.readCommit(headHash);\r\n  const commitBody: any = {\r\n    message: commit?.message ?? \"Push from nodepod\",\r\n    tree: treeResp.data.sha,\r\n  };\r\n  if (parentSha) commitBody.parents = [parentSha];\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits`, token, \"POST\", commitBody);\r\n  if (!commitResp.ok) return fail(`fatal: failed to create commit: ${commitResp.data?.message}\\n`, 128);\r\n\r\n  if (parentSha) {\r\n    const force = args.includes(\"-f\") || args.includes(\"--force\");\r\n    const updateResp = await githubApi(\r\n      `/repos/${gh.owner}/${gh.repo}/git/refs/heads/${remoteBranch}`,\r\n      token,\r\n      \"PATCH\",\r\n      { sha: commitResp.data.sha, force },\r\n    );\r\n    if (!updateResp.ok) return fail(`fatal: failed to update ref: ${updateResp.data?.message}\\n`, 128);\r\n  } else {\r\n    const createResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/refs`, token, \"POST\", {\r\n      ref: `refs/heads/${remoteBranch}`,\r\n      sha: commitResp.data.sha,\r\n    });\r\n    if (!createResp.ok) return fail(`fatal: failed to create ref: ${createResp.data?.message}\\n`, 128);\r\n  }\r\n\r\n  return ok(`To ${remoteUrl}\\n   ${(parentSha ?? \"000000\").slice(0, 7)}..${commitResp.data.sha.slice(0, 7)}  ${localBranch} -> ${remoteBranch}\\n`);\r\n}\r\n\r\nasync function gitPull(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n  const currentBranch = repo.getCurrentBranch();\r\n  if (!currentBranch) return fail(\"fatal: not on a branch\\n\", 128);\r\n  const remoteBranch = nonFlags[1] ?? currentBranch;\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const refResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/ref/heads/${remoteBranch}`, token);\r\n  if (!refResp.ok) return fail(`fatal: couldn't find remote ref refs/heads/${remoteBranch}\\n`, 128);\r\n  const remoteCommitSha = refResp.data.object.sha;\r\n\r\n  const localHead = repo.resolveHEAD();\r\n  if (localHead === remoteCommitSha) return ok(\"Already up to date.\\n\");\r\n\r\n  const commitResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/commits/${remoteCommitSha}`, token);\r\n  if (!commitResp.ok) return fail(\"fatal: could not fetch remote commit\\n\", 128);\r\n  const treeSha = commitResp.data.tree.sha;\r\n\r\n  const treeResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/git/trees/${treeSha}?recursive=1`, token);\r\n  if (!treeResp.ok) return fail(\"fatal: could not fetch tree\\n\", 128);\r\n\r\n  let updated = 0;\r\n  const blobs: Array<{ path: string; sha: string }> = [];\r\n  for (const item of treeResp.data.tree) {\r\n    if (item.type === \"blob\") blobs.push({ path: item.path, sha: item.sha });\r\n  }\r\n\r\n  const BATCH_SIZE = 10;\r\n  for (let i = 0; i < blobs.length; i += BATCH_SIZE) {\r\n    const batch = blobs.slice(i, i + BATCH_SIZE);\r\n    const results = await Promise.all(\r\n      batch.map((b) => githubApi(`/repos/${gh.owner}/${gh.repo}/git/blobs/${b.sha}`, token)),\r\n    );\r\n    for (let j = 0; j < batch.length; j++) {\r\n      const blobResp = results[j];\r\n      if (!blobResp.ok) continue;\r\n      const filePath = repo.workDir + \"/\" + batch[j].path;\r\n      const dir = filePath.substring(0, filePath.lastIndexOf(\"/\"));\r\n      if (dir && !ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n      let content: string;\r\n      if (blobResp.data.encoding === \"base64\") {\r\n        content = atob(blobResp.data.content.replace(/\\n/g, \"\"));\r\n      } else {\r\n        content = blobResp.data.content;\r\n      }\r\n      ctx.volume.writeFileSync(filePath, content);\r\n      updated++;\r\n    }\r\n  }\r\n\r\n  repo.walkWorkTree(repo.workDir, \"\", (relPath, content) => {\r\n    repo.addToIndex(relPath, content);\r\n  });\r\n  const entries = repo.readIndex();\r\n  const treeHash = repo.buildTree(entries);\r\n  const pullCommit = repo.createCommit(`Pull from ${remoteName}/${remoteBranch}`, localHead, treeHash);\r\n  repo.updateBranchRef(currentBranch, pullCommit);\r\n\r\n  return ok(`From ${remoteUrl}\\nUpdating ${(localHead ?? \"000000\").slice(0, 7)}..${remoteCommitSha.slice(0, 7)}\\nFast-forward\\n ${updated} file${updated !== 1 ? \"s\" : \"\"} changed\\n`);\r\n}\r\n\r\nasync function gitFetch(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n  const r = requireRepo(ctx.volume, ctx.cwd);\r\n  if (\"error\" in r) return r.error;\r\n  const { repo } = r;\r\n\r\n  const token = requireToken(ctx.env);\r\n  if (!token) return fail(\"fatal: authentication required. Set GITHUB_TOKEN environment variable.\\n\", 128);\r\n\r\n  const nonFlags = args.filter((a) => !a.startsWith(\"-\"));\r\n  const remoteName = nonFlags[0] ?? \"origin\";\r\n\r\n  const remoteUrl = repo.getRemoteUrl(remoteName);\r\n  if (!remoteUrl) return fail(`fatal: '${remoteName}' does not appear to be a git repository\\n`, 128);\r\n\r\n  const gh = repo.parseGitHubUrl(remoteUrl);\r\n  if (!gh) return fail(`fatal: remote '${remoteName}' is not a GitHub URL\\n`, 128);\r\n\r\n  const branchesResp = await githubApi(`/repos/${gh.owner}/${gh.repo}/branches`, token);\r\n  if (!branchesResp.ok) return fail(`fatal: could not list remote branches\\n`, 128);\r\n\r\n  let out = `From ${remoteUrl}\\n`;\r\n  for (const b of branchesResp.data) {\r\n    const refPath = repo.gitDir + \"/refs/remotes/\" + remoteName + \"/\" + b.name;\r\n    const dir = refPath.substring(0, refPath.lastIndexOf(\"/\"));\r\n    if (!ctx.volume.existsSync(dir)) ctx.volume.mkdirSync(dir, { recursive: true });\r\n    ctx.volume.writeFileSync(refPath, b.commit.sha + \"\\n\");\r\n    out += ` * [updated]    ${b.name} -> ${remoteName}/${b.name}\\n`;\r\n  }\r\n\r\n  return ok(out);\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/*  Command factory                                                    */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function createGitCommand(): ShellCommand {\r\n  return {\r\n    name: \"git\",\r\n    async execute(args: string[], ctx: ShellContext): Promise<ShellResult> {\r\n      if (args.length === 0) {\r\n        return ok(`usage: git [--version] <command> [<args>]\\n`);\r\n      }\r\n\r\n      let effectiveCtx = ctx;\r\n      if (args[0] === \"-C\" && args[1]) {\r\n        const newCwd = pathModule.resolve(ctx.cwd, args[1]);\r\n        effectiveCtx = { ...ctx, cwd: newCwd };\r\n        args = args.slice(2);\r\n      }\r\n\r\n      const sub = args[0];\r\n      const subArgs = args.slice(1);\r\n\r\n      switch (sub) {\r\n        case \"--version\":\r\n        case \"-v\":\r\n          return ok(`git version ${VERSIONS.GIT}\\n`);\r\n        case \"--help\":\r\n        case \"help\":\r\n          return ok(\r\n            `usage: git <command> [<args>]\\n\\n` +\r\n            `Available commands:\\n` +\r\n            `  init       Create an empty Git repository\\n` +\r\n            `  clone      Clone a repository from GitHub\\n` +\r\n            `  add        Add file contents to the index\\n` +\r\n            `  status     Show the working tree status\\n` +\r\n            `  commit     Record changes to the repository\\n` +\r\n            `  log        Show commit logs\\n` +\r\n            `  diff       Show changes\\n` +\r\n            `  branch     List, create, or delete branches\\n` +\r\n            `  checkout   Switch branches or restore files\\n` +\r\n            `  switch     Switch branches\\n` +\r\n            `  merge      Join two development histories together\\n` +\r\n            `  remote     Manage set of tracked repositories\\n` +\r\n            `  push       Update remote refs (GitHub)\\n` +\r\n            `  pull       Fetch and integrate remote changes (GitHub)\\n` +\r\n            `  fetch      Download objects from remote (GitHub)\\n` +\r\n            `  stash      Stash the changes in a dirty working directory\\n` +\r\n            `  reset      Reset current HEAD to the specified state\\n` +\r\n            `  rm         Remove files from the working tree and index\\n` +\r\n            `  rev-parse  Ancillary plumbing command\\n` +\r\n            `  config     Get and set repository options\\n`,\r\n          );\r\n        case \"init\":\r\n          return gitInit(subArgs, effectiveCtx);\r\n        case \"clone\":\r\n          return gitClone(subArgs, effectiveCtx);\r\n        case \"add\":\r\n          return gitAdd(subArgs, effectiveCtx);\r\n        case \"status\":\r\n          return gitStatus(subArgs, effectiveCtx);\r\n        case \"commit\":\r\n          return gitCommit(subArgs, effectiveCtx);\r\n        case \"log\":\r\n          return gitLog(subArgs, effectiveCtx);\r\n        case \"diff\":\r\n          return gitDiff(subArgs, effectiveCtx);\r\n        case \"branch\":\r\n          return gitBranch(subArgs, effectiveCtx);\r\n        case \"checkout\":\r\n          return gitCheckout(subArgs, effectiveCtx);\r\n        case \"switch\":\r\n          return gitSwitch(subArgs, effectiveCtx);\r\n        case \"merge\":\r\n          return gitMerge(subArgs, effectiveCtx);\r\n        case \"remote\":\r\n          return gitRemote(subArgs, effectiveCtx);\r\n        case \"push\":\r\n          return gitPush(subArgs, effectiveCtx);\r\n        case \"pull\":\r\n          return gitPull(subArgs, effectiveCtx);\r\n        case \"fetch\":\r\n          return gitFetch(subArgs, effectiveCtx);\r\n        case \"stash\":\r\n          return gitStash(subArgs, effectiveCtx);\r\n        case \"reset\":\r\n          return gitReset(subArgs, effectiveCtx);\r\n        case \"rm\":\r\n          return gitRm(subArgs, effectiveCtx);\r\n        case \"rev-parse\":\r\n          return gitRevParse(subArgs, effectiveCtx);\r\n        case \"config\":\r\n          return gitConfig(subArgs, effectiveCtx);\r\n        default:\r\n          return fail(`git: '${sub}' is not a git command. See 'git --help'.\\n`);\r\n      }\r\n    },\r\n  };\r\n}\r\n","// child_process polyfill -- exec, execSync, spawn, fork backed by NodepodShell.\r\n// Integrates with MemoryVolume directly.\r\n\r\nimport { NodepodShell } from \"../shell/shell-interpreter\";\r\nimport type { ShellResult, ShellContext } from \"../shell/shell-types\";\r\nimport { EventEmitter } from \"./events\";\r\nimport { Readable, Writable } from \"./stream\";\r\nimport { Buffer } from \"./buffer\";\r\nimport type { MemoryVolume } from \"../memory-volume\";\r\nimport { ScriptEngine } from \"../script-engine\";\r\nimport { getWorkerTransformCache } from \"../threading/worker-transform-cache\";\r\nimport type { PackageManifest } from \"../types/manifest\";\r\nimport { resetActiveInterfaceCount } from \"./readline\";\r\nimport {\r\n  getRegistry,\r\n  isExitSentinel,\r\n  ProcessExitSentinel,\r\n  type Handle,\r\n} from \"../helpers/event-loop\";\r\nimport { createProcessContext, getActiveContext, setActiveContext } from \"../threading/process-context\";\r\nimport type { ProcessContext } from \"../threading/process-context\";\r\nimport type { PmDeps, PkgManager } from \"../shell/commands/pm-types\";\r\nimport { createNpmCommand } from \"../shell/commands/npm\";\r\nimport { createPnpmCommand } from \"../shell/commands/pnpm\";\r\nimport { createYarnCommand } from \"../shell/commands/yarn\";\r\nimport { createBunCommand, createBunxCommand } from \"../shell/commands/bun\";\r\nimport { createNodeCommand, createNpxCommand } from \"../shell/commands/node\";\r\nimport { createGitCommand } from \"../shell/commands/git\";\r\nimport { format as utilFormat } from \"./util\";\r\nimport { VERSIONS, NPM_REGISTRY_URL_SLASH, DEFAULT_ENV, MOCK_PID } from \"../constants/config\";\r\nimport { closeAllServers, getAllServers } from \"./http\";\r\nimport { disposeAllTimers } from \"./timers\";\r\nimport type { SyncChannelWorker } from \"../threading/sync-channel\";\r\n\r\nlet _shell: NodepodShell | null = null;\r\nlet _vol: MemoryVolume | null = null;\r\n\r\n// grab the native setTimeout before script-engine patches it. we use this\r\n// to yield to the host task queue without creating a tracked Handle that\r\n// would bump the refed count.\r\nconst _nativeSetTimeout: typeof globalThis.setTimeout =\r\n  globalThis.setTimeout.bind(globalThis);\r\n\r\nlet _syncChannel: SyncChannelWorker | null = null;\r\nlet _sabEnabled = true;\r\n\r\nlet _stdoutSink: ((text: string) => void) | null = null;\r\nlet _stderrSink: ((text: string) => void) | null = null;\r\nlet _haltSignal: AbortSignal | null = null;\r\n\r\nlet _termCols: (() => number) | null = null;\r\nlet _termRows: (() => number) | null = null;\r\n\r\nlet _rawModeChangeCb: ((isRaw: boolean) => void) | null = null;\r\n\r\n// every executeNodeBinary adds its proc here so terminal resizes can be\r\n// pushed to the currently-running script. cleared on exit.\r\nconst _activeProcs = new Set<{\r\n  stdout: { _setSize?: (c: number, r: number) => boolean };\r\n  stderr: { _setSize?: (c: number, r: number) => boolean };\r\n}>();\r\n\r\n// called by the worker when it gets a \"resize\" from the main thread.\r\n// matches Node: only stdout and stderr fire 'resize', stdin is a ReadStream\r\n// and doesn't have the event at all.\r\nexport function notifyTerminalResize(cols: number, rows: number): void {\r\n  for (const p of _activeProcs) {\r\n    p.stdout?._setSize?.(cols, rows);\r\n    p.stderr?._setSize?.(cols, rows);\r\n  }\r\n}\r\n\r\n// context-aware state accessors: check ProcessContext first, fall back to module globals\r\n\r\nfunction getStdoutSink(): ((text: string) => void) | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.stdoutSink ?? _stdoutSink;\r\n}\r\n\r\nfunction getStderrSink(): ((text: string) => void) | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.stderrSink ?? _stderrSink;\r\n}\r\n\r\nfunction getHaltSignal(): AbortSignal | null {\r\n  const ctx = getActiveContext();\r\n  return ctx ? ctx.abortController.signal : _haltSignal;\r\n}\r\n\r\nfunction getLiveStdin(): { emit: (e: string, ...a: unknown[]) => void } | null {\r\n  const ctx = getActiveContext();\r\n  return ctx?.liveStdin ?? _liveStdin;\r\n}\r\n\r\nfunction getTermCols(): number {\r\n  const ctx = getActiveContext();\r\n  return ctx?.termCols?.() ?? _termCols?.() ?? 80;\r\n}\r\n\r\nfunction getTermRows(): number {\r\n  const ctx = getActiveContext();\r\n  return ctx?.termRows?.() ?? _termRows?.() ?? 24;\r\n}\r\n\r\nfunction formatThrown(e: unknown): string {\r\n  if (e instanceof Error) {\r\n    const prefix =\r\n      e.constructor?.name && e.constructor.name !== \"Error\"\r\n        ? `${e.constructor.name}: `\r\n        : \"\";\r\n    let msg = prefix + (e.message || e.name || \"Unknown error\");\r\n    if (e.stack) msg += \"\\n\" + e.stack;\r\n    return msg;\r\n  }\r\n  if (e === null || e === undefined) return \"Script threw a falsy value\";\r\n  return String(e) || \"Unknown error (non-Error object thrown)\";\r\n}\r\n\r\nexport function setStreamingCallbacks(cfg: {\r\n  onStdout?: (t: string) => void;\r\n  onStderr?: (t: string) => void;\r\n  signal?: AbortSignal;\r\n  getCols?: () => number;\r\n  getRows?: () => number;\r\n  onRawModeChange?: (isRaw: boolean) => void;\r\n}): void {\r\n  _stdoutSink = cfg.onStdout ?? null;\r\n  _stderrSink = cfg.onStderr ?? null;\r\n  _haltSignal = cfg.signal ?? null;\r\n  _termCols = cfg.getCols ?? null;\r\n  _termRows = cfg.getRows ?? null;\r\n  _rawModeChangeCb = cfg.onRawModeChange ?? null;\r\n\r\n  // also update active ProcessContext if present\r\n  const ctx = getActiveContext();\r\n  if (ctx) {\r\n    ctx.stdoutSink = cfg.onStdout ?? null;\r\n    ctx.stderrSink = cfg.onStderr ?? null;\r\n    if (cfg.signal) {\r\n      cfg.signal.addEventListener(\"abort\", () => ctx.abortController.abort(), { once: true });\r\n    }\r\n    ctx.termCols = cfg.getCols ?? null;\r\n    ctx.termRows = cfg.getRows ?? null;\r\n  }\r\n}\r\n\r\nexport function clearStreamingCallbacks(): void {\r\n  _stdoutSink = null;\r\n  _stderrSink = null;\r\n  _haltSignal = null;\r\n  _termCols = null;\r\n  _termRows = null;\r\n  _rawModeChangeCb = null;\r\n\r\n  // also clear active ProcessContext if present\r\n  const ctx = getActiveContext();\r\n  if (ctx) {\r\n    ctx.stdoutSink = null;\r\n    ctx.stderrSink = null;\r\n    ctx.termCols = null;\r\n    ctx.termRows = null;\r\n  }\r\n}\r\n\r\n// set the SyncChannelWorker for true blocking execSync/spawnSync in worker mode\r\nexport function setSyncChannel(channel: SyncChannelWorker): void {\r\n  _syncChannel = channel;\r\n}\r\n\r\nexport function setSabEnabled(enabled: boolean): void {\r\n  _sabEnabled = enabled;\r\n}\r\n\r\n// onStdout/onStderr fire in real-time as output arrives; promise resolves on child exit\r\nexport type SpawnChildCallback = (\r\n  command: string,\r\n  args: string[],\r\n  opts?: {\r\n    cwd?: string;\r\n    env?: Record<string, string>;\r\n    stdio?: \"pipe\" | \"inherit\";\r\n    onStdout?: (data: string) => void;\r\n    onStderr?: (data: string) => void;\r\n  },\r\n) => Promise<{ pid: number; exitCode: number; stdout: string; stderr: string }>;\r\n\r\nlet _spawnChildFn: SpawnChildCallback | null = null;\r\n\r\nexport function setSpawnChildCallback(fn: SpawnChildCallback): void {\r\n  _spawnChildFn = fn;\r\n}\r\n\r\n// returns ForkHandle immediately; onExit fires when the child exits\r\nexport type ForkChildCallback = (\r\n  modulePath: string,\r\n  args: string[],\r\n  opts: {\r\n    cwd: string;\r\n    env: Record<string, string>;\r\n    onStdout?: (data: string) => void;\r\n    onStderr?: (data: string) => void;\r\n    onIPC?: (data: unknown) => void;\r\n    onExit?: (exitCode: number) => void;\r\n  },\r\n) => {\r\n  sendIPC: (data: unknown) => void;\r\n  disconnect: () => void;\r\n  requestId: number;\r\n};\r\n\r\nlet _forkChildFn: ForkChildCallback | null = null;\r\n\r\nexport function setForkChildCallback(fn: ForkChildCallback): void {\r\n  _forkChildFn = fn;\r\n}\r\n\r\n// IPC plumbing for when this worker IS a forked child\r\nlet _ipcSendFn: ((data: unknown) => void) | null = null;\r\nlet _ipcReceiveHandler: ((data: unknown) => void) | null = null;\r\n// messages that arrive before the handler is wired (parent sends before child's ENB sets up the handler)\r\nlet _ipcQueue: unknown[] = [];\r\n\r\nexport function setIPCSend(fn: (data: unknown) => void): void {\r\n  _ipcSendFn = fn;\r\n}\r\n\r\nexport function setIPCReceiveHandler(fn: (data: unknown) => void): void {\r\n  _ipcReceiveHandler = fn;\r\n  // replay any messages that arrived before the handler was set\r\n  if (_ipcQueue.length > 0) {\r\n    const queued = _ipcQueue;\r\n    _ipcQueue = [];\r\n    for (const msg of queued) fn(msg);\r\n  }\r\n}\r\n\r\n// called by process-worker-entry when an IPC message arrives\r\nexport function handleIPCFromParent(data: unknown): void {\r\n  if (_ipcReceiveHandler) {\r\n    _ipcReceiveHandler(data);\r\n  } else {\r\n    // handler not wired yet, queue for replay\r\n    _ipcQueue.push(data);\r\n  }\r\n}\r\n\r\nexport function getShellCwd(): string {\r\n  return _shell?.getCwd() ?? \"/\";\r\n}\r\n\r\n// called by process.chdir() so subsequent exec/spawn without explicit cwd pick up the new dir\r\nexport function setShellCwd(dir: string): void {\r\n  if (_shell) _shell.setCwd(dir);\r\n}\r\n\r\n// runs command inline in the current worker via NodepodShell (NOT a child process).\r\n// child_process.exec() spawns a new worker; shellExec() runs in THIS process.\r\nexport function shellExec(\r\n  cmd: string,\r\n  opts: { cwd?: string; env?: Record<string, string> },\r\n  callback: (error: Error | null, stdout: string, stderr: string) => void,\r\n): void {\r\n  if (!_shell) {\r\n    callback(new Error(\"[Nodepod] Shell not initialized\"), \"\", \"\");\r\n    return;\r\n  }\r\n  _shell.exec(cmd, opts).then(\r\n    (result) => {\r\n      if (result.exitCode !== 0) {\r\n        const e = new Error(`Command failed: ${cmd}`);\r\n        (e as any).code = result.exitCode;\r\n        callback(e, result.stdout, result.stderr);\r\n      } else {\r\n        callback(null, result.stdout, result.stderr);\r\n      }\r\n    },\r\n    (e) => {\r\n      callback(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\r\n    },\r\n  );\r\n}\r\n\r\nlet _liveStdin: { emit: (e: string, ...a: unknown[]) => void } | null = null;\r\n\r\n// check if the live process stdin is in raw mode (library handles its own echo)\r\nexport function isStdinRaw(): boolean {\r\n  const stdin = getLiveStdin();\r\n  if (!stdin) return false;\r\n  return !!(stdin as any).isRaw;\r\n}\r\n\r\nexport function sendStdin(text: string): void {\r\n  const stdin = getLiveStdin();\r\n  if (!stdin) {\r\n    return;\r\n  }\r\n  // emit 'data' only -- readline.emitKeypressEvents() parses data into 'keypress' events\r\n  // automatically, matching real Node.js\r\n  stdin.emit(\"data\", text);\r\n}\r\n\r\nexport function initShellExec(volume: MemoryVolume, opts?: { cwd?: string; env?: Record<string, string> }): void {\r\n  _vol = volume;\r\n\r\n  _shell = new NodepodShell(volume, {\r\n    cwd: opts?.cwd ?? \"/\",\r\n    env: {\r\n      HOME: \"/home/user\",\r\n      USER: \"user\",\r\n      PATH: \"/usr/local/bin:/usr/bin:/bin:/node_modules/.bin\",\r\n      NODE_ENV: \"development\",\r\n      TERM: \"xterm-256color\",\r\n      COLORTERM: \"truecolor\",\r\n      npm_config_user_agent: DEFAULT_ENV.npm_config_user_agent,\r\n      npm_execpath: DEFAULT_ENV.npm_execpath,\r\n      npm_node_execpath: DEFAULT_ENV.npm_node_execpath,\r\n      ...opts?.env,\r\n    },\r\n  });\r\n\r\n  const pmDeps: PmDeps = {\r\n    installPackages,\r\n    uninstallPackages,\r\n    listPackages,\r\n    runScript,\r\n    npmInitOrCreate,\r\n    npmInfo,\r\n    npmPack,\r\n    npmConfig,\r\n    npxExecute,\r\n    executeNodeBinary,\r\n    evalCode: (code, ctx) => evalNodeCode(code, ctx),\r\n    printCode: (code, ctx) => printNodeCode(code, ctx),\r\n    removeNodeModules: (cwd) => {\r\n      const dir = `${cwd}/node_modules`.replace(/\\/+/g, \"/\");\r\n      if (_vol!.existsSync(dir)) removeDir(_vol!, dir);\r\n    },\r\n    formatErr,\r\n    formatWarn,\r\n    hasFile: (p) => !!_vol && _vol.existsSync(p),\r\n    readFile: (p) => _vol!.readFileSync(p, \"utf8\") as string,\r\n    writeFile: (p, data) => _vol!.writeFileSync(p, data),\r\n  };\r\n\r\n  _shell.registerCommand(createNodeCommand(pmDeps));\r\n  _shell.registerCommand(createNpxCommand(pmDeps));\r\n  _shell.registerCommand(createNpmCommand(pmDeps));\r\n  _shell.registerCommand(createPnpmCommand(pmDeps));\r\n  _shell.registerCommand(createYarnCommand(pmDeps));\r\n  _shell.registerCommand(createBunCommand(pmDeps));\r\n  _shell.registerCommand(createBunxCommand(pmDeps));\r\n  _shell.registerCommand(createGitCommand());\r\n}\r\n\r\n// node -e / -p helpers (used by PmDeps)\r\n\r\nfunction evalNodeCode(code: string, ctx: ShellContext): Promise<ShellResult> {\r\n  if (!_vol) return Promise.resolve({ stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 });\r\n  const evalPath = `/<eval-${Date.now()}-${Math.random().toString(36).slice(2)}>.js`;\r\n  _vol.writeFileSync(evalPath, code);\r\n  return executeNodeBinary(evalPath, [], ctx).finally(() => {\r\n    try {\r\n      if (_vol!.existsSync(evalPath)) _vol!.unlinkSync(evalPath);\r\n    } catch {\r\n      /* ignore */\r\n    }\r\n  });\r\n}\r\n\r\nfunction printNodeCode(code: string, ctx: ShellContext): Promise<ShellResult> {\r\n  const wrapped = `const __nodepodPrintResult = (${code});\\nif (typeof __nodepodPrintResult !== 'undefined') { process.stdout.write(String(__nodepodPrintResult) + '\\\\n'); }\\n`;\r\n  return evalNodeCode(wrapped, ctx);\r\n}\r\n\r\n// npm helpers\r\n\r\nfunction removeDir(vol: MemoryVolume, dir: string): void {\r\n  for (const name of vol.readdirSync(dir)) {\r\n    const full = `${dir}/${name}`;\r\n    const st = vol.statSync(full);\r\n    if (st.isDirectory()) removeDir(vol, full);\r\n    else vol.unlinkSync(full);\r\n  }\r\n  vol.rmdirSync(dir);\r\n}\r\n\r\nfunction loadManifest(\r\n  cwd: string,\r\n): { pkg: PackageManifest } | { fail: ShellResult } {\r\n  const p = `${cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n  if (!_vol!.existsSync(p))\r\n    return {\r\n      fail: {\r\n        stdout: \"\",\r\n        stderr: formatErr(\"package.json not found\", \"npm\"),\r\n        exitCode: 1,\r\n      },\r\n    };\r\n  try {\r\n    return {\r\n      pkg: JSON.parse(_vol!.readFileSync(p, \"utf8\")) as PackageManifest,\r\n    };\r\n  } catch {\r\n    return {\r\n      fail: {\r\n        stdout: \"\",\r\n        stderr: formatErr(\"Malformed package.json\", \"npm\"),\r\n        exitCode: 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n\r\nasync function runScript(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const name = args[0];\r\n  if (!name) {\r\n    const r = loadManifest(ctx.cwd);\r\n    if (\"fail\" in r) return r.fail;\r\n    const scripts = r.pkg.scripts ?? {};\r\n    const keys = Object.keys(scripts);\r\n    if (keys.length === 0) return { stdout: \"\", stderr: \"\", exitCode: 0 };\r\n    let text = `Scripts in ${r.pkg.name ?? \"\"}:\\n`;\r\n    for (const k of keys) text += `  ${k}\\n    ${scripts[k]}\\n`;\r\n    return { stdout: text, stderr: \"\", exitCode: 0 };\r\n  }\r\n\r\n  // extra arguments after \"--\" separator (npm run dev -- --webpack)\r\n  const dashIdx = args.indexOf(\"--\");\r\n  const extraArgs = dashIdx >= 0 ? args.slice(dashIdx + 1) : [];\r\n\r\n  const r = loadManifest(ctx.cwd);\r\n  if (\"fail\" in r) return r.fail;\r\n  const scripts = r.pkg.scripts ?? {};\r\n  let cmd = scripts[name];\r\n  if (!cmd) {\r\n    let msg = formatErr(`Missing script: \"${name}\"`, \"npm\");\r\n    const avail = Object.keys(scripts);\r\n    if (avail.length) {\r\n      msg += \"\\nAvailable:\\n\";\r\n      for (const s of avail)\r\n        msg += `  ${A_CYAN}${s}${A_RESET}: ${A_DIM}${scripts[s]}${A_RESET}\\n`;\r\n    }\r\n    return { stdout: \"\", stderr: msg, exitCode: 1 };\r\n  }\r\n\r\n  // append extra args after \"--\" to the script command (real npm behavior)\r\n  if (extraArgs.length > 0) {\r\n    cmd += \" \" + extraArgs.map(a => a.includes(\" \") ? `\"${a}\"` : a).join(\" \");\r\n  }\r\n\r\n  // prepend cwd's node_modules/.bin to PATH (matches real npm behavior)\r\n  const binDir = `${ctx.cwd}/node_modules/.bin`.replace(/\\/+/g, \"/\");\r\n  const existingPath = ctx.env.PATH || \"\";\r\n  const pathWithBin = existingPath.includes(binDir)\r\n    ? existingPath\r\n    : `${binDir}:${existingPath}`;\r\n\r\n  const env: Record<string, string> = {\r\n    ...ctx.env,\r\n    PATH: pathWithBin,\r\n    npm_lifecycle_event: name,\r\n  };\r\n  if (r.pkg.name) env.npm_package_name = r.pkg.name;\r\n  if (r.pkg.version) env.npm_package_version = r.pkg.version;\r\n\r\n  let allOut = \"\";\r\n  let allErr = \"\";\r\n  const label = `${r.pkg.name ?? \"\"}@${r.pkg.version ?? \"\"}`;\r\n\r\n  const pre = scripts[`pre${name}`];\r\n  if (pre) {\r\n    const hdr = `\\n> ${label} pre${name}\\n> ${pre}\\n\\n`;\r\n    allErr += hdr;\r\n    if (_stderrSink) _stderrSink(hdr);\r\n    const pr = await ctx.exec(pre, { cwd: ctx.cwd, env });\r\n    allOut += pr.stdout;\r\n    allErr += pr.stderr;\r\n    if (pr.exitCode !== 0)\r\n      return { stdout: allOut, stderr: allErr, exitCode: pr.exitCode };\r\n  }\r\n\r\n  const mainHdr = `\\n> ${label} ${name}\\n> ${cmd}\\n\\n`;\r\n  allErr += mainHdr;\r\n  if (_stderrSink) _stderrSink(mainHdr);\r\n  const mr = await ctx.exec(cmd, { cwd: ctx.cwd, env });\r\n  allOut += mr.stdout;\r\n  allErr += mr.stderr;\r\n  if (mr.exitCode !== 0)\r\n    return { stdout: allOut, stderr: allErr, exitCode: mr.exitCode };\r\n\r\n  const post = scripts[`post${name}`];\r\n  if (post) {\r\n    const hdr = `\\n> ${label} post${name}\\n> ${post}\\n\\n`;\r\n    allErr += hdr;\r\n    if (_stderrSink) _stderrSink(hdr);\r\n    const po = await ctx.exec(post, { cwd: ctx.cwd, env });\r\n    allOut += po.stdout;\r\n    allErr += po.stderr;\r\n    if (po.exitCode !== 0)\r\n      return { stdout: allOut, stderr: allErr, exitCode: po.exitCode };\r\n  }\r\n\r\n  return { stdout: allOut, stderr: allErr, exitCode: 0 };\r\n}\r\n\r\n// ANSI + spinner helpers for npm install output\r\n\r\nconst A_RESET = \"\\x1b[0m\";\r\nconst A_BOLD = \"\\x1b[1m\";\r\nconst A_DIM = \"\\x1b[2m\";\r\nconst A_RED = \"\\x1b[31m\";\r\nconst A_GREEN = \"\\x1b[32m\";\r\nconst A_YELLOW = \"\\x1b[33m\";\r\nconst A_BLUE = \"\\x1b[34m\";\r\nconst A_MAGENTA = \"\\x1b[35m\";\r\nconst A_CYAN = \"\\x1b[36m\";\r\nconst A_WHITE = \"\\x1b[37m\";\r\nconst ERASE_LINE = \"\\x1b[2K\";\r\n\r\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\r\n\r\nfunction createSpinner(text: string, writeFn: (s: string) => void) {\r\n  let frame = 0;\r\n  let current = text;\r\n  const id = setInterval(() => {\r\n    writeFn(\r\n      `${ERASE_LINE}\\r${A_CYAN}${SPINNER_FRAMES[frame]}${A_RESET} ${current}`,\r\n    );\r\n    frame = (frame + 1) % SPINNER_FRAMES.length;\r\n  }, 80);\r\n\r\n  return {\r\n    update(t: string) {\r\n      current = t;\r\n    },\r\n    succeed(t: string) {\r\n      clearInterval(id);\r\n      writeFn(`${ERASE_LINE}\\r${A_GREEN}✔${A_RESET} ${t}\\n`);\r\n    },\r\n    fail(t: string) {\r\n      clearInterval(id);\r\n      writeFn(`${ERASE_LINE}\\r${A_RED}✖${A_RESET} ${t}\\n`);\r\n    },\r\n    stop() {\r\n      clearInterval(id);\r\n    },\r\n  };\r\n}\r\n\r\n// per-PM accent colors\r\nconst PM_COLORS: Record<PkgManager, string> = {\r\n  npm: A_RED,\r\n  pnpm: A_YELLOW,\r\n  yarn: A_BLUE,\r\n  bun: A_WHITE,\r\n};\r\n\r\nfunction formatProgress(msg: string, pm: PkgManager = \"npm\"): string {\r\n  const accent = PM_COLORS[pm];\r\n\r\n  const resolving = msg.match(/^Resolving\\s+(.+?)\\.{3}$/);\r\n  if (resolving)\r\n    return `${A_DIM}Resolving${A_RESET} ${accent}${resolving[1]}${A_RESET}${A_DIM}...${A_RESET}`;\r\n\r\n  const downloading = msg.match(/^Downloading\\s+(\\d+)\\s+package/);\r\n  if (downloading)\r\n    return `${A_DIM}Downloading${A_RESET} ${A_YELLOW}${downloading[1]}${A_RESET} ${A_DIM}packages...${A_RESET}`;\r\n\r\n  const fetching = msg.match(/^(?:\\s*)?Fetching\\s+(.+?)\\.{3}$/);\r\n  if (fetching)\r\n    return `${A_DIM}Fetching${A_RESET} ${accent}${fetching[1]}${A_RESET}${A_DIM}...${A_RESET}`;\r\n\r\n  const transformed = msg.match(/^(?:\\s*)?Transformed\\s+(\\d+)\\s+file/);\r\n  if (transformed) return `${A_DIM}${msg.trim()}${A_RESET}`;\r\n\r\n  const installed = msg.match(/^Installed\\s+(\\d+)/);\r\n  if (installed) return `${A_GREEN}${msg}${A_RESET}`;\r\n\r\n  const skipping = msg.match(/^Skipping\\s+(.+?)\\s+\\(up to date\\)$/);\r\n  if (skipping)\r\n    return `${A_DIM}Skipping${A_RESET} ${accent}${skipping[1]}${A_RESET} ${A_DIM}(up to date)${A_RESET}`;\r\n\r\n  return msg;\r\n}\r\n\r\nfunction formatInstallSummary(\r\n  totalAdded: number,\r\n  elapsed: string,\r\n  pm: PkgManager,\r\n): string {\r\n  const pkgs = `${totalAdded} package${totalAdded !== 1 ? \"s\" : \"\"}`;\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_BOLD}added ${pkgs}${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\r\n    case \"pnpm\":\r\n      return `${A_BOLD}packages:${A_RESET} ${A_GREEN}+${totalAdded}${A_RESET}\\n${A_DIM}Done in ${elapsed}s${A_RESET}`;\r\n    case \"yarn\":\r\n      return `${A_BOLD}${pkgs} added${A_RESET} ${A_DIM}in ${elapsed}s${A_RESET}`;\r\n    case \"bun\":\r\n      return `${A_BOLD}${pkgs} installed${A_RESET} ${A_DIM}[${elapsed}s]${A_RESET}`;\r\n  }\r\n}\r\n\r\nfunction formatErr(msg: string, pm: PkgManager): string {\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_RED}npm ERR!${A_RESET} ${msg}\\n`;\r\n    case \"pnpm\":\r\n      return `${A_RED} ERR_PNPM${A_RESET}  ${msg}\\n`;\r\n    case \"yarn\":\r\n      return `${A_RED}error${A_RESET} ${msg}\\n`;\r\n    case \"bun\":\r\n      return `${A_RED}error:${A_RESET} ${msg}\\n`;\r\n  }\r\n}\r\n\r\nfunction formatWarn(msg: string, pm: PkgManager): string {\r\n  switch (pm) {\r\n    case \"npm\":\r\n      return `${A_YELLOW}npm WARN${A_RESET} ${msg}\\n`;\r\n    case \"pnpm\":\r\n      return `${A_YELLOW} WARN${A_RESET}  ${msg}\\n`;\r\n    case \"yarn\":\r\n      return `${A_YELLOW}warning${A_RESET} ${msg}\\n`;\r\n    case \"bun\":\r\n      return `${A_YELLOW}warn:${A_RESET} ${msg}\\n`;\r\n  }\r\n}\r\n\r\n// shell installs get the same IDB snapshot cache the SDK uses (plan 015).\r\n// opened once per realm; IDB is available in workers, where the shell runs.\r\nlet _shellSnapshotCache:\r\n  | import(\"../persistence/idb-cache\").IDBSnapshotCache\r\n  | null\r\n  | undefined;\r\n\r\nasync function getShellSnapshotCache() {\r\n  if (_shellSnapshotCache === undefined) {\r\n    try {\r\n      const { openSnapshotCache } = await import(\"../persistence/idb-cache\");\r\n      _shellSnapshotCache = await openSnapshotCache();\r\n    } catch {\r\n      _shellSnapshotCache = null;\r\n    }\r\n  }\r\n  return _shellSnapshotCache;\r\n}\r\n\r\nasync function installPackages(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const { DependencyInstaller } = await import(\"../packages/installer\");\r\n  const snapshotCache = await getShellSnapshotCache();\r\n  const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd, snapshotCache });\r\n  let out = \"\";\r\n  const write = _stdoutSink ?? ((_s: string) => {});\r\n  const startTime = Date.now();\r\n  const accent = PM_COLORS[pm];\r\n\r\n  const spinnerText =\r\n    pm === \"bun\"\r\n      ? `${A_DIM}bun install${A_RESET} ${A_DIM}${VERSIONS.BUN_V}${A_RESET}`\r\n      : `${A_DIM}Resolving dependencies...${A_RESET}`;\r\n  const spinner = createSpinner(spinnerText, write);\r\n\r\n  try {\r\n    const names = args.filter((a: string) => !a.startsWith(\"-\"));\r\n    const onProgress = (m: string) => {\r\n      const colored = formatProgress(m, pm);\r\n      out += m + \"\\n\";\r\n      spinner.update(colored);\r\n    };\r\n\r\n    const isDev = args.some(\r\n      (a: string) =>\r\n        a === \"-D\" || a === \"--save-dev\" || a === \"--dev\",\r\n    );\r\n    const noSave = args.some(\r\n      (a: string) => a === \"--no-save\",\r\n    );\r\n\r\n    let registryUrl: string | undefined;\r\n    for (let i = 0; i < args.length; i++) {\r\n      const a = args[i];\r\n      if (a === \"--registry\" && args[i + 1]) {\r\n        registryUrl = args[i + 1];\r\n        break;\r\n      }\r\n      if (a.startsWith(\"--registry=\")) {\r\n        registryUrl = a.slice(\"--registry=\".length);\r\n        break;\r\n      }\r\n    }\r\n\r\n    let totalAdded = 0;\r\n    if (names.length === 0) {\r\n      const ir = await installer.installFromManifest(undefined, {\r\n        withDevDeps: true,\r\n        onProgress,\r\n        registry: registryUrl,\r\n      });\r\n      totalAdded = ir.newPackages.length;\r\n    } else {\r\n      for (const n of names) {\r\n        const ir = await installer.install(n, undefined, {\r\n          persist: !noSave,\r\n          persistDev: isDev && !noSave,\r\n          onProgress,\r\n          registry: registryUrl,\r\n        });\r\n        totalAdded += ir.newPackages.length;\r\n      }\r\n    }\r\n\r\n    const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);\r\n    const summary = formatInstallSummary(totalAdded, elapsed, pm);\r\n    spinner.succeed(summary);\r\n    out += `added ${totalAdded} packages in ${elapsed}s\\n`;\r\n\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  } catch (e) {\r\n    const msg = e instanceof Error ? e.message : String(e);\r\n    spinner.fail(`${A_RED}${msg}${A_RESET}`);\r\n    return {\r\n      stdout: out,\r\n      stderr: formatErr(msg, pm),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n}\r\n\r\nasync function uninstallPackages(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const names = args.filter((a) => !a.startsWith(\"-\"));\r\n  if (names.length === 0)\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"Must specify package to remove\", pm),\r\n      exitCode: 1,\r\n    };\r\n\r\n  const write = _stdoutSink ?? ((_s: string) => {});\r\n  let out = \"\";\r\n  for (const name of names) {\r\n    const pkgDir = `${ctx.cwd}/node_modules/${name}`.replace(/\\/+/g, \"/\");\r\n    if (_vol!.existsSync(pkgDir)) {\r\n      try {\r\n        removeDir(_vol!, pkgDir);\r\n        const msg =\r\n          pm === \"bun\"\r\n            ? `${A_DIM}-${A_RESET} ${name}`\r\n            : pm === \"pnpm\"\r\n              ? `${A_RED}-${A_RESET} ${name}`\r\n              : `removed ${name}`;\r\n        out += msg + \"\\n\";\r\n        write(msg + \"\\n\");\r\n      } catch (e) {\r\n        return {\r\n          stdout: out,\r\n          stderr: formatErr(\r\n            `Failed to remove ${name}: ${e instanceof Error ? e.message : String(e)}`,\r\n            pm,\r\n          ),\r\n          exitCode: 1,\r\n        };\r\n      }\r\n    } else {\r\n      out += formatWarn(`${name} not installed`, pm);\r\n    }\r\n\r\n    const r = loadManifest(ctx.cwd);\r\n    if (!(\"fail\" in r)) {\r\n      const pkg = r.pkg;\r\n      let changed = false;\r\n      if (pkg.dependencies?.[name]) {\r\n        delete pkg.dependencies[name];\r\n        changed = true;\r\n      }\r\n      if (pkg.devDependencies?.[name]) {\r\n        delete pkg.devDependencies[name];\r\n        changed = true;\r\n      }\r\n      if (changed) {\r\n        const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n        _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\r\n      }\r\n    }\r\n  }\r\n\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function listPackages(\r\n  ctx: ShellContext,\r\n  pm: PkgManager = \"npm\",\r\n): Promise<ShellResult> {\r\n  const { DependencyInstaller } = await import(\"../packages/installer\");\r\n  const installer = new DependencyInstaller(_vol!, { cwd: ctx.cwd });\r\n  const pkgs = installer.listInstalled();\r\n  const entries = Object.entries(pkgs);\r\n  if (entries.length === 0)\r\n    return { stdout: `${A_DIM}(empty)${A_RESET}\\n`, stderr: \"\", exitCode: 0 };\r\n\r\n  const r = loadManifest(ctx.cwd);\r\n  const label = !(\"fail\" in r)\r\n    ? `${r.pkg.name ?? \"project\"}@${r.pkg.version ?? \"0.0.0\"}`\r\n    : ctx.cwd;\r\n\r\n  let text = \"\";\r\n  switch (pm) {\r\n    case \"npm\":\r\n      text += `${label} ${ctx.cwd}\\n`;\r\n      for (let i = 0; i < entries.length; i++) {\r\n        const [n, v] = entries[i];\r\n        const isLast = i === entries.length - 1;\r\n        text += `${isLast ? \"└──\" : \"├──\"} ${n}@${A_DIM}${v}${A_RESET}\\n`;\r\n      }\r\n      break;\r\n    case \"pnpm\":\r\n      text += `${A_DIM}Legend: production dependency, optional only, dev only${A_RESET}\\n\\n`;\r\n      text += `${label} ${ctx.cwd}\\n\\n`;\r\n      text += `${A_BOLD}dependencies:${A_RESET}\\n`;\r\n      for (const [n, v] of entries) text += `${n} ${A_DIM}${v}${A_RESET}\\n`;\r\n      break;\r\n    case \"yarn\":\r\n      text += `${A_BOLD}${label}${A_RESET}\\n`;\r\n      for (let i = 0; i < entries.length; i++) {\r\n        const [n, v] = entries[i];\r\n        const isLast = i === entries.length - 1;\r\n        text += `${isLast ? \"└─\" : \"├─\"} ${n}@${A_CYAN}${v}${A_RESET}\\n`;\r\n      }\r\n      break;\r\n    case \"bun\":\r\n      for (const [n, v] of entries) text += `${n}@${A_DIM}${v}${A_RESET}\\n`;\r\n      text += `\\n${A_DIM}${entries.length} packages installed${A_RESET}\\n`;\r\n      break;\r\n  }\r\n  return { stdout: text, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function npmInitOrCreate(\r\n  args: string[],\r\n  sub: string,\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const flags = args.filter((a) => a.startsWith(\"-\"));\r\n  const positional = args.filter((a) => !a.startsWith(\"-\"));\r\n\r\n  // npm create <pkg> / npm init <pkg> → npx create-<pkg>\r\n  if (sub === \"create\" || (sub === \"init\" && positional.length > 0)) {\r\n    const initializer = positional[0];\r\n    let pkgSpec: string;\r\n    if (initializer.startsWith(\"@\")) {\r\n      // scoped: npm create @scope/pkg → npx @scope/create-pkg\r\n      pkgSpec = initializer;\r\n    } else {\r\n      // vite@latest → create-vite@latest\r\n      const atIdx = initializer.indexOf(\"@\");\r\n      if (atIdx > 0) {\r\n        const name = initializer.slice(0, atIdx);\r\n        const ver = initializer.slice(atIdx);\r\n        pkgSpec = `create-${name}${ver}`;\r\n      } else {\r\n        pkgSpec = `create-${initializer}`;\r\n      }\r\n    }\r\n    return npxExecute([\"-y\", pkgSpec, ...positional.slice(1), ...flags], ctx);\r\n  }\r\n\r\n  // plain npm init [-y] → create package.json\r\n  const p = `${ctx.cwd}/package.json`.replace(/\\/+/g, \"/\");\r\n  if (_vol!.existsSync(p)) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatWarn(\"package.json already exists\", \"npm\"),\r\n      exitCode: 0,\r\n    };\r\n  }\r\n\r\n  const isYes = flags.includes(\"-y\") || flags.includes(\"--yes\");\r\n  const name = ctx.cwd.split(\"/\").filter(Boolean).pop() || \"my-project\";\r\n\r\n  const pkg: PackageManifest = {\r\n    name,\r\n    version: \"1.0.0\",\r\n    description: \"\",\r\n    main: \"index.js\",\r\n    scripts: {\r\n      test: 'echo \"Error: no test specified\" && exit 1',\r\n      start: \"node index.js\",\r\n    },\r\n    keywords: [],\r\n    author: \"\",\r\n    license: \"ISC\",\r\n  };\r\n\r\n  _vol!.writeFileSync(p, JSON.stringify(pkg, null, 2));\r\n  const out = isYes\r\n    ? `Wrote to ${p}\\n`\r\n    : `Wrote to ${p}\\n\\n${JSON.stringify(pkg, null, 2)}\\n`;\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nasync function npmInfo(\r\n  args: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  const name = args[0];\r\n  if (!name)\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"Usage: npm info <package>\", \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n\r\n  const pkgJsonPath = `/node_modules/${name}/package.json`;\r\n  if (_vol!.existsSync(pkgJsonPath)) {\r\n    try {\r\n      const pkg = JSON.parse(\r\n        _vol!.readFileSync(pkgJsonPath, \"utf8\"),\r\n      ) as PackageManifest;\r\n      let out = `${pkg.name}@${pkg.version}\\n`;\r\n      if (pkg.description) out += `${pkg.description}\\n`;\r\n      if (pkg.license) out += `license: ${pkg.license}\\n`;\r\n      if (pkg.homepage) out += `homepage: ${pkg.homepage}\\n`;\r\n      if (pkg.dependencies) {\r\n        out += \"\\ndependencies:\\n\";\r\n        for (const [k, v] of Object.entries(pkg.dependencies))\r\n          out += `  ${k}: ${v}\\n`;\r\n      }\r\n      return { stdout: out, stderr: \"\", exitCode: 0 };\r\n    } catch {\r\n      /* fallthrough */\r\n    }\r\n  }\r\n\r\n  // fall back to registry\r\n  try {\r\n    const { RegistryClient } = await import(\"../packages/registry-client\");\r\n    const client = new RegistryClient();\r\n    const meta = await client.fetchManifest(name);\r\n    const latest = meta[\"dist-tags\"]?.latest;\r\n    let out = `${name}@${latest ?? \"unknown\"}\\n`;\r\n    if (latest && meta.versions[latest]) {\r\n      const ver = meta.versions[latest] as unknown as Record<string, unknown>;\r\n      if (ver.description) out += `${ver.description}\\n`;\r\n      if (ver.license) out += `license: ${ver.license}\\n`;\r\n      if (ver.homepage) out += `homepage: ${ver.homepage}\\n`;\r\n    }\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  } catch (e) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(`Not found: ${name}`, \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n}\r\n\r\nfunction npmPack(ctx: ShellContext): ShellResult {\r\n  const r = loadManifest(ctx.cwd);\r\n  if (\"fail\" in r) return r.fail;\r\n\r\n  const notice = `${A_DIM}npm notice${A_RESET}`;\r\n  let out = `${notice}\\n`;\r\n  out += `${notice} ${A_BOLD}package:${A_RESET} ${r.pkg.name}@${r.pkg.version}\\n`;\r\n\r\n  const files: string[] = [];\r\n  const walk = (dir: string) => {\r\n    try {\r\n      for (const name of _vol!.readdirSync(dir)) {\r\n        if (name === \"node_modules\" || name.startsWith(\".\")) continue;\r\n        const full = `${dir}/${name}`;\r\n        const st = _vol!.statSync(full);\r\n        if (st.isDirectory()) walk(full);\r\n        else files.push(full);\r\n      }\r\n    } catch {\r\n      /* */\r\n    }\r\n  };\r\n  walk(ctx.cwd);\r\n\r\n  for (const f of files) out += `${notice} ${f}\\n`;\r\n  out += `${notice} ${A_BOLD}total files:${A_RESET} ${files.length}\\n`;\r\n  return { stdout: out, stderr: \"\", exitCode: 0 };\r\n}\r\n\r\nfunction npmConfig(args: string[], ctx: ShellContext): ShellResult {\r\n  const sub = args[0];\r\n  if (!sub || sub === \"list\") {\r\n    let out = \"; nodepod project config\\n\";\r\n    out += `prefix = \"${ctx.cwd}\"\\n`;\r\n    out += `registry = \"${NPM_REGISTRY_URL_SLASH}\"\\n`;\r\n    return { stdout: out, stderr: \"\", exitCode: 0 };\r\n  }\r\n  if (sub === \"get\") {\r\n    const key = args[1];\r\n    if (key === \"prefix\")\r\n      return { stdout: ctx.cwd + \"\\n\", stderr: \"\", exitCode: 0 };\r\n    if (key === \"registry\")\r\n      return {\r\n        stdout: NPM_REGISTRY_URL_SLASH + \"\\n\",\r\n        stderr: \"\",\r\n        exitCode: 0,\r\n      };\r\n    return { stdout: \"undefined\\n\", stderr: \"\", exitCode: 0 };\r\n  }\r\n  if (sub === \"set\") {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatWarn(\"config set: not supported in nodepod\", \"npm\"),\r\n      exitCode: 0,\r\n    };\r\n  }\r\n  return {\r\n    stdout: \"\",\r\n    stderr: formatErr(`config: unknown subcommand \"${sub}\"`, \"npm\"),\r\n    exitCode: 1,\r\n  };\r\n}\r\n\r\n// Direct node binary execution (shared by node command & npx)\r\n\r\nexport async function executeNodeBinary(\r\n  filePath: string,\r\n  args: string[],\r\n  ctx: ShellContext,\r\n  opts?: {\r\n    isFork?: boolean;\r\n    workerThreadsOverride?: {\r\n      isMainThread: boolean;\r\n      parentPort: unknown;\r\n      workerData: unknown;\r\n      threadId: number;\r\n    };\r\n  },\r\n): Promise<ShellResult> {\r\n  if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n  const rawPath = filePath.startsWith(\"/\")\r\n    ? filePath\r\n    : `${ctx.cwd}/${filePath}`.replace(/\\/+/g, \"/\");\r\n\r\n  // resolve entry file: exact path, then extensions, then directory index\r\n  let resolved = \"\";\r\n  if (_vol.existsSync(rawPath) && !_vol.statSync(rawPath).isDirectory()) {\r\n    resolved = rawPath;\r\n  } else {\r\n    const exts = [\".js\", \".mjs\", \".cjs\", \".ts\", \".tsx\", \".jsx\"];\r\n    for (const ext of exts) {\r\n      if (_vol.existsSync(rawPath + ext)) { resolved = rawPath + ext; break; }\r\n    }\r\n    if (!resolved) {\r\n      // try as directory with index file\r\n      const dirPath = rawPath.endsWith(\"/\") ? rawPath : rawPath + \"/\";\r\n      for (const idx of [\"index.js\", \"index.mjs\", \"index.ts\", \"index.cjs\"]) {\r\n        if (_vol.existsSync(dirPath + idx)) { resolved = dirPath + idx; break; }\r\n      }\r\n    }\r\n  }\r\n\r\n  if (!resolved) {\r\n    const errMsg = `Cannot locate module '${rawPath}'\\n`;\r\n    const errSink = getStderrSink();\r\n    if (errSink) errSink(errMsg);\r\n    return {\r\n      stdout: \"\",\r\n      stderr: errMsg,\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  let out = \"\";\r\n  let err = \"\";\r\n  let didExit = false;\r\n  let code = 0;\r\n\r\n  const pushOut = (s: string): boolean => {\r\n    out += s;\r\n    const sink = getStdoutSink();\r\n    if (sink) sink(s);\r\n    return true;\r\n  };\r\n  const pushErr = (s: string): boolean => {\r\n    err += s;\r\n    const sink = getStderrSink();\r\n    if (sink) sink(s);\r\n    return true;\r\n  };\r\n\r\n  // ScriptEngine's module wrapper overwrites globalThis.process -- save and restore\r\n  const savedProcess = (globalThis as any).process;\r\n\r\n  // isolate this script's HandleRegistry from the outer (vitest/host) process.\r\n  // without this, any setTimeout the host schedules ends up in the same\r\n  // _globalRegistry the wait loop inspects, so outer timers count as live\r\n  // handles and we block forever waiting for a drain that won't come. still\r\n  // inherit streaming config so stdout/stderr/resize keep working.\r\n  const prevCtx = getActiveContext();\r\n  const localCtx = createProcessContext({\r\n    volume: _vol,\r\n    cwd: ctx.cwd,\r\n    env: ctx.env,\r\n  });\r\n  localCtx.stdoutSink = prevCtx?.stdoutSink ?? _stdoutSink;\r\n  localCtx.stderrSink = prevCtx?.stderrSink ?? _stderrSink;\r\n  localCtx.liveStdin = prevCtx?.liveStdin ?? _liveStdin;\r\n  localCtx.termCols = prevCtx?.termCols ?? _termCols;\r\n  localCtx.termRows = prevCtx?.termRows ?? _termRows;\r\n  // Propagate halt/abort from parent context or module signal\r\n  if (prevCtx && prevCtx.abortController.signal.aborted) {\r\n    localCtx.abortController.abort();\r\n  } else if (_haltSignal?.aborted) {\r\n    localCtx.abortController.abort();\r\n  } else if (_haltSignal) {\r\n    _haltSignal.addEventListener(\r\n      \"abort\",\r\n      () => localCtx.abortController.abort(),\r\n      { once: true },\r\n    );\r\n  }\r\n  setActiveContext(localCtx);\r\n\r\n  try {\r\n  const sandbox = new ScriptEngine(_vol, {\r\n    cwd: ctx.cwd,\r\n    env: ctx.env,\r\n    enableSharedArrayBuffer: _sabEnabled,\r\n    // shared per-realm LRU: bounds memory and lets repeat runs reuse transforms\r\n    transformCache: getWorkerTransformCache() as unknown as Map<string, string>,\r\n    onConsole: (m: string, cArgs: unknown[]) => {\r\n      // filter out process.exit sentinel errors logged by library code\r\n      if (cArgs.length === 1) {\r\n        const a = cArgs[0];\r\n        if (isExitSentinel(a)) return;\r\n        // a library may have stringified the sentinel before logging\r\n        // (e.g. console.error(String(err))). message format is stable\r\n        // so matching on toString is fine. worst case we swallow a user\r\n        // log line that happens to start with the same prefix.\r\n        if (typeof a === \"string\" && a.startsWith(\"Error: Process exited with code\")) return;\r\n      }\r\n      // error/warn → stderr, everything else → stdout\r\n      const line = utilFormat(cArgs[0], ...cArgs.slice(1)) + \"\\n\";\r\n      m === \"error\" ? pushErr(line) : pushOut(line);\r\n    },\r\n    onStdout: pushOut,\r\n    onStderr: pushErr,\r\n    workerThreadsOverride: opts?.workerThreadsOverride,\r\n  });\r\n\r\n  const proc = sandbox.getProcess();\r\n\r\n  // sync shell cwd when process.chdir() is called (create-next-app etc. depend on this)\r\n  proc._chdirHook = (dir: string) => {\r\n    if (_shell) _shell.setCwd(dir);\r\n  };\r\n\r\n  // resolves when proc.exit() is called. the wait loop races this against\r\n  // drainPromise/haltPromise so an exit() from an event handler (e.g.\r\n  // vite's `q` shortcut) wakes the loop right away instead of waiting\r\n  // for the next handle drain.\r\n  let exitResolve!: () => void;\r\n  const exitPromise = new Promise<void>((r) => { exitResolve = r; });\r\n\r\n  proc.exit = ((c = 0) => {\r\n    // suppress exit when dev servers are active (SES/error handlers call exit(1) but we want to keep serving)\r\n    if (getAllServers().size > 0 && c !== 0) {\r\n      return;\r\n    }\r\n    if (!didExit) {\r\n      didExit = true;\r\n      code = c;\r\n      proc.emit(\"exit\", c);\r\n      exitResolve();\r\n    }\r\n    // always throw to halt. matches real node process.exit() which\r\n    // terminates immediately. TLA .catch and try/catch use isExitSentinel()\r\n    // to detect and suppress this unwind.\r\n    throw new ProcessExitSentinel(c);\r\n  }) as (c?: number) => never;\r\n\r\n  proc.argv = [\"node\", resolved, ...args];\r\n\r\n  // wire IPC for forked children\r\n  if (_ipcSendFn) {\r\n    proc.send = ((msg: unknown, _cb?: (e: Error | null) => void): boolean => {\r\n      if (_ipcSendFn) {\r\n        _ipcSendFn(msg);\r\n        if (typeof _cb === \"function\") _cb(null);\r\n        return true;\r\n      }\r\n      return false;\r\n    }) as any;\r\n    proc.connected = true;\r\n    proc.disconnect = (() => {\r\n      proc.connected = false;\r\n    }) as () => void;\r\n\r\n    // incoming IPC from parent → emit on process (also replays queued messages)\r\n    setIPCReceiveHandler((data: unknown) => {\r\n      proc.emit(\"message\", data);\r\n    });\r\n  }\r\n\r\n  const prevLiveStdin = _liveStdin;\r\n  // capture locally -- the module-level _haltSignal gets cleared by clearStreamingCallbacks()\r\n  // while this ENB's wait loop may still be running\r\n  const myHaltSignal = getHaltSignal();\r\n  if (myHaltSignal) {\r\n    proc.stdout.isTTY = true;\r\n    proc.stderr.isTTY = true;\r\n    proc.stdin.isTTY = true;\r\n    // sync terminal dimensions for TUI libraries\r\n    const cols = getTermCols();\r\n    const rows = getTermRows();\r\n    proc.stdout.columns = cols;\r\n    proc.stdout.rows = rows;\r\n    proc.stderr.columns = cols;\r\n    proc.stderr.rows = rows;\r\n    // stdin intentionally skipped -- real Node's tty.ReadStream has no\r\n    // columns/rows/resize, TUIs watch process.stdout for dimensions\r\n    proc.stdin.setRawMode = (flag: boolean) => {\r\n      proc.stdin.isRaw = flag;\r\n      // notify terminal so it switches echo mode\r\n      if (_rawModeChangeCb) _rawModeChangeCb(flag);\r\n      return proc.stdin;\r\n    };\r\n    _liveStdin = proc.stdin;\r\n    // also update context's liveStdin\r\n    const ctx = getActiveContext();\r\n    if (ctx) ctx.liveStdin = proc.stdin;\r\n\r\n    // register with the resize broadcaster so live SIGWINCH-style updates\r\n    // reach the running script's process.stdout / stderr / stdin\r\n    _activeProcs.add(proc as any);\r\n  }\r\n\r\n  // forked children keep an IPCChannel handle for the whole fork lifetime,\r\n  // released on disconnect or exit. \"IPCChannel\" matches what real node\r\n  // reports from process.getActiveResourcesInfo() for fork IPC channels.\r\n  const isFork = !!opts?.isFork;\r\n  let ipcHandle: Handle | null = null;\r\n  if (isFork) {\r\n    ipcHandle = getRegistry().register(\"IPCChannel\");\r\n    const origDisconnect = proc.disconnect;\r\n    proc.disconnect = (() => {\r\n      origDisconnect?.call(proc);\r\n      ipcHandle?.close();\r\n      ipcHandle = null;\r\n    }) as () => void;\r\n  }\r\n\r\n  let scriptError: Error | null = null;\r\n  let tlaSettled = false;\r\n  // wake the loop on TLA settle so we don't have to poll\r\n  let tlaResolve!: () => void;\r\n  const tlaDonePromise = new Promise<void>((r) => { tlaResolve = r; });\r\n\r\n  try {\r\n    const tlaPromise = sandbox.runFileTLA(resolved);\r\n    tlaPromise\r\n      .catch((e) => {\r\n        if (isExitSentinel(e)) {\r\n          return;\r\n        }\r\n        const msg = formatThrown(e);\r\n        pushErr(`Error: ${msg}\\n`);\r\n        if (!didExit) {\r\n          didExit = true;\r\n          code = 1;\r\n        }\r\n      })\r\n      .finally(() => {\r\n        tlaSettled = true;\r\n        tlaResolve();\r\n      });\r\n  } catch (e) {\r\n    if (isExitSentinel(e)) {\r\n      // handled by didExit flag\r\n    } else {\r\n      const msg = formatThrown(e);\r\n      scriptError = e instanceof Error ? e : new Error(msg);\r\n    }\r\n  }\r\n\r\n  const cleanup = () => {\r\n    if (savedProcess) (globalThis as any).process = savedProcess;\r\n  };\r\n\r\n  if (scriptError) {\r\n    cleanup();\r\n    const errMsg = scriptError.message || scriptError.name || \"Unknown error\";\r\n    const errStack = scriptError.stack || \"\";\r\n    const fullMsg =\r\n      errStack && !errStack.includes(errMsg)\r\n        ? `${errMsg}\\n${errStack}`\r\n        : errStack || errMsg;\r\n    return { stdout: out, stderr: err + `Error: ${fullMsg}\\n`, exitCode: 1 };\r\n  }\r\n\r\n  // process.exit() called synchronously -- bail\r\n  if (didExit) {\r\n    cleanup();\r\n    return { stdout: out, stderr: err, exitCode: code };\r\n  }\r\n\r\n  // yield once before the first wait-loop decision. crossing a macrotask\r\n  // boundary drains the whole microtask queue, which lets deep await chains\r\n  // (common in create-qwik style CLIs: await a; await b; await c; finally\r\n  // setTimeout) reach their Handle-registering point before we check\r\n  // activeRefedCount.\r\n  await new Promise<void>((r) => _nativeSetTimeout(r, 0));\r\n\r\n  // node exit rule, libuv parity: the loop is alive iff TLA is pending or\r\n  // activeRefedCount > 0. no timeouts, no output heuristics. every async\r\n  // primitive refs its own Handle and we trust the counter.\r\n  const registry = getRegistry();\r\n  const shouldStayAlive = (): boolean => {\r\n    if (!tlaSettled) return true;\r\n    return registry.activeRefedCount() > 0;\r\n  };\r\n\r\n  // resolve the tentative exit code node-style: explicit process.exit(c)\r\n  // wins, otherwise process.exitCode (user-settable), otherwise 0.\r\n  const currentCode = (): number => {\r\n    if (didExit) return code;\r\n    const ec = (proc as any).exitCode;\r\n    return typeof ec === \"number\" ? ec : 0;\r\n  };\r\n\r\n  // beforeExit state carries across fast-path and wait-loop exits. reset to\r\n  // false whenever activeRefedCount > 0 again so each drain-to-zero cycle\r\n  // can fire it (matches node's SpinEventLoop).\r\n  let beforeExitEmitted = false;\r\n  const emitBeforeExitOnce = async () => {\r\n    if (beforeExitEmitted) return;\r\n    beforeExitEmitted = true;\r\n    const beforeCode = currentCode();\r\n    // proc.emit is sync. if a handler calls process.exit() it throws the\r\n    // sentinel, let didExit propagate and bail without emitting further.\r\n    try {\r\n      proc.emit(\"beforeExit\", beforeCode);\r\n    } catch (e) {\r\n      if (isExitSentinel(e)) {\r\n        return;\r\n      }\r\n      // other handler errors: swallow (matches node's exit-time semantics)\r\n    }\r\n    try {\r\n      await registry.emitBeforeExit(beforeCode);\r\n    } catch (e) {\r\n      if (isExitSentinel(e)) {\r\n        return;\r\n      }\r\n    }\r\n    // full drain via a native setTimeout(0). queueMicrotask only covers\r\n    // one microtask step, but await chains keep queueing more microtasks.\r\n    // setTimeout(0) crosses a macrotask boundary and forces V8 to flush\r\n    // every pending microtask before resuming us. using the NATIVE\r\n    // setTimeout (captured before patching) means this yield doesn't\r\n    // register a tracked Handle that would inflate the refed count.\r\n    await new Promise<void>((r) => _nativeSetTimeout(r, 0));\r\n  };\r\n\r\n  // fast path: script finished synchronously with nothing scheduled.\r\n  // still emit beforeExit; handlers may schedule more work and if they\r\n  // do we fall through into the real wait loop below.\r\n  if (!myHaltSignal && !shouldStayAlive()) {\r\n    if (!didExit) await emitBeforeExitOnce();\r\n    if (!didExit && !shouldStayAlive()) {\r\n      const finalCode = currentCode();\r\n      // emit 'exit' on natural drain. node fires it once, whether the\r\n      // loop drained naturally or process.exit() was called. the exit()\r\n      // path already emitted it from the proc.exit override.\r\n      try { proc.emit(\"exit\", finalCode); } catch { /* ignore */ }\r\n      cleanup();\r\n      return { stdout: out, stderr: err, exitCode: finalCode };\r\n    }\r\n    // a beforeExit handler revived the loop, fall through to the wait loop\r\n    if (shouldStayAlive()) beforeExitEmitted = false;\r\n  }\r\n\r\n  // avoid duplicate output when same error fires as both 'error' and 'unhandledrejection'\r\n  const handledErrors = new WeakSet<object>();\r\n\r\n  const rejHandler = (ev: PromiseRejectionEvent) => {\r\n    ev.preventDefault();\r\n    const r = ev.reason;\r\n    if (isExitSentinel(r)) {\r\n      return;\r\n    }\r\n    // mark as handled so errHandler doesn't double-log\r\n    if (r != null && typeof r === \"object\") handledErrors.add(r);\r\n    try {\r\n      const hasHandler = proc.listenerCount\r\n        ? proc.listenerCount(\"unhandledRejection\") > 0\r\n        : false;\r\n      proc.emit(\"unhandledRejection\", r, ev.promise);\r\n      if (hasHandler) return;\r\n    } catch { /* ignore */ }\r\n    const rejMsg = r instanceof Error\r\n      ? `Unhandled rejection: ${r.message}\\n${r.stack ?? \"\"}\\n`\r\n      : `Unhandled rejection: ${String(r)}\\n`;\r\n    pushErr(rejMsg);\r\n  };\r\n  const errHandler = (ev: ErrorEvent) => {\r\n    ev.preventDefault();\r\n    const e = ev.error ?? new Error(ev.message || \"Unknown error\");\r\n    if (isExitSentinel(e)) {\r\n      return;\r\n    }\r\n    // same error may fire on both unhandledrejection and error, dedupe.\r\n    if (e != null && typeof e === \"object\" && handledErrors.has(e)) return;\r\n    if (e != null && typeof e === \"object\") handledErrors.add(e);\r\n    // webpack and friends register uncaughtException handlers for graceful recovery\r\n    try {\r\n      const hasUncaught = proc.listenerCount\r\n        ? proc.listenerCount(\"uncaughtException\") > 0\r\n        : false;\r\n      proc.emit(\"uncaughtException\", e);\r\n      if (hasUncaught) return;\r\n    } catch { /* ignore */ }\r\n    // if there's an unhandledRejection listener, it'll handle this, don't double-log\r\n    try {\r\n      const hasRej = proc.listenerCount\r\n        ? proc.listenerCount(\"unhandledRejection\") > 0\r\n        : false;\r\n      if (hasRej) return;\r\n    } catch { /* ignore */ }\r\n    const msg = e instanceof Error\r\n      ? `${e.stack || e.message}\\n`\r\n      : `Uncaught: ${String(e)}\\n`;\r\n    pushErr(msg);\r\n  };\r\n  // browser and Worker globalThis has addEventListener, node-test doesn't.\r\n  const hasGlobalEvents = typeof (globalThis as any).addEventListener === \"function\";\r\n  if (hasGlobalEvents) {\r\n    (globalThis as any).addEventListener(\"unhandledrejection\", rejHandler);\r\n    (globalThis as any).addEventListener(\"error\", errHandler);\r\n  }\r\n\r\n  try {\r\n    // resolves when Ctrl+C / signal fires\r\n    const haltPromise = myHaltSignal\r\n      ? new Promise<void>((r) => {\r\n          if (myHaltSignal!.aborted) { r(); return; }\r\n          myHaltSignal!.addEventListener(\"abort\", () => r(), { once: true });\r\n        })\r\n      : null;\r\n\r\n    // event-driven wait loop. wake sources:\r\n    //   drainPromise: activeRefedCount transitions to 0\r\n    //   tlaDonePromise: top-level-await settles\r\n    //   haltPromise: Ctrl+C / SIGINT\r\n    //   exitPromise: process.exit() from anywhere (including async handlers\r\n    //     like vite's `q` shortcut). without this, an exit() from a handler\r\n    //     that runs while we're awaiting drainPromise wouldn't wake us until\r\n    //     drain happens, which might never happen if readline/stdin keep\r\n    //     the loop alive.\r\n    // on any wake, check if we should still be alive. if not, emit beforeExit,\r\n    // let handlers schedule more work, re-check, exit if truly drained.\r\n\r\n    while (!didExit && !myHaltSignal?.aborted) {\r\n      // TLA still pending, wait for it (or drain/halt/exit).\r\n      if (!tlaSettled) {\r\n        const racers: Promise<unknown>[] = [\r\n          tlaDonePromise,\r\n          registry.drainPromise(),\r\n          exitPromise,\r\n        ];\r\n        if (haltPromise) racers.push(haltPromise);\r\n        await Promise.race(racers);\r\n        continue;\r\n      }\r\n\r\n      // TLA has settled. Check live handles.\r\n      if (registry.activeRefedCount() === 0) {\r\n        if (!beforeExitEmitted) {\r\n          await emitBeforeExitOnce();\r\n          if (didExit || myHaltSignal?.aborted) break;\r\n          if (registry.activeRefedCount() > 0) {\r\n            // a beforeExit handler revived us, reset for the next drain\r\n            beforeExitEmitted = false;\r\n            continue;\r\n          }\r\n        }\r\n        // Handles may close in the same turn as promise continuations that\r\n        // still need to run (e.g. await preloadSqlite() in an async script).\r\n        await new Promise<void>((r) => _nativeSetTimeout(r, 0));\r\n        if (registry.activeRefedCount() > 0) {\r\n          beforeExitEmitted = false;\r\n          continue;\r\n        }\r\n        break;\r\n      }\r\n\r\n      // something is refed, wait for drain/halt/exit.\r\n      const racers: Promise<unknown>[] = [registry.drainPromise(), exitPromise];\r\n      if (haltPromise) racers.push(haltPromise);\r\n      await Promise.race(racers);\r\n\r\n      // if anything was scheduled while draining, allow beforeExit to fire\r\n      // again on the next drain-to-zero cycle\r\n      if (registry.activeRefedCount() > 0) beforeExitEmitted = false;\r\n    }\r\n\r\n    const finalCode = currentCode();\r\n    // emit 'exit' on natural drain. process.exit() path already emitted\r\n    // it from proc.exit, so skip if didExit is true.\r\n    if (!didExit) {\r\n      try { proc.emit(\"exit\", finalCode); } catch { /* ignore */ }\r\n    }\r\n    return { stdout: out, stderr: err, exitCode: finalCode };\r\n  } finally {\r\n    cleanup();\r\n    // defuse proc.exit so floating promises don't throw unhandled rejections\r\n    proc.exit = (() => {}) as unknown as (c?: number) => never;\r\n    if (hasGlobalEvents) {\r\n      (globalThis as any).removeEventListener(\"unhandledrejection\", rejHandler);\r\n      (globalThis as any).removeEventListener(\"error\", errHandler);\r\n    }\r\n    _liveStdin = prevLiveStdin;\r\n    const ctxRestore = getActiveContext();\r\n    if (ctxRestore) ctxRestore.liveStdin = prevLiveStdin;\r\n    _activeProcs.delete(proc as any);\r\n    closeAllServers();\r\n    disposeAllTimers();\r\n    getRegistry().closeAll();\r\n    resetActiveInterfaceCount();\r\n  }\r\n  } finally {\r\n    // restore outer process context. must happen AFTER the inner finally\r\n    // has closed this script's registry and restored streaming callbacks.\r\n    // reached from every exit path including early returns and thrown\r\n    // errors from ScriptEngine construction.\r\n    setActiveContext(prevCtx);\r\n  }\r\n}\r\n\r\nasync function npxExecute(\r\n  params: string[],\r\n  ctx: ShellContext,\r\n): Promise<ShellResult> {\r\n  if (!_vol) return { stdout: \"\", stderr: \"Volume unavailable\\n\", exitCode: 1 };\r\n\r\n  // parse npx flags\r\n  let autoInstall = true;\r\n  let installPkg: string | null = null;\r\n  const filteredParams: string[] = [];\r\n  let separatorSeen = false;\r\n\r\n  for (let i = 0; i < params.length; i++) {\r\n    if (separatorSeen) {\r\n      filteredParams.push(params[i]);\r\n      continue;\r\n    }\r\n    if (params[i] === \"--\") {\r\n      separatorSeen = true;\r\n      continue;\r\n    }\r\n    if (params[i] === \"-y\" || params[i] === \"--yes\") {\r\n      autoInstall = true;\r\n      continue;\r\n    }\r\n    if (params[i] === \"-n\" || params[i] === \"--no\") {\r\n      autoInstall = false;\r\n      continue;\r\n    }\r\n    if (\r\n      (params[i] === \"-p\" || params[i] === \"--package\") &&\r\n      i + 1 < params.length\r\n    ) {\r\n      installPkg = params[++i];\r\n      continue;\r\n    }\r\n    if (params[i] === \"--help\" || params[i] === \"-h\") {\r\n      return {\r\n        stdout:\r\n          `${A_BOLD}Usage:${A_RESET} npx [options] <command> [args...]\\n\\n` +\r\n          `${A_BOLD}Options:${A_RESET}\\n` +\r\n          `  ${A_CYAN}-y${A_RESET}, ${A_CYAN}--yes${A_RESET}       Auto-confirm install\\n` +\r\n          `  ${A_CYAN}-n${A_RESET}, ${A_CYAN}--no${A_RESET}        Don't install if not found\\n` +\r\n          `  ${A_CYAN}-p${A_RESET}, ${A_CYAN}--package${A_RESET}   Specify package to install\\n` +\r\n          `  ${A_CYAN}--${A_RESET}              Separator for command args\\n`,\r\n        stderr: \"\",\r\n        exitCode: 0,\r\n      };\r\n    }\r\n    filteredParams.push(params[i]);\r\n  }\r\n\r\n  let pkgSpec = filteredParams[0];\r\n  if (!pkgSpec) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: formatErr(\"missing command\", \"npm\"),\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  let cmdName: string;\r\n  let version: string | undefined;\r\n  if (pkgSpec.startsWith(\"@\")) {\r\n    // scoped: @scope/name or @scope/name@version\r\n    const rest = pkgSpec.slice(1);\r\n    const atIdx = rest.indexOf(\"@\");\r\n    if (atIdx > 0 && rest.indexOf(\"/\") < atIdx) {\r\n      cmdName = \"@\" + rest.slice(0, atIdx);\r\n      version = rest.slice(atIdx + 1);\r\n    } else {\r\n      cmdName = pkgSpec;\r\n    }\r\n  } else {\r\n    const atIdx = pkgSpec.indexOf(\"@\");\r\n    if (atIdx > 0) {\r\n      cmdName = pkgSpec.slice(0, atIdx);\r\n      version = pkgSpec.slice(atIdx + 1);\r\n    } else {\r\n      cmdName = pkgSpec;\r\n    }\r\n  }\r\n\r\n  // -p overrides the package to install\r\n  const actualPkg = installPkg || pkgSpec;\r\n  const actualPkgName = installPkg\r\n    ? installPkg.replace(/@[^@/]+$/, \"\").replace(/^@/, \"\")\r\n    : cmdName;\r\n\r\n  let resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\r\n\r\n  // not found locally -- try installing\r\n  if (!resolvedBin && autoInstall) {\r\n    const installResult = await installPackages([actualPkg], ctx);\r\n    if (installResult.exitCode !== 0) return installResult;\r\n    resolvedBin = findBinary(cmdName, _vol, ctx.cwd);\r\n  }\r\n\r\n  if (!resolvedBin) {\r\n    return {\r\n      stdout: \"\",\r\n      stderr: `npx: command '${cmdName}' not found\\n`,\r\n      exitCode: 1,\r\n    };\r\n  }\r\n\r\n  // run directly via node handler to avoid shell re-parsing mangling arguments\r\n  return executeNodeBinary(resolvedBin, filteredParams.slice(1), ctx);\r\n}\r\n\r\nfunction findBinary(\r\n  name: string,\r\n  vol: MemoryVolume,\r\n  cwd?: string,\r\n): string | null {\r\n  const cleanName = name.startsWith(\"@\") ? name : name;\r\n  const shortName = cleanName.includes(\"/\")\r\n    ? cleanName.split(\"/\").pop()!\r\n    : cleanName;\r\n\r\n  // cwd-local first, then root fallback\r\n  const searchRoots =\r\n    cwd && cwd !== \"/\"\r\n      ? [`${cwd}/node_modules`, `/node_modules`]\r\n      : [`/node_modules`];\r\n\r\n  for (const nmDir of searchRoots) {\r\n    // check package.json bin field for the real JS entry point\r\n    const pkgJsonPath = `${nmDir}/${cleanName}/package.json`;\r\n    if (vol.existsSync(pkgJsonPath)) {\r\n      try {\r\n        const pkg = JSON.parse(\r\n          vol.readFileSync(pkgJsonPath, \"utf8\") as string,\r\n        ) as PackageManifest;\r\n        if (pkg.bin) {\r\n          if (typeof pkg.bin === \"string\") {\r\n            return `${nmDir}/${cleanName}/${pkg.bin}`;\r\n          }\r\n          if (typeof pkg.bin === \"object\") {\r\n            const binMap = pkg.bin as Record<string, string>;\r\n            const binEntry =\r\n              binMap[shortName] ||\r\n              binMap[cleanName] ||\r\n              Object.values(binMap)[0];\r\n            if (binEntry) return `${nmDir}/${cleanName}/${binEntry}`;\r\n          }\r\n        }\r\n        // fallback to main\r\n        if (pkg.main) return `${nmDir}/${cleanName}/${pkg.main}`;\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n\r\n    // .bin stubs -- resolve through to the actual JS target they reference\r\n    const binPath = `${nmDir}/.bin/${name}`;\r\n    if (vol.existsSync(binPath)) {\r\n      try {\r\n        const stub = vol.readFileSync(binPath, \"utf8\");\r\n        // stubs look like: node \"/node_modules/pkg/index.js\" \"$@\"\r\n        const match = stub.match(/node\\s+\"([^\"]+)\"/);\r\n        if (match && vol.existsSync(match[1])) return match[1];\r\n      } catch {\r\n        /* ignore */\r\n      }\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nexport interface RunOptions {\r\n  cwd?: string;\r\n  env?: Record<string, string>;\r\n  encoding?: BufferEncoding | \"buffer\";\r\n  timeout?: number;\r\n  maxBuffer?: number;\r\n  shell?: string | boolean;\r\n}\r\n\r\nexport type RunCallback = (\r\n  err: Error | null,\r\n  stdout: string | Buffer,\r\n  stderr: string | Buffer,\r\n) => void;\r\n\r\nexport interface SpawnConfig {\r\n  cwd?: string;\r\n  env?: Record<string, string>;\r\n  shell?: boolean | string;\r\n  stdio?: \"pipe\" | \"inherit\" | \"ignore\" | Array<\"pipe\" | \"inherit\" | \"ignore\">;\r\n}\r\n\r\nexport function exec(\r\n  command: string,\r\n  optsOrCb?: RunOptions | RunCallback,\r\n  cb?: RunCallback,\r\n): ShellProcess {\r\n  let options: RunOptions = {};\r\n  let done: RunCallback | undefined;\r\n  if (typeof optsOrCb === \"function\") {\r\n    done = optsOrCb;\r\n  } else if (optsOrCb) {\r\n    options = optsOrCb;\r\n    done = cb;\r\n  }\r\n\r\n  const child = new ShellProcess();\r\n\r\n  if (!_shell) {\r\n    const e = new Error(\"[Nodepod] exec requires shell. Call initShellExec() first.\");\r\n    setTimeout(() => {\r\n      child.emit(\"error\", e);\r\n      if (done) done(e, \"\", \"\");\r\n    }, 0);\r\n    return child;\r\n  }\r\n\r\n  const cwd = options.cwd ?? getShellCwd();\r\n  const env = (options.env as Record<string, string>) ?? undefined;\r\n\r\n  // run inline via NodepodShell -- only fork() gets a dedicated worker\r\n  _shell.exec(command, { cwd, env }).then(\r\n    (result) => {\r\n      const { stdout, stderr, exitCode } = result;\r\n      if (stdout) child.stdout?.push(Buffer.from(stdout));\r\n      if (stderr) child.stderr?.push(Buffer.from(stderr));\r\n      child.stdout?.push(null);\r\n      child.stderr?.push(null);\r\n      child.exitCode = exitCode;\r\n      child.emit(\"close\", exitCode, null);\r\n      child.emit(\"exit\", exitCode, null);\r\n      if (done) {\r\n        if (exitCode !== 0) {\r\n          const e = new Error(`Command failed: ${command}`);\r\n          (e as any).code = exitCode;\r\n          done(e, stdout ?? \"\", stderr ?? \"\");\r\n        } else {\r\n          done(null, stdout ?? \"\", stderr ?? \"\");\r\n        }\r\n      }\r\n    },\r\n    (e) => {\r\n      child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n      if (done) done(e instanceof Error ? e : new Error(String(e)), \"\", \"\");\r\n    },\r\n  );\r\n\r\n  return child;\r\n}\r\n\r\nexport function execSync(cmd: string, opts?: RunOptions): string | Buffer {\r\n  const trimmed = cmd.trim();\r\n  const encoding = opts?.encoding;\r\n\r\n  // fast path: trivially synchronous commands (version checks, echo, pwd)\r\n  const result = handleSyncCommand(trimmed, opts);\r\n  if (result !== null) {\r\n    if (encoding === \"buffer\") return Buffer.from(result);\r\n    return result;\r\n  }\r\n\r\n  // true blocking path via Atomics.wait()\r\n  if (!_syncChannel) {\r\n    throw new Error(\r\n      \"[Nodepod] execSync needs SharedArrayBuffer + SyncChannel. \" +\r\n      \"enable COOP/COEP headers, or drop `enableSharedArrayBuffer: false` from NodepodOptions.\",\r\n    );\r\n  }\r\n\r\n  const slot = _syncChannel.allocateSlot();\r\n  const cwd = opts?.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\r\n  const env = (opts?.env as Record<string, string>) ?? {};\r\n\r\n  (self as any).postMessage({\r\n    type: \"spawn-sync\",\r\n    requestId: _nextSyncRequestId++,\r\n    command: trimmed.split(/\\s+/)[0],\r\n    args: trimmed.split(/\\s+/).slice(1),\r\n    cwd,\r\n    env,\r\n    syncSlot: slot,\r\n    shellCommand: trimmed,\r\n  });\r\n\r\n  // blocks until main thread spawns child and child completes\r\n  const { exitCode, stdout } = _syncChannel.waitForResult(slot, 120_000);\r\n\r\n  if (exitCode !== 0) {\r\n    const err: any = new Error(`Command failed: ${trimmed}\\n${stdout}`);\r\n    err.status = exitCode;\r\n    err.stderr = Buffer.from(\"\");\r\n    err.stdout = Buffer.from(stdout);\r\n    err.output = [null, err.stdout, err.stderr];\r\n    throw err;\r\n  }\r\n\r\n  if (encoding === \"buffer\") return Buffer.from(stdout);\r\n  return stdout;\r\n}\r\n\r\nlet _nextSyncRequestId = 1;\r\n\r\nconst KNOWN_BINS: Record<string, string> = {\r\n  node: \"/usr/local/bin/node\",\r\n  npm: \"/usr/local/bin/npm\",\r\n  npx: \"/usr/local/bin/npx\",\r\n  pnpm: \"/usr/local/bin/pnpm\",\r\n  yarn: \"/usr/local/bin/yarn\",\r\n  bun: \"/usr/local/bin/bun\",\r\n  bunx: \"/usr/local/bin/bunx\",\r\n  git: \"/usr/bin/git\",\r\n};\r\n\r\nfunction isBinaryAvailable(name: string): string | null {\r\n  if (KNOWN_BINS[name]) return KNOWN_BINS[name];\r\n  if (_vol) {\r\n    const binPath = `/node_modules/.bin/${name}`;\r\n    if (_vol.existsSync(binPath)) return binPath;\r\n  }\r\n  return null;\r\n}\r\n\r\n// throw an error matching real Node.js execSync behaviour for failed commands\r\nfunction throwCommandNotFound(cmd: string): never {\r\n  const err: any = new Error(\r\n    `Command failed: ${cmd}\\n/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`,\r\n  );\r\n  err.status = 127;\r\n  err.stderr = Buffer.from(`/bin/sh: 1: ${cmd.split(/\\s+/)[0]}: not found\\n`);\r\n  err.stdout = Buffer.from(\"\");\r\n  throw err;\r\n}\r\n\r\nfunction _findGitDir(cwd: string): { gitDir: string; workDir: string } | null {\r\n  if (!_vol) return null;\r\n  let dir = cwd;\r\n  while (true) {\r\n    const gitPath = dir + \"/.git\";\r\n    try { if (_vol.existsSync(gitPath)) return { gitDir: gitPath, workDir: dir }; } catch { /* */ }\r\n    const parent = dir.substring(0, dir.lastIndexOf(\"/\")) || \"/\";\r\n    if (parent === dir) break;\r\n    dir = parent;\r\n  }\r\n  try { if (_vol.existsSync(\"/.git\")) return { gitDir: \"/.git\", workDir: \"/\" }; } catch { /* */ }\r\n  return null;\r\n}\r\n\r\nfunction _readHeadBranch(gitDir: string): string {\r\n  try {\r\n    const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    if (head.startsWith(\"ref: refs/heads/\")) return head.slice(16);\r\n    return head.slice(0, 7);\r\n  } catch { return \"main\"; }\r\n}\r\n\r\nfunction _resolveHeadHash(gitDir: string): string | null {\r\n  try {\r\n    const head = (_vol!.readFileSync(gitDir + \"/HEAD\", \"utf8\" as any) as string).trim();\r\n    if (head.startsWith(\"ref: \")) {\r\n      const refPath = gitDir + \"/\" + head.slice(5);\r\n      return (_vol!.readFileSync(refPath, \"utf8\" as any) as string).trim();\r\n    }\r\n    return head;\r\n  } catch { return null; }\r\n}\r\n\r\nfunction _readGitConfigKey(gitDir: string, key: string): string | null {\r\n  try {\r\n    const config = _vol!.readFileSync(gitDir + \"/config\", \"utf8\" as any) as string;\r\n    const parts = key.split(\".\");\r\n    let sectionName: string, subSection: string | null = null, propName: string;\r\n    if (parts.length === 3) { sectionName = parts[0]; subSection = parts[1]; propName = parts[2]; }\r\n    else if (parts.length === 2) { sectionName = parts[0]; propName = parts[1]; }\r\n    else return null;\r\n    const lines = config.split(\"\\n\");\r\n    let inSection = false;\r\n    for (const line of lines) {\r\n      const trimmed = line.trim();\r\n      if (trimmed.startsWith(\"[\")) {\r\n        inSection = subSection\r\n          ? trimmed === `[${sectionName} \"${subSection}\"]`\r\n          : trimmed === `[${sectionName}]`;\r\n        continue;\r\n      }\r\n      if (inSection) {\r\n        const m = trimmed.match(/^(\\w+)\\s*=\\s*(.*)$/);\r\n        if (m && m[1] === propName) return m[2].trim();\r\n      }\r\n    }\r\n  } catch { /* */ }\r\n  return null;\r\n}\r\n\r\nfunction handleSyncCommand(cmd: string, opts?: RunOptions): string | null {\r\n  if (/^node\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NODE + \"\\n\";\r\n  if (/^npm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.NPM + \"\\n\";\r\n  if (/^pnpm\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.PNPM + \"\\n\";\r\n  if (/^yarn\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.YARN + \"\\n\";\r\n  if (/^bun\\s+(--version|-v)\\s*$/.test(cmd)) return VERSIONS.BUN + \"\\n\";\r\n\r\n  // which / command -v\r\n  const whichMatch = cmd.match(/^(?:which|command\\s+-v)\\s+(\\S+)\\s*$/);\r\n  if (whichMatch) {\r\n    const binName = whichMatch[1];\r\n    const binPath = isBinaryAvailable(binName);\r\n    if (binPath) return binPath + \"\\n\";\r\n    throwCommandNotFound(cmd);\r\n  }\r\n\r\n  // <binary> --version / -v\r\n  const versionMatch = cmd.match(/^(\\S+)\\s+(--version|-v)\\s*$/);\r\n  if (versionMatch) {\r\n    const binName = versionMatch[1];\r\n    if (\r\n      binName === \"node\" ||\r\n      binName === \"npm\" ||\r\n      binName === \"pnpm\" ||\r\n      binName === \"yarn\" ||\r\n      binName === \"bun\"\r\n    )\r\n      return null; // handled above\r\n    if (!isBinaryAvailable(binName)) throwCommandNotFound(cmd);\r\n    // known binary but no version handler -- fall through to async\r\n  }\r\n\r\n  // registry queries (Next.js uses this to find npm registry)\r\n  if (/^(?:npm|yarn|pnpm)\\s+config\\s+get\\s+registry\\s*$/.test(cmd)) {\r\n    return NPM_REGISTRY_URL_SLASH.replace(/\\/$/, \"\") + \"\\n\";\r\n  }\r\n\r\n  const echoMatch = cmd.match(/^echo\\s+[\"']?(.*?)[\"']?\\s*$/);\r\n  if (echoMatch) return echoMatch[1] + \"\\n\";\r\n  if (/^uname\\s+-s\\s*$/.test(cmd)) return \"Linux\\n\";\r\n  if (/^uname\\s+-m\\s*$/.test(cmd)) return \"x86_64\\n\";\r\n  if (/^uname\\s+-a\\s*$/.test(cmd))\r\n    return \"Linux nodepod 5.10.0 #1 SMP x86_64 GNU/Linux\\n\";\r\n  // git fast-path for sync commands\r\n  if (/^git\\s+(--version|-v)\\s*$/.test(cmd) || cmd === \"git --version\") {\r\n    return \"git version \" + VERSIONS.GIT + \"\\n\";\r\n  }\r\n  if (_vol) {\r\n    const gitRevParseMatch = cmd.match(/^git\\s+rev-parse\\s+(.+)$/);\r\n    if (gitRevParseMatch) {\r\n      const gitArgs = gitRevParseMatch[1].trim();\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gitArgs === \"--show-toplevel\") return gd ? gd.workDir + \"\\n\" : \"\";\r\n      if (gitArgs === \"--is-inside-work-tree\") return gd ? \"true\\n\" : \"false\\n\";\r\n      if (gitArgs === \"--git-dir\") return gd ? \".git\\n\" : \"\";\r\n      if (gitArgs === \"--is-bare-repository\") return \"false\\n\";\r\n      if (gitArgs === \"--abbrev-ref HEAD\" && gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\r\n      if ((gitArgs === \"HEAD\" || gitArgs === \"--verify HEAD\") && gd) {\r\n        const h = _resolveHeadHash(gd.gitDir);\r\n        return h ? h + \"\\n\" : \"\";\r\n      }\r\n      if (gitArgs === \"--short HEAD\" && gd) {\r\n        const h = _resolveHeadHash(gd.gitDir);\r\n        return h ? h.slice(0, 7) + \"\\n\" : \"\";\r\n      }\r\n    }\r\n    if (/^git\\s+branch\\s+--show-current\\s*$/.test(cmd)) {\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gd) return _readHeadBranch(gd.gitDir) + \"\\n\";\r\n    }\r\n    const gitConfigGetMatch = cmd.match(/^git\\s+config\\s+(?:--get\\s+)?(\\S+)\\s*$/);\r\n    if (gitConfigGetMatch) {\r\n      const cwd = opts?.cwd || \"/\";\r\n      const gd = _findGitDir(cwd);\r\n      if (gd) {\r\n        const val = _readGitConfigKey(gd.gitDir, gitConfigGetMatch[1]);\r\n        return val !== null ? val + \"\\n\" : \"\";\r\n      }\r\n      return \"\";\r\n    }\r\n  }\r\n  // catch-all for git\r\n  if (/^git\\s/.test(cmd)) return \"\";\r\n  if (cmd === \"true\" || cmd === \":\") return \"\";\r\n  if (cmd === \"pwd\") return (opts?.cwd || \"/\") + \"\\n\";\r\n  if (cmd.startsWith(\"cat \") && _vol) {\r\n    const path = cmd.slice(4).trim().replace(/['\"]/g, \"\");\r\n    try {\r\n      return _vol.readFileSync(path, \"utf8\" as any);\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n  if ((cmd === \"ls\" || cmd.startsWith(\"ls \")) && _vol) {\r\n    const dir =\r\n      cmd === \"ls\"\r\n        ? opts?.cwd || \"/\"\r\n        : cmd.slice(3).trim().replace(/['\"]/g, \"\");\r\n    try {\r\n      return _vol.readdirSync(dir).join(\"\\n\") + \"\\n\";\r\n    } catch {\r\n      return \"\";\r\n    }\r\n  }\r\n  const testMatch = cmd.match(\r\n    /^(?:test|\\[)\\s+(-[fd])\\s+[\"']?(.*?)[\"']?\\s*\\]?\\s*$/,\r\n  );\r\n  if (testMatch && _vol) {\r\n    const flag = testMatch[1];\r\n    const path = testMatch[2];\r\n    try {\r\n      const st = _vol.statSync(path);\r\n      if (flag === \"-f\" && st.isFile()) return \"\";\r\n      if (flag === \"-d\" && st.isDirectory()) return \"\";\r\n    } catch {\r\n      /* */\r\n    }\r\n    return \"\";\r\n  }\r\n  return null;\r\n}\r\n\r\n// stdio normalizer. accepts:\r\n//   'pipe'|'inherit'|'ignore'     expanded to [same, same, same]\r\n//   ['pipe','inherit','ignore']   kept as-is, padded to 3\r\n//   undefined                     'pipe' (node's default for spawn)\r\nfunction normalizeStdio(\r\n  stdio: SpawnConfig[\"stdio\"] | undefined,\r\n): [\"pipe\" | \"inherit\" | \"ignore\", \"pipe\" | \"inherit\" | \"ignore\", \"pipe\" | \"inherit\" | \"ignore\"] {\r\n  const norm = (v: unknown): \"pipe\" | \"inherit\" | \"ignore\" => {\r\n    if (v === \"inherit\" || v === \"ignore\" || v === \"pipe\") return v;\r\n    // streams, fds, null/undefined: treat as pipe\r\n    return \"pipe\";\r\n  };\r\n  if (stdio == null) return [\"pipe\", \"pipe\", \"pipe\"];\r\n  if (typeof stdio === \"string\") {\r\n    const v = norm(stdio);\r\n    return [v, v, v];\r\n  }\r\n  if (Array.isArray(stdio)) {\r\n    return [norm(stdio[0]), norm(stdio[1]), norm(stdio[2])];\r\n  }\r\n  return [\"pipe\", \"pipe\", \"pipe\"];\r\n}\r\n\r\nexport function spawn(\r\n  command: string,\r\n  argsOrOpts?: string[] | SpawnConfig,\r\n  opts?: SpawnConfig,\r\n): ShellProcess {\r\n  let spawnArgs: string[] = [];\r\n  let cfg: SpawnConfig = {};\r\n  if (Array.isArray(argsOrOpts)) {\r\n    spawnArgs = argsOrOpts;\r\n    cfg = opts ?? {};\r\n  } else if (argsOrOpts) cfg = argsOrOpts;\r\n\r\n  const child = new ShellProcess();\r\n  // normalize stdio, node parity: 'pipe' default, 'inherit' to share parent\r\n  // streams, 'ignore' to drop. current spawn protocol only carries one\r\n  // top-level \"pipe\"|\"inherit\" so we pass \"inherit\" when stdin is inherit,\r\n  // else \"pipe\". stdout/stderr inherit works anyway because the streaming\r\n  // onStdout/onStderr callbacks route through getStdoutSink/getStderrSink.\r\n  const stdioArr = normalizeStdio(cfg.stdio);\r\n  const stdinInherit = stdioArr[0] === \"inherit\";\r\n  const stdoutInherit = stdioArr[1] === \"inherit\";\r\n  const stderrInherit = stdioArr[2] === \"inherit\";\r\n\r\n  // spawn gets a dedicated worker (streaming output, long-lived). exec runs\r\n  // inline since it collects all output at the end.\r\n  if (_spawnChildFn) {\r\n    const cwd = cfg.cwd ?? getShellCwd();\r\n    const env = (cfg.env as Record<string, string>) ?? {};\r\n    const fullCmd = spawnArgs.length ? `${command} ${spawnArgs.join(\" \")}` : command;\r\n\r\n    // keep parent alive while child is running. stash the Handle on the\r\n    // ShellProcess so its .ref()/.unref() can forward to it.\r\n    const childHandle = getRegistry().register(\"ChildProcess\");\r\n    (child as any)._elHandle = childHandle;\r\n\r\n    // builtins like ls don't stream, so track whether callbacks actually fired\r\n    let stdoutStreamed = false;\r\n    let stderrStreamed = false;\r\n\r\n    _spawnChildFn(command, spawnArgs, {\r\n      cwd,\r\n      env,\r\n      stdio: stdinInherit ? \"inherit\" : \"pipe\",\r\n      onStdout: (data: string) => {\r\n        stdoutStreamed = true;\r\n        // pipe: buffer for parent to read via child.stdout.on('data')\r\n        // ignore: drop entirely\r\n        if (stdioArr[1] === \"pipe\") child.stdout?.push(Buffer.from(data));\r\n        // inherit: also route through parent's stdout sink (terminal).\r\n        // we always route to the terminal sink for compatibility, this is\r\n        // what pre-stdio-normalization behavior did.\r\n        if (stdoutInherit) {\r\n          const sink = getStdoutSink();\r\n          if (sink) sink(data);\r\n        }\r\n      },\r\n      onStderr: (data: string) => {\r\n        stderrStreamed = true;\r\n        if (stdioArr[2] === \"pipe\") child.stderr?.push(Buffer.from(data));\r\n        if (stderrInherit) {\r\n          const sink = getStderrSink();\r\n          if (sink) sink(data);\r\n        }\r\n      },\r\n    }).then(({ exitCode, stdout, stderr }) => {\r\n      childHandle.close();\r\n      // For commands that don't stream (builtins), push the buffered output\r\n      if (!stdoutStreamed && stdout) child.stdout?.push(Buffer.from(stdout));\r\n      if (!stderrStreamed && stderr) child.stderr?.push(Buffer.from(stderr));\r\n      child.stdout?.push(null);\r\n      child.stderr?.push(null);\r\n      child.exitCode = exitCode;\r\n      child.emit(\"close\", exitCode, null);\r\n      child.emit(\"exit\", exitCode, null);\r\n    }).catch((e) => {\r\n      childHandle.close();\r\n      child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n    });\r\n  } else if (_shell) {\r\n    // fallback: inline execution (no streaming)\r\n    const cwd = cfg.cwd ?? getShellCwd();\r\n    const env = (cfg.env as Record<string, string>) ?? undefined;\r\n    const fullCmd = spawnArgs.length\r\n      ? `${command} ${spawnArgs.map((a) => a.includes(\" \") ? `\"${a}\"` : a).join(\" \")}`\r\n      : command;\r\n\r\n    _shell.exec(fullCmd, { cwd, env }).then(\r\n      (result) => {\r\n        const { stdout, stderr, exitCode } = result;\r\n        if (stdout) child.stdout?.push(Buffer.from(stdout));\r\n        if (stderr) child.stderr?.push(Buffer.from(stderr));\r\n        child.stdout?.push(null);\r\n        child.stderr?.push(null);\r\n        child.exitCode = exitCode;\r\n        child.emit(\"close\", exitCode, null);\r\n        child.emit(\"exit\", exitCode, null);\r\n      },\r\n      (e) => {\r\n        child.emit(\"error\", e instanceof Error ? e : new Error(String(e)));\r\n      },\r\n    );\r\n  } else {\r\n    setTimeout(() => {\r\n      child.emit(\"error\", new Error(\"[Nodepod] spawn requires shell or worker mode.\"));\r\n    }, 0);\r\n  }\r\n\r\n  // real Node emits this on next tick so listeners can attach first\r\n  queueMicrotask(() => child.emit(\"spawn\"));\r\n\r\n  return child;\r\n}\r\n\r\nexport function spawnSync(\r\n  cmd: string,\r\n  args?: string[] | SpawnConfig,\r\n  opts?: SpawnConfig,\r\n): {\r\n  stdout: Buffer;\r\n  stderr: Buffer;\r\n  status: number;\r\n  signal: null;\r\n  pid: number;\r\n  output: [null, Buffer, Buffer];\r\n  error?: Error;\r\n} {\r\n  let spawnArgs: string[] = [];\r\n  let cfg: SpawnConfig = {};\r\n  if (Array.isArray(args)) {\r\n    spawnArgs = args;\r\n    cfg = opts ?? {};\r\n  } else if (args) {\r\n    cfg = args;\r\n  }\r\n\r\n  const full = spawnArgs.length ? `${cmd} ${spawnArgs.join(\" \")}` : cmd;\r\n  const syncResult = handleSyncCommand(full, { cwd: cfg.cwd, env: cfg.env });\r\n\r\n  if (syncResult !== null) {\r\n    const stdout = Buffer.from(syncResult);\r\n    const stderr = Buffer.from(\"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: 0,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n    };\r\n  }\r\n\r\n  // true blocking path via Atomics.wait()\r\n  if (!_syncChannel) {\r\n    throw new Error(\r\n      \"[Nodepod] spawnSync needs SharedArrayBuffer + SyncChannel. \" +\r\n      \"enable COOP/COEP headers, or drop `enableSharedArrayBuffer: false` from NodepodOptions.\",\r\n    );\r\n  }\r\n\r\n  const slot = _syncChannel.allocateSlot();\r\n  const cwd = cfg.cwd ?? (globalThis as any).process?.cwd?.() ?? \"/\";\r\n  const env = (cfg.env as Record<string, string>) ?? {};\r\n  // carry stdio to the main thread so it knows whether terminal stdin should\r\n  // be forwarded to the child (inherit) vs ignored (pipe). see the spawn-sync\r\n  // handler in process-manager.ts.\r\n  const stdioArr = normalizeStdio(cfg.stdio);\r\n\r\n  (self as any).postMessage({\r\n    type: \"spawn-sync\",\r\n    requestId: _nextSyncRequestId++,\r\n    command: full.split(/\\s+/)[0],\r\n    args: full.split(/\\s+/).slice(1),\r\n    cwd,\r\n    env,\r\n    syncSlot: slot,\r\n    shellCommand: full,\r\n    stdio: stdioArr,\r\n  });\r\n\r\n  // blocks until main thread spawns child and child completes\r\n  try {\r\n    const { exitCode, stdout: stdoutStr } = _syncChannel.waitForResult(slot, 120_000);\r\n    const stdout = Buffer.from(stdoutStr);\r\n    const stderr = Buffer.from(\"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: exitCode,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n    };\r\n  } catch (e: any) {\r\n    const stdout = Buffer.from(e?.stdout ?? \"\");\r\n    const stderr = Buffer.from(e?.message ?? \"\");\r\n    return {\r\n      stdout,\r\n      stderr,\r\n      status: e?.status ?? 1,\r\n      signal: null,\r\n      pid: MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE),\r\n      output: [null, stdout, stderr],\r\n      error: e instanceof Error ? e : new Error(String(e)),\r\n    };\r\n  }\r\n}\r\n\r\nexport function execFileSync(\r\n  file: string,\r\n  args?: string[],\r\n  opts?: RunOptions,\r\n): string | Buffer {\r\n  const cmd = args?.length ? `${file} ${args.join(\" \")}` : file;\r\n  return execSync(cmd, opts);\r\n}\r\n\r\nexport function execFile(\r\n  file: string,\r\n  argsOrOpts?: string[] | RunOptions | RunCallback,\r\n  optsOrCb?: RunOptions | RunCallback,\r\n  cb?: RunCallback,\r\n): ShellProcess {\r\n  let fileArgs: string[] = [];\r\n  let options: RunOptions = {};\r\n  let done: RunCallback | undefined;\r\n\r\n  if (Array.isArray(argsOrOpts)) {\r\n    fileArgs = argsOrOpts;\r\n    if (typeof optsOrCb === \"function\") done = optsOrCb;\r\n    else if (optsOrCb) {\r\n      options = optsOrCb;\r\n      done = cb;\r\n    }\r\n  } else if (typeof argsOrOpts === \"function\") {\r\n    done = argsOrOpts;\r\n  } else if (argsOrOpts) {\r\n    options = argsOrOpts;\r\n    done = optsOrCb as RunCallback;\r\n  }\r\n\r\n  const cmd = fileArgs.length ? `${file} ${fileArgs.join(\" \")}` : file;\r\n  return exec(cmd, options, done);\r\n}\r\n\r\nexport function fork(\r\n  modulePath: string,\r\n  argsOrOpts?: string[] | Record<string, unknown>,\r\n  opts?: Record<string, unknown>,\r\n): ShellProcess {\r\n  let args: string[] = [];\r\n  let cfg: Record<string, unknown> = {};\r\n  if (Array.isArray(argsOrOpts)) {\r\n    args = argsOrOpts;\r\n    cfg = opts ?? {};\r\n  } else if (argsOrOpts) cfg = argsOrOpts;\r\n\r\n  const cwd = (cfg.cwd as string) || getShellCwd();\r\n  const env = (cfg.env as Record<string, string>) ||\r\n    (_shell?.getEnv() ?? {});\r\n\r\n  const resolved = modulePath.startsWith(\"/\")\r\n    ? modulePath\r\n    : `${cwd}/${modulePath}`.replace(/\\/+/g, \"/\");\r\n\r\n  const child = new ShellProcess();\r\n  child.connected = true;\r\n  child.spawnargs = [\"node\", resolved, ...args];\r\n  child.spawnfile = \"node\";\r\n\r\n  if (!_forkChildFn) {\r\n    setTimeout(() => {\r\n      child.emit(\"error\", new Error(\"[Nodepod] fork requires worker mode. No forkChild callback set.\"));\r\n    }, 0);\r\n    return child;\r\n  }\r\n\r\n  // keep parent alive while the forked child runs. stash on ShellProcess\r\n  // so .ref()/.unref() forward to it.\r\n  const childHandle = getRegistry().register(\"ChildProcess\");\r\n  (child as any)._elHandle = childHandle;\r\n  const handle = _forkChildFn(resolved, args, {\r\n    cwd,\r\n    env,\r\n    onStdout: (data: string) => {\r\n      child.stdout?.emit(\"data\", data);\r\n      // also route through parent's stdout sink (fork inherits stdio by default)\r\n      const sink = getStdoutSink();\r\n      if (sink) sink(data);\r\n    },\r\n    onStderr: (data: string) => {\r\n      child.stderr?.emit(\"data\", data);\r\n      const sink = getStderrSink();\r\n      if (sink) sink(data);\r\n    },\r\n    onIPC: (data: unknown) => {\r\n      child.emit(\"message\", data);\r\n    },\r\n    onExit: (exitCode: number) => {\r\n      childHandle.close();\r\n      child.exitCode = exitCode;\r\n      child.connected = false;\r\n      child.emit(\"exit\", exitCode, null);\r\n      child.emit(\"close\", exitCode, null);\r\n    },\r\n  });\r\n\r\n  // parent→child IPC\r\n  child.send = (msg: unknown, _cb?: (e: Error | null) => void): boolean => {\r\n    if (!child.connected) return false;\r\n    handle.sendIPC(msg);\r\n    return true;\r\n  };\r\n\r\n  child.kill = (sig?: string): boolean => {\r\n    child.killed = true;\r\n    child.connected = false;\r\n    handle.disconnect();\r\n    child.emit(\"exit\", null, sig ?? \"SIGTERM\");\r\n    child.emit(\"close\", null, sig ?? \"SIGTERM\");\r\n    return true;\r\n  };\r\n\r\n  child.disconnect = (): void => {\r\n    child.connected = false;\r\n    handle.disconnect();\r\n    child.emit(\"disconnect\");\r\n  };\r\n\r\n  return child;\r\n}\r\n\r\nexport interface ShellProcess extends EventEmitter {\r\n  pid: number;\r\n  connected: boolean;\r\n  killed: boolean;\r\n  exitCode: number | null;\r\n  signalCode: string | null;\r\n  spawnargs: string[];\r\n  spawnfile: string;\r\n  stdin: Writable | null;\r\n  stdout: Readable | null;\r\n  stderr: Readable | null;\r\n  kill(sig?: string): boolean;\r\n  disconnect(): void;\r\n  send(msg: unknown, cb?: (e: Error | null) => void): boolean;\r\n  ref(): this;\r\n  unref(): this;\r\n}\r\n\r\ninterface ShellProcessConstructor {\r\n  new (): ShellProcess;\r\n  (this: any): void;\r\n  prototype: any;\r\n}\r\n\r\nexport const ShellProcess = function ShellProcess(this: any) {\r\n  if (!this) return;\r\n  EventEmitter.call(this);\r\n  this.pid = MOCK_PID.BASE + Math.floor(Math.random() * MOCK_PID.RANGE);\r\n  this.connected = false;\r\n  this.killed = false;\r\n  this.exitCode = null;\r\n  this.signalCode = null;\r\n  this.spawnargs = [];\r\n  this.spawnfile = \"\";\r\n  this.stdin = new Writable();\r\n  this.stdout = new Readable();\r\n  this.stderr = new Readable();\r\n} as unknown as ShellProcessConstructor;\r\n\r\nObject.setPrototypeOf(ShellProcess.prototype, EventEmitter.prototype);\r\n\r\nShellProcess.prototype.kill = function kill(this: any, sig?: string): boolean {\r\n  this.killed = true;\r\n  this.emit(\"exit\", null, sig ?? \"SIGTERM\");\r\n  return true;\r\n};\r\n\r\nShellProcess.prototype.disconnect = function disconnect(this: any): void {\r\n  this.connected = false;\r\n};\r\n\r\nShellProcess.prototype.send = function send(this: any, msg: unknown, cb?: (e: Error | null) => void): boolean {\r\n  if (cb) cb(new Error(\"IPC unavailable\"));\r\n  return false;\r\n};\r\n\r\nShellProcess.prototype.ref = function ref(this: any): any {\r\n  const h = this._elHandle as Handle | undefined;\r\n  if (h) h.ref();\r\n  return this;\r\n};\r\n\r\nShellProcess.prototype.unref = function unref(this: any): any {\r\n  const h = this._elHandle as Handle | undefined;\r\n  if (h) h.unref();\r\n  return this;\r\n};\r\n\r\nexport default {\r\n  exec,\r\n  execSync,\r\n  execFile,\r\n  execFileSync,\r\n  spawn,\r\n  spawnSync,\r\n  fork,\r\n  ShellProcess,\r\n  initShellExec,\r\n  shellExec,\r\n  setStreamingCallbacks,\r\n  clearStreamingCallbacks,\r\n  sendStdin,\r\n  setSyncChannel,\r\n  setSabEnabled,\r\n  setSpawnChildCallback,\r\n  setForkChildCallback,\r\n  setIPCSend,\r\n  setIPCReceiveHandler,\r\n  handleIPCFromParent,\r\n  executeNodeBinary,\r\n  notifyTerminalResize,\r\n};\r\n"],"names":["parse","expandGlob","builtins","A_RESET","A_BOLD","A_CYAN","VERSIONS","NPM_REGISTRY_URL_SLASH","A_DIM","A_GREEN","x","y","createHash","proxiedFetch","fail","pathModule.resolve","ok","pathModule.relative","out","GREEN","RESET","CYAN","repo","key","config","lines","r","branch","getActiveContext","DEFAULT_ENV","scripts","name","createProcessContext","setActiveContext","ScriptEngine","isExitSentinel","utilFormat","getAllServers","ProcessExitSentinel","ctx","getRegistry","racers","closeAllServers","disposeAllTimers","resetActiveInterfaceCount","Buffer","MOCK_PID","ShellProcess","EventEmitter","Writable","Readable"],"mappings":";;;;;;AA4BO,MAAM,YAAA,CAAa;AAAA,EAChB,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA,uBAAe,GAAA,EAA0B;AAAA,EACzC,QAAA,GAAW,CAAA;AAAA,EACX,OAAA,uBAAc,GAAA,EAAoB;AAAA;AAAA,EAElC,UAAA,GAAmC,OAAA,CAAQ,OAAA,CAAQ,EAAE,MAAA,EAAQ,IAAI,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,CAAA;AAAA,EAE1F,WAAA,GAAyC,IAAA;AAAA,EAEjD,WAAA,CACE,QACA,IAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,GAAA,GAAM,MAAM,GAAA,IAAO,GAAA;AACxB,IAAA,IAAA,CAAK,GAAA,GAAM,MAAM,GAAA,GAAM,EAAE,GAAG,IAAA,CAAK,GAAA,KAAQ,EAAC;AAC1C,IAAA,IAAA,CAAK,GAAA,CAAI,MAAM,IAAA,CAAK,GAAA;AAAA,EACtB;AAAA,EAEA,gBAAgB,GAAA,EAAyB;AACvC,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,EACjC;AAAA,EAEA,sBAAsB,EAAA,EAAqC;AACzD,IAAA,IAAA,CAAK,WAAA,GAAc,EAAA;AAAA,EACrB;AAAA,EAEA,qBAAA,GAAmD;AACjD,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,OAAO,GAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,IAAI,GAAA,GAAM,GAAA;AAAA,EACjB;AAAA,EAEA,MAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,MAAM,IAAA,CACJ,OAAA,EACA,IAAA,EACsB;AAEtB,IAAA,IAAI,IAAA,EAAM,GAAA,IAAO,IAAA,EAAM,GAAA,EAAK;AAC1B,MAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAClB,MAAA,IAAI,OAAA;AACJ,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,OAAA,CAAqB,CAAC,CAAA,KAAM;AAAE,QAAA,OAAA,GAAU,CAAA;AAAA,MAAG,CAAC,CAAA;AAClE,MAAA,MAAM,IAAA,CAAK,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,UAAA,CAAW,SAAS,IAAI,CAAA;AAC7C,QAAA,OAAA,CAAQ,CAAC,CAAA;AACT,QAAA,OAAO,CAAA;AAAA,MACT,SAAS,CAAA,EAAG;AACV,QAAA,MAAM,GAAA,GAAmB;AAAA,UACvB,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,UAAU,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC;AAAA,CAAA;AAAA,UAC5D,QAAA,EAAU;AAAA,SACZ;AACA,QAAA,OAAA,CAAQ,GAAG,CAAA;AACX,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,IAAI,CAAA;AAAA,EACtC;AAAA,EAEA,MAAc,UAAA,CACZ,OAAA,EACA,IAAA,EACsB;AACtB,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AACrB,IAAA,MAAM,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,GAAA,EAAI;AAE9B,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA;AAChB,MAAA,IAAA,CAAK,GAAA,CAAI,MAAM,IAAA,CAAK,GAAA;AAAA,IACtB;AACA,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,GAAG,CAAA;AAAA,IAClC;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,yBAAA,CAA0B,OAAO,CAAA;AAE7D,MAAA,MAAM,MAAMA,WAAA,CAAM,QAAA,EAAU,IAAA,CAAK,GAAA,EAAK,KAAK,QAAQ,CAAA;AACnD,MAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AAAA,IAChC,SAAS,CAAA,EAAG;AACV,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,UAAU,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC;AAAA,CAAA;AAAA,QAC5D,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,IAAI,IAAA,EAAM,GAAA,IAAO,IAAA,CAAK,GAAA,KAAQ,KAAK,GAAA,EAAK;AACtC,QAAA,IAAA,CAAK,GAAA,GAAM,OAAA;AACX,QAAA,IAAA,CAAK,IAAI,GAAA,GAAM,OAAA;AAAA,MACjB;AACA,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,EAAG;AACvC,UAAA,IAAI,OAAO,OAAA,EAAS;AAClB,YAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA;AAAA,UAC7B,CAAA,MAAO;AACL,YAAA,OAAO,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,SAAS,IAAA,EAAsC;AAC3D,IAAA,IAAI,SAAsB,EAAE,MAAA,EAAQ,IAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAEhE,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAC5B,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,YAAA,CAAa,MAAM,QAAQ,CAAA;AAEzD,MAAA,MAAA,GAAS;AAAA,QACP,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,UAAA,CAAW,MAAA;AAAA,QACnC,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,UAAA,CAAW,MAAA;AAAA,QACnC,UAAU,UAAA,CAAW;AAAA,OACvB;AACA,MAAA,IAAA,CAAK,WAAW,UAAA,CAAW,QAAA;AAE3B,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,IAAA,IAAQ,UAAA,CAAW,aAAa,CAAA,EAAG;AACtD,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,IAAA,IAAQ,UAAA,CAAW,aAAa,CAAA,EAAG;AAAA,IACxD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAc,aAAa,QAAA,EAA8C;AACvE,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAClC,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,aAA0B,EAAE,MAAA,EAAQ,IAAgB,UAAU,CAAA,EAAE;AACpE,IAAA,IAAI,SAAA,GAAY,EAAA;AAEhB,IAAA,KAAA,MAAW,GAAA,IAAO,SAAS,QAAA,EAAU;AACnC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,KAAK,CAAA;AAChD,MAAA,SAAA,IAAa,MAAA,CAAO,MAAA;AACpB,MAAA,KAAA,GAAQ,MAAA,CAAO,MAAA;AACf,MAAA,UAAA,GAAa,MAAA;AAAA,IACf;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,MAAA,EAAQ,SAAA;AAAA,MACR,UAAU,UAAA,CAAW;AAAA,KACvB;AAAA,EACF;AAAA,EAEA,MAAc,WAAA,CACZ,GAAA,EACA,KAAA,EACsB;AACtB,IAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACzB,MAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,EAAG;AACpD,QAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,MAChB;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,IAC/C;AAEA,IAAA,IAAI,eAAyB,EAAC;AAC9B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAI,IAAA,EAAM;AAC1B,MAAA,YAAA,CAAa,IAAA,CAAK,GAAGC,gBAAA,CAAW,GAAA,EAAK,KAAK,GAAA,EAAK,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IAC7D;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,YAAA,CAAa,CAAC,CAAC,CAAA;AAC9C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AACnC,MAAA,YAAA,GAAe,CAAC,GAAG,SAAA,EAAW,GAAG,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IACxD;AAGA,IAAA,IAAI,YAAA,CAAa,CAAC,CAAA,KAAM,IAAA,IAAQ,YAAA,CAAa,CAAC,CAAA,KAAM,IAAA,IAAQ,YAAA,CAAa,CAAC,CAAA,EAAG;AAC3E,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,EAAG,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,CAAA;AAAA,IACpE;AAEA,IAAA,MAAM,IAAA,GAAO,aAAa,CAAC,CAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA;AAEjC,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,KAAA,MAAW,CAAA,IAAK,IAAI,SAAA,EAAW;AAC7B,QAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AACrB,UAAA,MAAM,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA;AACnC,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AAAA,UAC5C,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,EAAA;AAAA,cACR,MAAA,EAAQ,CAAA,OAAA,EAAU,CAAA,CAAE,MAAM,CAAA;AAAA,CAAA;AAAA,cAC1B,QAAA,EAAU;AAAA,aACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,WAA+C,EAAC;AACtD,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,EAAG;AACpD,MAAA,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACxB,MAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,YAAA,EAAa;AAC9B,IAAA,IAAI,MAAA;AAGJ,IAAA,MAAM,OAAA,GAAUC,cAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACjC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,KAAK,CAAA;AAClC,MAAA,MAAA,GAAS,CAAA,YAAa,OAAA,GAAU,MAAM,CAAA,GAAI,CAAA;AAC1C,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AACf,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AAAA,MACjB;AACA,MAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAA,EAAS;AACzC,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AAAA,MACjB;AAAA,IACF,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAA,GAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,GAAA,EAAK;AAC5C,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAA,GAAS,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,IACjD,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AAClC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,KAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,CAAG,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MAC3D,SAAS,CAAA,EAAG;AACV,QAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,QAAA,MAAA,GAAS;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,GAAG;AAAA,CAAA;AAAA,UACvB,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AACf,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AAAA,IACjB,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAC7C,MAAA,IAAI,WAAA,IAAe,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG;AAC5C,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CACjB,GAAA,CAAI,MAAM,CAAA,CACV,OAAA,CAAQ,CAAC,WAAA,EAAa,GAAG,IAAI,CAAA,EAAG,GAAG,CAAA;AAAA,QACxC,SAAS,CAAA,EAAG;AACV,UAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,UAAA,MAAA,GAAS;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,GAAG;AAAA,CAAA;AAAA,YACvB,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AACA,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AACf,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,GAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,MAAA,GAAS;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,CAAA;AAAA,UACf,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC7C,MAAA,IAAI,CAAA,KAAM,MAAA,EAAW,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,WACjC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,IACrB;AAEA,IAAA,MAAA,GAAS,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,GAAG,CAAA;AAE9C,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAA,GAA6B;AACnC,IAAA,OAAO;AAAA,MACL,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,GAAA,EAAI;AAAA,MACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAM,CAAC,GAAA,EAAK,SAAS,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI;AAAA,KAC1C;AAAA,EACF;AAAA,EAEQ,YAAY,CAAA,EAAmB;AACrC,IAAA,IAAI,EAAE,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA,CAAK,cAAc,CAAC,CAAA;AAClD,IAAA,OAAO,KAAK,aAAA,CAAc,CAAA,EAAG,KAAK,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGQ,gBAAgB,IAAA,EAA6B;AACnD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,IAAA,IAAQ,EAAA;AACjC,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAE9B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,MAAM,SAAA,GAAY,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AAExC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,WAAW,MAAM,CAAA;AAE1D,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,kBAAkB,CAAA;AAC9C,QAAA,IAAI,SAAS,IAAA,CAAK,MAAA,CAAO,WAAW,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC7C,UAAA,OAAO,MAAM,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,IACE,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,IACxB,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA,IACjC,OAAA,CAAQ,UAAA,CAAW,cAAc,CAAA,IACjC,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,IACzB,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,IAC3B,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,IAC5B,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAC5B;AACA,UAAA,OAAO,SAAA;AAAA,QACT;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,cAAc,GAAA,EAAqB;AACzC,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC3C,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,KAAS,IAAA,EAAM,KAAA,CAAM,GAAA,EAAI;AAAA,WAAA,IACpB,IAAA,KAAS,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IACxC;AACA,IAAA,OAAO,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,EAC7B;AAAA,EAEA,MAAc,cAAA,CACZ,MAAA,EACA,GAAA,EACsB;AACtB,IAAA,IAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS,GAAI,MAAA;AAEnC,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,SAAA,EAAW;AAC7B,MAAA,IAAI,CAAA,CAAE,SAAS,kBAAA,EAAoB;AACjC,QAAA,MAAA,IAAU,MAAA;AACV,QAAA,MAAA,GAAS,EAAA;AACT,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,QAAA,EAAU;AAC7C,QAAA,MAAM,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA;AACnC,QAAA,IAAI;AACF,UAAA,IAAI,EAAE,IAAA,KAAS,QAAA,IAAY,KAAK,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,EAAG;AACpD,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAG,MAAM,CAAA;AACnD,YAAA,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,CAAA,EAAG,QAAA,GAAW,MAAM,CAAA;AAAA,UAChD,CAAA,MAAO;AACL,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,SAAA,CAAU,GAAG,CAAA,CAAE,WAAA,CAAY,GAAG,CAAC,CAAC,CAAA;AACjE,YAAA,IAAI,GAAA,IAAO,QAAQ,GAAA,IAAO,CAAC,KAAK,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,cAAA,IAAA,CAAK,OAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,YAChD;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,CAAA,EAAG,MAAM,CAAA;AAAA,UACrC;AACA,UAAA,MAAA,GAAS,EAAA;AAAA,QACX,SAAS,CAAA,EAAG;AACV,UAAA,MAAA,IAAU,CAAA,OAAA,EAAU,EAAE,MAAM,CAAA,EAAA,EAAK,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,cAAc;AAAA,CAAA;AAChF,UAAA,QAAA,GAAW,CAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS;AAAA,EACpC;AAAA,EAEA,MAAc,0BAA0B,KAAA,EAAgC;AACtE,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,QAAA,MAAA,IAAU,GAAA;AACV,QAAA,CAAA,EAAA;AACA,QAAA,OAAO,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,CAAC,MAAM,GAAA,EAAK;AAC3C,UAAA,MAAA,IAAU,MAAM,CAAA,EAAG,CAAA;AAAA,QACrB;AACA,QAAA,IAAI,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,MAAA,IAAU,MAAM,CAAA,EAAG,CAAA;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,IAAO,MAAM,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAC5C,QAAA,CAAA,IAAK,CAAA;AACL,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,OAAO,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACpC,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK,KAAA,EAAA;AACtB,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK,KAAA,EAAA;AACtB,UAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,MAAA,IAAU,KAAA,CAAM,CAAC,CAAA;AAChC,UAAA,CAAA,EAAA;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AACxC,QAAA,MAAA,IAAU,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC5C,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,GAAA,EAAK;AACpB,QAAA,CAAA,EAAA;AACA,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,OAAO,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,CAAC,MAAM,GAAA,EAAK;AAC3C,UAAA,MAAA,IAAU,MAAM,CAAA,EAAG,CAAA;AAAA,QACrB;AACA,QAAA,IAAI,CAAA,GAAI,MAAM,MAAA,EAAQ,CAAA,EAAA;AACtB,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AACxC,QAAA,MAAA,IAAU,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC5C,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,IAAU,MAAM,CAAA,EAAG,CAAA;AAAA,IACrB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,YAAY,IAAA,EAA6B;AAC/C,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,IAAA,CAAK,SAAS,GAAA,IAAO,CAAA,MAAA,EAAS,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA;AAAA,CAAA;AAC1D,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,IAChD;AACA,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC1B,MAAA,IAAI,KAAK,CAAA,EAAG;AACV,QAAA,IAAI,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,EAAA,GAAK,CAAC,CAAA;AAC1B,QAAA,IACG,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,IAAI,QAAA,CAAS,GAAG,CAAA,IACvC,GAAA,CAAI,WAAW,GAAG,CAAA,IAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EACxC;AACA,UAAA,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACvB;AACA,QAAA,IAAA,CAAK,QAAQ,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA,EAAG,EAAE,GAAG,GAAG,CAAA;AAAA,MACxC,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAChC,QAAA,IAAI,GAAA;AACF,UAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,MAAA,EAAS,GAAG,KAAK,GAAG,CAAA;AAAA,CAAA,EAAO,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,CAAA,EAAE;AACtE,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,UAAU,GAAG,CAAA;AAAA,CAAA;AAAA,UACrB,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EAC/C;AAAA,EAEA,MAAc,aAAa,IAAA,EAAsC;AAC/D,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,iCAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,CAAC,CAAC,CAAA;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAG,MAAM,CAAA;AAClD,MAAA,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,CAAA,QAAA,EAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,CAAA;AAAA,QAC1B,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AAAA,EACF;AACF;;ACjgBA,MAAM,mBAAA,GAAsB,GAAA;AAC5B,MAAM,iBAAA,GAAoB,KAAK,IAAA,GAAO,IAAA;AAE/B,MAAM,iBAAA,CAAkB;AAAA,EACrB,IAAA,uBAAW,GAAA,EAAoB;AAAA,EAC/B,MAAA,GAAS,CAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EAEjB,WAAA,CAAY,UAAA,GAAa,mBAAA,EAAqB,QAAA,GAAW,iBAAA,EAAmB;AAC1E,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAAA,EACnB;AAAA,EAEA,IAAI,GAAA,EAAiC;AACnC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC/B,IAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAEhC,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAqB;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAA,CAAK,MAAA,IAAU,SAAS,MAAA,GAAS,CAAA;AACjC,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,IACtB;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACxB,IAAA,IAAA,CAAK,MAAA,IAAU,MAAM,MAAA,GAAS,CAAA;AAC9B,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,GAAA,EAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAAA,EAC1B;AAAA,EAEA,OAAO,GAAA,EAAsB;AAC3B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,QAAA,KAAa,QAAW,OAAO,KAAA;AACnC,IAAA,IAAA,CAAK,MAAA,IAAU,SAAS,MAAA,GAAS,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,EAC7B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EAChB;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA;AAAA,EACnB;AAAA,EAEA,KAAA,GAAkD;AAChD,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,CAAK,KAAK,IAAA,EAAM,WAAA,EAAa,KAAK,MAAA,EAAO;AAAA,EAC7D;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,OACE,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,WAAA,IACrB,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,CAAA,EAClD;AACA,MAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACvC,MAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAClC,MAAA,IAAA,CAAK,MAAA,IAAU,MAAM,MAAA,GAAS,CAAA;AAC9B,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,IACzB;AAAA,EACF;AACF;AAEA,IAAI,SAAA,GAAsC,IAAA;AAInC,SAAS,uBAAA,GAA6C;AAC3D,EAAA,IAAI,CAAC,SAAA,EAAW,SAAA,GAAY,IAAI,iBAAA,EAAkB;AAClD,EAAA,OAAO,SAAA;AACT;;ACjFA,MAAMC,SAAA,GAAU,SAAA;AAChB,MAAMC,QAAA,GAAS,SAAA;AACf,MAAMC,QAAA,GAAS,UAAA;AAER,SAAS,iBAAiB,IAAA,EAA4B;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnB,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,UAAU,CAAA,EAAE;AAEnE,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,MAAA,IAAU,QAAQ,QAAA,EAAU;AAC9C,QAAA,OAAO;AAAA,UACL,MAAA,EACE,CAAA,EAAGD,QAAM,CAAA,MAAA,EAASD,SAAO,CAAA;;AAAA,EACtBC,QAAM,YAAYD,SAAO;AAAA,EAAA,EACvBE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,QAAQF,SAAO,CAAA;AAAA,EAAA,EACrBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,UAAUF,SAAO,CAAA;AAAA,EAAA,EACvBE,QAAM,YAAYF,SAAO,CAAA;AAAA,EAAA,EACzBE,QAAM,KAAKF,SAAO,CAAA;AAAA,EAAA,EAClBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,SAASF,SAAO,CAAA;AAAA,EAAA,EACtBE,QAAM,UAAUF,SAAO,CAAA;AAAA,EAAA,EACvBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,SAASF,SAAO,CAAA;AAAA,EAAA,EACtBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,SAASF,SAAO,CAAA;AAAA,CAAA;AAAA,UAC7B,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAEA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,KAAA;AAAA,QACL,KAAK,YAAA;AACH,UAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC5C,KAAK,OAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,OAAO,GAAG,GAAG,CAAA;AAAA,QACtC,KAAK,MAAA;AAAA,QACL,KAAK,GAAA;AAAA,QACL,KAAK,KAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,MAAM,GAAG,GAAG,CAAA;AAAA,QACrC,KAAK,SAAA;AAAA,QACL,KAAK,GAAA;AAAA,QACL,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAClD,KAAK,IAAA;AACH,UAAA,IAAI;AACF,YAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,GAAG,CAAA;AAAA,UAChC,CAAA,CAAA,MAAQ;AAAA,UAER;AACA,UAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,EAAC,EAAG,GAAG,CAAA;AAAA,QACrC,KAAK,WAAA;AAAA,QACL,KAAK,QAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QACpD,KAAK,IAAA;AAAA,QACL,KAAK,MAAA;AACH,UAAA,OAAO,IAAA,CAAK,aAAa,GAAG,CAAA;AAAA,QAC9B,KAAK,MAAA;AAAA,QACL,KAAK,QAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,QACvD,KAAK,SAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,OAAO,EAAE,QAAQG,cAAA,CAAS,GAAA,GAAM,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAChE,KAAK,MAAA;AAAA,QACL,KAAK,MAAA;AAAA,QACL,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC1C,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,QAAA;AACH,UAAA,OAAO,EAAE,QAAQ,GAAA,CAAI,GAAA,GAAM,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAC3D,KAAK,MAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,IAAI,GAAA,GAAM,iBAAA;AAAA,YAClB,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,KAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,IAAI,GAAA,GAAM,sBAAA;AAAA,YAClB,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,MAAA;AACH,UAAA,OAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,QACzB,KAAK,QAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC5C,KAAK,UAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,EAAA;AAAA,YACR,QAAQ,IAAA,CAAK,UAAA;AAAA,cACX,yCAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,OAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,2BAAA;AAAA,YACR,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,MAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,sCAAA;AAAA,YACR,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,OAAA;AACH,UAAA,IAAI,OAAO,CAAC,CAAA,KAAM,WAAW,MAAA,CAAO,CAAC,MAAM,OAAA,EAAS;AAClD,YAAA,OAAO,EAAE,MAAA,EAAQ,kBAAA,EAAoB,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,UAC/D;AACA,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,EAAA;AAAA,YACR,QAAQ,IAAA,CAAK,SAAA;AAAA,cACX,CAAA,0BAAA,EAA6B,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,CAAA,CAAA;AAAA,cAC5C;AAAA,aACF;AAAA,YACA,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,QAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,gBAAA,EAAkB,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAC7D,KAAK,MAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,QAAQC,4BAAsB,CAAA;AAAA,CAAA;AAAA,YACtC,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,KAAK,YAAA,EAAc;AACjB,UAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,UAAA,MAAM,YAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAC1C,UAAA,IAAI,CAAC,UAAA,IAAc,CAAC,SAAA,EAAW;AAC7B,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,EAAA;AAAA,cACR,QAAQ,IAAA,CAAK,SAAA;AAAA,gBACX,wCAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,QAAA,EAAU;AAAA,aACZ;AAAA,UACF;AACA,UAAA,IAAI;AACF,YAAA,MAAM,OAAA,GAAU,IAAI,GAAA,GAAM,eAAA;AAC1B,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AACjC,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,YAAA,IAAI,CAAC,GAAA,CAAI,OAAA,EAAS,GAAA,CAAI,UAAU,EAAC;AACjC,YAAA,GAAA,CAAI,OAAA,CAAQ,UAAU,CAAA,GAAI,SAAA;AAC1B,YAAA,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAC3D,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,EAAA;AAAA,cACR,QAAQ,IAAA,CAAK,UAAA;AAAA,gBACX,6FAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,QAAA,EAAU;AAAA,aACZ;AAAA,UACF,SAAS,CAAA,EAAQ;AACf,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,EAAA;AAAA,cACR,QAAQ,IAAA,CAAK,SAAA;AAAA,gBACX,EAAE,OAAA,IAAW,+BAAA;AAAA,gBACb;AAAA,eACF;AAAA,cACA,QAAA,EAAU;AAAA,aACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA,KAAK,KAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,CAAO,OAAO,KAAA,CAAM,CAAC,CAAA,EAAG,GAAG,CAAA,GAAI;AAAA,YACvD,MAAA,EAAQ,EAAA;AAAA,YACR,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,yBAAA,EAA2B,KAAK,CAAA;AAAA,YACvD,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AACE,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,EAAA;AAAA,YACR,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,iBAAA,EAAoB,GAAG,KAAK,KAAK,CAAA;AAAA,YACxD,QAAA,EAAU;AAAA,WACZ;AAAA;AACJ,IACF;AAAA,GACF;AACF;;ACjMA,MAAMJ,SAAA,GAAU,SAAA;AAChB,MAAMC,QAAA,GAAS,SAAA;AACf,MAAMC,QAAA,GAAS,UAAA;AAER,SAAS,kBAAkB,IAAA,EAA4B;AAC5D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnB,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,UAAU,CAAA,EAAE;AAEnE,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,MAAA,IAAU,QAAQ,QAAA,EAAU;AAC9C,QAAA,OAAO;AAAA,UACL,MAAA,EACE,CAAA,EAAGD,QAAM,CAAA,MAAA,EAASD,SAAO,CAAA;;AAAA,EACtBC,QAAM,4BAA4BD,SAAO;AAAA,EAAA,EACvCE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,UAAUF,SAAO,CAAA;AAAA,EAAA,EACvBE,QAAM,SAASF,SAAO,CAAA;AAAA,EAAA,EACtBE,QAAM,OAAOF,SAAO,CAAA;;AAAA,EACtBC,QAAM,oBAAoBD,SAAO;AAAA,EAAA,EAC/BE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,MAAMF,SAAO,CAAA;;AAAA,EACrBC,QAAM,oBAAoBD,SAAO;AAAA,EAAA,EAC/BE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,SAASF,SAAO,CAAA;;AAAA,EAAA,EACtBE,QAAM,UAAUF,SAAO,CAAA;AAAA,CAAA;AAAA,UAC9B,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAEA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC1D,KAAK,SAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC1D,KAAK,QAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC5D,KAAK,MAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAAA,QACtC,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC5C,KAAK,OAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,OAAO,GAAG,GAAG,CAAA;AAAA,QACtC,KAAK,MAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,MAAM,GAAG,GAAG,CAAA;AAAA,QACrC,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,MAAA;AAAA,QACL,KAAK,QAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,QACvD,KAAK,SAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,OAAO,EAAE,QAAQG,cAAA,CAAS,IAAA,GAAO,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QACjE,KAAK,OAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,kCAAA,EAAoC,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAC/E,KAAK,UAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAC/C,KAAK,KAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,IAAA,CAAK,WAAW,+BAAA,EAAiC,MAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,QACrG;AACE,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,iBAAA,EAAoB,GAAG,CAAA,CAAA,CAAA,EAAK,MAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA;AACjG,IACF;AAAA,GACF;AACF;;AC7EA,MAAMH,SAAA,GAAU,SAAA;AAChB,MAAMC,QAAA,GAAS,SAAA;AACf,MAAMC,QAAA,GAAS,UAAA;AAER,SAAS,kBAAkB,IAAA,EAA4B;AAC5D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnB,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,UAAU,CAAA,EAAE;AAEnE,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,KAAK,OAAO,IAAA,CAAK,gBAAgB,EAAC,EAAG,KAAK,MAAM,CAAA;AACrD,MAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,QAAA,EAAU;AACtC,QAAA,OAAO;AAAA,UACL,MAAA,EACE,CAAA,EAAGD,QAAM,CAAA,MAAA,EAASD,SAAO,CAAA;;AAAA,EACtBC,QAAM,YAAYD,SAAO;AAAA,EAAA,EACvBE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,UAAUF,SAAO,CAAA;AAAA,EAAA,EACvBE,QAAM,SAASF,SAAO,CAAA;AAAA,EAAA,EACtBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,MAAMF,SAAO,CAAA;AAAA,EAAA,EACnBE,QAAM,OAAOF,SAAO,CAAA;AAAA,EAAA,EACpBE,QAAM,SAASF,SAAO,CAAA;AAAA,EAAA,EACtBE,QAAM,UAAUF,SAAO,CAAA;AAAA,CAAA;AAAA,UAC9B,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAEA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC1D,KAAK,SAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC1D,KAAK,QAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,QAC5D,KAAK,MAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAAA,QACtC,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC5C,KAAK,OAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,OAAO,GAAG,GAAG,CAAA;AAAA,QACtC,KAAK,MAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,MAAM,GAAG,GAAG,CAAA;AAAA,QACrC,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,MAAA;AAAA,QACL,KAAK,QAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,QACvD,KAAK,SAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,OAAO,EAAE,QAAQG,cAAA,CAAS,IAAA,GAAO,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QACjE,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC1C,KAAK,OAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,2BAAA,EAA6B,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QACxE,KAAK,UAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAC/C,KAAK,KAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,IAAA,CAAK,WAAW,+BAAA,EAAiC,MAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,QACrG,KAAK,QAAA;AACH,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,IAAA,CAAK,WAAW,kCAAA,EAAoC,MAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAAA,QACxG;AAEE,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,GAAG,CAAA;AAAA;AACrC,IACF;AAAA,GACF;AACF;;AC/EA,MAAMH,SAAA,GAAU,SAAA;AAChB,MAAMC,QAAA,GAAS,SAAA;AACf,MAAMI,OAAA,GAAQ,SAAA;AACd,MAAMC,SAAA,GAAU,UAAA;AAChB,MAAMJ,QAAA,GAAS,UAAA;AAER,SAAS,iBAAiB,IAAA,EAA4B;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnB,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,UAAU,CAAA,EAAE;AAEnE,MAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,MAAA,IAAU,QAAQ,QAAA,EAAU;AAC9C,QAAA,OAAO;AAAA,UACL,MAAA,EACE,CAAA,EAAGD,QAAM,CAAA,GAAA,EAAMD,SAAO,CAAA;;AAAA,EACnBK,OAAK,SAASL,SAAO,CAAA;;AAAA,EACrBC,QAAM,YAAYD,SAAO;AAAA,EAAA,EACvBE,QAAM,CAAA,GAAA,EAAMF,SAAO,CAAA,OAAA,EAAUK,OAAK,oCAAoCL,SAAO;AAAA,EAAA,EAC7EE,QAAM,CAAA,OAAA,EAAUF,SAAO,CAAA,GAAA,EAAMK,OAAK,yCAAyCL,SAAO;AAAA,EAAA,EAClFE,QAAM,CAAA,GAAA,EAAMF,SAAO,CAAA,OAAA,EAAUK,OAAK,mBAAmBL,SAAO;AAAA,EAAA,EAC5DE,QAAM,CAAA,MAAA,EAASF,SAAO,CAAA,IAAA,EAAOK,OAAK,sBAAsBL,SAAO;AAAA,EAAA,EAC/DE,QAAM,CAAA,IAAA,EAAOF,SAAO,CAAA,MAAA,EAASK,OAAK,6BAA6BL,SAAO;AAAA,EAAA,EACtEE,QAAM,CAAA,MAAA,EAASF,SAAO,CAAA,IAAA,EAAOK,OAAK,uCAAuCL,SAAO;AAAA,EAAA,EAChFE,QAAM,CAAA,IAAA,EAAOF,SAAO,CAAA,MAAA,EAASK,OAAK,iBAAiBL,SAAO;AAAA,EAAA,EAC1DE,QAAM,CAAA,CAAA,EAAIF,SAAO,CAAA,SAAA,EAAYK,OAAK,kCAAkCL,SAAO;AAAA,EAAA,EAC3EE,QAAM,CAAA,EAAA,EAAKF,SAAO,CAAA,QAAA,EAAWK,OAAK,4BAA4BL,SAAO;AAAA,CAAA;AAAA,UAC5E,MAAA,EAAQ,EAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAEA,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,KAAA;AACH,UAAA,IACE,MAAA,CAAO,CAAC,CAAA,KACP,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,IACvB,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,IACxB,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,IACzB,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,IACzB,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,CAAA,EAC3B;AACA,YAAA,OAAO,IAAA,CAAK,kBAAkB,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,UAC/D;AACA,UAAA,OAAO,KAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC5C,KAAK,OAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,OAAO,GAAG,GAAG,CAAA;AAAA,QACtC,KAAK,MAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,MAAM,GAAG,GAAG,CAAA;AAAA,QACrC,KAAK,SAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,KAAK,CAAA;AAAA,QACzD,KAAK,KAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,KAAK,CAAA;AAAA,QACzD,KAAK,QAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,KAAK,CAAA;AAAA,QAC3D,KAAK,GAAA;AACH,UAAA,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AAAA,QAC7C,KAAK,MAAA;AAAA,QACL,KAAK,QAAA;AACH,UAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAC,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,QACvD,KAAK,IAAA,EAAM;AACT,UAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,UAAA,IAAI,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AAC9B,YAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,KAAK,CAAA;AACrC,UAAA,IAAI,KAAA,KAAU,OAAA;AACZ,YAAA,OAAO,EAAE,MAAA,EAAQ,8BAAA,EAAgC,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAC3E,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,CAAA,EAAGK,OAAK,CAAA,wCAAA,EAA2CL,SAAO;AAAA,CAAA;AAAA,YAClE,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AAAA,QACA,KAAK,SAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,WAAA;AACH,UAAA,OAAO,EAAE,QAAQG,cAAA,CAAS,GAAA,GAAM,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QAChE,KAAK,SAAA;AACH,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,CAAA,EAAGG,SAAO,CAAA,0BAAA,EAA6BN,SAAO;AAAA,CAAA;AAAA,YACtD,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,SAAS;AAEP,UAAA,IAAI,MAAA,CAAO,CAAC,CAAA,IAAK,CAAC,OAAO,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3C,YAAA,MAAM,QAAA,GAAW,OAAO,CAAC,CAAA,CAAE,WAAW,GAAG,CAAA,GACrC,OAAO,CAAC,CAAA,GACR,GAAG,GAAA,CAAI,GAAG,IAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAG,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACjD,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC1B,cAAA,OAAO,IAAA,CAAK,kBAAkB,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,YAC/D;AACA,YAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,GAAG,CAAA;AAAA,UACnC;AACA,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,EAAA;AAAA,YACR,MAAA,EAAQ,2BAA2B,GAAG,CAAA;AAAA,CAAA;AAAA,YACtC,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AAAA;AACF,IACF;AAAA,GACF;AACF;AAEO,SAAS,kBAAkB,IAAA,EAA4B;AAC5D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,GAAG,CAAA;AAAA,IACpC;AAAA,GACF;AACF;;ACpHA,MAAMA,SAAA,GAAU,SAAA;AAChB,MAAMC,QAAA,GAAS,SAAA;AAER,SAAS,kBAAkB,IAAA,EAA4B;AAC5D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnB,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,UAAU,CAAA,EAAE;AAEnE,MAAA,IAAI,MAAA,GAAwB,IAAA;AAC5B,MAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,MAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,MAAA,MAAM,aAAuB,EAAC;AAC9B,MAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AACzB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,OAAO,CAAC,CAAA,KAAM,QAAQ,MAAA,CAAO,CAAC,MAAM,QAAA,EAAU;AAChD,UAAA,QAAA,GAAW,MAAA,CAAO,EAAE,CAAC,CAAA,IAAK,EAAA;AAAA,QAC5B,CAAA,MAAA,IAAW,OAAO,CAAC,CAAA,KAAM,QAAQ,MAAA,CAAO,CAAC,MAAM,SAAA,EAAW;AACxD,UAAA,SAAA,GAAY,MAAA,CAAO,EAAE,CAAC,CAAA,IAAK,EAAA;AAAA,QAC7B,CAAA,MAAA,IAAW,OAAO,CAAC,CAAA,KAAM,eAAe,MAAA,CAAO,CAAC,MAAM,IAAA,EAAM;AAC1D,UAAA,OAAO,EAAE,QAAQE,cAAA,CAAS,IAAA,GAAO,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,QACjE,CAAA,MAAA,IAAW,OAAO,CAAC,CAAA,KAAM,YAAY,MAAA,CAAO,CAAC,MAAM,IAAA,EAAM;AACvD,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,CAAA,EAAGF,QAAM,CAAA,MAAA,EAASD,SAAO,CAAA;AAAA,CAAA;AAAA,YACjC,MAAA,EAAQ,EAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF,CAAA,MAAA,IACE,OAAO,CAAC,CAAA,KAAM,QACd,MAAA,CAAO,CAAC,MAAM,WAAA,IACd,MAAA,CAAO,CAAC,CAAA,KAAM,qCAAA,IACd,OAAO,CAAC,CAAA,KAAM,cACd,MAAA,CAAO,CAAC,MAAM,UAAA,EACd;AACA,UAAA,CAAA,EAAA;AAAA,QACF,WAAW,MAAA,CAAO,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG,CAEtC,MAAO;AACL,UAAA,MAAA,GAAS,OAAO,CAAC,CAAA;AACjB,UAAA,cAAA,GAAiB,IAAA;AAAA,QACnB;AAAA,MACF;AAEA,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,GAAG,CAAA;AAAA,MACpC;AACA,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,GAAG,CAAA;AAAA,MACtC;AAEA,MAAA,IAAI,CAAC,MAAA;AACH,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,CAAA,EAAGC,QAAM,CAAA,MAAA,EAASD,SAAO,CAAA;AAAA,CAAA;AAAA,UACjC,QAAA,EAAU;AAAA,SACZ;AAEF,MAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,UAAA,EAAY,GAAG,CAAA;AAAA,IACvD;AAAA,GACF;AACF;AAEO,SAAS,iBAAiB,IAAA,EAA4B;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK;AACzB,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,GAAG,CAAA;AAAA,IACpC;AAAA,GACF;AACF;;AChEA,MAAM,GAAA,GAAM,UAAA;AACZ,MAAM,MAAA,GAAS,UAAA;AACf,MAAM,IAAA,GAAO,SAAA;AAyDb,SAAS,SAAA,CAAU,UAAoB,QAAA,EAA8B;AACnE,EAAA,MAAM,IAAI,QAAA,CAAS,MAAA;AACnB,EAAA,MAAM,IAAI,QAAA,CAAS,MAAA;AACnB,EAAA,MAAM,MAAM,CAAA,GAAI,CAAA;AAEhB,EAAA,IAAI,GAAA,KAAQ,CAAA,EAAG,OAAO,EAAC;AAEvB,EAAA,MAAM,WAAkC,EAAC;AACzC,EAAA,MAAM,CAAA,uBAAQ,GAAA,EAAoB;AAClC,EAAA,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAA;AAEV,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,KAAA;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,CAAA,EAAA,EAAK;AAC7B,MAAA,QAAA,CAAS,IAAA,CAAK,IAAI,GAAA,CAAI,CAAC,CAAC,CAAA;AAExB,MAAA,KAAA,IAAS,IAAI,CAAC,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAC/B,QAAA,IAAIO,EAAAA;AACJ,QAAA,IAAI,MAAM,CAAC,CAAA,IAAM,CAAA,KAAM,CAAA,IAAA,CAAM,EAAE,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,IAAK,MAAM,CAAA,CAAE,GAAA,CAAI,CAAA,GAAI,CAAC,KAAK,CAAA,CAAA,EAAK;AACtE,UAAAA,EAAAA,GAAI,CAAA,CAAE,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AAAA,QACtB,CAAA,MAAO;AACL,UAAAA,MAAK,CAAA,CAAE,GAAA,CAAI,CAAA,GAAI,CAAC,KAAK,CAAA,IAAK,CAAA;AAAA,QAC5B;AACA,QAAA,IAAIC,KAAID,EAAAA,GAAI,CAAA;AAEZ,QAAA,OAAOA,EAAAA,GAAI,KAAKC,EAAAA,GAAI,CAAA,IAAK,SAASD,EAAC,CAAA,KAAM,QAAA,CAASC,EAAC,CAAA,EAAG;AACpD,UAAAD,EAAAA,EAAAA;AACA,UAAAC,EAAAA,EAAAA;AAAA,QACF;AAEA,QAAA,CAAA,CAAE,GAAA,CAAI,GAAGD,EAAC,CAAA;AAEV,QAAA,IAAIA,EAAAA,IAAK,CAAA,IAAKC,EAAAA,IAAK,CAAA,EAAG;AACpB,UAAA,MAAA,GAAS,CAAA;AACT,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,EAAA,IAAI,MAAA,GAAS,GAAG,MAAA,GAAS,GAAA;AAEzB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,MAAgB,EAAC;AAEvB,EAAA,KAAA,IAAS,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAA,MAAM,IAAI,CAAA,GAAI,CAAA;AACd,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,MAAM,CAAC,CAAA,IAAM,CAAA,KAAM,CAAA,IAAA,CAAM,MAAM,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,IAAK,MAAM,KAAA,CAAM,GAAA,CAAI,CAAA,GAAI,CAAC,KAAK,CAAA,CAAA,EAAK;AAC9E,MAAA,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,IACd,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,CAAA,GAAI,CAAA;AAAA,IACd;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA,IAAK,CAAA;AAClC,IAAA,MAAM,QAAQ,KAAA,GAAQ,KAAA;AAEtB,IAAA,OAAO,CAAA,GAAI,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO;AAC7B,MAAA,CAAA,EAAA;AACA,MAAA,CAAA,EAAA;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,IAAI,CAAA,EAAG;AACT,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,CAAA,EAAA;AACA,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,MACvE,CAAA,MAAO;AACL,QAAA,CAAA,EAAA;AACA,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,CAAA,EAAG,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG;AACrB,IAAA,CAAA,EAAA;AACA,IAAA,CAAA,EAAA;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAG,CAAA;AAAA,EACrE;AAEA,EAAA,GAAA,CAAI,OAAA,EAAQ;AACZ,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAA,EAAe,YAAA,GAAe,CAAA,EAAe;AAC/D,EAAA,MAAM,QAAoB,EAAC;AAC3B,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAE7B,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,IAAI,IAAI,CAAC,CAAA,CAAE,SAAS,OAAA,EAAS,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAEvC,EAAA,IAAI,UAAA,GAAa,cAAc,CAAC,CAAA;AAChC,EAAA,IAAI,QAAA,GAAW,cAAc,CAAC,CAAA;AAE9B,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,IAAI,aAAA,CAAc,CAAC,CAAA,GAAI,QAAA,IAAY,eAAe,CAAA,EAAG;AACnD,MAAA,QAAA,GAAW,cAAc,CAAC,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAClC,MAAA,UAAA,GAAa,cAAc,CAAC,CAAA;AAC5B,MAAA,QAAA,GAAW,cAAc,CAAC,CAAA;AAAA,IAC5B;AAAA,EACF;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAElC,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,IAAI,CAAA,IAAK,MAAA,EAAQ;AACnC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAS,YAAY,CAAA;AACtD,IAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,IAAI,MAAA,GAAS,CAAA,EAAG,OAAO,YAAY,CAAA;AAE/D,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,YAAA,EAAc,aAAa,CAAC,CAAA;AAEtD,IAAA,IAAI,QAAA,GAAW,QAAA;AACf,IAAA,IAAI,QAAA,GAAW,QAAA;AACf,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,QAAA,GAAW,CAAA;AAEf,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,IAAI,EAAA,CAAG,SAAS,OAAA,EAAS;AACvB,QAAA,IAAI,EAAA,CAAG,MAAA,GAAS,QAAA,EAAU,QAAA,GAAW,EAAA,CAAG,MAAA;AACxC,QAAA,IAAI,EAAA,CAAG,MAAA,GAAS,QAAA,EAAU,QAAA,GAAW,EAAA,CAAG,MAAA;AACxC,QAAA,QAAA,EAAA;AACA,QAAA,QAAA,EAAA;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,QAAA,EAAU;AAC/B,QAAA,IAAI,EAAA,CAAG,MAAA,GAAS,QAAA,EAAU,QAAA,GAAW,EAAA,CAAG,MAAA;AACxC,QAAA,QAAA,EAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,EAAA,CAAG,MAAA,GAAS,QAAA,EAAU,QAAA,GAAW,EAAA,CAAG,MAAA;AACxC,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,QAAA,EAAA,CAAW,QAAA,KAAa,QAAA,GAAW,CAAA,GAAI,QAAA,IAAY,CAAA;AAAA,MACnD,QAAA;AAAA,MACA,QAAA,EAAA,CAAW,QAAA,KAAa,QAAA,GAAW,CAAA,GAAI,QAAA,IAAY,CAAA;AAAA,MACnD,QAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,GAAA,EAA0D;AAC9E,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,IAAI,EAAA,CAAG,SAAS,QAAA,EAAU,UAAA,EAAA;AAAA,SAAA,IACjB,EAAA,CAAG,SAAS,QAAA,EAAU,SAAA,EAAA;AAAA,EACjC;AACA,EAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AACjC;AAWA,MAAM,OAAA,CAAQ;AAAA,EACJ,GAAA;AAAA,EACC,MAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CAAY,GAAA,EAAmB,OAAA,EAAiB,MAAA,EAAgB;AAC9D,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA,EAIQ,SAAA,GAA4D;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,IAAA,CAAK,MAAA,GAAS,uBAAuB,MAAa,CAAA;AACpF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,WAAW,KAAA,EAA6D;AAC9E,IAAA,IAAA,CAAK,GAAA,CAAI,cAAc,IAAA,CAAK,MAAA,GAAS,uBAAuB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACnF;AAAA,EAEA,WAAA,CAAY,MAAc,OAAA,EAAyB;AACjD,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,MAAM,CAAA,EAAA,CAAA;AACxC,IAAA,OAAOC,gBAAA,CAAW,MAAM,CAAA,CAAE,MAAA,CAAO,SAAS,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EACjE;AAAA,EAEA,WAAA,CAAY,MAAc,OAAA,EAAyB;AACjD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,OAAO,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,KAAA,CAAM,IAAI,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,IAAI,CAAA,GAAI,EAAE,IAAA,EAAM,MAAM,OAAA,EAAQ;AACpC,MAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,WAAW,IAAA,EAAqD;AAC9D,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAK,IAAA;AAAA,EACxB;AAAA;AAAA,EAIA,SAAA,GAA0B;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,IAAA,CAAK,MAAA,GAAS,UAAU,MAAa,CAAA;AACvE,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,WAAW,EAAC;AAAA,IACrC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,WAAW,OAAA,EAA6B;AACtC,IAAA,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,MAAA,GAAS,QAAA,EAAU,KAAK,SAAA,CAAU,EAAE,OAAA,EAAS,CAAC,CAAA;AAAA,EAC5E;AAAA,EAEA,UAAA,CAAW,SAAiB,OAAA,EAAuB;AACjD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,IAAA,MAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AACvD,IAAA,MAAM,KAAA,GAAoB,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,MAAM,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,GAAA,EAAI,EAAE;AACjF,IAAA,IAAI,GAAA,IAAO,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,SACxB,OAAA,CAAQ,KAAK,KAAK,CAAA;AACvB,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,EACzB;AAAA,EAEA,gBAAgB,OAAA,EAAuB;AACrC,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU,CAAE,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,OAAO,CAAA;AACjE,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,EACzB;AAAA;AAAA,EAIA,OAAA,GAAkB;AAChB,IAAA,IAAI;AACF,MAAA,OAAQ,IAAA,CAAK,IAAI,YAAA,CAAa,IAAA,CAAK,SAAS,OAAA,EAAS,MAAa,EAAa,IAAA,EAAK;AAAA,IACtF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,sBAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,QAAQ,KAAA,EAAqB;AAC3B,IAAA,IAAA,CAAK,IAAI,aAAA,CAAc,IAAA,CAAK,MAAA,GAAS,OAAA,EAAS,QAAQ,IAAI,CAAA;AAAA,EAC5D;AAAA,EAEA,gBAAA,GAAkC;AAChC,IAAA,MAAM,IAAA,GAAO,KAAK,OAAA,EAAQ;AAC1B,IAAA,IAAI,KAAK,UAAA,CAAW,kBAAkB,GAAG,OAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,WAAW,GAAA,EAA4B;AACrC,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,GAAA;AACvC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAC1B,MAAA,IAAI;AACF,QAAA,OAAQ,IAAA,CAAK,IAAI,YAAA,CAAa,IAAA,CAAK,SAAS,GAAA,GAAM,MAAA,EAAQ,MAAa,CAAA,CAAa,IAAA,EAAK;AAAA,MAC3F,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,OAAQ,IAAA,CAAK,IAAI,YAAA,CAAa,IAAA,CAAK,SAAS,cAAA,GAAiB,GAAA,EAAK,MAAa,CAAA,CAAa,IAAA,EAAK;AAAA,IACnG,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAChB,IAAA,IAAI;AACF,MAAA,OAAQ,IAAA,CAAK,IAAI,YAAA,CAAa,IAAA,CAAK,SAAS,aAAA,GAAgB,GAAA,EAAK,MAAa,CAAA,CAAa,IAAA,EAAK;AAAA,IAClG,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,WAAA,GAA6B;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EACvC;AAAA,EAEA,eAAA,CAAgB,QAAgB,IAAA,EAAoB;AAClD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,cAAA,GAAiB,MAAA;AAC/C,IAAA,MAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,GAAG,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAC,CAAA;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1E,IAAA,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,OAAA,EAAS,IAAA,GAAO,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,YAAA,GAAyB;AACvB,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,IAAA,CAAK,SAAS,aAAa,CAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,aAAa,IAAA,EAAuB;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,cAAA,GAAiB,IAAA;AAC/C,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,GAAA,CAAI,WAAW,OAAO,CAAA;AAC3B,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAChB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAIA,UAAA,GAAqB;AACnB,IAAA,IAAI;AACF,MAAA,OAAO,KAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,MAAA,GAAS,WAAW,MAAa,CAAA;AAAA,IACrE,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,YAAY,OAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,MAAA,GAAS,WAAW,OAAO,CAAA;AAAA,EACzD;AAAA,EAEA,eAAe,GAAA,EAA4B;AACzC,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAG7B,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,WAAA,GAAc,MAAM,CAAC,CAAA;AACrB,MAAA,UAAA,GAAa,MAAM,CAAC,CAAA;AACpB,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,MAAM,CAAC,CAAA;AACrB,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IACpB;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,GAAA,GAAM,CAAA,CAAA,EAAI,WAAW,CAAA,EAAA,EAAK,UAAU,CAAA,EAAA,CAAA;AAC1C,UAAA,SAAA,GAAY,OAAA,KAAY,GAAA;AAAA,QAC1B,CAAA,MAAO;AACL,UAAA,SAAA,GAAY,OAAA,KAAY,IAAI,WAAW,CAAA,CAAA,CAAA;AAAA,QACzC;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AAChD,QAAA,IAAI,KAAA,IAAS,MAAM,CAAC,CAAA,KAAM,UAAU,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,MAC3D;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAA,CAAe,KAAa,KAAA,EAAqB;AAC/C,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,aAAA,GAAgB,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,CAAA;AACzC,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,aAAA,GAAgB,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAC5B,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,IAAI,UAAA,GAAa,EAAA;AACjB,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,iBAAA,GAAoB,EAAA;AAExB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAC9B,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAI,SAAA,IAAa,OAAA,KAAY,EAAA,EAAI,iBAAA,GAAoB,CAAA,GAAI,CAAA;AACzD,QAAA,SAAA,GAAY,OAAA,KAAY,aAAA;AACxB,QAAA,IAAI,WAAW,UAAA,GAAa,CAAA;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,iBAAA,GAAoB,CAAA;AACpB,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AAChD,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,KAAM,UAAU,OAAA,GAAU,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,IAAI,SAAA,IAAa,iBAAA,KAAsB,EAAA,EAAI,iBAAA,GAAoB,UAAA;AAE/D,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,OAAO,CAAA,GAAI,CAAA,CAAA,EAAK,QAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,cAAc,CAAA,EAAG;AAC1B,MAAA,KAAA,CAAM,MAAA,CAAO,oBAAoB,CAAA,EAAG,CAAA,EAAG,IAAK,QAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE,CAAA,MAAO;AACL,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAM,EAAA,EAAI,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA;AACrE,MAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAK,QAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACvC;AAEA,IAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACnC;AAAA;AAAA,EAIA,UAAU,OAAA,EAA+B;AACvC,IAAA,MAAM,OAAoB,EAAC;AAC3B,IAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAE9C,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,QAAA,GAAW,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACnC,MAAA,IAAI,aAAa,EAAA,EAAI;AACnB,QAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAI,GAAG,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,MAAM,CAAA;AAAA,MAC9E,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,SAAA,CAAU,GAAG,QAAQ,CAAA;AACxC,QAAA,MAAM,IAAA,GAAmB,EAAE,GAAG,CAAA,EAAG,IAAA,EAAM,EAAE,IAAA,CAAK,SAAA,CAAU,QAAA,GAAW,CAAC,CAAA,EAAE;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAA,CAAI,GAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,EAAE,CAAA;AAC1C,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AAAA,MAC7B;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,UAAU,CAAA,IAAK,OAAA,EAAS;AACvC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAC1C,MAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,EAAK,IAAA,EAAM,SAAS,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,IACtE;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAChD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACvC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,WAAW,CAAA;AAAA,EAC7C;AAAA;AAAA,EAIA,YAAA,CAAa,OAAA,EAAiB,MAAA,EAAuB,IAAA,EAAc,OAAA,EAAiC;AAClG,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,cAAA,CAAe,WAAW,CAAA,IAAK,cAAc,CAAA,EAAA,EAAK,IAAA,CAAK,cAAA,CAAe,YAAY,CAAA,IAAK,kBAAkB,CAAA,CAAA,CAAA;AAChI,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB;AAAA,KACF;AACA,IAAA,IAAI,OAAA,OAAc,OAAA,GAAU,OAAA;AAC5B,IAAA,OAAO,KAAK,WAAA,CAAY,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACxD;AAAA,EAEA,WAAW,IAAA,EAAiC;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAChC,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,KAAS,UAAU,OAAO,IAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAA,CAAQ,WAA0B,KAAA,EAAqD;AACrF,IAAA,MAAM,SAA+C,EAAC;AACtD,IAAA,IAAI,OAAA,GAAU,SAAA;AACd,IAAA,OAAO,OAAA,IAAW,MAAA,CAAO,MAAA,GAAS,KAAA,EAAO;AACvC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACtC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,GAAG,QAAQ,CAAA;AACxC,MAAA,OAAA,GAAU,MAAA,CAAO,MAAA;AAAA,IACnB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAIA,cAAc,UAAA,EAAyC;AACrD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA;AACzC,IAAA,IAAI,CAAC,MAAA,EAAQ,uBAAO,IAAI,GAAA,EAAI;AAC5B,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,EAAE,CAAA;AAAA,EACzC;AAAA,EAEQ,WAAA,CAAY,UAAkB,MAAA,EAAqC;AACzE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AACpC,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,SAAS,MAAA,EAAQ,2BAAW,GAAA,EAAI;AAChD,IAAA,MAAM,OAAA,GAAuB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAChD,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,WAAW,MAAA,GAAS,MAAA,GAAS,GAAA,GAAM,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA;AACpD,MAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AACrB,QAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,CAAA,CAAE,IAAI,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,KAAK,WAAA,CAAY,CAAA,CAAE,IAAA,EAAM,QAAQ,CAAA,EAAG;AACvD,UAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,eAAe,IAAA,EAA6B;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAChC,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,KAAS,QAAQ,OAAO,IAAA;AACxC,IAAA,OAAO,GAAA,CAAI,IAAA;AAAA,EACb;AAAA;AAAA,EAIA,kBAAA,GAAkC;AAChC,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAC3D,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,CAAC,SAAS,OAAA,KAAY;AACxD,MAAA,IAAA,CAAK,IAAI,OAAO,CAAA;AAChB,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AACpD,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACtC,MAAA,IAAI,CAAC,SAAA,EAAW,CAEhB,MAAA,IAAW,gBAAgB,SAAA,EAAW;AACpC,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,UAAA,EAAY,UAAA,EAAY,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,IAAK,EAAA,EAAI,UAAA,EAAY,SAAS,CAAA;AAAA,MAC1H;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG;AACrB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,IAAI,CAAA,IAAK,IAAI,CAAA;AAAA,MAChG;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,eAAA,GAA+B;AAC7B,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,MAAM,WAAW,QAAA,GAAW,IAAA,CAAK,cAAc,QAAQ,CAAA,uBAAQ,GAAA,EAAoB;AACnF,IAAA,MAAM,SAAsB,EAAC;AAE7B,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAE3D,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACxC,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,YAAA,KAAiB,CAAA,CAAE,IAAA,EAAM;AAClC,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAY,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,IAAI,CAAA,IAAK,QAAA,EAAU;AAC7B,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAAA,MACzC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,iBAAA,GAA8B;AAC5B,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AACnD,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,CAAC,OAAA,KAAY;AAC/C,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,IACtD,CAAC,CAAA;AAED,IAAA,OAAO,UAAU,IAAA,EAAK;AAAA,EACxB;AAAA;AAAA,EAIA,YAAA,CAAa,GAAA,EAAa,MAAA,EAAgB,EAAA,EAAsD;AAC9F,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,cAAA,EAAgB;AAChD,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,GAAM,IAAA;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA;AACvC,QAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,UAAA,IAAA,CAAK,aAAa,QAAA,EAAU,MAAA,GAAS,SAAS,GAAA,GAAM,IAAA,GAAO,MAAM,EAAE,CAAA;AAAA,QACrE,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,EAAO,EAAG;AACxB,UAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,GAAS,GAAA,GAAM,IAAA,GAAO,IAAA;AAC/C,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,UAAU,MAAa,CAAA;AAC7D,UAAA,EAAA,CAAG,SAAS,OAAO,CAAA;AAAA,QACrB;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAAwB;AAAA,IAClC;AAAA,EACF;AAAA;AAAA,EAIA,aAAA,GAA8B;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,IAAA,CAAK,MAAA,GAAS,eAAe,MAAa,CAAA;AAC5E,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,eAAe,IAAA,EAA0B;AACvC,IAAA,MAAM,GAAA,GAAM,KAAK,MAAA,GAAS,OAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1E,IAAA,IAAA,CAAK,GAAA,CAAI,cAAc,IAAA,CAAK,MAAA,GAAS,eAAe,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EAC1E;AAAA;AAAA,EAIA,aAAa,IAAA,EAA6B;AACxC,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,CAAA,OAAA,EAAU,IAAI,CAAA,IAAA,CAAM,CAAA;AAAA,EACjD;AAAA,EAEA,eAAe,GAAA,EAAqD;AAClE,IAAA,IAAI,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,4CAA4C,CAAA;AAC9D,IAAA,IAAI,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAE;AACxC,IAAA,CAAA,GAAI,GAAA,CAAI,MAAM,2CAA2C,CAAA;AACzD,IAAA,IAAI,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAE;AACxC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,eAAe,SAAA,CACb,IAAA,EACA,KAAA,EACA,MAAA,GAAS,OACT,IAAA,EACqD;AACrD,EAAA,MAAM,GAAA,GAAM,yBAAyB,IAAI,CAAA,CAAA;AACzC,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,MAAA,EAAQ,gCAAA;AAAA,IACR,aAAA,EAAe,SAAS,KAAK,CAAA,CAAA;AAAA,IAC7B,YAAA,EAAc;AAAA,GAChB;AACA,EAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAEpC,EAAA,MAAM,IAAA,GAAO,MAAMC,kBAAA,CAAa,GAAA,EAAK;AAAA,IACnC,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,GACrC,CAAA;AAED,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAM,KAAK,IAAA,EAAK;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,GAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,CAAK,IAAI,MAAA,EAAQ,IAAA,CAAK,QAAQ,IAAA,EAAK;AAClD;AAMA,SAAS,UAAA,CAAW,KAAmB,GAAA,EAAyD;AAC9F,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,UAAU,GAAA,GAAM,OAAA;AACtB,IAAA,IAAI;AACF,MAAA,IAAI,GAAA,CAAI,WAAW,OAAO,CAAA,SAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,GAAA,EAAI;AAAA,IACtE,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAChB,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,CAAA,EAAG,IAAI,WAAA,CAAY,GAAG,CAAC,CAAA,IAAK,GAAA;AACzD,IAAA,IAAI,WAAW,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AACA,EAAA,IAAI,GAAA,CAAI,WAAW,OAAO,CAAA,SAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,GAAA,EAAI;AACpE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,KAAmB,GAAA,EAAyD;AAC/F,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,EAAK,GAAG,CAAA;AACjC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAE,KAAA,EAAOC,UAAA,CAAK,wEAAA,EAA0E,GAAG,CAAA,EAAE;AAAA,EACtG;AACA,EAAA,OAAO,EAAE,MAAM,IAAI,OAAA,CAAQ,KAAK,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,MAAM,CAAA,EAAE;AAC/D;AAMA,SAAS,OAAA,CAAQ,MAAgB,GAAA,EAAgC;AAC/D,EAAA,IAAI,SAAS,GAAA,CAAI,GAAA;AACjB,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAA,MAAA,GAASC,aAAW,CAAQ,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AACtC,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAS,MAAA,GAAS,OAAA;AACxB,EAAA,IAAI,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG;AACjC,IAAA,OAAOC,QAAA,CAAG,4CAA4C,MAAM,CAAA;AAAA,CAAK,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,MAAA;AAAA,IACA,MAAA,GAAS,UAAA;AAAA,IACT,MAAA,GAAS,OAAA;AAAA,IACT,MAAA,GAAS,aAAA;AAAA,IACT,MAAA,GAAS;AAAA,GACX;AACA,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EAC5E;AAEA,EAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,OAAA,EAAS,wBAAwB,CAAA;AACnE,EAAA,GAAA,CAAI,MAAA,CAAO,aAAA;AAAA,IACT,MAAA,GAAS,SAAA;AAAA,IACT;AAAA,GACF;AACA,EAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,qBAAA,EAAuB,IAAI,CAAA;AAC7D,EAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,MAAA,GAAS,QAAA,EAAU,gBAAgB,CAAA;AAE5D,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AAEpF,EAAA,OAAOA,QAAA,CAAG,uCAAuC,MAAM,CAAA;AAAA,CAAK,CAAA;AAC9D;AAEA,SAAS,MAAA,CAAO,MAAgB,GAAA,EAAgC;AAC9D,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AACjF,EAAA,MAAM,SAAA,GAAY,MAAA,GAAS,EAAC,GAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAErE,EAAA,IAAI,CAAC,MAAA,IAAU,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACrC,IAAA,OAAOF,WAAK,qCAAqC,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,CAAC,SAAS,OAAA,KAAY;AACxD,MAAA,IAAA,CAAK,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,IAClC,CAAC,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,CAAA,CAAE,IAAA;AACxC,MAAA,IAAI,CAAC,IAAI,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AAAA,IAC5D;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,OAAA,GAAUC,aAAW,CAAQ,GAAA,CAAI,KAAK,IAAI,CAAA;AAChD,MAAA,MAAM,OAAA,GAAUE,cAAW,CAAS,IAAA,CAAK,SAAS,OAAO,CAAA;AACzD,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAE9B,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA,EAAG;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA;AACxC,UAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,YAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,CAAC,IAAI,OAAA,KAAY;AACnD,cAAA,IAAA,CAAK,UAAA,CAAW,IAAI,OAAO,CAAA;AAAA,YAC7B,CAAC,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,MAAM,OAAA,GAAU,GAAA,CAAI,MAAA,CAAO,YAAA,CAAa,SAAS,MAAa,CAAA;AAC9D,YAAA,IAAA,CAAK,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,UAClC;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAAa;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAOD,SAAG,EAAE,CAAA;AACd;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,QAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,SAAS,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA;AAE7C,EAAA,MAAM,MAAA,GAAS,KAAK,eAAA,EAAgB;AACpC,EAAA,MAAM,QAAA,GAAW,KAAK,kBAAA,EAAmB;AACzC,EAAA,MAAM,SAAA,GAAY,KAAK,iBAAA,EAAkB;AAEzC,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,IAAIE,IAAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,IAAA,GAAO,EAAE,MAAA,KAAW,OAAA,GAAU,MAAM,CAAA,CAAE,MAAA,KAAW,YAAY,GAAA,GAAM,GAAA;AACzE,MAAAA,IAAAA,IAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,EAAE,IAAI;AAAA,CAAA;AAAA,IAC3B;AACA,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,KAAW,SAAA,GAAY,GAAA,GAAM,GAAA;AAC5C,MAAAA,IAAAA,IAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI;AAAA,CAAA;AAAA,IAC3B;AACA,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAAA,IAAAA,IAAO,MAAM,CAAC;AAAA,CAAA;AAAA,IAChB;AACA,IAAA,OAAOF,SAAGE,IAAG,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,EAAiB,IAAK,iBAAA;AAC1C,EAAA,IAAI,GAAA,GAAM,aAAa,MAAM;AAAA,CAAA;AAE7B,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,IAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1E,IAAA,GAAA,IAAO,yCAAA;AACP,IAAA,OAAOF,SAAG,GAAG,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,GAAA,IAAO;AAAA;AAAA,CAAA;AACP,IAAA,GAAA,IAAO,CAAA;AAAA,CAAA;AACP,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,KAAW,OAAA,GAAU,aAAa,CAAA,CAAE,MAAA,KAAW,YAAY,SAAA,GAAY,UAAA;AACvF,MAAA,GAAA,IAAO,CAAA,CAAA,EAAKG,WAAK,CAAA,EAAG,KAAK,OAAO,CAAA,CAAE,IAAI,GAAGC,WAAK;AAAA,CAAA;AAAA,IAChD;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,GAAA,IAAO;AAAA;AAAA,CAAA;AACP,IAAA,GAAA,IAAO,CAAA;AAAA,CAAA;AACP,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAA,KAAW,SAAA,GAAY,SAAA,GAAY,UAAA;AACnD,MAAA,GAAA,IAAO,CAAA,CAAA,EAAK,GAAG,CAAA,EAAG,KAAK,OAAO,CAAA,CAAE,IAAI,GAAGA,WAAK;AAAA,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,GAAA,IAAO;AAAA;AAAA,CAAA;AACP,IAAA,GAAA,IAAO,CAAA;AAAA,CAAA;AACP,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,GAAA,IAAO,CAAA,CAAA,EAAK,GAAG,CAAA,EAAG,CAAC,GAAGA,WAAK;AAAA,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,OAAOJ,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,WAAA,EAAa;AAC/C,MAAA,OAAA,GAAU,IAAA,CAAK,EAAE,CAAC,CAAA,IAAK,EAAA;AAAA,IACzB,CAAA,MAAA,IAAW,KAAK,CAAC,CAAA,KAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,OAAA,EAAS;AAClD,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA,MAAA,IAAW,IAAA,CAAK,CAAC,CAAA,KAAM,eAAA,EAAiB;AACtC,MAAA,UAAA,GAAa,IAAA;AAAA,IACf,CAAA,MAAA,IAAW,IAAA,CAAK,CAAC,CAAA,KAAM,uBAAA,EAAyB,WAErC,IAAA,CAAK,CAAC,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,EAAG;AACnC,MAAA,OAAA,GAAU,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,IAAA,EAAM;AACpB,IAAA,OAAOF,WAAK,sCAAsC,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,CAAA,CAAE,IAAA;AACxC,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,EAAG;AACnC,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,GAAA,CAAI,MAAA,CAAO,YAAA,CAAa,UAAU,MAAa,CAAA;AAC/D,UAAA,IAAA,CAAK,UAAA,CAAW,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA;AAAA,QACjC,CAAA,CAAA,MAAQ;AAAA,QAAQ;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAI,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,eAAA,EAAgB;AAEpC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,CAAC,UAAA,EAAY;AACtC,IAAA,OAAOA,WAAK,yCAAyC,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,KAAK,WAAA,EAAY;AAChC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,QAAQ,QAAQ,CAAA;AAE9D,EAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,eAAA,CAAgB,QAAQ,UAAU,CAAA;AAAA,EACzC,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACvC,EAAA,MAAM,cAAc,MAAA,IAAU,MAAA;AAC9B,EAAA,MAAM,SAAS,CAAC,MAAA;AAChB,EAAA,MAAM,GAAA,GAAM,CAAA,CAAA,EAAI,WAAW,CAAA,EAAG,MAAA,GAAS,mBAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA,EAAA,EAAK,OAAO;AAAA,CAAA,EAC/E,OAAO,MAAM,CAAA,KAAA,EAAQ,OAAO,MAAA,KAAW,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,CAAA;AAEzD,EAAA,OAAOE,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,MAAA,CAAO,MAAgB,GAAA,EAAgC;AAC9D,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,MAAA,GAAwB,IAAA;AAE5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,WAAA,EAAa;AAC3B,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAA,MAAA,IAAW,KAAK,CAAC,CAAA,KAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,aAAA,EAAe;AACxD,MAAA,KAAA,GAAQ,SAAS,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,EAAE,CAAA,IAAK,EAAA;AAAA,IACrC,CAAA,MAAA,IAAW,IAAA,CAAK,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAC5D,MAAA,KAAA,GAAQ,QAAA,CAAS,KAAK,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA,EAAG,EAAE,CAAA,IAAK,EAAA;AAAA,IAC5C,WAAW,IAAA,CAAK,CAAC,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AAC1C,MAAA,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAAA,IAC1B,WAAW,IAAA,CAAK,CAAC,CAAA,CAAE,UAAA,CAAW,kBAAkB,CAAA,EAAG;AACjD,MAAA,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA;AAAA,IAC3B,WAAW,IAAA,CAAK,CAAC,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AAC1C,MAAA,MAAA,GAAS,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,IAAI,CAAC,IAAA,EAAM,OAAOA,QAAA,CAAG,EAAE,CAAA;AAEvB,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AACxC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAOA,SAAG,EAAE,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,KAAK,gBAAA,EAAiB;AAC5C,EAAA,IAAI,GAAA,GAAM,EAAA;AAEV,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAI,IAAA,GAAO,MAAA,CACR,OAAA,CAAQ,KAAA,EAAO,CAAA,CAAE,IAAI,CAAA,CACrB,OAAA,CAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CACjC,OAAA,CAAQ,KAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CACvC,OAAA,CAAQ,MAAA,EAAQ,EAAE,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CACvC,OAAA,CAAQ,MAAA,EAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,CAAC,CAAC,CAAA,CAC1D,OAAA,CAAQ,KAAA,EAAO,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,aAAA,GAAgB,CAAA,UAAA,EAAa,aAAa,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CACpF,OAAA,CAAQ,OAAO,IAAI,CAAA;AACtB,MAAA,GAAA,IAAO,IAAA,GAAO,IAAA;AAAA,IAChB,WAAW,OAAA,EAAS;AAClB,MAAA,MAAM,UAAA,GAAa,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,gBAAgB,CAAA,CAAA,EAAI,MAAM,CAAA,SAAA,EAAYK,UAAI,GAAG,aAAa,CAAA,EAAG,MAAM,CAAA,CAAA,EAAID,WAAK,CAAA,CAAA,GAAK,EAAA;AACvH,MAAA,GAAA,IAAO,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAGA,WAAK,CAAA,EAAG,UAAU,IAAI,CAAA,CAAE,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,CAAC,CAAC;AAAA,CAAA;AAAA,IACxF,CAAA,MAAO;AACL,MAAA,MAAM,UAAA,GAAa,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,gBAAgB,CAAA,CAAA,EAAI,MAAM,CAAA,SAAA,EAAYC,UAAI,GAAG,aAAa,CAAA,EAAG,MAAM,CAAA,CAAA,EAAID,WAAK,CAAA,CAAA,GAAK,EAAA;AACvH,MAAA,GAAA,IAAO,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,CAAA,CAAE,IAAI,CAAA,EAAGA,WAAK,GAAG,UAAU;AAAA,CAAA;AACrD,MAAA,GAAA,IAAO,CAAA,QAAA,EAAW,EAAE,MAAM;AAAA,CAAA;AAC1B,MAAA,GAAA,IAAO,WAAW,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,aAAa;AAAA,CAAA;AACrD,MAAA,GAAA,IAAO;AAAA,IAAA,EAAS,EAAE,OAAO;;AAAA,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,OAAOJ,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,OAAA,CAAQ,MAAgB,GAAA,EAAgC;AAC/D,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,IAAK,IAAA,CAAK,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAEnC,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,KAAA,GAAQ,KAAK,eAAA,EAAgB;AAC7B,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,MAAM,WAAW,QAAA,GAAW,IAAA,CAAK,cAAc,QAAQ,CAAA,uBAAQ,GAAA,EAAoB;AACnF,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAC3D,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACnC,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACnC,MAAA,CAAA,CAAE,aAAa,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,EAAA,GAAK,EAAA;AAC9D,MAAA,CAAA,CAAE,aAAa,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,EAAA,GAAK,EAAA;AAAA,IAChE;AAAA,EACF,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,KAAK,kBAAA,EAAmB;AAAA,EAClC;AAEA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAOA,SAAG,EAAE,CAAA;AAEpC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,IAAIE,IAAAA,GAAM,EAAA;AACV,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,QAAA,GAAW,EAAE,UAAA,GAAa,CAAA,CAAE,WAAW,KAAA,CAAM,IAAI,IAAI,EAAC;AAC5D,MAAA,MAAM,QAAA,GAAW,EAAE,UAAA,GAAa,CAAA,CAAE,WAAW,KAAA,CAAM,IAAI,IAAI,EAAC;AAC5D,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,QAAA,EAAU,QAAQ,CAAA;AACxC,MAAA,MAAM,EAAE,UAAA,EAAY,GAAA,EAAK,WAAW,GAAA,EAAI,GAAI,aAAa,GAAG,CAAA;AAC5D,MAAA,QAAA,IAAY,GAAA;AACZ,MAAA,QAAA,IAAY,GAAA;AACZ,MAAAA,IAAAA,IAAO,IAAI,CAAA,CAAE,IAAI,MAAM,GAAA,GAAM,GAAG,CAAA,CAAA,EAAIC,WAAK,CAAA,EAAG,GAAA,CACzC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,MAAA,CAAO,GAAG,CAAC,CAAA,EAAGC,WAAK;AAAA,CAAA;AAAA,IAChD;AACA,IAAAF,IAAAA,IAAO,IAAI,KAAA,CAAM,MAAM,QAAQ,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAA;AAC5D,IAAA,IAAI,QAAA,GAAW,CAAA,EAAGA,IAAAA,IAAO,CAAA,EAAA,EAAK,QAAQ,CAAA,UAAA,EAAa,QAAA,KAAa,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,GAAA,CAAA;AAC5E,IAAA,IAAI,QAAA,GAAW,CAAA,EAAGA,IAAAA,IAAO,CAAA,EAAA,EAAK,QAAQ,CAAA,SAAA,EAAY,QAAA,KAAa,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,GAAA,CAAA;AAC3E,IAAAA,IAAAA,IAAO,IAAA;AACP,IAAA,OAAOF,SAAGE,IAAG,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,QAAA,GAAW,EAAE,UAAA,GAAa,CAAA,CAAE,WAAW,KAAA,CAAM,IAAI,IAAI,EAAC;AAC5D,IAAA,MAAM,QAAA,GAAW,EAAE,UAAA,GAAa,CAAA,CAAE,WAAW,KAAA,CAAM,IAAI,IAAI,EAAC;AAE5D,IAAA,GAAA,IAAO,CAAA,EAAG,IAAI,CAAA,aAAA,EAAgB,CAAA,CAAE,IAAI,CAAA,GAAA,EAAM,CAAA,CAAE,IAAI,CAAA,EAAGE,WAAK;AAAA,CAAA;AACxD,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,OAAA,EAAS,GAAA,IAAO,wBAAA;AACjC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,SAAA,EAAW,GAAA,IAAO,4BAAA;AACnC,IAAA,GAAA,IAAO,OAAO,CAAA,CAAE,MAAA,KAAW,UAAU,WAAA,GAAc,IAAA,GAAO,EAAE,IAAI;AAAA,CAAA;AAChE,IAAA,GAAA,IAAO,OAAO,CAAA,CAAE,MAAA,KAAW,YAAY,WAAA,GAAc,IAAA,GAAO,EAAE,IAAI;AAAA,CAAA;AAElE,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,QAAA,EAAU,QAAQ,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,EAAK,CAAC,CAAA;AAE/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,GAAA,IAAO,CAAA,EAAGC,UAAI,CAAA,IAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK,KAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,MAAMD,WAAK;AAAA,CAAA;AACjG,MAAA,KAAA,MAAW,EAAA,IAAM,KAAK,KAAA,EAAO;AAC3B,QAAA,IAAI,EAAA,CAAG,SAAS,OAAA,EAAS;AACvB,UAAA,GAAA,IAAO,CAAA,CAAA,EAAI,GAAG,IAAI;AAAA,CAAA;AAAA,QACpB,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,QAAA,EAAU;AAC/B,UAAA,GAAA,IAAO,GAAG,GAAG,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,GAAGA,WAAK;AAAA,CAAA;AAAA,QAClC,CAAA,MAAO;AACL,UAAA,GAAA,IAAO,GAAGD,WAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,GAAGC,WAAK;AAAA,CAAA;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAOJ,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACnC,IAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,IAAA,OAAOA,QAAA,CAAG,MAAA,GAAS,MAAA,GAAS,IAAA,GAAO,IAAI,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,KAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACpF,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,GAAY,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,EAAM,OAAOF,UAAA,CAAK,+BAA+B,CAAA;AACtD,IAAA,IAAI,IAAA,KAAS,IAAA,CAAK,gBAAA,EAAiB,EAAG;AACpC,MAAA,OAAOA,UAAA,CAAK,gCAAgC,IAAI,CAAA;AAAA,CAAkB,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,EAAG;AAC3B,MAAA,OAAOE,QAAA,CAAG,kBAAkB,IAAI,CAAA;AAAA,CAAK,CAAA;AAAA,IACvC;AACA,IAAA,OAAOF,UAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,CAAgB,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACnC,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,GAAY,CAAC,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,GAAY,CAAC,CAAA;AAClC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS,OAAOA,WAAK,sCAAsC,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA,EAAM,OAAOA,UAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,CAAoB,CAAA;AACpE,IAAA,IAAA,CAAK,eAAA,CAAgB,SAAS,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,aAAa,OAAO,CAAA;AACzB,IAAA,IAAI,IAAA,CAAK,gBAAA,EAAiB,KAAM,OAAA,EAAS;AACvC,MAAA,IAAA,CAAK,OAAA,CAAQ,qBAAqB,OAAO,CAAA;AAAA,IAC3C;AACA,IAAA,OAAOE,QAAA,CAAG,CAAA,QAAA,EAAW,OAAO,CAAA,cAAA,EAAiB,OAAO,CAAA;AAAA,CAAM,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAA,GAAO,SAAS,CAAC,CAAA;AACvB,IAAA,MAAM,UAAA,GAAa,SAAS,CAAC,CAAA;AAC7B,IAAA,MAAM,OAAO,UAAA,GAAa,IAAA,CAAK,WAAW,UAAU,CAAA,GAAI,KAAK,WAAA,EAAY;AACzE,IAAA,IAAI,CAAC,IAAA,EAAM,OAAOF,UAAA,CAAK,CAAA,iCAAA,EAAoC,cAAc,MAAM,CAAA;AAAA,CAAA,EAAO,GAAG,CAAA;AACzF,IAAA,IAAA,CAAK,eAAA,CAAgB,MAAM,IAAI,CAAA;AAC/B,IAAA,OAAOE,SAAG,EAAE,CAAA;AAAA,EACd;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,YAAA,EAAa;AACnC,EAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,EAAiB;AACtC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,CAAA,IAAK,QAAA,CAAS,IAAA,EAAK,EAAG;AAC/B,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,GAAA,IAAO,CAAA,EAAA,EAAKG,WAAK,CAAA,EAAG,CAAC,GAAGC,WAAK;AAAA,CAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,GAAA,IAAO,KAAK,CAAC;AAAA,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAOJ,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,WAAA,CAAY,MAAgB,GAAA,EAAgC;AACnE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACpC,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAEtD,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAOF,WAAK,gDAAgD,CAAA;AAEvF,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,aAAA,GAA+B,IAAA;AAEnC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC9B,IAAA,aAAA,GAAgB,IAAA,CAAK,OAAO,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,aAAA,EAAe,OAAOA,UAAA,CAAK,sCAAsC,CAAA;AACtE,IAAA,MAAA,GAAS,KAAK,IAAA,GAAO,CAAC,CAAA,IAAK,IAAA,CAAK,kBAAiB,IAAK,MAAA;AAAA,EACxD,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,SAAS,CAAC,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAEvC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,CAAC,UAAA,EAAY,UAAA,GAAa,IAAA,CAAK,WAAA,EAAY;AAC/C,IAAA,IAAI,CAAC,UAAA,EAAY,OAAOA,UAAA,CAAK,oCAAoC,MAAM,CAAA;AAAA,CAAA,EAAO,GAAG,CAAA;AACjF,IAAA,IAAA,CAAK,eAAA,CAAgB,eAAgB,UAAU,CAAA;AAC/C,IAAA,IAAA,CAAK,OAAA,CAAQ,qBAAqB,aAAc,CAAA;AAChD,IAAA,OAAOE,QAAA,CAAG,6BAA6B,aAAa,CAAA;AAAA,CAAK,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,YAAA,EAAa;AACnC,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAEzC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAOF,UAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,CAA6C,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,EAAY;AACrC,EAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAChD,IAAA,MAAM,cAAc,WAAA,GAAc,IAAA,CAAK,cAAc,WAAW,CAAA,uBAAQ,GAAA,EAAoB;AAE5F,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,UAAA,EAAY;AACzC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC5C,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,QAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,QAAA,IAAI,OAAO,CAAC,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG;AACtC,UAAA,GAAA,CAAI,OAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAC/C;AACA,QAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,IAAI,CAAA,IAAK,WAAA,EAAa;AAChC,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,QAAA,IAAI;AACF,UAAA,GAAA,CAAI,MAAA,CAAO,WAAW,QAAQ,CAAA;AAAA,QAChC,CAAA,CAAA,MAAQ;AAAA,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,IAAA,MAAM,WAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,UAAA,EAAY;AACzC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAA,CAAK,OAAA,CAAQ,qBAAqB,MAAM,CAAA;AACxC,IAAA,OAAOE,QAAA,CAAG,uBAAuB,MAAM,CAAA;AAAA,CAAK,CAAA;AAAA,EAC9C,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AACvB,IAAA,OAAOA,SAAG,CAAA,eAAA,EAAkB,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC;AAAA,CAAI,CAAA;AAAA,EACxD;AACF;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,KAAK,CAAC,CAAA,KAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,UAAA,EAAY;AAC9C,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,WAAA,CAAY,SAAS,GAAG,CAAA;AACjC;AAEA,SAAS,WAAA,CAAY,MAAgB,GAAA,EAAgC;AACnE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AAE5C,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,iBAAA;AACH,QAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,iCAAiC,GAAG,CAAA;AAC5D,QAAA,OAAOE,QAAA,CAAG,KAAA,CAAM,OAAA,GAAU,IAAI,CAAA;AAAA,MAChC,KAAK,uBAAA;AACH,QAAA,OAAOA,QAAA,CAAG,KAAA,GAAQ,QAAA,GAAW,SAAS,CAAA;AAAA,MACxC,KAAK,WAAA;AACH,QAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,iCAAiC,GAAG,CAAA;AAC5D,QAAA,OAAOE,SAAG,QAAQ,CAAA;AAAA,MACpB,KAAK,sBAAA;AACH,QAAA,OAAOA,SAAG,SAAS,CAAA;AAAA,MACrB,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,IAAI,CAAC,CAAA;AACzC,QAAA,IAAI,MAAA,KAAW,UAAU,KAAA,EAAO;AAC9B,UAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAChE,UAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,UAAA,OAAOA,QAAA,CAAA,CAAI,MAAA,IAAU,MAAA,IAAU,IAAI,CAAA;AAAA,QACrC;AACA,QAAA,OAAOA,SAAG,QAAQ,CAAA;AAAA,MACpB;AAAA,MACA,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,IAAI,CAAC,CAAA;AACzC,QAAA,IAAI,MAAA,KAAW,UAAU,KAAA,EAAO;AAC9B,UAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAChE,UAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,UAAA,OAAOA,QAAA,CAAG,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA,GAAI,OAAO,IAAI,CAAA;AAAA,QACjD;AACA,QAAA,OAAOA,SAAG,IAAI,CAAA;AAAA,MAChB;AAAA,MACA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,IAAI,CAAC,CAAA;AACzC,QAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,iCAAiC,GAAG,CAAA;AAC5D,QAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAChE,QAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,UAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,UAAA,IAAI,IAAA,EAAM,OAAOE,QAAA,CAAG,IAAA,GAAO,IAAI,CAAA;AAC/B,UAAA,OAAOF,UAAA,CAAK,qCAAqC,GAAG,CAAA;AAAA,QACtD;AACA,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,MAAA,IAAU,EAAE,CAAA;AAC7C,QAAA,IAAI,QAAA,EAAU,OAAOE,QAAA,CAAG,QAAA,GAAW,IAAI,CAAA;AACvC,QAAA,OAAOF,UAAA,CAAK,CAAA;AAAA,CAAA,EAAqC,GAAG,CAAA;AAAA,MACtD;AAEE;AACJ,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,KAAA,EAAO;AAChC,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAChE,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,QAAA,IAAI,IAAA,EAAM,OAAOE,QAAA,CAAG,IAAA,GAAO,IAAI,CAAA;AAAA,MACjC,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAChC,QAAA,IAAI,IAAA,EAAM,OAAOA,QAAA,CAAG,IAAA,GAAO,IAAI,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAOA,SAAG,IAAI,CAAA;AAChB;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AAE5C,EAAA,IAAI,KAAK,QAAA,CAAS,QAAQ,KAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,iCAAiC,GAAG,CAAA;AAC5D,IAAA,MAAMQ,KAAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAChE,IAAA,MAAM,MAAA,GAASA,MAAK,UAAA,EAAW;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,UAAA,GAAa,EAAA;AACjB,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,8BAA8B,CAAA;AAC7D,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAA,GAAU,SAAS,CAAC,CAAA;AACpB,QAAA,UAAA,GAAa,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AAClD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,MAAMC,OAAM,UAAA,GACR,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,KACtC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAC5B,QAAA,GAAA,IAAO,GAAGA,IAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAA,CAAE,MAAM;AAAA,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,OAAOP,SAAG,GAAG,CAAA;AAAA,EACf;AAGA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,UAAA,IAAc,CAAA,KAAM,SAAA,IAAa,CAAA,KAAM,OAAO,CAAA;AAExF,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAOF,WAAK,uBAAuB,CAAA;AAE9D,EAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AAExB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAOA,UAAA,CAAK,iCAAiC,GAAG,CAAA;AACzE,IAAA,OAAOE,SAAG,IAAI,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,MAAM,CAAA;AAEhE,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,KAAK,CAAA;AAC9B,IAAA,OAAOA,SAAG,EAAE,CAAA;AAAA,EACd;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA;AACnC,EAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,OAAOA,QAAA,CAAG,MAAM,IAAI,CAAA;AACtC,EAAA,OAAOF,WAAK,EAAE,CAAA;AAChB;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAElB,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,EAAK,OAAOA,WAAK,sCAAsC,CAAA;AACrE,IAAA,IAAA,CAAK,cAAA,CAAe,CAAA,OAAA,EAAU,IAAI,CAAA,IAAA,CAAA,EAAQ,GAAG,CAAA;AAC7C,IAAA,IAAA,CAAK,eAAe,CAAA,OAAA,EAAU,IAAI,CAAA,MAAA,CAAA,EAAU,CAAA,2BAAA,EAA8B,IAAI,CAAA,EAAA,CAAI,CAAA;AAClF,IAAA,OAAOE,SAAG,EAAE,CAAA;AAAA,EACd;AAEA,EAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AACpC,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,CAAC,IAAA,EAAM,OAAOF,UAAA,CAAK,mCAAmC,CAAA;AAC1D,IAAA,MAAMU,OAAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,MAAMC,MAAAA,GAAQD,OAAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,MAAMN,OAAgB,EAAC;AACvB,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,KAAA,MAAW,QAAQO,MAAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,CAAA,SAAA,EAAY,IAAI,CAAA,EAAA,CAAA,EAAM;AACxC,QAAA,IAAA,GAAO,IAAA;AACP,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAK,IAAA,EAAK,CAAE,WAAW,GAAG,CAAA,IAAK,MAAM,IAAA,GAAO,KAAA;AAChD,MAAA,IAAI,CAAC,IAAA,EAAMP,IAAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,WAAA,CAAYA,IAAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/B,IAAA,OAAOF,SAAG,EAAE,CAAA;AAAA,EACd;AAEA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAC,CAAA,IAAK,QAAA;AACxB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAClC,IAAA,IAAI,GAAA,EAAK,OAAOA,QAAA,CAAG,GAAA,GAAM,IAAI,CAAA;AAC7B,IAAA,OAAOF,UAAA,CAAK,0BAA0B,IAAI,CAAA;AAAA,CAAA,EAAO,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,UAAU,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,WAAW,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,EAAA,MAAM,UAAgD,EAAC;AACvD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,EAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,EAAK,CAAE,MAAM,0BAA0B,CAAA;AAC1D,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,aAAA,GAAgB,MAAM,CAAC,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,EAAK,CAAE,MAAM,kBAAkB,CAAA;AACpD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,GAAA,EAAK,QAAQ,CAAC,CAAA,CAAE,IAAA,EAAK,EAAG,CAAA;AAC5D,QAAA,aAAA,GAAgB,EAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAWY,MAAK,OAAA,EAAS;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,IAAO,CAAA,EAAGA,EAAAA,CAAE,IAAI,CAAA,CAAA,EAAKA,GAAE,GAAG,CAAA;AAAA,CAAA;AAC1B,MAAA,GAAA,IAAO,CAAA,EAAGA,EAAAA,CAAE,IAAI,CAAA,CAAA,EAAKA,GAAE,GAAG,CAAA;AAAA,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,GAAA,IAAOA,GAAE,IAAA,GAAO,IAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAOV,SAAG,GAAG,CAAA;AACf;AAEA,SAAS,QAAA,CAAS,MAAgB,GAAA,EAAgC;AAChE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5B,IAAA,IAAI;AACF,MAAA,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,MAAA,GAAS,aAAa,CAAA;AACjD,MAAA,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,MAAA,GAAS,YAAY,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAChB,IAAA,OAAOA,SAAG,kBAAkB,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA;AACvD,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAOF,UAAA,CAAK,oCAAoC,CAAA;AAE7D,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AACzC,EAAA,IAAI,CAAC,UAAA,EAAY,OAAOA,UAAA,CAAK,UAAU,MAAM,CAAA;AAAA,CAAiC,CAAA;AAE9E,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,EAAY;AACrC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAMa,OAAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,IAAA,IAAIA,OAAAA,EAAQ,IAAA,CAAK,eAAA,CAAgBA,OAAAA,EAAQ,UAAU,CAAA;AACnD,IAAA,OAAOX,QAAA,CAAG,CAAA;AAAA,CAAgB,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,IAAA,OAAOA,SAAG,uBAAuB,CAAA;AAAA,EACnC;AAGA,EAAA,IAAI,MAAA,GAAwB,UAAA;AAC5B,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,IAAA,IAAI,WAAW,WAAA,EAAa;AAAE,MAAA,IAAA,GAAO,IAAA;AAAM,MAAA;AAAA,IAAO;AAClD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,MAAO,CAAA;AACtC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAA,EAAQ;AAC/B,IAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,EAClB;AAEA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAMW,OAAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,IAAA,IAAIA,OAAAA,EAAQ,IAAA,CAAK,eAAA,CAAgBA,OAAAA,EAAQ,UAAU,CAAA;AAAA,SAC9C,IAAA,CAAK,QAAQ,UAAU,CAAA;AAE5B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAChD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,UAAA,EAAY;AACzC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC5C,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,QAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,QAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,QAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF;AAEA,IAAA,MAAM,WAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,UAAA,EAAY;AACzC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACzE;AACA,IAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AAExB,IAAA,OAAOX,QAAA,CAAG,CAAA,SAAA,EAAY,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC;AAAA;AAAA,CAAkB,CAAA;AAAA,EAC5F;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACvC,EAAA,MAAM,YAAA,GAAe,iBAAiB,MAAM,CAAA,CAAA,CAAA;AAC5C,EAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc,WAAA,EAAa,UAAU,UAAU,CAAA;AAEnF,EAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,EAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,SAAS,CAAA;AAAA,OAC7C,IAAA,CAAK,QAAQ,SAAS,CAAA;AAE3B,EAAA,OAAOA,QAAA,CAAG,CAAA;AAAA,CAA2C,CAAA;AACvD;AAEA,SAAS,QAAA,CAAS,MAAgB,GAAA,EAAgC;AAChE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAC,CAAA,IAAK,MAAA;AAEvB,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,GAAA,IAAO,UAAU,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,CAAC,EAAE,OAAO;AAAA,CAAA;AAAA,IACzC;AACA,IAAA,OAAOA,SAAG,GAAG,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAQ,MAAA,IAAU,GAAA,KAAQ,UAAU,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG;AAChD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA,IAAK,IAAA,CAAK,CAAC,MAAM,MAAA,IAAU,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,GACtF,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GACb,SAAA,IAAa,IAAA,CAAK,gBAAA,EAAiB,IAAK,MAAA,CAAA;AAE5C,IAAA,MAAM,QAAA,GAAW,KAAK,kBAAA,EAAmB;AACzC,IAAA,MAAM,MAAA,GAAS,KAAK,eAAA,EAAgB;AACpC,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AAChD,MAAA,OAAOA,SAAG,4BAA4B,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,CAAC,SAAS,OAAA,KAAY;AACxD,MAAA,IAAA,CAAK,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,IAClC,CAAC,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,KAAK,SAAA,EAAU;AAClC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,KAAK,WAAA,EAAY;AAChC,IAAA,MAAM,YAAY,IAAA,CAAK,YAAA,CAAa,SAAA,GAAY,OAAA,EAAS,QAAQ,QAAQ,CAAA;AAEzE,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAEvB,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAC5C,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,QAAA,EAAU;AACvC,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC5C,QAAA,IAAI,YAAY,IAAA,EAAM;AACpB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,UAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,UAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,UAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,OAAA,EAAS,UAAA,EAAY,WAAW,CAAA;AAC/C,IAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AAExB,IAAA,OAAOA,QAAA,CAAG,2CAA2C,OAAO;AAAA,CAAI,CAAA;AAAA,EAClE;AAEA,EAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,GAAA,KAAQ,OAAA,EAAS;AACpC,IAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA,GAAI,SAAS,IAAA,CAAK,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,IAAI,UAAU,IAAA,CAAK,MAAA,EAAQ,OAAOF,UAAA,CAAK,iBAAiB,MAAM,CAAA;AAAA,CAAoB,CAAA;AAElF,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAErD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,SAAA,EAAW;AACxC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC5C,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,QAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,QAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,QAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA;AACrB,MAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAOE,QAAA,CAAG,kBAAkB,MAAM,CAAA;AAAA,CAAK,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA,GAAI,SAAS,IAAA,CAAK,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,IAAI,UAAU,IAAA,CAAK,MAAA,EAAQ,OAAOF,UAAA,CAAK,iBAAiB,MAAM,CAAA;AAAA,CAAoB,CAAA;AAClF,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AACxB,IAAA,OAAOE,QAAA,CAAG,kBAAkB,MAAM,CAAA;AAAA,CAAK,CAAA;AAAA,EACzC;AAEA,EAAA,OAAOF,UAAA,CAAK,oCAAoC,GAAG,CAAA;AAAA,CAAK,CAAA;AAC1D;AAEA,SAAS,KAAA,CAAM,MAAgB,GAAA,EAAgC;AAC7D,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAEnD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAOA,WAAK,sCAAsC,CAAA;AAE1E,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,OAAA,GAAUC,aAAW,CAAQ,GAAA,CAAI,KAAK,CAAC,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAUE,cAAW,CAAS,IAAA,CAAK,SAAS,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAI;AAAE,QAAA,GAAA,CAAI,MAAA,CAAO,WAAW,OAAO,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAQ;AAAA,IACxD;AAAA,EACF;AAEA,EAAA,OAAOD,SAAG,EAAE,CAAA;AACd;AAEA,SAAS,QAAA,CAAS,MAAgB,GAAA,EAAgC;AAChE,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAEnD,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,CAAC,IAAA,IAAQ,CAAC,IAAA,EAAM;AACtC,IAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,IAAA,MAAM,WAAW,QAAA,GAAW,IAAA,CAAK,cAAc,QAAQ,CAAA,uBAAQ,GAAA,EAAoB;AAEnF,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,OAAA,GAAUD,aAAW,CAAQ,GAAA,CAAI,KAAK,CAAC,CAAA;AAC7C,MAAA,MAAM,OAAA,GAAUE,cAAW,CAAS,IAAA,CAAK,SAAS,OAAO,CAAA;AACzD,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACzC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,QAAA,MAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AACvD,QAAA,IAAI,OAAO,CAAA,EAAG;AACZ,UAAA,OAAA,CAAQ,GAAG,EAAE,IAAA,GAAO,YAAA;AACpB,UAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,QACzB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,MAC9B;AAAA,IACF;AACA,IAAA,OAAOD,SAAG,EAAE,CAAA;AAAA,EACd;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,IAAK,MAAA;AAC9B,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,IAAK,KAAK,WAAA,EAAY;AAClE,EAAA,IAAI,CAAC,UAAA,EAAY,OAAOF,UAAA,CAAK,mCAAmC,GAAG,CAAA;AAEnE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAC1C,IAAA,MAAM,WAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,IAAA,EAAM;AACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAAA,IACzE;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA;AAC1C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,IAAA,EAAM;AACnC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC5C,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,IAAA;AACtC,QAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,QAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,QAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,KAAK,gBAAA,EAAiB;AACrC,EAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,UAAU,CAAA;AAEnD,EAAA,OAAOE,SAAG,CAAA,eAAA,EAAkB,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC;AAAA,CAAI,CAAA;AACxD;AAMA,SAAS,aAAa,GAAA,EAA4C;AAChE,EAAA,OAAO,GAAA,CAAI,YAAA,IAAgB,GAAA,CAAI,QAAA,IAAY,IAAA;AAC7C;AAEA,eAAe,QAAA,CAAS,MAAgB,GAAA,EAAyC;AAC/E,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAOF,UAAA,CAAK,+CAA+C,CAAA;AAErE,EAAA,IAAI,MAAA,GAAS,MAAA;AACb,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC9B,EAAA,IAAI,IAAA,IAAQ,KAAK,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA,EAAG,MAAA,GAAS,IAAA,CAAK,IAAA,GAAO,CAAC,CAAA;AAEvD,EAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,GAAG,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,cAAA,CAAe,GAAG,CAAA;AACrC,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAOA,UAAA,CAAK,sBAAsB,GAAG,CAAA;AAAA,CAAA,EAA2B,GAAG,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAOA,UAAA,CAAK,4EAA4E,GAAG,CAAA;AAAA,EAC7F;AAEA,EAAA,IAAI,SAAA,GAAY,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA,CAAG,IAAA;AAClC,EAAA,IAAI,CAAC,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,cAAeC,aAAW,CAAQ,GAAA,CAAI,GAAA,EAAK,SAAS,CAAA;AAEjF,EAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA;AACvE,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,IAAI,SAAS,MAAA,KAAW,GAAA,EAAK,OAAOD,UAAA,CAAK,sBAAsB,GAAG,CAAA;AAAA,CAAA,EAAiB,GAAG,CAAA;AACtF,IAAA,OAAOA,UAAA,CAAK,4BAA4B,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,IAAA,EAAM,WAAW,EAAE;AAAA,CAAA,EAAM,GAAG,CAAA;AAAA,EAClG;AACA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,IAAA,CAAK,cAAA,IAAkB,MAAA;AACtD,EAAA,IAAI,MAAA,KAAW,MAAA,IAAU,aAAA,KAAkB,MAAA,EAAQ,MAAA,GAAS,aAAA;AAE5D,EAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA;AAC9F,EAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,IAAA,OAAOA,UAAA,CAAK,yBAAyB,MAAM,CAAA;AAAA,CAAA,EAAiB,GAAG,CAAA;AAAA,EACjE;AACA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,GAAA;AAEtC,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA;AAClG,EAAA,IAAI,CAAC,UAAA,CAAW,EAAA,EAAI,OAAOA,UAAA,CAAK,CAAA;AAAA,CAAA,EAAmC,GAAG,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,GAAA;AAErC,EAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,WAAA,EAAc,OAAO,CAAA,YAAA,CAAA,EAAgB,KAAK,CAAA;AACxG,EAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAOA,UAAA,CAAK,CAAA;AAAA,CAAA,EAAiC,GAAG,CAAA;AAElE,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAE1F,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,MAAM,QAA8C,EAAC;AACrD,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM;AACrC,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,EAAA;AACnB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,UAAA,EAAY;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,UAAU,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,MAAM,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,UAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,WAAA,EAAc,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC;AAAA,KACvF;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,QAAA,GAAW,QAAQ,CAAC,CAAA;AAC1B,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAClB,MAAA,MAAM,QAAA,GAAW,SAAA,GAAY,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA;AAC5C,MAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,MAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,OAAA,GAAU,KAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,SAAS,IAAA,CAAK,OAAA;AAAA,MAC1B;AACA,MAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAC1C,MAAA,SAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAmB,QAAQ,EAAC,EAAG,EAAE,GAAG,GAAA,EAAK,GAAA,EAAK,SAAA,EAAW;AAEzD,EAAA,MAAM,aAAa,IAAI,OAAA,CAAQ,IAAI,MAAA,EAAQ,SAAA,EAAW,YAAY,OAAO,CAAA;AACzE,EAAA,UAAA,CAAW,cAAA,CAAe,qBAAqB,GAAG,CAAA;AAClD,EAAA,UAAA,CAAW,cAAA,CAAe,uBAAuB,qCAAqC,CAAA;AACtF,EAAA,UAAA,CAAW,cAAA,CAAe,SAAA,GAAY,MAAA,GAAS,SAAA,EAAW,QAAQ,CAAA;AAClE,EAAA,UAAA,CAAW,cAAA,CAAe,SAAA,GAAY,MAAA,GAAS,QAAA,EAAU,gBAAgB,MAAM,CAAA;AAE/E,EAAA,UAAA,CAAW,OAAA,CAAQ,qBAAqB,MAAM,CAAA;AAE9C,EAAA,UAAA,CAAW,YAAA,CAAa,SAAA,EAAW,EAAA,EAAI,CAAC,SAAS,OAAA,KAAY;AAC3D,IAAA,UAAA,CAAW,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,EACxC,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,WAAW,SAAA,EAAU;AACrC,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,SAAA,CAAU,OAAO,CAAA;AAC7C,EAAA,MAAM,kBAAkB,UAAA,CAAW,YAAA,CAAa,YAAY,GAAG,CAAA,CAAA,EAAI,MAAM,QAAQ,CAAA;AACjF,EAAA,UAAA,CAAW,eAAA,CAAgB,QAAQ,eAAe,CAAA;AAElD,EAAA,OAAOE,SAAG,CAAA,cAAA,EAAiB,QAAA,CAAS,CAAC,CAAA,IAAK,GAAG,IAAI,CAAA;AAAA,6BAAA,EAAsC,SAAS;AAAA,yBAAA,EAA8B,SAAS,IAAI,SAAS,CAAA;AAAA,CAAY,CAAA;AAClK;AAEA,eAAe,OAAA,CAAQ,MAAgB,GAAA,EAAyC;AAC9E,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,4EAA4E,GAAG,CAAA;AAEvG,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA;AAClC,EAAA,MAAM,WAAA,GAAc,KAAK,gBAAA,EAAiB;AAC1C,EAAA,IAAI,CAAC,WAAA,EAAa,OAAOA,UAAA,CAAK,4BAA4B,GAAG,CAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,IAAK,WAAA;AAEpC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAA,EAAW,OAAOA,UAAA,CAAK,WAAW,UAAU,CAAA;AAAA,CAAA,EAA8C,GAAG,CAAA;AAElG,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACxC,EAAA,IAAI,CAAC,EAAA,EAAI,OAAOA,UAAA,CAAK,kBAAkB,UAAU,CAAA;AAAA,CAAA,EAA2B,GAAG,CAAA;AAE/E,EAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,EAAA,IAAI,CAAC,QAAA,EAAU,OAAOA,UAAA,CAAK,4BAA4B,GAAG,CAAA;AAE1D,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAC9C,EAAA,MAAM,QAAA,uBAAoC,GAAA,EAAI;AAE9C,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,CAAA,IAAK,UAAA,EAAY;AAC1C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAC7C,IAAA,IAAI,YAAY,IAAA,EAAM;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,UAAA,CAAA,EAAc,KAAA,EAAO,MAAA,EAAQ;AAAA,MACzF,OAAA,EAAS,KAAK,OAAO,CAAA;AAAA,MACrB,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAOA,UAAA,CAAK,oCAAoC,IAAI,CAAA,EAAA,EAAK,QAAA,CAAS,IAAA,EAAM,OAAO;AAAA,CAAA,EAAM,GAAG,CAAA;AAC1G,IAAA,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,GAAG,CAAA,MAAO;AAAA,IAC7D,IAAA;AAAA,IACA,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN;AAAA,GACF,CAAE,CAAA;AACF,EAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,UAAA,CAAA,EAAc,KAAA,EAAO,MAAA,EAAQ;AAAA,IACzF,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI,OAAOA,WAAK,CAAA,8BAAA,EAAiC,QAAA,CAAS,MAAM,OAAO;AAAA,CAAA,EAAM,GAAG,CAAA;AAE9F,EAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAA,EAAI,KAAK,CAAA;AACpG,EAAA,IAAI,OAAA,CAAQ,EAAA,EAAI,SAAA,GAAY,OAAA,CAAQ,KAAK,MAAA,CAAO,GAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AACvC,EAAA,MAAM,UAAA,GAAkB;AAAA,IACtB,OAAA,EAAS,QAAQ,OAAA,IAAW,mBAAA;AAAA,IAC5B,IAAA,EAAM,SAAS,IAAA,CAAK;AAAA,GACtB;AACA,EAAA,IAAI,SAAA,EAAW,UAAA,CAAW,OAAA,GAAU,CAAC,SAAS,CAAA;AAE9C,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,YAAA,CAAA,EAAgB,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AACzG,EAAA,IAAI,CAAC,WAAW,EAAA,EAAI,OAAOA,WAAK,CAAA,gCAAA,EAAmC,UAAA,CAAW,MAAM,OAAO;AAAA,CAAA,EAAM,GAAG,CAAA;AAEpG,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,QAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,SAAS,SAAS,CAAA;AAC5D,IAAA,MAAM,aAAa,MAAM,SAAA;AAAA,MACvB,UAAU,EAAA,CAAG,KAAK,IAAI,EAAA,CAAG,IAAI,mBAAmB,YAAY,CAAA,CAAA;AAAA,MAC5D,KAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAE,GAAA,EAAK,UAAA,CAAW,IAAA,CAAK,KAAK,KAAA;AAAM,KACpC;AACA,IAAA,IAAI,CAAC,WAAW,EAAA,EAAI,OAAOA,WAAK,CAAA,6BAAA,EAAgC,UAAA,CAAW,MAAM,OAAO;AAAA,CAAA,EAAM,GAAG,CAAA;AAAA,EACnG,CAAA,MAAO;AACL,IAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,SAAA,CAAA,EAAa,KAAA,EAAO,MAAA,EAAQ;AAAA,MAC1F,GAAA,EAAK,cAAc,YAAY,CAAA,CAAA;AAAA,MAC/B,GAAA,EAAK,WAAW,IAAA,CAAK;AAAA,KACtB,CAAA;AACD,IAAA,IAAI,CAAC,WAAW,EAAA,EAAI,OAAOA,WAAK,CAAA,6BAAA,EAAgC,UAAA,CAAW,MAAM,OAAO;AAAA,CAAA,EAAM,GAAG,CAAA;AAAA,EACnG;AAEA,EAAA,OAAOE,QAAA,CAAG,MAAM,SAAS;AAAA,GAAA,EAAA,CAAS,aAAa,QAAA,EAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,WAAW,OAAO,YAAY;AAAA,CAAI,CAAA;AACjJ;AAEA,eAAe,OAAA,CAAQ,MAAgB,GAAA,EAAyC;AAC9E,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,4EAA4E,GAAG,CAAA;AAEvG,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA;AAClC,EAAA,MAAM,aAAA,GAAgB,KAAK,gBAAA,EAAiB;AAC5C,EAAA,IAAI,CAAC,aAAA,EAAe,OAAOA,UAAA,CAAK,4BAA4B,GAAG,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,IAAK,aAAA;AAEpC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAA,EAAW,OAAOA,UAAA,CAAK,WAAW,UAAU,CAAA;AAAA,CAAA,EAA8C,GAAG,CAAA;AAElG,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACxC,EAAA,IAAI,CAAC,EAAA,EAAI,OAAOA,UAAA,CAAK,kBAAkB,UAAU,CAAA;AAAA,CAAA,EAA2B,GAAG,CAAA;AAE/E,EAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAA,EAAI,KAAK,CAAA;AACpG,EAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,EAAI,OAAOA,UAAA,CAAK,8CAA8C,YAAY;AAAA,CAAA,EAAM,GAAG,CAAA;AAChG,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,GAAA;AAE5C,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,EAAY;AACnC,EAAA,IAAI,SAAA,KAAc,eAAA,EAAiB,OAAOE,QAAA,CAAG,uBAAuB,CAAA;AAEpE,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,aAAA,EAAgB,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA;AACxG,EAAA,IAAI,CAAC,UAAA,CAAW,EAAA,EAAI,OAAOF,UAAA,CAAK,0CAA0C,GAAG,CAAA;AAC7E,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,GAAA;AAErC,EAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,WAAA,EAAc,OAAO,CAAA,YAAA,CAAA,EAAgB,KAAK,CAAA;AACxG,EAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAOA,UAAA,CAAK,iCAAiC,GAAG,CAAA;AAElE,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,MAAM,QAA8C,EAAC;AACrD,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM;AACrC,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,CAAA;AAAA,EACzE;AAEA,EAAA,MAAM,UAAA,GAAa,EAAA;AACnB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,UAAA,EAAY;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,UAAU,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,MAAM,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,CAAU,UAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,WAAA,EAAc,CAAA,CAAE,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC;AAAA,KACvF;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,QAAA,GAAW,QAAQ,CAAC,CAAA;AAC1B,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAClB,MAAA,MAAM,WAAW,IAAA,CAAK,OAAA,GAAU,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA;AAC/C,MAAA,MAAM,MAAM,QAAA,CAAS,SAAA,CAAU,GAAG,QAAA,CAAS,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3D,MAAA,IAAI,GAAA,IAAO,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrF,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,OAAA,GAAU,KAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,SAAS,IAAA,CAAK,OAAA;AAAA,MAC1B;AACA,MAAA,GAAA,CAAI,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAC1C,MAAA,OAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,CAAC,SAAS,OAAA,KAAY;AACxD,IAAA,IAAA,CAAK,UAAA,CAAW,SAAS,OAAO,CAAA;AAAA,EAClC,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,KAAK,SAAA,EAAU;AAC/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,KAAK,YAAA,CAAa,CAAA,UAAA,EAAa,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,SAAA,EAAW,QAAQ,CAAA;AACnG,EAAA,IAAA,CAAK,eAAA,CAAgB,eAAe,UAAU,CAAA;AAE9C,EAAA,OAAOE,QAAA,CAAG,QAAQ,SAAS;AAAA,SAAA,EAAA,CAAe,SAAA,IAAa,QAAA,EAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC;AAAA;AAAA,CAAA,EAAoB,OAAO,CAAA,KAAA,EAAQ,OAAA,KAAY,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,CAAY,CAAA;AACrL;AAEA,eAAe,QAAA,CAAS,MAAgB,GAAA,EAAyC;AAC/E,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,MAAA,EAAQ,IAAI,GAAG,CAAA;AACzC,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,CAAA,CAAE,KAAA;AAC3B,EAAA,MAAM,EAAE,MAAK,GAAI,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAOF,UAAA,CAAK,4EAA4E,GAAG,CAAA;AAEvG,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,CAAC,CAAA,IAAK,QAAA;AAElC,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAA,EAAW,OAAOA,UAAA,CAAK,WAAW,UAAU,CAAA;AAAA,CAAA,EAA8C,GAAG,CAAA;AAElG,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACxC,EAAA,IAAI,CAAC,EAAA,EAAI,OAAOA,UAAA,CAAK,kBAAkB,UAAU,CAAA;AAAA,CAAA,EAA2B,GAAG,CAAA;AAE/E,EAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,CAAA,OAAA,EAAU,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,SAAA,CAAA,EAAa,KAAK,CAAA;AACpF,EAAA,IAAI,CAAC,YAAA,CAAa,EAAA,EAAI,OAAOA,UAAA,CAAK,CAAA;AAAA,CAAA,EAA2C,GAAG,CAAA;AAEhF,EAAA,IAAI,GAAA,GAAM,QAAQ,SAAS;AAAA,CAAA;AAC3B,EAAA,KAAA,MAAW,CAAA,IAAK,aAAa,IAAA,EAAM;AACjC,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,GAAS,gBAAA,GAAmB,UAAA,GAAa,MAAM,CAAA,CAAE,IAAA;AACtE,IAAA,MAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,GAAG,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAC,CAAA;AACzD,IAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9E,IAAA,GAAA,CAAI,OAAO,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,MAAM,IAAI,CAAA;AACrD,IAAA,GAAA,IAAO,mBAAmB,CAAA,CAAE,IAAI,OAAO,UAAU,CAAA,CAAA,EAAI,EAAE,IAAI;AAAA,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAOE,SAAG,GAAG,CAAA;AACf;AAMO,SAAS,gBAAA,GAAiC;AAC/C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA;AAAA,IACN,MAAM,OAAA,CAAQ,IAAA,EAAgB,GAAA,EAAyC;AACrE,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAOA,QAAA,CAAG,CAAA;AAAA,CAA6C,CAAA;AAAA,MACzD;AAEA,MAAA,IAAI,YAAA,GAAe,GAAA;AACnB,MAAA,IAAI,KAAK,CAAC,CAAA,KAAM,IAAA,IAAQ,IAAA,CAAK,CAAC,CAAA,EAAG;AAC/B,QAAA,MAAM,SAASD,aAAW,CAAQ,IAAI,GAAA,EAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAClD,QAAA,YAAA,GAAe,EAAE,GAAG,GAAA,EAAK,GAAA,EAAK,MAAA,EAAO;AACrC,QAAA,IAAA,GAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACrB;AAEA,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAE5B,MAAA,QAAQ,GAAA;AAAK,QACX,KAAK,WAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,OAAOC,QAAA,CAAG,CAAA,YAAA,EAAeV,cAAA,CAAS,GAAG;AAAA,CAAI,CAAA;AAAA,QAC3C,KAAK,QAAA;AAAA,QACL,KAAK,MAAA;AACH,UAAA,OAAOU,QAAA;AAAA,YACL,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAsBF;AAAA,QACF,KAAK,MAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,YAAY,CAAA;AAAA,QACtC,KAAK,OAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,QACvC,KAAK,KAAA;AACH,UAAA,OAAO,MAAA,CAAO,SAAS,YAAY,CAAA;AAAA,QACrC,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC,KAAK,KAAA;AACH,UAAA,OAAO,MAAA,CAAO,SAAS,YAAY,CAAA;AAAA,QACrC,KAAK,MAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,YAAY,CAAA;AAAA,QACtC,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC,KAAK,UAAA;AACH,UAAA,OAAO,WAAA,CAAY,SAAS,YAAY,CAAA;AAAA,QAC1C,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC,KAAK,OAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,QACvC,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC,KAAK,MAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,YAAY,CAAA;AAAA,QACtC,KAAK,MAAA;AACH,UAAA,OAAO,OAAA,CAAQ,SAAS,YAAY,CAAA;AAAA,QACtC,KAAK,OAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,QACvC,KAAK,OAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,QACvC,KAAK,OAAA;AACH,UAAA,OAAO,QAAA,CAAS,SAAS,YAAY,CAAA;AAAA,QACvC,KAAK,IAAA;AACH,UAAA,OAAO,KAAA,CAAM,SAAS,YAAY,CAAA;AAAA,QACpC,KAAK,WAAA;AACH,UAAA,OAAO,WAAA,CAAY,SAAS,YAAY,CAAA;AAAA,QAC1C,KAAK,QAAA;AACH,UAAA,OAAO,SAAA,CAAU,SAAS,YAAY,CAAA;AAAA,QACxC;AACE,UAAA,OAAOF,UAAA,CAAK,SAAS,GAAG,CAAA;AAAA,CAA6C,CAAA;AAAA;AACzE,IACF;AAAA,GACF;AACF;;AC3jEA,IAAI,MAAA,GAA8B,IAAA;AAClC,IAAI,IAAA,GAA4B,IAAA;AAKhC,MAAM,iBAAA,GACJ,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAEvC,IAAI,YAAA,GAAyC,IAAA;AAC7C,IAAI,WAAA,GAAc,IAAA;AAElB,IAAI,WAAA,GAA+C,IAAA;AACnD,IAAI,WAAA,GAA+C,IAAA;AACnD,IAAI,WAAA,GAAkC,IAAA;AAEtC,IAAI,SAAA,GAAmC,IAAA;AACvC,IAAI,SAAA,GAAmC,IAAA;AAEvC,IAAI,gBAAA,GAAsD,IAAA;AAI1D,MAAM,YAAA,uBAAmB,GAAA,EAGtB;AAKI,SAAS,oBAAA,CAAqB,MAAc,IAAA,EAAoB;AACrE,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,CAAA,CAAE,MAAA,EAAQ,QAAA,GAAW,IAAA,EAAM,IAAI,CAAA;AAC/B,IAAA,CAAA,CAAE,MAAA,EAAQ,QAAA,GAAW,IAAA,EAAM,IAAI,CAAA;AAAA,EACjC;AACF;AAIA,SAAS,aAAA,GAAiD;AACxD,EAAA,MAAM,MAAMc,sBAAA,EAAiB;AAC7B,EAAA,OAAO,KAAK,UAAA,IAAc,WAAA;AAC5B;AAEA,SAAS,aAAA,GAAiD;AACxD,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,OAAO,KAAK,UAAA,IAAc,WAAA;AAC5B;AAEA,SAAS,aAAA,GAAoC;AAC3C,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,OAAO,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,MAAA,GAAS,WAAA;AAC5C;AAEA,SAAS,YAAA,GAAsE;AAC7E,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,OAAO,KAAK,SAAA,IAAa,UAAA;AAC3B;AAEA,SAAS,WAAA,GAAsB;AAC7B,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,OAAO,GAAA,EAAK,QAAA,IAAW,IAAK,SAAA,IAAY,IAAK,EAAA;AAC/C;AAEA,SAAS,WAAA,GAAsB;AAC7B,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,OAAO,GAAA,EAAK,QAAA,IAAW,IAAK,SAAA,IAAY,IAAK,EAAA;AAC/C;AAEA,SAAS,aAAa,CAAA,EAAoB;AACxC,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,MAAM,MAAA,GACJ,CAAA,CAAE,WAAA,EAAa,IAAA,IAAQ,CAAA,CAAE,WAAA,CAAY,IAAA,KAAS,OAAA,GAC1C,CAAA,EAAG,CAAA,CAAE,WAAA,CAAY,IAAI,CAAA,EAAA,CAAA,GACrB,EAAA;AACN,IAAA,IAAI,GAAA,GAAM,MAAA,IAAU,CAAA,CAAE,OAAA,IAAW,EAAE,IAAA,IAAQ,eAAA,CAAA;AAC3C,IAAA,IAAI,CAAA,CAAE,KAAA,EAAO,GAAA,IAAO,IAAA,GAAO,CAAA,CAAE,KAAA;AAC7B,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,4BAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,CAAC,CAAA,IAAK,yCAAA;AACtB;AAEO,SAAS,sBAAsB,GAAA,EAO7B;AACP,EAAA,WAAA,GAAc,IAAI,QAAA,IAAY,IAAA;AAC9B,EAAA,WAAA,GAAc,IAAI,QAAA,IAAY,IAAA;AAC9B,EAAA,WAAA,GAAc,IAAI,MAAA,IAAU,IAAA;AAC5B,EAAA,SAAA,GAAY,IAAI,OAAA,IAAW,IAAA;AAC3B,EAAA,SAAA,GAAY,IAAI,OAAA,IAAW,IAAA;AAC3B,EAAA,gBAAA,GAAmB,IAAI,eAAA,IAAmB,IAAA;AAG1C,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,CAAI,UAAA,GAAa,IAAI,QAAA,IAAY,IAAA;AACjC,IAAA,GAAA,CAAI,UAAA,GAAa,IAAI,QAAA,IAAY,IAAA;AACjC,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,GAAA,CAAI,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,MAAM,GAAA,CAAI,eAAA,CAAgB,KAAA,EAAM,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,IACxF;AACA,IAAA,GAAA,CAAI,QAAA,GAAW,IAAI,OAAA,IAAW,IAAA;AAC9B,IAAA,GAAA,CAAI,QAAA,GAAW,IAAI,OAAA,IAAW,IAAA;AAAA,EAChC;AACF;AAEO,SAAS,uBAAA,GAAgC;AAC9C,EAAA,WAAA,GAAc,IAAA;AACd,EAAA,WAAA,GAAc,IAAA;AACd,EAAA,WAAA,GAAc,IAAA;AACd,EAAA,SAAA,GAAY,IAAA;AACZ,EAAA,SAAA,GAAY,IAAA;AACZ,EAAA,gBAAA,GAAmB,IAAA;AAGnB,EAAA,MAAM,MAAMA,sBAAA,EAAiB;AAC7B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,GAAA,CAAI,UAAA,GAAa,IAAA;AACjB,IAAA,GAAA,CAAI,UAAA,GAAa,IAAA;AACjB,IAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,IAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AAAA,EACjB;AACF;AAGO,SAAS,eAAe,OAAA,EAAkC;AAC/D,EAAA,YAAA,GAAe,OAAA;AACjB;AAEO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,WAAA,GAAc,OAAA;AAChB;AAeA,IAAI,aAAA,GAA2C,IAAA;AAExC,SAAS,sBAAsB,EAAA,EAA8B;AAClE,EAAA,aAAA,GAAgB,EAAA;AAClB;AAoBA,IAAI,YAAA,GAAyC,IAAA;AAEtC,SAAS,qBAAqB,EAAA,EAA6B;AAChE,EAAA,YAAA,GAAe,EAAA;AACjB;AAGA,IAAI,UAAA,GAA+C,IAAA;AACnD,IAAI,kBAAA,GAAuD,IAAA;AAE3D,IAAI,YAAuB,EAAC;AAErB,SAAS,WAAW,EAAA,EAAmC;AAC5D,EAAA,UAAA,GAAa,EAAA;AACf;AAEO,SAAS,qBAAqB,EAAA,EAAmC;AACtE,EAAA,kBAAA,GAAqB,EAAA;AAErB,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,MAAM,MAAA,GAAS,SAAA;AACf,IAAA,SAAA,GAAY,EAAC;AACb,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,EAAQ,EAAA,CAAG,GAAG,CAAA;AAAA,EAClC;AACF;AAGO,SAAS,oBAAoB,IAAA,EAAqB;AACvD,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA,MAAO;AAEL,IAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,EACrB;AACF;AAEO,SAAS,WAAA,GAAsB;AACpC,EAAA,OAAO,MAAA,EAAQ,QAAO,IAAK,GAAA;AAC7B;AAGO,SAAS,YAAY,GAAA,EAAmB;AAC7C,EAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAC/B;AAIO,SAAS,SAAA,CACd,GAAA,EACA,IAAA,EACA,QAAA,EACM;AACN,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,QAAA,CAAS,IAAI,KAAA,CAAM,iCAAiC,CAAA,EAAG,IAAI,EAAE,CAAA;AAC7D,IAAA;AAAA,EACF;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA,CAAE,IAAA;AAAA,IACrB,CAAC,MAAA,KAAW;AACV,MAAA,IAAI,MAAA,CAAO,aAAa,CAAA,EAAG;AACzB,QAAA,MAAM,CAAA,GAAI,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAG,CAAA,CAAE,CAAA;AAC5C,QAAC,CAAA,CAAU,OAAO,MAAA,CAAO,QAAA;AACzB,QAAA,QAAA,CAAS,CAAA,EAAG,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAA;AAAA,MAC1C,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,IAAA,EAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA;AAAA,IACA,CAAC,CAAA,KAAM;AACL,MAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,OAAO,CAAC,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IAChE;AAAA,GACF;AACF;AAEA,IAAI,UAAA,GAAoE,IAAA;AAGjE,SAAS,UAAA,GAAsB;AACpC,EAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,OAAO,CAAC,CAAE,KAAA,CAAc,KAAA;AAC1B;AAEO,SAAS,UAAU,IAAA,EAAoB;AAC5C,EAAA,MAAM,QAAQ,YAAA,EAAa;AAC3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK,QAAQ,IAAI,CAAA;AACzB;AAEO,SAAS,aAAA,CAAc,QAAsB,IAAA,EAA6D;AAC/G,EAAA,IAAA,GAAO,MAAA;AAEP,EAAA,MAAA,GAAS,IAAI,aAAa,MAAA,EAAQ;AAAA,IAChC,GAAA,EAAK,MAAM,GAAA,IAAO,GAAA;AAAA,IAClB,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,YAAA;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,iDAAA;AAAA,MACN,QAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAM,gBAAA;AAAA,MACN,SAAA,EAAW,WAAA;AAAA,MACX,uBAAuBC,iBAAA,CAAY,qBAAA;AAAA,MACnC,cAAcA,iBAAA,CAAY,YAAA;AAAA,MAC1B,mBAAmBA,iBAAA,CAAY,iBAAA;AAAA,MAC/B,GAAG,IAAA,EAAM;AAAA;AACX,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAAiB;AAAA,IACrB,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAU,CAAC,IAAA,EAAM,GAAA,KAAQ,YAAA,CAAa,MAAM,GAAG,CAAA;AAAA,IAC/C,WAAW,CAAC,IAAA,EAAM,GAAA,KAAQ,aAAA,CAAc,MAAM,GAAG,CAAA;AAAA,IACjD,iBAAA,EAAmB,CAAC,GAAA,KAAQ;AAC1B,MAAA,MAAM,MAAM,CAAA,EAAG,GAAG,CAAA,aAAA,CAAA,CAAgB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACrD,MAAA,IAAI,KAAM,UAAA,CAAW,GAAG,CAAA,EAAG,SAAA,CAAU,MAAO,GAAG,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAC,CAAC,IAAA,IAAQ,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,IAC3C,UAAU,CAAC,CAAA,KAAM,IAAA,CAAM,YAAA,CAAa,GAAG,MAAM,CAAA;AAAA,IAC7C,WAAW,CAAC,CAAA,EAAG,SAAS,IAAA,CAAM,aAAA,CAAc,GAAG,IAAI;AAAA,GACrD;AAEA,EAAA,MAAA,CAAO,eAAA,CAAgB,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAChD,EAAA,MAAA,CAAO,eAAA,CAAgB,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAC/C,EAAA,MAAA,CAAO,eAAA,CAAgB,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAC/C,EAAA,MAAA,CAAO,eAAA,CAAgB,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAChD,EAAA,MAAA,CAAO,eAAA,CAAgB,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAChD,EAAA,MAAA,CAAO,eAAA,CAAgB,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAC/C,EAAA,MAAA,CAAO,eAAA,CAAgB,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAChD,EAAA,MAAA,CAAO,eAAA,CAAgB,kBAAkB,CAAA;AAC3C;AAIA,SAAS,YAAA,CAAa,MAAc,GAAA,EAAyC;AAC3E,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,OAAA,CAAQ,OAAA,CAAQ,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,QAAA,EAAU,CAAA,EAAG,CAAA;AAC7F,EAAA,MAAM,QAAA,GAAW,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,IAAA,CAAA;AAC5E,EAAA,IAAA,CAAK,aAAA,CAAc,UAAU,IAAI,CAAA;AACjC,EAAA,OAAO,kBAAkB,QAAA,EAAU,IAAI,GAAG,CAAA,CAAE,QAAQ,MAAM;AACxD,IAAA,IAAI;AACF,MAAA,IAAI,KAAM,UAAA,CAAW,QAAQ,CAAA,EAAG,IAAA,CAAM,WAAW,QAAQ,CAAA;AAAA,IAC3D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,aAAA,CAAc,MAAc,GAAA,EAAyC;AAC5E,EAAA,MAAM,OAAA,GAAU,iCAAiC,IAAI,CAAA;AAAA;AAAA,CAAA;AACrD,EAAA,OAAO,YAAA,CAAa,SAAS,GAAG,CAAA;AAClC;AAIA,SAAS,SAAA,CAAU,KAAmB,GAAA,EAAmB;AACvD,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACvC,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA;AAC5B,IAAA,IAAI,EAAA,CAAG,WAAA,EAAY,EAAG,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,SACpC,GAAA,CAAI,WAAW,IAAI,CAAA;AAAA,EAC1B;AACA,EAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACnB;AAEA,SAAS,aACP,GAAA,EACkD;AAClD,EAAA,MAAM,IAAI,CAAA,EAAG,GAAG,CAAA,aAAA,CAAA,CAAgB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACnD,EAAA,IAAI,CAAC,IAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,SAAA,CAAU,wBAAA,EAA0B,KAAK,CAAA;AAAA,QACjD,QAAA,EAAU;AAAA;AACZ,KACF;AACF,EAAA,IAAI;AACF,IAAA,OAAO;AAAA,MACL,KAAK,IAAA,CAAK,KAAA,CAAM,KAAM,YAAA,CAAa,CAAA,EAAG,MAAM,CAAC;AAAA,KAC/C;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ,SAAA,CAAU,wBAAA,EAA0B,KAAK,CAAA;AAAA,QACjD,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,EACF;AACF;AAEA,eAAe,SAAA,CACb,MACA,GAAA,EACsB;AACtB,EAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAMH,EAAAA,GAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,IAAI,MAAA,IAAUA,EAAAA,EAAG,OAAOA,EAAAA,CAAE,IAAA;AAC1B,IAAA,MAAMI,QAAAA,GAAUJ,EAAAA,CAAE,GAAA,CAAI,OAAA,IAAW,EAAC;AAClC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAKI,QAAO,CAAA;AAChC,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,QAAQ,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,CAAA,EAAE;AACpE,IAAA,IAAI,IAAA,GAAO,CAAA,WAAA,EAAcJ,EAAAA,CAAE,GAAA,CAAI,QAAQ,EAAE,CAAA;AAAA,CAAA;AACzC,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,IAAA,IAAQ,CAAA,EAAA,EAAK,CAAC;AAAA,IAAA,EAASI,QAAAA,CAAQ,CAAC,CAAC;AAAA,CAAA;AACvD,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EACjD;AAGA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACjC,EAAA,MAAM,SAAA,GAAY,WAAW,CAAA,GAAI,IAAA,CAAK,MAAM,OAAA,GAAU,CAAC,IAAI,EAAC;AAE5D,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,IAAI,MAAA,IAAU,CAAA,EAAG,OAAO,CAAA,CAAE,IAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,CAAA,CAAE,GAAA,CAAI,OAAA,IAAW,EAAC;AAClC,EAAA,IAAI,GAAA,GAAM,QAAQ,IAAI,CAAA;AACtB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,CAAA,iBAAA,EAAoB,IAAI,KAAK,KAAK,CAAA;AACtD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,GAAA,IAAO,gBAAA;AACP,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA;AACd,QAAA,GAAA,IAAO,CAAA,EAAA,EAAK,MAAM,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,GAAG,OAAO;AAAA,CAAA;AAAA,IACrE;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,GAAA,EAAK,UAAU,CAAA,EAAE;AAAA,EAChD;AAGA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,GAAA,IAAO,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,QAAA,CAAS,GAAG,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA,GAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,SAAS,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,kBAAA,CAAA,CAAqB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACjE,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,IAAA,IAAQ,EAAA;AACrC,EAAA,MAAM,WAAA,GAAc,aAAa,QAAA,CAAS,MAAM,IAC5C,YAAA,GACA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAE7B,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,GAAG,GAAA,CAAI,GAAA;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,mBAAA,EAAqB;AAAA,GACvB;AACA,EAAA,IAAI,EAAE,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,gBAAA,GAAmB,EAAE,GAAA,CAAI,IAAA;AAC7C,EAAA,IAAI,EAAE,GAAA,CAAI,OAAA,EAAS,GAAA,CAAI,mBAAA,GAAsB,EAAE,GAAA,CAAI,OAAA;AAEnD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,IAAA,IAAQ,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,OAAA,IAAW,EAAE,CAAA,CAAA;AAExD,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAChC,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,GAAA,GAAM;AAAA,EAAA,EAAO,KAAK,OAAO,IAAI;AAAA,EAAA,EAAO,GAAG;;AAAA,CAAA;AAC7C,IAAA,MAAA,IAAU,GAAA;AACV,IAAA,IAAI,WAAA,cAAyB,GAAG,CAAA;AAChC,IAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,CAAA;AACpD,IAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,IAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,IAAA,IAAI,GAAG,QAAA,KAAa,CAAA;AAClB,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,EACnE;AAEA,EAAA,MAAM,OAAA,GAAU;AAAA,EAAA,EAAO,KAAK,IAAI,IAAI;AAAA,EAAA,EAAO,GAAG;;AAAA,CAAA;AAC9C,EAAA,MAAA,IAAU,OAAA;AACV,EAAA,IAAI,WAAA,cAAyB,OAAO,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,CAAA;AACpD,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,EAAA,IAAI,GAAG,QAAA,KAAa,CAAA;AAClB,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,QAAA,EAAU,GAAG,QAAA,EAAS;AAEjE,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAClC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,GAAA,GAAM;AAAA,EAAA,EAAO,KAAK,QAAQ,IAAI;AAAA,EAAA,EAAO,IAAI;;AAAA,CAAA;AAC/C,IAAA,MAAA,IAAU,GAAA;AACV,IAAA,IAAI,WAAA,cAAyB,GAAG,CAAA;AAChC,IAAA,MAAM,EAAA,GAAK,MAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,EAAE,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,CAAA;AACrD,IAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,IAAA,MAAA,IAAU,EAAA,CAAG,MAAA;AACb,IAAA,IAAI,GAAG,QAAA,KAAa,CAAA;AAClB,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,EACnE;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAA,EAAE;AACvD;AAIA,MAAM,OAAA,GAAU,SAAA;AAChB,MAAM,MAAA,GAAS,SAAA;AACf,MAAM,KAAA,GAAQ,SAAA;AACd,MAAM,KAAA,GAAQ,UAAA;AACd,MAAM,OAAA,GAAU,UAAA;AAChB,MAAM,QAAA,GAAW,UAAA;AACjB,MAAM,MAAA,GAAS,UAAA;AAEf,MAAM,MAAA,GAAS,UAAA;AACf,MAAM,OAAA,GAAU,UAAA;AAChB,MAAM,UAAA,GAAa,SAAA;AAEnB,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAExE,SAAS,aAAA,CAAc,MAAc,OAAA,EAA8B;AACjE,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,MAAM,EAAA,GAAK,YAAY,MAAM;AAC3B,IAAA,OAAA;AAAA,MACE,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,MAAM,CAAA,EAAG,cAAA,CAAe,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,KACvE;AACA,IAAA,KAAA,GAAA,CAAS,KAAA,GAAQ,KAAK,cAAA,CAAe,MAAA;AAAA,EACvC,GAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,OAAO,CAAA,EAAW;AAChB,MAAA,OAAA,GAAU,CAAA;AAAA,IACZ,CAAA;AAAA,IACA,QAAQ,CAAA,EAAW;AACjB,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,OAAA,CAAQ,GAAG,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,OAAO,IAAI,CAAC;AAAA,CAAI,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,KAAK,CAAA,EAAW;AACd,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,OAAA,CAAQ,GAAG,UAAU,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,OAAO,IAAI,CAAC;AAAA,CAAI,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,IAAA,GAAO;AACL,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AAAA,GACF;AACF;AAGA,MAAM,SAAA,GAAwC;AAAA,EAC5C,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK;AACP,CAAA;AAEA,SAAS,cAAA,CAAe,GAAA,EAAa,EAAA,GAAiB,KAAA,EAAe;AACnE,EAAA,MAAM,MAAA,GAAS,UAAU,EAAE,CAAA;AAE3B,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,0BAA0B,CAAA;AACtD,EAAA,IAAI,SAAA;AACF,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,SAAA,EAAY,OAAO,IAAI,MAAM,CAAA,EAAG,SAAA,CAAU,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,KAAK,MAAM,OAAO,CAAA,CAAA;AAE5F,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,KAAA,CAAM,gCAAgC,CAAA;AAC9D,EAAA,IAAI,WAAA;AACF,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,WAAA,EAAc,OAAO,IAAI,QAAQ,CAAA,EAAG,WAAA,CAAY,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,cAAc,OAAO,CAAA,CAAA;AAE3G,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,iCAAiC,CAAA;AAC5D,EAAA,IAAI,QAAA;AACF,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,OAAO,IAAI,MAAM,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,KAAK,MAAM,OAAO,CAAA,CAAA;AAE1F,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,KAAA,CAAM,qCAAqC,CAAA;AACnE,EAAA,IAAI,WAAA,SAAoB,CAAA,EAAG,KAAK,GAAG,GAAA,CAAI,IAAA,EAAM,CAAA,EAAG,OAAO,CAAA,CAAA;AAEvD,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,oBAAoB,CAAA;AAChD,EAAA,IAAI,WAAW,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,GAAG,GAAG,OAAO,CAAA,CAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,qCAAqC,CAAA;AAChE,EAAA,IAAI,QAAA;AACF,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,OAAO,IAAI,MAAM,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,eAAe,OAAO,CAAA,CAAA;AAEpG,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,oBAAA,CACP,UAAA,EACA,OAAA,EACA,EAAA,EACQ;AACR,EAAA,MAAM,OAAO,CAAA,EAAG,UAAU,WAAW,UAAA,KAAe,CAAA,GAAI,MAAM,EAAE,CAAA,CAAA;AAChE,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,IAAI,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,IAC1E,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,SAAA,EAAY,OAAO,IAAI,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,EAAG,OAAO;AAAA,EAAK,KAAK,CAAA,QAAA,EAAW,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,IAC/G,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAAA,IAC1E,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA;AAEjF;AAEA,SAAS,SAAA,CAAU,KAAa,EAAA,EAAwB;AACtD,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA,IAC1C,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,KAAK,CAAA,SAAA,EAAY,OAAO,KAAK,GAAG;AAAA,CAAA;AAAA,IAC5C,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,EAAQ,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA,IACvC,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,KAAK,CAAA,MAAA,EAAS,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA;AAE5C;AAEA,SAAS,UAAA,CAAW,KAAa,EAAA,EAAwB;AACvD,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,QAAA,EAAW,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA,IAC7C,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,KAAA,EAAQ,OAAO,KAAK,GAAG;AAAA,CAAA;AAAA,IAC3C,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,OAAA,EAAU,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA,IAC5C,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,KAAA,EAAQ,OAAO,IAAI,GAAG;AAAA,CAAA;AAAA;AAE9C;AAIA,IAAI,mBAAA;AAKJ,eAAe,qBAAA,GAAwB;AACrC,EAAA,IAAI,wBAAwB,MAAA,EAAW;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,MAAM,qCAAO,sBAA0B,wBAAA;AACrE,MAAA,mBAAA,GAAsB,MAAM,iBAAA,EAAkB;AAAA,IAChD,CAAA,CAAA,MAAQ;AACN,MAAA,mBAAA,GAAsB,IAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,mBAAA;AACT;AAEA,eAAe,eAAA,CACb,IAAA,EACA,GAAA,EACA,EAAA,GAAiB,KAAA,EACK;AACtB,EAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,qCAAO,sBAAuB,yBAAA;AACpE,EAAA,MAAM,aAAA,GAAgB,MAAM,qBAAA,EAAsB;AAClD,EAAA,MAAM,SAAA,GAAY,IAAI,mBAAA,CAAoB,IAAA,EAAO,EAAE,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,aAAA,EAAe,CAAA;AAChF,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,MAAM,KAAA,GAAQ,WAAA,KAAgB,CAAC,EAAA,KAAe;AAAA,EAAC,CAAA,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAG3B,EAAA,MAAM,cACJ,EAAA,KAAO,KAAA,GACH,GAAG,KAAK,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,EAAGxB,cAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KACjE,CAAA,EAAG,KAAK,4BAA4B,OAAO,CAAA,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,EAAa,KAAK,CAAA;AAEhD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAc,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAc;AAChC,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,CAAA,EAAG,EAAE,CAAA;AACpC,MAAA,GAAA,IAAO,CAAA,GAAI,IAAA;AACX,MAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,IACxB,CAAA;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA;AAAA,MACjB,CAAC,CAAA,KACC,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,gBAAgB,CAAA,KAAM;AAAA,KAC9C;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA;AAAA,MAClB,CAAC,MAAc,CAAA,KAAM;AAAA,KACvB;AAEA,IAAA,IAAI,WAAA;AACJ,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,MAAA,IAAI,CAAA,KAAM,YAAA,IAAgB,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA,EAAG;AACrC,QAAA,WAAA,GAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AACxB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,aAAa,CAAA,EAAG;AAC/B,QAAA,WAAA,GAAc,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,MAAM,CAAA;AAC1C,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,EAAA,GAAK,MAAM,SAAA,CAAU,mBAAA,CAAoB,KAAA,CAAA,EAAW;AAAA,QACxD,WAAA,EAAa,IAAA;AAAA,QACb,UAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA,UAAA,GAAa,GAAG,WAAA,CAAY,MAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,MAAM,EAAA,GAAK,MAAM,SAAA,CAAU,OAAA,CAAQ,GAAG,KAAA,CAAA,EAAW;AAAA,UAC/C,SAAS,CAAC,MAAA;AAAA,UACV,UAAA,EAAY,SAAS,CAAC,MAAA;AAAA,UACtB,UAAA;AAAA,UACA,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,UAAA,IAAc,GAAG,WAAA,CAAY,MAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,KAAQ,SAAA,IAAa,GAAA,EAAM,QAAQ,CAAC,CAAA;AAC3D,IAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,UAAA,EAAY,OAAA,EAAS,EAAE,CAAA;AAC5D,IAAA,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACvB,IAAA,GAAA,IAAO,CAAA,MAAA,EAAS,UAAU,CAAA,aAAA,EAAgB,OAAO,CAAA;AAAA,CAAA;AAEjD,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EAChD,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,KAAK,CAAA,EAAG,KAAK,GAAG,GAAG,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,MAAA,EAAQ,SAAA,CAAU,GAAA,EAAK,EAAE,CAAA;AAAA,MACzB,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACF;AAEA,eAAe,iBAAA,CACb,IAAA,EACA,GAAA,EACA,EAAA,GAAiB,KAAA,EACK;AACtB,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AACnD,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA;AACnB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,SAAA,CAAU,gCAAA,EAAkC,EAAE,CAAA;AAAA,MACtD,QAAA,EAAU;AAAA,KACZ;AAEF,EAAA,MAAM,KAAA,GAAQ,WAAA,KAAgB,CAAC,EAAA,KAAe;AAAA,EAAC,CAAA,CAAA;AAC/C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,GAAG,GAAA,CAAI,GAAG,iBAAiB,IAAI,CAAA,CAAA,CAAG,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA;AACpE,IAAA,IAAI,IAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,MAAO,MAAM,CAAA;AACvB,QAAA,MAAM,GAAA,GACJ,OAAO,KAAA,GACH,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAA,CAAA,GAC3B,OAAO,MAAA,GACL,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAA,CAAA,GAC3B,WAAW,IAAI,CAAA,CAAA;AACvB,QAAA,GAAA,IAAO,GAAA,GAAM,IAAA;AACb,QAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAClB,SAAS,CAAA,EAAG;AACV,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,GAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,YACN,CAAA,iBAAA,EAAoB,IAAI,CAAA,EAAA,EAAK,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAAA,YACvE;AAAA,WACF;AAAA,UACA,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,GAAA,IAAO,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,cAAA,CAAA,EAAkB,EAAE,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAA,CAAA,EAAI;AAClB,MAAA,MAAM,MAAM,CAAA,CAAE,GAAA;AACd,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,IAAI,GAAA,CAAI,YAAA,GAAe,IAAI,CAAA,EAAG;AAC5B,QAAA,OAAO,GAAA,CAAI,aAAa,IAAI,CAAA;AAC5B,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AACA,MAAA,IAAI,GAAA,CAAI,eAAA,GAAkB,IAAI,CAAA,EAAG;AAC/B,QAAA,OAAO,GAAA,CAAI,gBAAgB,IAAI,CAAA;AAC/B,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AACA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,IAAI,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,aAAA,CAAA,CAAgB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACvD,QAAA,IAAA,CAAM,cAAc,CAAA,EAAG,IAAA,CAAK,UAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAChD;AAEA,eAAe,YAAA,CACb,GAAA,EACA,EAAA,GAAiB,KAAA,EACK;AACtB,EAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,qCAAO,sBAAuB,yBAAA;AACpE,EAAA,MAAM,SAAA,GAAY,IAAI,mBAAA,CAAoB,IAAA,EAAO,EAAE,GAAA,EAAK,GAAA,CAAI,KAAK,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,UAAU,aAAA,EAAc;AACrC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACnC,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA;AACrB,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAK,UAAU,OAAO;AAAA,CAAA,EAAM,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,CAAA,EAAE;AAE1E,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,IAAU,CAAA,CAAA,GACtB,GAAG,CAAA,CAAE,GAAA,CAAI,IAAA,IAAQ,SAAS,IAAI,CAAA,CAAE,GAAA,CAAI,OAAA,IAAW,OAAO,KACtD,GAAA,CAAI,GAAA;AAER,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,KAAA;AACH,MAAA,IAAA,IAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,GAAG;AAAA,CAAA;AAC3B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,QAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,QAAQ,CAAC,CAAA;AACxB,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,OAAA,CAAQ,MAAA,GAAS,CAAA;AACtC,QAAA,IAAA,IAAQ,CAAA,EAAG,MAAA,GAAS,KAAA,GAAQ,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO;AAAA,CAAA;AAAA,MAC/D;AACA,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,IAAA,IAAQ,CAAA,EAAG,KAAK,CAAA,sDAAA,EAAyD,OAAO;;AAAA,CAAA;AAChF,MAAA,IAAA,IAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,GAAG;;AAAA,CAAA;AAC3B,MAAA,IAAA,IAAQ,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,OAAO;AAAA,CAAA;AACxC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,OAAA,EAAS,IAAA,IAAQ,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,CAAC,GAAG,OAAO;AAAA,CAAA;AACjE,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,IAAA,IAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,GAAG,OAAO;AAAA,CAAA;AACnC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,QAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,QAAQ,CAAC,CAAA;AACxB,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,OAAA,CAAQ,MAAA,GAAS,CAAA;AACtC,QAAA,IAAA,IAAQ,CAAA,EAAG,MAAA,GAAS,IAAA,GAAO,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO;AAAA,CAAA;AAAA,MAC9D;AACA,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,OAAA,EAAS,IAAA,IAAQ,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,CAAC,GAAG,OAAO;AAAA,CAAA;AACjE,MAAA,IAAA,IAAQ;AAAA,EAAK,KAAK,CAAA,EAAG,OAAA,CAAQ,MAAM,sBAAsB,OAAO;AAAA,CAAA;AAChE,MAAA;AAAA;AAEJ,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AACjD;AAEA,eAAe,eAAA,CACb,IAAA,EACA,GAAA,EACA,GAAA,EACsB;AACtB,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAGxD,EAAA,IAAI,QAAQ,QAAA,IAAa,GAAA,KAAQ,MAAA,IAAU,UAAA,CAAW,SAAS,CAAA,EAAI;AACjE,IAAA,MAAM,WAAA,GAAc,WAAW,CAAC,CAAA;AAChC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAE/B,MAAA,OAAA,GAAU,WAAA;AAAA,IACZ,CAAA,MAAO;AAEL,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAA;AACrC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,MAAMyB,KAAAA,GAAO,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACvC,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AACnC,QAAA,OAAA,GAAU,CAAA,OAAA,EAAUA,KAAI,CAAA,EAAG,GAAG,CAAA,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,UAAU,WAAW,CAAA,CAAA;AAAA,MACjC;AAAA,IACF;AACA,IAAA,OAAO,UAAA,CAAW,CAAC,IAAA,EAAM,OAAA,EAAS,GAAG,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA,EAAG,GAAG,KAAK,CAAA,EAAG,GAAG,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,IAAI,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,aAAA,CAAA,CAAgB,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACvD,EAAA,IAAI,IAAA,CAAM,UAAA,CAAW,CAAC,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,UAAA,CAAW,6BAAA,EAA+B,KAAK,CAAA;AAAA,MACvD,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA,CAAM,SAAS,OAAO,CAAA;AAC5D,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAI,IAAK,YAAA;AAEzD,EAAA,MAAM,GAAA,GAAuB;AAAA,IAC3B,IAAA;AAAA,IACA,OAAA,EAAS,OAAA;AAAA,IACT,WAAA,EAAa,EAAA;AAAA,IACb,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,2CAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,IAAA,CAAM,cAAc,CAAA,EAAG,IAAA,CAAK,UAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,KAAA,GACR,CAAA,SAAA,EAAY,CAAC;AAAA,CAAA,GACb,YAAY,CAAC;;AAAA,EAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AACpD,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAChD;AAEA,eAAe,OAAA,CACb,MACA,GAAA,EACsB;AACtB,EAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,EAAA,IAAI,CAAC,IAAA;AACH,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,SAAA,CAAU,2BAAA,EAA6B,KAAK,CAAA;AAAA,MACpD,QAAA,EAAU;AAAA,KACZ;AAEF,EAAA,MAAM,WAAA,GAAc,iBAAiB,IAAI,CAAA,aAAA,CAAA;AACzC,EAAA,IAAI,IAAA,CAAM,UAAA,CAAW,WAAW,CAAA,EAAG;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA;AAAA,QACf,IAAA,CAAM,YAAA,CAAa,WAAA,EAAa,MAAM;AAAA,OACxC;AACA,MAAA,IAAI,MAAM,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,IAAI,OAAO;AAAA,CAAA;AACpC,MAAA,IAAI,GAAA,CAAI,WAAA,EAAa,GAAA,IAAO,CAAA,EAAG,IAAI,WAAW;AAAA,CAAA;AAC9C,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,GAAA,IAAO,CAAA,SAAA,EAAY,IAAI,OAAO;AAAA,CAAA;AAC/C,MAAA,IAAI,GAAA,CAAI,QAAA,EAAU,GAAA,IAAO,CAAA,UAAA,EAAa,IAAI,QAAQ;AAAA,CAAA;AAClD,MAAA,IAAI,IAAI,YAAA,EAAc;AACpB,QAAA,GAAA,IAAO,mBAAA;AACP,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,YAAY,CAAA;AAClD,UAAA,GAAA,IAAO,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC;AAAA,CAAA;AAAA,MACvB;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,cAAA,EAAe,GAAI,MAAM,qCAAO,sBAA6B,8BAAA;AACrE,IAAA,MAAM,MAAA,GAAS,IAAI,cAAA,EAAe;AAClC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAW,CAAA,EAAG,MAAA;AAClC,IAAA,IAAI,GAAA,GAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,UAAU,SAAS;AAAA,CAAA;AACxC,IAAA,IAAI,MAAA,IAAU,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACnC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAChC,MAAA,IAAI,GAAA,CAAI,WAAA,EAAa,GAAA,IAAO,CAAA,EAAG,IAAI,WAAW;AAAA,CAAA;AAC9C,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,GAAA,IAAO,CAAA,SAAA,EAAY,IAAI,OAAO;AAAA,CAAA;AAC/C,MAAA,IAAI,GAAA,CAAI,QAAA,EAAU,GAAA,IAAO,CAAA,UAAA,EAAa,IAAI,QAAQ;AAAA,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EAChD,SAAS,CAAA,EAAG;AACV,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,SAAA,CAAU,CAAA,WAAA,EAAc,IAAI,IAAI,KAAK,CAAA;AAAA,MAC7C,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACF;AAEA,SAAS,QAAQ,GAAA,EAAgC;AAC/C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,IAAI,MAAA,IAAU,CAAA,EAAG,OAAO,CAAA,CAAE,IAAA;AAE1B,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA;AAC3C,EAAA,IAAI,GAAA,GAAM,GAAG,MAAM;AAAA,CAAA;AACnB,EAAA,GAAA,IAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,QAAA,EAAW,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,OAAO;AAAA,CAAA;AAE3E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAM,WAAA,CAAY,GAAG,CAAA,EAAG;AACzC,QAAA,IAAI,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACrD,QAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC3B,QAAA,MAAM,EAAA,GAAK,IAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAC9B,QAAA,IAAI,EAAA,CAAG,WAAA,EAAY,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,aAC1B,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AACA,EAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO,GAAA,IAAO,CAAA,EAAG,MAAM,IAAI,CAAC;AAAA,CAAA;AAC5C,EAAA,GAAA,IAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,eAAe,OAAO,CAAA,CAAA,EAAI,MAAM,MAAM;AAAA,CAAA;AAChE,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAChD;AAEA,SAAS,SAAA,CAAU,MAAgB,GAAA,EAAgC;AACjE,EAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,EAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,MAAA,EAAQ;AAC1B,IAAA,IAAI,GAAA,GAAM,4BAAA;AACV,IAAA,GAAA,IAAO,CAAA,UAAA,EAAa,IAAI,GAAG,CAAA;AAAA,CAAA;AAC3B,IAAA,GAAA,IAAO,eAAexB,4BAAsB,CAAA;AAAA,CAAA;AAC5C,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EAChD;AACA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,GAAA,KAAQ,QAAA;AACV,MAAA,OAAO,EAAE,QAAQ,GAAA,CAAI,GAAA,GAAM,MAAM,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAC3D,IAAA,IAAI,GAAA,KAAQ,UAAA;AACV,MAAA,OAAO;AAAA,QACL,QAAQA,4BAAA,GAAyB,IAAA;AAAA,QACjC,MAAA,EAAQ,EAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AACF,IAAA,OAAO,EAAE,MAAA,EAAQ,aAAA,EAAe,MAAA,EAAQ,EAAA,EAAI,UAAU,CAAA,EAAE;AAAA,EAC1D;AACA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,UAAA,CAAW,sCAAA,EAAwC,KAAK,CAAA;AAAA,MAChE,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,EAAA;AAAA,IACR,MAAA,EAAQ,SAAA,CAAU,CAAA,4BAAA,EAA+B,GAAG,KAAK,KAAK,CAAA;AAAA,IAC9D,QAAA,EAAU;AAAA,GACZ;AACF;AAIA,eAAsB,iBAAA,CACpB,QAAA,EACA,IAAA,EACA,GAAA,EACA,IAAA,EASsB;AACtB,EAAA,IAAI,CAAC,MAAM,OAAO,EAAE,QAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,QAAA,EAAU,CAAA,EAAE;AAE5E,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,GAAG,IACnC,QAAA,GACA,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAGhD,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IAAK,CAAC,KAAK,QAAA,CAAS,OAAO,CAAA,CAAE,WAAA,EAAY,EAAG;AACrE,IAAA,QAAA,GAAW,OAAA;AAAA,EACb,CAAA,MAAO;AACL,IAAA,MAAM,OAAO,CAAC,KAAA,EAAO,QAAQ,MAAA,EAAQ,KAAA,EAAO,QAAQ,MAAM,CAAA;AAC1D,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAA,GAAU,GAAG,CAAA,EAAG;AAAE,QAAA,QAAA,GAAW,OAAA,GAAU,GAAA;AAAK,QAAA;AAAA,MAAO;AAAA,IACzE;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AAEb,MAAA,MAAM,UAAU,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,UAAU,OAAA,GAAU,GAAA;AAC5D,MAAA,KAAA,MAAW,OAAO,CAAC,UAAA,EAAY,WAAA,EAAa,UAAA,EAAY,WAAW,CAAA,EAAG;AACpE,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAA,GAAU,GAAG,CAAA,EAAG;AAAE,UAAA,QAAA,GAAW,OAAA,GAAU,GAAA;AAAK,UAAA;AAAA,QAAO;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,MAAA,GAAS,yBAAyB,OAAO,CAAA;AAAA,CAAA;AAC/C,IAAA,MAAM,UAAU,aAAA,EAAc;AAC9B,IAAA,IAAI,OAAA,UAAiB,MAAM,CAAA;AAC3B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,IAAA,GAAO,CAAA;AAEX,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAuB;AACtC,IAAA,GAAA,IAAO,CAAA;AACP,IAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,IAAA,IAAI,IAAA,OAAW,CAAC,CAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAuB;AACtC,IAAA,GAAA,IAAO,CAAA;AACP,IAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,IAAA,IAAI,IAAA,OAAW,CAAC,CAAA;AAChB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,eAAgB,UAAA,CAAmB,OAAA;AAOzC,EAAA,MAAM,UAAUqB,sBAAA,EAAiB;AACjC,EAAA,MAAM,WAAWI,0BAAA,CAAqB;AAAA,IACpC,MAAA,EAAQ,IAAA;AAAA,IACR,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,KAAK,GAAA,CAAI;AAAA,GACV,CAAA;AACD,EAAA,QAAA,CAAS,UAAA,GAAa,SAAS,UAAA,IAAc,WAAA;AAC7C,EAAA,QAAA,CAAS,UAAA,GAAa,SAAS,UAAA,IAAc,WAAA;AAC7C,EAAA,QAAA,CAAS,SAAA,GAAY,SAAS,SAAA,IAAa,UAAA;AAC3C,EAAA,QAAA,CAAS,QAAA,GAAW,SAAS,QAAA,IAAY,SAAA;AACzC,EAAA,QAAA,CAAS,QAAA,GAAW,SAAS,QAAA,IAAY,SAAA;AAEzC,EAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,eAAA,CAAgB,MAAA,CAAO,OAAA,EAAS;AACrD,IAAA,QAAA,CAAS,gBAAgB,KAAA,EAAM;AAAA,EACjC,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,IAAA,QAAA,CAAS,gBAAgB,KAAA,EAAM;AAAA,EACjC,WAAW,WAAA,EAAa;AACtB,IAAA,WAAA,CAAY,gBAAA;AAAA,MACV,OAAA;AAAA,MACA,MAAM,QAAA,CAAS,eAAA,CAAgB,KAAA,EAAM;AAAA,MACrC,EAAE,MAAM,IAAA;AAAK,KACf;AAAA,EACF;AACA,EAAAC,sBAAA,CAAiB,QAAQ,CAAA;AAEzB,EAAA,IAAI;AACJ,IAAA,MAAM,OAAA,GAAU,IAAIC,kBAAA,CAAa,IAAA,EAAM;AAAA,MACrC,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,uBAAA,EAAyB,WAAA;AAAA;AAAA,MAEzB,gBAAgB,uBAAA,EAAwB;AAAA,MACxC,SAAA,EAAW,CAAC,CAAA,EAAW,KAAA,KAAqB;AAE1C,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,UAAA,IAAIC,oBAAA,CAAe,CAAC,CAAA,EAAG;AAKvB,UAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,UAAA,CAAW,iCAAiC,CAAA,EAAG;AAAA,QAChF;AAEA,QAAA,MAAM,IAAA,GAAOC,YAAA,CAAW,KAAA,CAAM,CAAC,CAAA,EAAG,GAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AACvD,QAAA,CAAA,KAAM,OAAA,GAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,QAAQ,IAAI,CAAA;AAAA,MAC9C,CAAA;AAAA,MACA,QAAA,EAAU,OAAA;AAAA,MACV,QAAA,EAAU,OAAA;AAAA,MACV,uBAAuB,IAAA,EAAM;AAAA,KAC9B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,QAAQ,UAAA,EAAW;AAGhC,IAAA,IAAA,CAAK,UAAA,GAAa,CAAC,GAAA,KAAgB;AACjC,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,IAC/B,CAAA;AAMA,IAAA,IAAI,WAAA;AACJ,IAAA,MAAM,WAAA,GAAc,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM;AAAE,MAAA,WAAA,GAAc,CAAA;AAAA,IAAG,CAAC,CAAA;AAEjE,IAAA,IAAA,CAAK,IAAA,GAAQ,CAAC,CAAA,GAAI,CAAA,KAAM;AAEtB,MAAA,IAAIC,mBAAA,EAAc,CAAE,IAAA,GAAO,CAAA,IAAK,MAAM,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAC,CAAA;AACnB,QAAA,WAAA,EAAY;AAAA,MACd;AAIA,MAAA,MAAM,IAAIC,0BAAoB,CAAC,CAAA;AAAA,IACjC,CAAA;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,CAAC,MAAA,EAAQ,QAAA,EAAU,GAAG,IAAI,CAAA;AAGtC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK,IAAA,GAAQ,CAAC,GAAA,EAAc,GAAA,KAA6C;AACvE,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,UAAA,CAAW,GAAG,CAAA;AACd,UAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AACvC,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,IAAA,CAAK,aAAc,MAAM;AACvB,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,MACnB,CAAA;AAGA,MAAA,oBAAA,CAAqB,CAAC,IAAA,KAAkB;AACtC,QAAA,IAAA,CAAK,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,aAAA,GAAgB,UAAA;AAGtB,IAAA,MAAM,eAAe,aAAA,EAAc;AACnC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,IAAA;AACpB,MAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,IAAA;AACpB,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,IAAA;AAEnB,MAAA,MAAM,OAAO,WAAA,EAAY;AACzB,MAAA,MAAM,OAAO,WAAA,EAAY;AACzB,MAAA,IAAA,CAAK,OAAO,OAAA,GAAU,IAAA;AACtB,MAAA,IAAA,CAAK,OAAO,IAAA,GAAO,IAAA;AACnB,MAAA,IAAA,CAAK,OAAO,OAAA,GAAU,IAAA;AACtB,MAAA,IAAA,CAAK,OAAO,IAAA,GAAO,IAAA;AAGnB,MAAA,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,CAAC,IAAA,KAAkB;AACzC,QAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,IAAA;AAEnB,QAAA,IAAI,gBAAA,mBAAmC,IAAI,CAAA;AAC3C,QAAA,OAAO,IAAA,CAAK,KAAA;AAAA,MACd,CAAA;AACA,MAAA,UAAA,GAAa,IAAA,CAAK,KAAA;AAElB,MAAA,MAAMC,OAAMX,sBAAA,EAAiB;AAC7B,MAAA,IAAIW,IAAAA,EAAKA,IAAAA,CAAI,SAAA,GAAY,IAAA,CAAK,KAAA;AAI9B,MAAA,YAAA,CAAa,IAAI,IAAW,CAAA;AAAA,IAC9B;AAKA,IAAA,MAAM,MAAA,GAAS,CAAC,CAAC,IAAA,EAAM,MAAA;AACvB,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,SAAA,GAAYC,iBAAA,EAAY,CAAE,QAAA,CAAS,YAAY,CAAA;AAC/C,MAAA,MAAM,iBAAiB,IAAA,CAAK,UAAA;AAC5B,MAAA,IAAA,CAAK,aAAc,MAAM;AACvB,QAAA,cAAA,EAAgB,KAAK,IAAI,CAAA;AACzB,QAAA,SAAA,EAAW,KAAA,EAAM;AACjB,QAAA,SAAA,GAAY,IAAA;AAAA,MACd,CAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAA,GAA4B,IAAA;AAChC,IAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,IAAA,IAAI,UAAA;AACJ,IAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM;AAAE,MAAA,UAAA,GAAa,CAAA;AAAA,IAAG,CAAC,CAAA;AAEnE,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA;AAC9C,MAAA,UAAA,CACG,KAAA,CAAM,CAAC,CAAA,KAAM;AACZ,QAAA,IAAIL,oBAAA,CAAe,CAAC,CAAA,EAAG;AACrB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,GAAA,GAAM,aAAa,CAAC,CAAA;AAC1B,QAAA,OAAA,CAAQ,UAAU,GAAG;AAAA,CAAI,CAAA;AACzB,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,IAAA,GAAO,CAAA;AAAA,QACT;AAAA,MACF,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,UAAA,EAAW;AAAA,MACb,CAAC,CAAA;AAAA,IACL,SAAS,CAAA,EAAG;AACV,MAAA,IAAIA,oBAAA,CAAe,CAAC,CAAA,EAAG;AAAA,MAEvB,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,GAAM,aAAa,CAAC,CAAA;AAC1B,QAAA,WAAA,GAAc,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,MAAM,GAAG,CAAA;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,IAAI,YAAA,EAAe,UAAA,CAAmB,OAAA,GAAU,YAAA;AAAA,IAClD,CAAA;AAEA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,EAAQ;AACR,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,IAAA,IAAQ,eAAA;AAC1D,MAAA,MAAM,QAAA,GAAW,YAAY,KAAA,IAAS,EAAA;AACtC,MAAA,MAAM,OAAA,GACJ,YAAY,CAAC,QAAA,CAAS,SAAS,MAAM,CAAA,GACjC,GAAG,MAAM;AAAA,EAAK,QAAQ,KACtB,QAAA,IAAY,MAAA;AAClB,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,GAAA,GAAM,UAAU,OAAO;AAAA,CAAA,EAAM,UAAU,CAAA,EAAE;AAAA,IACzE;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,EAAQ;AACR,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,IAAA,EAAK;AAAA,IACpD;AAOA,IAAA,MAAM,IAAI,OAAA,CAAc,CAAC,MAAM,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAC,CAAA;AAKtD,IAAA,MAAM,WAAWK,iBAAA,EAAY;AAC7B,IAAA,MAAM,kBAAkB,MAAe;AACrC,MAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AACxB,MAAA,OAAO,QAAA,CAAS,kBAAiB,GAAI,CAAA;AAAA,IACvC,CAAA;AAIA,IAAA,MAAM,cAAc,MAAc;AAChC,MAAA,IAAI,SAAS,OAAO,IAAA;AACpB,MAAA,MAAM,KAAM,IAAA,CAAa,QAAA;AACzB,MAAA,OAAO,OAAO,EAAA,KAAO,QAAA,GAAW,EAAA,GAAK,CAAA;AAAA,IACvC,CAAA;AAKA,IAAA,IAAI,iBAAA,GAAoB,KAAA;AACxB,IAAA,MAAM,qBAAqB,YAAY;AACrC,MAAA,IAAI,iBAAA,EAAmB;AACvB,MAAA,iBAAA,GAAoB,IAAA;AACpB,MAAA,MAAM,aAAa,WAAA,EAAY;AAG/B,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAA,CAAK,cAAc,UAAU,CAAA;AAAA,MACpC,SAAS,CAAA,EAAG;AACV,QAAA,IAAIL,oBAAA,CAAe,CAAC,CAAA,EAAG;AACrB,UAAA;AAAA,QACF;AAAA,MAEF;AACA,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS,eAAe,UAAU,CAAA;AAAA,MAC1C,SAAS,CAAA,EAAG;AACV,QAAA,IAAIA,oBAAA,CAAe,CAAC,CAAA,EAAG;AACrB,UAAA;AAAA,QACF;AAAA,MACF;AAOA,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,MAAM,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACxD,CAAA;AAKA,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,eAAA,EAAgB,EAAG;AACvC,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,kBAAA,EAAmB;AACvC,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,eAAA,EAAgB,EAAG;AAClC,QAAA,MAAM,YAAY,WAAA,EAAY;AAI9B,QAAA,IAAI;AAAE,UAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAe;AAC3D,QAAA,OAAA,EAAQ;AACR,QAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,MACzD;AAEA,MAAA,IAAI,eAAA,IAAmB,iBAAA,GAAoB,KAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,aAAA,uBAAoB,OAAA,EAAgB;AAE1C,IAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAA8B;AAChD,MAAA,EAAA,CAAG,cAAA,EAAe;AAClB,MAAA,MAAM,IAAI,EAAA,CAAG,MAAA;AACb,MAAA,IAAIA,oBAAA,CAAe,CAAC,CAAA,EAAG;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,IAAA,IAAQ,OAAO,MAAM,QAAA,EAAU,aAAA,CAAc,IAAI,CAAC,CAAA;AAC3D,MAAA,IAAI;AACF,QAAA,MAAM,aAAa,IAAA,CAAK,aAAA,GACpB,KAAK,aAAA,CAAc,oBAAoB,IAAI,CAAA,GAC3C,KAAA;AACJ,QAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,EAAsB,CAAA,EAAG,EAAA,CAAG,OAAO,CAAA;AAC7C,QAAA,IAAI,UAAA,EAAY;AAAA,MAClB,CAAA,CAAA,MAAQ;AAAA,MAAe;AACvB,MAAA,MAAM,MAAA,GAAS,CAAA,YAAa,KAAA,GACxB,CAAA,qBAAA,EAAwB,EAAE,OAAO;AAAA,EAAK,CAAA,CAAE,SAAS,EAAE;AAAA,CAAA,GACnD,CAAA,qBAAA,EAAwB,MAAA,CAAO,CAAC,CAAC;AAAA,CAAA;AACrC,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB,CAAA;AACA,IAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAmB;AACrC,MAAA,EAAA,CAAG,cAAA,EAAe;AAClB,MAAA,MAAM,IAAI,EAAA,CAAG,KAAA,IAAS,IAAI,KAAA,CAAM,EAAA,CAAG,WAAW,eAAe,CAAA;AAC7D,MAAA,IAAIA,oBAAA,CAAe,CAAC,CAAA,EAAG;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,IAAK,QAAQ,OAAO,CAAA,KAAM,YAAY,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,EAAG;AAChE,MAAA,IAAI,KAAK,IAAA,IAAQ,OAAO,MAAM,QAAA,EAAU,aAAA,CAAc,IAAI,CAAC,CAAA;AAE3D,MAAA,IAAI;AACF,QAAA,MAAM,cAAc,IAAA,CAAK,aAAA,GACrB,KAAK,aAAA,CAAc,mBAAmB,IAAI,CAAA,GAC1C,KAAA;AACJ,QAAA,IAAA,CAAK,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAChC,QAAA,IAAI,WAAA,EAAa;AAAA,MACnB,CAAA,CAAA,MAAQ;AAAA,MAAe;AAEvB,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,IAAA,CAAK,aAAA,GAChB,KAAK,aAAA,CAAc,oBAAoB,IAAI,CAAA,GAC3C,KAAA;AACJ,QAAA,IAAI,MAAA,EAAQ;AAAA,MACd,CAAA,CAAA,MAAQ;AAAA,MAAe;AACvB,MAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GACrB,GAAG,CAAA,CAAE,KAAA,IAAS,EAAE,OAAO;AAAA,CAAA,GACvB,CAAA,UAAA,EAAa,MAAA,CAAO,CAAC,CAAC;AAAA,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,OAAQ,UAAA,CAAmB,gBAAA,KAAqB,UAAA;AACxE,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAC,UAAA,CAAmB,gBAAA,CAAiB,oBAAA,EAAsB,UAAU,CAAA;AACrE,MAAC,UAAA,CAAmB,gBAAA,CAAiB,OAAA,EAAS,UAAU,CAAA;AAAA,IAC1D;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,YAAA,GAChB,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM;AACvB,QAAA,IAAI,aAAc,OAAA,EAAS;AAAE,UAAA,CAAA,EAAE;AAAG,UAAA;AAAA,QAAQ;AAC1C,QAAA,YAAA,CAAc,gBAAA,CAAiB,SAAS,MAAM,CAAA,IAAK,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,MACnE,CAAC,CAAA,GACD,IAAA;AAcJ,MAAA,OAAO,CAAC,OAAA,IAAW,CAAC,YAAA,EAAc,OAAA,EAAS;AAEzC,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,MAAMM,OAAAA,GAA6B;AAAA,YACjC,cAAA;AAAA,YACA,SAAS,YAAA,EAAa;AAAA,YACtB;AAAA,WACF;AACA,UAAA,IAAI,WAAA,EAAaA,OAAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AACxC,UAAA,MAAM,OAAA,CAAQ,KAAKA,OAAM,CAAA;AACzB,UAAA;AAAA,QACF;AAGA,QAAA,IAAI,QAAA,CAAS,gBAAA,EAAiB,KAAM,CAAA,EAAG;AACrC,UAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,YAAA,MAAM,kBAAA,EAAmB;AACzB,YAAA,IAAI,OAAA,IAAW,cAAc,OAAA,EAAS;AACtC,YAAA,IAAI,QAAA,CAAS,gBAAA,EAAiB,GAAI,CAAA,EAAG;AAEnC,cAAA,iBAAA,GAAoB,KAAA;AACpB,cAAA;AAAA,YACF;AAAA,UACF;AAGA,UAAA,MAAM,IAAI,OAAA,CAAc,CAAC,MAAM,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAC,CAAA;AACtD,UAAA,IAAI,QAAA,CAAS,gBAAA,EAAiB,GAAI,CAAA,EAAG;AACnC,YAAA,iBAAA,GAAoB,KAAA;AACpB,YAAA;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,MAAA,GAA6B,CAAC,QAAA,CAAS,YAAA,IAAgB,WAAW,CAAA;AACxE,QAAA,IAAI,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AACxC,QAAA,MAAM,OAAA,CAAQ,KAAK,MAAM,CAAA;AAIzB,QAAA,IAAI,QAAA,CAAS,gBAAA,EAAiB,GAAI,CAAA,EAAG,iBAAA,GAAoB,KAAA;AAAA,MAC3D;AAEA,MAAA,MAAM,YAAY,WAAA,EAAY;AAG9B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,IAAI;AAAE,UAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAe;AAAA,MAC7D;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,IACzD,CAAA,SAAE;AACA,MAAA,OAAA,EAAQ;AAER,MAAA,IAAA,CAAK,OAAQ,MAAM;AAAA,MAAC,CAAA;AACpB,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAC,UAAA,CAAmB,mBAAA,CAAoB,oBAAA,EAAsB,UAAU,CAAA;AACxE,QAAC,UAAA,CAAmB,mBAAA,CAAoB,OAAA,EAAS,UAAU,CAAA;AAAA,MAC7D;AACA,MAAA,UAAA,GAAa,aAAA;AACb,MAAA,MAAM,aAAab,sBAAA,EAAiB;AACpC,MAAA,IAAI,UAAA,aAAuB,SAAA,GAAY,aAAA;AACvC,MAAA,YAAA,CAAa,OAAO,IAAW,CAAA;AAC/B,MAAAc,qBAAA,EAAgB;AAChB,MAAAC,sBAAA,EAAiB;AACjB,MAAAH,iBAAA,GAAc,QAAA,EAAS;AACvB,MAAAI,+BAAA,EAA0B;AAAA,IAC5B;AAAA,EACA,CAAA,SAAE;AAKA,IAAAX,sBAAA,CAAiB,OAAO,CAAA;AAAA,EAC1B;AACF;AAEA,eAAe,UAAA,CACb,QACA,GAAA,EACsB;AACtB,EAAA,IAAI,CAAC,MAAM,OAAO,EAAE,QAAQ,EAAA,EAAI,MAAA,EAAQ,sBAAA,EAAwB,QAAA,EAAU,CAAA,EAAE;AAG5E,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,EAAM;AACtB,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAC,CAAA,KAAM,QAAQ,MAAA,CAAO,CAAC,MAAM,OAAA,EAAS;AAC/C,MAAA,WAAA,GAAc,IAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAC,CAAA,KAAM,QAAQ,MAAA,CAAO,CAAC,MAAM,MAAA,EAAQ;AAC9C,MAAA,WAAA,GAAc,KAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CACG,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,IAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,WAAA,KACrC,CAAA,GAAI,CAAA,GAAI,MAAA,CAAO,MAAA,EACf;AACA,MAAA,UAAA,GAAa,MAAA,CAAO,EAAE,CAAC,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAC,CAAA,KAAM,YAAY,MAAA,CAAO,CAAC,MAAM,IAAA,EAAM;AAChD,MAAA,OAAO;AAAA,QACL,MAAA,EACE,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,OAAO,CAAA;;AAAA,EACtB,MAAM,WAAW,OAAO;AAAA,EAAA,EACtB,MAAM,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,MAAM,QAAQ,OAAO,CAAA;AAAA,EAAA,EAC5C,MAAM,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,MAAM,OAAO,OAAO,CAAA;AAAA,EAAA,EAC3C,MAAM,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,MAAM,YAAY,OAAO,CAAA;AAAA,EAAA,EAChD,MAAM,KAAK,OAAO,CAAA;AAAA,CAAA;AAAA,QACzB,MAAA,EAAQ,EAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACA,IAAA,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,OAAA,GAAU,eAAe,CAAC,CAAA;AAC9B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,SAAA,CAAU,iBAAA,EAAmB,KAAK,CAAA;AAAA,MAC1C,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAE3B,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,IAAI,QAAQ,CAAA,IAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,IAAI,KAAA,EAAO;AAC1C,MAAA,OAAA,GAAU,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACnC,MAAU,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,OAAA;AAAA,IACZ;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAChC,MAAU,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,OAAA;AAAA,IACZ;AAAA,EACF;AAGA,EAAA,MAAM,YAAY,UAAA,IAAc,OAAA;AAChC,EAAsB,UAAA,GAClB,UAAA,CAAW,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,GACnD;AAEJ,EAAA,IAAI,WAAA,GAAc,UAAA,CAAW,OAAA,EAAS,IAAA,EAAM,IAAI,GAAG,CAAA;AAGnD,EAAA,IAAI,CAAC,eAAe,WAAA,EAAa;AAC/B,IAAA,MAAM,gBAAgB,MAAM,eAAA,CAAgB,CAAC,SAAS,GAAG,GAAG,CAAA;AAC5D,IAAA,IAAI,aAAA,CAAc,QAAA,KAAa,CAAA,EAAG,OAAO,aAAA;AACzC,IAAA,WAAA,GAAc,UAAA,CAAW,OAAA,EAAS,IAAA,EAAM,GAAA,CAAI,GAAG,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,OAAO,CAAA;AAAA,CAAA;AAAA,MAChC,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAGA,EAAA,OAAO,kBAAkB,WAAA,EAAa,cAAA,CAAe,KAAA,CAAM,CAAC,GAAG,GAAG,CAAA;AACpE;AAEA,SAAS,UAAA,CACP,IAAA,EACA,GAAA,EACA,GAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,GAAG,IAAI,IAAA,GAAO,IAAA;AAChD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,GACpC,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,GACzB,SAAA;AAGJ,EAAA,MAAM,WAAA,GACJ,GAAA,IAAO,GAAA,KAAQ,GAAA,GACX,CAAC,CAAA,EAAG,GAAG,CAAA,aAAA,CAAA,EAAiB,CAAA,aAAA,CAAe,CAAA,GACvC,CAAC,CAAA,aAAA,CAAe,CAAA;AAEtB,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAE/B,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,aAAA,CAAA;AACzC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,MAAM,IAAA,CAAK,KAAA;AAAA,UACf,GAAA,CAAI,YAAA,CAAa,WAAA,EAAa,MAAM;AAAA,SACtC;AACA,QAAA,IAAI,IAAI,GAAA,EAAK;AACX,UAAA,IAAI,OAAO,GAAA,CAAI,GAAA,KAAQ,QAAA,EAAU;AAC/B,YAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,IAAI,GAAG,CAAA,CAAA;AAAA,UACzC;AACA,UAAA,IAAI,OAAO,GAAA,CAAI,GAAA,KAAQ,QAAA,EAAU;AAC/B,YAAA,MAAM,SAAS,GAAA,CAAI,GAAA;AACnB,YAAA,MAAM,QAAA,GACJ,MAAA,CAAO,SAAS,CAAA,IAChB,MAAA,CAAO,SAAS,CAAA,IAChB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAC,CAAA;AACzB,YAAA,IAAI,UAAU,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,SAAS,IAAI,QAAQ,CAAA,CAAA;AAAA,UACxD;AAAA,QACF;AAEA,QAAA,IAAI,GAAA,CAAI,MAAM,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,MACxD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,KAAK,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA;AACrC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS,MAAM,CAAA;AAE7C,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AAC3C,QAAA,IAAI,KAAA,IAAS,IAAI,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,OAAO,KAAA,CAAM,CAAC,CAAA;AAAA,MACvD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAwBO,SAAS,IAAA,CACd,OAAA,EACA,QAAA,EACA,EAAA,EACc;AACd,EAAA,IAAI,UAAsB,EAAC;AAC3B,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA,IAAA,GAAO,QAAA;AAAA,EACT,WAAW,QAAA,EAAU;AACnB,IAAA,OAAA,GAAU,QAAA;AACV,IAAA,IAAA,GAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,YAAA,EAAa;AAE/B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,CAAA,GAAI,IAAI,KAAA,CAAM,4DAA4D,CAAA;AAChF,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AACrB,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IAC1B,GAAG,CAAC,CAAA;AACJ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,WAAA,EAAY;AACvC,EAAA,MAAM,GAAA,GAAO,QAAQ,GAAA,IAAkC,MAAA;AAGvD,EAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAA,EAAK,GAAA,EAAK,CAAA,CAAE,IAAA;AAAA,IACjC,CAAC,MAAA,KAAW;AACV,MAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS,GAAI,MAAA;AACrC,MAAA,IAAI,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAKY,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAClD,MAAA,IAAI,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAKA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAClD,MAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,MAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,MAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAI,CAAA;AACjC,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI,aAAa,CAAA,EAAG;AAClB,UAAA,MAAM,CAAA,GAAI,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAE,CAAA;AAChD,UAAC,EAAU,IAAA,GAAO,QAAA;AAClB,UAAA,IAAA,CAAK,CAAA,EAAG,MAAA,IAAU,EAAA,EAAI,MAAA,IAAU,EAAE,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAM,MAAA,IAAU,EAAA,EAAI,MAAA,IAAU,EAAE,CAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,CAAA,KAAM;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACjE,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IACtE;AAAA,GACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,QAAA,CAAS,KAAa,IAAA,EAAoC;AACxE,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,MAAM,WAAW,IAAA,EAAM,QAAA;AAGvB,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,OAAA,EAAS,IAAI,CAAA;AAC9C,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,IAAI,QAAA,KAAa,QAAA,EAAU,OAAOA,YAAA,CAAO,KAAK,MAAM,CAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,aAAa,YAAA,EAAa;AACvC,EAAA,MAAM,MAAM,IAAA,EAAM,GAAA,IAAQ,UAAA,CAAmB,OAAA,EAAS,OAAM,IAAK,GAAA;AACjE,EAAA,MAAM,GAAA,GAAO,IAAA,EAAM,GAAA,IAAkC,EAAC;AAEtD,EAAC,KAAa,WAAA,CAAY;AAAA,IACxB,IAAA,EAAM,YAAA;AAAA,IACN,SAAA,EAAW,kBAAA,EAAA;AAAA,IACX,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,KAAK,EAAE,CAAC,CAAA;AAAA,IAC/B,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,IAClC,GAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc;AAAA,GACf,CAAA;AAGD,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,KAAW,YAAA,CAAa,aAAA,CAAc,MAAM,IAAO,CAAA;AAErE,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAO;AAAA,EAAK,MAAM,CAAA,CAAE,CAAA;AAClE,IAAA,GAAA,CAAI,MAAA,GAAS,QAAA;AACb,IAAA,GAAA,CAAI,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC3B,IAAA,GAAA,CAAI,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/B,IAAA,GAAA,CAAI,SAAS,CAAC,IAAA,EAAM,GAAA,CAAI,MAAA,EAAQ,IAAI,MAAM,CAAA;AAC1C,IAAA,MAAM,GAAA;AAAA,EACR;AAEA,EAAA,IAAI,QAAA,KAAa,QAAA,EAAU,OAAOA,YAAA,CAAO,KAAK,MAAM,CAAA;AACpD,EAAA,OAAO,MAAA;AACT;AAEA,IAAI,kBAAA,GAAqB,CAAA;AAEzB,MAAM,UAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,qBAAA;AAAA,EACN,GAAA,EAAK,oBAAA;AAAA,EACL,GAAA,EAAK,oBAAA;AAAA,EACL,IAAA,EAAM,qBAAA;AAAA,EACN,IAAA,EAAM,qBAAA;AAAA,EACN,GAAA,EAAK,oBAAA;AAAA,EACL,IAAA,EAAM,qBAAA;AAAA,EACN,GAAA,EAAK;AACP,CAAA;AAEA,SAAS,kBAAkB,IAAA,EAA6B;AACtD,EAAA,IAAI,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,WAAW,IAAI,CAAA;AAC5C,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,OAAA,GAAU,sBAAsB,IAAI,CAAA,CAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,OAAA;AAAA,EACvC;AACA,EAAA,OAAO,IAAA;AACT;AAGA,SAAS,qBAAqB,GAAA,EAAoB;AAChD,EAAA,MAAM,MAAW,IAAI,KAAA;AAAA,IACnB,mBAAmB,GAAG;AAAA,YAAA,EAAiB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA;AAAA,GAC5D;AACA,EAAA,GAAA,CAAI,MAAA,GAAS,GAAA;AACb,EAAA,GAAA,CAAI,MAAA,GAASA,aAAO,IAAA,CAAK,CAAA,YAAA,EAAe,IAAI,KAAA,CAAM,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,CAAe,CAAA;AAC1E,EAAA,GAAA,CAAI,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC3B,EAAA,MAAM,GAAA;AACR;AAEA,SAAS,YAAY,GAAA,EAAyD;AAC5E,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,UAAU,GAAA,GAAM,OAAA;AACtB,IAAA,IAAI;AAAE,MAAA,IAAI,IAAA,CAAK,WAAW,OAAO,CAAA,SAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,GAAA,EAAI;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAQ;AAC9F,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,CAAA,EAAG,IAAI,WAAA,CAAY,GAAG,CAAC,CAAA,IAAK,GAAA;AACzD,IAAA,IAAI,WAAW,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AACA,EAAA,IAAI;AAAE,IAAA,IAAI,IAAA,CAAK,WAAW,OAAO,CAAA,SAAU,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,GAAA,EAAI;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAA,EAAQ;AAC9F,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAAwB;AAC/C,EAAA,IAAI;AACF,IAAA,MAAM,OAAQ,IAAA,CAAM,YAAA,CAAa,SAAS,OAAA,EAAS,MAAa,EAAa,IAAA,EAAK;AAClF,IAAA,IAAI,KAAK,UAAA,CAAW,kBAAkB,GAAG,OAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,MAAA;AAAA,EAAQ;AAC3B;AAEA,SAAS,iBAAiB,MAAA,EAA+B;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,OAAQ,IAAA,CAAM,YAAA,CAAa,SAAS,OAAA,EAAS,MAAa,EAAa,IAAA,EAAK;AAClF,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,MAAA,MAAM,OAAA,GAAU,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAC3C,MAAA,OAAQ,IAAA,CAAM,YAAA,CAAa,OAAA,EAAS,MAAa,EAAa,IAAA,EAAK;AAAA,IACrE;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AACzB;AAEA,SAAS,iBAAA,CAAkB,QAAgB,GAAA,EAA4B;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAM,YAAA,CAAa,MAAA,GAAS,WAAW,MAAa,CAAA;AACnE,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,WAAA,EAAqB,aAA4B,IAAA,EAAM,QAAA;AAC3D,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAAE,MAAA,WAAA,GAAc,MAAM,CAAC,CAAA;AAAG,MAAA,UAAA,GAAa,MAAM,CAAC,CAAA;AAAG,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IAAG,CAAA,MAAA,IACrF,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAAE,MAAA,WAAA,GAAc,MAAM,CAAC,CAAA;AAAG,MAAA,QAAA,GAAW,MAAM,CAAC,CAAA;AAAA,IAAG,OACvE,OAAO,IAAA;AACZ,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,QAAA,SAAA,GAAY,UAAA,GACR,YAAY,CAAA,CAAA,EAAI,WAAW,KAAK,UAAU,CAAA,EAAA,CAAA,GAC1C,OAAA,KAAY,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,CAAA;AAC/B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AAC5C,QAAA,IAAI,CAAA,IAAK,EAAE,CAAC,CAAA,KAAM,UAAU,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAAQ;AAChB,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,KAAa,IAAA,EAAkC;AACxE,EAAA,IAAI,6BAA6B,IAAA,CAAK,GAAG,CAAA,EAAG,OAAOvC,eAAS,IAAA,GAAO,IAAA;AACnE,EAAA,IAAI,4BAA4B,IAAA,CAAK,GAAG,CAAA,EAAG,OAAOA,eAAS,GAAA,GAAM,IAAA;AACjE,EAAA,IAAI,6BAA6B,IAAA,CAAK,GAAG,CAAA,EAAG,OAAOA,eAAS,IAAA,GAAO,IAAA;AACnE,EAAA,IAAI,6BAA6B,IAAA,CAAK,GAAG,CAAA,EAAG,OAAOA,eAAS,IAAA,GAAO,IAAA;AACnE,EAAA,IAAI,4BAA4B,IAAA,CAAK,GAAG,CAAA,EAAG,OAAOA,eAAS,GAAA,GAAM,IAAA;AAGjE,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,qCAAqC,CAAA;AAClE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,OAAA,GAAU,WAAW,CAAC,CAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,kBAAkB,OAAO,CAAA;AACzC,IAAA,IAAI,OAAA,SAAgB,OAAA,GAAU,IAAA;AAC9B,IAAA,oBAAA,CAAqB,GAAG,CAAA;AAAA,EAC1B;AAGA,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,KAAA,CAAM,6BAA6B,CAAA;AAC5D,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,OAAA,GAAU,aAAa,CAAC,CAAA;AAC9B,IAAA,IACE,OAAA,KAAY,UACZ,OAAA,KAAY,KAAA,IACZ,YAAY,MAAA,IACZ,OAAA,KAAY,UACZ,OAAA,KAAY,KAAA;AAEZ,MAAA,OAAO,IAAA;AACT,IAAA,IAAI,CAAC,iBAAA,CAAkB,OAAO,CAAA,uBAAwB,GAAG,CAAA;AAAA,EAE3D;AAGA,EAAA,IAAI,kDAAA,CAAmD,IAAA,CAAK,GAAG,CAAA,EAAG;AAChE,IAAA,OAAOC,4BAAA,CAAuB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,GAAI,IAAA;AAAA,EACrD;AAEA,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,6BAA6B,CAAA;AACzD,EAAA,IAAI,SAAA,EAAW,OAAO,SAAA,CAAU,CAAC,CAAA,GAAI,IAAA;AACrC,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,SAAA;AACxC,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,UAAA;AACxC,EAAA,IAAI,iBAAA,CAAkB,KAAK,GAAG,CAAA;AAC5B,IAAA,OAAO,gDAAA;AAET,EAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,GAAG,CAAA,IAAK,QAAQ,eAAA,EAAiB;AACpE,IAAA,OAAO,cAAA,GAAiBD,eAAS,GAAA,GAAM,IAAA;AAAA,EACzC;AACA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,KAAA,CAAM,0BAA0B,CAAA;AAC7D,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,CAAC,CAAA,CAAE,IAAA,EAAK;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,GAAA;AACzB,MAAA,MAAM,EAAA,GAAK,YAAY,GAAG,CAAA;AAC1B,MAAA,IAAI,YAAY,iBAAA,EAAmB,OAAO,EAAA,GAAK,EAAA,CAAG,UAAU,IAAA,GAAO,EAAA;AACnE,MAAA,IAAI,OAAA,KAAY,uBAAA,EAAyB,OAAO,EAAA,GAAK,QAAA,GAAW,SAAA;AAChE,MAAA,IAAI,OAAA,KAAY,WAAA,EAAa,OAAO,EAAA,GAAK,QAAA,GAAW,EAAA;AACpD,MAAA,IAAI,OAAA,KAAY,wBAAwB,OAAO,SAAA;AAC/C,MAAA,IAAI,YAAY,mBAAA,IAAuB,EAAA,SAAW,eAAA,CAAgB,EAAA,CAAG,MAAM,CAAA,GAAI,IAAA;AAC/E,MAAA,IAAA,CAAK,OAAA,KAAY,MAAA,IAAU,OAAA,KAAY,eAAA,KAAoB,EAAA,EAAI;AAC7D,QAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,EAAA,CAAG,MAAM,CAAA;AACpC,QAAA,OAAO,CAAA,GAAI,IAAI,IAAA,GAAO,EAAA;AAAA,MACxB;AACA,MAAA,IAAI,OAAA,KAAY,kBAAkB,EAAA,EAAI;AACpC,QAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,EAAA,CAAG,MAAM,CAAA;AACpC,QAAA,OAAO,IAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,IAAA,GAAO,EAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,IAAI,oCAAA,CAAqC,IAAA,CAAK,GAAG,CAAA,EAAG;AAClD,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,GAAA;AACzB,MAAA,MAAM,EAAA,GAAK,YAAY,GAAG,CAAA;AAC1B,MAAA,IAAI,EAAA,EAAI,OAAO,eAAA,CAAgB,EAAA,CAAG,MAAM,CAAA,GAAI,IAAA;AAAA,IAC9C;AACA,IAAA,MAAM,iBAAA,GAAoB,GAAA,CAAI,KAAA,CAAM,wCAAwC,CAAA;AAC5E,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,GAAA;AACzB,MAAA,MAAM,EAAA,GAAK,YAAY,GAAG,CAAA;AAC1B,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,MAAM,iBAAA,CAAkB,EAAA,CAAG,MAAA,EAAQ,iBAAA,CAAkB,CAAC,CAAC,CAAA;AAC7D,QAAA,OAAO,GAAA,KAAQ,IAAA,GAAO,GAAA,GAAM,IAAA,GAAO,EAAA;AAAA,MACrC;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,GAAA,EAAK,OAAO,EAAA;AAC1C,EAAA,IAAI,GAAA,KAAQ,KAAA,EAAO,OAAA,CAAQ,IAAA,EAAM,OAAO,GAAA,IAAO,IAAA;AAC/C,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,EAAM;AAClC,IAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAa,CAAA;AAAA,IAC9C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAA,CAAK,QAAQ,IAAA,IAAQ,GAAA,CAAI,UAAA,CAAW,KAAK,MAAM,IAAA,EAAM;AACnD,IAAA,MAAM,GAAA,GACJ,GAAA,KAAQ,IAAA,GACJ,IAAA,EAAM,OAAO,GAAA,GACb,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,SAAS,EAAE,CAAA;AAC7C,IAAA,IAAI;AACF,MAAA,OAAO,KAAK,WAAA,CAAY,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,MAAM,YAAY,GAAA,CAAI,KAAA;AAAA,IACpB;AAAA,GACF;AACA,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,MAAM,IAAA,GAAO,UAAU,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,UAAU,CAAC,CAAA;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AAC7B,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,EAAA,CAAG,MAAA,IAAU,OAAO,EAAA;AACzC,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,EAAA,CAAG,WAAA,IAAe,OAAO,EAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAMA,SAAS,eACP,KAAA,EAC+F;AAC/F,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAA8C;AAC1D,IAAA,IAAI,MAAM,SAAA,IAAa,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,OAAO,CAAA;AAE9D,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,IAAI,SAAS,IAAA,EAAM,OAAO,CAAC,MAAA,EAAQ,QAAQ,MAAM,CAAA;AACjD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,CAAA,GAAI,KAAK,KAAK,CAAA;AACpB,IAAA,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAChC;AAEO,SAAS,KAAA,CACd,OAAA,EACA,UAAA,EACA,IAAA,EACc;AACd,EAAA,IAAI,YAAsB,EAAC;AAC3B,EAAA,IAAI,MAAmB,EAAC;AACxB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAA,SAAA,GAAY,UAAA;AACZ,IAAA,GAAA,GAAM,QAAQ,EAAC;AAAA,EACjB,CAAA,MAAA,IAAW,YAAY,GAAA,GAAM,UAAA;AAE7B,EAAA,MAAM,KAAA,GAAQ,IAAI,YAAA,EAAa;AAM/B,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AACzC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,KAAM,SAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,CAAC,CAAA,KAAM,SAAA;AACtC,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,CAAC,CAAA,KAAM,SAAA;AAItC,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,WAAA,EAAY;AACnC,IAAA,MAAM,GAAA,GAAO,GAAA,CAAI,GAAA,IAAkC,EAAC;AACpD,IAAgB,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK;AAIzE,IAAA,MAAM,WAAA,GAAckC,iBAAA,EAAY,CAAE,QAAA,CAAS,cAAc,CAAA;AACzD,IAAC,MAAc,SAAA,GAAY,WAAA;AAG3B,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,IAAA,aAAA,CAAc,SAAS,SAAA,EAAW;AAAA,MAChC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA,EAAO,eAAe,SAAA,GAAY,MAAA;AAAA,MAClC,QAAA,EAAU,CAAC,IAAA,KAAiB;AAC1B,QAAA,cAAA,GAAiB,IAAA;AAGjB,QAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA,EAAQ,KAAA,CAAM,QAAQ,IAAA,CAAKK,YAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAIhE,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,UAAA,IAAI,IAAA,OAAW,IAAI,CAAA;AAAA,QACrB;AAAA,MACF,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,IAAA,KAAiB;AAC1B,QAAA,cAAA,GAAiB,IAAA;AACjB,QAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA,EAAQ,KAAA,CAAM,QAAQ,IAAA,CAAKA,YAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAChE,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,UAAA,IAAI,IAAA,OAAW,IAAI,CAAA;AAAA,QACrB;AAAA,MACF;AAAA,KACD,EAAE,IAAA,CAAK,CAAC,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAO,KAAM;AACxC,MAAA,WAAA,CAAY,KAAA,EAAM;AAElB,MAAA,IAAI,CAAC,kBAAkB,MAAA,EAAQ,KAAA,CAAM,QAAQ,IAAA,CAAKA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AACrE,MAAA,IAAI,CAAC,kBAAkB,MAAA,EAAQ,KAAA,CAAM,QAAQ,IAAA,CAAKA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AACrE,MAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,MAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,MAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAI,CAAA;AAAA,IACnC,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM;AACd,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,IACnE,CAAC,CAAA;AAAA,EACH,WAAW,MAAA,EAAQ;AAEjB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,WAAA,EAAY;AACnC,IAAA,MAAM,GAAA,GAAO,IAAI,GAAA,IAAkC,MAAA;AACnD,IAAA,MAAM,OAAA,GAAU,UAAU,MAAA,GACtB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,GAAG,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAC5E,OAAA;AAEJ,IAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAA,EAAK,GAAA,EAAK,CAAA,CAAE,IAAA;AAAA,MACjC,CAAC,MAAA,KAAW;AACV,QAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS,GAAI,MAAA;AACrC,QAAA,IAAI,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAKA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAClD,QAAA,IAAI,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAKA,YAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAClD,QAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,QAAA,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AACvB,QAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,QAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAClC,QAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAI,CAAA;AAAA,MACnC,CAAA;AAAA,MACA,CAAC,CAAA,KAAM;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,MACnE;AAAA,KACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAI,KAAA,CAAM,gDAAgD,CAAC,CAAA;AAAA,IACjF,GAAG,CAAC,CAAA;AAAA,EACN;AAGA,EAAA,cAAA,CAAe,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA;AAExC,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,SAAA,CACd,GAAA,EACA,IAAA,EACA,IAAA,EASA;AACA,EAAA,IAAI,YAAsB,EAAC;AAC3B,EAAA,IAAI,MAAmB,EAAC;AACxB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA,GAAA,GAAM,QAAQ,EAAC;AAAA,EACjB,WAAW,IAAA,EAAM;AACf,IAAA,GAAA,GAAM,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,GAAG,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,GAAA;AAClE,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,IAAA,EAAM,EAAE,GAAA,EAAK,IAAI,GAAA,EAAK,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,CAAA;AAEzE,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,MAAM,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AACrC,IAAA,MAAM,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,CAAA;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,GAAA,EAAKC,eAAS,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAIA,cAAA,CAAS,KAAK,CAAA;AAAA,MAC9D,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM;AAAA,KAC/B;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,aAAa,YAAA,EAAa;AACvC,EAAA,MAAM,MAAM,GAAA,CAAI,GAAA,IAAQ,UAAA,CAAmB,OAAA,EAAS,OAAM,IAAK,GAAA;AAC/D,EAAA,MAAM,GAAA,GAAO,GAAA,CAAI,GAAA,IAAkC,EAAC;AAIpD,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAEzC,EAAC,KAAa,WAAA,CAAY;AAAA,IACxB,IAAA,EAAM,YAAA;AAAA,IACN,SAAA,EAAW,kBAAA,EAAA;AAAA,IACX,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAK,EAAE,CAAC,CAAA;AAAA,IAC5B,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,IAC/B,GAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,YAAA,EAAc,IAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACR,CAAA;AAGD,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,UAAU,MAAA,EAAQ,SAAA,KAAc,YAAA,CAAa,aAAA,CAAc,MAAM,IAAO,CAAA;AAChF,IAAA,MAAM,MAAA,GAASD,YAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AACpC,IAAA,MAAM,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC7B,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,GAAA,EAAKC,eAAS,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAIA,cAAA,CAAS,KAAK,CAAA;AAAA,MAC9D,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM;AAAA,KAC/B;AAAA,EACF,SAAS,CAAA,EAAQ;AACf,IAAA,MAAM,MAAA,GAASD,YAAA,CAAO,IAAA,CAAK,CAAA,EAAG,UAAU,EAAE,CAAA;AAC1C,IAAA,MAAM,MAAA,GAASA,YAAA,CAAO,IAAA,CAAK,CAAA,EAAG,WAAW,EAAE,CAAA;AAC3C,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,GAAG,MAAA,IAAU,CAAA;AAAA,MACrB,MAAA,EAAQ,IAAA;AAAA,MACR,GAAA,EAAKC,eAAS,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAIA,cAAA,CAAS,KAAK,CAAA;AAAA,MAC9D,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC7B,KAAA,EAAO,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,KACrD;AAAA,EACF;AACF;AAEO,SAAS,YAAA,CACd,IAAA,EACA,IAAA,EACA,IAAA,EACiB;AACjB,EAAA,MAAM,GAAA,GAAM,IAAA,EAAM,MAAA,GAAS,CAAA,EAAG,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,IAAA;AACzD,EAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;AAEO,SAAS,QAAA,CACd,IAAA,EACA,UAAA,EACA,QAAA,EACA,EAAA,EACc;AACd,EAAA,IAAI,WAAqB,EAAC;AAC1B,EAAA,IAAI,UAAsB,EAAC;AAC3B,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAA,QAAA,GAAW,UAAA;AACX,IAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,IAAA,GAAO,QAAA;AAAA,SAAA,IAClC,QAAA,EAAU;AACjB,MAAA,OAAA,GAAU,QAAA;AACV,MAAA,IAAA,GAAO,EAAA;AAAA,IACT;AAAA,EACF,CAAA,MAAA,IAAW,OAAO,UAAA,KAAe,UAAA,EAAY;AAC3C,IAAA,IAAA,GAAO,UAAA;AAAA,EACT,WAAW,UAAA,EAAY;AACrB,IAAA,OAAA,GAAU,UAAA;AACV,IAAA,IAAA,GAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,IAAI,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,IAAA;AAChE,EAAA,OAAO,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS,IAAI,CAAA;AAChC;AAEO,SAAS,IAAA,CACd,UAAA,EACA,UAAA,EACA,IAAA,EACc;AACd,EAAA,IAAI,OAAiB,EAAC;AACtB,EAAA,IAAI,MAA+B,EAAC;AACpC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAA,IAAA,GAAO,UAAA;AACP,IAAA,GAAA,GAAM,QAAQ,EAAC;AAAA,EACjB,CAAA,MAAA,IAAW,YAAY,GAAA,GAAM,UAAA;AAE7B,EAAA,MAAM,GAAA,GAAO,GAAA,CAAI,GAAA,IAAkB,WAAA,EAAY;AAC/C,EAAA,MAAM,MAAO,GAAA,CAAI,GAAA,KACd,MAAA,EAAQ,MAAA,MAAY,EAAC,CAAA;AAExB,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,UAAA,CAAW,GAAG,CAAA,GACtC,UAAA,GACA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAE9C,EAAA,MAAM,KAAA,GAAQ,IAAI,YAAA,EAAa;AAC/B,EAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAClB,EAAA,KAAA,CAAM,SAAA,GAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,GAAG,IAAI,CAAA;AAC5C,EAAA,KAAA,CAAM,SAAA,GAAY,MAAA;AAElB,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAI,KAAA,CAAM,iEAAiE,CAAC,CAAA;AAAA,IAClG,GAAG,CAAC,CAAA;AACJ,IAAA,OAAO,KAAA;AAAA,EACT;AAIA,EAAA,MAAM,WAAA,GAAcN,iBAAA,EAAY,CAAE,QAAA,CAAS,cAAc,CAAA;AACzD,EAAC,MAAc,SAAA,GAAY,WAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM;AAAA,IAC1C,GAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA,EAAU,CAAC,IAAA,KAAiB;AAC1B,MAAA,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAE/B,MAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,MAAA,IAAI,IAAA,OAAW,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,IAAA,KAAiB;AAC1B,MAAA,KAAA,CAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAC/B,MAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,MAAA,IAAI,IAAA,OAAW,IAAI,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,IAAA,KAAkB;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,MAAA,EAAQ,CAAC,QAAA,KAAqB;AAC5B,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,MAAA,KAAA,CAAM,SAAA,GAAY,KAAA;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAI,CAAA;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA;AAAA,IACpC;AAAA,GACD,CAAA;AAGD,EAAA,KAAA,CAAM,IAAA,GAAO,CAAC,GAAA,EAAc,GAAA,KAA6C;AACvE,IAAA,IAAI,CAAC,KAAA,CAAM,SAAA,EAAW,OAAO,KAAA;AAC7B,IAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,KAAA,CAAM,IAAA,GAAO,CAAC,GAAA,KAA0B;AACtC,IAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,IAAA,KAAA,CAAM,SAAA,GAAY,KAAA;AAClB,IAAA,MAAA,CAAO,UAAA,EAAW;AAClB,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,GAAA,IAAO,SAAS,CAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,GAAA,IAAO,SAAS,CAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,KAAA,CAAM,aAAa,MAAY;AAC7B,IAAA,KAAA,CAAM,SAAA,GAAY,KAAA;AAClB,IAAA,MAAA,CAAO,UAAA,EAAW;AAClB,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,OAAO,KAAA;AACT;AA0BO,MAAM,YAAA,GAAe,SAASO,aAAAA,GAAwB;AAC3D,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAAC,kBAAA,CAAa,KAAK,IAAI,CAAA;AACtB,EAAA,IAAA,CAAK,GAAA,GAAMF,eAAS,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAIA,cAAA,CAAS,KAAK,CAAA;AACpE,EAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,EAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,EAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,EAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,EAAA,IAAA,CAAK,YAAY,EAAC;AAClB,EAAA,IAAA,CAAK,SAAA,GAAY,EAAA;AACjB,EAAA,IAAA,CAAK,KAAA,GAAQ,IAAIG,cAAA,EAAS;AAC1B,EAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,cAAA,EAAS;AAC3B,EAAA,IAAA,CAAK,MAAA,GAAS,IAAIA,cAAA,EAAS;AAC7B;AAEA,MAAA,CAAO,cAAA,CAAe,YAAA,CAAa,SAAA,EAAWF,kBAAA,CAAa,SAAS,CAAA;AAEpE,YAAA,CAAa,SAAA,CAAU,IAAA,GAAO,SAAS,IAAA,CAAgB,GAAA,EAAuB;AAC5E,EAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,EAAA,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,GAAA,IAAO,SAAS,CAAA;AACxC,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,YAAA,CAAa,SAAA,CAAU,UAAA,GAAa,SAAS,UAAA,GAA4B;AACvE,EAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACnB,CAAA;AAEA,YAAA,CAAa,SAAA,CAAU,IAAA,GAAO,SAAS,IAAA,CAAgB,KAAc,EAAA,EAAyC;AAC5G,EAAA,IAAI,EAAA,EAAI,EAAA,CAAG,IAAI,KAAA,CAAM,iBAAiB,CAAC,CAAA;AACvC,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,YAAA,CAAa,SAAA,CAAU,GAAA,GAAM,SAAS,GAAA,GAAoB;AACxD,EAAA,MAAM,IAAI,IAAA,CAAK,SAAA;AACf,EAAA,IAAI,CAAA,IAAK,GAAA,EAAI;AACb,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,YAAA,CAAa,SAAA,CAAU,KAAA,GAAQ,SAAS,KAAA,GAAsB;AAC5D,EAAA,MAAM,IAAI,IAAA,CAAK,SAAA;AACf,EAAA,IAAI,CAAA,IAAK,KAAA,EAAM;AACf,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,sBAAe;AAAA,EACb,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}