{"version":3,"sources":["../../node_modules/tsup/assets/cjs_shims.js","../../src/defaults.ts","../../src/errors.ts","../../src/native-worker-protocol.ts","../../src/url.ts","../../src/native-worker-client.ts","../../src/native-sandbox.ts","../../src/native-cloud.ts","../../src/models.ts","../../src/cloud-client.ts","../../lib/libc.cjs","../../src/native-binding.ts","../../src/sandbox-image.ts","../../src/image.ts","../../src/applications/index.ts","../../src/applications/function.ts","../../src/applications/errors.ts","../../src/applications/schema.ts","../../src/applications/file.ts","../../src/applications/http-body.ts","../../src/applications/registry.ts","../../src/applications/headers.ts","../../src/applications/context.ts","../../src/applications/serialization.ts","../../src/applications/local.ts","../../src/applications/remote.ts","../../src/api-client.ts","../../src/filesystem.ts","../../src/mount-cli.ts","../../src/filesystem-models.ts","../../src/applications/manifest.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n  typeof document === \"undefined\" \n    ? new URL(`file:${__filename}`).href \n    : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n      ? document.currentScript.src \n      : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n\nexport const API_URL =\n  process.env.TENSORLAKE_API_URL ?? \"https://api.tensorlake.ai\";\nexport const API_KEY = process.env.TENSORLAKE_API_KEY ?? undefined;\nexport const NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? \"default\";\nexport const SANDBOX_PROXY_URL =\n  process.env.TENSORLAKE_SANDBOX_PROXY_URL ?? \"https://sandbox.tensorlake.ai\";\n\nexport const DEFAULT_HTTP_TIMEOUT_MS = 300_000;\nexport const MAX_RETRIES = 3;\nexport const RETRY_BACKOFF_MS = 500;\n","/** Base exception for all sandbox-related errors. */\nexport class SandboxException extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"SandboxException\";\n  }\n}\n\n/** General sandbox operation error. */\nexport class SandboxError extends SandboxException {\n  constructor(message: string) {\n    super(message);\n    this.name = \"SandboxError\";\n  }\n}\n\n/**\n * Raised when the client cannot complete a request against the API server.\n *\n * The original transport error is preserved on this error's {@link cause} for programmatic\n * inspection, and its full chain is folded into the message so it survives\n * wrappers that only forward `error.message`. No interpretation of the failure\n * (client vs server) is applied — the raw inner error is surfaced as-is so the\n * reader can judge.\n */\nexport class SandboxConnectionError extends SandboxError {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(`Connection error: ${message}`);\n    this.name = \"SandboxConnectionError\";\n    if (options?.cause !== undefined) this.cause = options.cause;\n  }\n}\n\n/**\n * Flatten an error and its `cause` chain into a single readable line, appending\n * each level's `code` when it is not already present in the message. Transport\n * reports `fetch failed` at the top and the real reason one or more levels down\n * in `.cause`, so this surfaces the part that actually identifies the failure.\n *\n * @example \"fetch failed: connect ECONNREFUSED 10.0.0.1:443\"\n * @example \"fetch failed: Connect Timeout Error (UND_ERR_CONNECT_TIMEOUT)\"\n */\nexport function describeError(err: unknown): string {\n  const parts: string[] = [];\n  const seen = new Set<unknown>();\n  let current: unknown = err;\n\n  for (let depth = 0; depth < 6; depth++) {\n    if (current == null || typeof current !== \"object\" || seen.has(current)) {\n      break;\n    }\n    seen.add(current);\n    const e = current as { message?: unknown; code?: unknown; cause?: unknown };\n    const message = typeof e.message === \"string\" ? e.message.trim() : \"\";\n    const code = typeof e.code === \"string\" ? e.code : undefined;\n\n    let segment = message;\n    if (code && (!message || !message.includes(code))) {\n      segment = segment ? `${segment} (${code})` : code;\n    }\n    if (segment && !parts.includes(segment)) parts.push(segment);\n\n    current = e.cause;\n  }\n\n  if (parts.length > 0) return parts.join(\": \");\n  return err instanceof Error ? err.message : String(err);\n}\n\n/** Raised when a sandbox is not found. */\nexport class SandboxNotFoundError extends SandboxError {\n  readonly sandboxId: string;\n\n  constructor(sandboxId: string) {\n    super(`Sandbox not found: ${sandboxId}`);\n    this.name = \"SandboxNotFoundError\";\n    this.sandboxId = sandboxId;\n  }\n}\n\n/** Raised when a sandbox pool is not found. */\nexport class PoolNotFoundError extends SandboxError {\n  readonly poolId: string;\n\n  constructor(poolId: string) {\n    super(`Sandbox pool not found: ${poolId}`);\n    this.name = \"PoolNotFoundError\";\n    this.poolId = poolId;\n  }\n}\n\n/** Raised when attempting to delete a pool that is in use. */\nexport class PoolInUseError extends SandboxError {\n  readonly poolId: string;\n\n  constructor(poolId: string, message?: string) {\n    const base = `Cannot delete pool ${poolId}: pool is in use`;\n    super(message ? `${base} - ${message}` : base);\n    this.name = \"PoolInUseError\";\n    this.poolId = poolId;\n  }\n}\n\nexport function formatErrorDetails(errorDetails: unknown): string | undefined {\n  if (errorDetails == null) return undefined;\n  if (typeof errorDetails === \"string\") {\n    const detail = errorDetails.trim();\n    return detail || undefined;\n  }\n  if (Array.isArray(errorDetails)) {\n    const parts = errorDetails\n      .map((item) => formatErrorDetails(item))\n      .filter((item): item is string => Boolean(item));\n    return parts.length > 0 ? parts.join(\"; \") : JSON.stringify(errorDetails);\n  }\n  if (typeof errorDetails === \"object\") {\n    for (const key of [\"message\", \"detail\", \"error\", \"reason\"]) {\n      const value = (errorDetails as Record<string, unknown>)[key];\n      if (typeof value === \"string\" && value.trim()) {\n        return value.trim();\n      }\n    }\n    return JSON.stringify(errorDetails);\n  }\n  return String(errorDetails);\n}\n\n/** Raised when the remote API returns an error. */\nexport class RemoteAPIError extends SandboxError {\n  readonly statusCode: number;\n  /** Original response body, retained for compatibility and diagnostics. */\n  readonly responseMessage: string;\n  readonly sandboxId?: string;\n  /** Server reason, including unknown future reasons. */\n  readonly reason?: string;\n  readonly errorDetails?: unknown;\n\n  constructor(statusCode: number, message: string) {\n    let failure: Record<string, unknown> | undefined;\n    try {\n      const payload: unknown = JSON.parse(message);\n      if (payload && typeof payload === \"object\" && !Array.isArray(payload)) {\n        const record = payload as Record<string, unknown>;\n        if (\n          typeof record.sandbox_id === \"string\" &&\n          record.sandbox_id.trim() &&\n          (record.status === \"failed\" || record.status === \"terminated\")\n        )\n          failure = record;\n      }\n    } catch {\n      // Non-JSON errors keep their existing message.\n    }\n    const sandboxId = failure?.sandbox_id as string | undefined;\n    const rawReason = failure?.reason ?? failure?.termination_reason;\n    const reason = typeof rawReason === \"string\" ? rawReason : undefined;\n    const errorDetails = failure?.error_details;\n    let displayMessage = message;\n    if (failure) {\n      displayMessage = `Sandbox ${sandboxId} ${failure.status}`;\n      if (reason) displayMessage += ` (${reason})`;\n      const detail = formatErrorDetails(errorDetails);\n      if (detail) displayMessage += `: ${detail}`;\n      if (!reason && !detail) displayMessage = message;\n    }\n    super(`API error (status ${statusCode}): ${displayMessage}`);\n    this.sandboxId = sandboxId;\n    this.reason = reason;\n    this.errorDetails = errorDetails;\n    this.name = \"RemoteAPIError\";\n    this.statusCode = statusCode;\n    this.responseMessage = message;\n  }\n}\n\n/** Raised when request output is fetched before the request has completed. */\nexport class RequestNotFinishedError extends Error {\n  constructor() {\n    super(\"Request has not finished yet\");\n    this.name = \"RequestNotFinishedError\";\n  }\n}\n\n/** Raised when a request completed unsuccessfully. */\nexport class RequestFailedError extends Error {\n  readonly failure: string;\n\n  constructor(failure: string) {\n    super(`Request failed: ${failure}`);\n    this.name = \"RequestFailedError\";\n    this.failure = failure;\n  }\n}\n\n/** Raised when a request surfaced an application-level error. */\nexport class RequestExecutionError extends Error {\n  readonly functionName?: string;\n\n  constructor(message: string, functionName?: string) {\n    super(\n      functionName ? `Request error in ${functionName}: ${message}` : message,\n    );\n    this.name = \"RequestExecutionError\";\n    this.functionName = functionName;\n  }\n}\n","/** Internal protocol. Native objects never cross an isolate boundary. */\nexport type NativeClientKind =\n  | \"NativeCloudClient\"\n  | \"NativeSandboxClient\"\n  | \"NativeSandboxProxyClient\"\n  | \"NativeRepositoryClient\";\n\nexport interface NativeHandle {\n  id: number;\n  kind: NativeClientKind;\n  args: unknown[];\n  parent?: NativeHandle;\n}\n\nexport type WorkerRequest =\n  | { type: \"create\"; handle: Omit<NativeHandle, \"parent\">; parentId?: number }\n  | {\n      type: \"call\";\n      id: number;\n      handleId?: number;\n      method: string;\n      args: unknown[];\n      stream: boolean;\n    }\n  | { type: \"release\"; handleId: number }\n  | { type: \"ack\" | \"cancel\"; id: number };\n\nexport type WorkerResponse =\n  | { type: \"result\"; id: number; value: unknown }\n  | {\n      type: \"error\";\n      id: number;\n      error: { name: string; message: string; stack?: string };\n    }\n  | { type: \"event\"; id: number; value: string };\n\nexport const cancelNativeCall = Symbol.for(\"tensorlake.native.cancel.v1\");\nexport const closeNativeHandle = Symbol.for(\"tensorlake.native.close.v1\");\nexport type NativeCall<T> = Promise<T> & { [cancelNativeCall]?: () => void };\n","import * as defaults from \"./defaults.js\";\n\n/** Remove a trailing slash from a URL string if present. */\nfunction trimTrailingSlashes(url: string): string {\n  return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/** Check whether a URL points to localhost. */\nexport function isLocalhost(apiUrl: string): boolean {\n  try {\n    const parsed = new URL(apiUrl);\n    return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n  } catch {\n    return false;\n  }\n}\n\n/** Return the explicit sandbox proxy env override, if the user set one. */\nexport function explicitProxyUrlOverride(): string | undefined {\n  const explicit = process.env.TENSORLAKE_SANDBOX_PROXY_URL?.trim();\n  return explicit && explicit.length > 0 ? explicit : undefined;\n}\n\n/**\n * Resolve the legacy default proxy URL for direct sandbox handles.\n *\n * Normal client connect/create flows use the server-returned `sandboxUrl`.\n * This helper keeps the old direct-handle behavior and treats the env var as\n * an explicit override.\n *\n * Legacy priority:\n * 1. TENSORLAKE_SANDBOX_PROXY_URL env var\n * 2. `http://localhost:9443` for localhost API URLs\n * 3. Transform `api.X` → `sandbox.X`\n * 4. Default fallback\n */\nexport function resolveProxyUrl(apiUrl: string): string {\n  const explicit = explicitProxyUrlOverride();\n  if (explicit) return explicit;\n\n  if (isLocalhost(apiUrl)) return \"http://localhost:9443\";\n\n  try {\n    const parsed = new URL(apiUrl);\n    const host = parsed.hostname;\n    if (host.startsWith(\"api.\")) {\n      const proxyHost = \"sandbox.\" + host.slice(4);\n      return `${parsed.protocol}//${proxyHost}`;\n    }\n  } catch {\n    // fall through to default\n  }\n\n  return defaults.SANDBOX_PROXY_URL;\n}\n\n/**\n * Resolve the proxy target for a specific sandbox.\n *\n * - Localhost: base URL stays the same, Host header set to `{sandboxId}.local`\n * - Cloud: selected proxy domain with `X-Tensorlake-Sandbox-Id` header\n *\n * Returns `{ baseUrl, hostHeader, sandboxIdHeader }`.\n */\nexport function resolveProxyTarget(\n  proxyUrl: string,\n  sandboxId: string,\n): { baseUrl: string; hostHeader: string | undefined; sandboxIdHeader: string | undefined } {\n  try {\n    const parsed = new URL(proxyUrl);\n    const host = parsed.hostname;\n\n    if (host === \"localhost\" || host === \"127.0.0.1\") {\n      return {\n        baseUrl: trimTrailingSlashes(proxyUrl),\n        hostHeader: `${sandboxId}.local`,\n        sandboxIdHeader: undefined,\n      };\n    }\n\n    const port = parsed.port ? `:${parsed.port}` : \"\";\n    return {\n      baseUrl: `${parsed.protocol}//${host}${port}`,\n      hostHeader: undefined,\n      sandboxIdHeader: sandboxId,\n    };\n  } catch {\n    return {\n      baseUrl: `${trimTrailingSlashes(proxyUrl)}/${sandboxId}`,\n      hostHeader: undefined,\n      sandboxIdHeader: undefined,\n    };\n  }\n}\n\n/**\n * Build a public sandbox URL from a server-provided ingress endpoint.\n *\n * `port` omitted or `9501` returns the management URL:\n * `https://<sandbox-id>.<ingress-host>`. User ports use the public\n * `<port>-<sandbox-id>.<ingress-host>` form.\n */\nexport function sandboxUrlFromIngressEndpoint(\n  ingressEndpoint: string,\n  sandboxId: string,\n  port = 9501,\n): string {\n  const parsed = new URL(ingressEndpoint);\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw new Error(\"ingressEndpoint must be an absolute http(s) URL\");\n  }\n  const label = port === 9501 ? sandboxId : `${port}-${sandboxId}`;\n  return `${parsed.protocol}//${label}.${parsed.host}`;\n}\n\n/**\n * Derive the sandbox lifecycle URL from the API URL.\n *\n * Transforms `api.X` → `sandbox.X` for cloud. Returns the URL unchanged for\n * localhost or unrecognised patterns.\n */\nexport function resolveSandboxLifecycleUrl(apiUrl: string): string {\n  if (isLocalhost(apiUrl)) return apiUrl;\n\n  try {\n    const parsed = new URL(apiUrl);\n    if (parsed.hostname.startsWith(\"api.\")) {\n      parsed.hostname = \"sandbox.\" + parsed.hostname.slice(4);\n      return parsed.toString().replace(/\\/$/, \"\");\n    }\n  } catch {\n    // fall through\n  }\n\n  return apiUrl;\n}\n\n/**\n * Build a lifecycle API path.\n *\n * - Localhost (namespaced): `/v1/namespaces/{namespace}/{path}`\n * - Cloud (flat): `/{path}`\n */\nexport function lifecyclePath(\n  path: string,\n  isLocal: boolean,\n  namespace: string,\n): string {\n  if (isLocal) {\n    return `/v1/namespaces/${namespace}/${path}`;\n  }\n  return `/${path}`;\n}\n","import { createRequire } from \"node:module\";\nimport { Worker } from \"node:worker_threads\";\nimport type { NativeEmit, NativeSandboxBinding } from \"./native-sandbox.js\";\nimport {\n  cancelNativeCall,\n  closeNativeHandle,\n  type NativeCall,\n  type NativeHandle,\n  type WorkerRequest,\n  type WorkerResponse,\n} from \"./native-worker-protocol.js\";\nimport { resolveProxyTarget } from \"./url.js\";\n\ninterface PendingCall {\n  resolve: (value: any) => void;\n  reject: (error: Error) => void;\n  emit?: NativeEmit;\n  // Keep descriptors (and their parents) alive until the operation settles.\n  handle?: NativeHandle;\n}\n\n/** One persistent worker per SDK installation and calling isolate. */\nexport class NativeWorkerClient {\n  private worker?: Worker;\n  private nextId = 1;\n  private registered = new Set<number>();\n  private pending = new Map<number, PendingCall>();\n  private finalizers = new FinalizationRegistry<number>((id) =>\n    this.release(id),\n  );\n\n  constructor(\n    private readonly workerPath: () => string | URL = () =>\n      createRequire(import.meta.url).resolve(\n        \"tensorlake/internal/native-worker\",\n      ),\n  ) {}\n\n  handle(\n    kind: NativeHandle[\"kind\"],\n    args: unknown[],\n    parent?: NativeHandle,\n  ): object {\n    const handle: NativeHandle = { id: this.nextId++, kind, args, parent };\n    this.finalizers.register(handle, handle.id);\n    let closed = false;\n    return new Proxy(\n      {},\n      {\n        get: (_target, method) => {\n          if (method === \"then\") return undefined;\n          if (method === closeNativeHandle)\n            return () => {\n              closed = true;\n              this.release(handle.id);\n            };\n          if (method === \"connectProxy\")\n            return (...proxyArgs: unknown[]) => {\n              if (closed) throw new Error(\"Tensorlake native client is closed\");\n              return this.handle(\"NativeSandboxProxyClient\", proxyArgs, handle);\n            };\n          if (method === \"baseUrl\")\n            return () =>\n              resolveProxyTarget(String(args[0]), String(args[1])).baseUrl;\n          if (typeof method !== \"string\") return undefined;\n          return (...callArgs: unknown[]) => {\n            if (closed)\n              return Promise.reject(\n                new Error(\"Tensorlake native client is closed\"),\n              );\n            const emit =\n              typeof callArgs.at(-1) === \"function\"\n                ? (callArgs.pop() as NativeEmit)\n                : undefined;\n            return this.call(handle, method, callArgs, emit);\n          };\n        },\n      },\n    );\n  }\n\n  call(\n    handle: NativeHandle | undefined,\n    method: string,\n    args: unknown[],\n    emit?: NativeEmit,\n  ): NativeCall<any> {\n    const id = this.nextId++;\n    let worker: Worker | undefined;\n    const promise: NativeCall<any> = new Promise((resolve, reject) => {\n      try {\n        worker = this.getWorker();\n        this.pending.set(id, { resolve, reject, emit, handle });\n        worker.ref();\n        if (handle) this.register(handle, worker);\n        this.send(worker, {\n          type: \"call\",\n          id,\n          handleId: handle?.id,\n          method,\n          args,\n          stream: !!emit,\n        });\n      } catch (error) {\n        this.pending.delete(id);\n        this.unrefIfIdle();\n        reject(error);\n      }\n    });\n    promise[cancelNativeCall] = () => {\n      const pending = this.pending.get(id);\n      if (pending && worker) {\n        pending.emit = undefined;\n        this.send(worker, { type: \"cancel\", id });\n      }\n    };\n    return promise;\n  }\n\n  private getWorker(): Worker {\n    if (this.worker) return this.worker;\n    const worker = new Worker(this.workerPath(), {\n      // The bundled worker needs no application loaders or telemetry preloads.\n      // NODE_OPTIONS is parsed independently of execArgv by Node.\n      execArgv: [],\n      env: { ...process.env, NODE_OPTIONS: \"\" },\n      name: \"tensorlake-native\",\n    });\n    this.worker = worker;\n    worker.on(\"message\", (message: WorkerResponse) => {\n      const pending = this.pending.get(message.id);\n      if (!pending || this.worker !== worker) return;\n      if (message.type === \"event\") {\n        // Acknowledge only when the consumer asks for the next event. At most\n        // one event per stream is outstanding across Rust, worker and caller.\n        Promise.resolve()\n          .then(() => pending.emit?.(message.value))\n          .then(\n            () => {\n              if (this.worker === worker)\n                this.send(worker, { type: \"ack\", id: message.id });\n            },\n            (error: Error) => {\n              this.send(worker, { type: \"cancel\", id: message.id });\n              pending.reject(error);\n            },\n          );\n        return;\n      }\n      this.pending.delete(message.id);\n      if (message.type === \"error\") {\n        const error = new Error(message.error.message);\n        error.name = message.error.name;\n        error.stack = message.error.stack ?? error.stack;\n        pending.reject(error);\n      } else {\n        pending.resolve(message.value);\n      }\n      this.unrefIfIdle();\n    });\n    const fail = (error: Error) => {\n      if (this.worker !== worker) return;\n      this.worker = undefined;\n      this.registered.clear();\n      for (const pending of this.pending.values()) pending.reject(error);\n      this.pending.clear();\n      // Never replay an in-flight request: it may already have taken effect.\n      // A subsequent explicit call starts a fresh worker from descriptors.\n      void worker.terminate();\n    };\n    worker.on(\"error\", fail);\n    worker.on(\"messageerror\", fail);\n    worker.on(\"exit\", (code) =>\n      fail(\n        new Error(\n          `Tensorlake native worker exited (${code}); in-flight operations were not retried`,\n        ),\n      ),\n    );\n    worker.unref();\n    return worker;\n  }\n\n  private register(handle: NativeHandle, worker: Worker): void {\n    if (this.registered.has(handle.id)) return;\n    if (handle.parent) this.register(handle.parent, worker);\n    this.send(worker, {\n      type: \"create\",\n      handle: { id: handle.id, kind: handle.kind, args: handle.args },\n      parentId: handle.parent?.id,\n    });\n    this.registered.add(handle.id);\n  }\n\n  private release(handleId: number): void {\n    if (this.worker && this.registered.delete(handleId))\n      this.send(this.worker, { type: \"release\", handleId });\n  }\n\n  private send(worker: Worker, message: WorkerRequest): void {\n    worker.postMessage(message);\n  }\n  private unrefIfIdle(): void {\n    if (this.pending.size === 0) this.worker?.unref();\n  }\n}\n\nexport function createWorkerBinding(\n  runtime: NativeWorkerClient,\n): NativeSandboxBinding {\n  return {\n    NativeCloudClient: class {\n      constructor(...args: unknown[]) {\n        return runtime.handle(\"NativeCloudClient\", args);\n      }\n    },\n    NativeSandboxClient: class {\n      constructor(...args: unknown[]) {\n        return runtime.handle(\"NativeSandboxClient\", args);\n      }\n    },\n    NativeSandboxProxyClient: class {\n      constructor(...args: unknown[]) {\n        return runtime.handle(\"NativeSandboxProxyClient\", args);\n      }\n    },\n    NativeRepositoryClient: class {\n      constructor(...args: unknown[]) {\n        return runtime.handle(\"NativeRepositoryClient\", args);\n      }\n    },\n    validateManagedName: (name: string) =>\n      runtime.call(undefined, \"validateManagedName\", [name]),\n  } as unknown as NativeSandboxBinding;\n}\n\n// ESM and CJS can coexist in one application. Share the worker across bundles\n// of this SDK version, while keeping incompatible installed versions separate.\ndeclare const __SDK_VERSION__: string;\nconst runtimeKey = Symbol.for(\n  `tensorlake.native.worker.${typeof __SDK_VERSION__ === \"undefined\" ? \"source\" : __SDK_VERSION__}.v1`,\n);\nconst runtimes = globalThis as typeof globalThis & {\n  [runtimeKey]?: NativeWorkerClient;\n};\nexport function workerBinding(): NativeSandboxBinding {\n  return createWorkerBinding(\n    (runtimes[runtimeKey] ??= new NativeWorkerClient()),\n  );\n}\n\n/** Runtime capsules supply the worker alongside their bundled application SDK. */\nexport function configureNativeWorker(workerPath: () => string | URL): void {\n  runtimes[runtimeKey] ??= new NativeWorkerClient(workerPath);\n}\n\nexport function releaseNativeHandle(handle: object | null): void {\n  (handle as { [closeNativeHandle]?: () => void } | null)?.[\n    closeNativeHandle\n  ]?.();\n}\n","import {\n  PoolInUseError,\n  PoolNotFoundError,\n  RemoteAPIError,\n  SandboxConnectionError,\n  SandboxError,\n  SandboxNotFoundError,\n} from \"./errors.js\";\nimport { workerBinding } from \"./native-worker-client.js\";\nimport type { NativeCloudClient } from \"./native-cloud.js\";\nimport { cancelNativeCall, type NativeCall } from \"./native-worker-protocol.js\";\n\n/**\n * Bridge to the Rust core's sandbox lifecycle + proxy clients (`napi-rs`).\n *\n * The proxy data path (process/file/stream ops) is served by the Rust core so\n * it shares `reqwest`'s connection pool — replacing the previous undici path,\n * which multiplexed every parallel request onto a single, untuned HTTP/2\n * connection. The native binding is required: there is no JS fallback.\n *\n * Convention (mirrors the Python binding): structured payloads cross as JSON\n * strings, bytes as `Buffer`, and every call surfaces the W3C `traceId`.\n * Errors arrive as a JSON `{category, status, message}` string in the native\n * error message; {@link translateNativeError} rethrows them as the SDK's typed\n * errors.\n */\n\n// ---- Native value shapes --------------------------------------------------\n\nexport interface TracedJson {\n  traceId: string;\n  json: string;\n}\n\nexport interface TracedBytes {\n  traceId: string;\n  data: Uint8Array;\n  contentId?: string;\n  fullSize?: number;\n}\n\nexport interface TracedEvents {\n  traceId: string;\n  events: string[];\n}\n\n/** Per-event callback used by the streaming proxy methods. */\nexport type NativeEmit = (eventJson: string) => void | Promise<void>;\n\nexport interface NativeSandboxProxyClient {\n  baseUrl(): string;\n\n  startProcess(payloadJson: string): Promise<TracedJson>;\n  listProcesses(): Promise<TracedJson>;\n  // `process` is the pid-or-name path segment (the TS layer stringifies the number|string arg).\n  getProcess(process: string): Promise<TracedJson>;\n  killProcess(process: string): Promise<string>;\n  restartProcess(process: string): Promise<TracedJson>;\n  sendSignal(process: string, signal: number): Promise<TracedJson>;\n  writeStdin(process: string, data: Buffer): Promise<string>;\n  closeStdin(process: string): Promise<string>;\n  getStdout(process: string): Promise<TracedJson>;\n  getStderr(process: string): Promise<TracedJson>;\n  getOutput(process: string): Promise<TracedJson>;\n\n  followStdout(process: string, emit: NativeEmit): Promise<string>;\n  followStderr(process: string, emit: NativeEmit): Promise<string>;\n  followOutput(process: string, emit: NativeEmit): Promise<string>;\n  runProcess(payloadJson: string): Promise<TracedEvents>;\n  runProcessStreaming(payloadJson: string, emit: NativeEmit): Promise<string>;\n\n  readFile(path: string): Promise<TracedBytes>;\n  writeFile(path: string, content: Buffer): Promise<string>;\n  uploadFile(path: string, localPath: string): Promise<string>;\n  deleteFile(path: string): Promise<string>;\n  listDirectory(path: string): Promise<TracedJson>;\n\n  createPtySession(payloadJson: string): Promise<TracedJson>;\n  deletePtySession(sessionId: string): Promise<string>;\n  health(): Promise<TracedJson>;\n  info(): Promise<TracedJson>;\n}\n\nexport interface NativeSandboxClient {\n  createSandbox(requestJson: string): Promise<TracedJson>;\n  claimSandbox(poolId: string, requestJson?: string): Promise<TracedJson>;\n  copySandbox(sandboxId: string, times: number): Promise<TracedJson>;\n  getSandbox(sandboxId: string): Promise<TracedJson>;\n  listSandboxes(): Promise<TracedJson>;\n  listArchivedSandboxes(\n    limit?: number | null,\n    cursor?: string | null,\n    direction?: string | null,\n  ): Promise<TracedJson>;\n  getArchivedSandbox(sandboxId: string): Promise<TracedJson>;\n  getSandboxLogs(requestJson: string): Promise<TracedJson>;\n  listSandboxLogProcesses(sandboxId: string): Promise<TracedJson>;\n  updateSandbox(sandboxId: string, requestJson: string): Promise<TracedJson>;\n  deleteSandbox(sandboxId: string): Promise<string>;\n  suspendSandbox(sandboxId: string): Promise<string>;\n  resumeSandbox(sandboxId: string): Promise<string>;\n  attachFileSystem(\n    sandboxId: string,\n    fileSystemId: string,\n    mountPath: string,\n    readOnly?: boolean | null,\n    prefetch?: boolean | null,\n    snapshotId?: string | null,\n    owner?: string | null,\n  ): Promise<TracedJson>;\n  detachFileSystem(\n    sandboxId: string,\n    mountPath: string,\n  ): Promise<TracedJson>;\n  createSnapshot(\n    sandboxId: string,\n    snapshotType?: string | null,\n  ): Promise<TracedJson>;\n  getSnapshot(snapshotId: string): Promise<TracedJson>;\n  listSnapshots(): Promise<TracedJson>;\n  deleteSnapshot(snapshotId: string): Promise<string>;\n  createPool(requestJson: string): Promise<TracedJson>;\n  getPool(poolId: string): Promise<TracedJson>;\n  listPools(): Promise<TracedJson>;\n  updatePool(poolId: string, requestJson: string): Promise<TracedJson>;\n  deletePool(poolId: string): Promise<string>;\n\n  connectProxy(\n    proxyUrl: string,\n    sandboxId: string,\n    routingHint?: string | null,\n    requestTimeoutSec?: number | null,\n  ): NativeSandboxProxyClient;\n  selectSandboxProxyUrl(\n    sandboxId: string,\n    sandboxUrl?: string | null,\n    ingressEndpoint?: string | null,\n    explicitProxyUrl?: string | null,\n  ): string | Promise<string>;\n}\n\nexport interface NativeRepositoryClient {\n  gitRepoUrl(repo: string): Promise<string>;\n  createRepo(repo: string, defaultBranch?: string | null): Promise<TracedJson>;\n  listRepos(): Promise<TracedJson>;\n  deleteRepo(repo: string): Promise<string>;\n  forkRepo(repo: string, baseRepo: string): Promise<TracedJson>;\n  archiveRepo(repo: string): Promise<string>;\n  restoreRepo(repo: string): Promise<string>;\n  repoInfo(repo: string): Promise<TracedJson>;\n  listBranches(repo: string): Promise<TracedJson>;\n  listRefs(repo: string): Promise<TracedJson>;\n  deleteBranch(repo: string, branch: string): Promise<string>;\n  listOperations(repo: string): Promise<TracedJson>;\n  gitCredential(repo?: string | null): Promise<string>;\n  commitStatus(repo: string, jobId: string): Promise<TracedJson>;\n  pushWorktree(\n    repo: string,\n    root: string,\n    branch: string,\n    message: string,\n    expectOid?: string | null,\n  ): Promise<TracedJson>;\n  mergeRepo(\n    repo: string,\n    ours: string,\n    theirs: string,\n    preflight: boolean,\n    deep: boolean,\n    materialize: boolean,\n    message?: string | null,\n    base?: string | null,\n  ): Promise<TracedJson>;\n  commitConflicts(repo: string, commit: string): Promise<TracedJson>;\n  createFilesystem(name: string): Promise<string>;\n  forkFilesystem(\n    name: string,\n    base: string,\n    snapshot?: string | null,\n  ): Promise<TracedJson>;\n  listFilesystems(): Promise<TracedJson>;\n  filesystemMeta(name: string): Promise<TracedJson>;\n  deleteFilesystem(name: string): Promise<string>;\n  filesystemRefStatus(name: string, refspec: string): Promise<TracedJson>;\n  retainFilesystemSnapshot(\n    name: string,\n    message: string,\n    requestId: string,\n  ): Promise<TracedJson>;\n  listFilesystemSnapshots(name: string): Promise<TracedJson>;\n  deleteFilesystemSnapshot(name: string, snapshot: string): Promise<string>;\n  readFilesystemFile(\n    name: string,\n    path: string,\n    version: string,\n    offset?: number,\n    length?: number,\n  ): Promise<TracedBytes>;\n  listFilesystemTree(\n    name: string,\n    dirPath: string,\n    version: string,\n  ): Promise<TracedJson>;\n  pushFilesystemFiles(\n    name: string,\n    files: Array<{ path: string; content: Buffer }>,\n    deletes: string[],\n    moves: Array<{ from: string; to: string }>,\n    copies: Array<{ from: string; to: string }>,\n    message: string,\n    branch: string,\n    idempotencyKey?: string | null,\n  ): Promise<TracedJson>;\n  pushFilesystemPaths(\n    name: string,\n    files: Array<{ path: string; localPath: string }>,\n    message: string,\n    branch: string,\n    idempotencyKey?: string | null,\n  ): Promise<TracedJson>;\n}\n\ninterface NativeSandboxClientCtor {\n  new (\n    apiUrl: string,\n    apiKey?: string | null,\n    organizationId?: string | null,\n    projectId?: string | null,\n    namespace?: string | null,\n    userAgent?: string | null,\n    requestTimeoutSec?: number | null,\n  ): NativeSandboxClient;\n}\n\ninterface NativeRepositoryClientCtor {\n  new (\n    apiUrl: string,\n    apiKey?: string | null,\n    organizationId?: string | null,\n    projectId?: string | null,\n    userAgent?: string | null,\n    requestTimeoutSec?: number | null,\n  ): NativeRepositoryClient;\n}\n\ninterface NativeSandboxProxyClientCtor {\n  new (\n    proxyUrl: string,\n    sandboxId: string,\n    apiKey?: string | null,\n    organizationId?: string | null,\n    projectId?: string | null,\n    routingHint?: string | null,\n    userAgent?: string | null,\n    requestTimeoutSec?: number | null,\n  ): NativeSandboxProxyClient;\n}\n\nexport interface NativeSandboxBinding {\n  NativeCloudClient?: new (optionsJson: string) => NativeCloudClient;\n  NativeSandboxClient: NativeSandboxClientCtor;\n  NativeSandboxProxyClient: NativeSandboxProxyClientCtor;\n  NativeRepositoryClient?: NativeRepositoryClientCtor;\n  /** Validate a managed-process name; throws on failure. Single source-of-truth rule in Rust. */\n  validateManagedName: (name: string) => void | Promise<void>;\n}\n\n// ---- Binding loader -------------------------------------------------------\n\nlet cachedBinding: NativeSandboxBinding | undefined;\nexport function loadNativeSandboxBinding(): NativeSandboxBinding {\n  return cachedBinding ??= workerBinding();\n}\n\n/** Test seam: replace (or clear) the native binding. */\nexport function __setNativeSandboxBindingForTest(\n  binding: NativeSandboxBinding | undefined,\n): void {\n  cachedBinding = binding;\n}\n\n// ---- Error translation ----------------------------------------------------\n\ninterface NativeErrorPayload {\n  category: string;\n  status: number | null;\n  message: string;\n}\n\n/** Context used to reconstruct entity-specific typed errors from a 404/409. */\nexport interface NativeErrorContext {\n  sandboxId?: string;\n  poolId?: string;\n  /**\n   * When set, a 404 maps to the typed not-found error for that entity\n   * (`SandboxNotFoundError` / `PoolNotFoundError`). Lifecycle ops set it;\n   * proxy/data-plane ops omit it so a 404 (e.g. missing file or process)\n   * stays a generic `RemoteAPIError`, matching the pre-shim behavior.\n   */\n  notFoundKind?: \"sandbox\" | \"pool\";\n}\n\nfunction parseNativeError(error: unknown): NativeErrorPayload | null {\n  const message =\n    error instanceof Error\n      ? error.message\n      : typeof error === \"string\"\n        ? error\n        : \"\";\n  if (!message) return null;\n  try {\n    const parsed = JSON.parse(message) as Partial<NativeErrorPayload>;\n    if (parsed && typeof parsed.category === \"string\") {\n      return {\n        category: parsed.category,\n        status: typeof parsed.status === \"number\" ? parsed.status : null,\n        message: typeof parsed.message === \"string\" ? parsed.message : message,\n      };\n    }\n  } catch {\n    // Not a structured native error — fall through.\n  }\n  return null;\n}\n\n/**\n * Map a native error to the SDK's typed error hierarchy, matching the status\n * codes the undici path produced (404 → SandboxNotFoundError/PoolNotFoundError,\n * 409 → PoolInUseError, connection failures → SandboxConnectionError).\n */\nexport function translateNativeError(\n  error: unknown,\n  context?: NativeErrorContext,\n): Error {\n  const payload = parseNativeError(error);\n  if (!payload) {\n    if (error instanceof Error) return error;\n    return new SandboxError(String(error));\n  }\n\n  const { category, status, message } = payload;\n\n  if (category === \"connection\") {\n    return new SandboxConnectionError(message, { cause: error });\n  }\n\n  if (status === 404) {\n    if (context?.notFoundKind === \"pool\" && context.poolId) {\n      return new PoolNotFoundError(context.poolId);\n    }\n    if (context?.notFoundKind === \"sandbox\" && context.sandboxId) {\n      return new SandboxNotFoundError(context.sandboxId);\n    }\n    return new RemoteAPIError(404, message);\n  }\n\n  if (status === 409 && context?.poolId) {\n    return new PoolInUseError(context.poolId, message);\n  }\n\n  if (typeof status === \"number\") {\n    return new RemoteAPIError(status, message);\n  }\n\n  return new SandboxError(message);\n}\n\n/** Run a native call, translating any error to the SDK's typed hierarchy. */\nexport async function callNative<T>(\n  fn: () => Promise<T>,\n  context?: NativeErrorContext,\n): Promise<T> {\n  try {\n    return await fn();\n  } catch (error) {\n    throw translateNativeError(error, context);\n  }\n}\n\n// ---- Streaming bridge -----------------------------------------------------\n\n/**\n * Adapt the native per-event callback API into an async generator, preserving\n * the live-streaming semantics of `followStdout`/`followStderr`/`followOutput`.\n * The native `start` call resolves once the upstream stream closes. Each emit\n * resolves only after consumption, propagating backpressure through the worker\n * to Rust. Cancellation drops the upstream response, including quiet streams.\n */\nexport async function* nativeEventStream(\n  start: (emit: NativeEmit) => Promise<string>,\n  context?: NativeErrorContext,\n  signal?: AbortSignal,\n): AsyncGenerator<Record<string, unknown>> {\n  if (signal?.aborted) return;\n  const queue: Array<{ value: string; consumed: () => void }> = [];\n  let wake: (() => void) | undefined;\n  let finished = false;\n  let stopped = false;\n  let failure: unknown;\n  const notify = () => { const resolve = wake; wake = undefined; resolve?.(); };\n  const emit: NativeEmit = (value) => {\n    if (stopped) return Promise.resolve();\n    return new Promise<void>((consumed) => { queue.push({ value, consumed }); notify(); });\n  };\n  let call: NativeCall<string> | undefined;\n  const onAbort = () => { stopped = true; call?.[cancelNativeCall]?.(); notify(); };\n  signal?.addEventListener(\"abort\", onAbort, { once: true });\n  try {\n    call = start(emit);\n    void call.catch((error: unknown) => { failure = error; }).finally(() => { finished = true; notify(); });\n    while (!stopped) {\n      const event = queue.shift();\n      if (event) {\n        try { yield JSON.parse(event.value) as Record<string, unknown>; }\n        finally { event.consumed(); }\n      } else if (finished) {\n        break;\n      } else {\n        await new Promise<void>((resolve) => { wake = resolve; });\n      }\n    }\n    if (!stopped && failure !== undefined) throw translateNativeError(failure, context);\n  } finally {\n    stopped = true;\n    signal?.removeEventListener(\"abort\", onAbort);\n    call?.[cancelNativeCall]?.();\n    for (const event of queue) event.consumed();\n  }\n}\n\n/**\n * Reduce the buffered `runProcess` events into a `CommandResult`, matching the\n * SSE-parsing logic the undici `run()` path used.\n */\nexport function assembleCommandResult(events: string[]): {\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n} {\n  const stdoutLines: string[] = [];\n  const stderrLines: string[] = [];\n  let exitCode = -1;\n\n  for (const eventJson of events) {\n    const raw = JSON.parse(eventJson) as Record<string, unknown>;\n    if (typeof raw.line === \"string\") {\n      if (raw.stream === \"stderr\") {\n        stderrLines.push(raw.line);\n      } else {\n        stdoutLines.push(raw.line);\n      }\n    } else if (\"exit_code\" in raw || \"signal\" in raw) {\n      if (typeof raw.exit_code === \"number\") {\n        exitCode = raw.exit_code;\n      } else if (typeof raw.signal === \"number\") {\n        exitCode = -raw.signal;\n      }\n    }\n  }\n\n  return { exitCode, stdout: stdoutLines.join(\"\\n\"), stderr: stderrLines.join(\"\\n\") };\n}\n","import { callNative, loadNativeSandboxBinding, nativeEventStream, type NativeEmit } from \"./native-sandbox.js\";\nimport { releaseNativeHandle } from \"./native-worker-client.js\";\nimport type { Traced } from \"./traced.js\";\n\nexport interface NativeCloudPart {\n  name: string;\n  data: Buffer;\n  filename?: string;\n  contentType?: string;\n}\n\nexport interface NativeCloudRequest {\n  method: string;\n  path: string;\n  headersJson: string;\n  body?: Buffer;\n  parts?: NativeCloudPart[];\n  statusOnlyCodes: number[];\n}\n\nexport interface NativeCloudResponse {\n  status: number;\n  headersJson: string;\n  data: Uint8Array;\n  traceId: string;\n}\n\nexport interface NativeCloudClient {\n  request(request: NativeCloudRequest): Promise<NativeCloudResponse>;\n  stream(request: NativeCloudRequest, emit: NativeEmit): Promise<string>;\n}\n\ninterface CloudTransportOptions {\n  baseUrl: string;\n  apiKey?: string;\n  organizationId?: string;\n  projectId?: string;\n  userAgent: string;\n  maxRetries: number;\n  retryBackoffMs: number;\n  timeoutMs: number;\n}\n\ninterface RequestOptions {\n  body?: string | Blob | ArrayBuffer | Uint8Array | FormData;\n  json?: unknown;\n  headers?: Record<string, string>;\n  /** Return these statuses without consuming their unused diagnostic bodies. */\n  statusOnlyCodes?: Set<number>;\n}\n\n/** Only marshals values across the worker boundary; Rust owns all HTTP I/O. */\nexport class NativeCloudTransport {\n  private native?: NativeCloudClient;\n  private closed = false;\n\n  constructor(private readonly options: CloudTransportOptions) {\n    if (!Number.isSafeInteger(options.maxRetries) || options.maxRetries < 0 || options.maxRetries > 0xffff_ffff) {\n      throw new RangeError(\"maxRetries must be a non-negative 32-bit integer\");\n    }\n    if (!Number.isFinite(options.retryBackoffMs) || options.retryBackoffMs < 0) {\n      throw new RangeError(\"retryBackoffMs must be a non-negative finite number\");\n    }\n  }\n\n  private client(): NativeCloudClient {\n    if (this.closed) throw new Error(\"Tensorlake native client is closed\");\n    if (this.native) return this.native;\n    const ctor = loadNativeSandboxBinding().NativeCloudClient;\n    if (!ctor) throw new Error(\"Native binding does not export NativeCloudClient; rebuild with 'npm run build:native'\");\n    return this.native = new ctor(JSON.stringify(this.options));\n  }\n\n  close(): void {\n    this.closed = true;\n    releaseNativeHandle(this.native ?? null);\n    this.native = undefined;\n  }\n\n  async requestResponse(method: string, path: string, options?: RequestOptions): Promise<Traced<Response>> {\n    const request = await serializeRequest(method, path, options);\n    const raw = await callNative(() => this.client().request(request));\n    const response = new Response(\n      [204, 205, 304].includes(raw.status) ? null : Uint8Array.from(raw.data).buffer,\n      { status: raw.status, headers: JSON.parse(raw.headersJson) as Record<string, string> },\n    );\n    return Object.assign(response, { traceId: raw.traceId });\n  }\n\n  async requestJson<T>(method: string, path: string): Promise<Traced<T>> {\n    const response = await this.requestResponse(method, path);\n    const text = await response.text();\n    const value = text ? JSON.parse(text) : null;\n    return Object.assign(value ?? {}, { traceId: response.traceId }) as Traced<T>;\n  }\n\n  async *stream(method: string, path: string, signal?: AbortSignal): AsyncGenerator<Record<string, unknown>> {\n    if (signal?.aborted) return;\n    const request = await serializeRequest(method, path, { headers: { Accept: \"text/event-stream\" } });\n    yield* nativeEventStream((emit) => this.client().stream(request, emit), undefined, signal);\n  }\n}\n\nasync function serializeRequest(method: string, path: string, options?: RequestOptions): Promise<NativeCloudRequest> {\n  const headers = { ...options?.headers };\n  let body = options?.body;\n  if (options?.json !== undefined) {\n    body = JSON.stringify(options.json);\n    if (!Object.keys(headers).some((key) => key.toLowerCase() === \"content-type\")) {\n      headers[\"Content-Type\"] = \"application/json\";\n    }\n  }\n  const request: NativeCloudRequest = {\n    method,\n    path,\n    headersJson: JSON.stringify(headers),\n    statusOnlyCodes: [...(options?.statusOnlyCodes ?? [])],\n  };\n  if (body instanceof FormData) {\n    request.parts = [];\n    for (const [name, value] of body.entries()) {\n      request.parts.push(typeof value === \"string\"\n        ? { name, data: Buffer.from(value) }\n        : { name, data: Buffer.from(await value.arrayBuffer()), filename: value.name, contentType: value.type || \"application/octet-stream\" });\n    }\n  } else if (body !== undefined) {\n    if (body instanceof Blob) request.body = Buffer.from(await body.arrayBuffer());\n    else if (typeof body === \"string\") request.body = Buffer.from(body);\n    else if (body instanceof ArrayBuffer) request.body = Buffer.from(new Uint8Array(body));\n    else request.body = Buffer.from(body);\n  }\n  return request;\n}\n","// --- Enums ---\n\nexport enum SandboxStatus {\n  PENDING = \"pending\",\n  RUNNING = \"running\",\n  SNAPSHOTTING = \"snapshotting\",\n  SUSPENDING = \"suspending\",\n  SUSPENDED = \"suspended\",\n  TERMINATED = \"terminated\",\n  TIMEOUT = \"timeout\",\n  /** Terminal status used by blocking create/claim responses. */\n  FAILED = \"failed\",\n}\n\nexport enum SnapshotStatus {\n  IN_PROGRESS = \"in_progress\",\n  LOCAL_READY = \"local_ready\",\n  COMPLETED = \"completed\",\n  FAILED = \"failed\",\n}\n\n/**\n * Snapshot type for sandbox snapshot creation.\n *\n * - `\"memory\"`: Capture VM memory + filesystem state. Sandboxes restored\n *   from this snapshot warm-restore VM memory.\n * - `\"filesystem\"`: Capture filesystem state only. Sandboxes restored from\n *   this snapshot cold-boot from the snapshot tarball instead of warm-\n *   restoring VM state. Use this for sandbox image builds so that the\n *   restored sandbox bypasses Firecracker's overlay-path constraints.\n */\nexport type SnapshotType = \"memory\" | \"filesystem\";\n\n/**\n * Checkpoint type for {@link Sandbox.checkpoint}.\n *\n * - `\"memory\"`: Capture VM memory + filesystem state. Sandboxes restored\n *   from this checkpoint warm-restore VM memory and running processes.\n * - `\"filesystem\"`: Capture filesystem state only. Sandboxes restored from\n *   this checkpoint cold-boot from the snapshot tarball.\n */\nexport type CheckpointType = \"memory\" | \"filesystem\";\n\nexport type SnapshotWaitCondition = \"local_ready\" | \"completed\";\n\nexport enum ProcessStatus {\n  RUNNING = \"running\",\n  EXITED = \"exited\",\n  SIGNALED = \"signaled\",\n  OOM_KILLED = \"oom_killed\",\n}\n\nexport enum StdinMode {\n  CLOSED = \"closed\",\n  PIPE = \"pipe\",\n}\n\nexport enum OutputMode {\n  CAPTURE = \"capture\",\n  DISCARD = \"discard\",\n}\n\nexport enum ContainerState {\n  IDLE = \"Idle\",\n  RUNNING = \"Running\",\n}\n\n// --- Resource / Network ---\n\nexport interface ContainerResourcesInfo {\n  cpus: number;\n  memoryMb: number;\n  diskMb: number;\n}\n\n/** GPU models supported by the sandbox scheduler. */\nexport type GpuModel =\n  | \"A100-40GB\"\n  | \"A100-80GB\"\n  | \"H100\"\n  | \"T4\"\n  | \"A6000\"\n  | \"RTX-PRO-6000\"\n  | \"L40\"\n  | \"A10\";\n\n/** A homogeneous GPU allocation for a sandbox. */\nexport interface GpuRequest {\n  count: number;\n  model: GpuModel;\n}\n\nexport interface GPUResources {\n  count: number;\n  model: string;\n}\n\n/**\n * Egress network access control policy for a sandbox.\n *\n * `denyOut` takes precedence over `allowOut`: a destination matched by both is\n * blocked. Entries may be IPv4 addresses, CIDR ranges, or DNS hostnames;\n * hostname rules are followed across DNS changes. The policy can be changed on\n * a running sandbox via `Sandbox.update({ network })` (pass `null` to clear).\n */\nexport interface NetworkConfig {\n  allowInternetAccess: boolean;\n  allowOut: string[];\n  denyOut: string[];\n}\n\n/**\n * One file system mounted into a sandbox at an absolute guest path.\n *\n * `fileSystemId` is the Artifact Storage file-system name created with\n * `tl fs create <name>` and `mountPath` is an absolute, unique guest path\n * (e.g. `/mnt/skills`).\n *\n * `readOnly` and `prefetch` are optional mount modes; they are sent on the\n * wire only when `true` (older servers reject unknown mount fields, so\n * `false` is expressed by omission).\n *\n * `snapshotId` pins the mount to a specific filesystem snapshot. A pinned\n * mount must also set `readOnly: true` (the server rejects a writable pin\n * with HTTP 400). It is sent only when set, for the same compatibility\n * reason as the mount modes.\n *\n * `owner` presents the mounted files as owned by a guest user: `NAME`,\n * `UID`, `NAME:GROUP`, or `UID:GID` (e.g. `\"agent\"` or `\"1001:1001\"`),\n * resolved against the sandbox image's own user database when the mount\n * attaches. Unset keeps the image default (the baked `tl-user` account when\n * the image has one, otherwise root). It is sent only when set, for the\n * same compatibility reason as the mount modes.\n */\nexport interface FileSystemMount {\n  fileSystemId: string;\n  mountPath: string;\n  /** Mount the file system read-only. */\n  readOnly?: boolean;\n  /** Eagerly download the file system's contents. */\n  prefetch?: boolean;\n  /** Pin the mount to a specific filesystem snapshot (requires `readOnly`). */\n  snapshotId?: string;\n  /** Present the mounted files as owned by this guest user spec. */\n  owner?: string;\n}\n\n/** Optional mount modes for attaching a file system to a running sandbox. */\nexport interface AttachFileSystemOptions {\n  /** Mount the file system read-only. */\n  readOnly?: boolean;\n  /** Eagerly download the file system's contents. */\n  prefetch?: boolean;\n  /** Pin the mount to a specific filesystem snapshot (requires `readOnly`). */\n  snapshotId?: string;\n  /** Present the mounted files as owned by this guest user spec. */\n  owner?: string;\n}\n\nexport interface ClaimSandboxOptions {\n  /** File systems to mount before the claimed sandbox is reported as running. */\n  fileSystems?: FileSystemMount[];\n}\n\n// --- Sandbox lifecycle ---\n\nexport interface CreateSandboxOptions {\n  /** Optional sandbox image name. GPU sandboxes require a CAS image; when omitted with a GPU request, Tensorlake uses the server's configured GPU default. */\n  image?: string;\n  /** CPU count. Defaults to 1 for fresh creates; snapshot restores inherit it when omitted. */\n  cpus?: number;\n  /** Memory in MB. Defaults to 1024 for fresh creates; snapshot restores inherit it when omitted. */\n  memoryMb?: number;\n  /** Root disk size in megabytes. When omitted, the server uses its default disk size. */\n  diskMb?: number;\n  /** Number of GPUs to allocate. Defaults to A10 unless gpuModel is set. GPU sandboxes require a CAS image. */\n  gpus?: number;\n  /** GPU model to allocate. The string arm preserves compatibility with existing callers; values are validated at runtime. */\n  gpuModel?: GpuModel | (string & {});\n  /** Typed GPU model and count request. Cannot be combined with gpus or gpuModel. */\n  gpu?: GpuRequest;\n  timeoutSecs?: number;\n  entrypoint?: string[];\n  allowInternetAccess?: boolean;\n  allowOut?: string[];\n  denyOut?: string[];\n  snapshotId?: string;\n  /** Optional name for the sandbox. Named sandboxes support suspend/resume. When absent the sandbox is ephemeral. */\n  name?: string;\n  /** File systems to mount on fresh creation or warm-pool claim, each at its own absolute, unique guest mount path. */\n  fileSystems?: FileSystemMount[];\n}\n\nexport interface UpdateSandboxOptions {\n  /** New name for the sandbox. Naming an ephemeral sandbox enables suspend/resume. */\n  name?: string;\n  /** Whether exposed user ports should be reachable without TensorLake auth. */\n  allowUnauthenticatedAccess?: boolean;\n  /** User ports that should be routable through the sandbox proxy. Port 9501 is reserved. */\n  exposedPorts?: number[];\n  /**\n   * Egress network policy for the running sandbox, applied to the live VM's\n   * firewall in one atomic swap. Omit to keep the current policy, set to\n   * replace it, or pass `null` to clear it to unrestricted egress.\n   */\n  network?: NetworkConfig | null;\n}\n\nexport interface CreateSandboxResponse {\n  sandboxId: string;\n  status: SandboxStatus;\n  reason?: string;\n  routingHint?: string;\n  ingressEndpoint?: string;\n  sandboxUrl?: string;\n  name?: string | null;\n  terminationReason?: string;\n  errorDetails?: unknown;\n}\n\nexport interface CopySandboxOptions {\n  /** Number of running copies to create. Defaults to 1. */\n  times?: number;\n  /** Per-request timeout in seconds for the blocking live-copy request. */\n  requestTimeout?: number;\n}\n\nexport interface CopiedSandboxResponse {\n  sandboxId: string;\n  /** Raw server status. Partial copy responses can include statuses such as `\"failed\"`. */\n  status: string;\n  reason?: string;\n  routingHint?: string;\n  ingressEndpoint?: string;\n  sandboxUrl?: string;\n  name?: string | null;\n  terminationReason?: string;\n  errorDetails?: unknown;\n}\n\nexport interface CopySandboxResponse {\n  sourceSandboxId: string;\n  sandboxes: CopiedSandboxResponse[];\n}\n\nexport interface SandboxInfo {\n  sandboxId: string;\n  namespace: string;\n  status: SandboxStatus;\n  /** Resolved sandbox image name. */\n  image?: string;\n  resources: ContainerResourcesInfo;\n  timeoutSecs?: number;\n  entrypoint?: string[];\n  /** Egress network policy currently applied to the sandbox. */\n  networkPolicy?: NetworkConfig;\n  poolId?: string;\n  outcome?: string;\n  terminationReason?: string;\n  errorDetails?: unknown;\n  createdAt?: Date;\n  terminatedAt?: Date;\n  name?: string;\n  allowUnauthenticatedAccess?: boolean;\n  exposedPorts?: number[];\n  ingressEndpoint?: string;\n  sandboxUrl?: string;\n  routingHint?: string;\n  /** File systems currently mounted into the sandbox, each at its own guest mount path. Empty when none are mounted. */\n  fileSystems?: FileSystemMount[];\n}\n\nexport interface SandboxPortAccess {\n  allowUnauthenticatedAccess: boolean;\n  exposedPorts: number[];\n  ingressEndpoint?: string;\n  sandboxUrl?: string;\n}\n\n/** Sandbox information plus the archival timestamp. */\nexport interface ArchivedSandboxInfo extends SandboxInfo {\n  archivedAt: Date;\n}\n\n/** Pagination params for `listArchivedSandboxes`. */\nexport interface ListArchivedSandboxesOptions {\n  limit?: number;\n  /** Base64-encoded pagination cursor returned by a prior call. */\n  cursor?: string;\n  /** Pagination direction. */\n  direction?: \"forward\" | \"backward\";\n}\n\nexport interface ListArchivedSandboxesResponse {\n  sandboxes: ArchivedSandboxInfo[];\n  prevCursor?: string;\n  nextCursor?: string;\n}\n\n// --- Snapshots ---\n\nexport interface CreateSnapshotResponse {\n  snapshotId: string;\n  status: SnapshotStatus;\n}\n\nexport interface SnapshotInfo {\n  snapshotId: string;\n  namespace: string;\n  sandboxId: string;\n  baseImage: string;\n  status: SnapshotStatus;\n  snapshotType?: SnapshotType;\n  error?: string;\n  snapshotUri?: string;\n  snapshotFormatVersion?: string;\n  sizeBytes?: number;\n  rootfsDiskBytes?: number;\n  createdAt?: Date;\n}\n\nexport interface SnapshotOptions {\n  /**\n   * Optional snapshot type. When omitted the server picks its default. Use\n   * `\"filesystem\"` for snapshots intended for sandbox image builds so that\n   * restored sandboxes cold-boot.\n   */\n  snapshotType?: SnapshotType;\n}\n\nexport interface SnapshotAndWaitOptions extends SnapshotOptions {\n  timeout?: number;\n  pollInterval?: number;\n  /** Defaults to `\"local_ready\"`, which is enough to resume from a snapshot. */\n  waitUntil?: SnapshotWaitCondition;\n}\n\n// --- Persisted sandbox logs ---\n\nexport type SandboxLogLevel =\n  \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport interface GetSandboxLogsOptions {\n  levels?: SandboxLogLevel[];\n  processIds?: string[];\n  nextToken?: string;\n  head?: number;\n  tail?: number;\n  body?: string;\n}\n\nexport interface SandboxLogSignal {\n  timestamp: number;\n  uuid: string;\n  namespace: string;\n  application: string;\n  sandboxId?: string;\n  resourceAttributes: Array<[string, string]>;\n  body: string;\n  logAttributes: string;\n  allocations?: string[];\n  functionRuns?: string[];\n  level?: number;\n  retention?: number;\n}\n\nexport interface SandboxLogsResponse {\n  logs: SandboxLogSignal[];\n  nextToken?: string;\n}\n\nexport interface SandboxProcessLogFilter {\n  processId: string;\n  processPid: string;\n  processCommand: string;\n  processManagedId: string;\n  processManagedName: string;\n  firstSeen: number;\n  lastSeen: number;\n  logCount: number;\n}\n\nexport interface SandboxProcessLogFiltersResponse {\n  processes: SandboxProcessLogFilter[];\n}\n\n// --- Pools ---\n\nexport interface CreatePoolOptions {\n  /** Sandbox image name, such as `tensorlake/ubuntu-minimal` or a registered Sandbox Image. */\n  image: string;\n  cpus?: number;\n  memoryMb?: number;\n  /** Root disk size in megabytes. Omit to use the registered image's size. */\n  diskMb?: number;\n  timeoutSecs?: number;\n  entrypoint?: string[];\n  maxContainers?: number;\n  warmContainers?: number;\n  /** Network policy for each container. Can be replaced later via updatePool. */\n  network?: NetworkConfig;\n}\n\nexport interface UpdatePoolOptions {\n  /**\n   * Network policy for each container. Omit to keep the pool's current policy,\n   * set to replace it, or pass `null` to remove it (unclaimed warm containers\n   * are recycled onto the new policy).\n   */\n  network?: NetworkConfig | null;\n  /** Sandbox image name, such as `tensorlake/ubuntu-minimal` or a registered Sandbox Image. */\n  image: string;\n  cpus?: number;\n  memoryMb?: number;\n  /** Root disk size in megabytes. Omit to use the registered image's size. */\n  diskMb?: number;\n  timeoutSecs?: number;\n  entrypoint?: string[];\n  maxContainers?: number;\n  warmContainers?: number;\n}\n\nexport interface CreateSandboxPoolResponse {\n  poolId: string;\n  namespace: string;\n}\n\nexport interface PoolContainerInfo {\n  id: string;\n  state: string;\n  sandboxId?: string;\n  executorId: string;\n}\n\nexport interface SandboxPoolInfo {\n  poolId: string;\n  namespace: string;\n  /** Sandbox image name backing the pool. */\n  image: string;\n  resources: ContainerResourcesInfo;\n  timeoutSecs: number;\n  entrypoint?: string[];\n  maxContainers?: number;\n  warmContainers?: number;\n  /** The network policy that applies to each container in the pool. */\n  networkPolicy?: NetworkConfig;\n  containers?: PoolContainerInfo[];\n  createdAt?: Date;\n  updatedAt?: Date;\n}\n\n// --- Process management ---\n\nexport interface ProcessUserSpec {\n  name?: string;\n  uid?: number;\n  gid?: number;\n}\n\nexport type ProcessUser = string | ProcessUserSpec;\n\nexport type RestartPolicy = \"never\" | \"on_failure\" | \"always\";\n\nexport interface RestartPolicyConfig {\n  policy?: RestartPolicy;\n  maxRestarts?: number;\n  initialBackoffMs?: number;\n  maxBackoffMs?: number;\n}\n\nexport type ProcessHealthCheckType = \"http\" | \"tcp\";\n\nexport interface ProcessHealthCheck {\n  type: ProcessHealthCheckType;\n  port: number;\n  path?: string;\n  initialDelayMs?: number;\n  intervalMs?: number;\n  timeoutMs?: number;\n  failureThreshold?: number;\n}\n\nexport type ManagedProcessStatus =\n  \"starting\" | \"running\" | \"backing_off\" | \"stopped\";\n\nexport type ManagedProcessHealthStatus =\n  \"disabled\" | \"starting\" | \"healthy\" | \"unhealthy\";\n\nexport interface ManagedProcessExit {\n  exitCode?: number;\n  signal?: number;\n  oomKilled: boolean;\n  endedAt: Date;\n}\n\n/**\n * Managed-process metadata embedded into {@link ProcessInfo}.\n *\n * A managed process is addressable by either its current PID or, if a `name` was given at\n * creation, that name (process APIs accept a PID or process name). `id` is a stable\n * daemon-local identifier: it equals `name` when one was set, otherwise a daemon-assigned\n * opaque id (the process is then addressable only by PID, not by `id`).\n */\nexport interface ManagedProcessInfo {\n  id: string;\n  name?: string;\n  status: ManagedProcessStatus;\n  restartCount: number;\n  restart: RestartPolicyConfig;\n  healthCheck?: ProcessHealthCheck;\n  healthStatus: ManagedProcessHealthStatus;\n  consecutiveHealthFailures: number;\n  lastExit?: ManagedProcessExit;\n  lastError?: string;\n  nextRestartAt?: Date;\n}\n\nexport interface StartProcessOptions {\n  args?: string[];\n  env?: Record<string, string>;\n  workingDir?: string;\n  stdinMode?: StdinMode;\n  stdoutMode?: OutputMode;\n  stderrMode?: OutputMode;\n  user?: ProcessUser;\n  /**\n   * Optional managed-process name. Supplying this opts into managed process behavior, and\n   * lets the process be addressed by this name (in addition to its PID) in\n   * `getProcess`/`killProcess`/`sendSignal`/etc. — useful because a managed process's PID\n   * changes when it restarts. May contain any characters except `/` and must not be all\n   * digits (numeric strings are reserved for PID addressing). If omitted, the daemon assigns\n   * an opaque id (`ManagedProcessInfo.id`) and the process is addressable only by its current PID.\n   */\n  name?: string;\n  /** Optional restart behavior. Supplying this opts into managed process behavior. */\n  restart?: RestartPolicyConfig;\n  /** Optional HTTP/TCP health check. Supplying this opts into managed process behavior. */\n  healthCheck?: ProcessHealthCheck;\n}\n\nexport interface ProcessInfo {\n  handle?: number;\n  pid: number;\n  status: ProcessStatus;\n  exitCode?: number;\n  signal?: number;\n  stdinWritable: boolean;\n  command: string;\n  args: string[];\n  startedAt: Date;\n  endedAt?: Date;\n  managed?: ManagedProcessInfo;\n}\n\nexport interface SendSignalResponse {\n  success: boolean;\n}\n\nexport interface OutputResponse {\n  pid: number;\n  lines: string[];\n  lineCount: number;\n}\n\nexport interface OutputEvent {\n  line: string;\n  timestamp: Date;\n  stream?: string;\n}\n\n// --- Run ---\n\nexport interface RunOptions {\n  args?: string[];\n  env?: Record<string, string>;\n  workingDir?: string;\n  timeout?: number;\n  user?: ProcessUser;\n}\n\nexport interface CommandResult {\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n}\n\n// --- File operations ---\n\nexport interface DirectoryEntry {\n  name: string;\n  isDir: boolean;\n  size?: number;\n  modifiedAt?: Date;\n}\n\nexport interface ListDirectoryResponse {\n  path: string;\n  entries: DirectoryEntry[];\n}\n\n// --- PTY ---\n\nexport interface CreatePtySessionOptions {\n  command: string;\n  args?: string[];\n  env?: Record<string, string>;\n  workingDir?: string;\n  rows?: number;\n  cols?: number;\n}\n\nexport interface PtySessionInfo {\n  sessionId: string;\n  token: string;\n}\n\n// --- Health ---\n\nexport interface HealthResponse {\n  healthy: boolean;\n}\n\nexport interface DaemonInfo {\n  version: string;\n  uptimeSecs: number;\n  runningProcesses: number;\n  totalProcesses: number;\n}\n\n// --- Client options ---\n\nexport interface SandboxClientOptions {\n  apiUrl?: string;\n  apiKey?: string;\n  organizationId?: string;\n  projectId?: string;\n  namespace?: string;\n  maxRetries?: number;\n  retryBackoffMs?: number;\n  /** Total HTTP request timeout in seconds. Default: 300. */\n  requestTimeout?: number;\n  /** @deprecated Use requestTimeout. Total HTTP request timeout in milliseconds. */\n  timeoutMs?: number;\n}\n\nexport interface SandboxOptions {\n  sandboxId: string;\n  /**\n   * Explicit sandbox proxy base URL. Direct `new Sandbox(...)` construction\n   * requires this; `Sandbox.connect()` and `SandboxClient.connect()` normally\n   * resolve the server-returned `sandboxUrl`.\n   */\n  proxyUrl?: string;\n  /** @internal Real caller/env proxy override, distinct from an internally selected proxyUrl. */\n  explicitProxyUrl?: string;\n  apiKey?: string;\n  organizationId?: string;\n  projectId?: string;\n  routingHint?: string;\n  resolveProxyInfo?: (\n    identifier: string,\n  ) => Promise<SandboxInfo & { readonly traceId: string }>;\n  /** Optional total HTTP request timeout in seconds for sandbox proxy operations. Omit for no total proxy timeout. */\n  requestTimeout?: number;\n  /** @deprecated Use requestTimeout. Optional total HTTP request timeout in milliseconds for sandbox proxy operations. */\n  timeoutMs?: number;\n  /**\n   * @internal Shared Rust-backed lifecycle client. When provided, the proxy\n   * client is minted via `connectProxy` so it reuses this client's connection\n   * pool (HTTP/2 coalescing across sandboxes).\n   */\n  nativeClient?: import(\"./native-sandbox.js\").NativeSandboxClient;\n}\n\nexport interface CreateAndConnectOptions extends CreateSandboxOptions {\n  poolId?: string;\n  proxyUrl?: string;\n  /** Total HTTP request timeout in seconds for sandbox startup. Default: client requestTimeout. */\n  requestTimeout?: number;\n  /** @deprecated Use requestTimeout. */\n  startupTimeout?: number;\n}\n\n/**\n * Options for `Sandbox.getOrCreate`: everything `create` accepts (used only\n * when a new sandbox must be created; `name` comes from the first argument),\n * plus `resume`. `poolId` is excluded: a pool claim cannot carry a name, so\n * a claimed sandbox could never be found again by a later call.\n */\nexport interface GetOrCreateOptions\n  extends Omit<CreateAndConnectOptions, \"name\" | \"poolId\"> {\n  /** Resume a suspended sandbox before returning. Default: true. */\n  resume?: boolean;\n}\n\n/**\n * What `Sandbox.getOrCreate` did to bind the name, exposed as\n * `sandbox.bindOutcome`:\n *\n * - `\"created\"`: nothing held the name; the call created a new sandbox.\n * - `\"attached\"`: a sandbox already held the name and needed no resume.\n *   Includes a sandbox that was still starting (the call waited for it)\n *   and a suspended sandbox when `resume: false`.\n * - `\"resumed\"`: the sandbox was suspended when the call found it and is\n *   running now.\n */\nexport type GetOrCreateOutcome = \"created\" | \"attached\" | \"resumed\";\n\nexport interface SuspendResumeOptions {\n  /** If false, fire-and-return without waiting for completion. Default: true. */\n  wait?: boolean;\n  /** Max seconds to wait when wait=true. Default: 300. */\n  timeout?: number;\n  /** Seconds between status polls when wait=true. Default: 1. */\n  pollInterval?: number;\n}\n\nexport interface CheckpointOptions extends SuspendResumeOptions {\n  checkpointType?: CheckpointType;\n  /** Defaults to `\"local_ready\"`, which is enough to resume from a checkpoint. */\n  waitUntil?: SnapshotWaitCondition;\n}\n\nexport interface ConnectOptions {\n  sandboxId: string;\n  proxyUrl?: string;\n  routingHint?: string;\n}\n\n// --- JSON key conversion helpers ---\n\nconst CAMEL_TO_SNAKE_RE = /[A-Z]/g;\n\n/** Convert a camelCase string to snake_case. */\nexport function camelToSnake(str: string): string {\n  return str.replace(CAMEL_TO_SNAKE_RE, (ch) => \"_\" + ch.toLowerCase());\n}\n\n/** Convert a snake_case string to camelCase. */\nexport function snakeToCamel(str: string): string {\n  return str.replace(/_([a-z])/g, (_, ch) => ch.toUpperCase());\n}\n\n/** Recursively convert all object keys from camelCase to snake_case. */\nexport function toSnakeKeys(obj: unknown): unknown {\n  if (Array.isArray(obj)) return obj.map(toSnakeKeys);\n  if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n    const result: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n      result[camelToSnake(k)] = toSnakeKeys(v);\n    }\n    return result;\n  }\n  return obj;\n}\n\n/**\n * Parse a numeric timestamp into a Date.\n *\n * Handles seconds, milliseconds, and microseconds by checking magnitude.\n */\nexport function parseTimestamp(v: unknown): Date | undefined {\n  if (v == null) return undefined;\n  if (v instanceof Date) return v;\n  if (typeof v === \"string\") {\n    const parsed = Date.parse(v);\n    return Number.isNaN(parsed) ? undefined : new Date(parsed);\n  }\n  const ts = Number(v);\n  if (isNaN(ts)) return undefined;\n  if (ts > 1e15) return new Date(ts / 1000); // microseconds → ms\n  if (ts > 1e12) return new Date(ts); // already ms\n  return new Date(ts * 1000); // seconds → ms\n}\n\n/**\n * Recursively convert all object keys from snake_case to camelCase,\n * with special handling for `id` → contextual name and timestamp parsing.\n */\nexport function fromSnakeKeys(obj: unknown, idField?: string): unknown {\n  if (Array.isArray(obj))\n    return obj.map((item) => fromSnakeKeys(item, idField));\n  if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n    const result: Record<string, unknown> = {};\n    for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n      let key: string;\n      if (k === \"id\" && idField) {\n        key = idField;\n      } else {\n        key = snakeToCamel(k);\n      }\n\n      // Parse timestamp fields\n      if (\n        key.endsWith(\"At\") ||\n        key === \"timestamp\" ||\n        key === \"startedAt\" ||\n        key === \"endedAt\"\n      ) {\n        result[key] = parseTimestamp(v);\n      } else if (typeof v === \"object\" && v !== null && !Array.isArray(v)) {\n        result[key] = fromSnakeKeys(v);\n      } else if (Array.isArray(v)) {\n        result[key] = v.map((item) => fromSnakeKeys(item));\n      } else {\n        // Normalize null → undefined so optional fields match TypeScript's ? convention.\n        result[key] = v === null ? undefined : v;\n      }\n    }\n    return result;\n  }\n  return obj;\n}\n","import { nanoid } from \"nanoid\";\n\nimport * as defaults from \"./defaults.js\";\nimport { NativeCloudTransport } from \"./native-cloud.js\";\nimport { fromSnakeKeys } from \"./models.js\";\nimport type {\n  ApplicationBuildContext,\n  ApplicationBuildResponse,\n  ApplicationManifest,\n  ApplicationSummary,\n  BinaryPayload,\n  BuildInfo,\n  BuildLogEntry,\n  CloudClientOptions,\n  CreateApplicationBuildRequest,\n  NewSecret,\n  RequestInput,\n  RequestMetadata,\n  RequestOutput,\n  SandboxTemplate,\n  Secret,\n  SecretsList,\n  StartImageBuildRequest,\n  UpsertSecretResponse,\n} from \"./cloud-models.js\";\n\nexport class CloudClient {\n  private readonly transport: NativeCloudTransport;\n  private readonly organizationId?: string;\n  private readonly projectId?: string;\n  private readonly namespace: string;\n\n  constructor(options?: CloudClientOptions) {\n    this.organizationId = options?.organizationId;\n    this.projectId = options?.projectId;\n    this.namespace = options?.namespace ?? defaults.NAMESPACE;\n    this.transport = new NativeCloudTransport({\n      baseUrl: options?.apiUrl ?? defaults.API_URL,\n      apiKey: options?.apiKey ?? defaults.API_KEY,\n      organizationId: this.organizationId,\n      projectId: this.projectId,\n      maxRetries: options?.maxRetries ?? defaults.MAX_RETRIES,\n      retryBackoffMs: options?.retryBackoffMs ?? defaults.RETRY_BACKOFF_MS,\n      timeoutMs: defaults.DEFAULT_HTTP_TIMEOUT_MS,\n      userAgent: `tensorlake-typescript-sdk/${defaults.SDK_VERSION}`,\n    });\n  }\n\n  static forCloud(options?: CloudClientOptions): CloudClient {\n    return new CloudClient(options);\n  }\n\n  close(): void {\n    this.transport.close();\n  }\n\n  async upsertApplication(\n    manifest: ApplicationManifest,\n    codeZip: BinaryPayload,\n    upgradeRunningRequests = false,\n  ): Promise<void> {\n    const applicationManifest = { ...manifest };\n    let publicEndpointId = publicEndpointIdFromManifest(applicationManifest);\n    if (\n      applicationAllowsUnauthenticatedRequests(applicationManifest) &&\n      publicEndpointId === undefined\n    ) {\n      const applicationName = applicationManifest.name;\n      if (typeof applicationName === \"string\" && applicationName.length > 0) {\n        publicEndpointId =\n          await this.existingApplicationPublicEndpointId(applicationName);\n      }\n      publicEndpointId ??= generatePublicEndpointId();\n    }\n    if (publicEndpointId !== undefined) {\n      applicationManifest.public_endpoint_id = publicEndpointId;\n      delete applicationManifest.publicEndpointId;\n    }\n\n    const form = new FormData();\n    form.append(\n      \"code\",\n      new Blob([toBlobPart(codeZip)], { type: \"application/zip\" }),\n      \"code.zip\",\n    );\n    form.append(\"code_content_type\", \"application/zip\");\n    form.append(\"application\", JSON.stringify(applicationManifest));\n    form.append(\n      \"upgrade_requests_to_latest_code\",\n      String(upgradeRunningRequests),\n    );\n\n    await this.transport.requestResponse(\"POST\", this.namespacePath(\"applications\"), {\n      body: form,\n    });\n  }\n\n  async deleteApplication(applicationName: string): Promise<void> {\n    await this.transport.requestResponse(\n      \"DELETE\",\n      this.namespacePath(`applications/${encodeURIComponent(applicationName)}`),\n    );\n  }\n\n  async deleteSandboxImage(imageName: string): Promise<void> {\n    await this.transport.requestResponse(\n      \"DELETE\",\n      this.namespacePath(`sandbox-images/${encodeURIComponent(imageName)}`),\n    );\n  }\n\n  /**\n   * Look up a registered sandbox image (template) by its registered name.\n   *\n   * Returns the template, or `null` when no image with that name exists.\n   * API-key clients may omit organization/project IDs and use the\n   * token-scoped Platform API route directly. Explicit scope remains\n   * available for PAT callers.\n   */\n  async findSandboxImageByName(\n    imageName: string,\n    options?: { organizationId?: string; projectId?: string },\n  ): Promise<SandboxTemplate | null> {\n    const base = this.platformProjectPath(\n      \"sandbox-templates\",\n      options?.organizationId,\n      options?.projectId,\n    );\n    const response = await this.transport.requestResponse(\n      \"GET\",\n      `${base}/by-name/${encodeURIComponent(imageName)}`,\n      { statusOnlyCodes: new Set([404]) },\n    );\n    if (response.status === 404) {\n      return null;\n    }\n    const raw = await parseJsonResponse<Record<string, unknown>>(response);\n    return fromSnakeKeys(raw) as SandboxTemplate;\n  }\n\n  /**\n   * List all registered sandbox images (templates), following pagination to\n   * the end. API-key clients may omit organization/project IDs and use the\n   * token-scoped Platform API route directly.\n   */\n  async listSandboxImages(\n    options?: { organizationId?: string; projectId?: string },\n  ): Promise<SandboxTemplate[]> {\n    const base = this.platformProjectPath(\n      \"sandbox-templates\",\n      options?.organizationId,\n      options?.projectId,\n    );\n    let path: string | null = `${base}?pageSize=100`;\n    const templates: SandboxTemplate[] = [];\n    while (path !== null) {\n      const page: SandboxTemplatesPage = await this.transport.requestJson<SandboxTemplatesPage>(\n        \"GET\",\n        path,\n      );\n      for (const item of page.items ?? []) {\n        templates.push(fromSnakeKeys(item) as SandboxTemplate);\n      }\n      const next = page.pagination?.next;\n      path = next ? nextRequestPath(next) : null;\n    }\n    return templates;\n  }\n\n  async applications(): Promise<ApplicationSummary[]> {\n    const raw = await this.transport.requestJson<{ applications: Record<string, unknown>[] }>(\n      \"GET\",\n      this.namespacePath(\"applications\"),\n    );\n    return (raw.applications ?? []).map(\n      (application) => fromSnakeKeys(application) as ApplicationSummary,\n    );\n  }\n\n  async applicationManifest(applicationName: string): Promise<ApplicationManifest> {\n    const raw = await this.transport.requestJson<Record<string, unknown>>(\n      \"GET\",\n      this.namespacePath(`applications/${encodeURIComponent(applicationName)}`),\n    );\n    return fromSnakeKeys(raw) as ApplicationManifest;\n  }\n\n  async runRequest(\n    applicationName: string,\n    inputs: RequestInput[] = [],\n  ): Promise<string> {\n    const path = this.namespacePath(\n      `applications/${encodeURIComponent(applicationName)}`,\n    );\n\n    const response =\n      inputs.length === 0\n        ? await this.transport.requestResponse(\"POST\", path, {\n            body: new Uint8Array(),\n            headers: { Accept: \"application/json\" },\n          })\n        : inputs.length === 1 && inputs[0].name === \"0\"\n          ? await this.transport.requestResponse(\"POST\", path, {\n              body: toRequestBody(inputs[0].data),\n              headers: {\n                Accept: \"application/json\",\n                \"Content-Type\": inputs[0].contentType,\n              },\n            })\n          : await this.runMultipartRequest(path, inputs);\n\n    const body = await parseJsonResponse<{ request_id?: string }>(response);\n    const requestId = body?.request_id;\n    if (!requestId) {\n      throw new Error(\"missing request_id in run request response body\");\n    }\n    return requestId;\n  }\n\n  async waitOnRequestCompletion(\n    applicationName: string,\n    requestId: string,\n  ): Promise<void> {\n    const stream = this.transport.stream(\n      \"GET\",\n      this.namespacePath(\n        `applications/${encodeURIComponent(applicationName)}/requests/${encodeURIComponent(requestId)}/progress`,\n      ),\n    );\n\n    for await (const event of stream) {\n      if (Object.prototype.hasOwnProperty.call(event, \"RequestFinished\")) {\n        return;\n      }\n    }\n\n    throw new Error(\"progress stream ended before request completion\");\n  }\n\n  async requestMetadata(\n    applicationName: string,\n    requestId: string,\n  ): Promise<RequestMetadata> {\n    const raw = await this.transport.requestJson<Record<string, unknown>>(\n      \"GET\",\n      this.namespacePath(\n        `applications/${encodeURIComponent(applicationName)}/requests/${encodeURIComponent(requestId)}`,\n      ),\n    );\n    return fromSnakeKeys(raw) as RequestMetadata;\n  }\n\n  async requestOutput(\n    applicationName: string,\n    requestId: string,\n  ): Promise<RequestOutput> {\n    const response = await this.transport.requestResponse(\n      \"GET\",\n      this.namespacePath(\n        `applications/${encodeURIComponent(applicationName)}/requests/${encodeURIComponent(requestId)}/output`,\n      ),\n    );\n\n    const serializedValue = new Uint8Array(await response.arrayBuffer());\n    const contentType = response.headers.get(\"content-type\") ?? \"\";\n    return {\n      serializedValue,\n      contentType,\n    };\n  }\n\n  async listSecrets(options?: {\n    organizationId?: string;\n    projectId?: string;\n    pageSize?: number;\n  }): Promise<SecretsList> {\n    const base = this.secretCollectionPath(\n      options?.organizationId,\n      options?.projectId,\n    );\n    const raw = await this.transport.requestJson<SecretMetadata[]>(\"GET\", base);\n    const pageSize = Math.max(0, options?.pageSize ?? 100);\n    return Object.assign(\n      {\n        items: raw.slice(0, pageSize).map(secretFromMetadata),\n        pagination: { total: raw.length },\n      },\n      { traceId: raw.traceId },\n    );\n  }\n\n  async getSecret(\n    secretId: string,\n    options?: { organizationId?: string; projectId?: string },\n  ): Promise<Secret> {\n    const base = this.secretCollectionPath(\n      options?.organizationId,\n      options?.projectId,\n    );\n    const raw = await this.transport.requestJson<SecretMetadata>(\n      \"GET\",\n      `${base}/${encodeURIComponent(secretId)}`,\n    );\n    return Object.assign(secretFromMetadata(raw), { traceId: raw.traceId });\n  }\n\n  async upsertSecrets(\n    secrets: NewSecret | NewSecret[],\n    options?: { organizationId?: string; projectId?: string },\n  ): Promise<UpsertSecretResponse> {\n    const base = this.secretCollectionPath(\n      options?.organizationId,\n      options?.projectId,\n    );\n    if (Array.isArray(secrets)) {\n      const results: Secret[] = [];\n      for (const secret of secrets) {\n        results.push(await this.upsertSecret(base, secret));\n      }\n      return results;\n    }\n    return this.upsertSecret(base, secrets);\n  }\n\n  async deleteSecret(\n    secretId: string,\n    options?: { organizationId?: string; projectId?: string },\n  ): Promise<void> {\n    const base = this.secretCollectionPath(\n      options?.organizationId,\n      options?.projectId,\n    );\n    await this.transport.requestResponse(\n      \"DELETE\",\n      `${base}/${encodeURIComponent(secretId)}`,\n    );\n  }\n\n  private async upsertSecret(base: string, secret: NewSecret): Promise<Secret> {\n    let response = await this.transport.requestResponse(\"POST\", base, {\n      json: secret,\n      headers: { \"Idempotency-Key\": nanoid() },\n      statusOnlyCodes: new Set([409]),\n    });\n    if (response.status === 409) {\n      const prefix = base.slice(0, -\"/secrets\".length);\n      const existing = await this.transport.requestJson<{ id: string }>(\n        \"GET\",\n        `${prefix}/secret-names/${encodeURIComponent(secret.name)}`,\n      );\n      response = await this.transport.requestResponse(\n        \"POST\",\n        `${base}/${encodeURIComponent(existing.id)}/versions`,\n        {\n          json: { value: secret.value },\n          headers: { \"Idempotency-Key\": nanoid() },\n        },\n      );\n    }\n    const metadata = await parseJsonResponse<SecretMetadata>(response);\n    return Object.assign(secretFromMetadata(metadata), {\n      traceId: response.traceId,\n    });\n  }\n\n  async startImageBuild(\n    buildServicePath: string,\n    request: StartImageBuildRequest,\n  ): Promise<BuildInfo> {\n    const form = new FormData();\n    form.append(\"graph_name\", request.applicationName);\n    form.append(\"graph_version\", request.applicationVersion);\n    form.append(\"graph_function_name\", request.functionName);\n    form.append(\"image_name\", request.imageName);\n    form.append(\"image_id\", request.imageId);\n    form.append(\n      \"context\",\n      new Blob([toBlobPart(request.buildContext)]),\n      \"context.tar.gz\",\n    );\n\n    const response = await this.transport.requestResponse(\n      \"PUT\",\n      `${trimTrailingSlashes(buildServicePath)}/builds`,\n      { body: form },\n    );\n    const raw = await parseJsonResponse<Record<string, unknown>>(response);\n    return fromSnakeKeys(raw) as BuildInfo;\n  }\n\n  async createApplicationBuild(\n    buildServicePath: string,\n    request: CreateApplicationBuildRequest,\n    imageContexts: ApplicationBuildContext[],\n  ): Promise<ApplicationBuildResponse> {\n    const form = createApplicationBuildForm(request, imageContexts);\n    const response = await this.transport.requestResponse(\n      \"POST\",\n      trimTrailingSlashes(buildServicePath),\n      { body: form },\n    );\n    const raw = await parseJsonResponse<Record<string, unknown>>(response);\n    return fromSnakeKeys(raw) as ApplicationBuildResponse;\n  }\n\n  async applicationBuildInfo(\n    buildServicePath: string,\n    applicationBuildId: string,\n  ): Promise<ApplicationBuildResponse> {\n    const raw = await this.transport.requestJson<Record<string, unknown>>(\n      \"GET\",\n      `${trimTrailingSlashes(buildServicePath)}/${encodeURIComponent(applicationBuildId)}`,\n    );\n    return fromSnakeKeys(raw) as ApplicationBuildResponse;\n  }\n\n  async cancelApplicationBuild(\n    buildServicePath: string,\n    applicationBuildId: string,\n  ): Promise<ApplicationBuildResponse> {\n    const raw = await this.transport.requestJson<Record<string, unknown>>(\n      \"POST\",\n      `${trimTrailingSlashes(buildServicePath)}/${encodeURIComponent(applicationBuildId)}/cancel`,\n    );\n    return fromSnakeKeys(raw) as ApplicationBuildResponse;\n  }\n\n  async buildInfo(\n    buildServicePath: string,\n    buildId: string,\n  ): Promise<BuildInfo> {\n    const raw = await this.transport.requestJson<Record<string, unknown>>(\n      \"GET\",\n      `${trimTrailingSlashes(buildServicePath)}/builds/${encodeURIComponent(buildId)}`,\n    );\n    return fromSnakeKeys(raw) as BuildInfo;\n  }\n\n  async cancelBuild(buildServicePath: string, buildId: string): Promise<void> {\n    await this.transport.requestResponse(\n      \"POST\",\n      `${trimTrailingSlashes(buildServicePath)}/builds/${encodeURIComponent(buildId)}/cancel`,\n    );\n  }\n\n  async *streamBuildLogs(\n    buildServicePath: string,\n    buildId: string,\n    signal?: AbortSignal,\n  ): AsyncIterable<BuildLogEntry> {\n    const stream = this.transport.stream(\n      \"GET\",\n      `${trimTrailingSlashes(buildServicePath)}/builds/${encodeURIComponent(buildId)}/logs`,\n      signal,\n    );\n    for await (const event of stream) {\n      yield fromSnakeKeys(event) as BuildLogEntry;\n    }\n  }\n\n  private async runMultipartRequest(\n    path: string,\n    inputs: RequestInput[],\n  ): Promise<Response> {\n    const form = new FormData();\n    for (const input of inputs) {\n      form.append(\n        input.name,\n        new Blob([toBlobPart(input.data)], { type: input.contentType }),\n        input.name,\n      );\n    }\n    return this.transport.requestResponse(\"POST\", path, {\n      body: form,\n      headers: { Accept: \"application/json\" },\n    });\n  }\n\n  private namespacePath(subpath: string): string {\n    return `/v1/namespaces/${encodeURIComponent(this.namespace)}/${subpath.replace(/^\\/+/, \"\")}`;\n  }\n\n  private async existingApplicationPublicEndpointId(\n    applicationName: string,\n  ): Promise<string | undefined> {\n    const response = await this.transport.requestResponse(\n      \"GET\",\n      this.namespacePath(`applications/${encodeURIComponent(applicationName)}`),\n      { statusOnlyCodes: new Set([404]) },\n    );\n    if (response.status === 404) {\n      return undefined;\n    }\n\n    const application =\n      await parseJsonResponse<Record<string, unknown>>(response);\n    return publicEndpointIdFromManifest(application);\n  }\n\n  private platformProjectPath(\n    resource: \"sandbox-templates\",\n    organizationId?: string,\n    projectId?: string,\n  ): string {\n    const resolvedOrganizationId = organizationId ?? this.organizationId;\n    const resolvedProjectId = projectId ?? this.projectId;\n    if (!resolvedOrganizationId && !resolvedProjectId) {\n      return `/platform/v1/${resource}`;\n    }\n    if (!resolvedOrganizationId || !resolvedProjectId) {\n      throw new Error(\n        \"organizationId and projectId must be provided together\",\n      );\n    }\n    return `/platform/v1/organizations/${encodeURIComponent(resolvedOrganizationId)}/projects/${encodeURIComponent(resolvedProjectId)}/${resource}`;\n  }\n\n  private secretCollectionPath(\n    organizationId?: string,\n    projectId?: string,\n  ): string {\n    const resolvedOrganizationId = organizationId ?? this.organizationId;\n    const resolvedProjectId = projectId ?? this.projectId;\n    if (!resolvedOrganizationId && !resolvedProjectId) {\n      return this.namespacePath(\"secrets\");\n    }\n    if (!resolvedOrganizationId || !resolvedProjectId) {\n      throw new Error(\"organizationId and projectId must be provided together\");\n    }\n    return this.namespacePath(\"secrets\");\n  }\n}\n\ntype SecretMetadata = {\n  id: string;\n  name: string;\n  created_at_ms: number;\n};\n\nfunction secretFromMetadata(metadata: SecretMetadata): Secret {\n  return {\n    id: metadata.id,\n    name: metadata.name,\n    createdAt: new Date(metadata.created_at_ms),\n  };\n}\n\nconst UNAUTHENTICATED_REQUESTS = \"unauthenticated_requests\";\n\nfunction applicationAllowsUnauthenticatedRequests(\n  manifest: ApplicationManifest,\n): boolean {\n  return (\n    Array.isArray(manifest.allow) &&\n    manifest.allow.includes(UNAUTHENTICATED_REQUESTS)\n  );\n}\n\nfunction publicEndpointIdFromManifest(\n  manifest: ApplicationManifest,\n): string | undefined {\n  for (const key of [\"public_endpoint_id\", \"publicEndpointId\"]) {\n    const value = manifest[key];\n    if (typeof value === \"string\" && value.length > 0) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction generatePublicEndpointId(): string {\n  return `endpoint_${nanoid()}`;\n}\n\nfunction createApplicationBuildForm(\n  request: CreateApplicationBuildRequest,\n  imageContexts: ApplicationBuildContext[],\n): FormData {\n  const contextsByPartName = new Map<string, ApplicationBuildContext>();\n  for (const context of imageContexts) {\n    if (contextsByPartName.has(context.contextTarPartName)) {\n      throw new Error(\n        `duplicate image context part name '${context.contextTarPartName}'`,\n      );\n    }\n    contextsByPartName.set(context.contextTarPartName, context);\n  }\n\n  const form = new FormData();\n  form.append(\n    \"app_version\",\n    new Blob([JSON.stringify(request)], { type: \"application/json\" }),\n    \"app_version\",\n  );\n\n  for (const image of request.images) {\n    const context = contextsByPartName.get(image.contextTarPartName);\n    if (!context) {\n      throw new Error(\n        `missing image context for part '${image.contextTarPartName}'`,\n      );\n    }\n    form.append(\n      image.contextTarPartName,\n      new Blob([toBlobPart(context.contextTarGz)]),\n      `${image.contextTarPartName}.tar.gz`,\n    );\n  }\n\n  for (const context of imageContexts) {\n    if (!request.images.some((image) => image.contextTarPartName === context.contextTarPartName)) {\n      throw new Error(\n        `unexpected image context for part '${context.contextTarPartName}'`,\n      );\n    }\n  }\n\n  return form;\n}\n\nfunction trimTrailingSlashes(value: string): string {\n  return value.endsWith(\"/\") ? value.slice(0, -1) : value;\n}\n\n/** One page of the paginated sandbox-templates list response. */\ninterface SandboxTemplatesPage {\n  items?: Record<string, unknown>[];\n  pagination?: { next?: string };\n}\n\n/**\n * Reduce a `pagination.next` link to a base-URL-relative request path. The\n * server may return either an absolute URL or an absolute path; the HTTP\n * client always prepends its base URL, so absolute URLs must be reduced to\n * their path+query first.\n */\nfunction nextRequestPath(next: string): string {\n  const schemeIndex = next.indexOf(\"://\");\n  if (schemeIndex !== -1) {\n    const afterScheme = next.slice(schemeIndex + 3);\n    const slashIndex = afterScheme.indexOf(\"/\");\n    return slashIndex === -1 ? \"/\" : afterScheme.slice(slashIndex);\n  }\n  return next.startsWith(\"/\") ? next : `/${next}`;\n}\n\nfunction toBlobPart(data: BinaryPayload): string | Blob | ArrayBuffer {\n  if (typeof data === \"string\" || data instanceof Blob) {\n    return data;\n  }\n  if (data instanceof Uint8Array) {\n    return Uint8Array.from(data).buffer;\n  }\n  return data;\n}\n\nfunction toRequestBody(data: BinaryPayload): string | Blob | ArrayBuffer {\n  return toBlobPart(data);\n}\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n  const text = await response.text();\n  if (!text) {\n    return undefined as T;\n  }\n  return JSON.parse(text) as T;\n}\n","// Read the ELF interpreter, rather than generating a process-wide diagnostic\n// report. Both supported Linux architectures use little-endian ELF64. Reads\n// are bounded to the header, program headers, and interpreter pathname.\nfunction detectLinuxLibc(fs, executable = process.execPath) {\n  const override = process.env.TENSORLAKE_NODE_LIBC;\n  if (override != null) {\n    if (override === \"gnu\" || override === \"musl\") return override;\n    throw new Error(\"TENSORLAKE_NODE_LIBC must be 'gnu' or 'musl'.\");\n  }\n\n  let fd;\n  try {\n    fd = fs.openSync(executable, \"r\");\n    function read(size, offset) {\n      if (!Number.isSafeInteger(offset) || offset < 0) {\n        throw new Error(\"Invalid ELF offset\");\n      }\n      const buffer = Buffer.alloc(size);\n      let count = 0;\n      while (count < size) {\n        const bytes = fs.readSync(fd, buffer, count, size - count, offset + count);\n        if (bytes === 0) throw new Error(\"Truncated ELF executable\");\n        count += bytes;\n      }\n      return buffer;\n    }\n\n    const header = read(64, 0);\n    if (header.readUInt32BE(0) !== 0x7f454c46 || header[4] !== 2 || header[5] !== 1) {\n      throw new Error(\"Expected a little-endian ELF64 executable\");\n    }\n    const entrySize = header.readUInt16LE(54);\n    const count = header.readUInt16LE(56);\n    if (entrySize !== 56 || count === 0 || count > 128) {\n      throw new Error(\"Unsupported ELF program headers\");\n    }\n    const entries = read(entrySize * count, Number(header.readBigUInt64LE(32)));\n    for (let i = 0; i < count; i++) {\n      const offset = i * entrySize;\n      if (entries.readUInt32LE(offset) !== 3) continue; // PT_INTERP\n      const size = Number(entries.readBigUInt64LE(offset + 32));\n      if (size < 2 || size > 4096) throw new Error(\"Invalid ELF interpreter size\");\n      const interpreter = read(size, Number(entries.readBigUInt64LE(offset + 8)));\n      if (interpreter[size - 1] !== 0) throw new Error(\"Unterminated ELF interpreter\");\n      const name = interpreter.subarray(0, -1).toString(\"utf8\").split(\"/\").at(-1);\n      if (name.startsWith(\"ld-musl-\")) return \"musl\";\n      if (name.startsWith(\"ld-linux-\")) return \"gnu\";\n      throw new Error(\"Unrecognized ELF interpreter\");\n    }\n    throw new Error(\"No ELF interpreter (statically linked executable)\");\n  } catch (cause) {\n    throw new Error(\n      \"Unable to detect Linux libc from the Node executable. Set TENSORLAKE_NODE_LIBC to 'gnu' or 'musl' for a nonstandard runtime.\",\n      { cause },\n    );\n  } finally {\n    if (fd != null) fs.closeSync(fd);\n  }\n}\n\nmodule.exports = { detectLinuxLibc };\n","import { detectLinuxLibc } from \"../lib/libc.cjs\";\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ninterface RuntimeReport {\n  header?: {\n    glibcVersionRuntime?: string;\n  };\n}\n\ninterface TargetOptions {\n  libc?: \"gnu\" | \"musl\";\n  report?: RuntimeReport;\n}\n\ninterface NativeBindingPathOptions extends TargetOptions {\n  packageRoot?: string;\n  platform?: NodeJS.Platform;\n  arch?: string;\n}\n\nconst NATIVE_PACKAGES: Readonly<Record<string, string>> = {\n  \"darwin-arm64\": \"tensorlake-native-darwin-arm64\",\n  \"linux-arm64\": \"tensorlake-native-linux-arm64-gnu\",\n  \"linux-arm64-musl\": \"tensorlake-native-linux-arm64-musl\",\n  \"linux-x64\": \"tensorlake-native-linux-x64-gnu\",\n  \"linux-x64-musl\": \"tensorlake-native-linux-x64-musl\",\n  \"win32-x64\": \"tensorlake-native-win32-x64\",\n};\n\nfunction packageRoot(): string {\n  const parent = fileURLToPath(new URL(\"../\", import.meta.url));\n  if (fs.existsSync(path.join(parent, \"package.json\"))) return parent;\n  const grandparent = fileURLToPath(new URL(\"../../\", import.meta.url));\n  if (fs.existsSync(path.join(grandparent, \"package.json\"))) return grandparent;\n  return parent;\n}\n\nlet cachedLinuxLibc: \"gnu\" | \"musl\" | undefined;\n\nfunction linuxLibcFamily(options: TargetOptions): \"gnu\" | \"musl\" {\n  if (options.libc != null) return options.libc;\n  if (options.report != null) {\n    return options.report.header?.glibcVersionRuntime ? \"gnu\" : \"musl\";\n  }\n  if (cachedLinuxLibc != null) return cachedLinuxLibc;\n\n  cachedLinuxLibc = detectLinuxLibc(fs);\n  return cachedLinuxLibc;\n}\n\nexport function nativeTargetId(\n  platform: NodeJS.Platform = process.platform,\n  arch: string = process.arch,\n  options: TargetOptions = {},\n): string {\n  const target = `${platform}-${arch}`;\n  if (platform !== \"linux\") return target;\n  if (options.libc == null && options.report == null && platform !== process.platform) {\n    return target;\n  }\n  return linuxLibcFamily(options) === \"musl\" ? `${target}-musl` : target;\n}\n\nexport function nativeBindingPath(options: NativeBindingPathOptions = {}): string {\n  const platform = options.platform ?? process.platform;\n  const arch = options.arch ?? process.arch;\n  return path.join(\n    options.packageRoot ?? packageRoot(),\n    \"dist\",\n    \"native\",\n    nativeTargetId(platform, arch, options),\n    \"tensorlake-node.node\",\n  );\n}\n\nexport function nativePackageName(\n  platform: NodeJS.Platform = process.platform,\n  arch: string = process.arch,\n  options: TargetOptions = {},\n): string | undefined {\n  return NATIVE_PACKAGES[nativeTargetId(platform, arch, options)];\n}\n\nexport function loadNative<T>(): T {\n  const target = nativeTargetId();\n  const bindingPath = nativeBindingPath();\n  const require = createRequire(import.meta.url);\n\n  // Local source builds stage the addon here. Published packages intentionally\n  // omit this directory and resolve the platform-specific optional dependency.\n  if (fs.existsSync(bindingPath)) return require(bindingPath) as T;\n\n  const packageName = nativePackageName();\n  if (!packageName) {\n    throw new Error(\n      `Tensorlake does not provide a native binding for ${target}.`,\n    );\n  }\n\n  let packageEntry: string;\n  try {\n    packageEntry = require.resolve(packageName);\n  } catch (cause) {\n    throw new Error(\n      `Missing native binding package ${packageName} for ${target}. Reinstall tensorlake without omitting optional dependencies, and install dependencies on the machine where they will run.`,\n      { cause },\n    );\n  }\n  return require(packageEntry) as T;\n}\n","import path from \"node:path\";\nimport os from \"node:os\";\nimport { existsSync, mkdtempSync, rmSync } from \"node:fs\";\nimport { parseArgs } from \"node:util\";\nimport { CloudClient } from \"./cloud-client.js\";\nimport type { SandboxTemplate } from \"./cloud-models.js\";\nimport { Image, ImageBuildOperationType, dockerfileContent } from \"./image.js\";\nimport type { ImageBuildOperation } from \"./image.js\";\nimport { loadNative } from \"./native-binding.js\";\n\n/**\n * Sandbox-image build engine.\n *\n * Renders the source to a Dockerfile (for `Image` inputs) and hands the\n * Dockerfile path/text + context to the Rust core via the platform-specific native binding,\n * which parses, validates, materializes, and registers the image. The Rust\n * core owns parsing and the warnings for instructions that run during the\n * build but have no effect when a sandbox runs from the image\n * (`ONBUILD`/`SHELL`/`EXPOSE`/`HEALTHCHECK`/`LABEL`/`STOPSIGNAL`/`VOLUME`).\n */\n\nexport interface CreateSandboxImageOptions {\n  registeredName?: string;\n  cpus?: number;\n  memoryMb?: number;\n  diskMb?: number;\n  builderDiskMb?: number;\n  isPublic?: boolean;\n  /**\n   * Build context directory for an `Image` source, used exactly like\n   * `docker build <contextDir>`: it is uploaded as-is and COPY/ADD sources\n   * resolve relative to it. Required when the image has COPY/ADD ops that read\n   * host files — building without it then throws. When the image has no such\n   * ops it may be omitted, and an empty context (just the generated Dockerfile)\n   * is uploaded so cwd is not archived. Ignored when the source is a Dockerfile\n   * path (the Dockerfile's parent directory is used instead).\n   */\n  contextDir?: string;\n  /**\n   * Use Docker/BuildKit max compatibility mode (build is slower and uses more\n   * memory and disk space on builder sandbox).\n   */\n  dockerCompat?: boolean;\n  /**\n   * Print build progress to stderr. Ignored when an explicit `emit` is\n   * passed via `deps`. Defaults to false — `createSandboxImage` is silent\n   * by default when invoked programmatically (e.g. `Image.build()`).\n   */\n  verbose?: boolean;\n}\n\nexport interface ImportSandboxImageOptions {\n  /**\n   * Name to register the image under. Defaults to the image reference's last\n   * path segment with any tag/digest stripped (e.g. `pytorch/pytorch:2.4.1`\n   * -> `pytorch`).\n   */\n  registeredName?: string;\n  cpus?: number;\n  memoryMb?: number;\n  diskMb?: number;\n  builderDiskMb?: number;\n  isPublic?: boolean;\n  /**\n   * Use Docker/BuildKit max compatibility mode (import is slower and uses more\n   * memory and disk space on builder sandbox).\n   */\n  dockerCompat?: boolean;\n  /**\n   * Print build progress to stderr. Ignored when an explicit `emit` is\n   * passed via `deps`. Defaults to false.\n   */\n  verbose?: boolean;\n}\n\nexport type SandboxImageSource = string | Image;\n\nexport interface CreateSandboxImageDeps {\n  emit?: (event: Record<string, unknown>) => void;\n  /** @internal Standalone CLI entry points allow PAT auth; SDK callers do not. */\n  _allowPat?: boolean;\n}\n\n// --- Native binding loader -------------------------------------------------\n\n/** Auth/context + resource fields shared by the build and import bindings. */\ninterface NativeBindingCommonOptions {\n  apiUrl: string;\n  bearerToken: string;\n  registeredName?: string | undefined | null;\n  diskMb?: number | undefined | null;\n  builderDiskMb?: number | undefined | null;\n  cpus?: number | undefined | null;\n  memoryMb?: number | undefined | null;\n  isPublic?: boolean | undefined | null;\n  organizationId?: string | undefined | null;\n  projectId?: string | undefined | null;\n  namespace?: string | undefined | null;\n  useScopeHeaders?: boolean | undefined | null;\n  userAgent?: string | undefined | null;\n  dockerCompat?: boolean | undefined | null;\n}\n\ninterface NativeBindingOptions extends NativeBindingCommonOptions {\n  dockerfilePath: string;\n  dockerfileText?: string | undefined | null;\n  contextDir?: string | undefined | null;\n}\n\ninterface NativeBindingImportOptions extends NativeBindingCommonOptions {\n  imageReference: string;\n}\n\ninterface NativeBindingEvent {\n  eventType: string;\n  stream?: string | undefined | null;\n  message: string;\n}\n\ninterface NativeBinding {\n  buildSandboxImage(\n    options: NativeBindingOptions,\n    emit?: ((event: NativeBindingEvent) => void) | null | undefined,\n  ): Promise<string>;\n  importSandboxImage(\n    options: NativeBindingImportOptions,\n    emit?: ((event: NativeBindingEvent) => void) | null | undefined,\n  ): Promise<string>;\n}\n\nlet cachedNativeBinding: NativeBinding | undefined;\nlet cachedNativeBindingError: Error | undefined;\n\nfunction loadNativeBinding(): NativeBinding {\n  if (cachedNativeBinding) return cachedNativeBinding;\n  if (cachedNativeBindingError) throw cachedNativeBindingError;\n  try {\n    cachedNativeBinding = loadNative<NativeBinding>();\n    return cachedNativeBinding;\n  } catch (error) {\n    cachedNativeBindingError =\n      error instanceof Error ? error : new Error(String(error));\n    throw cachedNativeBindingError;\n  }\n}\n\n/** Test seam: replace the native binding with a stub. */\nexport function __setNativeBindingForTest(binding: NativeBinding | undefined): void {\n  cachedNativeBinding = binding;\n  cachedNativeBindingError = undefined;\n}\n\n// --- Build context ---------------------------------------------------------\n\nexport interface BuildContext {\n  apiUrl: string;\n  apiKey?: string;\n  personalAccessToken?: string;\n  namespace: string;\n  organizationId?: string;\n  projectId?: string;\n  debug: boolean;\n}\n\nfunction nonEmpty(value: string | undefined): string | undefined {\n  return value && value.length > 0 ? value : undefined;\n}\n\nexport function buildContextFromEnv(): BuildContext {\n  const debugRaw = (process.env.TENSORLAKE_DEBUG ?? \"\").toLowerCase();\n  const debug = [\"1\", \"true\", \"yes\", \"on\"].includes(debugRaw);\n  return {\n    apiUrl: nonEmpty(process.env.TENSORLAKE_API_URL) ?? \"https://api.tensorlake.ai\",\n    apiKey: nonEmpty(process.env.TENSORLAKE_API_KEY),\n    personalAccessToken: nonEmpty(process.env.TENSORLAKE_PAT),\n    namespace: nonEmpty(process.env.INDEXIFY_NAMESPACE) ?? \"default\",\n    organizationId: nonEmpty(process.env.TENSORLAKE_ORGANIZATION_ID),\n    projectId: nonEmpty(process.env.TENSORLAKE_PROJECT_ID),\n    debug,\n  };\n}\n\n// --- Default-name helper ---------------------------------------------------\n\nconst DEFAULT_IMAGE_NAME = \"default\";\n\nfunction defaultRegisteredName(dockerfilePath: string): string {\n  const parsed = path.parse(dockerfilePath);\n  if (parsed.name.toLowerCase() === \"dockerfile\") {\n    const parentName = path.basename(path.dirname(dockerfilePath)).trim();\n    return parentName || \"sandbox-image\";\n  }\n  return parsed.name || \"sandbox-image\";\n}\n\n/**\n * Mirror the Rust core's default name derivation for image imports: the last\n * path segment of the reference with any tag/digest stripped\n * (e.g. `pytorch/pytorch:2.4.1` -> `pytorch`, `ghcr.io/org/app@sha256:...`\n * -> `app`).\n */\nfunction defaultRegisteredNameFromImage(imageReference: string): string {\n  const withoutDigest = imageReference.split(\"@\", 1)[0] ?? imageReference;\n  const lastSegment = withoutDigest.split(\"/\").pop() ?? withoutDigest;\n  const colonIndex = lastSegment.lastIndexOf(\":\");\n  const name =\n    colonIndex > 0 && colonIndex < lastSegment.length - 1\n      ? lastSegment.slice(0, colonIndex)\n      : lastSegment;\n  return name || \"imported-image\";\n}\n\n// --- Emit helpers ----------------------------------------------------------\n\nfunction noopEmit(_event: Record<string, unknown>): void {}\n\nfunction stderrEmit(event: Record<string, unknown>): void {\n  const message = typeof event.message === \"string\" ? event.message : \"\";\n  const type = typeof event.type === \"string\" ? event.type : \"\";\n  if (type === \"build_log\") {\n    const stream = typeof event.stream === \"string\" ? event.stream : \"stdout\";\n    process.stderr.write(`[${stream}] ${message}\\n`);\n  } else if (message) {\n    process.stderr.write(`[${type}] ${message}\\n`);\n  }\n}\n\nfunction ndjsonStdoutEmit(event: Record<string, unknown>): void {\n  process.stdout.write(`${JSON.stringify(event)}\\n`);\n}\n\nfunction eventToEmitDict(event: NativeBindingEvent): Record<string, unknown> {\n  const out: Record<string, unknown> = {\n    type: event.eventType,\n    message: event.message,\n  };\n  if (event.stream != null) out.stream = event.stream;\n  return out;\n}\n\n/**\n * True when a `RUN` op bind-mounts the build context (reads host files).\n * A BuildKit `RUN --mount=type=bind` reads from the build context unless it\n * mounts `from=<stage/image>`. `bind` is the default mount type, so a mount\n * with no explicit `type` counts too. Other mount types\n * (`cache`/`tmpfs`/`secret`/`ssh`) don't read the build context.\n */\nfunction runOpMountsContext(op: ImageBuildOperation): boolean {\n  if (op.type !== ImageBuildOperationType.RUN) {\n    return false;\n  }\n  const mount = op.options.mount;\n  if (mount == null || mount === \"\") {\n    return false;\n  }\n  const fields: Record<string, string> = {};\n  for (const token of mount.split(\",\")) {\n    const eq = token.indexOf(\"=\");\n    const key = (eq === -1 ? token : token.slice(0, eq)).trim();\n    const value = eq === -1 ? \"\" : token.slice(eq + 1).trim();\n    fields[key] = value;\n  }\n  if ((fields.type ?? \"bind\") !== \"bind\") {\n    return false;\n  }\n  return !(\"from\" in fields);\n}\n\n/**\n * True when a build op reads files from the host build context.\n * `COPY`/`ADD` with host sources need a context; a `RUN` with a\n * `--mount=type=bind` (the default type) reads it too. `COPY --from=<stage>`,\n * remote `ADD <url>`, `from=` bind mounts, and non-bind mounts don't.\n */\nfunction opReferencesHostFiles(op: ImageBuildOperation): boolean {\n  if (op.type === ImageBuildOperationType.RUN) {\n    return runOpMountsContext(op);\n  }\n  if (\n    op.type !== ImageBuildOperationType.COPY &&\n    op.type !== ImageBuildOperationType.ADD\n  ) {\n    return false;\n  }\n  if (op.options.from != null) {\n    return false;\n  }\n  if (\n    op.type === ImageBuildOperationType.ADD &&\n    (op.args[0].startsWith(\"http://\") || op.args[0].startsWith(\"https://\"))\n  ) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * True if the image has ops that read files from the host (COPY/ADD host\n * sources, or a RUN bind mount). Such builds need a build context to resolve\n * those sources, so the caller must pass `contextDir` (mirroring\n * `docker build <context>`).\n */\nfunction imageRequiresContext(image: Image): boolean {\n  return image.buildOperations.some(opReferencesHostFiles);\n}\n\n// --- Public API ------------------------------------------------------------\n\nexport async function createSandboxImage(\n  source: SandboxImageSource,\n  options: CreateSandboxImageOptions = {},\n  deps: CreateSandboxImageDeps = {},\n): Promise<Record<string, unknown>> {\n  const emit = deps.emit ?? (options.verbose ? stderrEmit : noopEmit);\n  const context = buildContextFromEnv();\n\n  let dockerfilePath: string;\n  let dockerfileText: string | undefined;\n  let nativeContextDir: string | undefined;\n  let effectiveName: string;\n  // Throwaway empty build context created when an Image build has no explicit\n  // contextDir. Removed in the finally below.\n  let tempContextDir: string | undefined;\n\n  if (source instanceof Image) {\n    if (!source.baseImage) {\n      throw new Error(\"Image must have a baseImage to build\");\n    }\n    // With an explicit contextDir we upload that directory as-is, like\n    // `docker build <dir>`. Without one, an image that reads host files via\n    // COPY/ADD can't be built (there is no context to resolve them against);\n    // images without such ops get an empty context (just the Dockerfile) so\n    // the whole cwd is not archived.\n    let resolvedContext: string;\n    if (options.contextDir != null) {\n      resolvedContext = path.resolve(options.contextDir);\n    } else if (imageRequiresContext(source)) {\n      throw new Error(\n        \"This image reads files from the host (via COPY/ADD or a RUN bind \" +\n          \"mount), so it needs a build context. Pass `contextDir` pointing at \" +\n          \"the directory that contains those sources; they resolve relative \" +\n          \"to it, like `docker build <contextDir>`.\",\n      );\n    } else {\n      tempContextDir = mkdtempSync(path.join(os.tmpdir(), \"tl-build-context-\"));\n      resolvedContext = tempContextDir;\n    }\n    dockerfilePath = path.join(resolvedContext, \"Dockerfile\");\n    let text = dockerfileContent(source);\n    if (!text.endsWith(\"\\n\")) text += \"\\n\";\n    dockerfileText = text;\n    nativeContextDir = resolvedContext;\n    effectiveName = options.registeredName ?? source.name;\n  } else if (typeof source === \"string\") {\n    const resolvedPath = path.resolve(source);\n    if (!existsSync(resolvedPath)) {\n      throw new Error(`Dockerfile not found: ${source}`);\n    }\n    dockerfilePath = resolvedPath;\n    dockerfileText = undefined;\n    nativeContextDir = undefined;\n    effectiveName =\n      options.registeredName ?? defaultRegisteredName(resolvedPath);\n  } else {\n    throw new TypeError(\n      `source must be an Image or a Dockerfile path, got ${typeof source}`,\n    );\n  }\n\n  try {\n    if (effectiveName === DEFAULT_IMAGE_NAME) {\n      console.warn(\n        `Building sandbox image with the default name \"${DEFAULT_IMAGE_NAME}\". ` +\n          \"Pass `registeredName` or `Image({ name })` to avoid collisions \" +\n          \"with other default-named images in this project.\",\n      );\n    }\n\n    const usePat = deps._allowPat === true && context.apiKey == null;\n    const bearerToken = context.apiKey ?? (usePat ? context.personalAccessToken : undefined);\n    if (!bearerToken) {\n      if (context.personalAccessToken && !deps._allowPat) {\n        throw new Error(\n          \"Sandbox image SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n        );\n      }\n      throw new Error(\n        deps._allowPat\n          ? \"Missing TENSORLAKE_API_KEY or TENSORLAKE_PAT credentials.\"\n          : \"Missing TENSORLAKE_API_KEY credentials.\",\n      );\n    }\n\n    emit({ type: \"status\", message: `Building image '${effectiveName}'...` });\n\n    const binding = loadNativeBinding();\n    let emitError: unknown;\n    const resultJson = await binding.buildSandboxImage(\n      {\n        apiUrl: context.apiUrl,\n        bearerToken,\n        dockerfilePath,\n        registeredName: effectiveName,\n        diskMb: options.diskMb,\n        builderDiskMb: options.builderDiskMb,\n        cpus: options.cpus,\n        memoryMb: options.memoryMb,\n        isPublic: options.isPublic ?? false,\n        organizationId: usePat ? context.organizationId : undefined,\n        projectId: usePat ? context.projectId : undefined,\n        namespace: context.namespace,\n        useScopeHeaders: usePat,\n        userAgent: undefined,\n        dockerCompat: options.dockerCompat ?? false,\n        dockerfileText,\n        contextDir: nativeContextDir,\n      },\n      (event) => {\n        try {\n          emit(eventToEmitDict(event));\n        } catch (error) {\n          emitError ??= error;\n        }\n      },\n    );\n\n    if (emitError != null) {\n      throw emitError;\n    }\n\n    let result: Record<string, unknown> = {};\n    if (resultJson.trim().length > 0) {\n      result = JSON.parse(resultJson) as Record<string, unknown>;\n    }\n    emit({\n      type: \"image_registered\",\n      name: effectiveName,\n      image_id:\n        (typeof result.id === \"string\" && result.id) ||\n        (typeof result.templateId === \"string\" && result.templateId) ||\n        \"\",\n    });\n    emit({ type: \"done\" });\n    return result;\n  } finally {\n    if (tempContextDir != null) {\n      rmSync(tempContextDir, { recursive: true, force: true });\n    }\n  }\n}\n\n/**\n * Import a registry image directly into a sandbox image — no Docker.\n *\n * Unlike {@link createSandboxImage}, there is no Dockerfile and no build\n * context: the builder pulls the referenced image's layers and applies them\n * straight into the rootfs (via `oci-image-to-ext4`), bypassing the Docker\n * daemon entirely. This is the programmatic backend for the\n * `tl sbx image import` CLI command. The import is always a fresh base from\n * the registry — the reference is never resolved against the template\n * registry.\n */\nexport async function importSandboxImage(\n  imageReference: string,\n  options: ImportSandboxImageOptions = {},\n  deps: CreateSandboxImageDeps = {},\n): Promise<Record<string, unknown>> {\n  const emit = deps.emit ?? (options.verbose ? stderrEmit : noopEmit);\n\n  if (typeof imageReference !== \"string\" || imageReference.trim().length === 0) {\n    throw new Error(\"image reference to import must not be empty\");\n  }\n  const reference = imageReference.trim();\n\n  const context = buildContextFromEnv();\n  const effectiveName =\n    options.registeredName ?? defaultRegisteredNameFromImage(reference);\n\n  if (effectiveName === DEFAULT_IMAGE_NAME) {\n    console.warn(\n      `Importing sandbox image with the default name \"${DEFAULT_IMAGE_NAME}\". ` +\n        \"Pass `registeredName` to avoid collisions with other default-named \" +\n        \"images in this project.\",\n    );\n  }\n\n  const usePat = deps._allowPat === true && context.apiKey == null;\n  const bearerToken = context.apiKey ?? (usePat ? context.personalAccessToken : undefined);\n  if (!bearerToken) {\n    if (context.personalAccessToken && !deps._allowPat) {\n      throw new Error(\n        \"Sandbox image SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n      );\n    }\n    throw new Error(\n      deps._allowPat\n        ? \"Missing TENSORLAKE_API_KEY or TENSORLAKE_PAT credentials.\"\n        : \"Missing TENSORLAKE_API_KEY credentials.\",\n    );\n  }\n\n  emit({\n    type: \"status\",\n    message: `Importing image '${reference}' as '${effectiveName}'...`,\n  });\n\n  const binding = loadNativeBinding();\n  let emitError: unknown;\n  const resultJson = await binding.importSandboxImage(\n    {\n      apiUrl: context.apiUrl,\n      bearerToken,\n      imageReference: reference,\n      registeredName: effectiveName,\n      diskMb: options.diskMb,\n      builderDiskMb: options.builderDiskMb,\n      cpus: options.cpus,\n      memoryMb: options.memoryMb,\n      isPublic: options.isPublic ?? false,\n      organizationId: usePat ? context.organizationId : undefined,\n      projectId: usePat ? context.projectId : undefined,\n      namespace: context.namespace,\n      useScopeHeaders: usePat,\n      userAgent: undefined,\n      dockerCompat: options.dockerCompat ?? false,\n    },\n    (event) => {\n      try {\n        emit(eventToEmitDict(event));\n      } catch (error) {\n        emitError ??= error;\n      }\n    },\n  );\n\n  if (emitError != null) {\n    throw emitError;\n  }\n\n  let result: Record<string, unknown> = {};\n  if (resultJson.trim().length > 0) {\n    result = JSON.parse(resultJson) as Record<string, unknown>;\n  }\n  emit({\n    type: \"image_registered\",\n    name: effectiveName,\n    image_id:\n      (typeof result.id === \"string\" && result.id) ||\n      (typeof result.templateId === \"string\" && result.templateId) ||\n      \"\",\n  });\n  emit({ type: \"done\" });\n  return result;\n}\n\nexport async function deleteSandboxImage(imageName: string): Promise<void> {\n  if (typeof imageName !== \"string\" || imageName.length === 0) {\n    throw new TypeError(\"imageName must be a non-empty string\");\n  }\n\n  const context = buildContextFromEnv();\n  const bearerToken = context.apiKey;\n  if (!bearerToken) {\n    if (context.personalAccessToken) {\n      throw new Error(\n        \"Sandbox image SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n      );\n    }\n    throw new Error(\"Missing TENSORLAKE_API_KEY credentials.\");\n  }\n\n  const client = new CloudClient({\n    apiUrl: context.apiUrl,\n    apiKey: bearerToken,\n    namespace: context.namespace,\n  });\n  try {\n    await client.deleteSandboxImage(imageName);\n  } finally {\n    client.close();\n  }\n}\n\n/**\n * Look up a registered sandbox image by its registered name.\n *\n * Returns the registered sandbox template, or `null` if no image with that\n * name exists. Uses the same environment-based Tensorlake auth as\n * `createSandboxImage`. Ingress derives project scope from the API key.\n */\nexport async function findSandboxImageByName(\n  imageName: string,\n): Promise<SandboxTemplate | null> {\n  if (typeof imageName !== \"string\" || imageName.length === 0) {\n    throw new TypeError(\"imageName must be a non-empty string\");\n  }\n\n  const context = buildContextFromEnv();\n  const bearerToken = context.apiKey;\n  if (!bearerToken) {\n    if (context.personalAccessToken) {\n      throw new Error(\n        \"Sandbox image SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n      );\n    }\n    throw new Error(\"Missing TENSORLAKE_API_KEY credentials.\");\n  }\n\n  const client = new CloudClient({\n    apiUrl: context.apiUrl,\n    apiKey: bearerToken,\n    namespace: context.namespace,\n  });\n  try {\n    return await client.findSandboxImageByName(imageName);\n  } finally {\n    client.close();\n  }\n}\n\n/**\n * List all registered sandbox images for the current project.\n *\n * Returns the registered sandbox templates (each with `id`, `name`,\n * `snapshotId`, `public`, etc.). Uses the same environment-based Tensorlake\n * auth as `createSandboxImage`. Ingress derives project scope from the API key.\n */\nexport async function listSandboxImages(): Promise<SandboxTemplate[]> {\n  const context = buildContextFromEnv();\n  const bearerToken = context.apiKey;\n  if (!bearerToken) {\n    if (context.personalAccessToken) {\n      throw new Error(\n        \"Sandbox image SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n      );\n    }\n    throw new Error(\"Missing TENSORLAKE_API_KEY credentials.\");\n  }\n\n  const client = new CloudClient({\n    apiUrl: context.apiUrl,\n    apiKey: bearerToken,\n    namespace: context.namespace,\n  });\n  try {\n    return await client.listSandboxImages();\n  } finally {\n    client.close();\n  }\n}\n\nexport async function runCreateSandboxImageCli(argv = process.argv.slice(2)) {\n  const parsed = parseArgs({\n    args: argv,\n    allowPositionals: true,\n    options: {\n      name: { type: \"string\", short: \"n\" },\n      cpus: { type: \"string\" },\n      memory: { type: \"string\" },\n      disk_mb: { type: \"string\" },\n      builder_disk_mb: { type: \"string\" },\n      docker_compat: { type: \"boolean\", default: false },\n      public: { type: \"boolean\", default: false },\n    },\n  });\n\n  const dockerfilePath = parsed.positionals[0];\n  if (!dockerfilePath) {\n    throw new Error(\n      \"Usage: tensorlake-create-sandbox-image <dockerfile_path> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]\",\n    );\n  }\n\n  const cpus =\n    parsed.values.cpus != null ? Number(parsed.values.cpus) : undefined;\n  const memoryMb =\n    parsed.values.memory != null ? Number(parsed.values.memory) : undefined;\n  const diskMb =\n    parsed.values.disk_mb != null ? Number(parsed.values.disk_mb) : undefined;\n  const builderDiskMb =\n    parsed.values.builder_disk_mb != null\n      ? Number(parsed.values.builder_disk_mb)\n      : undefined;\n  if (cpus != null && !Number.isFinite(cpus)) {\n    throw new Error(`Invalid --cpus value: ${parsed.values.cpus}`);\n  }\n  if (memoryMb != null && !Number.isInteger(memoryMb)) {\n    throw new Error(`Invalid --memory value: ${parsed.values.memory}`);\n  }\n  if (diskMb != null && !Number.isInteger(diskMb)) {\n    throw new Error(`Invalid --disk_mb value: ${parsed.values.disk_mb}`);\n  }\n  if (builderDiskMb != null && !Number.isInteger(builderDiskMb)) {\n    throw new Error(\n      `Invalid --builder_disk_mb value: ${parsed.values.builder_disk_mb}`,\n    );\n  }\n\n  await createSandboxImage(\n    dockerfilePath,\n    {\n      registeredName: parsed.values.name,\n      cpus,\n      memoryMb,\n      diskMb,\n      builderDiskMb,\n      dockerCompat: parsed.values.docker_compat,\n      isPublic: parsed.values.public,\n    },\n    { emit: ndjsonStdoutEmit, _allowPat: true },\n  );\n}\n\nexport async function runImportSandboxImageCli(argv = process.argv.slice(2)) {\n  const parsed = parseArgs({\n    args: argv,\n    allowPositionals: true,\n    options: {\n      name: { type: \"string\", short: \"n\" },\n      cpus: { type: \"string\" },\n      memory: { type: \"string\" },\n      disk_mb: { type: \"string\" },\n      builder_disk_mb: { type: \"string\" },\n      docker_compat: { type: \"boolean\", default: false },\n      public: { type: \"boolean\", default: false },\n    },\n  });\n\n  const imageReference = parsed.positionals[0];\n  if (!imageReference) {\n    throw new Error(\n      \"Usage: tensorlake-import-sandbox-image <image_reference> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]\",\n    );\n  }\n\n  const cpus =\n    parsed.values.cpus != null ? Number(parsed.values.cpus) : undefined;\n  const memoryMb =\n    parsed.values.memory != null ? Number(parsed.values.memory) : undefined;\n  const diskMb =\n    parsed.values.disk_mb != null ? Number(parsed.values.disk_mb) : undefined;\n  const builderDiskMb =\n    parsed.values.builder_disk_mb != null\n      ? Number(parsed.values.builder_disk_mb)\n      : undefined;\n  if (cpus != null && !Number.isFinite(cpus)) {\n    throw new Error(`Invalid --cpus value: ${parsed.values.cpus}`);\n  }\n  if (memoryMb != null && !Number.isInteger(memoryMb)) {\n    throw new Error(`Invalid --memory value: ${parsed.values.memory}`);\n  }\n  if (diskMb != null && !Number.isInteger(diskMb)) {\n    throw new Error(`Invalid --disk_mb value: ${parsed.values.disk_mb}`);\n  }\n  if (builderDiskMb != null && !Number.isInteger(builderDiskMb)) {\n    throw new Error(\n      `Invalid --builder_disk_mb value: ${parsed.values.builder_disk_mb}`,\n    );\n  }\n\n  await importSandboxImage(\n    imageReference,\n    {\n      registeredName: parsed.values.name,\n      cpus,\n      memoryMb,\n      diskMb,\n      builderDiskMb,\n      dockerCompat: parsed.values.docker_compat,\n      isPublic: parsed.values.public,\n    },\n    { emit: ndjsonStdoutEmit, _allowPat: true },\n  );\n}\n","import { randomUUID } from \"node:crypto\";\n\n// Erased at runtime — safe despite the module cycle with sandbox-image.ts,\n// which imports Image from here.\nimport type { CreateSandboxImageOptions } from \"./sandbox-image.js\";\n\nconst DEFAULT_IMAGE_NAME = \"default\";\n\nexport const ImageBuildOperationType = {\n  ADD: \"ADD\",\n  COPY: \"COPY\",\n  ENV: \"ENV\",\n  RUN: \"RUN\",\n  WORKDIR: \"WORKDIR\",\n} as const;\n\nexport type ImageBuildOperationType =\n  (typeof ImageBuildOperationType)[keyof typeof ImageBuildOperationType];\n\nexport interface ImageBuildOperation {\n  type: ImageBuildOperationType;\n  args: string[];\n  options: Record<string, string>;\n}\n\nexport interface ImageOptions {\n  name?: string;\n  tag?: string;\n  baseImage?: string | null;\n}\n\nfunction cloneOperation(op: ImageBuildOperation): ImageBuildOperation {\n  return {\n    type: op.type,\n    args: [...op.args],\n    options: { ...op.options },\n  };\n}\n\nexport class Image {\n  readonly _id: string;\n  readonly _name: string;\n  readonly _tag: string;\n  readonly _baseImage: string | null;\n  readonly _buildOperations: ImageBuildOperation[];\n\n  constructor();\n  constructor(name: string, tag?: string, baseImage?: string | null);\n  constructor(options: ImageOptions);\n  constructor(\n    nameOrOptions: string | ImageOptions = {},\n    tag = \"latest\",\n    baseImage: string | null = null,\n  ) {\n    this._id = randomUUID();\n    this._buildOperations = [];\n\n    if (typeof nameOrOptions === \"string\") {\n      this._name = nameOrOptions;\n      this._tag = tag;\n      this._baseImage = baseImage;\n      return;\n    }\n\n    this._name = nameOrOptions.name ?? DEFAULT_IMAGE_NAME;\n    this._tag = nameOrOptions.tag ?? \"latest\";\n    this._baseImage = nameOrOptions.baseImage ?? null;\n  }\n\n  get name(): string {\n    return this._name;\n  }\n\n  get tag(): string {\n    return this._tag;\n  }\n\n  get baseImage(): string | null {\n    return this._baseImage;\n  }\n\n  get buildOperations(): ImageBuildOperation[] {\n    return this._buildOperations.map(cloneOperation);\n  }\n\n  add(\n    src: string,\n    dest: string,\n    options: Record<string, string> | undefined = undefined,\n  ): this {\n    return this._addOperation({\n      type: ImageBuildOperationType.ADD,\n      args: [src, dest],\n      options: options == null ? {} : { ...options },\n    });\n  }\n\n  copy(\n    src: string,\n    dest: string,\n    options: Record<string, string> | undefined = undefined,\n  ): this {\n    return this._addOperation({\n      type: ImageBuildOperationType.COPY,\n      args: [src, dest],\n      options: options == null ? {} : { ...options },\n    });\n  }\n\n  env(key: string, value: string): this {\n    return this._addOperation({\n      type: ImageBuildOperationType.ENV,\n      args: [key, value],\n      options: {},\n    });\n  }\n\n  run(\n    commands: string | string[],\n    options: Record<string, string> | undefined = undefined,\n  ): this {\n    return this._addOperation({\n      type: ImageBuildOperationType.RUN,\n      args: Array.isArray(commands) ? [...commands] : [commands],\n      options: options == null ? {} : { ...options },\n    });\n  }\n\n  workdir(directory: string): this {\n    return this._addOperation({\n      type: ImageBuildOperationType.WORKDIR,\n      args: [directory],\n      options: {},\n    });\n  }\n\n  /**\n   * Build this image as a sandbox template and register it.\n   *\n   * Materializes the image in a build sandbox, snapshots the filesystem,\n   * and registers the snapshot as a named sandbox template.\n   */\n  async build(\n    options: CreateSandboxImageOptions = {},\n  ): Promise<Record<string, unknown>> {\n    const { createSandboxImage } = await import(\"./sandbox-image.js\");\n    return createSandboxImage(this, options);\n  }\n\n  private _addOperation(op: ImageBuildOperation): this {\n    this._buildOperations.push(op);\n    return this;\n  }\n}\n\nfunction renderOptions(options: Record<string, string>): string {\n  const entries = Object.entries(options);\n  if (entries.length === 0) {\n    return \"\";\n  }\n  return ` ${entries.map(([key, value]) => `--${key}=${value}`).join(\" \")}`;\n}\n\nfunction renderBuildOp(op: ImageBuildOperation): string {\n  const options = renderOptions(op.options);\n  if (op.type === ImageBuildOperationType.ENV) {\n    return `ENV${options} ${op.args[0]}=${JSON.stringify(op.args[1])}`;\n  }\n  return `${op.type}${options} ${op.args.join(\" \")}`;\n}\n\nexport function dockerfileContent(image: Image): string {\n  const lines = image.baseImage == null ? [] : [`FROM ${image.baseImage}`];\n  lines.push(...image.buildOperations.map((op) => renderBuildOp(op)));\n  return lines.join(\"\\n\");\n}\n","export {\n  registerApplication,\n  registerFunction,\n  retries,\n  FunctionFuture as Future,\n  type ApplicationCapability,\n  type ApplicationOptions,\n  type FunctionOptions,\n  type SimpleApplicationOptions,\n  type SimpleFunctionOptions,\n  type RegisteredFunction,\n  type TailCall,\n  type WaitOptions,\n  type WaitResult,\n} from \"./function.js\";\nexport { schema, type Schema, type Parameter, type Infer, type ParameterValues } from \"./schema.js\";\nexport { File } from \"./file.js\";\nexport { HttpBody } from \"./http-body.js\";\nexport { Headers, type HeadersInit } from \"./headers.js\";\nexport { Image } from \"../image.js\";\nexport { SDK_VERSION } from \"../defaults.js\";\nexport { RequestContext, type RequestContextValue } from \"./context.js\";\nexport { runLocal, LocalRequest } from \"./local.js\";\nexport {\n  runRemote,\n  remoteOptions,\n  RemoteRequest,\n  type RemoteOptions,\n} from \"./remote.js\";\nexport {\n  TensorlakeApplicationError,\n  SDKUsageError,\n  SerializationError,\n  DeserializationError,\n  FunctionError,\n  TimeoutError,\n  RequestError,\n  ReplayMismatchError,\n} from \"./errors.js\";\nexport {\n  createApplicationManifest,\n  createApplicationManifests,\n  createCodeManifest,\n  decodeDescriptor,\n  type ApplicationManifest,\n  type FunctionManifest,\n  type CodeManifest,\n} from \"./manifest.js\";\nexport { getApplications, getFunctions, getFunction } from \"./registry.js\";\n","import { AsyncLocalStorage, executionAsyncId } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Image } from \"../image.js\";\nimport { SDKUsageError } from \"./errors.js\";\nimport type { Parameter, ParameterValues, Schema } from \"./schema.js\";\nimport { schema, validateWithSchema } from \"./schema.js\";\nimport { registerDefinition } from \"./registry.js\";\n\nexport interface Retries {\n  maxRetries: number;\n}\n\nexport function retries(options: Retries): Retries {\n  if (\n    typeof options !== \"object\"\n    || options == null\n    || !Number.isInteger(options.maxRetries)\n    || options.maxRetries < 0\n    || options.maxRetries > 10\n  ) {\n    throw new SDKUsageError(\"maxRetries must be an integer between 0 and 10\");\n  }\n  return Object.freeze({ ...options });\n}\n\nexport type Region = \"us-east-1\" | \"eu-west-1\";\n\nexport type ApplicationCapability = \"unauthenticated_requests\";\n\nexport interface FunctionOptions<\n  P extends readonly Parameter<unknown>[],\n  R,\n> {\n  name?: string;\n  parameters: P;\n  returns: Schema<R>;\n  description?: string;\n  cpu?: number;\n  memory?: number;\n  ephemeralDisk?: number;\n  gpu?: string | string[] | null;\n  timeout?: number;\n  image?: Image;\n  secrets?: string[];\n  retries?: Retries;\n  region?: Region;\n  warmContainers?: number;\n  minContainers?: number;\n  maxContainers?: number;\n}\n\nexport interface ApplicationOptions<\n  P extends readonly Parameter<unknown>[],\n  R,\n> extends FunctionOptions<P, R> {\n  tags?: Record<string, string>;\n  applicationRetries?: Retries;\n  allow?: readonly ApplicationCapability[];\n}\n\n/** Options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleFunctionOptions = Omit<\n  FunctionOptions<readonly Parameter<unknown>[], unknown>,\n  \"name\" | \"parameters\" | \"returns\"\n>;\n\n/** Application options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleApplicationOptions = Omit<\n  ApplicationOptions<readonly Parameter<unknown>[], unknown>,\n  \"name\" | \"parameters\" | \"returns\"\n>;\n\nexport interface NormalizedFunctionOptions {\n  description: string;\n  cpu: number;\n  memory: number;\n  ephemeralDisk: number;\n  gpu: string | string[] | null;\n  timeout: number;\n  image?: Image;\n  secrets: string[];\n  retries?: Retries;\n  region?: Region;\n  warmContainers?: number;\n  minContainers?: number;\n  maxContainers?: number;\n}\n\nexport interface ApplicationConfiguration {\n  tags: Record<string, string>;\n  retries: Retries;\n  allow: ApplicationCapability[];\n  version: string;\n}\n\nexport interface RegisteredDefinition {\n  readonly name: string;\n  readonly handler: (...args: unknown[]) => Promise<unknown>;\n  readonly parameters: readonly Parameter<unknown>[];\n  readonly returns: Schema<unknown>;\n  readonly options: NormalizedFunctionOptions;\n  readonly application?: ApplicationConfiguration;\n}\n\n// A string discriminator alone is valid user JSON and cannot safely identify\n// an SDK control-flow value. Symbol.for keeps the brand stable when the user\n// application and executor load separate copies of the SDK in one process.\nconst TAIL_CALL_BRAND: unique symbol = Symbol.for(\n  \"tensorlake.applications.tail-call.v1\",\n);\n\nexport interface TailCall<T> {\n  readonly [TAIL_CALL_BRAND]: true;\n  readonly kind: \"tensorlake-tail-call\";\n  readonly definition: RegisteredDefinition;\n  readonly args: readonly unknown[];\n  readonly _result?: T;\n}\n\nexport interface WaitOptions {\n  timeout?: number;\n  returnWhen?: \"all_completed\" | \"first_completed\" | \"first_failure\";\n}\n\nexport interface WaitResult<T> {\n  done: FunctionFuture<T>[];\n  notDone: FunctionFuture<T>[];\n}\n\nexport interface FunctionRuntime {\n  invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T>;\n  runFuture<T>(future: FunctionFuture<T>): Promise<T>;\n  wrapFutureWait?<T>(promise: Promise<T>): Promise<T>;\n  trackMixedPromiseRace?(\n    promise: Promise<unknown>,\n    producers?: readonly Promise<unknown>[],\n  ): void;\n  trackPromiseSettlement?(\n    promise: Promise<unknown>,\n    onSettled: () => void,\n  ): boolean;\n  trackDurablePromiseConsumption?(promise: Promise<unknown>): void;\n  runPromiseAggregateConstruction?<T>(callback: () => T): T;\n  reduce<T>(\n    definition: RegisteredDefinition,\n    items: readonly unknown[],\n    initial: unknown,\n    hasInitial: boolean,\n  ): Promise<T>;\n}\n\n// FunctionFuture observes durable promises to update its public completion\n// fields. That bookkeeping must not look like an application-level await to\n// the strict replay causality tracker. Symbol.for keeps the private observer\n// available when the application and executor use separate SDK bundles.\nexport const DURABLE_PROMISE_OBSERVER = Symbol.for(\n  \"tensorlake.applications.durable-promise-observer.v1\",\n);\n\n// SDK combinators must be able to compose durable promises without making\n// their private bookkeeping look like a user continuation. The aggregate\n// returned to user code is wrapped separately.\nexport const DURABLE_PROMISE_INTERNAL_THEN = Symbol.for(\n  \"tensorlake.applications.durable-promise-internal-then.v1\",\n);\n\ninterface ObservableDurablePromise<T> extends Promise<T> {\n  [DURABLE_PROMISE_OBSERVER]?: (\n    onfulfilled: (value: T) => void,\n    onrejected: (reason: unknown) => void,\n  ) => void;\n  [DURABLE_PROMISE_INTERNAL_THEN]?: <TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n  ) => Promise<TResult1 | TResult2>;\n}\n\n// The user application and function executor are separate bundles loaded into\n// one Node process. Store the runtime on globalThis so durable calls made by the\n// application SDK copy reach the executor SDK copy that installed the runtime.\nconst FUNCTION_RUNTIME_STORAGE_KEY = Symbol.for(\n  \"tensorlake.applications.function-runtime-storage.v1\",\n);\n\nconst PROMISE_INSTRUMENTED_KEY = Symbol.for(\n  \"tensorlake.applications.promise-instrumented.v3\",\n);\n\nconst PROMISE_THEN_INSTRUMENTED_KEY = Symbol.for(\n  \"tensorlake.applications.promise-then-instrumented.v1\",\n);\n\nconst DURABLE_THENABLE_REGISTRY_KEY = Symbol.for(\n  \"tensorlake.applications.durable-thenable-registry.v2\",\n);\n\nconst INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY = Symbol.for(\n  \"tensorlake.applications.internal-promise-aggregate-depth.v1\",\n);\n\ninterface DurableAssimilationRegistration {\n  active: boolean;\n  readonly detach: () => void;\n}\n\ninterface DurableThenableMetadata {\n  readonly aggregateExpectations: DurableAggregateExpectation[];\n  readonly provenanceExpectations: DurableProvenanceExpectation[];\n}\n\ninterface DurableThenableProvenance {\n  readonly metadata: DurableThenableMetadata;\n  readonly assimilation?: DurableAssimilationRegistration;\n  readonly detached?: true;\n}\n\ninterface DurableAggregateScope {\n  settled: boolean;\n  readonly metadata: Set<DurableThenableMetadata>;\n}\n\ninterface DurableAggregateExpectation {\n  readonly scope: DurableAggregateScope;\n  readonly creatorAsyncId: number;\n}\n\ninterface DurableProvenanceExpectation {\n  readonly value: object;\n  readonly creatorAsyncId: number;\n}\n\nexport interface DurableAssimilation {\n  finish(): void;\n  link<T extends object>(value: T): T;\n}\n\nlet futureCompletionCounter = 0;\n\nfunction runtimeStorage(): AsyncLocalStorage<FunctionRuntime> {\n  const target = globalThis as typeof globalThis & {\n    [FUNCTION_RUNTIME_STORAGE_KEY]?: AsyncLocalStorage<FunctionRuntime>;\n  };\n  target[FUNCTION_RUNTIME_STORAGE_KEY] ??= new AsyncLocalStorage<FunctionRuntime>();\n  return target[FUNCTION_RUNTIME_STORAGE_KEY];\n}\n\nexport function currentFunctionRuntime(): FunctionRuntime | undefined {\n  return runtimeStorage().getStore();\n}\n\nexport function runWithFunctionRuntime<T>(\n  runtime: FunctionRuntime,\n  callback: () => Promise<T>,\n): Promise<T> {\n  return runtimeStorage().run(runtime, callback);\n}\n\nexport class FunctionFuture<T> implements PromiseLike<T> {\n  readonly id = randomUUID();\n  readonly definition: RegisteredDefinition;\n  readonly args: readonly unknown[];\n  private promise?: Promise<T>;\n  private startDelaySeconds = 0;\n  private completionOrder?: number;\n  private failed = false;\n  exception?: unknown;\n  done = false;\n\n  constructor(definition: RegisteredDefinition, args: readonly unknown[]) {\n    this.definition = definition;\n    this.args = args;\n    registerDurableThenable(this);\n  }\n\n  run(): this {\n    if (this.promise != null) throw new SDKUsageError(`Future ${this.id} is already running`);\n    const runtime = currentFunctionRuntime();\n    const promise = runtime == null\n      ? executeHandler<T>(this.definition, this.args)\n      : runtime.runFuture(this);\n    // The future and its runtime promise are two views of the same durable\n    // operation. Sharing provenance lets Promise.resolve/fan-in wrappers keep\n    // the exact durable contender identity.\n    registerDurableThenable(promise, this);\n    this.promise = promise;\n    const onfulfilled = (value: T) => {\n      this.done = true;\n      this.completionOrder = futureCompletionCounter;\n      futureCompletionCounter += 1;\n      return value;\n    };\n    const onrejected = (error: unknown) => {\n      this.done = true;\n      this.failed = true;\n      this.exception = error;\n      this.completionOrder = futureCompletionCounter;\n      futureCompletionCounter += 1;\n    };\n    const observer = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_OBSERVER];\n    if (observer != null) {\n      observer.call(promise, onfulfilled, onrejected);\n    } else {\n      void promise.then(\n        (value) => {\n          onfulfilled(value);\n        },\n        (error) => {\n          onrejected(error);\n        },\n      );\n    }\n    // The completion observer handles rejection without changing `this.promise`,\n    // so result()/await still receive the original rejection while Node does not\n    // treat an intentionally unawaited future as an unhandled rejection.\n    return this;\n  }\n\n  runLater(delaySeconds: number): this {\n    if (!Number.isFinite(delaySeconds) || delaySeconds < 0) {\n      throw new SDKUsageError(\"Future delay must be a non-negative finite number\");\n    }\n    if (this.promise != null) {\n      throw new SDKUsageError(`Future ${this.id} is already running`);\n    }\n    this.startDelaySeconds = delaySeconds;\n    return this.run();\n  }\n\n  get delaySeconds(): number {\n    return this.startDelaySeconds;\n  }\n\n  result(): Promise<T> {\n    if (this.promise == null) this.run();\n    return this.promise as Promise<T>;\n  }\n\n  then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return this.result().then(onfulfilled, onrejected);\n  }\n\n  static wait<T>(futures: FunctionFuture<T>[], options: WaitOptions = {}): Promise<WaitResult<T>> {\n    const completion = FunctionFuture.waitForFutures(futures, options);\n    // Returning the runtime wrapper lets strict replay observe when user code\n    // awaits this aggregate promise. Merely creating a Future.wait remains\n    // fire-and-forget and must not trigger a mismatch.\n    return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n  }\n\n  private static async waitForFutures<T>(\n    futures: FunctionFuture<T>[],\n    options: WaitOptions,\n  ): Promise<WaitResult<T>> {\n    const returnWhen = options.returnWhen ?? \"all_completed\";\n    if (![\"all_completed\", \"first_completed\", \"first_failure\"].includes(returnWhen)) {\n      throw new SDKUsageError(`Unsupported Future.wait returnWhen value '${returnWhen}'`);\n    }\n    if (options.timeout != null && (!Number.isFinite(options.timeout) || options.timeout < 0)) {\n      throw new SDKUsageError(\"Future.wait timeout must be a non-negative finite number\");\n    }\n    futures.forEach((future) => {\n      if (future.promise == null) future.run();\n    });\n    const alreadyDone = futures.filter((future) => future.done);\n    if (\n      alreadyDone.length > 0\n      && (\n        returnWhen === \"first_completed\"\n        || (\n          returnWhen === \"first_failure\"\n          && alreadyDone.some((future) => future.failed)\n        )\n      )\n    ) {\n      return {\n        done: alreadyDone,\n        notDone: futures.filter((future) => !future.done),\n      };\n    }\n    const pending = futures.filter((future) => !future.done);\n    if (pending.length === 0) {\n      return { done: [...futures], notDone: [] };\n    }\n    let wait: Promise<FutureWaitOutcome<T>>;\n    if (returnWhen === \"all_completed\") {\n      wait = internalPromiseAll(\n        pending.map((future) => internalDurableThen(future.result(),\n          () => undefined,\n          () => undefined,\n        )),\n      ).then(() => ({ kind: \"all_completed\" }));\n    } else if (returnWhen === \"first_completed\") {\n      wait = internalPromiseRace(\n        pending.map((future) => internalDurableThen(future.result(),\n          () => ({ kind: \"cutoff\", future } as const),\n          () => ({ kind: \"cutoff\", future } as const),\n        )),\n      );\n    } else {\n      wait = new Promise((resolve) => {\n        let remaining = pending.length;\n        for (const future of pending) {\n          void internalDurableThen(\n            future.result(),\n            () => {\n              remaining -= 1;\n              if (remaining === 0) resolve({ kind: \"all_completed\" });\n            },\n            () => resolve({ kind: \"cutoff\", future }),\n          );\n        }\n      });\n    }\n    const outcome = await waitUntilOrTimeout(wait, options.timeout);\n    if (outcome.kind === \"cutoff\") {\n      const completionCutoff = outcome.future.completionOrder;\n      if (completionCutoff == null) {\n        throw new SDKUsageError(\"Future.wait winner has no completion order\");\n      }\n      const doneSet = new Set(alreadyDone);\n      for (const future of pending) {\n        if (\n          future.done\n          && future.completionOrder != null\n          && future.completionOrder <= completionCutoff\n        ) {\n          doneSet.add(future);\n        }\n      }\n      return {\n        done: futures.filter((future) => doneSet.has(future)),\n        notDone: futures.filter((future) => !doneSet.has(future)),\n      };\n    }\n    return {\n      done: futures.filter((future) => future.done),\n      notDone: futures.filter((future) => !future.done),\n    };\n  }\n}\n\ntype FutureWaitOutcome<T> =\n  | { kind: \"all_completed\" }\n  | { kind: \"cutoff\"; future: FunctionFuture<T> };\n\nasync function waitUntilOrTimeout<T>(\n  promise: Promise<T>,\n  timeoutSeconds?: number,\n): Promise<T | { kind: \"timeout\" }> {\n  if (timeoutSeconds == null) {\n    return promise;\n  }\n  let timer: NodeJS.Timeout | undefined;\n  try {\n    return await internalPromiseRace<T | { kind: \"timeout\" }>([\n      promise,\n      new Promise<{ kind: \"timeout\" }>((resolve) => {\n        timer = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutSeconds * 1000);\n      }),\n    ]);\n  } finally {\n    if (timer != null) clearTimeout(timer);\n  }\n}\n\ntype Awaitable<T> = T | PromiseLike<T>;\ntype AwaitableIterable<T> = Iterable<Awaitable<T>> | PromiseLike<Iterable<Awaitable<T>>>;\n\nfunction isDurableThenable(value: unknown): boolean {\n  if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n    return false;\n  }\n  return durableThenableRegistry().has(value);\n}\n\nexport function isDetachedDurableThenable(value: unknown): boolean {\n  const provenance = provenanceForDurableThenable(value);\n  return provenance?.detached === true\n    || (provenance?.assimilation != null && !provenance.assimilation.active);\n}\n\nfunction durableThenableRegistry(): WeakMap<object, DurableThenableProvenance> {\n  const target = globalThis as typeof globalThis & {\n    [DURABLE_THENABLE_REGISTRY_KEY]?: WeakMap<object, DurableThenableProvenance>;\n  };\n  target[DURABLE_THENABLE_REGISTRY_KEY] ??=\n    new WeakMap<object, DurableThenableProvenance>();\n  return target[DURABLE_THENABLE_REGISTRY_KEY];\n}\n\nfunction newDurableThenableMetadata(): DurableThenableMetadata {\n  return {\n    aggregateExpectations: [],\n    provenanceExpectations: [],\n  };\n}\n\nfunction metadataForDurableThenable(value: unknown): DurableThenableMetadata | undefined {\n  return provenanceForDurableThenable(value)?.metadata;\n}\n\nfunction provenanceForDurableThenable(\n  value: unknown,\n): DurableThenableProvenance | undefined {\n  if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n    return undefined;\n  }\n  return durableThenableRegistry().get(value);\n}\n\nexport function registerDurableThenable<T extends object>(\n  value: T,\n  source?: object,\n): T {\n  const registry = durableThenableRegistry();\n  const metadata = source == null\n    ? registry.get(value)?.metadata ?? newDurableThenableMetadata()\n    : registry.get(source)?.metadata ?? newDurableThenableMetadata();\n  registry.set(value, { metadata });\n  if (source != null && !registry.has(source)) registry.set(source, { metadata });\n  return value;\n}\n\nfunction registerDetachedDurableThenable<T extends object>(value: T): T {\n  const registry = durableThenableRegistry();\n  registry.set(value, {\n    metadata: registry.get(value)?.metadata ?? newDurableThenableMetadata(),\n    detached: true,\n  });\n  return value;\n}\n\nfunction inheritDurableThenable<T extends object>(value: T, source: object): T {\n  const provenance = durableThenableRegistry().get(source);\n  if (provenance == null) return value;\n  durableThenableRegistry().set(value, provenance);\n  if (provenance.assimilation == null) {\n    provenance.metadata.provenanceExpectations.push({\n      value,\n      creatorAsyncId: executionAsyncId(),\n    });\n  }\n  return value;\n}\n\n/**\n * Associates a replay-aware durable assimilation with its durable provenance.\n *\n * The returned handle marks normal settlement and links derived promises to\n * this exact assimilation. Promise aggregate construction can detach the\n * aggregate's internal reaction so it is not mistaken for application code\n * awaiting the returned aggregate.\n */\nexport function registerDurableAssimilation(\n  value: object,\n  detach: () => void,\n): DurableAssimilation {\n  const metadata = metadataForDurableThenable(value);\n  if (metadata == null) {\n    return {\n      finish: () => undefined,\n      link: (linked) => linked,\n    };\n  }\n  const registration: DurableAssimilationRegistration = {\n    active: true,\n    detach,\n  };\n  const provenanceIndex = metadata.provenanceExpectations.findIndex((expectation) =>\n    expectation.creatorAsyncId !== executionAsyncId()\n  );\n  if (provenanceIndex >= 0) {\n    const [expectation] = metadata.provenanceExpectations.splice(provenanceIndex, 1);\n    durableThenableRegistry().set(expectation.value, {\n      metadata,\n      assimilation: registration,\n    });\n  }\n  const expectationIndex = metadata.aggregateExpectations.findIndex((expectation) =>\n    !expectation.scope.settled\n    && expectation.creatorAsyncId !== executionAsyncId()\n  );\n  if (expectationIndex >= 0) {\n    const [expectation] = metadata.aggregateExpectations.splice(expectationIndex, 1);\n    associateAssimilationWithAggregate(registration, expectation.scope);\n  }\n  return {\n    finish: () => finishDurableAssimilation(registration),\n    link: <T extends object>(linked: T): T => {\n      durableThenableRegistry().set(linked, {\n        metadata,\n        assimilation: registration,\n      });\n      return linked;\n    },\n  };\n}\n\nfunction associateAssimilationWithAggregate(\n  registration: DurableAssimilationRegistration,\n  scope: DurableAggregateScope,\n): void {\n  if (!registration.active || scope.settled) return;\n  finishDurableAssimilation(registration);\n  registration.detach();\n}\n\nfunction finishDurableAssimilation(registration: DurableAssimilationRegistration): void {\n  if (!registration.active) return;\n  registration.active = false;\n}\n\nfunction trackDurableAggregate(\n  runtime: FunctionRuntime,\n  result: Promise<unknown>,\n  durableContenders: readonly unknown[],\n  markResult: boolean,\n): void {\n  const scope: DurableAggregateScope = {\n    settled: false,\n    metadata: new Set<DurableThenableMetadata>(),\n  };\n  if (markResult) {\n    // Constructing an aggregate attaches internal reactions to its durable\n    // inputs, but that does not mean application code is awaiting the result.\n    // Mark the aggregate itself as detached so a later user reaction becomes\n    // the durable assimilation observed by strict replay.\n    registerDetachedDurableThenable(result);\n  }\n  const creatorAsyncId = executionAsyncId();\n  for (const contender of durableContenders) {\n    const provenance = provenanceForDurableThenable(contender);\n    if (provenance == null) continue;\n    if (provenance.assimilation != null) {\n      associateAssimilationWithAggregate(provenance.assimilation, scope);\n    } else {\n      provenance.metadata.aggregateExpectations.push({\n        scope,\n        creatorAsyncId,\n      });\n    }\n    if (scope.metadata.has(provenance.metadata)) continue;\n    const { metadata } = provenance;\n    scope.metadata.add(metadata);\n  }\n  const settle = () => {\n    if (scope.settled) return;\n    scope.settled = true;\n    for (const metadata of scope.metadata) {\n      for (let index = metadata.aggregateExpectations.length - 1; index >= 0; index -= 1) {\n        if (metadata.aggregateExpectations[index].scope === scope) {\n          metadata.aggregateExpectations.splice(index, 1);\n        }\n      }\n    }\n    scope.metadata.clear();\n  };\n  // Promise.prototype.then still performs a user-observable Symbol.species\n  // lookup even when invoked directly. The executor observes the native\n  // promiseResolve async hook instead, so bookkeeping cannot call user code or\n  // construct an extra subclass promise.\n  if (runtime.trackPromiseSettlement?.(result, settle) !== true) settle();\n}\n\ninterface PromiseAggregateObservation {\n  readonly ordinaryLifetime: Promise<void>;\n  allOrdinaryValuesObservable: boolean;\n  observeFulfillment(): void;\n  observeRejection(): void;\n  finishIteration(contenderCount: number): void;\n}\n\nfunction promiseAggregateObservation(\n  kind: \"all\" | \"all_settled\" | \"any\",\n): PromiseAggregateObservation {\n  let settleLifetime!: () => void;\n  const ordinaryLifetime = new Promise<void>((resolve) => {\n    settleLifetime = resolve;\n  });\n  let contenderCount: number | undefined;\n  let fulfillmentCount = 0;\n  let rejectionCount = 0;\n  let settled = false;\n  const maybeSettle = () => {\n    if (settled) return;\n    const canNoLongerAdvance = kind === \"any\"\n      ? contenderCount != null && rejectionCount === contenderCount\n      : kind === \"all\"\n        ? rejectionCount > 0\n          || (contenderCount != null && fulfillmentCount === contenderCount)\n        : contenderCount != null\n          && fulfillmentCount + rejectionCount === contenderCount;\n    if (!canNoLongerAdvance) return;\n    settled = true;\n    settleLifetime();\n  };\n  return {\n    ordinaryLifetime,\n    allOrdinaryValuesObservable: true,\n    observeFulfillment: () => {\n      fulfillmentCount += 1;\n      maybeSettle();\n    },\n    observeRejection: () => {\n      rejectionCount += 1;\n      maybeSettle();\n    },\n    finishIteration: (count) => {\n      contenderCount = count;\n      maybeSettle();\n    },\n  };\n}\n\nfunction observePromiseAggregateContender(\n  normalized: unknown,\n  observation: PromiseAggregateObservation,\n): unknown {\n  if (\n    (typeof normalized !== \"object\" && typeof normalized !== \"function\")\n    || normalized == null\n  ) {\n    observation.allOrdinaryValuesObservable = false;\n    return normalized;\n  }\n  let observedSettled = false;\n  const observed = Object.create(null) as object;\n  Object.defineProperty(observed, \"then\", {\n    configurable: true,\n    get: () => {\n      const then = Reflect.get(normalized, \"then\", normalized) as unknown;\n      if (typeof then !== \"function\") return then;\n      return function observedThen(\n        this: unknown,\n        onfulfilled: unknown,\n        onrejected: unknown,\n      ): unknown {\n        return Reflect.apply(then, normalized, [\n          function observedFulfillment(this: unknown, value: unknown): unknown {\n            if (!observedSettled) {\n              observedSettled = true;\n              observation.observeFulfillment();\n            }\n            return typeof onfulfilled === \"function\"\n              ? Reflect.apply(onfulfilled, this, [value])\n              : undefined;\n          },\n          function observedRejection(this: unknown, reason: unknown): unknown {\n            if (!observedSettled) {\n              observedSettled = true;\n              observation.observeRejection();\n            }\n            if (typeof onrejected === \"function\") {\n              return Reflect.apply(onrejected, this, [reason]);\n            }\n            throw reason;\n          },\n        ]);\n      };\n    },\n  });\n  return observed;\n}\n\n/**\n * Lets a native Promise aggregate algorithm retain control of iteration and\n * settlement while exposing each constructor-normalized contender.\n *\n * The facade constructs the real Promise subclass and delegates its `resolve`\n * lookup and calls back to that subclass. This preserves custom static resolve\n * behavior and the public result type without resolving an input twice.\n */\nfunction observedPromiseConstructor(\n  constructor: PromiseConstructor,\n  observeNormalized: (normalized: unknown) => unknown,\n): PromiseConstructor {\n  const facade = function PromiseAggregateObservedConstructor(\n    executor: (\n      resolve: (value: unknown) => void,\n      reject: (reason?: unknown) => void,\n    ) => void,\n  ): Promise<unknown> {\n    return Reflect.construct(\n      constructor,\n      [executor],\n      constructor,\n    ) as Promise<unknown>;\n  } as unknown as PromiseConstructor;\n  Object.defineProperty(facade, \"resolve\", {\n    configurable: true,\n    get: () => {\n      const promiseResolve = Reflect.get(constructor, \"resolve\", constructor) as unknown;\n      if (typeof promiseResolve !== \"function\") return promiseResolve;\n      return (value: unknown): unknown => {\n        const normalized = Reflect.apply(promiseResolve, constructor, [value]) as unknown;\n        return observeNormalized(normalized);\n      };\n    },\n  });\n  return facade;\n}\n\nfunction internalDurableThen<T, TResult1 = T, TResult2 = never>(\n  promise: Promise<T>,\n  onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n  onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n): Promise<TResult1 | TResult2> {\n  const internalThen = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_INTERNAL_THEN];\n  if (internalThen != null) {\n    return internalThen.call(\n      promise,\n      onfulfilled,\n      onrejected,\n    ) as Promise<TResult1 | TResult2>;\n  }\n  return promise.then(onfulfilled, onrejected);\n}\n\nfunction internalAwaitable<T>(value: Awaitable<T>): Promise<T> {\n  if ((typeof value === \"object\" || typeof value === \"function\") && value != null) {\n    const internalThen = (\n      value as Partial<ObservableDurablePromise<T>>\n    )[DURABLE_PROMISE_INTERNAL_THEN];\n    if (internalThen != null) {\n      return internalThen.call(\n        value,\n        (resolved) => resolved,\n        (error) => {\n          throw error;\n        },\n      ) as Promise<T>;\n    }\n  }\n  return Promise.resolve(value);\n}\n\nasync function resolveAwaitableIterable<T>(\n  items: AwaitableIterable<T>,\n): Promise<T[]> {\n  const iterable = await internalAwaitable(items);\n  return internalPromiseAll([...iterable].map((item) => internalAwaitable(item)));\n}\n\nfunction wrapDurableAggregate<T>(completion: Promise<T>): Promise<T> {\n  return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n}\n\nfunction runInternalPromiseAggregate<T>(callback: () => T): T {\n  const target = globalThis as typeof globalThis & {\n    [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n  };\n  target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] =\n    (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) + 1;\n  try {\n    return callback();\n  } finally {\n    const remaining = (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 1) - 1;\n    if (remaining === 0) delete target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY];\n    else target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] = remaining;\n  }\n}\n\nfunction isInternalPromiseAggregate(): boolean {\n  const target = globalThis as typeof globalThis & {\n    [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n  };\n  return (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) > 0;\n}\n\nfunction internalPromiseAll<T>(\n  values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]> {\n  return runInternalPromiseAggregate(() => Promise.all(values));\n}\n\nfunction internalPromiseRace<T>(\n  values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>> {\n  return runInternalPromiseAggregate(() => Promise.race(values));\n}\n\nexport function installPromiseInstrumentation(): void {\n  const target = globalThis as typeof globalThis & {\n    [PROMISE_INSTRUMENTED_KEY]?: true;\n    [PROMISE_THEN_INSTRUMENTED_KEY]?: true;\n  };\n  if (target[PROMISE_THEN_INSTRUMENTED_KEY] !== true) {\n    const originalThen = Promise.prototype.then;\n    Object.defineProperty(Promise.prototype, \"then\", {\n      ...Object.getOwnPropertyDescriptor(Promise.prototype, \"then\"),\n      value: function then(\n        this: Promise<unknown>,\n        onfulfilled?: ((value: unknown) => unknown) | null,\n        onrejected?: ((reason: unknown) => unknown) | null,\n      ): Promise<unknown> {\n        const result = Reflect.apply(\n          originalThen,\n          this,\n          [onfulfilled, onrejected],\n        ) as Promise<unknown>;\n        if (isDetachedDurableThenable(this)) {\n          currentFunctionRuntime()?.trackDurablePromiseConsumption?.(result);\n        }\n        return result;\n      },\n    });\n    target[PROMISE_THEN_INSTRUMENTED_KEY] = true;\n  }\n  if (target[PROMISE_INSTRUMENTED_KEY] === true) return;\n  const originalRace = Promise.race;\n  const originalAny = Promise.any;\n  const originalAll = Promise.all;\n  const originalAllSettled = Promise.allSettled;\n  const originalResolve = Promise.resolve;\n\n  // Promise.resolve normally hides a durable Promise subclass inside a native\n  // Promise. Preserve the durable provenance on that wrapper so a subsequent\n  // all/allSettled/race/any can still distinguish it from an independent\n  // contender.\n  Object.defineProperty(Promise, \"resolve\", {\n    ...Object.getOwnPropertyDescriptor(Promise, \"resolve\"),\n    value: function resolve<T>(\n      this: PromiseConstructor,\n      value: T | PromiseLike<T>,\n    ): Promise<Awaited<T>> {\n      const result = Reflect.apply(originalResolve, this, [value]) as Promise<Awaited<T>>;\n      if (isDurableThenable(value)) inheritDurableThenable(result, value as object);\n      return result;\n    },\n  });\n\n  Object.defineProperty(Promise, \"race\", {\n    ...Object.getOwnPropertyDescriptor(Promise, \"race\"),\n    value: function race<T>(\n      this: PromiseConstructor,\n      values: Iterable<T | PromiseLike<T>>,\n    ): Promise<Awaited<T>> {\n      const runtime = currentFunctionRuntime();\n      if (runtime?.trackMixedPromiseRace == null) {\n        return Reflect.apply(originalRace, this, [values]) as Promise<Awaited<T>>;\n      }\n      const durableContenders: unknown[] = [];\n      let ordinaryContenderCount = 0;\n      const trackedValues = {\n        *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n          for (const value of values) {\n            yield value;\n          }\n        },\n      };\n      const observedConstructor = observedPromiseConstructor(\n        this,\n        (normalized) => {\n          if (isDurableThenable(normalized)) {\n            durableContenders.push(normalized);\n          } else {\n            ordinaryContenderCount += 1;\n          }\n          return normalized;\n        },\n      );\n      const construct = () =>\n        Reflect.apply(\n          originalRace,\n          observedConstructor,\n          [trackedValues],\n        ) as Promise<Awaited<T>>;\n      const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n      if (durableContenders.length > 0) {\n        trackDurableAggregate(\n          runtime,\n          result,\n          durableContenders,\n          !isInternalPromiseAggregate(),\n        );\n      }\n      if (\n        durableContenders.length > 0\n        && ordinaryContenderCount > 0\n      ) {\n        runtime.trackMixedPromiseRace(result);\n      }\n      return result;\n    },\n  });\n\n  Object.defineProperty(Promise, \"any\", {\n    ...Object.getOwnPropertyDescriptor(Promise, \"any\"),\n    value: function any<T>(\n      this: PromiseConstructor,\n      values: Iterable<T | PromiseLike<T>>,\n    ): Promise<Awaited<T>> {\n      const runtime = currentFunctionRuntime();\n      if (runtime?.trackMixedPromiseRace == null) {\n        return Reflect.apply(originalAny, this, [values]) as Promise<Awaited<T>>;\n      }\n      const durableContenders: unknown[] = [];\n      let ordinaryContenderCount = 0;\n      const observation = promiseAggregateObservation(\"any\");\n      const trackedValues = {\n        *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n          for (const value of values) {\n            yield value;\n          }\n        },\n      };\n      const observedConstructor = observedPromiseConstructor(\n        this,\n        (normalized) => {\n          if (isDurableThenable(normalized)) {\n            durableContenders.push(normalized);\n            return normalized;\n          }\n          ordinaryContenderCount += 1;\n          return observePromiseAggregateContender(normalized, observation);\n        },\n      );\n      const construct = () =>\n        Reflect.apply(\n          originalAny,\n          observedConstructor,\n          [trackedValues],\n        ) as Promise<Awaited<T>>;\n      const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n      observation.finishIteration(ordinaryContenderCount);\n      if (durableContenders.length > 0) {\n        trackDurableAggregate(\n          runtime,\n          result,\n          durableContenders,\n          !isInternalPromiseAggregate(),\n        );\n      }\n      if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n        if (\n          observation.allOrdinaryValuesObservable\n        ) {\n          // Once every ordinary contender rejects, only a durable contender\n          // can advance Promise.any. A fulfillment may itself be a pending\n          // promise that the public aggregate adopts, so the ordinary gate\n          // must not expire merely because its fulfillment callback ran.\n          // Stop treating the ordinary path as a producer when either it or\n          // the public aggregate settles. The latter covers a durable winner\n          // as well as fulfilled-value adoption and abrupt iterator failures.\n          runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n        } else {\n          // A non-object custom resolve result makes native Promise.any reject\n          // the aggregate. Retain that aggregate as the producer until the\n          // rejection becomes observable.\n          runtime.trackMixedPromiseRace(result);\n        }\n      }\n      return result;\n    },\n  });\n\n  Object.defineProperty(Promise, \"all\", {\n    ...Object.getOwnPropertyDescriptor(Promise, \"all\"),\n    value: function all<T>(\n      this: PromiseConstructor,\n      values: Iterable<T | PromiseLike<T>>,\n    ): Promise<Awaited<T>[]> {\n      const runtime = currentFunctionRuntime();\n      if (runtime?.trackMixedPromiseRace == null) {\n        return Reflect.apply(originalAll, this, [values]) as Promise<Awaited<T>[]>;\n      }\n      const durableContenders: unknown[] = [];\n      let ordinaryContenderCount = 0;\n      const observation = promiseAggregateObservation(\"all\");\n      const trackedValues = {\n        *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n          for (const value of values) {\n            yield value;\n          }\n        },\n      };\n      const observedConstructor = observedPromiseConstructor(\n        this,\n        (normalized) => {\n          if (isDurableThenable(normalized)) {\n            durableContenders.push(normalized);\n            return normalized;\n          }\n          ordinaryContenderCount += 1;\n          return observePromiseAggregateContender(normalized, observation);\n        },\n      );\n      const construct = () =>\n        Reflect.apply(\n          originalAll,\n          observedConstructor,\n          [trackedValues],\n        ) as Promise<Awaited<T>[]>;\n      const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n      observation.finishIteration(ordinaryContenderCount);\n      if (durableContenders.length > 0) {\n        trackDurableAggregate(\n          runtime,\n          result,\n          durableContenders,\n          !isInternalPromiseAggregate(),\n        );\n      }\n      if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n        if (\n          observation.allOrdinaryValuesObservable\n        ) {\n          // Ordinary inputs can advance Promise.all until one rejects or all\n          // fulfill. The non-rejecting lifetime gate models that boundary\n          // without observing the public result or invoking a thenable twice.\n          runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n        } else {\n          // A custom resolve result that is not thenable makes the public\n          // aggregate reject. Its own settlement is the only observable\n          // producer boundary available.\n          runtime.trackMixedPromiseRace(result);\n        }\n      }\n      return result;\n    },\n  });\n\n  Object.defineProperty(Promise, \"allSettled\", {\n    ...Object.getOwnPropertyDescriptor(Promise, \"allSettled\"),\n    value: function allSettled<T>(\n      this: PromiseConstructor,\n      values: Iterable<T | PromiseLike<T>>,\n    ): Promise<PromiseSettledResult<Awaited<T>>[]> {\n      const runtime = currentFunctionRuntime();\n      if (runtime?.trackMixedPromiseRace == null) {\n        return Reflect.apply(\n          originalAllSettled,\n          this,\n          [values],\n        ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n      }\n      const durableContenders: unknown[] = [];\n      let ordinaryContenderCount = 0;\n      const observation = promiseAggregateObservation(\"all_settled\");\n      const trackedValues = {\n        *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n          for (const value of values) yield value;\n        },\n      };\n      const observedConstructor = observedPromiseConstructor(\n        this,\n        (normalized) => {\n          if (isDurableThenable(normalized)) {\n            durableContenders.push(normalized);\n            return normalized;\n          }\n          ordinaryContenderCount += 1;\n          return observePromiseAggregateContender(normalized, observation);\n        },\n      );\n      const construct = () =>\n        Reflect.apply(\n          originalAllSettled,\n          observedConstructor,\n          [trackedValues],\n        ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n      const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n      observation.finishIteration(ordinaryContenderCount);\n      if (durableContenders.length > 0) {\n        trackDurableAggregate(\n          runtime,\n          result,\n          durableContenders,\n          !isInternalPromiseAggregate(),\n        );\n      }\n      if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n        if (observation.allOrdinaryValuesObservable) {\n          // Ordinary inputs can advance Promise.allSettled until every one has\n          // settled. The aggregate itself covers abrupt iterator/resolve\n          // failures and durable completion.\n          runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n        } else {\n          runtime.trackMixedPromiseRace(result);\n        }\n      }\n      return result;\n    },\n  });\n  target[PROMISE_INSTRUMENTED_KEY] = true;\n}\n\nexport interface RegisteredFunction<Args extends readonly unknown[], Result> {\n  (...args: Args): Promise<Result>;\n  readonly definition: RegisteredDefinition;\n  future(...args: Args): FunctionFuture<Result>;\n  map(items: AwaitableIterable<Args[0]>): Promise<Result[]>;\n  reduce(\n    items: AwaitableIterable<Args[1]>,\n    initial?: Args[0],\n  ): Promise<Result>;\n  tailCall(...args: Args): TailCall<Result>;\n}\n\nfunction normalizeOptions(options: FunctionOptions<readonly Parameter<unknown>[], unknown>): NormalizedFunctionOptions {\n  validateGPUOption(options.gpu);\n  if (options.secrets != null && !Array.isArray(options.secrets)) {\n    throw new SDKUsageError(\"secrets must be an array of non-empty strings\");\n  }\n  const normalizedRetries = options.retries == null\n    ? undefined\n    : retries(options.retries);\n  const result: NormalizedFunctionOptions = {\n    description: options.description ?? \"\",\n    cpu: options.cpu ?? 1,\n    memory: options.memory ?? 1,\n    ephemeralDisk: options.ephemeralDisk ?? 10,\n    gpu: Array.isArray(options.gpu) ? [...options.gpu] : options.gpu ?? null,\n    timeout: options.timeout ?? 300,\n    image: options.image,\n    secrets: [...(options.secrets ?? [])],\n    retries: normalizedRetries,\n    region: options.region,\n    warmContainers: options.warmContainers,\n    minContainers: options.minContainers,\n    maxContainers: options.maxContainers,\n  };\n  if (!Number.isFinite(result.cpu) || result.cpu <= 0) throw new SDKUsageError(\"cpu must be greater than zero\");\n  if (!Number.isFinite(result.memory) || result.memory <= 0) throw new SDKUsageError(\"memory must be greater than zero\");\n  if (!Number.isFinite(result.ephemeralDisk) || result.ephemeralDisk <= 0) throw new SDKUsageError(\"ephemeralDisk must be greater than zero\");\n  if (!Number.isInteger(result.timeout) || result.timeout <= 0 || result.timeout > 86_400) {\n    throw new SDKUsageError(\"timeout must be an integer between 1 and 86400 seconds\");\n  }\n  for (const [label, value] of [\n    [\"warmContainers\", result.warmContainers],\n    [\"minContainers\", result.minContainers],\n    [\"maxContainers\", result.maxContainers],\n  ] as const) {\n    if (value != null && (!Number.isInteger(value) || value < 0)) {\n      throw new SDKUsageError(`${label} must be a non-negative integer`);\n    }\n  }\n  if (result.minContainers != null && result.maxContainers != null && result.minContainers > result.maxContainers) {\n    throw new SDKUsageError(\"minContainers cannot exceed maxContainers\");\n  }\n  if (result.warmContainers != null && result.maxContainers != null && result.warmContainers > result.maxContainers) {\n    throw new SDKUsageError(\"warmContainers cannot exceed maxContainers\");\n  }\n  if (result.region != null && ![\"us-east-1\", \"eu-west-1\"].includes(result.region)) {\n    throw new SDKUsageError(`Unsupported region '${result.region}'`);\n  }\n  if (result.secrets.some((secret) => typeof secret !== \"string\" || secret.length === 0)) {\n    throw new SDKUsageError(\"secrets must contain non-empty strings\");\n  }\n  return result;\n}\n\nfunction validateGPUOption(value: unknown): void {\n  if (value == null) return;\n  const values = Array.isArray(value) ? value : [value];\n  for (const setting of values) {\n    if (typeof setting !== \"string\") {\n      throw new SDKUsageError(\"gpu must be a GPU model or an array of GPU models\");\n    }\n    const [model, countText, ...extra] = setting.split(\":\");\n    const count = countText == null ? 1 : Number(countText);\n    if (\n      !model\n      || extra.length > 0\n      || !Number.isInteger(count)\n      || count <= 0\n      || (countText != null && String(count) !== countText)\n    ) {\n      throw new SDKUsageError(`Invalid GPU setting '${setting}'`);\n    }\n  }\n}\n\nfunction validateArguments(definition: RegisteredDefinition, supplied: readonly unknown[]): unknown[] {\n  const args = [...supplied];\n  if (args.length > definition.parameters.length) {\n    throw new SDKUsageError(`${definition.name} expected at most ${definition.parameters.length} arguments, received ${args.length}`);\n  }\n  definition.parameters.forEach((parameter, index) => {\n    if (index >= args.length || args[index] === undefined) {\n      if (parameter.hasDefault) args[index] = parameter.defaultValue;\n      else if (parameter.required) throw new SDKUsageError(`${definition.name} is missing argument '${parameter.name}'`);\n      return;\n    }\n    validateWithSchema(parameter.schema, args[index], `${definition.name}.${parameter.name}`);\n  });\n  return args;\n}\n\nexport async function executeHandler<T>(\n  definition: RegisteredDefinition,\n  suppliedArgs: readonly unknown[],\n): Promise<T> {\n  const output = await executeHandlerResult<T>(definition, suppliedArgs);\n  if (isTailCall(output)) {\n    const runtime = currentFunctionRuntime();\n    if (runtime == null) return executeHandler<T>(output.definition, output.args);\n    return runtime.invoke<T>(output.definition, output.args);\n  }\n  return output;\n}\n\n/** Runs one handler frame without resolving a tail call. Used by language executors. */\nexport async function executeHandlerResult<T>(\n  definition: RegisteredDefinition,\n  suppliedArgs: readonly unknown[],\n): Promise<T | TailCall<T>> {\n  const args = validateArguments(definition, suppliedArgs);\n  const result = definition.handler(...args);\n  if (result == null || typeof (result as PromiseLike<unknown>).then !== \"function\") {\n    throw new SDKUsageError(`Tensorlake handler '${definition.name}' must be async and return a Promise`);\n  }\n  const output = await result;\n  if (isTailCall(output)) {\n    return output as TailCall<T>;\n  }\n  validateWithSchema(definition.returns, output, `${definition.name} return value`);\n  return output as T;\n}\n\nexport function isTailCall(value: unknown): value is TailCall<unknown> {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Partial<TailCall<unknown>>;\n  return candidate[TAIL_CALL_BRAND] === true\n    && candidate.kind === \"tensorlake-tail-call\"\n    && typeof candidate.definition === \"object\"\n    && candidate.definition != null\n    && Array.isArray(candidate.args);\n}\n\nfunction createRegisteredFunction<Args extends readonly unknown[], Result>(\n  definition: RegisteredDefinition,\n): RegisteredFunction<Args, Result> {\n  const callable = ((...args: Args): Promise<Result> => {\n    const runtime = currentFunctionRuntime();\n    return runtime == null\n      ? executeHandler<Result>(definition, args)\n      : runtime.invoke<Result>(definition, args);\n  }) as RegisteredFunction<Args, Result>;\n  Object.defineProperties(callable, {\n    definition: { value: definition, enumerable: true },\n    future: { value: (...args: Args) => new FunctionFuture<Result>(definition, args) },\n    map: {\n      value: (items: AwaitableIterable<Args[0]>) => {\n        // Resolve inputs before assigning durable IDs. Awaiting each input inside\n        // the invocation loop would make call order depend on promise timing,\n        // allowing strict replay to associate a recorded result with a different\n        // input while still matching the durable event sequence.\n        const completion = (async () => {\n          const resolvedItems = await resolveAwaitableIterable(items);\n          return internalPromiseAll(\n            resolvedItems.map((item) =>\n              internalAwaitable(callable(...([item] as unknown as Args)))\n            ),\n          );\n        })();\n        return wrapDurableAggregate(completion);\n      },\n    },\n    reduce: {\n      value: (\n        items: AwaitableIterable<Args[1]>,\n        ...initialValues: [] | [Args[0]]\n      ) => {\n        const completion = (async () => {\n          let values = await resolveAwaitableIterable(items);\n          const hasInitial = initialValues.length > 0;\n          let initial: unknown = initialValues[0];\n          const runtime = currentFunctionRuntime();\n          if (runtime != null) {\n            return internalAwaitable(\n              runtime.reduce<Result>(definition, values, initial, hasInitial),\n            );\n          }\n          if (!hasInitial) {\n            if (values.length === 0) {\n              throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n            }\n            [initial, ...values] = values;\n          }\n          let accumulator = initial as Result | Args[0];\n          for (const item of values) {\n            accumulator = await internalAwaitable(\n              callable(...([accumulator, item] as unknown as Args)),\n            );\n          }\n          return accumulator as Result;\n        })();\n        return wrapDurableAggregate(completion);\n      },\n    },\n    tailCall: {\n      value: (...args: Args): TailCall<Result> => ({\n        [TAIL_CALL_BRAND]: true,\n        kind: \"tensorlake-tail-call\",\n        definition,\n        args,\n      }),\n    },\n  });\n  return callable;\n}\n\nfunction register<\n  const P extends readonly Parameter<unknown>[],\n  Result,\n>(\n  handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n  options: FunctionOptions<P, Result> | ApplicationOptions<P, Result>,\n  application: boolean,\n): RegisteredFunction<ParameterValues<P>, Result> {\n  const name = options.name ?? handler.name;\n  if (!name) throw new SDKUsageError(\"Anonymous Tensorlake handlers require an explicit name\");\n  if (!/^[A-Za-z_$][\\w$]*$/.test(name)) throw new SDKUsageError(`Invalid Tensorlake function name '${name}'`);\n  let applicationRetries: Retries | undefined;\n  if (application) {\n    const appOptions = options as ApplicationOptions<P, Result>;\n    applicationRetries = retries(appOptions.applicationRetries ?? { maxRetries: 0 });\n    if (\n      appOptions.allow != null\n      && (\n        !Array.isArray(appOptions.allow)\n        || appOptions.allow.some((capability) =>\n          capability !== \"unauthenticated_requests\"\n        )\n      )\n    ) {\n      throw new SDKUsageError(\n        \"Application allow must contain only 'unauthenticated_requests'\",\n      );\n    }\n    const tags = appOptions.tags;\n    const tagsPrototype = tags == null || typeof tags !== \"object\"\n      ? undefined\n      : Object.getPrototypeOf(tags);\n    if (\n      tags != null\n      && (\n        typeof tags !== \"object\"\n        || Array.isArray(tags)\n        || (tagsPrototype !== Object.prototype && tagsPrototype !== null)\n        || Reflect.ownKeys(tags).some((key) =>\n          typeof key !== \"string\"\n          || !key\n          || typeof (tags as Record<PropertyKey, unknown>)[key] !== \"string\"\n        )\n      )\n    ) {\n      throw new SDKUsageError(\"Application tags require non-empty string keys and string values\");\n    }\n  }\n  if (!Array.isArray(options.parameters)) {\n    throw new SDKUsageError(\"Tensorlake registration parameters must be an array\");\n  }\n  if (\n    typeof options.returns !== \"object\"\n    || options.returns == null\n    || typeof options.returns.jsonSchema !== \"object\"\n    || options.returns.jsonSchema == null\n  ) {\n    throw new SDKUsageError(\"Tensorlake registration returns must be a schema\");\n  }\n  const parameterNames = new Set<string>();\n  for (const parameter of options.parameters) {\n    if (\n      typeof parameter !== \"object\"\n      || parameter == null\n      || typeof parameter.name !== \"string\"\n      || typeof parameter.schema !== \"object\"\n      || parameter.schema == null\n      || typeof parameter.schema.jsonSchema !== \"object\"\n      || parameter.schema.jsonSchema == null\n      || typeof parameter.required !== \"boolean\"\n      || typeof parameter.hasDefault !== \"boolean\"\n    ) {\n      throw new SDKUsageError(\n        \"Tensorlake registration parameters must be created with schema.parameter()\",\n      );\n    }\n    if (parameterNames.has(parameter.name)) {\n      throw new SDKUsageError(`Duplicate Tensorlake parameter name '${parameter.name}'`);\n    }\n    parameterNames.add(parameter.name);\n  }\n  const httpBodyParameter = options.parameters.find(\n    (parameter) => parameter.schema._httpBody,\n  );\n  if (httpBodyParameter != null && !application) {\n    throw new SDKUsageError(\n      \"HttpBody is only supported for application parameters\",\n    );\n  }\n  if (options.returns._httpBody) {\n    throw new SDKUsageError(\n      \"HttpBody is only supported for application parameters; \"\n      + \"use schema.file() or a JSON-compatible return schema instead\",\n    );\n  }\n  const definition: RegisteredDefinition = {\n    name,\n    handler: handler as (...args: unknown[]) => Promise<unknown>,\n    parameters: [...options.parameters],\n    returns: options.returns as Schema<unknown>,\n    options: normalizeOptions(options as FunctionOptions<readonly Parameter<unknown>[], unknown>),\n    application: application\n      ? {\n          tags: { ...((options as ApplicationOptions<P, Result>).tags ?? {}) },\n          retries: applicationRetries as Retries,\n          allow: [...((options as ApplicationOptions<P, Result>).allow ?? [])],\n          version: randomUUID().replaceAll(\"-\", \"\"),\n        }\n      : undefined,\n  };\n  registerDefinition(definition, application);\n  return createRegisteredFunction(definition);\n}\n\ntype SimpleResult<Output> = Output extends TailCall<infer Result> ? Result : Output;\ntype RuntimeHandler = (...args: never[]) => Promise<unknown>;\n\nfunction hasExplicitSchemas(\n  value: unknown,\n): value is FunctionOptions<readonly Parameter<unknown>[], unknown> {\n  if (typeof value !== \"object\" || value == null) return false;\n  const hasParameters = Object.prototype.hasOwnProperty.call(value, \"parameters\");\n  const hasReturns = Object.prototype.hasOwnProperty.call(value, \"returns\");\n  if (hasParameters !== hasReturns) {\n    throw new SDKUsageError(\"Tensorlake registrations must specify both parameters and returns\");\n  }\n  return hasParameters;\n}\n\nfunction skipJavaScriptLiteral(source: string, start: number): number {\n  const quote = source[start];\n  let escaped = false;\n  for (let index = start + 1; index < source.length; index += 1) {\n    const character = source[index];\n    if (escaped) {\n      escaped = false;\n    } else if (character === \"\\\\\") {\n      escaped = true;\n    } else if (character === quote) {\n      return index;\n    }\n  }\n  return source.length - 1;\n}\n\nfunction skipJavaScriptComment(source: string, start: number): number | undefined {\n  if (source[start] !== \"/\") return undefined;\n  if (source[start + 1] === \"/\") {\n    const newline = source.indexOf(\"\\n\", start + 2);\n    return newline < 0 ? source.length - 1 : newline;\n  }\n  if (source[start + 1] === \"*\") {\n    const end = source.indexOf(\"*/\", start + 2);\n    return end < 0 ? source.length - 1 : end + 1;\n  }\n  return undefined;\n}\n\nfunction skipJavaScriptTrivia(source: string, start: number): number {\n  let index = start;\n  while (index < source.length) {\n    while (index < source.length && /\\s/.test(source[index])) index += 1;\n    const commentEnd = skipJavaScriptComment(source, index);\n    if (commentEnd == null) break;\n    index = commentEnd + 1;\n  }\n  return index;\n}\n\nconst REGEX_PREFIX_KEYWORDS = new Set([\n  \"await\",\n  \"case\",\n  \"delete\",\n  \"in\",\n  \"instanceof\",\n  \"new\",\n  \"return\",\n  \"throw\",\n  \"typeof\",\n  \"void\",\n  \"yield\",\n]);\n\nfunction regexLiteralStartsAt(source: string, start: number): boolean {\n  let expectsExpression = true;\n  for (let index = 0; index < start; index += 1) {\n    const character = source[index];\n    if (/\\s/.test(character)) continue;\n    if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n      index = skipJavaScriptLiteral(source, index);\n      expectsExpression = false;\n      continue;\n    }\n    const commentEnd = skipJavaScriptComment(source, index);\n    if (commentEnd != null) {\n      index = commentEnd;\n      continue;\n    }\n    if (/[A-Za-z_$]/.test(character)) {\n      let tokenEnd = index + 1;\n      while (tokenEnd < start && /[A-Za-z0-9_$]/.test(source[tokenEnd])) tokenEnd += 1;\n      expectsExpression = REGEX_PREFIX_KEYWORDS.has(source.slice(index, tokenEnd));\n      index = tokenEnd - 1;\n      continue;\n    }\n    if (/[0-9]/.test(character) || (character === \".\" && /[0-9]/.test(source[index + 1]))) {\n      while (index + 1 < start && /[A-Za-z0-9_.]/.test(source[index + 1])) index += 1;\n      expectsExpression = false;\n      continue;\n    }\n    if (character === \"/\") {\n      if (expectsExpression) {\n        index = skipJavaScriptRegex(source, index);\n        expectsExpression = false;\n      } else {\n        if (source[index + 1] === \"=\") index += 1;\n        expectsExpression = true;\n      }\n      continue;\n    }\n    if (character === \")\" || character === \"]\" || character === \"}\") {\n      expectsExpression = false;\n      continue;\n    }\n    if (character === \".\") {\n      if (source.slice(index, index + 3) === \"...\") {\n        index += 2;\n        expectsExpression = true;\n      } else {\n        expectsExpression = false;\n      }\n      continue;\n    }\n    if ((character === \"+\" || character === \"-\") && source[index + 1] === character) {\n      index += 1;\n      continue;\n    }\n    expectsExpression = true;\n  }\n  return expectsExpression;\n}\n\nfunction skipJavaScriptRegex(source: string, start: number): number {\n  let escaped = false;\n  let characterClass = false;\n  for (let index = start + 1; index < source.length; index += 1) {\n    const character = source[index];\n    if (escaped) {\n      escaped = false;\n    } else if (character === \"\\\\\") {\n      escaped = true;\n    } else if (character === \"[\") {\n      characterClass = true;\n    } else if (character === \"]\") {\n      characterClass = false;\n    } else if (character === \"/\" && !characterClass) {\n      while (index + 1 < source.length && /[A-Za-z]/.test(source[index + 1])) index += 1;\n      return index;\n    }\n  }\n  return source.length - 1;\n}\n\nfunction skipJavaScriptValue(source: string, index: number): number | undefined {\n  const character = source[index];\n  if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n    return skipJavaScriptLiteral(source, index);\n  }\n  const commentEnd = skipJavaScriptComment(source, index);\n  if (commentEnd != null) return commentEnd;\n  if (character === \"/\" && regexLiteralStartsAt(source, index)) {\n    return skipJavaScriptRegex(source, index);\n  }\n  return undefined;\n}\n\nfunction findTopLevelArrow(source: string): number {\n  let parentheses = 0;\n  let brackets = 0;\n  let braces = 0;\n  for (let index = 0; index < source.length - 1; index += 1) {\n    const character = source[index];\n    const valueEnd = skipJavaScriptValue(source, index);\n    if (valueEnd != null) {\n      index = valueEnd;\n      continue;\n    }\n    if (character === \"(\") parentheses += 1;\n    else if (character === \")\") parentheses -= 1;\n    else if (character === \"[\") brackets += 1;\n    else if (character === \"]\") brackets -= 1;\n    else if (character === \"{\") {\n      // A top-level block before an arrow is a classic function or method\n      // body. Its nested arrows cannot describe the handler parameters.\n      if (parentheses === 0 && brackets === 0 && braces === 0) return -1;\n      braces += 1;\n    }\n    else if (character === \"}\") braces -= 1;\n    else if (character === \"=\" && source[index + 1] === \">\" && parentheses === 0 && brackets === 0 && braces === 0) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nfunction findClosingParenthesis(source: string, open: number): number {\n  let depth = 0;\n  for (let index = open; index < source.length; index += 1) {\n    const character = source[index];\n    const valueEnd = skipJavaScriptValue(source, index);\n    if (valueEnd != null) {\n      index = valueEnd;\n      continue;\n    }\n    if (character === \"(\") depth += 1;\n    else if (character === \")\" && --depth === 0) return index;\n  }\n  return -1;\n}\n\nfunction findOpeningParenthesis(source: string): number {\n  for (let index = 0; index < source.length; index += 1) {\n    const valueEnd = skipJavaScriptValue(source, index);\n    if (valueEnd != null) {\n      index = valueEnd;\n      continue;\n    }\n    if (source[index] === \"(\") return index;\n  }\n  return -1;\n}\n\nfunction splitTopLevelParameters(source: string): string[] {\n  if (source.trim() === \"\") return [];\n  const result: string[] = [];\n  let start = 0;\n  let parentheses = 0;\n  let brackets = 0;\n  let braces = 0;\n  for (let index = 0; index < source.length; index += 1) {\n    const character = source[index];\n    const valueEnd = skipJavaScriptValue(source, index);\n    if (valueEnd != null) {\n      index = valueEnd;\n      continue;\n    }\n    if (character === \"(\") parentheses += 1;\n    else if (character === \")\") parentheses -= 1;\n    else if (character === \"[\") brackets += 1;\n    else if (character === \"]\") brackets -= 1;\n    else if (character === \"{\") braces += 1;\n    else if (character === \"}\") braces -= 1;\n    else if (character === \",\" && parentheses === 0 && brackets === 0 && braces === 0) {\n      result.push(source.slice(start, index).trim());\n      start = index + 1;\n    }\n  }\n  const final = source.slice(start).trim();\n  if (final !== \"\") result.push(final);\n  return result;\n}\n\nfunction hasTopLevelDefault(source: string): boolean {\n  let parentheses = 0;\n  let brackets = 0;\n  let braces = 0;\n  for (let index = 0; index < source.length; index += 1) {\n    const character = source[index];\n    const valueEnd = skipJavaScriptValue(source, index);\n    if (valueEnd != null) {\n      index = valueEnd;\n      continue;\n    }\n    if (character === \"(\") parentheses += 1;\n    else if (character === \")\") parentheses -= 1;\n    else if (character === \"[\") brackets += 1;\n    else if (character === \"]\") brackets -= 1;\n    else if (character === \"{\") braces += 1;\n    else if (character === \"}\") braces -= 1;\n    else if (character === \"=\" && parentheses === 0 && brackets === 0 && braces === 0) return true;\n  }\n  return false;\n}\n\nfunction declaredHandlerParameters(handler: RuntimeHandler): string[] {\n  const source = Function.prototype.toString.call(handler).trim();\n  if (source.includes(\"[native code]\")) {\n    throw new SDKUsageError(\"Schema-free registration cannot inspect a native or bound handler; specify parameters and returns\");\n  }\n  const arrow = findTopLevelArrow(source);\n  if (arrow >= 0) {\n    let header = source.slice(0, arrow).trim();\n    if (\n      header.startsWith(\"async\")\n      && !/[A-Za-z0-9_$]/.test(header[\"async\".length] ?? \"\")\n    ) {\n      header = header.slice(skipJavaScriptTrivia(header, \"async\".length));\n    }\n    if (!header.startsWith(\"(\")) return [header];\n    const close = findClosingParenthesis(header, 0);\n    if (close < 0) throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n    return splitTopLevelParameters(header.slice(1, close));\n  }\n  const open = findOpeningParenthesis(source);\n  const close = open < 0 ? -1 : findClosingParenthesis(source, open);\n  if (open < 0 || close < 0) {\n    throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n  }\n  return splitTopLevelParameters(source.slice(open + 1, close));\n}\n\nfunction inferredJSONParameters(handler: RuntimeHandler): readonly Parameter<unknown>[] {\n  const parameters = declaredHandlerParameters(handler);\n  if (parameters.some((parameter) => {\n    let index = 0;\n    while (index < parameter.length) {\n      while (index < parameter.length && /\\s/.test(parameter[index])) index += 1;\n      const commentEnd = skipJavaScriptComment(parameter, index);\n      if (commentEnd == null) break;\n      index = commentEnd + 1;\n    }\n    return parameter.slice(index).startsWith(\"...\");\n  })) {\n    throw new SDKUsageError(\n      \"Schema-free registration does not support rest parameters; specify explicit parameters and returns\",\n    );\n  }\n  return parameters.map((parameter, index) => schema.parameter(\n    parameters.length === 1 ? \"input\" : `arg${index}`,\n    schema.json(),\n    hasTopLevelDefault(parameter) ? { optional: true } : {},\n  ));\n}\n\nfunction registerWithDefaults(\n  name: string,\n  handler: RuntimeHandler,\n  options: SimpleFunctionOptions | SimpleApplicationOptions,\n  application: boolean,\n): RegisteredFunction<readonly unknown[], unknown> {\n  return register(\n    handler as (...args: readonly unknown[]) => Promise<unknown>,\n    {\n      ...options,\n      name,\n      parameters: inferredJSONParameters(handler),\n      returns: schema.json(),\n    },\n    application,\n  );\n}\n\nexport function registerFunction<\n  const P extends readonly Parameter<unknown>[],\n  Result,\n>(\n  handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n  options: FunctionOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\n\nexport function registerFunction<\n  const Args extends readonly unknown[],\n  Output,\n>(\n  name: string,\n  handler: (...args: Args) => Promise<Output>,\n  options?: SimpleFunctionOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerFunction(\n  handlerOrName: unknown,\n  handlerOrOptions?: unknown,\n  options: SimpleFunctionOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n  if (typeof handlerOrName === \"string\") {\n    if (typeof handlerOrOptions !== \"function\") {\n      throw new SDKUsageError(\"registerFunction(name, handler) requires an async handler\");\n    }\n    return registerWithDefaults(\n      handlerOrName,\n      handlerOrOptions as RuntimeHandler,\n      options,\n      false,\n    );\n  }\n  if (typeof handlerOrName !== \"function\") {\n    throw new SDKUsageError(\"registerFunction requires an async handler\");\n  }\n  const handler = handlerOrName as RuntimeHandler;\n  if (typeof handlerOrOptions === \"function\") {\n    throw new SDKUsageError(\"registerFunction received an unexpected second handler\");\n  }\n  if (hasExplicitSchemas(handlerOrOptions)) {\n    return register(\n      handler as (...args: readonly unknown[]) => Promise<unknown>,\n      handlerOrOptions,\n      false,\n    );\n  }\n  throw new SDKUsageError(\n    \"Schema-free functions require an explicit stable name: registerFunction(name, handler)\",\n  );\n}\n\nexport function registerApplication<\n  const P extends readonly Parameter<unknown>[],\n  Result,\n>(\n  handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n  options: ApplicationOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\nexport function registerApplication<\n  const Args extends readonly unknown[],\n  Output,\n>(\n  name: string,\n  handler: (...args: Args) => Promise<Output>,\n  options?: SimpleApplicationOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerApplication(\n  handlerOrName: unknown,\n  handlerOrOptions?: unknown,\n  options: SimpleApplicationOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n  if (typeof handlerOrName === \"string\") {\n    if (typeof handlerOrOptions !== \"function\") {\n      throw new SDKUsageError(\"registerApplication(name, handler) requires an async handler\");\n    }\n    return registerWithDefaults(\n      handlerOrName,\n      handlerOrOptions as RuntimeHandler,\n      options,\n      true,\n    );\n  }\n  if (typeof handlerOrName !== \"function\") {\n    throw new SDKUsageError(\"registerApplication requires an async handler\");\n  }\n  const handler = handlerOrName as RuntimeHandler;\n  if (typeof handlerOrOptions === \"function\") {\n    throw new SDKUsageError(\"registerApplication received an unexpected second handler\");\n  }\n  if (hasExplicitSchemas(handlerOrOptions)) {\n    return register(\n      handler as (...args: readonly unknown[]) => Promise<unknown>,\n      handlerOrOptions,\n      true,\n    );\n  }\n  throw new SDKUsageError(\n    \"Schema-free applications require an explicit stable name: registerApplication(name, handler)\",\n  );\n}\n","const SDK_USAGE_ERROR_BRAND = Symbol.for(\"tensorlake.applications.sdk-usage-error.v1\");\nconst REQUEST_ERROR_BRAND = Symbol.for(\"tensorlake.applications.request-error.v1\");\nconst FUNCTION_ERROR_BRAND = Symbol.for(\"tensorlake.applications.function-error.v1\");\nconst TIMEOUT_ERROR_BRAND = Symbol.for(\"tensorlake.applications.timeout-error.v1\");\n\nexport class TensorlakeApplicationError extends Error {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"TensorlakeApplicationError\";\n  }\n}\n\nexport class SDKUsageError extends TensorlakeApplicationError {\n  readonly [SDK_USAGE_ERROR_BRAND] = true;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== SDKUsageError) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isSDKUsageError(value);\n  }\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"SDKUsageError\";\n  }\n}\n\n/** Recognizes SDKUsageError instances thrown by independently bundled SDK copies. */\nfunction isSDKUsageError(value: unknown): value is SDKUsageError {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[SDK_USAGE_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class SerializationError extends TensorlakeApplicationError {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"SerializationError\";\n  }\n}\n\nexport class DeserializationError extends TensorlakeApplicationError {\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"DeserializationError\";\n  }\n}\n\nexport class FunctionError extends TensorlakeApplicationError {\n  readonly [FUNCTION_ERROR_BRAND] = true;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== FunctionError) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isFunctionError(value);\n  }\n\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"FunctionError\";\n  }\n}\n\nexport class TimeoutError extends TensorlakeApplicationError {\n  readonly [TIMEOUT_ERROR_BRAND] = true;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== TimeoutError) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isTimeoutError(value);\n  }\n\n  constructor() {\n    super(\"Timed out.\");\n    this.name = \"TimeoutError\";\n  }\n}\n\n/** Recognizes TimeoutError instances thrown by independently bundled SDK copies. */\nfunction isTimeoutError(value: unknown): value is TimeoutError {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[TIMEOUT_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\n/** Recognizes FunctionError instances thrown by independently bundled SDK copies. */\nfunction isFunctionError(value: unknown): value is FunctionError {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[FUNCTION_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class RequestError extends TensorlakeApplicationError {\n  readonly [REQUEST_ERROR_BRAND] = true;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== RequestError) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isRequestError(value);\n  }\n\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, options);\n    this.name = \"RequestError\";\n  }\n}\n\n/** Recognizes RequestError instances thrown by independently bundled SDK copies. */\nexport function isRequestError(value: unknown): value is RequestError {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[REQUEST_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class ReplayMismatchError extends TensorlakeApplicationError {\n  constructor(message = \"Function execution diverged from its durable event history\") {\n    super(message);\n    this.name = \"ReplayMismatchError\";\n  }\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport type JSONSchema = Record<string, unknown>;\n\nconst TYPE = Symbol(\"tensorlake.schema.type\");\n// SDK-generated schemas use JSON Schema 2020-12 features such as prefixItems.\n// Validate with the same dialect that we emit into application manifests so\n// local/executor checks cannot silently accept values the public schema rejects.\nconst ajvDraft7 = new Ajv({ allErrors: true, strict: false });\nconst ajv2020 = new Ajv2020({ allErrors: true, strict: false });\n\nexport interface Schema<T> {\n  readonly jsonSchema: JSONSchema;\n  readonly [TYPE]?: T;\n  readonly _file?: boolean;\n  readonly _httpBody?: boolean;\n}\n\nexport type Infer<S extends Schema<unknown>> = S extends Schema<infer T> ? T : never;\n\nexport interface ParameterOptions<T> {\n  description?: string;\n  optional?: boolean;\n  default?: T;\n}\n\nexport interface Parameter<T> {\n  readonly name: string;\n  readonly schema: Schema<T>;\n  readonly description?: string;\n  readonly required: boolean;\n  readonly hasDefault: boolean;\n  readonly defaultValue?: T;\n}\n\nexport type ParameterValues<P extends readonly Parameter<unknown>[]> = {\n  [K in keyof P]: P[K] extends Parameter<infer T> ? T : never;\n};\n\nfunction snapshotJSONValue(\n  value: unknown,\n  label: string,\n  ancestors: Set<object>,\n  freeze: boolean,\n): unknown {\n  if (\n    value == null\n    || typeof value === \"string\"\n    || typeof value === \"boolean\"\n  ) {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) {\n      throw new SDKUsageError(`${label} contains a non-finite number`);\n    }\n    return value;\n  }\n  if (typeof value !== \"object\") {\n    throw new SDKUsageError(`${label} contains unsupported ${typeof value}`);\n  }\n  if (ancestors.has(value)) {\n    throw new SDKUsageError(`${label} contains a cycle`);\n  }\n  if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {\n    throw new SDKUsageError(\n      `${label} contains unsupported ${value.constructor?.name ?? \"object\"}`,\n    );\n  }\n\n  ancestors.add(value);\n  let result: unknown[] | Record<string, unknown>;\n  if (Array.isArray(value)) {\n    result = [];\n    for (let index = 0; index < value.length; index += 1) {\n      if (!Object.prototype.hasOwnProperty.call(value, index)) {\n        throw new SDKUsageError(`${label} contains a sparse array entry at index ${index}`);\n      }\n      result.push(snapshotJSONValue(\n        value[index],\n        `${label}[${index}]`,\n        ancestors,\n        freeze,\n      ));\n    }\n  } else {\n    result = Object.fromEntries(\n      Object.entries(value).map(([key, item]) => [\n        key,\n        snapshotJSONValue(item, `${label}.${key}`, ancestors, freeze),\n      ]),\n    );\n  }\n  ancestors.delete(value);\n  return freeze ? Object.freeze(result) : result;\n}\n\nfunction snapshotJSONSchema(jsonSchema: JSONSchema): JSONSchema {\n  return snapshotJSONValue(\n    jsonSchema,\n    \"JSON schema\",\n    new Set(),\n    true,\n  ) as JSONSchema;\n}\n\nfunction snapshotDefault<T>(valueSchema: Schema<T>, value: T): T {\n  if (valueSchema._file) {\n    if (!isFile(value)) {\n      throw new SDKUsageError(\"parameter default must be a Tensorlake File\");\n    }\n    return new File(new Uint8Array(value.content), value.contentType) as T;\n  }\n  if (valueSchema._httpBody) {\n    if (!isHttpBody(value)) {\n      throw new SDKUsageError(\"parameter default must be a Tensorlake HttpBody\");\n    }\n    return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n  }\n  return snapshotJSONValue(\n    value,\n    \"parameter default\",\n    new Set(),\n    false,\n  ) as T;\n}\n\nfunction makeSchema<T>(\n  jsonSchema: JSONSchema,\n  rawBody?: \"file\" | \"httpBody\",\n): Schema<T> {\n  return Object.freeze({\n    jsonSchema: snapshotJSONSchema(jsonSchema),\n    _file: rawBody === \"file\",\n    _httpBody: rawBody === \"httpBody\",\n  });\n}\n\nfunction rejectRawBodyComposition(\n  operation: string,\n  values: readonly Schema<unknown>[],\n): void {\n  const rawBody = values.find((value) => value._file || value._httpBody);\n  if (rawBody != null) {\n    const factory = rawBody._httpBody ? \"httpBody\" : \"file\";\n    const type = rawBody._httpBody ? \"HttpBody\" : \"File\";\n    const supportedPosition = rawBody._httpBody\n      ? \"as a direct application parameter\"\n      : \"as a direct parameter or return value\";\n    throw new SDKUsageError(\n      `schema.${operation} cannot contain schema.${factory}(); ${type} is only supported`\n      + ` ${supportedPosition}`,\n    );\n  }\n}\n\nfunction parameter<T>(\n  name: string,\n  valueSchema: Schema<T>,\n  options: ParameterOptions<T> = {},\n): Parameter<T> {\n  if (!/^[A-Za-z_$][\\w$]*$/.test(name)) {\n    throw new SDKUsageError(`Invalid parameter name '${name}'`);\n  }\n  const hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n  if (hasDefault) validateWithSchema(valueSchema, options.default, `default for '${name}'`);\n  const defaultSnapshot = hasDefault\n    ? snapshotDefault(valueSchema, options.default as T)\n    : undefined;\n  return Object.freeze({\n    name,\n    schema: valueSchema,\n    description: options.description,\n    required: options.optional !== true && !hasDefault,\n    hasDefault,\n    // Defaults cross two public boundaries: callers can inspect the registered\n    // definition, and every invocation receives the default when an argument is\n    // omitted. Return a fresh boundary copy so neither path can mutate the\n    // registration snapshot, later invocations, or generated manifests.\n    get defaultValue(): T | undefined {\n      return hasDefault\n        ? snapshotDefault(valueSchema, defaultSnapshot as T)\n        : undefined;\n    },\n  });\n}\n\nexport const schema = {\n  /** Any JSON-serializable value. Useful when strict runtime validation is not needed. */\n  json: <T = unknown>() => makeSchema<T>({}),\n  string: (options: Omit<JSONSchema, \"type\"> = {}) =>\n    makeSchema<string>({ ...options, type: \"string\" }),\n  number: (options: Omit<JSONSchema, \"type\"> = {}) =>\n    makeSchema<number>({ ...options, type: \"number\" }),\n  integer: (options: Omit<JSONSchema, \"type\"> = {}) =>\n    makeSchema<number>({ ...options, type: \"integer\" }),\n  boolean: () => makeSchema<boolean>({ type: \"boolean\" }),\n  null: () => makeSchema<null>({ type: \"null\" }),\n  literal: <T extends string | number | boolean | null>(value: T) =>\n    makeSchema<T>({ const: value }),\n  enum: <const T extends readonly (string | number)[]>(values: T) =>\n    makeSchema<T[number]>({ enum: [...values] }),\n  array: <S extends Schema<unknown>>(item: S, options: Omit<JSONSchema, \"type\" | \"items\"> = {}) => {\n    rejectRawBodyComposition(\"array\", [item]);\n    return makeSchema<Infer<S>[]>({ ...options, type: \"array\", items: item.jsonSchema });\n  },\n  tuple: <const S extends readonly Schema<unknown>[]>(items: S) => {\n    rejectRawBodyComposition(\"tuple\", items);\n    return makeSchema<{ [K in keyof S]: S[K] extends Schema<infer T> ? T : never }>({\n      type: \"array\",\n      prefixItems: items.map((item) => item.jsonSchema),\n      minItems: items.length,\n      maxItems: items.length,\n    });\n  },\n  record: <S extends Schema<unknown>>(value: S) => {\n    rejectRawBodyComposition(\"record\", [value]);\n    return makeSchema<Record<string, Infer<S>>>({\n      type: \"object\",\n      additionalProperties: value.jsonSchema,\n    });\n  },\n  object: <const P extends Record<string, Schema<unknown>>>(properties: P) => {\n    rejectRawBodyComposition(\"object\", Object.values(properties));\n    return makeSchema<{ [K in keyof P]: P[K] extends Schema<infer T> ? T : never }>({\n      type: \"object\",\n      properties: Object.fromEntries(\n        Object.entries(properties).map(([key, item]) => [key, item.jsonSchema]),\n      ),\n      required: Object.keys(properties),\n      additionalProperties: false,\n    });\n  },\n  union: <const S extends readonly Schema<unknown>[]>(...choices: S) => {\n    rejectRawBodyComposition(\"union\", choices);\n    return makeSchema<Infer<S[number]>>({ anyOf: choices.map((choice) => choice.jsonSchema) });\n  },\n  nullable: <S extends Schema<unknown>>(value: S) => {\n    rejectRawBodyComposition(\"nullable\", [value]);\n    return makeSchema<Infer<S> | null>({ anyOf: [value.jsonSchema, { type: \"null\" }] });\n  },\n  file: () => makeSchema<File>({ type: \"tensorlake_file\" }, \"file\"),\n  httpBody: () =>\n    makeSchema<HttpBody>({ type: \"tensorlake_http_body\" }, \"httpBody\"),\n  custom: <T>(jsonSchema: JSONSchema) => makeSchema<T>({ ...jsonSchema }),\n  parameter,\n};\n\ninterface CachedValidator {\n  readonly validate: ValidateFunction;\n  readonly errorsText: (errors: ValidateFunction[\"errors\"]) => string;\n}\n\nconst validatorCache = new WeakMap<object, CachedValidator>();\n\nfunction compileValidator(jsonSchema: JSONSchema): CachedValidator {\n  // Earlier SDK versions validated custom schemas with Ajv's draft-07\n  // default. Preserve that behavior for explicitly declared draft-07 schemas\n  // while using 2020-12 for SDK-generated schemas and custom schemas without a\n  // dialect declaration.\n  const dialect = jsonSchema.$schema;\n  const engine = typeof dialect === \"string\" && /\\/draft-07\\/schema#?$/.test(dialect)\n    ? ajvDraft7\n    : ajv2020;\n  const validate = engine.compile(jsonSchema);\n  return {\n    validate,\n    errorsText: (errors) => engine.errorsText(errors, { separator: \"; \" }),\n  };\n}\n\nexport function validateWithSchema<T>(valueSchema: Schema<T>, value: unknown, label: string): T {\n  if (valueSchema._file) {\n    if (!isFile(value)) {\n      throw new SDKUsageError(`${label} must be a Tensorlake File`);\n    }\n    return value as T;\n  }\n  if (valueSchema._httpBody) {\n    if (!isHttpBody(value)) {\n      throw new SDKUsageError(`${label} must be a Tensorlake HttpBody`);\n    }\n    return value as T;\n  }\n  if (isFile(value)) {\n    throw new SDKUsageError(`${label} must use schema.file() for a Tensorlake File`);\n  }\n  if (isHttpBody(value)) {\n    throw new SDKUsageError(\n      `${label} must use schema.httpBody() for a Tensorlake HttpBody`,\n    );\n  }\n  let cached = validatorCache.get(valueSchema as object);\n  if (cached == null) {\n    try {\n      cached = compileValidator(valueSchema.jsonSchema);\n    } catch (error) {\n      const details = error instanceof Error ? error.message : String(error);\n      throw new SDKUsageError(`${label} uses an invalid JSON schema: ${details}`);\n    }\n    validatorCache.set(valueSchema as object, cached);\n  }\n  if (!cached.validate(value)) {\n    const details = cached.errorsText(cached.validate.errors);\n    throw new SDKUsageError(`${label} does not match its schema: ${details}`);\n  }\n  return value as T;\n}\n\nexport function parameterJSONSchema(parameter: Parameter<unknown>): JSONSchema {\n  const result: JSONSchema = {\n    ...parameter.schema.jsonSchema,\n    title: parameter.name,\n    parameter_kind: \"POSITIONAL_OR_KEYWORD\",\n  };\n  if (parameter.description != null) result.description = parameter.description;\n  if (parameter.hasDefault) {\n    result.default = parameter.schema._file || parameter.schema._httpBody\n      ? true\n      : parameter.defaultValue;\n  }\n  return result;\n}\n","import { SDKUsageError } from \"./errors.js\";\n\nconst FILE_BRAND = Symbol.for(\"tensorlake.applications.file.v1\");\n\nexport class File {\n  readonly [FILE_BRAND] = true;\n  readonly content: Uint8Array;\n  readonly contentType: string;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== File) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isFile(value);\n  }\n\n  constructor(content: Uint8Array | ArrayBuffer, contentType: string) {\n    if (!contentType.trim()) {\n      throw new SDKUsageError(\"File contentType cannot be empty\");\n    }\n    this.content = content instanceof Uint8Array ? content : new Uint8Array(content);\n    this.contentType = contentType;\n  }\n}\n\n/**\n * Recognizes Tensorlake Files across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `File` constructors are not\n * referentially equal. The shared brand and `Symbol.hasInstance` keep\n * `instanceof File` useful across that boundary.\n */\nexport function isFile(value: unknown): value is File {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[FILE_BRAND] === true\n    && candidate.content instanceof Uint8Array\n    && typeof candidate.contentType === \"string\"\n    && candidate.contentType.trim().length > 0;\n}\n","const HTTP_BODY_BRAND = Symbol.for(\"tensorlake.applications.http-body.v1\");\n\nexport class HttpBody {\n  readonly [HTTP_BODY_BRAND] = true;\n  readonly content: Uint8Array;\n  readonly contentType?: string;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== HttpBody) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isHttpBody(value);\n  }\n\n  constructor(\n    content: Uint8Array | ArrayBuffer,\n    contentType?: string,\n  ) {\n    this.content = content instanceof Uint8Array\n      ? content\n      : new Uint8Array(content);\n    this.contentType = contentType;\n  }\n\n  text(encoding = \"utf-8\"): string {\n    return new TextDecoder(encoding, { fatal: true }).decode(this.content);\n  }\n\n  json<T = unknown>(): T {\n    return JSON.parse(this.text()) as T;\n  }\n}\n\n/**\n * Recognizes Tensorlake HTTP bodies across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `HttpBody` constructors are not\n * referentially equal.\n */\nexport function isHttpBody(value: unknown): value is HttpBody {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[HTTP_BODY_BRAND] === true\n    && candidate.content instanceof Uint8Array\n    && (\n      candidate.contentType === undefined\n      || typeof candidate.contentType === \"string\"\n    );\n}\n","import type { RegisteredDefinition } from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\ninterface RegistryState {\n  functions: Map<string, RegisteredDefinition>;\n  applications: Map<string, RegisteredDefinition>;\n}\n\nexport interface RegistrySnapshot {\n  functions: Map<string, RegisteredDefinition>;\n  applications: Map<string, RegisteredDefinition>;\n}\n\nconst REGISTRY_KEY = Symbol.for(\"tensorlake.applications.registry.v1\");\n\nfunction registry(): RegistryState {\n  const target = globalThis as typeof globalThis & { [REGISTRY_KEY]?: RegistryState };\n  target[REGISTRY_KEY] ??= { functions: new Map(), applications: new Map() };\n  return target[REGISTRY_KEY];\n}\n\nexport function registerDefinition(definition: RegisteredDefinition, isApplication: boolean): void {\n  const state = registry();\n  const existing = state.functions.get(definition.name);\n  if (existing != null && existing !== definition) {\n    throw new SDKUsageError(`Multiple Tensorlake functions are named '${definition.name}'`);\n  }\n  state.functions.set(definition.name, definition);\n  if (isApplication) {\n    const app = state.applications.get(definition.name);\n    if (app != null && app !== definition) {\n      throw new SDKUsageError(`Multiple Tensorlake applications are named '${definition.name}'`);\n    }\n    state.applications.set(definition.name, definition);\n  }\n}\n\nexport function getFunction(name: string): RegisteredDefinition {\n  const result = registry().functions.get(name);\n  if (result == null) throw new SDKUsageError(`Tensorlake function '${name}' is not registered`);\n  return result;\n}\n\nexport function getFunctions(): RegisteredDefinition[] {\n  return [...registry().functions.values()];\n}\n\nexport function getApplications(): RegisteredDefinition[] {\n  return [...registry().applications.values()];\n}\n\nexport function snapshotRegistry(): RegistrySnapshot {\n  const state = registry();\n  return {\n    functions: new Map(state.functions),\n    applications: new Map(state.applications),\n  };\n}\n\nexport function restoreRegistry(snapshot: RegistrySnapshot): void {\n  const state = registry();\n  state.functions.clear();\n  state.applications.clear();\n  for (const [name, definition] of snapshot.functions) state.functions.set(name, definition);\n  for (const [name, definition] of snapshot.applications) state.applications.set(name, definition);\n}\n\nexport function clearRegistryForTest(): void {\n  registry().functions.clear();\n  registry().applications.clear();\n}\n","export type HeadersInit =\n  | Headers\n  | Record<string, string>\n  | Iterable<readonly [string, string]>;\n\nconst HEADERS_BRAND = Symbol.for(\"tensorlake.applications.headers.v1\");\n\n/** Immutable, case-insensitive application request headers. */\nexport class Headers implements Iterable<readonly [string, string]> {\n  readonly [HEADERS_BRAND] = true;\n  readonly #items: readonly (readonly [string, string])[];\n  readonly #lookup: ReadonlyMap<string, readonly string[]>;\n\n  static [Symbol.hasInstance](value: unknown): boolean {\n    if (this !== Headers) {\n      return Function.prototype[Symbol.hasInstance].call(this, value);\n    }\n    return isHeaders(value);\n  }\n\n  constructor(headers: HeadersInit = []) {\n    const entries = headers instanceof Headers\n      ? [...headers]\n      : Symbol.iterator in Object(headers)\n        ? [...headers as Iterable<readonly [string, string]>]\n        : Object.entries(headers);\n    const lookup = new Map<string, string[]>();\n    this.#items = Object.freeze(entries.map(([name, value]) => {\n      if (typeof name !== \"string\" || typeof value !== \"string\") {\n        throw new TypeError(\"Headers require string names and values\");\n      }\n      const item = Object.freeze([name, value] as const);\n      const key = name.toLowerCase();\n      lookup.set(key, [...(lookup.get(key) ?? []), value]);\n      return item;\n    }));\n    this.#lookup = lookup;\n    Object.freeze(this);\n  }\n\n  get(name: string): string | undefined {\n    return this.#lookup.get(name.toLowerCase())?.at(-1);\n  }\n\n  getAll(name: string): readonly string[] {\n    return Object.freeze([...(this.#lookup.get(name.toLowerCase()) ?? [])]);\n  }\n\n  has(name: string): boolean {\n    return this.#lookup.has(name.toLowerCase());\n  }\n\n  entries(): IterableIterator<readonly [string, string]> {\n    return this.#items[Symbol.iterator]();\n  }\n\n  [Symbol.iterator](): IterableIterator<readonly [string, string]> {\n    return this.entries();\n  }\n}\n\n/** Recognizes immutable request headers across independently bundled SDK copies. */\nexport function isHeaders(value: unknown): value is Headers {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Record<PropertyKey, unknown>;\n  return candidate[HEADERS_BRAND] === true\n    && typeof candidate.get === \"function\"\n    && typeof candidate.getAll === \"function\"\n    && typeof candidate.has === \"function\"\n    && typeof candidate[Symbol.iterator] === \"function\";\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { SDKUsageError } from \"./errors.js\";\nimport { Headers, type HeadersInit } from \"./headers.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nexport interface ProgressOptions {\n  message?: string;\n  attributes?: Record<string, string>;\n}\n\nexport interface RequestState {\n  set(key: string, value: unknown): Promise<void>;\n  get<T>(key: string, defaultValue?: T): Promise<T | undefined>;\n}\n\nexport interface RequestMetrics {\n  timer(name: string, value: number): Promise<void>;\n  counter(name: string, value?: number): Promise<void>;\n}\n\nexport interface FunctionProgress {\n  update(current: number, total: number, options?: ProgressOptions): Promise<void>;\n}\n\nexport function validateRequestStateKey(key: unknown): asserts key is string {\n  if (typeof key !== \"string\") {\n    throw new SDKUsageError(`State key must be a string, got: ${String(key)}`);\n  }\n}\n\nexport function serializeRequestStateValue(value: unknown): Uint8Array {\n  const serialized = serializeValue(value);\n  if (serialized.encoding !== \"json\") {\n    throw new SDKUsageError(\"Request state values must be JSON values\");\n  }\n  return serialized.data;\n}\n\nexport function validateCounterMetric(name: unknown, value: unknown): void {\n  if (typeof name !== \"string\") {\n    throw new SDKUsageError(`Counter name must be a string, got: ${String(name)}`);\n  }\n  if (typeof value !== \"number\" || !Number.isInteger(value)) {\n    throw new SDKUsageError(`Counter value must be an int, got: ${String(value)}`);\n  }\n  if (!Number.isSafeInteger(value)) {\n    throw new SDKUsageError(`Counter value must be a safe int, got: ${String(value)}`);\n  }\n}\n\nexport function validateTimerMetric(name: unknown, value: unknown): void {\n  if (typeof name !== \"string\") {\n    throw new SDKUsageError(`Timer name must be a string, got: ${String(name)}`);\n  }\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    throw new SDKUsageError(`Timer value must be a finite number, got: ${String(value)}`);\n  }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<PropertyKey, unknown> {\n  if (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nexport function validateProgressUpdate(\n  current: number,\n  total: number,\n  options?: ProgressOptions,\n): void {\n  if (!Number.isFinite(current) || !Number.isFinite(total) || total < 0 || current < 0) {\n    throw new SDKUsageError(\"Progress current and total must be non-negative finite numbers\");\n  }\n  if (options != null && !isPlainRecord(options)) {\n    throw new SDKUsageError(\"Progress options must be an object\");\n  }\n  if (options?.message != null && typeof options.message !== \"string\") {\n    throw new SDKUsageError(\"Progress message must be a string\");\n  }\n  if (options?.attributes != null) {\n    if (!isPlainRecord(options.attributes)) {\n      throw new SDKUsageError(\"Progress attributes must be an object of string key/value pairs\");\n    }\n    for (const key of Reflect.ownKeys(options.attributes)) {\n      if (typeof key !== \"string\") {\n        throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n      }\n      const value = options.attributes[key];\n      if (typeof value !== \"string\") {\n        throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n      }\n    }\n  }\n}\n\nexport interface RequestContextValue {\n  readonly requestId: string;\n  readonly headers: Headers;\n  readonly signal: AbortSignal;\n  readonly state: RequestState;\n  readonly metrics: RequestMetrics;\n  readonly progress: FunctionProgress;\n}\n\n// A deployed application bundle contains its own copy of the applications SDK,\n// while the function executor has another copy in its runtime capsule. Both\n// copies execute in the same Node process and must observe the same context.\n// Symbol.for keeps the AsyncLocalStorage process-global without exposing it as\n// public API or coupling the application bundle to the executor package.\nconst REQUEST_CONTEXT_STORAGE_KEY = Symbol.for(\n  \"tensorlake.applications.request-context-storage.v1\",\n);\n\nfunction requestContextStorage(): AsyncLocalStorage<RequestContextValue> {\n  const target = globalThis as typeof globalThis & {\n    [REQUEST_CONTEXT_STORAGE_KEY]?: AsyncLocalStorage<RequestContextValue>;\n  };\n  target[REQUEST_CONTEXT_STORAGE_KEY] ??= new AsyncLocalStorage<RequestContextValue>();\n  return target[REQUEST_CONTEXT_STORAGE_KEY];\n}\n\nexport class RequestContext {\n  static get(): RequestContextValue {\n    const context = requestContextStorage().getStore();\n    if (context == null) {\n      throw new SDKUsageError(\"RequestContext.get() can only be called from a running Tensorlake function\");\n    }\n    return context;\n  }\n}\n\nexport function runWithRequestContext<T>(\n  context: RequestContextValue,\n  callback: () => Promise<T>,\n): Promise<T> {\n  return requestContextStorage().run(context, callback);\n}\n\nexport async function waitWithAbortSignal<T>(\n  value: Promise<T>,\n  signal: AbortSignal,\n): Promise<T> {\n  if (signal.aborted) throw signal.reason;\n  let onAbort: (() => void) | undefined;\n  try {\n    return await Promise.race([\n      value,\n      new Promise<never>((_resolve, reject) => {\n        onAbort = () => reject(signal.reason);\n        signal.addEventListener(\"abort\", onAbort, { once: true });\n      }),\n    ]);\n  } finally {\n    if (onAbort != null) signal.removeEventListener(\"abort\", onAbort);\n  }\n}\n\nexport class MemoryRequestContext implements RequestContextValue {\n  readonly headers: Headers;\n  readonly signal: AbortSignal;\n  private readonly values = new Map<string, Uint8Array>();\n  private readonly counters = new Map<string, number>();\n  private readonly timers = new Map<string, number[]>();\n  private lastProgress?: { current: number; total: number; options?: ProgressOptions };\n\n  constructor(\n    readonly requestId: string,\n    options: { signal?: AbortSignal; headers?: HeadersInit } = {},\n  ) {\n    this.headers = new Headers(options.headers);\n    this.signal = options.signal ?? new AbortController().signal;\n  }\n\n  readonly state: RequestState = {\n    set: async (key, value) => {\n      validateRequestStateKey(key);\n      this.values.set(key, serializeRequestStateValue(value).slice());\n    },\n    get: async <T>(key: string, defaultValue?: T) => {\n      validateRequestStateKey(key);\n      const value = this.values.get(key);\n      return value == null ? defaultValue : deserializeJSON(value) as T;\n    },\n  };\n\n  readonly metrics: RequestMetrics = {\n    counter: async (name, value = 1) => {\n      validateCounterMetric(name, value);\n      this.counters.set(name, (this.counters.get(name) ?? 0) + value);\n    },\n    timer: async (name, value) => {\n      validateTimerMetric(name, value);\n      const values = this.timers.get(name) ?? [];\n      values.push(value);\n      this.timers.set(name, values);\n    },\n  };\n\n  readonly progress: FunctionProgress = {\n    update: async (current, total, options) => {\n      validateProgressUpdate(current, total, options);\n      this.lastProgress = { current, total, options };\n    },\n  };\n}\n","import { createHash } from \"node:crypto\";\nimport { DeserializationError, SerializationError } from \"./errors.js\";\nimport { isFile } from \"./file.js\";\nimport { isHttpBody } from \"./http-body.js\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport interface SerializedValue {\n  data: Uint8Array;\n  contentType: string;\n  encoding: \"json\" | \"raw\";\n}\n\nfunction assertJSONValue(value: unknown, path: string, seen: Set<object>): void {\n  if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) throw new SerializationError(`${path} contains a non-finite number`);\n    return;\n  }\n  if (typeof value !== \"object\") {\n    throw new SerializationError(`${path} contains unsupported ${typeof value}`);\n  }\n  if (isFile(value)) {\n    throw new SerializationError(`${path} contains a nested File; File is only supported as a direct value`);\n  }\n  if (isHttpBody(value)) {\n    throw new SerializationError(\n      `${path} contains a nested HttpBody; HttpBody is only supported as a direct value`,\n    );\n  }\n  if (seen.has(value)) throw new SerializationError(`${path} contains a cycle`);\n  if (Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {\n    throw new SerializationError(`${path} contains unsupported ${value.constructor?.name ?? \"object\"}`);\n  }\n  seen.add(value);\n  if (Array.isArray(value)) {\n    for (let index = 0; index < value.length; index += 1) {\n      if (!Object.prototype.hasOwnProperty.call(value, index)) {\n        throw new SerializationError(`${path} contains a sparse array entry at index ${index}`);\n      }\n      assertJSONValue(value[index], `${path}[${index}]`, seen);\n    }\n  } else {\n    for (const [key, item] of Object.entries(value)) {\n      assertJSONValue(item, `${path}.${key}`, seen);\n    }\n  }\n  seen.delete(value);\n}\n\nexport function serializeValue(value: unknown): SerializedValue {\n  if (isFile(value)) {\n    return { data: value.content, contentType: value.contentType, encoding: \"raw\" };\n  }\n  if (isHttpBody(value)) {\n    return {\n      data: value.content,\n      contentType: value.contentType ?? \"\",\n      encoding: \"raw\",\n    };\n  }\n  try {\n    assertJSONValue(value, \"value\", new Set());\n    return {\n      data: textEncoder.encode(JSON.stringify(value)),\n      contentType: \"application/json; charset=UTF-8\",\n      encoding: \"json\",\n    };\n  } catch (error) {\n    if (error instanceof SerializationError) throw error;\n    throw new SerializationError(\"Failed to serialize JSON value\", { cause: error });\n  }\n}\n\nexport function deserializeJSON(data: Uint8Array): unknown {\n  try {\n    return JSON.parse(textDecoder.decode(data));\n  } catch (error) {\n    throw new DeserializationError(\"Failed to deserialize JSON value\", { cause: error });\n  }\n}\n\nexport function jsonRoundTrip<T>(value: T): T {\n  const serialized = serializeValue(value);\n  if (serialized.encoding !== \"json\") return value;\n  return deserializeJSON(serialized.data) as T;\n}\n\nexport function canonicalJSON(value: unknown): string {\n  if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n  if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(\",\")}]`;\n  const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b));\n  return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJSON(item)}`).join(\",\")}}`;\n}\n\nexport function sha256(data: Uint8Array): string {\n  return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n  executeHandler,\n  type FunctionFuture,\n  type FunctionRuntime,\n  type RegisteredDefinition,\n  type RegisteredFunction,\n  runWithFunctionRuntime,\n} from \"./function.js\";\nimport {\n  FunctionError,\n  SDKUsageError,\n  TimeoutError,\n  isRequestError,\n} from \"./errors.js\";\nimport {\n  MemoryRequestContext,\n  runWithRequestContext,\n  waitWithAbortSignal,\n} from \"./context.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { jsonRoundTrip } from \"./serialization.js\";\n\nexport class LocalRequest<T> {\n  constructor(\n    readonly id: string,\n    private readonly value: Promise<T>,\n    private readonly cancelRequest: (reason?: unknown) => void,\n  ) {}\n\n  output(): Promise<T> {\n    return this.value;\n  }\n\n  cancel(reason?: unknown): void {\n    this.cancelRequest(reason);\n  }\n}\n\nfunction boundaryCopy<T>(value: T): T {\n  if (isFile(value)) {\n    return new File(new Uint8Array(value.content), value.contentType) as T;\n  }\n  if (isHttpBody(value)) {\n    return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n  }\n  return jsonRoundTrip(value);\n}\n\nexport class LocalRuntime implements FunctionRuntime {\n  readonly requestContext: MemoryRequestContext;\n  private readonly application: RegisteredDefinition;\n  private readonly controller = new AbortController();\n\n  constructor(application: RegisteredDefinition, requestId = `local-${randomUUID()}`) {\n    this.application = application;\n    this.requestContext = new MemoryRequestContext(requestId, {\n      signal: this.controller.signal,\n    });\n  }\n\n  cancel(reason: unknown = new FunctionError(\"Local request was cancelled\")): void {\n    if (!this.controller.signal.aborted) this.controller.abort(reason);\n  }\n\n  invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T> {\n    return this.execute<T>(definition, args);\n  }\n\n  async runFuture<T>(future: FunctionFuture<T>): Promise<T> {\n    if (future.delaySeconds > 0) {\n      let timer: NodeJS.Timeout | undefined;\n      try {\n        await waitWithAbortSignal(\n          new Promise<void>((resolve) => {\n            timer = setTimeout(resolve, future.delaySeconds * 1000);\n          }),\n          this.requestContext.signal,\n        );\n      } finally {\n        if (timer != null) clearTimeout(timer);\n      }\n    }\n    return this.execute<T>(future.definition, future.args);\n  }\n\n  async reduce<T>(\n    definition: RegisteredDefinition,\n    items: readonly unknown[],\n    initial: unknown,\n    hasInitial: boolean,\n  ): Promise<T> {\n    let reduceItems = items;\n    let reduceInitial = initial;\n    if (!hasInitial) {\n      if (items.length === 0) {\n        throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n      }\n      [reduceInitial, ...reduceItems] = items;\n    }\n    let accumulator = boundaryCopy(reduceInitial);\n    for (const item of reduceItems) {\n      accumulator = await this.execute<T>(definition, [accumulator, item]);\n    }\n    return accumulator as T;\n  }\n\n  private async execute<T>(definition: RegisteredDefinition, rawArgs: readonly unknown[]): Promise<T> {\n    const originalArgs = rawArgs.map(boundaryCopy);\n    const maxRetries = definition.options.retries?.maxRetries\n      ?? this.application.application?.retries.maxRetries\n      ?? 0;\n    let lastError: unknown;\n    for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n      const args = originalArgs.map(boundaryCopy);\n      try {\n        const value = await runWithFunctionRuntime(this, () =>\n          runWithRequestContext(this.requestContext, () =>\n            waitWithAbortSignal(\n              this.withTimeout(executeHandler<T>(definition, args), definition.options.timeout),\n              this.controller.signal,\n            ),\n          ),\n        );\n        return boundaryCopy(value);\n      } catch (error) {\n        if (isRequestError(error)) throw error;\n        if (this.controller.signal.aborted) throw this.controller.signal.reason;\n        lastError = error;\n      }\n    }\n    throw lastError instanceof Error\n      ? new FunctionError(`${definition.name} failed: ${lastError.message}`, { cause: lastError })\n      : new FunctionError(`${definition.name} failed`);\n  }\n\n  private async withTimeout<T>(promise: Promise<T>, timeoutSeconds: number): Promise<T> {\n    let timer: NodeJS.Timeout | undefined;\n    try {\n      return await Promise.race([\n        promise,\n        new Promise<never>((_, reject) => {\n          timer = setTimeout(\n            () => reject(new TimeoutError()),\n            timeoutSeconds * 1000,\n          );\n        }),\n      ]);\n    } finally {\n      if (timer != null) clearTimeout(timer);\n    }\n  }\n}\n\nexport async function runLocal<Args extends readonly unknown[], Result>(\n  application: RegisteredFunction<Args, Result>,\n  ...args: Args\n): Promise<LocalRequest<Result>> {\n  if (application.definition.application == null) {\n    throw new SDKUsageError(`${application.definition.name} is not a Tensorlake application`);\n  }\n  const runtime = new LocalRuntime(application.definition);\n  const output = runtime.invoke<Result>(application.definition, args);\n  return new LocalRequest(\n    runtime.requestContext.requestId,\n    output,\n    (reason) => runtime.cancel(reason),\n  );\n}\n","import { APIClient } from \"../api-client.js\";\nimport type { CloudClientOptions, RequestInput, RequestOutput } from \"../cloud-models.js\";\nimport { RequestExecutionError, RequestFailedError } from \"../errors.js\";\nimport type { RegisteredFunction } from \"./function.js\";\nimport { FunctionError, RequestError, SDKUsageError } from \"./errors.js\";\nimport { File } from \"./file.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nconst CLOUD_CLIENT_OPTION_KEYS = new Set<keyof CloudClientOptions>([\n  \"apiUrl\",\n  \"apiKey\",\n  \"organizationId\",\n  \"projectId\",\n  \"namespace\",\n  \"maxRetries\",\n  \"retryBackoffMs\",\n]);\n\nconst REMOTE_OPTIONS_BRAND: unique symbol = Symbol.for(\n  \"tensorlake.applications.remote-options.v1\",\n);\n\n/** Explicitly marks client options when one or more application arguments are omitted. */\nexport interface RemoteOptions {\n  readonly [REMOTE_OPTIONS_BRAND]: true;\n  readonly clientOptions: CloudClientOptions;\n}\n\ntype RemoteInvocation<Args extends readonly unknown[]> =\n  | [...Args]\n  | [...Required<Args>, CloudClientOptions]\n  | [...Partial<Args>, RemoteOptions];\n\nfunction isCloudClientOptions(value: unknown): value is CloudClientOptions {\n  if (typeof value !== \"object\" || value == null || Array.isArray(value)) return false;\n  const entries = Object.entries(value);\n  return entries.every(([key, option]) => {\n    if (!CLOUD_CLIENT_OPTION_KEYS.has(key as keyof CloudClientOptions)) return false;\n    if (option === undefined) return true;\n    if (key === \"maxRetries\" || key === \"retryBackoffMs\") {\n      return typeof option === \"number\";\n    }\n    return typeof option === \"string\";\n  });\n}\n\nfunction isRemoteOptions(value: unknown): value is RemoteOptions {\n  if (typeof value !== \"object\" || value == null) return false;\n  const candidate = value as Partial<RemoteOptions>;\n  return candidate[REMOTE_OPTIONS_BRAND] === true\n    && isCloudClientOptions(candidate.clientOptions);\n}\n\nexport function remoteOptions(options: CloudClientOptions = {}): RemoteOptions {\n  if (!isCloudClientOptions(options)) {\n    throw new SDKUsageError(\"remoteOptions requires valid CloudClientOptions\");\n  }\n  return Object.freeze({\n    [REMOTE_OPTIONS_BRAND]: true as const,\n    clientOptions: Object.freeze({ ...options }),\n  });\n}\n\nexport class RemoteRequest<T> {\n  constructor(\n    readonly id: string,\n    private readonly applicationName: string,\n    private readonly client: APIClient,\n    private readonly outputIsFile?: boolean,\n  ) {}\n\n  async output(): Promise<T> {\n    let output: RequestOutput;\n    try {\n      await this.client.waitOnRequestCompletion(this.applicationName, this.id);\n      output = await this.client.requestOutput(this.applicationName, this.id);\n    } catch (error) {\n      if (error instanceof RequestExecutionError) {\n        throw new RequestError(error.message, { cause: error });\n      }\n      if (error instanceof RequestFailedError) {\n        throw new FunctionError(error.message, { cause: error });\n      }\n      throw error;\n    }\n    if (this.outputIsFile === true) {\n      return new File(output.serializedValue, output.contentType) as T;\n    }\n    if (this.outputIsFile === false || output.contentType.toLowerCase().startsWith(\"application/json\")) {\n      return deserializeJSON(output.serializedValue) as T;\n    }\n    return new File(output.serializedValue, output.contentType) as T;\n  }\n}\n\nexport function runRemote<Result = unknown>(\n  application: string,\n  ...args: unknown[]\n): Promise<RemoteRequest<Result>>;\nexport async function runRemote<Args extends readonly unknown[], Result>(\n  application: RegisteredFunction<Args, Result>,\n  ...argsAndOptions: RemoteInvocation<Args>\n): Promise<RemoteRequest<Result>>;\nexport async function runRemote(\n  application: RegisteredFunction<readonly unknown[], unknown> | string,\n  ...argsAndOptions: unknown[]\n): Promise<RemoteRequest<unknown>> {\n  const definition = typeof application === \"string\" ? undefined : application.definition;\n  if (definition != null && definition.application == null) {\n    throw new SDKUsageError(`${definition.name} is not a Tensorlake application`);\n  }\n  const applicationName = typeof application === \"string\" ? application : definition!.name;\n  let options: CloudClientOptions | undefined;\n  const args = [...argsAndOptions];\n  const candidate = args.at(-1);\n  if (typeof application === \"string\") {\n    if (isRemoteOptions(candidate)) {\n      options = candidate.clientOptions;\n      args.pop();\n    }\n  } else {\n    const parameters = definition!.parameters;\n    const expectedArgs = parameters.length;\n    if (isRemoteOptions(candidate)) {\n      const suppliedApplicationArgs = args.length - 1;\n      const omitted = parameters.slice(suppliedApplicationArgs);\n      if (omitted.some((parameter) => parameter.required)) {\n        throw new SDKUsageError(\n          `${definition!.name} is missing a required application argument before remoteOptions`,\n        );\n      }\n      options = candidate.clientOptions;\n      args.pop();\n    } else if (args.length === expectedArgs + 1) {\n      if (candidate !== undefined && !isCloudClientOptions(candidate)) {\n        throw new SDKUsageError(\"The trailing runRemote argument must be CloudClientOptions\");\n      }\n      options = args.pop() as CloudClientOptions | undefined;\n    }\n  }\n  const client = new APIClient(options);\n  const inputs: RequestInput[] = args.map((value, index) => {\n    const serialized = serializeValue(value);\n    return { name: String(index), data: serialized.data, contentType: serialized.contentType };\n  });\n  const id = await client.runRequest(applicationName, inputs);\n  return new RemoteRequest<unknown>(id, applicationName, client, definition?.returns._file);\n}\n","import { CloudClient } from \"./cloud-client.js\";\nimport { FilesystemClient } from \"./filesystem.js\";\nimport {\n  RequestExecutionError,\n  RequestFailedError,\n  RequestNotFinishedError,\n} from \"./errors.js\";\nimport type {\n  ApplicationManifest,\n  ApplicationSummary,\n  CloudClientOptions,\n  RequestInput,\n  RequestOutput,\n  FileSystem,\n} from \"./cloud-models.js\";\n\nexport class APIClient {\n  private readonly cloudClient: CloudClient;\n  private readonly filesystemOptions: {\n    apiKey?: string;\n    apiUrl?: string;\n    organizationId?: string;\n    projectId?: string;\n  };\n\n  constructor(options?: CloudClientOptions) {\n    this.cloudClient = new CloudClient(options);\n    this.filesystemOptions = {\n      apiKey: options?.apiKey,\n      apiUrl: options?.apiUrl,\n      organizationId: options?.organizationId,\n      projectId: options?.projectId,\n    };\n  }\n\n  close(): void {\n    this.cloudClient.close();\n  }\n\n  async upsertApplication(\n    manifest: ApplicationManifest,\n    codeZip: Uint8Array | ArrayBuffer | Blob | string,\n    upgradeRunningRequests = false,\n  ): Promise<void> {\n    await this.cloudClient.upsertApplication(\n      manifest,\n      codeZip,\n      upgradeRunningRequests,\n    );\n  }\n\n  async deleteApplication(applicationName: string): Promise<void> {\n    await this.cloudClient.deleteApplication(applicationName);\n  }\n\n  async deleteSandboxImage(imageName: string): Promise<void> {\n    await this.cloudClient.deleteSandboxImage(imageName);\n  }\n\n  async createFileSystem(\n    name: string,\n    description?: string,\n    _options?: { organizationId?: string; projectId?: string },\n  ): Promise<FileSystem> {\n    const filesystem = await new FilesystemClient(this.filesystemOptions).create(name);\n    return {\n      id: filesystem.name,\n      name: filesystem.name,\n      description,\n      status: \"ready\",\n    };\n  }\n\n  async listFileSystems(_options?: {\n    organizationId?: string;\n    projectId?: string;\n  }): Promise<FileSystem[]> {\n    const filesystems = await new FilesystemClient(this.filesystemOptions).list();\n    return filesystems.map((filesystem) => ({\n      id: filesystem.name,\n      name: filesystem.name,\n      status: filesystem.status,\n    }));\n  }\n\n  async deleteFileSystem(\n    fileSystemId: string,\n    _options?: { organizationId?: string; projectId?: string },\n  ): Promise<void> {\n    await new FilesystemClient(this.filesystemOptions).delete(fileSystemId);\n  }\n\n  async applications(): Promise<ApplicationSummary[]> {\n    return this.cloudClient.applications();\n  }\n\n  async application(applicationName: string): Promise<ApplicationManifest> {\n    return this.cloudClient.applicationManifest(applicationName);\n  }\n\n  async runRequest(\n    applicationName: string,\n    inputs: RequestInput[],\n  ): Promise<string> {\n    return this.cloudClient.runRequest(applicationName, inputs);\n  }\n\n  async waitOnRequestCompletion(\n    applicationName: string,\n    requestId: string,\n  ): Promise<void> {\n    await this.cloudClient.waitOnRequestCompletion(applicationName, requestId);\n  }\n\n  async requestOutput(\n    applicationName: string,\n    requestId: string,\n  ): Promise<RequestOutput> {\n    const metadata = await this.cloudClient.requestMetadata(\n      applicationName,\n      requestId,\n    );\n\n    if (metadata.outcome == null) {\n      throw new RequestNotFinishedError();\n    }\n\n    if (typeof metadata.outcome === \"object\") {\n      if (metadata.requestError?.message) {\n        throw new RequestExecutionError(\n          metadata.requestError.message,\n          metadata.requestError.functionName,\n        );\n      }\n      const failure =\n        typeof metadata.outcome.failure === \"string\"\n          ? metadata.outcome.failure\n          : JSON.stringify(metadata.outcome);\n      throw new RequestFailedError(failure);\n    }\n\n    return this.cloudClient.requestOutput(applicationName, requestId);\n  }\n}\n","/**\n * Client for Tensorlake filesystems.\n *\n * A filesystem is a durable, versioned file tree that lives in Tensorlake\n * Cloud. Every write publishes a durable live version; {@link Filesystem.snapshot}\n * retains the current version permanently. Files can be read at any retained\n * version, and a filesystem can be mounted to a local path through the `tl`\n * CLI's FUSE/FSKit daemon.\n *\n * Server-side SDK writes hash complete files locally, upload missing bytes\n * directly to checksum-bound object-store targets, and atomically publish\n * one durable snapshot. Payload bytes never transit the API service.\n *\n * @example\n * const client = new FilesystemClient();   // env-based auth\n * const fs = await client.create(\"my-data\");\n * await fs.writeFile(\"docs/hello.txt\", \"hi\");\n * console.log(await fs.readText(\"docs/hello.txt\"));\n * const snapshot = await fs.snapshot(\"after first write\");\n *\n * const mount = await fs.mount(\"/mnt/my-data\"); // requires the `tl` CLI\n * // ... use it as a normal directory\n * await mount.unmount();\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { MountCli } from \"./mount-cli.js\";\nimport * as defaults from \"./defaults.js\";\nimport {\n  FileNotFoundInFilesystemError,\n  FilesystemAPIError,\n  FilesystemError,\n  FilesystemNotFoundError,\n  MountError,\n  ReadOnlyMountNotSupportedError,\n  fileEntryFromWire,\n  mountStatusFromRaw,\n  trimSlashes,\n  type FileEntry,\n  type FilesystemFileRead,\n  type FilesystemInfo,\n  type FilesystemReadOptions,\n  type FilesystemSnapshot,\n  type FilesystemSnapshotInfo,\n  type FilesystemStatus,\n  type FilesystemVersion,\n  type MountStatus,\n} from \"./filesystem-models.js\";\nimport {\n  loadNativeSandboxBinding,\n  type NativeRepositoryClient,\n} from \"./native-sandbox.js\";\nimport { buildContextFromEnv } from \"./sandbox-image.js\";\n\nconst FILESYSTEM_REPO_KIND = \"filesystem\";\n\nexport interface FilesystemClientOptions {\n  apiKey?: string;\n  apiUrl?: string;\n  /** @deprecated Scope is selected by ingress for SDK API keys; used only by local `tl` mounts. */\n  organizationId?: string;\n  /** @deprecated Scope is selected by ingress for SDK API keys; used only by local `tl` mounts. */\n  projectId?: string;\n  /** @internal Test seam: bypass the native binding loader. */\n  nativeClient?: NativeRepositoryClient;\n}\n\n/**\n * Translate a structured native error (`{category, status, message}` JSON in\n * the error message) into the filesystem error hierarchy. `notFound`, when\n * given, replaces the generic API error for 404s.\n */\nfunction translateNativeError(error: unknown, notFound?: FilesystemError): Error {\n  const message = error instanceof Error ? error.message : String(error);\n  let payload: { category?: unknown; status?: unknown; message?: unknown };\n  try {\n    payload = JSON.parse(message);\n  } catch {\n    return error instanceof Error ? error : new FilesystemError(message);\n  }\n  if (!payload || typeof payload.category !== \"string\") {\n    return error instanceof Error ? error : new FilesystemError(message);\n  }\n  const detail =\n    typeof payload.message === \"string\" ? payload.message : message;\n  // Connection-level failures carry a fabricated gateway status in the napi\n  // layer; surface them as plain FilesystemError (matching Python, where\n  // they carry no status) instead of a fake server FilesystemAPIError.\n  if (payload.category === \"connection\") {\n    return new FilesystemError(detail);\n  }\n  if (payload.status === 404 && notFound !== undefined) {\n    return notFound;\n  }\n  if (typeof payload.status === \"number\") {\n    return new FilesystemAPIError(payload.status, detail);\n  }\n  return new FilesystemError(detail);\n}\n\nasync function callNative<T>(\n  fn: () => Promise<T>,\n  notFound?: FilesystemError,\n): Promise<T> {\n  try {\n    return await fn();\n  } catch (error) {\n    throw translateNativeError(error, notFound);\n  }\n}\n\n/**\n * Runs `tl fs ...` commands for local mount operations.\n *\n * Mounting a filesystem to a local path is served by a FUSE (Linux) / FSKit\n * (macOS) daemon that ships only inside the Tensorlake CLI, so the SDK drives\n * mounts by invoking `tl fs mount/unmount/snapshot/status`. Everything else\n * goes through the Rust core and does not need the CLI.\n */\nclass FsCli extends MountCli {\n  constructor(envOverrides: Record<string, string>) {\n    super(\"fs\", envOverrides);\n  }\n\n  // Flags always precede a `--` end-of-options separator so caller-supplied\n  // names/paths can never be parsed as CLI flags (e.g. a path literally\n  // named \"--discard\" must stay a path, not become the destructive flag).\n  async mount(filesystem: string, localPath: string, readonly: boolean): Promise<void> {\n    if (readonly) {\n      // `tl fs mount` has no --ro flag; shelling it out anyway would surface\n      // an opaque CLI parse error. Fail honestly instead.\n      throw new ReadOnlyMountNotSupportedError();\n    }\n    await this.run([\"mount\", \"--\", filesystem, localPath]);\n  }\n\n  async unmount(localPath: string, discard: boolean): Promise<void> {\n    const args = [\"unmount\"];\n    if (discard) args.push(\"--discard\");\n    args.push(\"--\", localPath);\n    await this.run(args);\n  }\n\n  async snapshot(localPath: string, message?: string): Promise<void> {\n    const args = [\"snapshot\"];\n    // Attached form: a detached value (\"-m\", \"-msg\") is rejected by the CLI\n    // parser when the message starts with '-'.\n    if (message) args.push(`--message=${message}`);\n    args.push(\"--\", localPath);\n    await this.run(args);\n  }\n\n  async status(localPath?: string): Promise<Record<string, unknown>> {\n    const args = [\"status\", \"--json\"];\n    if (localPath) args.push(\"--\", localPath);\n    const output = await this.run(args, 60_000);\n    try {\n      const payload = JSON.parse(output);\n      return typeof payload === \"object\" && payload !== null\n        ? (payload as Record<string, unknown>)\n        : { status: payload };\n    } catch {\n      throw new MountError(\n        `\\`tl fs status --json\\` returned invalid JSON: ${output.slice(0, 200)}`,\n      );\n    }\n  }\n}\n\n/** Manages the filesystems of one Tensorlake project. */\nexport class FilesystemClient {\n  private readonly native: NativeRepositoryClient;\n  private readonly cli: FsCli;\n\n  /**\n   * The SDK authenticates with `apiKey` or `TENSORLAKE_API_KEY`. Project scope is selected by\n   * ingress from the API key; no organization/project lookup is performed. Organization/project\n   * options are retained only for the separately installed `tl` CLI used by local mounts.\n   */\n  constructor(options: FilesystemClientOptions = {}) {\n    const context = buildContextFromEnv();\n    const token = options.apiKey ?? context.apiKey;\n    if (!token) {\n      if (context.personalAccessToken) {\n        throw new FilesystemError(\n          \"Filesystem SDKs require TENSORLAKE_API_KEY. Personal access tokens are CLI-only.\",\n        );\n      }\n      throw new FilesystemError(\n        \"Missing TENSORLAKE_API_KEY credentials.\",\n      );\n    }\n    const organizationId = options.organizationId ?? context.organizationId;\n    const projectId = options.projectId ?? context.projectId;\n    if (options.nativeClient) {\n      this.native = options.nativeClient;\n    } else {\n      const binding = loadNativeSandboxBinding();\n      if (typeof binding.NativeRepositoryClient !== \"function\") {\n        throw new FilesystemError(\n          \"native binding does not export the repository client; rebuild with 'npm run build:native'\",\n        );\n      }\n      this.native = new binding.NativeRepositoryClient(\n        options.apiUrl ?? context.apiUrl,\n        token,\n        null,\n        null,\n        `tensorlake-typescript-sdk/${defaults.SDK_VERSION}`,\n        null,\n      );\n    }\n    const envOverrides: Record<string, string> = {\n      TENSORLAKE_API_KEY: token,\n      // The CLI must target the same deployment the data plane does, or a\n      // mount could resolve a same-named filesystem in the wrong environment.\n      TENSORLAKE_API_URL: options.apiUrl ?? context.apiUrl,\n    };\n    if (organizationId) envOverrides.TENSORLAKE_ORGANIZATION_ID = organizationId;\n    if (projectId) envOverrides.TENSORLAKE_PROJECT_ID = projectId;\n    this.cli = new FsCli(envOverrides);\n  }\n\n  // -- lifecycle --------------------------------------------------------------\n\n  /** Create a new filesystem and return a handle to it. */\n  async create(name: string): Promise<Filesystem> {\n    if (typeof name !== \"string\") {\n      throw new TypeError(\"name must be a string\");\n    }\n    if (name.length === 0) {\n      throw new FilesystemError(\"filesystem name must not be empty\");\n    }\n    const raw = await callNative(() => this.native.createFilesystem(name));\n    // The binding reports the effective default branch; it differs from\n    // \"main\" only when a lost-response retry adopted a pre-existing\n    // filesystem.\n    const created = JSON.parse(raw) as { default_branch?: string };\n    return new Filesystem(\n      this,\n      this.native,\n      this.cli,\n      name,\n      created.default_branch || \"main\",\n    );\n  }\n\n  /**\n   * Fork a filesystem at its live head or an explicit retained snapshot.\n   * The server shares immutable content and publishes only metadata.\n   */\n  async fork(\n    name: string,\n    baseFilesystem: string,\n    snapshot?: string,\n  ): Promise<Filesystem> {\n    if (!name || !baseFilesystem) {\n      throw new FilesystemError(\n        \"fork and base filesystem names must not be empty\",\n      );\n    }\n    await callNative(\n      () =>\n        this.native.forkFilesystem(\n          name,\n          baseFilesystem,\n          snapshot ?? null,\n        ),\n      new FilesystemNotFoundError(baseFilesystem),\n    );\n    return new Filesystem(this, this.native, this.cli, name, \"main\");\n  }\n\n  /** Return a handle to an existing filesystem (verifies it exists). */\n  async get(name: string): Promise<Filesystem> {\n    const traced = await callNative(\n      () => this.native.filesystemMeta(name),\n      new FilesystemNotFoundError(name),\n    );\n    const meta = JSON.parse(traced.json) as {\n      kind?: string;\n      default_branch?: string;\n    };\n    if ((meta.kind ?? FILESYSTEM_REPO_KIND) !== FILESYSTEM_REPO_KIND) {\n      throw new FilesystemNotFoundError(name);\n    }\n    return new Filesystem(\n      this,\n      this.native,\n      this.cli,\n      name,\n      meta.default_branch || \"main\",\n    );\n  }\n\n  /** List all filesystems in the project. */\n  async list(): Promise<FilesystemInfo[]> {\n    const traced = await callNative(() => this.native.listFilesystems());\n    const page = JSON.parse(traced.json) as {\n      repos?: Array<Record<string, unknown>>;\n    };\n    return (page.repos ?? []).map((repo) => ({\n      name: String(repo.name ?? \"\"),\n      fullName: String(repo.full_name ?? \"\"),\n      status: String(repo.status ?? \"\"),\n      kind: String(repo.kind ?? FILESYSTEM_REPO_KIND),\n    }));\n  }\n\n  /** Permanently delete a filesystem and all its snapshots. */\n  async delete(name: string): Promise<void> {\n    await callNative(\n      () => this.native.deleteFilesystem(name),\n      new FilesystemNotFoundError(name),\n    );\n  }\n\n  // -- local mounts -------------------------------------------------------------\n\n  /**\n   * Mount a filesystem to a local path (requires the `tl` CLI).\n   *\n   * `readonly: true` is not supported for local mounts and throws\n   * {@link ReadOnlyMountNotSupportedError}; use a sandbox read-only mount\n   * (`readOnly: true`) or `tl git mount --ro` instead.\n   */\n  async mount(\n    name: string,\n    localPath: string,\n    readonly = false,\n  ): Promise<FilesystemMount> {\n    await this.cli.mount(name, localPath, readonly);\n    return new FilesystemMount(this, this.cli, name, localPath, readonly);\n  }\n\n  /**\n   * Unmount a locally mounted filesystem.\n   *\n   * `discard: true` drops local changes that were not yet uploaded.\n   */\n  async unmount(localPath: string, discard = false): Promise<void> {\n    await this.cli.unmount(localPath, discard);\n  }\n\n  /** Status of a local mount (defaults to the mount containing CWD). */\n  async mountStatus(localPath?: string): Promise<MountStatus> {\n    return mountStatusFromRaw(await this.cli.status(localPath), localPath);\n  }\n}\n\ntype FileData = Uint8Array | string;\n\nfunction toBuffer(data: FileData): Buffer {\n  // Copy Uint8Array inputs before crossing the async N-API boundary. Sharing\n  // the caller's backing store would let a post-call mutation change the\n  // bytes being hashed and published.\n  return typeof data === \"string\" ? Buffer.from(data, \"utf-8\") : Buffer.from(data);\n}\n\n/** Handle to one filesystem; reads/writes go through the Rust core. */\nexport class Filesystem {\n  private readonly client: FilesystemClient;\n  private readonly native: NativeRepositoryClient;\n  private readonly cli: FsCli;\n  readonly name: string;\n  private defaultBranch: string | null;\n\n  /** @internal — obtain instances via `FilesystemClient.create()` / `.get()`. */\n  constructor(\n    client: FilesystemClient,\n    native: NativeRepositoryClient,\n    cli: FsCli,\n    name: string,\n    defaultBranch: string | null = null,\n  ) {\n    this.client = client;\n    this.native = native;\n    this.cli = cli;\n    this.name = name;\n    this.defaultBranch = defaultBranch;\n  }\n\n  /**\n   * The filesystem's default branch — the target of every write and the\n   * default version of every read, so writes and `status()` can never\n   * silently disagree on a non-\"main\" filesystem.\n   */\n  private async branch(): Promise<string> {\n    if (!this.defaultBranch) {\n      const traced = await callNative(\n        () => this.native.filesystemMeta(this.name),\n        new FilesystemNotFoundError(this.name),\n      );\n      const meta = JSON.parse(traced.json) as { default_branch?: string };\n      this.defaultBranch = meta.default_branch || \"main\";\n    }\n    return this.defaultBranch;\n  }\n\n  // -- writes -------------------------------------------------------------------\n\n  /** Write one file. Returns the snapshot (version) the write produced. */\n  async writeFile(\n    path: string,\n    data: FileData,\n    message?: string,\n  ): Promise<FilesystemVersion> {\n    return await this.writeFiles(new Map([[path, data]]), message);\n  }\n\n  /** Write several files (and/or delete paths) in one atomic snapshot. */\n  async writeFiles(\n    files: Map<string, FileData> | Record<string, FileData>,\n    message?: string,\n    deletes: string[] = [],\n  ): Promise<FilesystemVersion> {\n    const entries =\n      files instanceof Map ? [...files.entries()] : Object.entries(files);\n    if (entries.length === 0 && deletes.length === 0) {\n      throw new FilesystemError(\"nothing to write: no files or deletions given\");\n    }\n    const writes = entries.map(([path, data]) => ({\n      path,\n      content: toBuffer(data),\n    }));\n    // Truthiness, not nullish: an explicit \"\" gets the default too (parity\n    // with the Python SDK).\n    const resolvedMessage = message || `write ${writes.length} file(s) via SDK`;\n    return await this.publishChanges(\n      writes,\n      deletes,\n      [],\n      [],\n      resolvedMessage,\n    );\n  }\n\n  /**\n   * Stream one local file directly to object storage in bounded parts.\n   * This is the memory-bounded API for multi-GiB files.\n   */\n  async writeFileFromPath(\n    path: string,\n    localPath: string,\n    message?: string,\n  ): Promise<FilesystemVersion> {\n    return await this.writeFilesFromPaths(\n      new Map([[path, localPath]]),\n      message,\n    );\n  }\n\n  /**\n   * Atomically publish local files without loading their complete payloads\n   * into JavaScript or Rust memory.\n   */\n  async writeFilesFromPaths(\n    files: Map<string, string> | Record<string, string>,\n    message?: string,\n  ): Promise<FilesystemVersion> {\n    const entries =\n      files instanceof Map ? [...files.entries()] : Object.entries(files);\n    if (entries.length === 0) {\n      throw new FilesystemError(\"nothing to write: no local files given\");\n    }\n    const writes = entries.map(([path, localPath]) => ({ path, localPath }));\n    const resolvedMessage =\n      message || `write ${writes.length} local file(s) via SDK`;\n    const branch = await this.branch();\n    const traced = await callNative(\n      () =>\n        this.native.pushFilesystemPaths(\n          this.name,\n          writes,\n          resolvedMessage,\n          branch,\n          randomBytes(16).toString(\"hex\"),\n        ),\n      new FilesystemNotFoundError(this.name),\n    );\n    const report = JSON.parse(traced.json) as {\n      version_id?: string;\n      previous_version_id?: string | null;\n    };\n    const versionId = String(report.version_id ?? \"\");\n    const previousVersionId =\n      report.previous_version_id == null\n        ? null\n        : String(report.previous_version_id);\n    return {\n      versionId,\n      previousVersionId,\n      created: previousVersionId !== versionId,\n      message: resolvedMessage,\n    };\n  }\n\n  /**\n   * Move a file or directory without downloading or re-uploading its bytes.\n   * The source removal and destination creation publish as one atomic snapshot.\n   */\n  async moveFile(\n    from: string,\n    to: string,\n    message?: string,\n  ): Promise<FilesystemVersion> {\n    return await this.publishChanges(\n      [],\n      [],\n      [{ from, to }],\n      [],\n      message || `move ${from} to ${to} via SDK`,\n    );\n  }\n\n  /**\n   * Copy a file or directory by reusing immutable content references. No\n   * payload bytes traverse the client, API server, or object store.\n   */\n  async copyFile(\n    from: string,\n    to: string,\n    message?: string,\n  ): Promise<FilesystemVersion> {\n    return await this.publishChanges(\n      [],\n      [],\n      [],\n      [{ from, to }],\n      message || `copy ${from} to ${to} via SDK`,\n    );\n  }\n\n  private async publishChanges(\n    writes: Array<{ path: string; content: Buffer }>,\n    deletes: string[],\n    moves: Array<{ from: string; to: string }>,\n    copies: Array<{ from: string; to: string }>,\n    message: string,\n  ): Promise<FilesystemVersion> {\n    const branch = await this.branch();\n    const traced = await callNative(\n      () =>\n        this.native.pushFilesystemFiles(\n          this.name,\n          writes,\n          deletes,\n          moves,\n          copies,\n          message,\n          branch,\n          // One key per logical write: a retried submit reattaches to the\n          // same durable commit job instead of double-committing.\n          randomBytes(16).toString(\"hex\"),\n        ),\n      new FilesystemNotFoundError(this.name),\n    );\n    const report = JSON.parse(traced.json) as {\n      version_id?: string;\n      previous_version_id?: string | null;\n    };\n    const versionId = String(report.version_id ?? \"\");\n    const previousVersionId =\n      report.previous_version_id == null\n        ? null\n        : String(report.previous_version_id);\n    return {\n      versionId,\n      previousVersionId,\n      created: previousVersionId !== versionId,\n      message,\n    };\n  }\n\n  /** Delete one file. Returns the durable version the deletion produced. */\n  async deleteFile(path: string, message?: string): Promise<FilesystemVersion> {\n    return await this.writeFiles(\n      new Map(),\n      message || `delete ${path} via SDK`,\n      [path],\n    );\n  }\n\n  /**\n   * Return the filesystem's current version as a snapshot.\n   *\n   * Writes publish durable live versions. This retains the current head\n   * permanently in one metadata-only server operation without changing or\n   * copying any content.\n   */\n  async snapshot(message = \"snapshot via SDK\"): Promise<FilesystemSnapshot> {\n    const resolvedMessage = message || \"snapshot via SDK\";\n    const traced = await callNative(\n      () =>\n        this.native.retainFilesystemSnapshot(\n          this.name,\n          resolvedMessage,\n          randomBytes(16).toString(\"hex\"),\n        ),\n      new FilesystemNotFoundError(this.name),\n    );\n    const retained = JSON.parse(traced.json) as {\n      snapshot_id?: string;\n      message?: string;\n    };\n    return {\n      id: String(retained.snapshot_id ?? \"\"),\n      message: retained.message || resolvedMessage,\n    };\n  }\n\n  /** List explicitly retained snapshots without reading filesystem contents. */\n  async listSnapshots(): Promise<FilesystemSnapshotInfo[]> {\n    const traced = await callNative(\n      () => this.native.listFilesystemSnapshots(this.name),\n      new FilesystemNotFoundError(this.name),\n    );\n    const payload = JSON.parse(traced.json) as {\n      snapshots?: Array<{\n        snapshot_id?: string;\n        created_at_ms?: number;\n        message?: string;\n      }>;\n    };\n    return (payload.snapshots ?? []).map((snapshot) => ({\n      id: String(snapshot.snapshot_id ?? \"\"),\n      createdAt: new Date(Number(snapshot.created_at_ms ?? 0)),\n      message: String(snapshot.message ?? \"\"),\n    }));\n  }\n\n  /** Delete one permanent retention point; shared/head-reachable bytes remain. */\n  async deleteSnapshot(snapshot: string): Promise<void> {\n    await callNative(\n      () => this.native.deleteFilesystemSnapshot(this.name, snapshot),\n      new FilesystemNotFoundError(this.name),\n    );\n  }\n\n  // -- reads --------------------------------------------------------------------\n\n  /**\n   * Read a file's bytes at `version` (the current `main` head or a retained\n   * snapshot id; defaults to the filesystem's current head).\n   */\n  async readFile(path: string, version?: string): Promise<Uint8Array> {\n    return (await this.readFileWithMetadata(path, { version })).data;\n  }\n\n  /**\n   * Read bytes and immutable metadata in one request. A range is executed by\n   * Artifact Storage, so callers never download the unrequested remainder.\n   */\n  async readFileWithMetadata(\n    path: string,\n    options: FilesystemReadOptions = {},\n  ): Promise<FilesystemFileRead> {\n    if (trimSlashes(path) === \"\") {\n      throw new FilesystemError(\"file path must not be empty\");\n    }\n    const range = options.range;\n    if (\n      range !== undefined &&\n      (!Number.isSafeInteger(range.offset) ||\n        range.offset < 0 ||\n        !Number.isSafeInteger(range.length) ||\n        range.length <= 0)\n    ) {\n      throw new FilesystemError(\n        \"range requires a non-negative integer offset and positive integer length\",\n      );\n    }\n    const resolvedVersion = options.version || (await this.branch());\n    const traced = await callNative(\n      () =>\n        this.native.readFilesystemFile(\n          this.name,\n          path,\n          resolvedVersion,\n          range?.offset,\n          range?.length,\n        ),\n      new FileNotFoundInFilesystemError(this.name, path),\n    );\n    const fullSize = traced.fullSize;\n    if (\n      !traced.contentId ||\n      fullSize === undefined ||\n      !Number.isSafeInteger(fullSize) ||\n      fullSize < 0 ||\n      traced.data.byteLength > fullSize\n    ) {\n      throw new FilesystemError(\n        \"filesystem read response omitted content identity or total size\",\n      );\n    }\n    return {\n      data: new Uint8Array(traced.data),\n      contentId: traced.contentId,\n      size: fullSize,\n    };\n  }\n\n  /** Read a file as UTF-8 text at `version`. Throws on non-UTF-8 content. */\n  async readText(path: string, version?: string): Promise<string> {\n    // fatal: parity with Python's strict bytes.decode(\"utf-8\") — corrupt\n    // data must raise, never silently decode to replacement characters.\n    // ignoreBOM keeps a leading U+FEFF, exactly as Python does.\n    return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(\n      await this.readFile(path, version),\n    );\n  }\n\n  /** List one directory (non-recursive) at `version`. */\n  async listFiles(dirPath = \"\", version?: string): Promise<FileEntry[]> {\n    const resolvedVersion = version || (await this.branch());\n    const traced = await callNative(\n      () => this.native.listFilesystemTree(this.name, dirPath, resolvedVersion),\n      new FileNotFoundInFilesystemError(this.name, dirPath || \"/\"),\n    );\n    const page = JSON.parse(traced.json) as {\n      entries?: Array<{ name: string; oid?: string; mode?: number; size?: number | null }>;\n    };\n    return (page.entries ?? []).map((entry) => fileEntryFromWire(entry, dirPath));\n  }\n\n  // -- status -------------------------------------------------------------------\n\n  /** Remote status: identity plus the current native version. */\n  async status(): Promise<FilesystemStatus> {\n    const metaTraced = await callNative(\n      () => this.native.filesystemMeta(this.name),\n      new FilesystemNotFoundError(this.name),\n    );\n    const meta = JSON.parse(metaTraced.json) as Record<string, unknown>;\n    const defaultBranch = String(meta.default_branch || \"main\");\n    this.defaultBranch = defaultBranch;\n    let versionId: string | null = null;\n    let generation: number | null = null;\n    try {\n      // A 404 here means \"no such ref yet\" (an empty filesystem), so it is\n      // deliberately NOT mapped to FilesystemNotFoundError.\n      const refTraced = await callNative(() =>\n        this.native.filesystemRefStatus(this.name, defaultBranch),\n      );\n      const ref = JSON.parse(refTraced.json) as Record<string, unknown>;\n      versionId =\n        (ref.resolved_commit as string) || (ref.oid as string) || null;\n      generation = typeof ref.generation === \"number\" ? ref.generation : null;\n    } catch (error) {\n      // Only \"no such ref yet\" means an empty filesystem; anything else\n      // (auth, 5xx) must not masquerade as one.\n      if (!(error instanceof FilesystemAPIError) || error.statusCode !== 404) {\n        throw error;\n      }\n    }\n    return {\n      name: this.name,\n      status: String(meta.status ?? \"\"),\n      versionId,\n      generation,\n    };\n  }\n\n  // -- mounts -------------------------------------------------------------------\n\n  /**\n   * Mount this filesystem to a local path (requires the `tl` CLI).\n   *\n   * `readonly: true` is not supported for local mounts and throws\n   * {@link ReadOnlyMountNotSupportedError}; use a sandbox read-only mount\n   * (`readOnly: true`) or `tl git mount --ro` instead.\n   */\n  async mount(localPath: string, readonly = false): Promise<FilesystemMount> {\n    return await this.client.mount(this.name, localPath, readonly);\n  }\n}\n\n/** A filesystem mounted to a local path via the `tl` CLI daemon. */\nexport class FilesystemMount {\n  private readonly client: FilesystemClient;\n  private readonly cli: FsCli;\n  readonly filesystem: string;\n  readonly path: string;\n  readonly readonly: boolean;\n\n  /** @internal — obtain instances via `FilesystemClient.mount()`. */\n  constructor(\n    client: FilesystemClient,\n    cli: FsCli,\n    filesystem: string,\n    path: string,\n    readonly: boolean,\n  ) {\n    this.client = client;\n    this.cli = cli;\n    this.filesystem = filesystem;\n    this.path = path;\n    this.readonly = readonly;\n  }\n\n  /** Flush pending local changes into a durable snapshot. */\n  async snapshot(message?: string): Promise<void> {\n    await this.cli.snapshot(this.path, message);\n  }\n\n  /** Local mount status as reported by the mount daemon. */\n  async status(): Promise<MountStatus> {\n    return await this.client.mountStatus(this.path);\n  }\n\n  /** Unmount; `discard: true` drops changes not yet uploaded. */\n  async unmount(discard = false): Promise<void> {\n    await this.client.unmount(this.path, discard);\n  }\n}\n","import { execFile } from \"node:child_process\";\nimport { accessSync, constants } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { CliNotFoundError, MountError } from \"./filesystem-models.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/** Shared command runner for the separately installed local mount daemon. */\nexport class MountCli {\n  private binary: string | null = null;\n\n  constructor(\n    private readonly command: \"fs\" | \"git\",\n    private readonly envOverrides: Record<string, string>,\n  ) {}\n\n  private async findCli(): Promise<string> {\n    const candidates: string[] = [];\n    if (process.env.TENSORLAKE_CLI) candidates.push(process.env.TENSORLAKE_CLI);\n    candidates.push(\"tl\");\n    const installed = join(homedir(), \".tensorlake\", \"bin\", \"tl\");\n    try {\n      // Probe present-but-broken installs too, so they report an upgrade error.\n      accessSync(installed, constants.F_OK);\n      candidates.push(installed);\n    } catch {\n      // Not installed at the default path.\n    }\n    const support = this.command === \"git\" ? \"git mount\" : \"fs\";\n    const probe = this.command === \"git\" ? [\"git\", \"mount\", \"--help\"] : [\"fs\", \"--help\"];\n    let unsupported: string | null = null;\n    for (const candidate of candidates) {\n      try {\n        await execFileAsync(candidate, probe, { timeout: 15_000 });\n        return candidate;\n      } catch (error) {\n        if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") unsupported = candidate;\n      }\n    }\n    throw new CliNotFoundError(\n      unsupported\n        ? `\\`tl\\` at ${unsupported} does not support \\`tl ${support}\\` (upgrade required)`\n        : \"`tl` was not found on PATH\",\n      support,\n    );\n  }\n\n  protected async run(args: string[], timeoutMs = 300_000): Promise<string> {\n    if (this.binary === null) this.binary = await this.findCli();\n    try {\n      const { stdout } = await execFileAsync(this.binary, [this.command, ...args], {\n        timeout: timeoutMs,\n        env: { ...process.env, ...this.envOverrides },\n        maxBuffer: 16 * 1024 * 1024,\n      });\n      return stdout;\n    } catch (error) {\n      const failure = error as { stderr?: string; stdout?: string; killed?: boolean };\n      if (failure.killed) {\n        throw new MountError(`\\`tl ${this.command} ${args[0]}\\` timed out after ${timeoutMs}ms`);\n      }\n      const detail = (failure.stderr || failure.stdout || String(error)).trim();\n      throw new MountError(`\\`tl ${this.command} ${args.join(\" \")}\\` failed: ${detail}`);\n    }\n  }\n}\n","/** Models and errors for the filesystem SDK. */\n\n/** Git tree mode for a directory entry. */\nconst GIT_MODE_DIR = 0o40000;\nconst GIT_MODE_SYMLINK = 0o120000;\n\n/**\n * Strip leading/trailing '/' in linear time (the regex equivalent\n * `/^\\/+|\\/+$/g` backtracks polynomially on adversarial many-slash input).\n */\nexport function trimSlashes(path: string): string {\n  let start = 0;\n  let end = path.length;\n  while (start < end && path.charCodeAt(start) === 0x2f) start += 1;\n  while (end > start && path.charCodeAt(end - 1) === 0x2f) end -= 1;\n  return path.slice(start, end);\n}\n\n/** One filesystem as returned by listing/point-read endpoints. */\nexport interface FilesystemInfo {\n  name: string;\n  fullName: string;\n  status: string;\n  kind: string;\n}\n\n/** Remote status of a filesystem: identity plus current head. */\nexport interface FilesystemStatus {\n  name: string;\n  status: string;\n  /**\n   * Current native version id; null for an empty filesystem that has never\n   * been written to.\n   */\n  versionId: string | null;\n  /** Server-side movement counter for the live version, when reported. */\n  generation: number | null;\n}\n\n/** One directory entry from a filesystem listing. */\nexport interface FileEntry {\n  name: string;\n  /** Path of the entry relative to the filesystem root. */\n  path: string;\n  /** Stable native content identity for the file or directory. */\n  contentId: string;\n  /** Native entry kind. */\n  kind: \"file\" | \"directory\" | \"symlink\";\n  /** Whether a regular file is executable. */\n  executable: boolean;\n  /** Blob size in bytes when cheaply known server-side. */\n  size: number | null;\n  isDir: boolean;\n  isSymlink: boolean;\n}\n\n/** Bytes plus immutable identity/size returned by one file request. */\nexport interface FilesystemFileRead {\n  data: Uint8Array;\n  /** Stable native identity for the complete file content. */\n  contentId: string;\n  /** Size of the complete file, even when `data` is a requested range. */\n  size: number;\n}\n\nexport interface FilesystemReadOptions {\n  /** Current `main` head when omitted; otherwise one retained snapshot id. */\n  version?: string;\n  /** Half-open byte selection expressed as offset + length. */\n  range?: { offset: number; length: number };\n}\n\nexport function fileEntryFromWire(\n  entry: { name: string; oid?: string; mode?: number; size?: number | null },\n  dirPath: string,\n): FileEntry {\n  const mode = entry.mode ?? 0o100644;\n  const prefix = trimSlashes(dirPath);\n  return {\n    name: entry.name,\n    path: prefix ? `${prefix}/${entry.name}` : entry.name,\n    contentId: entry.oid ?? \"\",\n    kind:\n      mode === GIT_MODE_DIR\n        ? \"directory\"\n        : mode === GIT_MODE_SYMLINK\n          ? \"symlink\"\n          : \"file\",\n    executable: mode === 0o100755,\n    size: entry.size ?? null,\n    isDir: mode === GIT_MODE_DIR,\n    isSymlink: mode === GIT_MODE_SYMLINK,\n  };\n}\n\n/** The durable live version produced by one atomic filesystem publication. */\nexport interface FilesystemVersion {\n  /** Native version id — pass as `version` to read the filesystem at this point. */\n  versionId: string;\n  /** Version replaced by this publication, or null for the first publication. */\n  previousVersionId: string | null;\n  /** False when the write was a no-op (content identical to the parent). */\n  created: boolean;\n  message: string;\n}\n\n/** One newly retained native filesystem snapshot. */\nexport interface FilesystemSnapshot {\n  id: string;\n  message: string;\n}\n\n/** One explicitly retained native filesystem snapshot. */\nexport interface FilesystemSnapshotInfo {\n  id: string;\n  createdAt: Date;\n  message: string;\n}\n\n/**\n * Status of a local mount as reported by `tl fs status --json`.\n *\n * The mount daemon's JSON is versioned independently of this SDK, so only\n * stable fields are typed; the full payload is preserved in `raw`.\n */\nexport interface MountStatus {\n  /** Local mount path. */\n  path: string;\n  /** Filesystem name this mount serves, when reported. */\n  filesystem: string | null;\n  /** Whether the daemon reports the mount as healthy/active. */\n  mounted: boolean;\n  /** Complete parsed JSON payload from the CLI. */\n  raw: Record<string, unknown>;\n}\n\n/**\n * Map one `tl fs status --json` payload to a MountStatus.\n *\n * Semantics deliberately mirror the Python SDK: `mounted` honors key\n * presence (an explicit null means \"not mounted\"), and path/filesystem\n * fall through empty strings, not just null/undefined.\n */\nexport function mountStatusFromRaw(\n  raw: Record<string, unknown>,\n  localPath?: string,\n): MountStatus {\n  const mounted =\n    \"mounted\" in raw\n      ? Boolean(raw.mounted)\n      : \"active\" in raw\n        ? Boolean(raw.active)\n        : true;\n  const path = String(raw.path || raw.mount_path || localPath || \"\");\n  const filesystem = (raw.filesystem ||\n    raw.file_system ||\n    raw.repository ||\n    null) as string | null;\n  return { path, filesystem, mounted, raw };\n}\n\nexport class FilesystemError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"FilesystemError\";\n  }\n}\n\nexport class FilesystemNotFoundError extends FilesystemError {\n  readonly filesystemName: string;\n  constructor(name: string) {\n    super(`Filesystem not found: ${name}`);\n    this.name = \"FilesystemNotFoundError\";\n    this.filesystemName = name;\n  }\n}\n\nexport class FileNotFoundInFilesystemError extends FilesystemError {\n  readonly filesystem: string;\n  readonly path: string;\n  constructor(filesystem: string, path: string) {\n    super(`File not found in filesystem ${filesystem}: ${path}`);\n    this.name = \"FileNotFoundInFilesystemError\";\n    this.filesystem = filesystem;\n    this.path = path;\n  }\n}\n\nexport class FilesystemAPIError extends FilesystemError {\n  readonly statusCode: number;\n  constructor(statusCode: number, message: string) {\n    super(`API error (status ${statusCode}): ${message}`);\n    this.name = \"FilesystemAPIError\";\n    this.statusCode = statusCode;\n  }\n}\n\nexport class MountError extends FilesystemError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"MountError\";\n  }\n}\n\nexport class ReadOnlyMountNotSupportedError extends MountError {\n  constructor() {\n    super(\n      \"read-only local mounts are not supported: `tl fs mount` has no --ro \" +\n        \"mode. Mount the filesystem into a sandbox read-only instead \" +\n        \"(readOnly: true / `tl sbx create -f NAME:PATH:ro`), or use \" +\n        \"`tl git mount --ro` for repositories.\",\n    );\n    this.name = \"ReadOnlyMountNotSupportedError\";\n  }\n}\n\nexport class CliNotFoundError extends MountError {\n  constructor(detail: string, command: \"fs\" | \"git mount\" = \"fs\") {\n    super(\n      `Mount operations require the Tensorlake CLI (\\`tl\\`) with \\`tl ${command}\\` ` +\n        `support: ${detail}. Install or upgrade it with: ` +\n        \"curl -fsSL https://tensorlake.ai/install.sh | sh\",\n    );\n    this.name = \"CliNotFoundError\";\n  }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { JSONSchema, Parameter } from \"./schema.js\";\nimport { parameterJSONSchema } from \"./schema.js\";\nimport { getApplications, getFunctions } from \"./registry.js\";\nimport type {\n  ApplicationCapability,\n  RegisteredDefinition,\n} from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport const TYPESCRIPT_DESCRIPTOR_FORMAT = \"tensorlake.typescript.json-schema.v1\";\n\nexport interface ParameterManifest {\n  name: string;\n  data_type: JSONSchema;\n  description?: string;\n  required: boolean;\n}\n\nexport interface FunctionManifest {\n  name: string;\n  description: string;\n  docstring: string;\n  secret_names: string[];\n  initialization_timeout_sec: number;\n  timeout_sec: number;\n  resources: {\n    cpus: number;\n    memory_mb: number;\n    ephemeral_disk_mb: number;\n    gpus: { count: number; model: string }[];\n  };\n  retry_policy: {\n    max_retries: number;\n    initial_delay_sec: number;\n    max_delay_sec: number;\n    delay_multiplier: number;\n  };\n  cache_key: null;\n  parameters: ParameterManifest[];\n  return_type: JSONSchema | null;\n  placement_constraints: { filter_expressions: string[] };\n  max_concurrency: number;\n  warm_containers?: number;\n  min_containers?: number;\n  max_containers?: number;\n  image?: string;\n}\n\nexport interface ApplicationManifest {\n  [key: string]: unknown;\n  name: string;\n  description: string;\n  tags: Record<string, string>;\n  allow: ApplicationCapability[];\n  public_endpoint_id?: string;\n  version: string;\n  runtime: \"typescript\";\n  functions: Record<string, FunctionManifest>;\n  entrypoint: {\n    function_name: string;\n    input_serializer: \"json\";\n    inputs_base64: string;\n    output_serializer: \"json\";\n    output_type_hints_base64: string;\n  };\n}\n\nfunction encodeDescriptor(value: unknown): string {\n  return Buffer.from(JSON.stringify({ format: TYPESCRIPT_DESCRIPTOR_FORMAT, value }), \"utf8\").toString(\"base64\");\n}\n\nexport function decodeDescriptor<T>(encoded: string): T {\n  const envelope = JSON.parse(Buffer.from(encoded, \"base64\").toString(\"utf8\")) as {\n    format?: string;\n    value?: T;\n  };\n  if (envelope.format !== TYPESCRIPT_DESCRIPTOR_FORMAT) {\n    throw new SDKUsageError(\"Application manifest does not contain TypeScript schema descriptors\");\n  }\n  return envelope.value as T;\n}\n\nfunction parseGPU(value: string): { count: number; model: string } {\n  const [model, countText, ...extra] = value.split(\":\");\n  if (!model || extra.length > 0) throw new SDKUsageError(`Invalid GPU setting '${value}'`);\n  const count = countText == null ? 1 : Number(countText);\n  if (!Number.isInteger(count) || count <= 0) throw new SDKUsageError(`Invalid GPU count in '${value}'`);\n  return { count, model };\n}\n\nfunction parameterManifest(parameter: Parameter<unknown>): ParameterManifest {\n  return {\n    name: parameter.name,\n    data_type: parameterJSONSchema(parameter),\n    description: parameter.description,\n    required: parameter.required,\n  };\n}\n\nfunction functionManifest(\n  application: RegisteredDefinition,\n  definition: RegisteredDefinition,\n): FunctionManifest {\n  const retries = definition.options.retries ?? application.application?.retries ?? { maxRetries: 0 };\n  const gpu = definition.options.gpu == null\n    ? []\n    : (Array.isArray(definition.options.gpu) ? definition.options.gpu : [definition.options.gpu]).map(parseGPU);\n  const result: FunctionManifest = {\n    name: definition.name,\n    description: definition.options.description,\n    docstring: \"\",\n    secret_names: [...definition.options.secrets],\n    initialization_timeout_sec: definition.options.timeout,\n    timeout_sec: definition.options.timeout,\n    resources: {\n      cpus: definition.options.cpu,\n      memory_mb: Math.ceil(definition.options.memory * 1024),\n      ephemeral_disk_mb: Math.ceil(definition.options.ephemeralDisk * 1024),\n      gpus: gpu,\n    },\n    retry_policy: {\n      max_retries: retries.maxRetries,\n      initial_delay_sec: 1,\n      max_delay_sec: 60,\n      delay_multiplier: 2,\n    },\n    cache_key: null,\n    parameters: definition.application == null ? [] : definition.parameters.map(parameterManifest),\n    return_type: definition.application == null ? null : { ...definition.returns.jsonSchema, title: \"Return value\" },\n    placement_constraints: {\n      filter_expressions: (definition.options.region ?? application.options.region) == null\n        ? []\n        : [`region==${definition.options.region ?? application.options.region}`],\n    },\n    max_concurrency: 1,\n  };\n  if (definition.options.warmContainers != null) result.warm_containers = definition.options.warmContainers;\n  if (definition.options.minContainers != null) result.min_containers = definition.options.minContainers;\n  if (definition.options.maxContainers != null) result.max_containers = definition.options.maxContainers;\n  if (definition.options.image != null) result.image = definition.options.image.name;\n  return result;\n}\n\nexport function createApplicationManifest(application: RegisteredDefinition): ApplicationManifest {\n  if (application.application == null) throw new SDKUsageError(`${application.name} is not an application`);\n  const functions = Object.fromEntries(\n    getFunctions().map((definition) => [definition.name, functionManifest(application, definition)]),\n  );\n  return {\n    name: application.name,\n    description: application.options.description,\n    tags: { ...application.application.tags },\n    allow: [...application.application.allow],\n    version: application.application.version,\n    runtime: \"typescript\",\n    functions,\n    entrypoint: {\n      function_name: application.name,\n      input_serializer: \"json\",\n      inputs_base64: encodeDescriptor(application.parameters.map((parameter) => ({\n        name: parameter.name,\n        schema: parameter.schema.jsonSchema,\n        required: parameter.required,\n        hasDefault: parameter.hasDefault,\n        defaultValue: parameter.defaultValue,\n      }))),\n      output_serializer: \"json\",\n      output_type_hints_base64: encodeDescriptor(application.returns.jsonSchema),\n    },\n  };\n}\n\nexport function createApplicationManifests(): ApplicationManifest[] {\n  return getApplications().map(createApplicationManifest);\n}\n\nexport interface CodeManifest {\n  format_version: 2;\n  runtime: \"typescript\";\n  minimum_node_major: 24;\n  module: string;\n  functions: Record<string, { name: string }>;\n}\n\nexport function createCodeManifest(module = \"runtime.mjs\"): CodeManifest {\n  return {\n    format_version: 2,\n    runtime: \"typescript\",\n    minimum_node_major: 24,\n    module,\n    functions: Object.fromEntries(getFunctions().map((definition) => [definition.name, { name: definition.name }])),\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAKM,kBAOO;AAZb;AAAA;AAAA;AAKA,IAAM,mBAAmB,MACvB,OAAO,aAAa,cAChB,IAAI,IAAI,QAAQ,UAAU,EAAE,EAAE,OAC7B,SAAS,iBAAiB,SAAS,cAAc,QAAQ,YAAY,MAAM,WAC1E,SAAS,cAAc,MACvB,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;AAEtC,IAAM,gBAAgC,iCAAiB;AAAA;AAAA;;;ACZ9D,IACa,aAEA,SAEA,SACA,WACA,mBAGA,yBACA,aACA;AAZb;AAAA;AAAA;AAAA;AACO,IAAM,cAAsB;AAE5B,IAAM,UACX,QAAQ,IAAI,sBAAsB;AAC7B,IAAM,UAAU,QAAQ,IAAI,sBAAsB;AAClD,IAAM,YAAY,QAAQ,IAAI,sBAAsB;AACpD,IAAM,oBACX,QAAQ,IAAI,gCAAgC;AAEvC,IAAM,0BAA0B;AAChC,IAAM,cAAc;AACpB,IAAM,mBAAmB;AAAA;AAAA;;;AC2FzB,SAAS,mBAAmB,cAA2C;AAC5E,MAAI,gBAAgB,KAAM,QAAO;AACjC,MAAI,OAAO,iBAAiB,UAAU;AACpC,UAAM,SAAS,aAAa,KAAK;AACjC,WAAO,UAAU;AAAA,EACnB;AACA,MAAI,MAAM,QAAQ,YAAY,GAAG;AAC/B,UAAM,QAAQ,aACX,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC,EACtC,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC;AACjD,WAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,UAAU,YAAY;AAAA,EAC1E;AACA,MAAI,OAAO,iBAAiB,UAAU;AACpC,eAAW,OAAO,CAAC,WAAW,UAAU,SAAS,QAAQ,GAAG;AAC1D,YAAM,QAAS,aAAyC,GAAG;AAC3D,UAAI,OAAO,UAAU,YAAY,MAAM,KAAK,GAAG;AAC7C,eAAO,MAAM,KAAK;AAAA,MACpB;AAAA,IACF;AACA,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AACA,SAAO,OAAO,YAAY;AAC5B;AA7HA,IACa,kBAQA,cAgBA,wBA6CA,sBAWA,mBAWA,gBAoCA,gBAgDA,yBAQA,oBAWA;AAnMb;AAAA;AAAA;AAAA;AACO,IAAM,mBAAN,cAA+B,MAAM;AAAA,MAC1C,YAAY,SAAiB;AAC3B,cAAM,OAAO;AACb,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAGO,IAAM,eAAN,cAA2B,iBAAiB;AAAA,MACjD,YAAY,SAAiB;AAC3B,cAAM,OAAO;AACb,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAWO,IAAM,yBAAN,cAAqC,aAAa;AAAA,MACvD,YAAY,SAAiB,SAA+B;AAC1D,cAAM,qBAAqB,OAAO,EAAE;AACpC,aAAK,OAAO;AACZ,YAAI,SAAS,UAAU,OAAW,MAAK,QAAQ,QAAQ;AAAA,MACzD;AAAA,IACF;AAuCO,IAAM,uBAAN,cAAmC,aAAa;AAAA,MAC5C;AAAA,MAET,YAAY,WAAmB;AAC7B,cAAM,sBAAsB,SAAS,EAAE;AACvC,aAAK,OAAO;AACZ,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAGO,IAAM,oBAAN,cAAgC,aAAa;AAAA,MACzC;AAAA,MAET,YAAY,QAAgB;AAC1B,cAAM,2BAA2B,MAAM,EAAE;AACzC,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAGO,IAAM,iBAAN,cAA6B,aAAa;AAAA,MACtC;AAAA,MAET,YAAY,QAAgB,SAAkB;AAC5C,cAAM,OAAO,sBAAsB,MAAM;AACzC,cAAM,UAAU,GAAG,IAAI,MAAM,OAAO,KAAK,IAAI;AAC7C,aAAK,OAAO;AACZ,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AA2BO,IAAM,iBAAN,cAA6B,aAAa;AAAA,MACtC;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MAET,YAAY,YAAoB,SAAiB;AAC/C,YAAI;AACJ,YAAI;AACF,gBAAM,UAAmB,KAAK,MAAM,OAAO;AAC3C,cAAI,WAAW,OAAO,YAAY,YAAY,CAAC,MAAM,QAAQ,OAAO,GAAG;AACrE,kBAAM,SAAS;AACf,gBACE,OAAO,OAAO,eAAe,YAC7B,OAAO,WAAW,KAAK,MACtB,OAAO,WAAW,YAAY,OAAO,WAAW;AAEjD,wBAAU;AAAA,UACd;AAAA,QACF,QAAQ;AAAA,QAER;AACA,cAAM,YAAY,SAAS;AAC3B,cAAM,YAAY,SAAS,UAAU,SAAS;AAC9C,cAAM,SAAS,OAAO,cAAc,WAAW,YAAY;AAC3D,cAAM,eAAe,SAAS;AAC9B,YAAI,iBAAiB;AACrB,YAAI,SAAS;AACX,2BAAiB,WAAW,SAAS,IAAI,QAAQ,MAAM;AACvD,cAAI,OAAQ,mBAAkB,KAAK,MAAM;AACzC,gBAAM,SAAS,mBAAmB,YAAY;AAC9C,cAAI,OAAQ,mBAAkB,KAAK,MAAM;AACzC,cAAI,CAAC,UAAU,CAAC,OAAQ,kBAAiB;AAAA,QAC3C;AACA,cAAM,qBAAqB,UAAU,MAAM,cAAc,EAAE;AAC3D,aAAK,YAAY;AACjB,aAAK,SAAS;AACd,aAAK,eAAe;AACpB,aAAK,OAAO;AACZ,aAAK,aAAa;AAClB,aAAK,kBAAkB;AAAA,MACzB;AAAA,IACF;AAGO,IAAM,0BAAN,cAAsC,MAAM;AAAA,MACjD,cAAc;AACZ,cAAM,8BAA8B;AACpC,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAGO,IAAM,qBAAN,cAAiC,MAAM;AAAA,MACnC;AAAA,MAET,YAAY,SAAiB;AAC3B,cAAM,mBAAmB,OAAO,EAAE;AAClC,aAAK,OAAO;AACZ,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAGO,IAAM,wBAAN,cAAoC,MAAM;AAAA,MACtC;AAAA,MAET,YAAY,SAAiB,cAAuB;AAClD;AAAA,UACE,eAAe,oBAAoB,YAAY,KAAK,OAAO,KAAK;AAAA,QAClE;AACA,aAAK,OAAO;AACZ,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA;AAAA;;;AC7MA,IAoCa,kBACA;AArCb;AAAA;AAAA;AAAA;AAoCO,IAAM,mBAAmB,uBAAO,IAAI,6BAA6B;AACjE,IAAM,oBAAoB,uBAAO,IAAI,4BAA4B;AAAA;AAAA;;;AClCxE,SAAS,oBAAoB,KAAqB;AAChD,SAAO,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAChD;AA2DO,SAAS,mBACd,UACA,WAC0F;AAC1F,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,QAAQ;AAC/B,UAAM,OAAO,OAAO;AAEpB,QAAI,SAAS,eAAe,SAAS,aAAa;AAChD,aAAO;AAAA,QACL,SAAS,oBAAoB,QAAQ;AAAA,QACrC,YAAY,GAAG,SAAS;AAAA,QACxB,iBAAiB;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,OAAO,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK;AAC/C,WAAO;AAAA,MACL,SAAS,GAAG,OAAO,QAAQ,KAAK,IAAI,GAAG,IAAI;AAAA,MAC3C,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,MACL,SAAS,GAAG,oBAAoB,QAAQ,CAAC,IAAI,SAAS;AAAA,MACtD,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AA7FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC+MO,SAAS,oBACd,SACsB;AACtB,SAAO;AAAA,IACL,mBAAmB,MAAM;AAAA,MACvB,eAAe,MAAiB;AAC9B,eAAO,QAAQ,OAAO,qBAAqB,IAAI;AAAA,MACjD;AAAA,IACF;AAAA,IACA,qBAAqB,MAAM;AAAA,MACzB,eAAe,MAAiB;AAC9B,eAAO,QAAQ,OAAO,uBAAuB,IAAI;AAAA,MACnD;AAAA,IACF;AAAA,IACA,0BAA0B,MAAM;AAAA,MAC9B,eAAe,MAAiB;AAC9B,eAAO,QAAQ,OAAO,4BAA4B,IAAI;AAAA,MACxD;AAAA,IACF;AAAA,IACA,wBAAwB,MAAM;AAAA,MAC5B,eAAe,MAAiB;AAC9B,eAAO,QAAQ,OAAO,0BAA0B,IAAI;AAAA,MACtD;AAAA,IACF;AAAA,IACA,qBAAqB,CAAC,SACpB,QAAQ,KAAK,QAAW,uBAAuB,CAAC,IAAI,CAAC;AAAA,EACzD;AACF;AAWO,SAAS,gBAAsC;AACpD,SAAO;AAAA,IACJ,SAAS,UAAU,MAAM,IAAI,mBAAmB;AAAA,EACnD;AACF;AAOO,SAAS,oBAAoB,QAA6B;AAC/D,EAAC,SACC,iBACF,IAAI;AACN;AApQA,wBACA,4BAqBa,oBAyNP,YAGA;AAlPN;AAAA;AAAA;AAAA;AAAA,yBAA8B;AAC9B,iCAAuB;AAEvB;AAQA;AAWO,IAAM,qBAAN,MAAyB;AAAA,MAS9B,YACmB,aAAiC,UAChD,kCAAc,aAAe,EAAE;AAAA,QAC7B;AAAA,MACF,GACF;AAJiB;AAAA,MAIhB;AAAA,MAbK;AAAA,MACA,SAAS;AAAA,MACT,aAAa,oBAAI,IAAY;AAAA,MAC7B,UAAU,oBAAI,IAAyB;AAAA,MACvC,aAAa,IAAI;AAAA,QAA6B,CAAC,OACrD,KAAK,QAAQ,EAAE;AAAA,MACjB;AAAA,MASA,OACE,MACA,MACA,QACQ;AACR,cAAM,SAAuB,EAAE,IAAI,KAAK,UAAU,MAAM,MAAM,OAAO;AACrE,aAAK,WAAW,SAAS,QAAQ,OAAO,EAAE;AAC1C,YAAI,SAAS;AACb,eAAO,IAAI;AAAA,UACT,CAAC;AAAA,UACD;AAAA,YACE,KAAK,CAAC,SAAS,WAAW;AACxB,kBAAI,WAAW,OAAQ,QAAO;AAC9B,kBAAI,WAAW;AACb,uBAAO,MAAM;AACX,2BAAS;AACT,uBAAK,QAAQ,OAAO,EAAE;AAAA,gBACxB;AACF,kBAAI,WAAW;AACb,uBAAO,IAAI,cAAyB;AAClC,sBAAI,OAAQ,OAAM,IAAI,MAAM,oCAAoC;AAChE,yBAAO,KAAK,OAAO,4BAA4B,WAAW,MAAM;AAAA,gBAClE;AACF,kBAAI,WAAW;AACb,uBAAO,MACL,mBAAmB,OAAO,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE;AACzD,kBAAI,OAAO,WAAW,SAAU,QAAO;AACvC,qBAAO,IAAI,aAAwB;AACjC,oBAAI;AACF,yBAAO,QAAQ;AAAA,oBACb,IAAI,MAAM,oCAAoC;AAAA,kBAChD;AACF,sBAAM,OACJ,OAAO,SAAS,GAAG,EAAE,MAAM,aACtB,SAAS,IAAI,IACd;AACN,uBAAO,KAAK,KAAK,QAAQ,QAAQ,UAAU,IAAI;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KACE,QACA,QACA,MACA,MACiB;AACjB,cAAM,KAAK,KAAK;AAChB,YAAI;AACJ,cAAM,UAA2B,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChE,cAAI;AACF,qBAAS,KAAK,UAAU;AACxB,iBAAK,QAAQ,IAAI,IAAI,EAAE,SAAS,QAAQ,MAAM,OAAO,CAAC;AACtD,mBAAO,IAAI;AACX,gBAAI,OAAQ,MAAK,SAAS,QAAQ,MAAM;AACxC,iBAAK,KAAK,QAAQ;AAAA,cAChB,MAAM;AAAA,cACN;AAAA,cACA,UAAU,QAAQ;AAAA,cAClB;AAAA,cACA;AAAA,cACA,QAAQ,CAAC,CAAC;AAAA,YACZ,CAAC;AAAA,UACH,SAAS,OAAO;AACd,iBAAK,QAAQ,OAAO,EAAE;AACtB,iBAAK,YAAY;AACjB,mBAAO,KAAK;AAAA,UACd;AAAA,QACF,CAAC;AACD,gBAAQ,gBAAgB,IAAI,MAAM;AAChC,gBAAM,UAAU,KAAK,QAAQ,IAAI,EAAE;AACnC,cAAI,WAAW,QAAQ;AACrB,oBAAQ,OAAO;AACf,iBAAK,KAAK,QAAQ,EAAE,MAAM,UAAU,GAAG,CAAC;AAAA,UAC1C;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MAEQ,YAAoB;AAC1B,YAAI,KAAK,OAAQ,QAAO,KAAK;AAC7B,cAAM,SAAS,IAAI,kCAAO,KAAK,WAAW,GAAG;AAAA;AAAA;AAAA,UAG3C,UAAU,CAAC;AAAA,UACX,KAAK,EAAE,GAAG,QAAQ,KAAK,cAAc,GAAG;AAAA,UACxC,MAAM;AAAA,QACR,CAAC;AACD,aAAK,SAAS;AACd,eAAO,GAAG,WAAW,CAAC,YAA4B;AAChD,gBAAM,UAAU,KAAK,QAAQ,IAAI,QAAQ,EAAE;AAC3C,cAAI,CAAC,WAAW,KAAK,WAAW,OAAQ;AACxC,cAAI,QAAQ,SAAS,SAAS;AAG5B,oBAAQ,QAAQ,EACb,KAAK,MAAM,QAAQ,OAAO,QAAQ,KAAK,CAAC,EACxC;AAAA,cACC,MAAM;AACJ,oBAAI,KAAK,WAAW;AAClB,uBAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,IAAI,QAAQ,GAAG,CAAC;AAAA,cACrD;AAAA,cACA,CAAC,UAAiB;AAChB,qBAAK,KAAK,QAAQ,EAAE,MAAM,UAAU,IAAI,QAAQ,GAAG,CAAC;AACpD,wBAAQ,OAAO,KAAK;AAAA,cACtB;AAAA,YACF;AACF;AAAA,UACF;AACA,eAAK,QAAQ,OAAO,QAAQ,EAAE;AAC9B,cAAI,QAAQ,SAAS,SAAS;AAC5B,kBAAM,QAAQ,IAAI,MAAM,QAAQ,MAAM,OAAO;AAC7C,kBAAM,OAAO,QAAQ,MAAM;AAC3B,kBAAM,QAAQ,QAAQ,MAAM,SAAS,MAAM;AAC3C,oBAAQ,OAAO,KAAK;AAAA,UACtB,OAAO;AACL,oBAAQ,QAAQ,QAAQ,KAAK;AAAA,UAC/B;AACA,eAAK,YAAY;AAAA,QACnB,CAAC;AACD,cAAM,OAAO,CAAC,UAAiB;AAC7B,cAAI,KAAK,WAAW,OAAQ;AAC5B,eAAK,SAAS;AACd,eAAK,WAAW,MAAM;AACtB,qBAAW,WAAW,KAAK,QAAQ,OAAO,EAAG,SAAQ,OAAO,KAAK;AACjE,eAAK,QAAQ,MAAM;AAGnB,eAAK,OAAO,UAAU;AAAA,QACxB;AACA,eAAO,GAAG,SAAS,IAAI;AACvB,eAAO,GAAG,gBAAgB,IAAI;AAC9B,eAAO;AAAA,UAAG;AAAA,UAAQ,CAAC,SACjB;AAAA,YACE,IAAI;AAAA,cACF,oCAAoC,IAAI;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AACA,eAAO,MAAM;AACb,eAAO;AAAA,MACT;AAAA,MAEQ,SAAS,QAAsB,QAAsB;AAC3D,YAAI,KAAK,WAAW,IAAI,OAAO,EAAE,EAAG;AACpC,YAAI,OAAO,OAAQ,MAAK,SAAS,OAAO,QAAQ,MAAM;AACtD,aAAK,KAAK,QAAQ;AAAA,UAChB,MAAM;AAAA,UACN,QAAQ,EAAE,IAAI,OAAO,IAAI,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,UAC9D,UAAU,OAAO,QAAQ;AAAA,QAC3B,CAAC;AACD,aAAK,WAAW,IAAI,OAAO,EAAE;AAAA,MAC/B;AAAA,MAEQ,QAAQ,UAAwB;AACtC,YAAI,KAAK,UAAU,KAAK,WAAW,OAAO,QAAQ;AAChD,eAAK,KAAK,KAAK,QAAQ,EAAE,MAAM,WAAW,SAAS,CAAC;AAAA,MACxD;AAAA,MAEQ,KAAK,QAAgB,SAA8B;AACzD,eAAO,YAAY,OAAO;AAAA,MAC5B;AAAA,MACQ,cAAoB;AAC1B,YAAI,KAAK,QAAQ,SAAS,EAAG,MAAK,QAAQ,MAAM;AAAA,MAClD;AAAA,IACF;AAkCA,IAAM,aAAa,uBAAO;AAAA,MACxB,4BAA4B,QAAyC,WAAW,SAAe;AAAA,IACjG;AACA,IAAM,WAAW;AAAA;AAAA;;;AC4BV,SAAS,2BAAiD;AAC/D,SAAO,kBAAkB,cAAc;AACzC;AA8BA,SAAS,iBAAiB,OAA2C;AACnE,QAAM,UACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA;AACR,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,QAAI,UAAU,OAAO,OAAO,aAAa,UAAU;AACjD,aAAO;AAAA,QACL,UAAU,OAAO;AAAA,QACjB,QAAQ,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,QAC5D,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,MACjE;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAOO,SAAS,qBACd,OACA,SACO;AACP,QAAM,UAAU,iBAAiB,KAAK;AACtC,MAAI,CAAC,SAAS;AACZ,QAAI,iBAAiB,MAAO,QAAO;AACnC,WAAO,IAAI,aAAa,OAAO,KAAK,CAAC;AAAA,EACvC;AAEA,QAAM,EAAE,UAAU,QAAQ,QAAQ,IAAI;AAEtC,MAAI,aAAa,cAAc;AAC7B,WAAO,IAAI,uBAAuB,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAC7D;AAEA,MAAI,WAAW,KAAK;AAClB,QAAI,SAAS,iBAAiB,UAAU,QAAQ,QAAQ;AACtD,aAAO,IAAI,kBAAkB,QAAQ,MAAM;AAAA,IAC7C;AACA,QAAI,SAAS,iBAAiB,aAAa,QAAQ,WAAW;AAC5D,aAAO,IAAI,qBAAqB,QAAQ,SAAS;AAAA,IACnD;AACA,WAAO,IAAI,eAAe,KAAK,OAAO;AAAA,EACxC;AAEA,MAAI,WAAW,OAAO,SAAS,QAAQ;AACrC,WAAO,IAAI,eAAe,QAAQ,QAAQ,OAAO;AAAA,EACnD;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,IAAI,eAAe,QAAQ,OAAO;AAAA,EAC3C;AAEA,SAAO,IAAI,aAAa,OAAO;AACjC;AAGA,eAAsB,WACpB,IACA,SACY;AACZ,MAAI;AACF,WAAO,MAAM,GAAG;AAAA,EAClB,SAAS,OAAO;AACd,UAAM,qBAAqB,OAAO,OAAO;AAAA,EAC3C;AACF;AAWA,gBAAuB,kBACrB,OACA,SACA,QACyC;AACzC,MAAI,QAAQ,QAAS;AACrB,QAAM,QAAwD,CAAC;AAC/D,MAAI;AACJ,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI;AACJ,QAAM,SAAS,MAAM;AAAE,UAAM,UAAU;AAAM,WAAO;AAAW,cAAU;AAAA,EAAG;AAC5E,QAAM,OAAmB,CAAC,UAAU;AAClC,QAAI,QAAS,QAAO,QAAQ,QAAQ;AACpC,WAAO,IAAI,QAAc,CAAC,aAAa;AAAE,YAAM,KAAK,EAAE,OAAO,SAAS,CAAC;AAAG,aAAO;AAAA,IAAG,CAAC;AAAA,EACvF;AACA,MAAI;AACJ,QAAM,UAAU,MAAM;AAAE,cAAU;AAAM,WAAO,gBAAgB,IAAI;AAAG,WAAO;AAAA,EAAG;AAChF,UAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACzD,MAAI;AACF,WAAO,MAAM,IAAI;AACjB,SAAK,KAAK,MAAM,CAAC,UAAmB;AAAE,gBAAU;AAAA,IAAO,CAAC,EAAE,QAAQ,MAAM;AAAE,iBAAW;AAAM,aAAO;AAAA,IAAG,CAAC;AACtG,WAAO,CAAC,SAAS;AACf,YAAM,QAAQ,MAAM,MAAM;AAC1B,UAAI,OAAO;AACT,YAAI;AAAE,gBAAM,KAAK,MAAM,MAAM,KAAK;AAAA,QAA8B,UAChE;AAAU,gBAAM,SAAS;AAAA,QAAG;AAAA,MAC9B,WAAW,UAAU;AACnB;AAAA,MACF,OAAO;AACL,cAAM,IAAI,QAAc,CAAC,YAAY;AAAE,iBAAO;AAAA,QAAS,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,QAAI,CAAC,WAAW,YAAY,OAAW,OAAM,qBAAqB,SAAS,OAAO;AAAA,EACpF,UAAE;AACA,cAAU;AACV,YAAQ,oBAAoB,SAAS,OAAO;AAC5C,WAAO,gBAAgB,IAAI;AAC3B,eAAW,SAAS,MAAO,OAAM,SAAS;AAAA,EAC5C;AACF;AA5aA,IA6QI;AA7QJ;AAAA;AAAA;AAAA;AAAA;AAQA;AAEA;AAAA;AAAA;;;AC6FA,eAAe,iBAAiB,QAAgBA,OAAc,SAAuD;AACnH,QAAM,UAAU,EAAE,GAAG,SAAS,QAAQ;AACtC,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,QAAW;AAC/B,WAAO,KAAK,UAAU,QAAQ,IAAI;AAClC,QAAI,CAAC,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,MAAM,cAAc,GAAG;AAC7E,cAAQ,cAAc,IAAI;AAAA,IAC5B;AAAA,EACF;AACA,QAAM,UAA8B;AAAA,IAClC;AAAA,IACA,MAAAA;AAAA,IACA,aAAa,KAAK,UAAU,OAAO;AAAA,IACnC,iBAAiB,CAAC,GAAI,SAAS,mBAAmB,CAAC,CAAE;AAAA,EACvD;AACA,MAAI,gBAAgB,UAAU;AAC5B,YAAQ,QAAQ,CAAC;AACjB,eAAW,CAAC,MAAM,KAAK,KAAK,KAAK,QAAQ,GAAG;AAC1C,cAAQ,MAAM,KAAK,OAAO,UAAU,WAChC,EAAE,MAAM,MAAM,OAAO,KAAK,KAAK,EAAE,IACjC,EAAE,MAAM,MAAM,OAAO,KAAK,MAAM,MAAM,YAAY,CAAC,GAAG,UAAU,MAAM,MAAM,aAAa,MAAM,QAAQ,2BAA2B,CAAC;AAAA,IACzI;AAAA,EACF,WAAW,SAAS,QAAW;AAC7B,QAAI,gBAAgB,KAAM,SAAQ,OAAO,OAAO,KAAK,MAAM,KAAK,YAAY,CAAC;AAAA,aACpE,OAAO,SAAS,SAAU,SAAQ,OAAO,OAAO,KAAK,IAAI;AAAA,aACzD,gBAAgB,YAAa,SAAQ,OAAO,OAAO,KAAK,IAAI,WAAW,IAAI,CAAC;AAAA,QAChF,SAAQ,OAAO,OAAO,KAAK,IAAI;AAAA,EACtC;AACA,SAAO;AACT;AApIA,IAoDa;AApDb;AAAA;AAAA;AAAA;AAAA;AACA;AAmDO,IAAM,uBAAN,MAA2B;AAAA,MAIhC,YAA6B,SAAgC;AAAhC;AAC3B,YAAI,CAAC,OAAO,cAAc,QAAQ,UAAU,KAAK,QAAQ,aAAa,KAAK,QAAQ,aAAa,YAAa;AAC3G,gBAAM,IAAI,WAAW,kDAAkD;AAAA,QACzE;AACA,YAAI,CAAC,OAAO,SAAS,QAAQ,cAAc,KAAK,QAAQ,iBAAiB,GAAG;AAC1E,gBAAM,IAAI,WAAW,qDAAqD;AAAA,QAC5E;AAAA,MACF;AAAA,MAVQ;AAAA,MACA,SAAS;AAAA,MAWT,SAA4B;AAClC,YAAI,KAAK,OAAQ,OAAM,IAAI,MAAM,oCAAoC;AACrE,YAAI,KAAK,OAAQ,QAAO,KAAK;AAC7B,cAAM,OAAO,yBAAyB,EAAE;AACxC,YAAI,CAAC,KAAM,OAAM,IAAI,MAAM,uFAAuF;AAClH,eAAO,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,MAC5D;AAAA,MAEA,QAAc;AACZ,aAAK,SAAS;AACd,4BAAoB,KAAK,UAAU,IAAI;AACvC,aAAK,SAAS;AAAA,MAChB;AAAA,MAEA,MAAM,gBAAgB,QAAgBA,OAAc,SAAqD;AACvG,cAAM,UAAU,MAAM,iBAAiB,QAAQA,OAAM,OAAO;AAC5D,cAAM,MAAM,MAAM,WAAW,MAAM,KAAK,OAAO,EAAE,QAAQ,OAAO,CAAC;AACjE,cAAM,WAAW,IAAI;AAAA,UACnB,CAAC,KAAK,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM,IAAI,OAAO,WAAW,KAAK,IAAI,IAAI,EAAE;AAAA,UACxE,EAAE,QAAQ,IAAI,QAAQ,SAAS,KAAK,MAAM,IAAI,WAAW,EAA4B;AAAA,QACvF;AACA,eAAO,OAAO,OAAO,UAAU,EAAE,SAAS,IAAI,QAAQ,CAAC;AAAA,MACzD;AAAA,MAEA,MAAM,YAAe,QAAgBA,OAAkC;AACrE,cAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQA,KAAI;AACxD,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAM,QAAQ,OAAO,KAAK,MAAM,IAAI,IAAI;AACxC,eAAO,OAAO,OAAO,SAAS,CAAC,GAAG,EAAE,SAAS,SAAS,QAAQ,CAAC;AAAA,MACjE;AAAA,MAEA,OAAO,OAAO,QAAgBA,OAAc,QAA+D;AACzG,YAAI,QAAQ,QAAS;AACrB,cAAM,UAAU,MAAM,iBAAiB,QAAQA,OAAM,EAAE,SAAS,EAAE,QAAQ,oBAAoB,EAAE,CAAC;AACjG,eAAO,kBAAkB,CAAC,SAAS,KAAK,OAAO,EAAE,OAAO,SAAS,IAAI,GAAG,QAAW,MAAM;AAAA,MAC3F;AAAA,IACF;AAAA;AAAA;;;AC8nBO,SAAS,aAAa,KAAqB;AAChD,SAAO,IAAI,QAAQ,aAAa,CAAC,GAAG,OAAO,GAAG,YAAY,CAAC;AAC7D;AAoBO,SAAS,eAAe,GAA8B;AAC3D,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,aAAa,KAAM,QAAO;AAC9B,MAAI,OAAO,MAAM,UAAU;AACzB,UAAM,SAAS,KAAK,MAAM,CAAC;AAC3B,WAAO,OAAO,MAAM,MAAM,IAAI,SAAY,IAAI,KAAK,MAAM;AAAA,EAC3D;AACA,QAAM,KAAK,OAAO,CAAC;AACnB,MAAI,MAAM,EAAE,EAAG,QAAO;AACtB,MAAI,KAAK,KAAM,QAAO,IAAI,KAAK,KAAK,GAAI;AACxC,MAAI,KAAK,KAAM,QAAO,IAAI,KAAK,EAAE;AACjC,SAAO,IAAI,KAAK,KAAK,GAAI;AAC3B;AAMO,SAAS,cAAc,KAAc,SAA2B;AACrE,MAAI,MAAM,QAAQ,GAAG;AACnB,WAAO,IAAI,IAAI,CAAC,SAAS,cAAc,MAAM,OAAO,CAAC;AACvD,MAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,EAAE,eAAe,OAAO;AACrE,UAAM,SAAkC,CAAC;AACzC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAA8B,GAAG;AACnE,UAAI;AACJ,UAAI,MAAM,QAAQ,SAAS;AACzB,cAAM;AAAA,MACR,OAAO;AACL,cAAM,aAAa,CAAC;AAAA,MACtB;AAGA,UACE,IAAI,SAAS,IAAI,KACjB,QAAQ,eACR,QAAQ,eACR,QAAQ,WACR;AACA,eAAO,GAAG,IAAI,eAAe,CAAC;AAAA,MAChC,WAAW,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG;AACnE,eAAO,GAAG,IAAI,cAAc,CAAC;AAAA,MAC/B,WAAW,MAAM,QAAQ,CAAC,GAAG;AAC3B,eAAO,GAAG,IAAI,EAAE,IAAI,CAAC,SAAS,cAAc,IAAI,CAAC;AAAA,MACnD,OAAO;AAEL,eAAO,GAAG,IAAI,MAAM,OAAO,SAAY;AAAA,MACzC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AA5yBA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC2hBA,SAAS,mBAAmB,UAAkC;AAC5D,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,MAAM,SAAS;AAAA,IACf,WAAW,IAAI,KAAK,SAAS,aAAa;AAAA,EAC5C;AACF;AAIA,SAAS,yCACP,UACS;AACT,SACE,MAAM,QAAQ,SAAS,KAAK,KAC5B,SAAS,MAAM,SAAS,wBAAwB;AAEpD;AAEA,SAAS,6BACP,UACoB;AACpB,aAAW,OAAO,CAAC,sBAAsB,kBAAkB,GAAG;AAC5D,UAAM,QAAQ,SAAS,GAAG;AAC1B,QAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BAAmC;AAC1C,SAAO,gBAAY,sBAAO,CAAC;AAC7B;AAEA,SAAS,2BACP,SACA,eACU;AACV,QAAM,qBAAqB,oBAAI,IAAqC;AACpE,aAAW,WAAW,eAAe;AACnC,QAAI,mBAAmB,IAAI,QAAQ,kBAAkB,GAAG;AACtD,YAAM,IAAI;AAAA,QACR,sCAAsC,QAAQ,kBAAkB;AAAA,MAClE;AAAA,IACF;AACA,uBAAmB,IAAI,QAAQ,oBAAoB,OAAO;AAAA,EAC5D;AAEA,QAAM,OAAO,IAAI,SAAS;AAC1B,OAAK;AAAA,IACH;AAAA,IACA,IAAI,KAAK,CAAC,KAAK,UAAU,OAAO,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAAA,IAChE;AAAA,EACF;AAEA,aAAW,SAAS,QAAQ,QAAQ;AAClC,UAAM,UAAU,mBAAmB,IAAI,MAAM,kBAAkB;AAC/D,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI;AAAA,QACR,mCAAmC,MAAM,kBAAkB;AAAA,MAC7D;AAAA,IACF;AACA,SAAK;AAAA,MACH,MAAM;AAAA,MACN,IAAI,KAAK,CAAC,WAAW,QAAQ,YAAY,CAAC,CAAC;AAAA,MAC3C,GAAG,MAAM,kBAAkB;AAAA,IAC7B;AAAA,EACF;AAEA,aAAW,WAAW,eAAe;AACnC,QAAI,CAAC,QAAQ,OAAO,KAAK,CAAC,UAAU,MAAM,uBAAuB,QAAQ,kBAAkB,GAAG;AAC5F,YAAM,IAAI;AAAA,QACR,sCAAsC,QAAQ,kBAAkB;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAASC,qBAAoB,OAAuB;AAClD,SAAO,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI;AACpD;AAcA,SAAS,gBAAgB,MAAsB;AAC7C,QAAM,cAAc,KAAK,QAAQ,KAAK;AACtC,MAAI,gBAAgB,IAAI;AACtB,UAAM,cAAc,KAAK,MAAM,cAAc,CAAC;AAC9C,UAAM,aAAa,YAAY,QAAQ,GAAG;AAC1C,WAAO,eAAe,KAAK,MAAM,YAAY,MAAM,UAAU;AAAA,EAC/D;AACA,SAAO,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AAC/C;AAEA,SAAS,WAAW,MAAkD;AACpE,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,YAAY;AAC9B,WAAO,WAAW,KAAK,IAAI,EAAE;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAkD;AACvE,SAAO,WAAW,IAAI;AACxB;AAEA,eAAe,kBAAqB,UAAgC;AAClE,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SAAO,KAAK,MAAM,IAAI;AACxB;AA1pBA,mBA0Ba,aAygBP;AAniBN;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAEvB;AACA;AACA;AAsBO,IAAM,cAAN,MAAM,aAAY;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEjB,YAAY,SAA8B;AACxC,aAAK,iBAAiB,SAAS;AAC/B,aAAK,YAAY,SAAS;AAC1B,aAAK,YAAY,SAAS,aAAsB;AAChD,aAAK,YAAY,IAAI,qBAAqB;AAAA,UACxC,SAAS,SAAS,UAAmB;AAAA,UACrC,QAAQ,SAAS,UAAmB;AAAA,UACpC,gBAAgB,KAAK;AAAA,UACrB,WAAW,KAAK;AAAA,UAChB,YAAY,SAAS,cAAuB;AAAA,UAC5C,gBAAgB,SAAS,kBAA2B;AAAA,UACpD,WAAoB;AAAA,UACpB,WAAW,6BAAsC,WAAW;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,MAEA,OAAO,SAAS,SAA2C;AACzD,eAAO,IAAI,aAAY,OAAO;AAAA,MAChC;AAAA,MAEA,QAAc;AACZ,aAAK,UAAU,MAAM;AAAA,MACvB;AAAA,MAEA,MAAM,kBACJ,UACA,SACA,yBAAyB,OACV;AACf,cAAM,sBAAsB,EAAE,GAAG,SAAS;AAC1C,YAAI,mBAAmB,6BAA6B,mBAAmB;AACvE,YACE,yCAAyC,mBAAmB,KAC5D,qBAAqB,QACrB;AACA,gBAAM,kBAAkB,oBAAoB;AAC5C,cAAI,OAAO,oBAAoB,YAAY,gBAAgB,SAAS,GAAG;AACrE,+BACE,MAAM,KAAK,oCAAoC,eAAe;AAAA,UAClE;AACA,+BAAqB,yBAAyB;AAAA,QAChD;AACA,YAAI,qBAAqB,QAAW;AAClC,8BAAoB,qBAAqB;AACzC,iBAAO,oBAAoB;AAAA,QAC7B;AAEA,cAAM,OAAO,IAAI,SAAS;AAC1B,aAAK;AAAA,UACH;AAAA,UACA,IAAI,KAAK,CAAC,WAAW,OAAO,CAAC,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAAA,UAC3D;AAAA,QACF;AACA,aAAK,OAAO,qBAAqB,iBAAiB;AAClD,aAAK,OAAO,eAAe,KAAK,UAAU,mBAAmB,CAAC;AAC9D,aAAK;AAAA,UACH;AAAA,UACA,OAAO,sBAAsB;AAAA,QAC/B;AAEA,cAAM,KAAK,UAAU,gBAAgB,QAAQ,KAAK,cAAc,cAAc,GAAG;AAAA,UAC/E,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,kBAAkB,iBAAwC;AAC9D,cAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,KAAK,cAAc,gBAAgB,mBAAmB,eAAe,CAAC,EAAE;AAAA,QAC1E;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,WAAkC;AACzD,cAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,KAAK,cAAc,kBAAkB,mBAAmB,SAAS,CAAC,EAAE;AAAA,QACtE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,MAAM,uBACJ,WACA,SACiC;AACjC,cAAM,OAAO,KAAK;AAAA,UAChB;AAAA,UACA,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,cAAM,WAAW,MAAM,KAAK,UAAU;AAAA,UACpC;AAAA,UACA,GAAG,IAAI,YAAY,mBAAmB,SAAS,CAAC;AAAA,UAChD,EAAE,iBAAiB,oBAAI,IAAI,CAAC,GAAG,CAAC,EAAE;AAAA,QACpC;AACA,YAAI,SAAS,WAAW,KAAK;AAC3B,iBAAO;AAAA,QACT;AACA,cAAM,MAAM,MAAM,kBAA2C,QAAQ;AACrE,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,kBACJ,SAC4B;AAC5B,cAAM,OAAO,KAAK;AAAA,UAChB;AAAA,UACA,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,YAAIC,QAAsB,GAAG,IAAI;AACjC,cAAM,YAA+B,CAAC;AACtC,eAAOA,UAAS,MAAM;AACpB,gBAAM,OAA6B,MAAM,KAAK,UAAU;AAAA,YACtD;AAAA,YACAA;AAAA,UACF;AACA,qBAAW,QAAQ,KAAK,SAAS,CAAC,GAAG;AACnC,sBAAU,KAAK,cAAc,IAAI,CAAoB;AAAA,UACvD;AACA,gBAAM,OAAO,KAAK,YAAY;AAC9B,UAAAA,QAAO,OAAO,gBAAgB,IAAI,IAAI;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAA8C;AAClD,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,KAAK,cAAc,cAAc;AAAA,QACnC;AACA,gBAAQ,IAAI,gBAAgB,CAAC,GAAG;AAAA,UAC9B,CAAC,gBAAgB,cAAc,WAAW;AAAA,QAC5C;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,iBAAuD;AAC/E,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,KAAK,cAAc,gBAAgB,mBAAmB,eAAe,CAAC,EAAE;AAAA,QAC1E;AACA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,WACJ,iBACA,SAAyB,CAAC,GACT;AACjB,cAAMA,QAAO,KAAK;AAAA,UAChB,gBAAgB,mBAAmB,eAAe,CAAC;AAAA,QACrD;AAEA,cAAM,WACJ,OAAO,WAAW,IACd,MAAM,KAAK,UAAU,gBAAgB,QAAQA,OAAM;AAAA,UACjD,MAAM,IAAI,WAAW;AAAA,UACrB,SAAS,EAAE,QAAQ,mBAAmB;AAAA,QACxC,CAAC,IACD,OAAO,WAAW,KAAK,OAAO,CAAC,EAAE,SAAS,MACxC,MAAM,KAAK,UAAU,gBAAgB,QAAQA,OAAM;AAAA,UACjD,MAAM,cAAc,OAAO,CAAC,EAAE,IAAI;AAAA,UAClC,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,gBAAgB,OAAO,CAAC,EAAE;AAAA,UAC5B;AAAA,QACF,CAAC,IACD,MAAM,KAAK,oBAAoBA,OAAM,MAAM;AAEnD,cAAM,OAAO,MAAM,kBAA2C,QAAQ;AACtE,cAAM,YAAY,MAAM;AACxB,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,wBACJ,iBACA,WACe;AACf,cAAM,SAAS,KAAK,UAAU;AAAA,UAC5B;AAAA,UACA,KAAK;AAAA,YACH,gBAAgB,mBAAmB,eAAe,CAAC,aAAa,mBAAmB,SAAS,CAAC;AAAA,UAC/F;AAAA,QACF;AAEA,yBAAiB,SAAS,QAAQ;AAChC,cAAI,OAAO,UAAU,eAAe,KAAK,OAAO,iBAAiB,GAAG;AAClE;AAAA,UACF;AAAA,QACF;AAEA,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AAAA,MAEA,MAAM,gBACJ,iBACA,WAC0B;AAC1B,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,KAAK;AAAA,YACH,gBAAgB,mBAAmB,eAAe,CAAC,aAAa,mBAAmB,SAAS,CAAC;AAAA,UAC/F;AAAA,QACF;AACA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,cACJ,iBACA,WACwB;AACxB,cAAM,WAAW,MAAM,KAAK,UAAU;AAAA,UACpC;AAAA,UACA,KAAK;AAAA,YACH,gBAAgB,mBAAmB,eAAe,CAAC,aAAa,mBAAmB,SAAS,CAAC;AAAA,UAC/F;AAAA,QACF;AAEA,cAAM,kBAAkB,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AACnE,cAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,SAIO;AACvB,cAAM,OAAO,KAAK;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,cAAM,MAAM,MAAM,KAAK,UAAU,YAA8B,OAAO,IAAI;AAC1E,cAAM,WAAW,KAAK,IAAI,GAAG,SAAS,YAAY,GAAG;AACrD,eAAO,OAAO;AAAA,UACZ;AAAA,YACE,OAAO,IAAI,MAAM,GAAG,QAAQ,EAAE,IAAI,kBAAkB;AAAA,YACpD,YAAY,EAAE,OAAO,IAAI,OAAO;AAAA,UAClC;AAAA,UACA,EAAE,SAAS,IAAI,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,MAAM,UACJ,UACA,SACiB;AACjB,cAAM,OAAO,KAAK;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,GAAG,IAAI,IAAI,mBAAmB,QAAQ,CAAC;AAAA,QACzC;AACA,eAAO,OAAO,OAAO,mBAAmB,GAAG,GAAG,EAAE,SAAS,IAAI,QAAQ,CAAC;AAAA,MACxE;AAAA,MAEA,MAAM,cACJ,SACA,SAC+B;AAC/B,cAAM,OAAO,KAAK;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,YAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,gBAAM,UAAoB,CAAC;AAC3B,qBAAW,UAAU,SAAS;AAC5B,oBAAQ,KAAK,MAAM,KAAK,aAAa,MAAM,MAAM,CAAC;AAAA,UACpD;AACA,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,aAAa,MAAM,OAAO;AAAA,MACxC;AAAA,MAEA,MAAM,aACJ,UACA,SACe;AACf,cAAM,OAAO,KAAK;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,cAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,GAAG,IAAI,IAAI,mBAAmB,QAAQ,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,MAAc,aAAa,MAAc,QAAoC;AAC3E,YAAI,WAAW,MAAM,KAAK,UAAU,gBAAgB,QAAQ,MAAM;AAAA,UAChE,MAAM;AAAA,UACN,SAAS,EAAE,uBAAmB,sBAAO,EAAE;AAAA,UACvC,iBAAiB,oBAAI,IAAI,CAAC,GAAG,CAAC;AAAA,QAChC,CAAC;AACD,YAAI,SAAS,WAAW,KAAK;AAC3B,gBAAM,SAAS,KAAK,MAAM,GAAG,CAAC,WAAW,MAAM;AAC/C,gBAAM,WAAW,MAAM,KAAK,UAAU;AAAA,YACpC;AAAA,YACA,GAAG,MAAM,iBAAiB,mBAAmB,OAAO,IAAI,CAAC;AAAA,UAC3D;AACA,qBAAW,MAAM,KAAK,UAAU;AAAA,YAC9B;AAAA,YACA,GAAG,IAAI,IAAI,mBAAmB,SAAS,EAAE,CAAC;AAAA,YAC1C;AAAA,cACE,MAAM,EAAE,OAAO,OAAO,MAAM;AAAA,cAC5B,SAAS,EAAE,uBAAmB,sBAAO,EAAE;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AACA,cAAM,WAAW,MAAM,kBAAkC,QAAQ;AACjE,eAAO,OAAO,OAAO,mBAAmB,QAAQ,GAAG;AAAA,UACjD,SAAS,SAAS;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,gBACJ,kBACA,SACoB;AACpB,cAAM,OAAO,IAAI,SAAS;AAC1B,aAAK,OAAO,cAAc,QAAQ,eAAe;AACjD,aAAK,OAAO,iBAAiB,QAAQ,kBAAkB;AACvD,aAAK,OAAO,uBAAuB,QAAQ,YAAY;AACvD,aAAK,OAAO,cAAc,QAAQ,SAAS;AAC3C,aAAK,OAAO,YAAY,QAAQ,OAAO;AACvC,aAAK;AAAA,UACH;AAAA,UACA,IAAI,KAAK,CAAC,WAAW,QAAQ,YAAY,CAAC,CAAC;AAAA,UAC3C;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,KAAK,UAAU;AAAA,UACpC;AAAA,UACA,GAAGD,qBAAoB,gBAAgB,CAAC;AAAA,UACxC,EAAE,MAAM,KAAK;AAAA,QACf;AACA,cAAM,MAAM,MAAM,kBAA2C,QAAQ;AACrE,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,uBACJ,kBACA,SACA,eACmC;AACnC,cAAM,OAAO,2BAA2B,SAAS,aAAa;AAC9D,cAAM,WAAW,MAAM,KAAK,UAAU;AAAA,UACpC;AAAA,UACAA,qBAAoB,gBAAgB;AAAA,UACpC,EAAE,MAAM,KAAK;AAAA,QACf;AACA,cAAM,MAAM,MAAM,kBAA2C,QAAQ;AACrE,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,qBACJ,kBACA,oBACmC;AACnC,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,GAAGA,qBAAoB,gBAAgB,CAAC,IAAI,mBAAmB,kBAAkB,CAAC;AAAA,QACpF;AACA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,uBACJ,kBACA,oBACmC;AACnC,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,GAAGA,qBAAoB,gBAAgB,CAAC,IAAI,mBAAmB,kBAAkB,CAAC;AAAA,QACpF;AACA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,UACJ,kBACA,SACoB;AACpB,cAAM,MAAM,MAAM,KAAK,UAAU;AAAA,UAC/B;AAAA,UACA,GAAGA,qBAAoB,gBAAgB,CAAC,WAAW,mBAAmB,OAAO,CAAC;AAAA,QAChF;AACA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MAEA,MAAM,YAAY,kBAA0B,SAAgC;AAC1E,cAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,GAAGA,qBAAoB,gBAAgB,CAAC,WAAW,mBAAmB,OAAO,CAAC;AAAA,QAChF;AAAA,MACF;AAAA,MAEA,OAAO,gBACL,kBACA,SACA,QAC8B;AAC9B,cAAM,SAAS,KAAK,UAAU;AAAA,UAC5B;AAAA,UACA,GAAGA,qBAAoB,gBAAgB,CAAC,WAAW,mBAAmB,OAAO,CAAC;AAAA,UAC9E;AAAA,QACF;AACA,yBAAiB,SAAS,QAAQ;AAChC,gBAAM,cAAc,KAAK;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,MAAc,oBACZC,OACA,QACmB;AACnB,cAAM,OAAO,IAAI,SAAS;AAC1B,mBAAW,SAAS,QAAQ;AAC1B,eAAK;AAAA,YACH,MAAM;AAAA,YACN,IAAI,KAAK,CAAC,WAAW,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM,MAAM,YAAY,CAAC;AAAA,YAC9D,MAAM;AAAA,UACR;AAAA,QACF;AACA,eAAO,KAAK,UAAU,gBAAgB,QAAQA,OAAM;AAAA,UAClD,MAAM;AAAA,UACN,SAAS,EAAE,QAAQ,mBAAmB;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,MAEQ,cAAc,SAAyB;AAC7C,eAAO,kBAAkB,mBAAmB,KAAK,SAAS,CAAC,IAAI,QAAQ,QAAQ,QAAQ,EAAE,CAAC;AAAA,MAC5F;AAAA,MAEA,MAAc,oCACZ,iBAC6B;AAC7B,cAAM,WAAW,MAAM,KAAK,UAAU;AAAA,UACpC;AAAA,UACA,KAAK,cAAc,gBAAgB,mBAAmB,eAAe,CAAC,EAAE;AAAA,UACxE,EAAE,iBAAiB,oBAAI,IAAI,CAAC,GAAG,CAAC,EAAE;AAAA,QACpC;AACA,YAAI,SAAS,WAAW,KAAK;AAC3B,iBAAO;AAAA,QACT;AAEA,cAAM,cACJ,MAAM,kBAA2C,QAAQ;AAC3D,eAAO,6BAA6B,WAAW;AAAA,MACjD;AAAA,MAEQ,oBACN,UACA,gBACA,WACQ;AACR,cAAM,yBAAyB,kBAAkB,KAAK;AACtD,cAAM,oBAAoB,aAAa,KAAK;AAC5C,YAAI,CAAC,0BAA0B,CAAC,mBAAmB;AACjD,iBAAO,gBAAgB,QAAQ;AAAA,QACjC;AACA,YAAI,CAAC,0BAA0B,CAAC,mBAAmB;AACjD,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO,8BAA8B,mBAAmB,sBAAsB,CAAC,aAAa,mBAAmB,iBAAiB,CAAC,IAAI,QAAQ;AAAA,MAC/I;AAAA,MAEQ,qBACN,gBACA,WACQ;AACR,cAAM,yBAAyB,kBAAkB,KAAK;AACtD,cAAM,oBAAoB,aAAa,KAAK;AAC5C,YAAI,CAAC,0BAA0B,CAAC,mBAAmB;AACjD,iBAAO,KAAK,cAAc,SAAS;AAAA,QACrC;AACA,YAAI,CAAC,0BAA0B,CAAC,mBAAmB;AACjD,gBAAM,IAAI,MAAM,wDAAwD;AAAA,QAC1E;AACA,eAAO,KAAK,cAAc,SAAS;AAAA,MACrC;AAAA,IACF;AAgBA,IAAM,2BAA2B;AAAA;AAAA;;;ACniBjC;AAAA,iBAAAC,UAAAC,SAAA;AAAA;AAAA;AAGA,aAASC,iBAAgBC,KAAI,aAAa,QAAQ,UAAU;AAC1D,YAAM,WAAW,QAAQ,IAAI;AAC7B,UAAI,YAAY,MAAM;AACpB,YAAI,aAAa,SAAS,aAAa,OAAQ,QAAO;AACtD,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,UAAI;AACJ,UAAI;AAEF,YAASC,QAAT,SAAc,MAAM,QAAQ;AAC1B,cAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,GAAG;AAC/C,kBAAM,IAAI,MAAM,oBAAoB;AAAA,UACtC;AACA,gBAAM,SAAS,OAAO,MAAM,IAAI;AAChC,cAAIC,SAAQ;AACZ,iBAAOA,SAAQ,MAAM;AACnB,kBAAM,QAAQF,IAAG,SAAS,IAAI,QAAQE,QAAO,OAAOA,QAAO,SAASA,MAAK;AACzE,gBAAI,UAAU,EAAG,OAAM,IAAI,MAAM,0BAA0B;AAC3D,YAAAA,UAAS;AAAA,UACX;AACA,iBAAO;AAAA,QACT;AAZS,mBAAAD;AADT,aAAKD,IAAG,SAAS,YAAY,GAAG;AAehC,cAAM,SAASC,MAAK,IAAI,CAAC;AACzB,YAAI,OAAO,aAAa,CAAC,MAAM,cAAc,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG;AAC/E,gBAAM,IAAI,MAAM,2CAA2C;AAAA,QAC7D;AACA,cAAM,YAAY,OAAO,aAAa,EAAE;AACxC,cAAM,QAAQ,OAAO,aAAa,EAAE;AACpC,YAAI,cAAc,MAAM,UAAU,KAAK,QAAQ,KAAK;AAClD,gBAAM,IAAI,MAAM,iCAAiC;AAAA,QACnD;AACA,cAAM,UAAUA,MAAK,YAAY,OAAO,OAAO,OAAO,gBAAgB,EAAE,CAAC,CAAC;AAC1E,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,gBAAM,SAAS,IAAI;AACnB,cAAI,QAAQ,aAAa,MAAM,MAAM,EAAG;AACxC,gBAAM,OAAO,OAAO,QAAQ,gBAAgB,SAAS,EAAE,CAAC;AACxD,cAAI,OAAO,KAAK,OAAO,KAAM,OAAM,IAAI,MAAM,8BAA8B;AAC3E,gBAAM,cAAcA,MAAK,MAAM,OAAO,QAAQ,gBAAgB,SAAS,CAAC,CAAC,CAAC;AAC1E,cAAI,YAAY,OAAO,CAAC,MAAM,EAAG,OAAM,IAAI,MAAM,8BAA8B;AAC/E,gBAAM,OAAO,YAAY,SAAS,GAAG,EAAE,EAAE,SAAS,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;AAC1E,cAAI,KAAK,WAAW,UAAU,EAAG,QAAO;AACxC,cAAI,KAAK,WAAW,WAAW,EAAG,QAAO;AACzC,gBAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD;AACA,cAAM,IAAI,MAAM,mDAAmD;AAAA,MACrE,SAAS,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,EAAE,MAAM;AAAA,QACV;AAAA,MACF,UAAE;AACA,YAAI,MAAM,KAAM,CAAAD,IAAG,UAAU,EAAE;AAAA,MACjC;AAAA,IACF;AAEA,IAAAF,QAAO,UAAU,EAAE,iBAAAC,iBAAgB;AAAA;AAAA;;;AC5BnC,SAAS,cAAsB;AAC7B,QAAM,aAAS,+BAAc,IAAI,IAAI,OAAO,aAAe,CAAC;AAC5D,MAAO,cAAW,iBAAAI,QAAK,KAAK,QAAQ,cAAc,CAAC,EAAG,QAAO;AAC7D,QAAM,kBAAc,+BAAc,IAAI,IAAI,UAAU,aAAe,CAAC;AACpE,MAAO,cAAW,iBAAAA,QAAK,KAAK,aAAa,cAAc,CAAC,EAAG,QAAO;AAClE,SAAO;AACT;AAIA,SAAS,gBAAgB,SAAwC;AAC/D,MAAI,QAAQ,QAAQ,KAAM,QAAO,QAAQ;AACzC,MAAI,QAAQ,UAAU,MAAM;AAC1B,WAAO,QAAQ,OAAO,QAAQ,sBAAsB,QAAQ;AAAA,EAC9D;AACA,MAAI,mBAAmB,KAAM,QAAO;AAEpC,wBAAkB,6BAAgB,EAAE;AACpC,SAAO;AACT;AAEO,SAAS,eACd,WAA4B,QAAQ,UACpC,OAAe,QAAQ,MACvB,UAAyB,CAAC,GAClB;AACR,QAAM,SAAS,GAAG,QAAQ,IAAI,IAAI;AAClC,MAAI,aAAa,QAAS,QAAO;AACjC,MAAI,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,aAAa,QAAQ,UAAU;AACnF,WAAO;AAAA,EACT;AACA,SAAO,gBAAgB,OAAO,MAAM,SAAS,GAAG,MAAM,UAAU;AAClE;AAEO,SAAS,kBAAkB,UAAoC,CAAC,GAAW;AAChF,QAAM,WAAW,QAAQ,YAAY,QAAQ;AAC7C,QAAM,OAAO,QAAQ,QAAQ,QAAQ;AACrC,SAAO,iBAAAA,QAAK;AAAA,IACV,QAAQ,eAAe,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,IACA,eAAe,UAAU,MAAM,OAAO;AAAA,IACtC;AAAA,EACF;AACF;AAEO,SAAS,kBACd,WAA4B,QAAQ,UACpC,OAAe,QAAQ,MACvB,UAAyB,CAAC,GACN;AACpB,SAAO,gBAAgB,eAAe,UAAU,MAAM,OAAO,CAAC;AAChE;AAEO,SAAS,aAAmB;AACjC,QAAM,SAAS,eAAe;AAC9B,QAAM,cAAc,kBAAkB;AACtC,QAAMC,eAAU,mCAAc,aAAe;AAI7C,MAAO,cAAW,WAAW,EAAG,QAAOA,SAAQ,WAAW;AAE1D,QAAM,cAAc,kBAAkB;AACtC,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,oDAAoD,MAAM;AAAA,IAC5D;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,mBAAeA,SAAQ,QAAQ,WAAW;AAAA,EAC5C,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,kCAAkC,WAAW,QAAQ,MAAM;AAAA,MAC3D,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AACA,SAAOA,SAAQ,YAAY;AAC7B;AAhHA,iBACA,IACAC,qBACA,kBACA,iBAmBM,iBAiBF;AAxCJ;AAAA;AAAA;AAAA;AAAA,kBAAgC;AAChC,SAAoB;AACpB,IAAAA,sBAA8B;AAC9B,uBAAiB;AACjB,sBAA8B;AAmB9B,IAAM,kBAAoD;AAAA,MACxD,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,aAAa;AAAA,IACf;AAAA;AAAA;;;AC9BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqIA,SAAS,oBAAmC;AAC1C,MAAI,oBAAqB,QAAO;AAChC,MAAI,yBAA0B,OAAM;AACpC,MAAI;AACF,0BAAsB,WAA0B;AAChD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,+BACE,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAC1D,UAAM;AAAA,EACR;AACF;AAGO,SAAS,0BAA0B,SAA0C;AAClF,wBAAsB;AACtB,6BAA2B;AAC7B;AAcA,SAAS,SAAS,OAA+C;AAC/D,SAAO,SAAS,MAAM,SAAS,IAAI,QAAQ;AAC7C;AAEO,SAAS,sBAAoC;AAClD,QAAM,YAAY,QAAQ,IAAI,oBAAoB,IAAI,YAAY;AAClE,QAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,IAAI,EAAE,SAAS,QAAQ;AAC1D,SAAO;AAAA,IACL,QAAQ,SAAS,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IACpD,QAAQ,SAAS,QAAQ,IAAI,kBAAkB;AAAA,IAC/C,qBAAqB,SAAS,QAAQ,IAAI,cAAc;AAAA,IACxD,WAAW,SAAS,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IACvD,gBAAgB,SAAS,QAAQ,IAAI,0BAA0B;AAAA,IAC/D,WAAW,SAAS,QAAQ,IAAI,qBAAqB;AAAA,IACrD;AAAA,EACF;AACF;AAMA,SAAS,sBAAsB,gBAAgC;AAC7D,QAAM,SAAS,kBAAAC,QAAK,MAAM,cAAc;AACxC,MAAI,OAAO,KAAK,YAAY,MAAM,cAAc;AAC9C,UAAM,aAAa,kBAAAA,QAAK,SAAS,kBAAAA,QAAK,QAAQ,cAAc,CAAC,EAAE,KAAK;AACpE,WAAO,cAAc;AAAA,EACvB;AACA,SAAO,OAAO,QAAQ;AACxB;AAQA,SAAS,+BAA+B,gBAAgC;AACtE,QAAM,gBAAgB,eAAe,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AACzD,QAAM,cAAc,cAAc,MAAM,GAAG,EAAE,IAAI,KAAK;AACtD,QAAM,aAAa,YAAY,YAAY,GAAG;AAC9C,QAAM,OACJ,aAAa,KAAK,aAAa,YAAY,SAAS,IAChD,YAAY,MAAM,GAAG,UAAU,IAC/B;AACN,SAAO,QAAQ;AACjB;AAIA,SAAS,SAAS,QAAuC;AAAC;AAE1D,SAAS,WAAW,OAAsC;AACxD,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AACpE,QAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,MAAI,SAAS,aAAa;AACxB,UAAM,SAAS,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AACjE,YAAQ,OAAO,MAAM,IAAI,MAAM,KAAK,OAAO;AAAA,CAAI;AAAA,EACjD,WAAW,SAAS;AAClB,YAAQ,OAAO,MAAM,IAAI,IAAI,KAAK,OAAO;AAAA,CAAI;AAAA,EAC/C;AACF;AAEA,SAAS,iBAAiB,OAAsC;AAC9D,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA,CAAI;AACnD;AAEA,SAAS,gBAAgB,OAAoD;AAC3E,QAAM,MAA+B;AAAA,IACnC,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,EACjB;AACA,MAAI,MAAM,UAAU,KAAM,KAAI,SAAS,MAAM;AAC7C,SAAO;AACT;AASA,SAAS,mBAAmB,IAAkC;AAC5D,MAAI,GAAG,SAAS,wBAAwB,KAAK;AAC3C,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,GAAG,QAAQ;AACzB,MAAI,SAAS,QAAQ,UAAU,IAAI;AACjC,WAAO;AAAA,EACT;AACA,QAAM,SAAiC,CAAC;AACxC,aAAW,SAAS,MAAM,MAAM,GAAG,GAAG;AACpC,UAAM,KAAK,MAAM,QAAQ,GAAG;AAC5B,UAAM,OAAO,OAAO,KAAK,QAAQ,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK;AAC1D,UAAM,QAAQ,OAAO,KAAK,KAAK,MAAM,MAAM,KAAK,CAAC,EAAE,KAAK;AACxD,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,OAAK,OAAO,QAAQ,YAAY,QAAQ;AACtC,WAAO;AAAA,EACT;AACA,SAAO,EAAE,UAAU;AACrB;AAQA,SAAS,sBAAsB,IAAkC;AAC/D,MAAI,GAAG,SAAS,wBAAwB,KAAK;AAC3C,WAAO,mBAAmB,EAAE;AAAA,EAC9B;AACA,MACE,GAAG,SAAS,wBAAwB,QACpC,GAAG,SAAS,wBAAwB,KACpC;AACA,WAAO;AAAA,EACT;AACA,MAAI,GAAG,QAAQ,QAAQ,MAAM;AAC3B,WAAO;AAAA,EACT;AACA,MACE,GAAG,SAAS,wBAAwB,QACnC,GAAG,KAAK,CAAC,EAAE,WAAW,SAAS,KAAK,GAAG,KAAK,CAAC,EAAE,WAAW,UAAU,IACrE;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAQA,SAAS,qBAAqB,OAAuB;AACnD,SAAO,MAAM,gBAAgB,KAAK,qBAAqB;AACzD;AAIA,eAAsB,mBACpB,QACA,UAAqC,CAAC,GACtC,OAA+B,CAAC,GACE;AAClC,QAAM,OAAO,KAAK,SAAS,QAAQ,UAAU,aAAa;AAC1D,QAAM,UAAU,oBAAoB;AAEpC,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAGJ,MAAI;AAEJ,MAAI,kBAAkB,OAAO;AAC3B,QAAI,CAAC,OAAO,WAAW;AACrB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAMA,QAAI;AACJ,QAAI,QAAQ,cAAc,MAAM;AAC9B,wBAAkB,kBAAAA,QAAK,QAAQ,QAAQ,UAAU;AAAA,IACnD,WAAW,qBAAqB,MAAM,GAAG;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,MAIF;AAAA,IACF,OAAO;AACL,2BAAiB,4BAAY,kBAAAA,QAAK,KAAK,eAAAC,QAAG,OAAO,GAAG,mBAAmB,CAAC;AACxE,wBAAkB;AAAA,IACpB;AACA,qBAAiB,kBAAAD,QAAK,KAAK,iBAAiB,YAAY;AACxD,QAAI,OAAO,kBAAkB,MAAM;AACnC,QAAI,CAAC,KAAK,SAAS,IAAI,EAAG,SAAQ;AAClC,qBAAiB;AACjB,uBAAmB;AACnB,oBAAgB,QAAQ,kBAAkB,OAAO;AAAA,EACnD,WAAW,OAAO,WAAW,UAAU;AACrC,UAAM,eAAe,kBAAAA,QAAK,QAAQ,MAAM;AACxC,QAAI,KAAC,2BAAW,YAAY,GAAG;AAC7B,YAAM,IAAI,MAAM,yBAAyB,MAAM,EAAE;AAAA,IACnD;AACA,qBAAiB;AACjB,qBAAiB;AACjB,uBAAmB;AACnB,oBACE,QAAQ,kBAAkB,sBAAsB,YAAY;AAAA,EAChE,OAAO;AACL,UAAM,IAAI;AAAA,MACR,qDAAqD,OAAO,MAAM;AAAA,IACpE;AAAA,EACF;AAEA,MAAI;AACF,QAAI,kBAAkB,oBAAoB;AACxC,cAAQ;AAAA,QACN,iDAAiD,kBAAkB;AAAA,MAGrE;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,cAAc,QAAQ,QAAQ,UAAU;AAC5D,UAAM,cAAc,QAAQ,WAAW,SAAS,QAAQ,sBAAsB;AAC9E,QAAI,CAAC,aAAa;AAChB,UAAI,QAAQ,uBAAuB,CAAC,KAAK,WAAW;AAClD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR,KAAK,YACD,8DACA;AAAA,MACN;AAAA,IACF;AAEA,SAAK,EAAE,MAAM,UAAU,SAAS,mBAAmB,aAAa,OAAO,CAAC;AAExE,UAAM,UAAU,kBAAkB;AAClC,QAAI;AACJ,UAAM,aAAa,MAAM,QAAQ;AAAA,MAC/B;AAAA,QACE,QAAQ,QAAQ;AAAA,QAChB;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,QAAQ,QAAQ;AAAA,QAChB,eAAe,QAAQ;AAAA,QACvB,MAAM,QAAQ;AAAA,QACd,UAAU,QAAQ;AAAA,QAClB,UAAU,QAAQ,YAAY;AAAA,QAC9B,gBAAgB,SAAS,QAAQ,iBAAiB;AAAA,QAClD,WAAW,SAAS,QAAQ,YAAY;AAAA,QACxC,WAAW,QAAQ;AAAA,QACnB,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,cAAc,QAAQ,gBAAgB;AAAA,QACtC;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA,CAAC,UAAU;AACT,YAAI;AACF,eAAK,gBAAgB,KAAK,CAAC;AAAA,QAC7B,SAAS,OAAO;AACd,wBAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,MAAM;AACrB,YAAM;AAAA,IACR;AAEA,QAAI,SAAkC,CAAC;AACvC,QAAI,WAAW,KAAK,EAAE,SAAS,GAAG;AAChC,eAAS,KAAK,MAAM,UAAU;AAAA,IAChC;AACA,SAAK;AAAA,MACH,MAAM;AAAA,MACN,MAAM;AAAA,MACN,UACG,OAAO,OAAO,OAAO,YAAY,OAAO,MACxC,OAAO,OAAO,eAAe,YAAY,OAAO,cACjD;AAAA,IACJ,CAAC;AACD,SAAK,EAAE,MAAM,OAAO,CAAC;AACrB,WAAO;AAAA,EACT,UAAE;AACA,QAAI,kBAAkB,MAAM;AAC1B,iCAAO,gBAAgB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IACzD;AAAA,EACF;AACF;AAaA,eAAsB,mBACpB,gBACA,UAAqC,CAAC,GACtC,OAA+B,CAAC,GACE;AAClC,QAAM,OAAO,KAAK,SAAS,QAAQ,UAAU,aAAa;AAE1D,MAAI,OAAO,mBAAmB,YAAY,eAAe,KAAK,EAAE,WAAW,GAAG;AAC5E,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,QAAM,YAAY,eAAe,KAAK;AAEtC,QAAM,UAAU,oBAAoB;AACpC,QAAM,gBACJ,QAAQ,kBAAkB,+BAA+B,SAAS;AAEpE,MAAI,kBAAkB,oBAAoB;AACxC,YAAQ;AAAA,MACN,kDAAkD,kBAAkB;AAAA,IAGtE;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,cAAc,QAAQ,QAAQ,UAAU;AAC5D,QAAM,cAAc,QAAQ,WAAW,SAAS,QAAQ,sBAAsB;AAC9E,MAAI,CAAC,aAAa;AAChB,QAAI,QAAQ,uBAAuB,CAAC,KAAK,WAAW;AAClD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI;AAAA,MACR,KAAK,YACD,8DACA;AAAA,IACN;AAAA,EACF;AAEA,OAAK;AAAA,IACH,MAAM;AAAA,IACN,SAAS,oBAAoB,SAAS,SAAS,aAAa;AAAA,EAC9D,CAAC;AAED,QAAM,UAAU,kBAAkB;AAClC,MAAI;AACJ,QAAM,aAAa,MAAM,QAAQ;AAAA,IAC/B;AAAA,MACE,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,eAAe,QAAQ;AAAA,MACvB,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ,YAAY;AAAA,MAC9B,gBAAgB,SAAS,QAAQ,iBAAiB;AAAA,MAClD,WAAW,SAAS,QAAQ,YAAY;AAAA,MACxC,WAAW,QAAQ;AAAA,MACnB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,cAAc,QAAQ,gBAAgB;AAAA,IACxC;AAAA,IACA,CAAC,UAAU;AACT,UAAI;AACF,aAAK,gBAAgB,KAAK,CAAC;AAAA,MAC7B,SAAS,OAAO;AACd,sBAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,aAAa,MAAM;AACrB,UAAM;AAAA,EACR;AAEA,MAAI,SAAkC,CAAC;AACvC,MAAI,WAAW,KAAK,EAAE,SAAS,GAAG;AAChC,aAAS,KAAK,MAAM,UAAU;AAAA,EAChC;AACA,OAAK;AAAA,IACH,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UACG,OAAO,OAAO,OAAO,YAAY,OAAO,MACxC,OAAO,OAAO,eAAe,YAAY,OAAO,cACjD;AAAA,EACJ,CAAC;AACD,OAAK,EAAE,MAAM,OAAO,CAAC;AACrB,SAAO;AACT;AAEA,eAAsB,mBAAmB,WAAkC;AACzE,MAAI,OAAO,cAAc,YAAY,UAAU,WAAW,GAAG;AAC3D,UAAM,IAAI,UAAU,sCAAsC;AAAA,EAC5D;AAEA,QAAM,UAAU,oBAAoB;AACpC,QAAM,cAAc,QAAQ;AAC5B,MAAI,CAAC,aAAa;AAChB,QAAI,QAAQ,qBAAqB;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,QAAM,SAAS,IAAI,YAAY;AAAA,IAC7B,QAAQ,QAAQ;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW,QAAQ;AAAA,EACrB,CAAC;AACD,MAAI;AACF,UAAM,OAAO,mBAAmB,SAAS;AAAA,EAC3C,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AASA,eAAsB,uBACpB,WACiC;AACjC,MAAI,OAAO,cAAc,YAAY,UAAU,WAAW,GAAG;AAC3D,UAAM,IAAI,UAAU,sCAAsC;AAAA,EAC5D;AAEA,QAAM,UAAU,oBAAoB;AACpC,QAAM,cAAc,QAAQ;AAC5B,MAAI,CAAC,aAAa;AAChB,QAAI,QAAQ,qBAAqB;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,QAAM,SAAS,IAAI,YAAY;AAAA,IAC7B,QAAQ,QAAQ;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW,QAAQ;AAAA,EACrB,CAAC;AACD,MAAI;AACF,WAAO,MAAM,OAAO,uBAAuB,SAAS;AAAA,EACtD,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AASA,eAAsB,oBAAgD;AACpE,QAAM,UAAU,oBAAoB;AACpC,QAAM,cAAc,QAAQ;AAC5B,MAAI,CAAC,aAAa;AAChB,QAAI,QAAQ,qBAAqB;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAEA,QAAM,SAAS,IAAI,YAAY;AAAA,IAC7B,QAAQ,QAAQ;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW,QAAQ;AAAA,EACrB,CAAC;AACD,MAAI;AACF,WAAO,MAAM,OAAO,kBAAkB;AAAA,EACxC,UAAE;AACA,WAAO,MAAM;AAAA,EACf;AACF;AAEA,eAAsB,yBAAyB,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAG;AAC3E,QAAM,aAAS,4BAAU;AAAA,IACvB,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,SAAS;AAAA,MACP,MAAM,EAAE,MAAM,UAAU,OAAO,IAAI;AAAA,MACnC,MAAM,EAAE,MAAM,SAAS;AAAA,MACvB,QAAQ,EAAE,MAAM,SAAS;AAAA,MACzB,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,iBAAiB,EAAE,MAAM,SAAS;AAAA,MAClC,eAAe,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,MACjD,QAAQ,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,OAAO,YAAY,CAAC;AAC3C,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OACJ,OAAO,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,IAAI;AAC5D,QAAM,WACJ,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,OAAO,MAAM,IAAI;AAChE,QAAM,SACJ,OAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI;AAClE,QAAM,gBACJ,OAAO,OAAO,mBAAmB,OAC7B,OAAO,OAAO,OAAO,eAAe,IACpC;AACN,MAAI,QAAQ,QAAQ,CAAC,OAAO,SAAS,IAAI,GAAG;AAC1C,UAAM,IAAI,MAAM,yBAAyB,OAAO,OAAO,IAAI,EAAE;AAAA,EAC/D;AACA,MAAI,YAAY,QAAQ,CAAC,OAAO,UAAU,QAAQ,GAAG;AACnD,UAAM,IAAI,MAAM,2BAA2B,OAAO,OAAO,MAAM,EAAE;AAAA,EACnE;AACA,MAAI,UAAU,QAAQ,CAAC,OAAO,UAAU,MAAM,GAAG;AAC/C,UAAM,IAAI,MAAM,4BAA4B,OAAO,OAAO,OAAO,EAAE;AAAA,EACrE;AACA,MAAI,iBAAiB,QAAQ,CAAC,OAAO,UAAU,aAAa,GAAG;AAC7D,UAAM,IAAI;AAAA,MACR,oCAAoC,OAAO,OAAO,eAAe;AAAA,IACnE;AAAA,EACF;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,MACE,gBAAgB,OAAO,OAAO;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,OAAO,OAAO;AAAA,MAC5B,UAAU,OAAO,OAAO;AAAA,IAC1B;AAAA,IACA,EAAE,MAAM,kBAAkB,WAAW,KAAK;AAAA,EAC5C;AACF;AAEA,eAAsB,yBAAyB,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAG;AAC3E,QAAM,aAAS,4BAAU;AAAA,IACvB,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,SAAS;AAAA,MACP,MAAM,EAAE,MAAM,UAAU,OAAO,IAAI;AAAA,MACnC,MAAM,EAAE,MAAM,SAAS;AAAA,MACvB,QAAQ,EAAE,MAAM,SAAS;AAAA,MACzB,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,iBAAiB,EAAE,MAAM,SAAS;AAAA,MAClC,eAAe,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,MACjD,QAAQ,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,OAAO,YAAY,CAAC;AAC3C,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OACJ,OAAO,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,IAAI,IAAI;AAC5D,QAAM,WACJ,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,OAAO,MAAM,IAAI;AAChE,QAAM,SACJ,OAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI;AAClE,QAAM,gBACJ,OAAO,OAAO,mBAAmB,OAC7B,OAAO,OAAO,OAAO,eAAe,IACpC;AACN,MAAI,QAAQ,QAAQ,CAAC,OAAO,SAAS,IAAI,GAAG;AAC1C,UAAM,IAAI,MAAM,yBAAyB,OAAO,OAAO,IAAI,EAAE;AAAA,EAC/D;AACA,MAAI,YAAY,QAAQ,CAAC,OAAO,UAAU,QAAQ,GAAG;AACnD,UAAM,IAAI,MAAM,2BAA2B,OAAO,OAAO,MAAM,EAAE;AAAA,EACnE;AACA,MAAI,UAAU,QAAQ,CAAC,OAAO,UAAU,MAAM,GAAG;AAC/C,UAAM,IAAI,MAAM,4BAA4B,OAAO,OAAO,OAAO,EAAE;AAAA,EACrE;AACA,MAAI,iBAAiB,QAAQ,CAAC,OAAO,UAAU,aAAa,GAAG;AAC7D,UAAM,IAAI;AAAA,MACR,oCAAoC,OAAO,OAAO,eAAe;AAAA,IACnE;AAAA,EACF;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,MACE,gBAAgB,OAAO,OAAO;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,OAAO,OAAO;AAAA,MAC5B,UAAU,OAAO,OAAO;AAAA,IAC1B;AAAA,IACA,EAAE,MAAM,kBAAkB,WAAW,KAAK;AAAA,EAC5C;AACF;AArwBA,IAAAE,mBACA,gBACA,gBACA,kBA+HI,qBACA,0BAqDE;AAxLN;AAAA;AAAA;AAAA;AAAA,IAAAA,oBAAiB;AACjB,qBAAe;AACf,qBAAgD;AAChD,uBAA0B;AAC1B;AAEA;AAEA;AAgLA,IAAM,qBAAqB;AAAA;AAAA;;;ACzJ3B,SAAS,eAAe,IAA8C;AACpE,SAAO;AAAA,IACL,MAAM,GAAG;AAAA,IACT,MAAM,CAAC,GAAG,GAAG,IAAI;AAAA,IACjB,SAAS,EAAE,GAAG,GAAG,QAAQ;AAAA,EAC3B;AACF;AAsHA,SAAS,cAAc,SAAyC;AAC9D,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,SAAO,IAAI,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,EAAE,KAAK,GAAG,CAAC;AACzE;AAEA,SAAS,cAAc,IAAiC;AACtD,QAAM,UAAU,cAAc,GAAG,OAAO;AACxC,MAAI,GAAG,SAAS,wBAAwB,KAAK;AAC3C,WAAO,MAAM,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;AAAA,EAClE;AACA,SAAO,GAAG,GAAG,IAAI,GAAG,OAAO,IAAI,GAAG,KAAK,KAAK,GAAG,CAAC;AAClD;AAEO,SAAS,kBAAkB,OAAsB;AACtD,QAAM,QAAQ,MAAM,aAAa,OAAO,CAAC,IAAI,CAAC,QAAQ,MAAM,SAAS,EAAE;AACvE,QAAM,KAAK,GAAG,MAAM,gBAAgB,IAAI,CAAC,OAAO,cAAc,EAAE,CAAC,CAAC;AAClE,SAAO,MAAM,KAAK,IAAI;AACxB;AA/KA,IAAAC,qBAMMC,qBAEO,yBA+BA;AAvCb;AAAA;AAAA;AAAA;AAAA,IAAAD,sBAA2B;AAM3B,IAAMC,sBAAqB;AAEpB,IAAM,0BAA0B;AAAA,MACrC,KAAK;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,SAAS;AAAA,IACX;AAyBO,IAAM,QAAN,MAAY;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAKT,YACE,gBAAuC,CAAC,GACxC,MAAM,UACN,YAA2B,MAC3B;AACA,aAAK,UAAM,gCAAW;AACtB,aAAK,mBAAmB,CAAC;AAEzB,YAAI,OAAO,kBAAkB,UAAU;AACrC,eAAK,QAAQ;AACb,eAAK,OAAO;AACZ,eAAK,aAAa;AAClB;AAAA,QACF;AAEA,aAAK,QAAQ,cAAc,QAAQA;AACnC,aAAK,OAAO,cAAc,OAAO;AACjC,aAAK,aAAa,cAAc,aAAa;AAAA,MAC/C;AAAA,MAEA,IAAI,OAAe;AACjB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,MAAc;AAChB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,YAA2B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,kBAAyC;AAC3C,eAAO,KAAK,iBAAiB,IAAI,cAAc;AAAA,MACjD;AAAA,MAEA,IACE,KACA,MACA,UAA8C,QACxC;AACN,eAAO,KAAK,cAAc;AAAA,UACxB,MAAM,wBAAwB;AAAA,UAC9B,MAAM,CAAC,KAAK,IAAI;AAAA,UAChB,SAAS,WAAW,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,MAEA,KACE,KACA,MACA,UAA8C,QACxC;AACN,eAAO,KAAK,cAAc;AAAA,UACxB,MAAM,wBAAwB;AAAA,UAC9B,MAAM,CAAC,KAAK,IAAI;AAAA,UAChB,SAAS,WAAW,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,MAEA,IAAI,KAAa,OAAqB;AACpC,eAAO,KAAK,cAAc;AAAA,UACxB,MAAM,wBAAwB;AAAA,UAC9B,MAAM,CAAC,KAAK,KAAK;AAAA,UACjB,SAAS,CAAC;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,MAEA,IACE,UACA,UAA8C,QACxC;AACN,eAAO,KAAK,cAAc;AAAA,UACxB,MAAM,wBAAwB;AAAA,UAC9B,MAAM,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,QAAQ;AAAA,UACzD,SAAS,WAAW,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ,WAAyB;AAC/B,eAAO,KAAK,cAAc;AAAA,UACxB,MAAM,wBAAwB;AAAA,UAC9B,MAAM,CAAC,SAAS;AAAA,UAChB,SAAS,CAAC;AAAA,QACZ,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,MACJ,UAAqC,CAAC,GACJ;AAClC,cAAM,EAAE,oBAAAC,oBAAmB,IAAI,MAAM;AACrC,eAAOA,oBAAmB,MAAM,OAAO;AAAA,MACzC;AAAA,MAEQ,cAAc,IAA+B;AACnD,aAAK,iBAAiB,KAAK,EAAE;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACzJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,8BAAoD;AACpD,yBAA2B;;;ACD3B;AAAA,IAAM,wBAAwB,uBAAO,IAAI,4CAA4C;AACrF,IAAM,sBAAsB,uBAAO,IAAI,0CAA0C;AACjF,IAAM,uBAAuB,uBAAO,IAAI,2CAA2C;AACnF,IAAM,sBAAsB,uBAAO,IAAI,0CAA0C;AAE1E,IAAM,6BAAN,cAAyC,MAAM;AAAA,EACpD,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,MAAM,uBAAsB,2BAA2B;AAAA,EAC5D,CAAU,qBAAqB,IAAI;AAAA,EAEnC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,gBAAe;AAC1B,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAGA,SAAS,gBAAgB,OAAwC;AAC/D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,qBAAqB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACnF;AAEO,IAAM,qBAAN,cAAiC,2BAA2B;AAAA,EACjE,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,2BAA2B;AAAA,EACnE,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,MAAM,uBAAsB,2BAA2B;AAAA,EAC5D,CAAU,oBAAoB,IAAI;AAAA,EAElC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,gBAAe;AAC1B,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,MAAM,sBAAqB,2BAA2B;AAAA,EAC3D,CAAU,mBAAmB,IAAI;AAAA,EAEjC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,eAAc;AACzB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,cAAc;AACZ,UAAM,YAAY;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAGA,SAAS,eAAe,OAAuC;AAC7D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,mBAAmB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACjF;AAGA,SAAS,gBAAgB,OAAwC;AAC/D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,oBAAoB,MAAM,QAAQ,OAAO,UAAU,YAAY;AAClF;AAEO,IAAM,eAAN,MAAM,sBAAqB,2BAA2B;AAAA,EAC3D,CAAU,mBAAmB,IAAI;AAAA,EAEjC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,eAAc;AACzB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAGO,SAAS,eAAe,OAAuC;AACpE,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,mBAAmB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACjF;AAEO,IAAM,sBAAN,cAAkC,2BAA2B;AAAA,EAClE,YAAY,UAAU,8DAA8D;AAClF,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;AC3HA;AAAA,iBAA2C;AAC3C,eAAoB;;;ACDpB;AAEA,IAAM,aAAa,uBAAO,IAAI,iCAAiC;AAExD,IAAM,OAAN,MAAM,MAAK;AAAA,EAChB,CAAU,UAAU,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,OAAM;AACjB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEA,YAAY,SAAmC,aAAqB;AAClE,QAAI,CAAC,YAAY,KAAK,GAAG;AACvB,YAAM,IAAI,cAAc,kCAAkC;AAAA,IAC5D;AACA,SAAK,UAAU,mBAAmB,aAAa,UAAU,IAAI,WAAW,OAAO;AAC/E,SAAK,cAAc;AAAA,EACrB;AACF;AAUO,SAAS,OAAO,OAA+B;AACpD,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,UAAU,MAAM,QAC5B,UAAU,mBAAmB,cAC7B,OAAO,UAAU,gBAAgB,YACjC,UAAU,YAAY,KAAK,EAAE,SAAS;AAC7C;;;ACxCA;AAAA,IAAM,kBAAkB,uBAAO,IAAI,sCAAsC;AAElE,IAAM,WAAN,MAAM,UAAS;AAAA,EACpB,CAAU,eAAe,IAAI;AAAA,EACpB;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,WAAU;AACrB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,WAAW,KAAK;AAAA,EACzB;AAAA,EAEA,YACE,SACA,aACA;AACA,SAAK,UAAU,mBAAmB,aAC9B,UACA,IAAI,WAAW,OAAO;AAC1B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,KAAK,WAAW,SAAiB;AAC/B,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO;AAAA,EACvE;AAAA,EAEA,OAAuB;AACrB,WAAO,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,EAC/B;AACF;AASO,SAAS,WAAW,OAAmC;AAC5D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,eAAe,MAAM,QACjC,UAAU,mBAAmB,eAE9B,UAAU,gBAAgB,UACvB,OAAO,UAAU,gBAAgB;AAE1C;;;AFrCA,IAAM,YAAY,IAAI,WAAAC,QAAI,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC;AAC5D,IAAM,UAAU,IAAI,SAAAC,QAAQ,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC;AA8B9D,SAAS,kBACP,OACA,OACA,WACA,QACS;AACT,MACE,SAAS,QACN,OAAO,UAAU,YACjB,OAAO,UAAU,WACpB;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,IAAI,cAAc,GAAG,KAAK,+BAA+B;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,cAAc,GAAG,KAAK,yBAAyB,OAAO,KAAK,EAAE;AAAA,EACzE;AACA,MAAI,UAAU,IAAI,KAAK,GAAG;AACxB,UAAM,IAAI,cAAc,GAAG,KAAK,mBAAmB;AAAA,EACrD;AACA,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,OAAO,eAAe,KAAK,MAAM,OAAO,WAAW;AAC9E,UAAM,IAAI;AAAA,MACR,GAAG,KAAK,yBAAyB,MAAM,aAAa,QAAQ,QAAQ;AAAA,IACtE;AAAA,EACF;AAEA,YAAU,IAAI,KAAK;AACnB,MAAI;AACJ,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAS,CAAC;AACV,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,KAAK,GAAG;AACvD,cAAM,IAAI,cAAc,GAAG,KAAK,2CAA2C,KAAK,EAAE;AAAA,MACpF;AACA,aAAO,KAAK;AAAA,QACV,MAAM,KAAK;AAAA,QACX,GAAG,KAAK,IAAI,KAAK;AAAA,QACjB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,aAAS,OAAO;AAAA,MACd,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM;AAAA,QACzC;AAAA,QACA,kBAAkB,MAAM,GAAG,KAAK,IAAI,GAAG,IAAI,WAAW,MAAM;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AACA,YAAU,OAAO,KAAK;AACtB,SAAO,SAAS,OAAO,OAAO,MAAM,IAAI;AAC1C;AAEA,SAAS,mBAAmB,YAAoC;AAC9D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,oBAAI,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,gBAAmB,aAAwB,OAAa;AAC/D,MAAI,YAAY,OAAO;AACrB,QAAI,CAAC,OAAO,KAAK,GAAG;AAClB,YAAM,IAAI,cAAc,6CAA6C;AAAA,IACvE;AACA,WAAO,IAAI,KAAK,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,WAAW;AAAA,EAClE;AACA,MAAI,YAAY,WAAW;AACzB,QAAI,CAAC,WAAW,KAAK,GAAG;AACtB,YAAM,IAAI,cAAc,iDAAiD;AAAA,IAC3E;AACA,WAAO,IAAI,SAAS,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,WAAW;AAAA,EACtE;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,oBAAI,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,WACP,YACA,SACW;AACX,SAAO,OAAO,OAAO;AAAA,IACnB,YAAY,mBAAmB,UAAU;AAAA,IACzC,OAAO,YAAY;AAAA,IACnB,WAAW,YAAY;AAAA,EACzB,CAAC;AACH;AAEA,SAAS,yBACP,WACA,QACM;AACN,QAAM,UAAU,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,MAAM,SAAS;AACrE,MAAI,WAAW,MAAM;AACnB,UAAM,UAAU,QAAQ,YAAY,aAAa;AACjD,UAAM,OAAO,QAAQ,YAAY,aAAa;AAC9C,UAAM,oBAAoB,QAAQ,YAC9B,sCACA;AACJ,UAAM,IAAI;AAAA,MACR,UAAU,SAAS,0BAA0B,OAAO,OAAO,IAAI,sBACzD,iBAAiB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,UACP,MACA,aACA,UAA+B,CAAC,GAClB;AACd,MAAI,CAAC,qBAAqB,KAAK,IAAI,GAAG;AACpC,UAAM,IAAI,cAAc,2BAA2B,IAAI,GAAG;AAAA,EAC5D;AACA,QAAM,aAAa,OAAO,UAAU,eAAe,KAAK,SAAS,SAAS;AAC1E,MAAI,WAAY,oBAAmB,aAAa,QAAQ,SAAS,gBAAgB,IAAI,GAAG;AACxF,QAAM,kBAAkB,aACpB,gBAAgB,aAAa,QAAQ,OAAY,IACjD;AACJ,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,IACR,aAAa,QAAQ;AAAA,IACrB,UAAU,QAAQ,aAAa,QAAQ,CAAC;AAAA,IACxC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,eAA8B;AAChC,aAAO,aACH,gBAAgB,aAAa,eAAoB,IACjD;AAAA,IACN;AAAA,EACF,CAAC;AACH;AAEO,IAAM,SAAS;AAAA;AAAA,EAEpB,MAAM,MAAmB,WAAc,CAAC,CAAC;AAAA,EACzC,QAAQ,CAAC,UAAoC,CAAC,MAC5C,WAAmB,EAAE,GAAG,SAAS,MAAM,SAAS,CAAC;AAAA,EACnD,QAAQ,CAAC,UAAoC,CAAC,MAC5C,WAAmB,EAAE,GAAG,SAAS,MAAM,SAAS,CAAC;AAAA,EACnD,SAAS,CAAC,UAAoC,CAAC,MAC7C,WAAmB,EAAE,GAAG,SAAS,MAAM,UAAU,CAAC;AAAA,EACpD,SAAS,MAAM,WAAoB,EAAE,MAAM,UAAU,CAAC;AAAA,EACtD,MAAM,MAAM,WAAiB,EAAE,MAAM,OAAO,CAAC;AAAA,EAC7C,SAAS,CAA6C,UACpD,WAAc,EAAE,OAAO,MAAM,CAAC;AAAA,EAChC,MAAM,CAA+C,WACnD,WAAsB,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;AAAA,EAC7C,OAAO,CAA4B,MAAS,UAA8C,CAAC,MAAM;AAC/F,6BAAyB,SAAS,CAAC,IAAI,CAAC;AACxC,WAAO,WAAuB,EAAE,GAAG,SAAS,MAAM,SAAS,OAAO,KAAK,WAAW,CAAC;AAAA,EACrF;AAAA,EACA,OAAO,CAA6C,UAAa;AAC/D,6BAAyB,SAAS,KAAK;AACvC,WAAO,WAAyE;AAAA,MAC9E,MAAM;AAAA,MACN,aAAa,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU;AAAA,MAChD,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,CAA4B,UAAa;AAC/C,6BAAyB,UAAU,CAAC,KAAK,CAAC;AAC1C,WAAO,WAAqC;AAAA,MAC1C,MAAM;AAAA,MACN,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,CAAkD,eAAkB;AAC1E,6BAAyB,UAAU,OAAO,OAAO,UAAU,CAAC;AAC5D,WAAO,WAAyE;AAAA,MAC9E,MAAM;AAAA,MACN,YAAY,OAAO;AAAA,QACjB,OAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC;AAAA,MACxE;AAAA,MACA,UAAU,OAAO,KAAK,UAAU;AAAA,MAChC,sBAAsB;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,OAAO,IAAgD,YAAe;AACpE,6BAAyB,SAAS,OAAO;AACzC,WAAO,WAA6B,EAAE,OAAO,QAAQ,IAAI,CAAC,WAAW,OAAO,UAAU,EAAE,CAAC;AAAA,EAC3F;AAAA,EACA,UAAU,CAA4B,UAAa;AACjD,6BAAyB,YAAY,CAAC,KAAK,CAAC;AAC5C,WAAO,WAA4B,EAAE,OAAO,CAAC,MAAM,YAAY,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC;AAAA,EACpF;AAAA,EACA,MAAM,MAAM,WAAiB,EAAE,MAAM,kBAAkB,GAAG,MAAM;AAAA,EAChE,UAAU,MACR,WAAqB,EAAE,MAAM,uBAAuB,GAAG,UAAU;AAAA,EACnE,QAAQ,CAAI,eAA2B,WAAc,EAAE,GAAG,WAAW,CAAC;AAAA,EACtE;AACF;AAOA,IAAM,iBAAiB,oBAAI,QAAiC;AAE5D,SAAS,iBAAiB,YAAyC;AAKjE,QAAM,UAAU,WAAW;AAC3B,QAAM,SAAS,OAAO,YAAY,YAAY,wBAAwB,KAAK,OAAO,IAC9E,YACA;AACJ,QAAM,WAAW,OAAO,QAAQ,UAAU;AAC1C,SAAO;AAAA,IACL;AAAA,IACA,YAAY,CAAC,WAAW,OAAO,WAAW,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EACvE;AACF;AAEO,SAAS,mBAAsB,aAAwB,OAAgB,OAAkB;AAC9F,MAAI,YAAY,OAAO;AACrB,QAAI,CAAC,OAAO,KAAK,GAAG;AAClB,YAAM,IAAI,cAAc,GAAG,KAAK,4BAA4B;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AACA,MAAI,YAAY,WAAW;AACzB,QAAI,CAAC,WAAW,KAAK,GAAG;AACtB,YAAM,IAAI,cAAc,GAAG,KAAK,gCAAgC;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,KAAK,GAAG;AACjB,UAAM,IAAI,cAAc,GAAG,KAAK,+CAA+C;AAAA,EACjF;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AACA,MAAI,SAAS,eAAe,IAAI,WAAqB;AACrD,MAAI,UAAU,MAAM;AAClB,QAAI;AACF,eAAS,iBAAiB,YAAY,UAAU;AAAA,IAClD,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAM,IAAI,cAAc,GAAG,KAAK,iCAAiC,OAAO,EAAE;AAAA,IAC5E;AACA,mBAAe,IAAI,aAAuB,MAAM;AAAA,EAClD;AACA,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,UAAM,UAAU,OAAO,WAAW,OAAO,SAAS,MAAM;AACxD,UAAM,IAAI,cAAc,GAAG,KAAK,+BAA+B,OAAO,EAAE;AAAA,EAC1E;AACA,SAAO;AACT;AAEO,SAAS,oBAAoBC,YAA2C;AAC7E,QAAM,SAAqB;AAAA,IACzB,GAAGA,WAAU,OAAO;AAAA,IACpB,OAAOA,WAAU;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACA,MAAIA,WAAU,eAAe,KAAM,QAAO,cAAcA,WAAU;AAClE,MAAIA,WAAU,YAAY;AACxB,WAAO,UAAUA,WAAU,OAAO,SAASA,WAAU,OAAO,YACxD,OACAA,WAAU;AAAA,EAChB;AACA,SAAO;AACT;;;AGtUA;AAaA,IAAM,eAAe,uBAAO,IAAI,qCAAqC;AAErE,SAAS,WAA0B;AACjC,QAAM,SAAS;AACf,SAAO,YAAY,MAAM,EAAE,WAAW,oBAAI,IAAI,GAAG,cAAc,oBAAI,IAAI,EAAE;AACzE,SAAO,OAAO,YAAY;AAC5B;AAEO,SAAS,mBAAmB,YAAkC,eAA8B;AACjG,QAAM,QAAQ,SAAS;AACvB,QAAM,WAAW,MAAM,UAAU,IAAI,WAAW,IAAI;AACpD,MAAI,YAAY,QAAQ,aAAa,YAAY;AAC/C,UAAM,IAAI,cAAc,4CAA4C,WAAW,IAAI,GAAG;AAAA,EACxF;AACA,QAAM,UAAU,IAAI,WAAW,MAAM,UAAU;AAC/C,MAAI,eAAe;AACjB,UAAM,MAAM,MAAM,aAAa,IAAI,WAAW,IAAI;AAClD,QAAI,OAAO,QAAQ,QAAQ,YAAY;AACrC,YAAM,IAAI,cAAc,+CAA+C,WAAW,IAAI,GAAG;AAAA,IAC3F;AACA,UAAM,aAAa,IAAI,WAAW,MAAM,UAAU;AAAA,EACpD;AACF;AAEO,SAAS,YAAY,MAAoC;AAC9D,QAAM,SAAS,SAAS,EAAE,UAAU,IAAI,IAAI;AAC5C,MAAI,UAAU,KAAM,OAAM,IAAI,cAAc,wBAAwB,IAAI,qBAAqB;AAC7F,SAAO;AACT;AAEO,SAAS,eAAuC;AACrD,SAAO,CAAC,GAAG,SAAS,EAAE,UAAU,OAAO,CAAC;AAC1C;AAEO,SAAS,kBAA0C;AACxD,SAAO,CAAC,GAAG,SAAS,EAAE,aAAa,OAAO,CAAC;AAC7C;;;ALrCO,SAAS,QAAQ,SAA2B;AACjD,MACE,OAAO,YAAY,YAChB,WAAW,QACX,CAAC,OAAO,UAAU,QAAQ,UAAU,KACpC,QAAQ,aAAa,KACrB,QAAQ,aAAa,IACxB;AACA,UAAM,IAAI,cAAc,gDAAgD;AAAA,EAC1E;AACA,SAAO,OAAO,OAAO,EAAE,GAAG,QAAQ,CAAC;AACrC;AAoFA,IAAM,kBAAiC,uBAAO;AAAA,EAC5C;AACF;AA8CO,IAAM,2BAA2B,uBAAO;AAAA,EAC7C;AACF;AAKO,IAAM,gCAAgC,uBAAO;AAAA,EAClD;AACF;AAgBA,IAAM,+BAA+B,uBAAO;AAAA,EAC1C;AACF;AAUA,IAAM,gCAAgC,uBAAO;AAAA,EAC3C;AACF;AAEA,IAAM,uCAAuC,uBAAO;AAAA,EAClD;AACF;AAsCA,IAAI,0BAA0B;AAE9B,SAAS,iBAAqD;AAC5D,QAAM,SAAS;AAGf,SAAO,4BAA4B,MAAM,IAAI,0CAAmC;AAChF,SAAO,OAAO,4BAA4B;AAC5C;AAEO,SAAS,yBAAsD;AACpE,SAAO,eAAe,EAAE,SAAS;AACnC;AAEO,SAAS,uBACd,SACA,UACY;AACZ,SAAO,eAAe,EAAE,IAAI,SAAS,QAAQ;AAC/C;AAEO,IAAM,iBAAN,MAAM,gBAA4C;AAAA,EAC9C,SAAK,+BAAW;AAAA,EAChB;AAAA,EACA;AAAA,EACD;AAAA,EACA,oBAAoB;AAAA,EACpB;AAAA,EACA,SAAS;AAAA,EACjB;AAAA,EACA,OAAO;AAAA,EAEP,YAAY,YAAkC,MAA0B;AACtE,SAAK,aAAa;AAClB,SAAK,OAAO;AACZ,4BAAwB,IAAI;AAAA,EAC9B;AAAA,EAEA,MAAY;AACV,QAAI,KAAK,WAAW,KAAM,OAAM,IAAI,cAAc,UAAU,KAAK,EAAE,qBAAqB;AACxF,UAAM,UAAU,uBAAuB;AACvC,UAAM,UAAU,WAAW,OACvB,eAAkB,KAAK,YAAY,KAAK,IAAI,IAC5C,QAAQ,UAAU,IAAI;AAI1B,4BAAwB,SAAS,IAAI;AACrC,SAAK,UAAU;AACf,UAAM,cAAc,CAAC,UAAa;AAChC,WAAK,OAAO;AACZ,WAAK,kBAAkB;AACvB,iCAA2B;AAC3B,aAAO;AAAA,IACT;AACA,UAAM,aAAa,CAAC,UAAmB;AACrC,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,YAAY;AACjB,WAAK,kBAAkB;AACvB,iCAA2B;AAAA,IAC7B;AACA,UAAM,WAAY,QAAwC,wBAAwB;AAClF,QAAI,YAAY,MAAM;AACpB,eAAS,KAAK,SAAS,aAAa,UAAU;AAAA,IAChD,OAAO;AACL,WAAK,QAAQ;AAAA,QACX,CAAC,UAAU;AACT,sBAAY,KAAK;AAAA,QACnB;AAAA,QACA,CAAC,UAAU;AACT,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAIA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,cAA4B;AACnC,QAAI,CAAC,OAAO,SAAS,YAAY,KAAK,eAAe,GAAG;AACtD,YAAM,IAAI,cAAc,mDAAmD;AAAA,IAC7E;AACA,QAAI,KAAK,WAAW,MAAM;AACxB,YAAM,IAAI,cAAc,UAAU,KAAK,EAAE,qBAAqB;AAAA,IAChE;AACA,SAAK,oBAAoB;AACzB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,eAAuB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAqB;AACnB,QAAI,KAAK,WAAW,KAAM,MAAK,IAAI;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,KACE,aACA,YACkC;AAClC,WAAO,KAAK,OAAO,EAAE,KAAK,aAAa,UAAU;AAAA,EACnD;AAAA,EAEA,OAAO,KAAQ,SAA8B,UAAuB,CAAC,GAA2B;AAC9F,UAAM,aAAa,gBAAe,eAAe,SAAS,OAAO;AAIjE,WAAO,uBAAuB,GAAG,iBAAiB,UAAU,KAAK;AAAA,EACnE;AAAA,EAEA,aAAqB,eACnB,SACA,SACwB;AACxB,UAAM,aAAa,QAAQ,cAAc;AACzC,QAAI,CAAC,CAAC,iBAAiB,mBAAmB,eAAe,EAAE,SAAS,UAAU,GAAG;AAC/E,YAAM,IAAI,cAAc,6CAA6C,UAAU,GAAG;AAAA,IACpF;AACA,QAAI,QAAQ,WAAW,SAAS,CAAC,OAAO,SAAS,QAAQ,OAAO,KAAK,QAAQ,UAAU,IAAI;AACzF,YAAM,IAAI,cAAc,0DAA0D;AAAA,IACpF;AACA,YAAQ,QAAQ,CAAC,WAAW;AAC1B,UAAI,OAAO,WAAW,KAAM,QAAO,IAAI;AAAA,IACzC,CAAC;AACD,UAAM,cAAc,QAAQ,OAAO,CAAC,WAAW,OAAO,IAAI;AAC1D,QACE,YAAY,SAAS,MAEnB,eAAe,qBAEb,eAAe,mBACZ,YAAY,KAAK,CAAC,WAAW,OAAO,MAAM,IAGjD;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,QAAQ,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI;AAAA,MAClD;AAAA,IACF;AACA,UAAM,UAAU,QAAQ,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI;AACvD,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE;AAAA,IAC3C;AACA,QAAI;AACJ,QAAI,eAAe,iBAAiB;AAClC,aAAO;AAAA,QACL,QAAQ,IAAI,CAAC,WAAW;AAAA,UAAoB,OAAO,OAAO;AAAA,UACxD,MAAM;AAAA,UACN,MAAM;AAAA,QACR,CAAC;AAAA,MACH,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,EAAE;AAAA,IAC1C,WAAW,eAAe,mBAAmB;AAC3C,aAAO;AAAA,QACL,QAAQ,IAAI,CAAC,WAAW;AAAA,UAAoB,OAAO,OAAO;AAAA,UACxD,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA,UAChC,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA,QAClC,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,aAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAI,YAAY,QAAQ;AACxB,mBAAW,UAAU,SAAS;AAC5B,eAAK;AAAA,YACH,OAAO,OAAO;AAAA,YACd,MAAM;AACJ,2BAAa;AACb,kBAAI,cAAc,EAAG,SAAQ,EAAE,MAAM,gBAAgB,CAAC;AAAA,YACxD;AAAA,YACA,MAAM,QAAQ,EAAE,MAAM,UAAU,OAAO,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,UAAU,MAAM,mBAAmB,MAAM,QAAQ,OAAO;AAC9D,QAAI,QAAQ,SAAS,UAAU;AAC7B,YAAM,mBAAmB,QAAQ,OAAO;AACxC,UAAI,oBAAoB,MAAM;AAC5B,cAAM,IAAI,cAAc,4CAA4C;AAAA,MACtE;AACA,YAAM,UAAU,IAAI,IAAI,WAAW;AACnC,iBAAW,UAAU,SAAS;AAC5B,YACE,OAAO,QACJ,OAAO,mBAAmB,QAC1B,OAAO,mBAAmB,kBAC7B;AACA,kBAAQ,IAAI,MAAM;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM,QAAQ,OAAO,CAAC,WAAW,QAAQ,IAAI,MAAM,CAAC;AAAA,QACpD,SAAS,QAAQ,OAAO,CAAC,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM,QAAQ,OAAO,CAAC,WAAW,OAAO,IAAI;AAAA,MAC5C,SAAS,QAAQ,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI;AAAA,IAClD;AAAA,EACF;AACF;AAMA,eAAe,mBACb,SACA,gBACkC;AAClC,MAAI,kBAAkB,MAAM;AAC1B,WAAO;AAAA,EACT;AACA,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,oBAA6C;AAAA,MACxD;AAAA,MACA,IAAI,QAA6B,CAAC,YAAY;AAC5C,gBAAQ,WAAW,MAAM,QAAQ,EAAE,MAAM,UAAU,CAAC,GAAG,iBAAiB,GAAI;AAAA,MAC9E,CAAC;AAAA,IACH,CAAC;AAAA,EACH,UAAE;AACA,QAAI,SAAS,KAAM,cAAa,KAAK;AAAA,EACvC;AACF;AAkBA,SAAS,0BAAsE;AAC7E,QAAM,SAAS;AAGf,SAAO,6BAA6B,MAClC,oBAAI,QAA2C;AACjD,SAAO,OAAO,6BAA6B;AAC7C;AAEA,SAAS,6BAAsD;AAC7D,SAAO;AAAA,IACL,uBAAuB,CAAC;AAAA,IACxB,wBAAwB,CAAC;AAAA,EAC3B;AACF;AAeO,SAAS,wBACd,OACA,QACG;AACH,QAAMC,YAAW,wBAAwB;AACzC,QAAM,WAAW,UAAU,OACvBA,UAAS,IAAI,KAAK,GAAG,YAAY,2BAA2B,IAC5DA,UAAS,IAAI,MAAM,GAAG,YAAY,2BAA2B;AACjE,EAAAA,UAAS,IAAI,OAAO,EAAE,SAAS,CAAC;AAChC,MAAI,UAAU,QAAQ,CAACA,UAAS,IAAI,MAAM,EAAG,CAAAA,UAAS,IAAI,QAAQ,EAAE,SAAS,CAAC;AAC9E,SAAO;AACT;AAyRA,SAAS,oBACP,SACA,aACA,YAC8B;AAC9B,QAAM,eAAgB,QAAwC,6BAA6B;AAC3F,MAAI,gBAAgB,MAAM;AACxB,WAAO,aAAa;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ,KAAK,aAAa,UAAU;AAC7C;AAEA,SAAS,kBAAqB,OAAiC;AAC7D,OAAK,OAAO,UAAU,YAAY,OAAO,UAAU,eAAe,SAAS,MAAM;AAC/E,UAAM,eACJ,MACA,6BAA6B;AAC/B,QAAI,gBAAgB,MAAM;AACxB,aAAO,aAAa;AAAA,QAClB;AAAA,QACA,CAAC,aAAa;AAAA,QACd,CAAC,UAAU;AACT,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ,QAAQ,KAAK;AAC9B;AAEA,eAAe,yBACb,OACc;AACd,QAAM,WAAW,MAAM,kBAAkB,KAAK;AAC9C,SAAO,mBAAmB,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC,CAAC;AAChF;AAEA,SAAS,qBAAwB,YAAoC;AACnE,SAAO,uBAAuB,GAAG,iBAAiB,UAAU,KAAK;AACnE;AAEA,SAAS,4BAA+B,UAAsB;AAC5D,QAAM,SAAS;AAGf,SAAO,oCAAoC,KACxC,OAAO,oCAAoC,KAAK,KAAK;AACxD,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,UAAM,aAAa,OAAO,oCAAoC,KAAK,KAAK;AACxE,QAAI,cAAc,EAAG,QAAO,OAAO,oCAAoC;AAAA,QAClE,QAAO,oCAAoC,IAAI;AAAA,EACtD;AACF;AASA,SAAS,mBACP,QACuB;AACvB,SAAO,4BAA4B,MAAM,QAAQ,IAAI,MAAM,CAAC;AAC9D;AAEA,SAAS,oBACP,QACqB;AACrB,SAAO,4BAA4B,MAAM,QAAQ,KAAK,MAAM,CAAC;AAC/D;AAgUA,SAAS,iBAAiB,SAA6F;AACrH,oBAAkB,QAAQ,GAAG;AAC7B,MAAI,QAAQ,WAAW,QAAQ,CAAC,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAC9D,UAAM,IAAI,cAAc,+CAA+C;AAAA,EACzE;AACA,QAAM,oBAAoB,QAAQ,WAAW,OACzC,SACA,QAAQ,QAAQ,OAAO;AAC3B,QAAM,SAAoC;AAAA,IACxC,aAAa,QAAQ,eAAe;AAAA,IACpC,KAAK,QAAQ,OAAO;AAAA,IACpB,QAAQ,QAAQ,UAAU;AAAA,IAC1B,eAAe,QAAQ,iBAAiB;AAAA,IACxC,KAAK,MAAM,QAAQ,QAAQ,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,QAAQ,OAAO;AAAA,IACpE,SAAS,QAAQ,WAAW;AAAA,IAC5B,OAAO,QAAQ;AAAA,IACf,SAAS,CAAC,GAAI,QAAQ,WAAW,CAAC,CAAE;AAAA,IACpC,SAAS;AAAA,IACT,QAAQ,QAAQ;AAAA,IAChB,gBAAgB,QAAQ;AAAA,IACxB,eAAe,QAAQ;AAAA,IACvB,eAAe,QAAQ;AAAA,EACzB;AACA,MAAI,CAAC,OAAO,SAAS,OAAO,GAAG,KAAK,OAAO,OAAO,EAAG,OAAM,IAAI,cAAc,+BAA+B;AAC5G,MAAI,CAAC,OAAO,SAAS,OAAO,MAAM,KAAK,OAAO,UAAU,EAAG,OAAM,IAAI,cAAc,kCAAkC;AACrH,MAAI,CAAC,OAAO,SAAS,OAAO,aAAa,KAAK,OAAO,iBAAiB,EAAG,OAAM,IAAI,cAAc,yCAAyC;AAC1I,MAAI,CAAC,OAAO,UAAU,OAAO,OAAO,KAAK,OAAO,WAAW,KAAK,OAAO,UAAU,OAAQ;AACvF,UAAM,IAAI,cAAc,wDAAwD;AAAA,EAClF;AACA,aAAW,CAAC,OAAO,KAAK,KAAK;AAAA,IAC3B,CAAC,kBAAkB,OAAO,cAAc;AAAA,IACxC,CAAC,iBAAiB,OAAO,aAAa;AAAA,IACtC,CAAC,iBAAiB,OAAO,aAAa;AAAA,EACxC,GAAY;AACV,QAAI,SAAS,SAAS,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAC5D,YAAM,IAAI,cAAc,GAAG,KAAK,iCAAiC;AAAA,IACnE;AAAA,EACF;AACA,MAAI,OAAO,iBAAiB,QAAQ,OAAO,iBAAiB,QAAQ,OAAO,gBAAgB,OAAO,eAAe;AAC/G,UAAM,IAAI,cAAc,2CAA2C;AAAA,EACrE;AACA,MAAI,OAAO,kBAAkB,QAAQ,OAAO,iBAAiB,QAAQ,OAAO,iBAAiB,OAAO,eAAe;AACjH,UAAM,IAAI,cAAc,4CAA4C;AAAA,EACtE;AACA,MAAI,OAAO,UAAU,QAAQ,CAAC,CAAC,aAAa,WAAW,EAAE,SAAS,OAAO,MAAM,GAAG;AAChF,UAAM,IAAI,cAAc,uBAAuB,OAAO,MAAM,GAAG;AAAA,EACjE;AACA,MAAI,OAAO,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,YAAY,OAAO,WAAW,CAAC,GAAG;AACtF,UAAM,IAAI,cAAc,wCAAwC;AAAA,EAClE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAsB;AAC/C,MAAI,SAAS,KAAM;AACnB,QAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,aAAW,WAAW,QAAQ;AAC5B,QAAI,OAAO,YAAY,UAAU;AAC/B,YAAM,IAAI,cAAc,mDAAmD;AAAA,IAC7E;AACA,UAAM,CAAC,OAAO,WAAW,GAAG,KAAK,IAAI,QAAQ,MAAM,GAAG;AACtD,UAAM,QAAQ,aAAa,OAAO,IAAI,OAAO,SAAS;AACtD,QACE,CAAC,SACE,MAAM,SAAS,KACf,CAAC,OAAO,UAAU,KAAK,KACvB,SAAS,KACR,aAAa,QAAQ,OAAO,KAAK,MAAM,WAC3C;AACA,YAAM,IAAI,cAAc,wBAAwB,OAAO,GAAG;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,YAAkC,UAAyC;AACpG,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,MAAI,KAAK,SAAS,WAAW,WAAW,QAAQ;AAC9C,UAAM,IAAI,cAAc,GAAG,WAAW,IAAI,qBAAqB,WAAW,WAAW,MAAM,wBAAwB,KAAK,MAAM,EAAE;AAAA,EAClI;AACA,aAAW,WAAW,QAAQ,CAACC,YAAW,UAAU;AAClD,QAAI,SAAS,KAAK,UAAU,KAAK,KAAK,MAAM,QAAW;AACrD,UAAIA,WAAU,WAAY,MAAK,KAAK,IAAIA,WAAU;AAAA,eACzCA,WAAU,SAAU,OAAM,IAAI,cAAc,GAAG,WAAW,IAAI,yBAAyBA,WAAU,IAAI,GAAG;AACjH;AAAA,IACF;AACA,uBAAmBA,WAAU,QAAQ,KAAK,KAAK,GAAG,GAAG,WAAW,IAAI,IAAIA,WAAU,IAAI,EAAE;AAAA,EAC1F,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,eACpB,YACA,cACY;AACZ,QAAM,SAAS,MAAM,qBAAwB,YAAY,YAAY;AACrE,MAAI,WAAW,MAAM,GAAG;AACtB,UAAM,UAAU,uBAAuB;AACvC,QAAI,WAAW,KAAM,QAAO,eAAkB,OAAO,YAAY,OAAO,IAAI;AAC5E,WAAO,QAAQ,OAAU,OAAO,YAAY,OAAO,IAAI;AAAA,EACzD;AACA,SAAO;AACT;AAGA,eAAsB,qBACpB,YACA,cAC0B;AAC1B,QAAM,OAAO,kBAAkB,YAAY,YAAY;AACvD,QAAM,SAAS,WAAW,QAAQ,GAAG,IAAI;AACzC,MAAI,UAAU,QAAQ,OAAQ,OAAgC,SAAS,YAAY;AACjF,UAAM,IAAI,cAAc,uBAAuB,WAAW,IAAI,sCAAsC;AAAA,EACtG;AACA,QAAM,SAAS,MAAM;AACrB,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,EACT;AACA,qBAAmB,WAAW,SAAS,QAAQ,GAAG,WAAW,IAAI,eAAe;AAChF,SAAO;AACT;AAEO,SAAS,WAAW,OAA4C;AACrE,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,eAAe,MAAM,QACjC,UAAU,SAAS,0BACnB,OAAO,UAAU,eAAe,YAChC,UAAU,cAAc,QACxB,MAAM,QAAQ,UAAU,IAAI;AACnC;AAEA,SAAS,yBACP,YACkC;AAClC,QAAM,YAAY,IAAI,SAAgC;AACpD,UAAM,UAAU,uBAAuB;AACvC,WAAO,WAAW,OACd,eAAuB,YAAY,IAAI,IACvC,QAAQ,OAAe,YAAY,IAAI;AAAA,EAC7C;AACA,SAAO,iBAAiB,UAAU;AAAA,IAChC,YAAY,EAAE,OAAO,YAAY,YAAY,KAAK;AAAA,IAClD,QAAQ,EAAE,OAAO,IAAI,SAAe,IAAI,eAAuB,YAAY,IAAI,EAAE;AAAA,IACjF,KAAK;AAAA,MACH,OAAO,CAAC,UAAsC;AAK5C,cAAM,cAAc,YAAY;AAC9B,gBAAM,gBAAgB,MAAM,yBAAyB,KAAK;AAC1D,iBAAO;AAAA,YACL,cAAc;AAAA,cAAI,CAAC,SACjB,kBAAkB,SAAS,GAAI,CAAC,IAAI,CAAqB,CAAC;AAAA,YAC5D;AAAA,UACF;AAAA,QACF,GAAG;AACH,eAAO,qBAAqB,UAAU;AAAA,MACxC;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO,CACL,UACG,kBACA;AACH,cAAM,cAAc,YAAY;AAC9B,cAAI,SAAS,MAAM,yBAAyB,KAAK;AACjD,gBAAM,aAAa,cAAc,SAAS;AAC1C,cAAI,UAAmB,cAAc,CAAC;AACtC,gBAAM,UAAU,uBAAuB;AACvC,cAAI,WAAW,MAAM;AACnB,mBAAO;AAAA,cACL,QAAQ,OAAe,YAAY,QAAQ,SAAS,UAAU;AAAA,YAChE;AAAA,UACF;AACA,cAAI,CAAC,YAAY;AACf,gBAAI,OAAO,WAAW,GAAG;AACvB,oBAAM,IAAI,cAAc,gDAAgD;AAAA,YAC1E;AACA,aAAC,SAAS,GAAG,MAAM,IAAI;AAAA,UACzB;AACA,cAAI,cAAc;AAClB,qBAAW,QAAQ,QAAQ;AACzB,0BAAc,MAAM;AAAA,cAClB,SAAS,GAAI,CAAC,aAAa,IAAI,CAAqB;AAAA,YACtD;AAAA,UACF;AACA,iBAAO;AAAA,QACT,GAAG;AACH,eAAO,qBAAqB,UAAU;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO,IAAI,UAAkC;AAAA,QAC3C,CAAC,eAAe,GAAG;AAAA,QACnB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,SAIP,SACA,SACA,aACgD;AAChD,QAAM,OAAO,QAAQ,QAAQ,QAAQ;AACrC,MAAI,CAAC,KAAM,OAAM,IAAI,cAAc,wDAAwD;AAC3F,MAAI,CAAC,qBAAqB,KAAK,IAAI,EAAG,OAAM,IAAI,cAAc,qCAAqC,IAAI,GAAG;AAC1G,MAAI;AACJ,MAAI,aAAa;AACf,UAAM,aAAa;AACnB,yBAAqB,QAAQ,WAAW,sBAAsB,EAAE,YAAY,EAAE,CAAC;AAC/E,QACE,WAAW,SAAS,SAElB,CAAC,MAAM,QAAQ,WAAW,KAAK,KAC5B,WAAW,MAAM;AAAA,MAAK,CAAC,eACxB,eAAe;AAAA,IACjB,IAEF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,OAAO,WAAW;AACxB,UAAM,gBAAgB,QAAQ,QAAQ,OAAO,SAAS,WAClD,SACA,OAAO,eAAe,IAAI;AAC9B,QACE,QAAQ,SAEN,OAAO,SAAS,YACb,MAAM,QAAQ,IAAI,KACjB,kBAAkB,OAAO,aAAa,kBAAkB,QACzD,QAAQ,QAAQ,IAAI,EAAE;AAAA,MAAK,CAAC,QAC7B,OAAO,QAAQ,YACZ,CAAC,OACD,OAAQ,KAAsC,GAAG,MAAM;AAAA,IAC5D,IAEF;AACA,YAAM,IAAI,cAAc,kEAAkE;AAAA,IAC5F;AAAA,EACF;AACA,MAAI,CAAC,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACtC,UAAM,IAAI,cAAc,qDAAqD;AAAA,EAC/E;AACA,MACE,OAAO,QAAQ,YAAY,YACxB,QAAQ,WAAW,QACnB,OAAO,QAAQ,QAAQ,eAAe,YACtC,QAAQ,QAAQ,cAAc,MACjC;AACA,UAAM,IAAI,cAAc,kDAAkD;AAAA,EAC5E;AACA,QAAM,iBAAiB,oBAAI,IAAY;AACvC,aAAWA,cAAa,QAAQ,YAAY;AAC1C,QACE,OAAOA,eAAc,YAClBA,cAAa,QACb,OAAOA,WAAU,SAAS,YAC1B,OAAOA,WAAU,WAAW,YAC5BA,WAAU,UAAU,QACpB,OAAOA,WAAU,OAAO,eAAe,YACvCA,WAAU,OAAO,cAAc,QAC/B,OAAOA,WAAU,aAAa,aAC9B,OAAOA,WAAU,eAAe,WACnC;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,eAAe,IAAIA,WAAU,IAAI,GAAG;AACtC,YAAM,IAAI,cAAc,wCAAwCA,WAAU,IAAI,GAAG;AAAA,IACnF;AACA,mBAAe,IAAIA,WAAU,IAAI;AAAA,EACnC;AACA,QAAM,oBAAoB,QAAQ,WAAW;AAAA,IAC3C,CAACA,eAAcA,WAAU,OAAO;AAAA,EAClC;AACA,MAAI,qBAAqB,QAAQ,CAAC,aAAa;AAC7C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,MAAI,QAAQ,QAAQ,WAAW;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AACA,QAAM,aAAmC;AAAA,IACvC;AAAA,IACA;AAAA,IACA,YAAY,CAAC,GAAG,QAAQ,UAAU;AAAA,IAClC,SAAS,QAAQ;AAAA,IACjB,SAAS,iBAAiB,OAAkE;AAAA,IAC5F,aAAa,cACT;AAAA,MACE,MAAM,EAAE,GAAK,QAA0C,QAAQ,CAAC,EAAG;AAAA,MACnE,SAAS;AAAA,MACT,OAAO,CAAC,GAAK,QAA0C,SAAS,CAAC,CAAE;AAAA,MACnE,aAAS,+BAAW,EAAE,WAAW,KAAK,EAAE;AAAA,IAC1C,IACA;AAAA,EACN;AACA,qBAAmB,YAAY,WAAW;AAC1C,SAAO,yBAAyB,UAAU;AAC5C;AAKA,SAAS,mBACP,OACkE;AAClE,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,gBAAgB,OAAO,UAAU,eAAe,KAAK,OAAO,YAAY;AAC9E,QAAM,aAAa,OAAO,UAAU,eAAe,KAAK,OAAO,SAAS;AACxE,MAAI,kBAAkB,YAAY;AAChC,UAAM,IAAI,cAAc,mEAAmE;AAAA,EAC7F;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,QAAgB,OAAuB;AACpE,QAAM,QAAQ,OAAO,KAAK;AAC1B,MAAI,UAAU;AACd,WAAS,QAAQ,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAC7D,UAAM,YAAY,OAAO,KAAK;AAC9B,QAAI,SAAS;AACX,gBAAU;AAAA,IACZ,WAAW,cAAc,MAAM;AAC7B,gBAAU;AAAA,IACZ,WAAW,cAAc,OAAO;AAC9B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,OAAO,SAAS;AACzB;AAEA,SAAS,sBAAsB,QAAgB,OAAmC;AAChF,MAAI,OAAO,KAAK,MAAM,IAAK,QAAO;AAClC,MAAI,OAAO,QAAQ,CAAC,MAAM,KAAK;AAC7B,UAAM,UAAU,OAAO,QAAQ,MAAM,QAAQ,CAAC;AAC9C,WAAO,UAAU,IAAI,OAAO,SAAS,IAAI;AAAA,EAC3C;AACA,MAAI,OAAO,QAAQ,CAAC,MAAM,KAAK;AAC7B,UAAM,MAAM,OAAO,QAAQ,MAAM,QAAQ,CAAC;AAC1C,WAAO,MAAM,IAAI,OAAO,SAAS,IAAI,MAAM;AAAA,EAC7C;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAAgB,OAAuB;AACnE,MAAI,QAAQ;AACZ,SAAO,QAAQ,OAAO,QAAQ;AAC5B,WAAO,QAAQ,OAAO,UAAU,KAAK,KAAK,OAAO,KAAK,CAAC,EAAG,UAAS;AACnE,UAAM,aAAa,sBAAsB,QAAQ,KAAK;AACtD,QAAI,cAAc,KAAM;AACxB,YAAQ,aAAa;AAAA,EACvB;AACA,SAAO;AACT;AAEA,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,qBAAqB,QAAgB,OAAwB;AACpE,MAAI,oBAAoB;AACxB,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG;AAC7C,UAAM,YAAY,OAAO,KAAK;AAC9B,QAAI,KAAK,KAAK,SAAS,EAAG;AAC1B,QAAI,cAAc,OAAQ,cAAc,OAAO,cAAc,KAAK;AAChE,cAAQ,sBAAsB,QAAQ,KAAK;AAC3C,0BAAoB;AACpB;AAAA,IACF;AACA,UAAM,aAAa,sBAAsB,QAAQ,KAAK;AACtD,QAAI,cAAc,MAAM;AACtB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,aAAa,KAAK,SAAS,GAAG;AAChC,UAAI,WAAW,QAAQ;AACvB,aAAO,WAAW,SAAS,gBAAgB,KAAK,OAAO,QAAQ,CAAC,EAAG,aAAY;AAC/E,0BAAoB,sBAAsB,IAAI,OAAO,MAAM,OAAO,QAAQ,CAAC;AAC3E,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,QAAI,QAAQ,KAAK,SAAS,KAAM,cAAc,OAAO,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC,GAAI;AACrF,aAAO,QAAQ,IAAI,SAAS,gBAAgB,KAAK,OAAO,QAAQ,CAAC,CAAC,EAAG,UAAS;AAC9E,0BAAoB;AACpB;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACrB,UAAI,mBAAmB;AACrB,gBAAQ,oBAAoB,QAAQ,KAAK;AACzC,4BAAoB;AAAA,MACtB,OAAO;AACL,YAAI,OAAO,QAAQ,CAAC,MAAM,IAAK,UAAS;AACxC,4BAAoB;AAAA,MACtB;AACA;AAAA,IACF;AACA,QAAI,cAAc,OAAO,cAAc,OAAO,cAAc,KAAK;AAC/D,0BAAoB;AACpB;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACrB,UAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,MAAM,OAAO;AAC5C,iBAAS;AACT,4BAAoB;AAAA,MACtB,OAAO;AACL,4BAAoB;AAAA,MACtB;AACA;AAAA,IACF;AACA,SAAK,cAAc,OAAO,cAAc,QAAQ,OAAO,QAAQ,CAAC,MAAM,WAAW;AAC/E,eAAS;AACT;AAAA,IACF;AACA,wBAAoB;AAAA,EACtB;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,QAAgB,OAAuB;AAClE,MAAI,UAAU;AACd,MAAI,iBAAiB;AACrB,WAAS,QAAQ,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAC7D,UAAM,YAAY,OAAO,KAAK;AAC9B,QAAI,SAAS;AACX,gBAAU;AAAA,IACZ,WAAW,cAAc,MAAM;AAC7B,gBAAU;AAAA,IACZ,WAAW,cAAc,KAAK;AAC5B,uBAAiB;AAAA,IACnB,WAAW,cAAc,KAAK;AAC5B,uBAAiB;AAAA,IACnB,WAAW,cAAc,OAAO,CAAC,gBAAgB;AAC/C,aAAO,QAAQ,IAAI,OAAO,UAAU,WAAW,KAAK,OAAO,QAAQ,CAAC,CAAC,EAAG,UAAS;AACjF,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,OAAO,SAAS;AACzB;AAEA,SAAS,oBAAoB,QAAgB,OAAmC;AAC9E,QAAM,YAAY,OAAO,KAAK;AAC9B,MAAI,cAAc,OAAQ,cAAc,OAAO,cAAc,KAAK;AAChE,WAAO,sBAAsB,QAAQ,KAAK;AAAA,EAC5C;AACA,QAAM,aAAa,sBAAsB,QAAQ,KAAK;AACtD,MAAI,cAAc,KAAM,QAAO;AAC/B,MAAI,cAAc,OAAO,qBAAqB,QAAQ,KAAK,GAAG;AAC5D,WAAO,oBAAoB,QAAQ,KAAK;AAAA,EAC1C;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAwB;AACjD,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG;AACzD,UAAM,YAAY,OAAO,KAAK;AAC9B,UAAM,WAAW,oBAAoB,QAAQ,KAAK;AAClD,QAAI,YAAY,MAAM;AACpB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK,gBAAe;AAAA,aAC7B,cAAc,IAAK,gBAAe;AAAA,aAClC,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,KAAK;AAG1B,UAAI,gBAAgB,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AAChE,gBAAU;AAAA,IACZ,WACS,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,OAAO,OAAO,QAAQ,CAAC,MAAM,OAAO,gBAAgB,KAAK,aAAa,KAAK,WAAW,GAAG;AAC9G,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,QAAgB,MAAsB;AACpE,MAAI,QAAQ;AACZ,WAAS,QAAQ,MAAM,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACxD,UAAM,YAAY,OAAO,KAAK;AAC9B,UAAM,WAAW,oBAAoB,QAAQ,KAAK;AAClD,QAAI,YAAY,MAAM;AACpB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK,UAAS;AAAA,aACvB,cAAc,OAAO,EAAE,UAAU,EAAG,QAAO;AAAA,EACtD;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,QAAwB;AACtD,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACrD,UAAM,WAAW,oBAAoB,QAAQ,KAAK;AAClD,QAAI,YAAY,MAAM;AACpB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,OAAO,KAAK,MAAM,IAAK,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,QAA0B;AACzD,MAAI,OAAO,KAAK,MAAM,GAAI,QAAO,CAAC;AAClC,QAAM,SAAmB,CAAC;AAC1B,MAAI,QAAQ;AACZ,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACrD,UAAM,YAAY,OAAO,KAAK;AAC9B,UAAM,WAAW,oBAAoB,QAAQ,KAAK;AAClD,QAAI,YAAY,MAAM;AACpB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK,gBAAe;AAAA,aAC7B,cAAc,IAAK,gBAAe;AAAA,aAClC,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,OAAO,gBAAgB,KAAK,aAAa,KAAK,WAAW,GAAG;AACjF,aAAO,KAAK,OAAO,MAAM,OAAO,KAAK,EAAE,KAAK,CAAC;AAC7C,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,MAAM,KAAK,EAAE,KAAK;AACvC,MAAI,UAAU,GAAI,QAAO,KAAK,KAAK;AACnC,SAAO;AACT;AAEA,SAAS,mBAAmB,QAAyB;AACnD,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACrD,UAAM,YAAY,OAAO,KAAK;AAC9B,UAAM,WAAW,oBAAoB,QAAQ,KAAK;AAClD,QAAI,YAAY,MAAM;AACpB,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK,gBAAe;AAAA,aAC7B,cAAc,IAAK,gBAAe;AAAA,aAClC,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,OAAO,gBAAgB,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AAAA,EAC5F;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,SAAmC;AACpE,QAAM,SAAS,SAAS,UAAU,SAAS,KAAK,OAAO,EAAE,KAAK;AAC9D,MAAI,OAAO,SAAS,eAAe,GAAG;AACpC,UAAM,IAAI,cAAc,mGAAmG;AAAA,EAC7H;AACA,QAAM,QAAQ,kBAAkB,MAAM;AACtC,MAAI,SAAS,GAAG;AACd,QAAI,SAAS,OAAO,MAAM,GAAG,KAAK,EAAE,KAAK;AACzC,QACE,OAAO,WAAW,OAAO,KACtB,CAAC,gBAAgB,KAAK,OAAO,QAAQ,MAAM,KAAK,EAAE,GACrD;AACA,eAAS,OAAO,MAAM,qBAAqB,QAAQ,QAAQ,MAAM,CAAC;AAAA,IACpE;AACA,QAAI,CAAC,OAAO,WAAW,GAAG,EAAG,QAAO,CAAC,MAAM;AAC3C,UAAMC,SAAQ,uBAAuB,QAAQ,CAAC;AAC9C,QAAIA,SAAQ,EAAG,OAAM,IAAI,cAAc,+DAA+D;AACtG,WAAO,wBAAwB,OAAO,MAAM,GAAGA,MAAK,CAAC;AAAA,EACvD;AACA,QAAM,OAAO,uBAAuB,MAAM;AAC1C,QAAM,QAAQ,OAAO,IAAI,KAAK,uBAAuB,QAAQ,IAAI;AACjE,MAAI,OAAO,KAAK,QAAQ,GAAG;AACzB,UAAM,IAAI,cAAc,+DAA+D;AAAA,EACzF;AACA,SAAO,wBAAwB,OAAO,MAAM,OAAO,GAAG,KAAK,CAAC;AAC9D;AAEA,SAAS,uBAAuB,SAAwD;AACtF,QAAM,aAAa,0BAA0B,OAAO;AACpD,MAAI,WAAW,KAAK,CAACD,eAAc;AACjC,QAAI,QAAQ;AACZ,WAAO,QAAQA,WAAU,QAAQ;AAC/B,aAAO,QAAQA,WAAU,UAAU,KAAK,KAAKA,WAAU,KAAK,CAAC,EAAG,UAAS;AACzE,YAAM,aAAa,sBAAsBA,YAAW,KAAK;AACzD,UAAI,cAAc,KAAM;AACxB,cAAQ,aAAa;AAAA,IACvB;AACA,WAAOA,WAAU,MAAM,KAAK,EAAE,WAAW,KAAK;AAAA,EAChD,CAAC,GAAG;AACF,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO,WAAW,IAAI,CAACA,YAAW,UAAU,OAAO;AAAA,IACjD,WAAW,WAAW,IAAI,UAAU,MAAM,KAAK;AAAA,IAC/C,OAAO,KAAK;AAAA,IACZ,mBAAmBA,UAAS,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,EACxD,CAAC;AACH;AAEA,SAAS,qBACP,MACA,SACA,SACA,aACiD;AACjD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH;AAAA,MACA,YAAY,uBAAuB,OAAO;AAAA,MAC1C,SAAS,OAAO,KAAK;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACF;AAkBO,SAAS,iBACd,eACA,kBACA,UAAiC,CAAC,GACe;AACjD,MAAI,OAAO,kBAAkB,UAAU;AACrC,QAAI,OAAO,qBAAqB,YAAY;AAC1C,YAAM,IAAI,cAAc,2DAA2D;AAAA,IACrF;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,kBAAkB,YAAY;AACvC,UAAM,IAAI,cAAc,4CAA4C;AAAA,EACtE;AACA,QAAM,UAAU;AAChB,MAAI,OAAO,qBAAqB,YAAY;AAC1C,UAAM,IAAI,cAAc,wDAAwD;AAAA,EAClF;AACA,MAAI,mBAAmB,gBAAgB,GAAG;AACxC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAiBO,SAAS,oBACd,eACA,kBACA,UAAoC,CAAC,GACY;AACjD,MAAI,OAAO,kBAAkB,UAAU;AACrC,QAAI,OAAO,qBAAqB,YAAY;AAC1C,YAAM,IAAI,cAAc,8DAA8D;AAAA,IACxF;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,kBAAkB,YAAY;AACvC,UAAM,IAAI,cAAc,+CAA+C;AAAA,EACzE;AACA,QAAM,UAAU;AAChB,MAAI,OAAO,qBAAqB,YAAY;AAC1C,UAAM,IAAI,cAAc,2DAA2D;AAAA,EACrF;AACA,MAAI,mBAAmB,gBAAgB,GAAG;AACxC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;;;AMr6DA;AAKA,IAAM,gBAAgB,uBAAO,IAAI,oCAAoC;AAG9D,IAAM,UAAN,MAAM,SAAuD;AAAA,EAClE,CAAU,aAAa,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,UAAS;AACpB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,UAAU,KAAK;AAAA,EACxB;AAAA,EAEA,YAAY,UAAuB,CAAC,GAAG;AACrC,UAAM,UAAU,mBAAmB,WAC/B,CAAC,GAAG,OAAO,IACX,OAAO,YAAY,OAAO,OAAO,IAC/B,CAAC,GAAG,OAA8C,IAClD,OAAO,QAAQ,OAAO;AAC5B,UAAM,SAAS,oBAAI,IAAsB;AACzC,SAAK,SAAS,OAAO,OAAO,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AACzD,UAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,cAAM,IAAI,UAAU,yCAAyC;AAAA,MAC/D;AACA,YAAM,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,CAAU;AACjD,YAAM,MAAM,KAAK,YAAY;AAC7B,aAAO,IAAI,KAAK,CAAC,GAAI,OAAO,IAAI,GAAG,KAAK,CAAC,GAAI,KAAK,CAAC;AACnD,aAAO;AAAA,IACT,CAAC,CAAC;AACF,SAAK,UAAU;AACf,WAAO,OAAO,IAAI;AAAA,EACpB;AAAA,EAEA,IAAI,MAAkC;AACpC,WAAO,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC,GAAG,GAAG,EAAE;AAAA,EACpD;AAAA,EAEA,OAAO,MAAiC;AACtC,WAAO,OAAO,OAAO,CAAC,GAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,IAAI,MAAuB;AACzB,WAAO,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC;AAAA,EAC5C;AAAA,EAEA,UAAuD;AACrD,WAAO,KAAK,OAAO,OAAO,QAAQ,EAAE;AAAA,EACtC;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAiD;AAC/D,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAGO,SAAS,UAAU,OAAkC;AAC1D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,aAAa,MAAM,QAC/B,OAAO,UAAU,QAAQ,cACzB,OAAO,UAAU,WAAW,cAC5B,OAAO,UAAU,QAAQ,cACzB,OAAO,UAAU,OAAO,QAAQ,MAAM;AAC7C;;;APnDA;AACA;;;AQpBA;AAAA,IAAAE,2BAAkC;;;ACAlC;AAAA,IAAAC,sBAA2B;AAK3B,IAAM,cAAc,IAAI,YAAY;AACpC,IAAM,cAAc,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AAQ5D,SAAS,gBAAgB,OAAgBC,OAAc,MAAyB;AAC9E,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW;AAC/E,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,OAAO,SAAS,KAAK,EAAG,OAAM,IAAI,mBAAmB,GAAGA,KAAI,+BAA+B;AAChG;AAAA,EACF;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,mBAAmB,GAAGA,KAAI,yBAAyB,OAAO,KAAK,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,KAAK,GAAG;AACjB,UAAM,IAAI,mBAAmB,GAAGA,KAAI,mEAAmE;AAAA,EACzG;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,GAAGA,KAAI;AAAA,IACT;AAAA,EACF;AACA,MAAI,KAAK,IAAI,KAAK,EAAG,OAAM,IAAI,mBAAmB,GAAGA,KAAI,mBAAmB;AAC5E,MAAI,OAAO,eAAe,KAAK,MAAM,OAAO,aAAa,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC9E,UAAM,IAAI,mBAAmB,GAAGA,KAAI,yBAAyB,MAAM,aAAa,QAAQ,QAAQ,EAAE;AAAA,EACpG;AACA,OAAK,IAAI,KAAK;AACd,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,KAAK,GAAG;AACvD,cAAM,IAAI,mBAAmB,GAAGA,KAAI,2CAA2C,KAAK,EAAE;AAAA,MACxF;AACA,sBAAgB,MAAM,KAAK,GAAG,GAAGA,KAAI,IAAI,KAAK,KAAK,IAAI;AAAA,IACzD;AAAA,EACF,OAAO;AACL,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,sBAAgB,MAAM,GAAGA,KAAI,IAAI,GAAG,IAAI,IAAI;AAAA,IAC9C;AAAA,EACF;AACA,OAAK,OAAO,KAAK;AACnB;AAEO,SAAS,eAAe,OAAiC;AAC9D,MAAI,OAAO,KAAK,GAAG;AACjB,WAAO,EAAE,MAAM,MAAM,SAAS,aAAa,MAAM,aAAa,UAAU,MAAM;AAAA,EAChF;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM,eAAe;AAAA,MAClC,UAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI;AACF,oBAAgB,OAAO,SAAS,oBAAI,IAAI,CAAC;AACzC,WAAO;AAAA,MACL,MAAM,YAAY,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,MAC9C,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,mBAAoB,OAAM;AAC/C,UAAM,IAAI,mBAAmB,kCAAkC,EAAE,OAAO,MAAM,CAAC;AAAA,EACjF;AACF;AAEO,SAAS,gBAAgB,MAA2B;AACzD,MAAI;AACF,WAAO,KAAK,MAAM,YAAY,OAAO,IAAI,CAAC;AAAA,EAC5C,SAAS,OAAO;AACd,UAAM,IAAI,qBAAqB,oCAAoC,EAAE,OAAO,MAAM,CAAC;AAAA,EACrF;AACF;AAEO,SAAS,cAAiB,OAAa;AAC5C,QAAM,aAAa,eAAe,KAAK;AACvC,MAAI,WAAW,aAAa,OAAQ,QAAO;AAC3C,SAAO,gBAAgB,WAAW,IAAI;AACxC;;;AD/DO,SAAS,wBAAwB,KAAqC;AAC3E,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI,cAAc,oCAAoC,OAAO,GAAG,CAAC,EAAE;AAAA,EAC3E;AACF;AAEO,SAAS,2BAA2B,OAA4B;AACrE,QAAM,aAAa,eAAe,KAAK;AACvC,MAAI,WAAW,aAAa,QAAQ;AAClC,UAAM,IAAI,cAAc,0CAA0C;AAAA,EACpE;AACA,SAAO,WAAW;AACpB;AAEO,SAAS,sBAAsB,MAAe,OAAsB;AACzE,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,IAAI,cAAc,uCAAuC,OAAO,IAAI,CAAC,EAAE;AAAA,EAC/E;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACzD,UAAM,IAAI,cAAc,sCAAsC,OAAO,KAAK,CAAC,EAAE;AAAA,EAC/E;AACA,MAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAChC,UAAM,IAAI,cAAc,0CAA0C,OAAO,KAAK,CAAC,EAAE;AAAA,EACnF;AACF;AAEO,SAAS,oBAAoB,MAAe,OAAsB;AACvE,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,IAAI,cAAc,qCAAqC,OAAO,IAAI,CAAC,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACxD,UAAM,IAAI,cAAc,6CAA6C,OAAO,KAAK,CAAC,EAAE;AAAA,EACtF;AACF;AAEA,SAAS,cAAc,OAAuD;AAC5E,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC/E,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,SAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAEO,SAAS,uBACd,SACA,OACA,SACM;AACN,MAAI,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,KAAK,UAAU,GAAG;AACpF,UAAM,IAAI,cAAc,gEAAgE;AAAA,EAC1F;AACA,MAAI,WAAW,QAAQ,CAAC,cAAc,OAAO,GAAG;AAC9C,UAAM,IAAI,cAAc,oCAAoC;AAAA,EAC9D;AACA,MAAI,SAAS,WAAW,QAAQ,OAAO,QAAQ,YAAY,UAAU;AACnE,UAAM,IAAI,cAAc,mCAAmC;AAAA,EAC7D;AACA,MAAI,SAAS,cAAc,MAAM;AAC/B,QAAI,CAAC,cAAc,QAAQ,UAAU,GAAG;AACtC,YAAM,IAAI,cAAc,iEAAiE;AAAA,IAC3F;AACA,eAAW,OAAO,QAAQ,QAAQ,QAAQ,UAAU,GAAG;AACrD,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,IAAI,cAAc,8DAA8D;AAAA,MACxF;AACA,YAAM,QAAQ,QAAQ,WAAW,GAAG;AACpC,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,IAAI,cAAc,8DAA8D;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AACF;AAgBA,IAAM,8BAA8B,uBAAO;AAAA,EACzC;AACF;AAEA,SAAS,wBAAgE;AACvE,QAAM,SAAS;AAGf,SAAO,2BAA2B,MAAM,IAAI,2CAAuC;AACnF,SAAO,OAAO,2BAA2B;AAC3C;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,MAA2B;AAChC,UAAM,UAAU,sBAAsB,EAAE,SAAS;AACjD,QAAI,WAAW,MAAM;AACnB,YAAM,IAAI,cAAc,4EAA4E;AAAA,IACtG;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,sBACd,SACA,UACY;AACZ,SAAO,sBAAsB,EAAE,IAAI,SAAS,QAAQ;AACtD;AAEA,eAAsB,oBACpB,OACA,QACY;AACZ,MAAI,OAAO,QAAS,OAAM,OAAO;AACjC,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK;AAAA,MACxB;AAAA,MACA,IAAI,QAAe,CAAC,UAAU,WAAW;AACvC,kBAAU,MAAM,OAAO,OAAO,MAAM;AACpC,eAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MAC1D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,UAAE;AACA,QAAI,WAAW,KAAM,QAAO,oBAAoB,SAAS,OAAO;AAAA,EAClE;AACF;AAEO,IAAM,uBAAN,MAA0D;AAAA,EAQ/D,YACW,WACT,UAA2D,CAAC,GAC5D;AAFS;AAGT,SAAK,UAAU,IAAI,QAAQ,QAAQ,OAAO;AAC1C,SAAK,SAAS,QAAQ,UAAU,IAAI,gBAAgB,EAAE;AAAA,EACxD;AAAA,EAbS;AAAA,EACA;AAAA,EACQ,SAAS,oBAAI,IAAwB;AAAA,EACrC,WAAW,oBAAI,IAAoB;AAAA,EACnC,SAAS,oBAAI,IAAsB;AAAA,EAC5C;AAAA,EAUC,QAAsB;AAAA,IAC7B,KAAK,OAAO,KAAK,UAAU;AACzB,8BAAwB,GAAG;AAC3B,WAAK,OAAO,IAAI,KAAK,2BAA2B,KAAK,EAAE,MAAM,CAAC;AAAA,IAChE;AAAA,IACA,KAAK,OAAU,KAAa,iBAAqB;AAC/C,8BAAwB,GAAG;AAC3B,YAAM,QAAQ,KAAK,OAAO,IAAI,GAAG;AACjC,aAAO,SAAS,OAAO,eAAe,gBAAgB,KAAK;AAAA,IAC7D;AAAA,EACF;AAAA,EAES,UAA0B;AAAA,IACjC,SAAS,OAAO,MAAM,QAAQ,MAAM;AAClC,4BAAsB,MAAM,KAAK;AACjC,WAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,KAAK;AAAA,IAChE;AAAA,IACA,OAAO,OAAO,MAAM,UAAU;AAC5B,0BAAoB,MAAM,KAAK;AAC/B,YAAM,SAAS,KAAK,OAAO,IAAI,IAAI,KAAK,CAAC;AACzC,aAAO,KAAK,KAAK;AACjB,WAAK,OAAO,IAAI,MAAM,MAAM;AAAA,IAC9B;AAAA,EACF;AAAA,EAES,WAA6B;AAAA,IACpC,QAAQ,OAAO,SAAS,OAAO,YAAY;AACzC,6BAAuB,SAAS,OAAO,OAAO;AAC9C,WAAK,eAAe,EAAE,SAAS,OAAO,QAAQ;AAAA,IAChD;AAAA,EACF;AACF;;;AE5MA;AAAA,IAAAC,sBAA2B;AAwBpB,IAAM,eAAN,MAAsB;AAAA,EAC3B,YACW,IACQ,OACA,eACjB;AAHS;AACQ;AACA;AAAA,EAChB;AAAA,EAEH,SAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,QAAwB;AAC7B,SAAK,cAAc,MAAM;AAAA,EAC3B;AACF;AAEA,SAAS,aAAgB,OAAa;AACpC,MAAI,OAAO,KAAK,GAAG;AACjB,WAAO,IAAI,KAAK,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,WAAW;AAAA,EAClE;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO,IAAI,SAAS,IAAI,WAAW,MAAM,OAAO,GAAG,MAAM,WAAW;AAAA,EACtE;AACA,SAAO,cAAc,KAAK;AAC5B;AAEO,IAAM,eAAN,MAA8C;AAAA,EAC1C;AAAA,EACQ;AAAA,EACA,aAAa,IAAI,gBAAgB;AAAA,EAElD,YAAY,aAAmC,YAAY,aAAS,gCAAW,CAAC,IAAI;AAClF,SAAK,cAAc;AACnB,SAAK,iBAAiB,IAAI,qBAAqB,WAAW;AAAA,MACxD,QAAQ,KAAK,WAAW;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,SAAkB,IAAI,cAAc,6BAA6B,GAAS;AAC/E,QAAI,CAAC,KAAK,WAAW,OAAO,QAAS,MAAK,WAAW,MAAM,MAAM;AAAA,EACnE;AAAA,EAEA,OAAU,YAAkC,MAAsC;AAChF,WAAO,KAAK,QAAW,YAAY,IAAI;AAAA,EACzC;AAAA,EAEA,MAAM,UAAa,QAAuC;AACxD,QAAI,OAAO,eAAe,GAAG;AAC3B,UAAI;AACJ,UAAI;AACF,cAAM;AAAA,UACJ,IAAI,QAAc,CAAC,YAAY;AAC7B,oBAAQ,WAAW,SAAS,OAAO,eAAe,GAAI;AAAA,UACxD,CAAC;AAAA,UACD,KAAK,eAAe;AAAA,QACtB;AAAA,MACF,UAAE;AACA,YAAI,SAAS,KAAM,cAAa,KAAK;AAAA,MACvC;AAAA,IACF;AACA,WAAO,KAAK,QAAW,OAAO,YAAY,OAAO,IAAI;AAAA,EACvD;AAAA,EAEA,MAAM,OACJ,YACA,OACA,SACA,YACY;AACZ,QAAI,cAAc;AAClB,QAAI,gBAAgB;AACpB,QAAI,CAAC,YAAY;AACf,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,IAAI,cAAc,gDAAgD;AAAA,MAC1E;AACA,OAAC,eAAe,GAAG,WAAW,IAAI;AAAA,IACpC;AACA,QAAI,cAAc,aAAa,aAAa;AAC5C,eAAW,QAAQ,aAAa;AAC9B,oBAAc,MAAM,KAAK,QAAW,YAAY,CAAC,aAAa,IAAI,CAAC;AAAA,IACrE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,QAAW,YAAkC,SAAyC;AAClG,UAAM,eAAe,QAAQ,IAAI,YAAY;AAC7C,UAAM,aAAa,WAAW,QAAQ,SAAS,cAC1C,KAAK,YAAY,aAAa,QAAQ,cACtC;AACL,QAAI;AACJ,aAAS,UAAU,GAAG,WAAW,YAAY,WAAW,GAAG;AACzD,YAAM,OAAO,aAAa,IAAI,YAAY;AAC1C,UAAI;AACF,cAAM,QAAQ,MAAM;AAAA,UAAuB;AAAA,UAAM,MAC/C;AAAA,YAAsB,KAAK;AAAA,YAAgB,MACzC;AAAA,cACE,KAAK,YAAY,eAAkB,YAAY,IAAI,GAAG,WAAW,QAAQ,OAAO;AAAA,cAChF,KAAK,WAAW;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AACA,eAAO,aAAa,KAAK;AAAA,MAC3B,SAAS,OAAO;AACd,YAAI,eAAe,KAAK,EAAG,OAAM;AACjC,YAAI,KAAK,WAAW,OAAO,QAAS,OAAM,KAAK,WAAW,OAAO;AACjE,oBAAY;AAAA,MACd;AAAA,IACF;AACA,UAAM,qBAAqB,QACvB,IAAI,cAAc,GAAG,WAAW,IAAI,YAAY,UAAU,OAAO,IAAI,EAAE,OAAO,UAAU,CAAC,IACzF,IAAI,cAAc,GAAG,WAAW,IAAI,SAAS;AAAA,EACnD;AAAA,EAEA,MAAc,YAAe,SAAqB,gBAAoC;AACpF,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,QAAQ,KAAK;AAAA,QACxB;AAAA,QACA,IAAI,QAAe,CAAC,GAAG,WAAW;AAChC,kBAAQ;AAAA,YACN,MAAM,OAAO,IAAI,aAAa,CAAC;AAAA,YAC/B,iBAAiB;AAAA,UACnB;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,UAAE;AACA,UAAI,SAAS,KAAM,cAAa,KAAK;AAAA,IACvC;AAAA,EACF;AACF;AAEA,eAAsB,SACpB,gBACG,MAC4B;AAC/B,MAAI,YAAY,WAAW,eAAe,MAAM;AAC9C,UAAM,IAAI,cAAc,GAAG,YAAY,WAAW,IAAI,kCAAkC;AAAA,EAC1F;AACA,QAAM,UAAU,IAAI,aAAa,YAAY,UAAU;AACvD,QAAM,SAAS,QAAQ,OAAe,YAAY,YAAY,IAAI;AAClE,SAAO,IAAI;AAAA,IACT,QAAQ,eAAe;AAAA,IACvB;AAAA,IACA,CAAC,WAAW,QAAQ,OAAO,MAAM;AAAA,EACnC;AACF;;;ACzKA;;;ACAA;AAAA;;;ACAA;AAyBA,IAAAC,sBAA4B;;;ACzB5B;AAAA,gCAAyB;AACzB,IAAAC,kBAAsC;AACtC,IAAAC,kBAAwB;AACxB,IAAAC,oBAAqB;AACrB,IAAAC,oBAA0B;;;ACJ1B;AAGA,IAAM,eAAe;AACrB,IAAM,mBAAmB;AAMlB,SAAS,YAAYC,OAAsB;AAChD,MAAI,QAAQ;AACZ,MAAI,MAAMA,MAAK;AACf,SAAO,QAAQ,OAAOA,MAAK,WAAW,KAAK,MAAM,GAAM,UAAS;AAChE,SAAO,MAAM,SAASA,MAAK,WAAW,MAAM,CAAC,MAAM,GAAM,QAAO;AAChE,SAAOA,MAAK,MAAM,OAAO,GAAG;AAC9B;AAwDO,SAAS,kBACd,OACA,SACW;AACX,QAAM,OAAO,MAAM,QAAQ;AAC3B,QAAM,SAAS,YAAY,OAAO;AAClC,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,IAAI,KAAK,MAAM;AAAA,IACjD,WAAW,MAAM,OAAO;AAAA,IACxB,MACE,SAAS,eACL,cACA,SAAS,mBACP,YACA;AAAA,IACR,YAAY,SAAS;AAAA,IACrB,MAAM,MAAM,QAAQ;AAAA,IACpB,OAAO,SAAS;AAAA,IAChB,WAAW,SAAS;AAAA,EACtB;AACF;AAkDO,SAAS,mBACd,KACA,WACa;AACb,QAAM,UACJ,aAAa,MACT,QAAQ,IAAI,OAAO,IACnB,YAAY,MACV,QAAQ,IAAI,MAAM,IAClB;AACR,QAAMA,QAAO,OAAO,IAAI,QAAQ,IAAI,cAAc,aAAa,EAAE;AACjE,QAAM,aAAc,IAAI,cACtB,IAAI,eACJ,IAAI,cACJ;AACF,SAAO,EAAE,MAAAA,OAAM,YAAY,SAAS,IAAI;AAC1C;AAEO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,0BAAN,cAAsC,gBAAgB;AAAA,EAClD;AAAA,EACT,YAAY,MAAc;AACxB,UAAM,yBAAyB,IAAI,EAAE;AACrC,SAAK,OAAO;AACZ,SAAK,iBAAiB;AAAA,EACxB;AACF;AAEO,IAAM,gCAAN,cAA4C,gBAAgB;AAAA,EACxD;AAAA,EACA;AAAA,EACT,YAAY,YAAoBA,OAAc;AAC5C,UAAM,gCAAgC,UAAU,KAAKA,KAAI,EAAE;AAC3D,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,OAAOA;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,cAAiC,gBAAgB;AAAA,EAC7C;AAAA,EACT,YAAY,YAAoB,SAAiB;AAC/C,UAAM,qBAAqB,UAAU,MAAM,OAAO,EAAE;AACpD,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,aAAN,cAAyB,gBAAgB;AAAA,EAC9C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iCAAN,cAA6C,WAAW;AAAA,EAC7D,cAAc;AACZ;AAAA,MACE;AAAA,IAIF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAC/C,YAAY,QAAgB,UAA8B,MAAM;AAC9D;AAAA,MACE,kEAAkE,OAAO,eAC3D,MAAM;AAAA,IAEtB;AACA,SAAK,OAAO;AAAA,EACd;AACF;;;AD1NA,IAAM,oBAAgB,6BAAU,kCAAQ;AAGjC,IAAM,WAAN,MAAe;AAAA,EAGpB,YACmB,SACA,cACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EALK,SAAwB;AAAA,EAOhC,MAAc,UAA2B;AACvC,UAAM,aAAuB,CAAC;AAC9B,QAAI,QAAQ,IAAI,eAAgB,YAAW,KAAK,QAAQ,IAAI,cAAc;AAC1E,eAAW,KAAK,IAAI;AACpB,UAAM,gBAAY,4BAAK,yBAAQ,GAAG,eAAe,OAAO,IAAI;AAC5D,QAAI;AAEF,sCAAW,WAAW,0BAAU,IAAI;AACpC,iBAAW,KAAK,SAAS;AAAA,IAC3B,QAAQ;AAAA,IAER;AACA,UAAM,UAAU,KAAK,YAAY,QAAQ,cAAc;AACvD,UAAM,QAAQ,KAAK,YAAY,QAAQ,CAAC,OAAO,SAAS,QAAQ,IAAI,CAAC,MAAM,QAAQ;AACnF,QAAI,cAA6B;AACjC,eAAW,aAAa,YAAY;AAClC,UAAI;AACF,cAAM,cAAc,WAAW,OAAO,EAAE,SAAS,KAAO,CAAC;AACzD,eAAO;AAAA,MACT,SAAS,OAAO;AACd,YAAK,MAAgC,SAAS,SAAU,eAAc;AAAA,MACxE;AAAA,IACF;AACA,UAAM,IAAI;AAAA,MACR,cACI,aAAa,WAAW,0BAA0B,OAAO,0BACzD;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAgB,IAAI,MAAgB,YAAY,KAA0B;AACxE,QAAI,KAAK,WAAW,KAAM,MAAK,SAAS,MAAM,KAAK,QAAQ;AAC3D,QAAI;AACF,YAAM,EAAE,OAAO,IAAI,MAAM,cAAc,KAAK,QAAQ,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG;AAAA,QAC3E,SAAS;AAAA,QACT,KAAK,EAAE,GAAG,QAAQ,KAAK,GAAG,KAAK,aAAa;AAAA,QAC5C,WAAW,KAAK,OAAO;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UAAU;AAChB,UAAI,QAAQ,QAAQ;AAClB,cAAM,IAAI,WAAW,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,sBAAsB,SAAS,IAAI;AAAA,MACzF;AACA,YAAM,UAAU,QAAQ,UAAU,QAAQ,UAAU,OAAO,KAAK,GAAG,KAAK;AACxE,YAAM,IAAI,WAAW,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,cAAc,MAAM,EAAE;AAAA,IACnF;AAAA,EACF;AACF;;;ADxCA;AAqBA;AAIA;AAEA,IAAM,uBAAuB;AAkB7B,SAASC,sBAAqB,OAAgB,UAAmC;AAC/E,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,MAAI;AACJ,MAAI;AACF,cAAU,KAAK,MAAM,OAAO;AAAA,EAC9B,QAAQ;AACN,WAAO,iBAAiB,QAAQ,QAAQ,IAAI,gBAAgB,OAAO;AAAA,EACrE;AACA,MAAI,CAAC,WAAW,OAAO,QAAQ,aAAa,UAAU;AACpD,WAAO,iBAAiB,QAAQ,QAAQ,IAAI,gBAAgB,OAAO;AAAA,EACrE;AACA,QAAM,SACJ,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AAI1D,MAAI,QAAQ,aAAa,cAAc;AACrC,WAAO,IAAI,gBAAgB,MAAM;AAAA,EACnC;AACA,MAAI,QAAQ,WAAW,OAAO,aAAa,QAAW;AACpD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,QAAQ,WAAW,UAAU;AACtC,WAAO,IAAI,mBAAmB,QAAQ,QAAQ,MAAM;AAAA,EACtD;AACA,SAAO,IAAI,gBAAgB,MAAM;AACnC;AAEA,eAAeC,YACb,IACA,UACY;AACZ,MAAI;AACF,WAAO,MAAM,GAAG;AAAA,EAClB,SAAS,OAAO;AACd,UAAMD,sBAAqB,OAAO,QAAQ;AAAA,EAC5C;AACF;AAUA,IAAM,QAAN,cAAoB,SAAS;AAAA,EAC3B,YAAY,cAAsC;AAChD,UAAM,MAAM,YAAY;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,YAAoB,WAAmB,UAAkC;AACnF,QAAI,UAAU;AAGZ,YAAM,IAAI,+BAA+B;AAAA,IAC3C;AACA,UAAM,KAAK,IAAI,CAAC,SAAS,MAAM,YAAY,SAAS,CAAC;AAAA,EACvD;AAAA,EAEA,MAAM,QAAQ,WAAmB,SAAiC;AAChE,UAAM,OAAO,CAAC,SAAS;AACvB,QAAI,QAAS,MAAK,KAAK,WAAW;AAClC,SAAK,KAAK,MAAM,SAAS;AACzB,UAAM,KAAK,IAAI,IAAI;AAAA,EACrB;AAAA,EAEA,MAAM,SAAS,WAAmB,SAAiC;AACjE,UAAM,OAAO,CAAC,UAAU;AAGxB,QAAI,QAAS,MAAK,KAAK,aAAa,OAAO,EAAE;AAC7C,SAAK,KAAK,MAAM,SAAS;AACzB,UAAM,KAAK,IAAI,IAAI;AAAA,EACrB;AAAA,EAEA,MAAM,OAAO,WAAsD;AACjE,UAAM,OAAO,CAAC,UAAU,QAAQ;AAChC,QAAI,UAAW,MAAK,KAAK,MAAM,SAAS;AACxC,UAAM,SAAS,MAAM,KAAK,IAAI,MAAM,GAAM;AAC1C,QAAI;AACF,YAAM,UAAU,KAAK,MAAM,MAAM;AACjC,aAAO,OAAO,YAAY,YAAY,YAAY,OAC7C,UACD,EAAE,QAAQ,QAAQ;AAAA,IACxB,QAAQ;AACN,YAAM,IAAI;AAAA,QACR,kDAAkD,OAAO,MAAM,GAAG,GAAG,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AACF;AAGO,IAAM,mBAAN,MAAuB;AAAA,EACX;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,YAAY,UAAmC,CAAC,GAAG;AACjD,UAAM,UAAU,oBAAoB;AACpC,UAAM,QAAQ,QAAQ,UAAU,QAAQ;AACxC,QAAI,CAAC,OAAO;AACV,UAAI,QAAQ,qBAAqB;AAC/B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,iBAAiB,QAAQ,kBAAkB,QAAQ;AACzD,UAAM,YAAY,QAAQ,aAAa,QAAQ;AAC/C,QAAI,QAAQ,cAAc;AACxB,WAAK,SAAS,QAAQ;AAAA,IACxB,OAAO;AACL,YAAM,UAAU,yBAAyB;AACzC,UAAI,OAAO,QAAQ,2BAA2B,YAAY;AACxD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,WAAK,SAAS,IAAI,QAAQ;AAAA,QACxB,QAAQ,UAAU,QAAQ;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA,6BAAsC,WAAW;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AACA,UAAM,eAAuC;AAAA,MAC3C,oBAAoB;AAAA;AAAA;AAAA,MAGpB,oBAAoB,QAAQ,UAAU,QAAQ;AAAA,IAChD;AACA,QAAI,eAAgB,cAAa,6BAA6B;AAC9D,QAAI,UAAW,cAAa,wBAAwB;AACpD,SAAK,MAAM,IAAI,MAAM,YAAY;AAAA,EACnC;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,MAAmC;AAC9C,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,IAAI,UAAU,uBAAuB;AAAA,IAC7C;AACA,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,IAAI,gBAAgB,mCAAmC;AAAA,IAC/D;AACA,UAAM,MAAM,MAAMC,YAAW,MAAM,KAAK,OAAO,iBAAiB,IAAI,CAAC;AAIrE,UAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,WAAO,IAAI;AAAA,MACT;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA,QAAQ,kBAAkB;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KACJ,MACA,gBACA,UACqB;AACrB,QAAI,CAAC,QAAQ,CAAC,gBAAgB;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAMA;AAAA,MACJ,MACE,KAAK,OAAO;AAAA,QACV;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACF,IAAI,wBAAwB,cAAc;AAAA,IAC5C;AACA,WAAO,IAAI,WAAW,MAAM,KAAK,QAAQ,KAAK,KAAK,MAAM,MAAM;AAAA,EACjE;AAAA;AAAA,EAGA,MAAM,IAAI,MAAmC;AAC3C,UAAM,SAAS,MAAMA;AAAA,MACnB,MAAM,KAAK,OAAO,eAAe,IAAI;AAAA,MACrC,IAAI,wBAAwB,IAAI;AAAA,IAClC;AACA,UAAM,OAAO,KAAK,MAAM,OAAO,IAAI;AAInC,SAAK,KAAK,QAAQ,0BAA0B,sBAAsB;AAChE,YAAM,IAAI,wBAAwB,IAAI;AAAA,IACxC;AACA,WAAO,IAAI;AAAA,MACT;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA,KAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAkC;AACtC,UAAM,SAAS,MAAMA,YAAW,MAAM,KAAK,OAAO,gBAAgB,CAAC;AACnE,UAAM,OAAO,KAAK,MAAM,OAAO,IAAI;AAGnC,YAAQ,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,MACvC,MAAM,OAAO,KAAK,QAAQ,EAAE;AAAA,MAC5B,UAAU,OAAO,KAAK,aAAa,EAAE;AAAA,MACrC,QAAQ,OAAO,KAAK,UAAU,EAAE;AAAA,MAChC,MAAM,OAAO,KAAK,QAAQ,oBAAoB;AAAA,IAChD,EAAE;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,OAAO,MAA6B;AACxC,UAAMA;AAAA,MACJ,MAAM,KAAK,OAAO,iBAAiB,IAAI;AAAA,MACvC,IAAI,wBAAwB,IAAI;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MACJ,MACA,WACA,WAAW,OACe;AAC1B,UAAM,KAAK,IAAI,MAAM,MAAM,WAAW,QAAQ;AAC9C,WAAO,IAAI,gBAAgB,MAAM,KAAK,KAAK,MAAM,WAAW,QAAQ;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,WAAmB,UAAU,OAAsB;AAC/D,UAAM,KAAK,IAAI,QAAQ,WAAW,OAAO;AAAA,EAC3C;AAAA;AAAA,EAGA,MAAM,YAAY,WAA0C;AAC1D,WAAO,mBAAmB,MAAM,KAAK,IAAI,OAAO,SAAS,GAAG,SAAS;AAAA,EACvE;AACF;AAIA,SAAS,SAAS,MAAwB;AAIxC,SAAO,OAAO,SAAS,WAAW,OAAO,KAAK,MAAM,OAAO,IAAI,OAAO,KAAK,IAAI;AACjF;AAGO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACR;AAAA,EACD;AAAA;AAAA,EAGR,YACE,QACA,QACA,KACA,MACA,gBAA+B,MAC/B;AACA,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,SAA0B;AACtC,QAAI,CAAC,KAAK,eAAe;AACvB,YAAM,SAAS,MAAMA;AAAA,QACnB,MAAM,KAAK,OAAO,eAAe,KAAK,IAAI;AAAA,QAC1C,IAAI,wBAAwB,KAAK,IAAI;AAAA,MACvC;AACA,YAAM,OAAO,KAAK,MAAM,OAAO,IAAI;AACnC,WAAK,gBAAgB,KAAK,kBAAkB;AAAA,IAC9C;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA,EAKA,MAAM,UACJC,OACA,MACA,SAC4B;AAC5B,WAAO,MAAM,KAAK,WAAW,oBAAI,IAAI,CAAC,CAACA,OAAM,IAAI,CAAC,CAAC,GAAG,OAAO;AAAA,EAC/D;AAAA;AAAA,EAGA,MAAM,WACJ,OACA,SACA,UAAoB,CAAC,GACO;AAC5B,UAAM,UACJ,iBAAiB,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,OAAO,QAAQ,KAAK;AACpE,QAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,GAAG;AAChD,YAAM,IAAI,gBAAgB,+CAA+C;AAAA,IAC3E;AACA,UAAM,SAAS,QAAQ,IAAI,CAAC,CAACA,OAAM,IAAI,OAAO;AAAA,MAC5C,MAAAA;AAAA,MACA,SAAS,SAAS,IAAI;AAAA,IACxB,EAAE;AAGF,UAAM,kBAAkB,WAAW,SAAS,OAAO,MAAM;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA,CAAC;AAAA,MACD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBACJA,OACA,WACA,SAC4B;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB,oBAAI,IAAI,CAAC,CAACA,OAAM,SAAS,CAAC,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBACJ,OACA,SAC4B;AAC5B,UAAM,UACJ,iBAAiB,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,OAAO,QAAQ,KAAK;AACpE,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,IAAI,gBAAgB,wCAAwC;AAAA,IACpE;AACA,UAAM,SAAS,QAAQ,IAAI,CAAC,CAACA,OAAM,SAAS,OAAO,EAAE,MAAAA,OAAM,UAAU,EAAE;AACvE,UAAM,kBACJ,WAAW,SAAS,OAAO,MAAM;AACnC,UAAM,SAAS,MAAM,KAAK,OAAO;AACjC,UAAM,SAAS,MAAMD;AAAA,MACnB,MACE,KAAK,OAAO;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,YACA,iCAAY,EAAE,EAAE,SAAS,KAAK;AAAA,MAChC;AAAA,MACF,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AACA,UAAM,SAAS,KAAK,MAAM,OAAO,IAAI;AAIrC,UAAM,YAAY,OAAO,OAAO,cAAc,EAAE;AAChD,UAAM,oBACJ,OAAO,uBAAuB,OAC1B,OACA,OAAO,OAAO,mBAAmB;AACvC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,sBAAsB;AAAA,MAC/B,SAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SACJ,MACA,IACA,SAC4B;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,CAAC;AAAA,MACD,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACb,CAAC;AAAA,MACD,WAAW,QAAQ,IAAI,OAAO,EAAE;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SACJ,MACA,IACA,SAC4B;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,CAAC;AAAA,MACD,CAAC;AAAA,MACD,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,MACb,WAAW,QAAQ,IAAI,OAAO,EAAE;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAc,eACZ,QACA,SACA,OACA,QACA,SAC4B;AAC5B,UAAM,SAAS,MAAM,KAAK,OAAO;AACjC,UAAM,SAAS,MAAMA;AAAA,MACnB,MACE,KAAK,OAAO;AAAA,QACV,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAAA,YAGA,iCAAY,EAAE,EAAE,SAAS,KAAK;AAAA,MAChC;AAAA,MACF,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AACA,UAAM,SAAS,KAAK,MAAM,OAAO,IAAI;AAIrC,UAAM,YAAY,OAAO,OAAO,cAAc,EAAE;AAChD,UAAM,oBACJ,OAAO,uBAAuB,OAC1B,OACA,OAAO,OAAO,mBAAmB;AACvC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,sBAAsB;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAWC,OAAc,SAA8C;AAC3E,WAAO,MAAM,KAAK;AAAA,MAChB,oBAAI,IAAI;AAAA,MACR,WAAW,UAAUA,KAAI;AAAA,MACzB,CAACA,KAAI;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAS,UAAU,oBAAiD;AACxE,UAAM,kBAAkB,WAAW;AACnC,UAAM,SAAS,MAAMD;AAAA,MACnB,MACE,KAAK,OAAO;AAAA,QACV,KAAK;AAAA,QACL;AAAA,YACA,iCAAY,EAAE,EAAE,SAAS,KAAK;AAAA,MAChC;AAAA,MACF,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AACA,UAAM,WAAW,KAAK,MAAM,OAAO,IAAI;AAIvC,WAAO;AAAA,MACL,IAAI,OAAO,SAAS,eAAe,EAAE;AAAA,MACrC,SAAS,SAAS,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBAAmD;AACvD,UAAM,SAAS,MAAMA;AAAA,MACnB,MAAM,KAAK,OAAO,wBAAwB,KAAK,IAAI;AAAA,MACnD,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AACA,UAAM,UAAU,KAAK,MAAM,OAAO,IAAI;AAOtC,YAAQ,QAAQ,aAAa,CAAC,GAAG,IAAI,CAAC,cAAc;AAAA,MAClD,IAAI,OAAO,SAAS,eAAe,EAAE;AAAA,MACrC,WAAW,IAAI,KAAK,OAAO,SAAS,iBAAiB,CAAC,CAAC;AAAA,MACvD,SAAS,OAAO,SAAS,WAAW,EAAE;AAAA,IACxC,EAAE;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,eAAe,UAAiC;AACpD,UAAMA;AAAA,MACJ,MAAM,KAAK,OAAO,yBAAyB,KAAK,MAAM,QAAQ;AAAA,MAC9D,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAASC,OAAc,SAAuC;AAClE,YAAQ,MAAM,KAAK,qBAAqBA,OAAM,EAAE,QAAQ,CAAC,GAAG;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBACJA,OACA,UAAiC,CAAC,GACL;AAC7B,QAAI,YAAYA,KAAI,MAAM,IAAI;AAC5B,YAAM,IAAI,gBAAgB,6BAA6B;AAAA,IACzD;AACA,UAAM,QAAQ,QAAQ;AACtB,QACE,UAAU,WACT,CAAC,OAAO,cAAc,MAAM,MAAM,KACjC,MAAM,SAAS,KACf,CAAC,OAAO,cAAc,MAAM,MAAM,KAClC,MAAM,UAAU,IAClB;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,kBAAkB,QAAQ,WAAY,MAAM,KAAK,OAAO;AAC9D,UAAM,SAAS,MAAMD;AAAA,MACnB,MACE,KAAK,OAAO;AAAA,QACV,KAAK;AAAA,QACLC;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACF,IAAI,8BAA8B,KAAK,MAAMA,KAAI;AAAA,IACnD;AACA,UAAM,WAAW,OAAO;AACxB,QACE,CAAC,OAAO,aACR,aAAa,UACb,CAAC,OAAO,cAAc,QAAQ,KAC9B,WAAW,KACX,OAAO,KAAK,aAAa,UACzB;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM,IAAI,WAAW,OAAO,IAAI;AAAA,MAChC,WAAW,OAAO;AAAA,MAClB,MAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAASA,OAAc,SAAmC;AAI9D,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM,WAAW,KAAK,CAAC,EAAE;AAAA,MAChE,MAAM,KAAK,SAASA,OAAM,OAAO;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,UAAU,UAAU,IAAI,SAAwC;AACpE,UAAM,kBAAkB,WAAY,MAAM,KAAK,OAAO;AACtD,UAAM,SAAS,MAAMD;AAAA,MACnB,MAAM,KAAK,OAAO,mBAAmB,KAAK,MAAM,SAAS,eAAe;AAAA,MACxE,IAAI,8BAA8B,KAAK,MAAM,WAAW,GAAG;AAAA,IAC7D;AACA,UAAM,OAAO,KAAK,MAAM,OAAO,IAAI;AAGnC,YAAQ,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,UAAU,kBAAkB,OAAO,OAAO,CAAC;AAAA,EAC9E;AAAA;AAAA;AAAA,EAKA,MAAM,SAAoC;AACxC,UAAM,aAAa,MAAMA;AAAA,MACvB,MAAM,KAAK,OAAO,eAAe,KAAK,IAAI;AAAA,MAC1C,IAAI,wBAAwB,KAAK,IAAI;AAAA,IACvC;AACA,UAAM,OAAO,KAAK,MAAM,WAAW,IAAI;AACvC,UAAM,gBAAgB,OAAO,KAAK,kBAAkB,MAAM;AAC1D,SAAK,gBAAgB;AACrB,QAAI,YAA2B;AAC/B,QAAI,aAA4B;AAChC,QAAI;AAGF,YAAM,YAAY,MAAMA;AAAA,QAAW,MACjC,KAAK,OAAO,oBAAoB,KAAK,MAAM,aAAa;AAAA,MAC1D;AACA,YAAM,MAAM,KAAK,MAAM,UAAU,IAAI;AACrC,kBACG,IAAI,mBAA+B,IAAI,OAAkB;AAC5D,mBAAa,OAAO,IAAI,eAAe,WAAW,IAAI,aAAa;AAAA,IACrE,SAAS,OAAO;AAGd,UAAI,EAAE,iBAAiB,uBAAuB,MAAM,eAAe,KAAK;AACtE,cAAM;AAAA,MACR;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,QAAQ,OAAO,KAAK,UAAU,EAAE;AAAA,MAChC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAM,WAAmB,WAAW,OAAiC;AACzE,WAAO,MAAM,KAAK,OAAO,MAAM,KAAK,MAAM,WAAW,QAAQ;AAAA,EAC/D;AACF;AAGO,IAAM,kBAAN,MAAsB;AAAA,EACV;AAAA,EACA;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGT,YACE,QACA,KACA,YACAC,OACA,UACA;AACA,SAAK,SAAS;AACd,SAAK,MAAM;AACX,SAAK,aAAa;AAClB,SAAK,OAAOA;AACZ,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,SAAS,SAAiC;AAC9C,UAAM,KAAK,IAAI,SAAS,KAAK,MAAM,OAAO;AAAA,EAC5C;AAAA;AAAA,EAGA,MAAM,SAA+B;AACnC,WAAO,MAAM,KAAK,OAAO,YAAY,KAAK,IAAI;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,QAAQ,UAAU,OAAsB;AAC5C,UAAM,KAAK,OAAO,QAAQ,KAAK,MAAM,OAAO;AAAA,EAC9C;AACF;;;AD7yBA;AAcO,IAAM,YAAN,MAAgB;AAAA,EACJ;AAAA,EACA;AAAA,EAOjB,YAAY,SAA8B;AACxC,SAAK,cAAc,IAAI,YAAY,OAAO;AAC1C,SAAK,oBAAoB;AAAA,MACvB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,gBAAgB,SAAS;AAAA,MACzB,WAAW,SAAS;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,SAAK,YAAY,MAAM;AAAA,EACzB;AAAA,EAEA,MAAM,kBACJ,UACA,SACA,yBAAyB,OACV;AACf,UAAM,KAAK,YAAY;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,iBAAwC;AAC9D,UAAM,KAAK,YAAY,kBAAkB,eAAe;AAAA,EAC1D;AAAA,EAEA,MAAM,mBAAmB,WAAkC;AACzD,UAAM,KAAK,YAAY,mBAAmB,SAAS;AAAA,EACrD;AAAA,EAEA,MAAM,iBACJ,MACA,aACA,UACqB;AACrB,UAAM,aAAa,MAAM,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,OAAO,IAAI;AACjF,WAAO;AAAA,MACL,IAAI,WAAW;AAAA,MACf,MAAM,WAAW;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,UAGI;AACxB,UAAM,cAAc,MAAM,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,KAAK;AAC5E,WAAO,YAAY,IAAI,CAAC,gBAAgB;AAAA,MACtC,IAAI,WAAW;AAAA,MACf,MAAM,WAAW;AAAA,MACjB,QAAQ,WAAW;AAAA,IACrB,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,iBACJ,cACA,UACe;AACf,UAAM,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,OAAO,YAAY;AAAA,EACxE;AAAA,EAEA,MAAM,eAA8C;AAClD,WAAO,KAAK,YAAY,aAAa;AAAA,EACvC;AAAA,EAEA,MAAM,YAAY,iBAAuD;AACvE,WAAO,KAAK,YAAY,oBAAoB,eAAe;AAAA,EAC7D;AAAA,EAEA,MAAM,WACJ,iBACA,QACiB;AACjB,WAAO,KAAK,YAAY,WAAW,iBAAiB,MAAM;AAAA,EAC5D;AAAA,EAEA,MAAM,wBACJ,iBACA,WACe;AACf,UAAM,KAAK,YAAY,wBAAwB,iBAAiB,SAAS;AAAA,EAC3E;AAAA,EAEA,MAAM,cACJ,iBACA,WACwB;AACxB,UAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,MAAM;AAC5B,YAAM,IAAI,wBAAwB;AAAA,IACpC;AAEA,QAAI,OAAO,SAAS,YAAY,UAAU;AACxC,UAAI,SAAS,cAAc,SAAS;AAClC,cAAM,IAAI;AAAA,UACR,SAAS,aAAa;AAAA,UACtB,SAAS,aAAa;AAAA,QACxB;AAAA,MACF;AACA,YAAM,UACJ,OAAO,SAAS,QAAQ,YAAY,WAChC,SAAS,QAAQ,UACjB,KAAK,UAAU,SAAS,OAAO;AACrC,YAAM,IAAI,mBAAmB,OAAO;AAAA,IACtC;AAEA,WAAO,KAAK,YAAY,cAAc,iBAAiB,SAAS;AAAA,EAClE;AACF;;;AD7IA;AAMA,IAAM,2BAA2B,oBAAI,IAA8B;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,uBAAsC,uBAAO;AAAA,EACjD;AACF;AAaA,SAAS,qBAAqB,OAA6C;AACzE,MAAI,OAAO,UAAU,YAAY,SAAS,QAAQ,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC/E,QAAM,UAAU,OAAO,QAAQ,KAAK;AACpC,SAAO,QAAQ,MAAM,CAAC,CAAC,KAAK,MAAM,MAAM;AACtC,QAAI,CAAC,yBAAyB,IAAI,GAA+B,EAAG,QAAO;AAC3E,QAAI,WAAW,OAAW,QAAO;AACjC,QAAI,QAAQ,gBAAgB,QAAQ,kBAAkB;AACpD,aAAO,OAAO,WAAW;AAAA,IAC3B;AACA,WAAO,OAAO,WAAW;AAAA,EAC3B,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAwC;AAC/D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,oBAAoB,MAAM,QACtC,qBAAqB,UAAU,aAAa;AACnD;AAEO,SAAS,cAAc,UAA8B,CAAC,GAAkB;AAC7E,MAAI,CAAC,qBAAqB,OAAO,GAAG;AAClC,UAAM,IAAI,cAAc,iDAAiD;AAAA,EAC3E;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,CAAC,oBAAoB,GAAG;AAAA,IACxB,eAAe,OAAO,OAAO,EAAE,GAAG,QAAQ,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,IAAM,gBAAN,MAAuB;AAAA,EAC5B,YACW,IACQ,iBACA,QACA,cACjB;AAJS;AACQ;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,SAAqB;AACzB,QAAI;AACJ,QAAI;AACF,YAAM,KAAK,OAAO,wBAAwB,KAAK,iBAAiB,KAAK,EAAE;AACvE,eAAS,MAAM,KAAK,OAAO,cAAc,KAAK,iBAAiB,KAAK,EAAE;AAAA,IACxE,SAAS,OAAO;AACd,UAAI,iBAAiB,uBAAuB;AAC1C,cAAM,IAAI,aAAa,MAAM,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,MACxD;AACA,UAAI,iBAAiB,oBAAoB;AACvC,cAAM,IAAI,cAAc,MAAM,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,MACzD;AACA,YAAM;AAAA,IACR;AACA,QAAI,KAAK,iBAAiB,MAAM;AAC9B,aAAO,IAAI,KAAK,OAAO,iBAAiB,OAAO,WAAW;AAAA,IAC5D;AACA,QAAI,KAAK,iBAAiB,SAAS,OAAO,YAAY,YAAY,EAAE,WAAW,kBAAkB,GAAG;AAClG,aAAO,gBAAgB,OAAO,eAAe;AAAA,IAC/C;AACA,WAAO,IAAI,KAAK,OAAO,iBAAiB,OAAO,WAAW;AAAA,EAC5D;AACF;AAUA,eAAsB,UACpB,gBACG,gBAC8B;AACjC,QAAM,aAAa,OAAO,gBAAgB,WAAW,SAAY,YAAY;AAC7E,MAAI,cAAc,QAAQ,WAAW,eAAe,MAAM;AACxD,UAAM,IAAI,cAAc,GAAG,WAAW,IAAI,kCAAkC;AAAA,EAC9E;AACA,QAAM,kBAAkB,OAAO,gBAAgB,WAAW,cAAc,WAAY;AACpF,MAAI;AACJ,QAAM,OAAO,CAAC,GAAG,cAAc;AAC/B,QAAM,YAAY,KAAK,GAAG,EAAE;AAC5B,MAAI,OAAO,gBAAgB,UAAU;AACnC,QAAI,gBAAgB,SAAS,GAAG;AAC9B,gBAAU,UAAU;AACpB,WAAK,IAAI;AAAA,IACX;AAAA,EACF,OAAO;AACL,UAAM,aAAa,WAAY;AAC/B,UAAM,eAAe,WAAW;AAChC,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,0BAA0B,KAAK,SAAS;AAC9C,YAAM,UAAU,WAAW,MAAM,uBAAuB;AACxD,UAAI,QAAQ,KAAK,CAACC,eAAcA,WAAU,QAAQ,GAAG;AACnD,cAAM,IAAI;AAAA,UACR,GAAG,WAAY,IAAI;AAAA,QACrB;AAAA,MACF;AACA,gBAAU,UAAU;AACpB,WAAK,IAAI;AAAA,IACX,WAAW,KAAK,WAAW,eAAe,GAAG;AAC3C,UAAI,cAAc,UAAa,CAAC,qBAAqB,SAAS,GAAG;AAC/D,cAAM,IAAI,cAAc,4DAA4D;AAAA,MACtF;AACA,gBAAU,KAAK,IAAI;AAAA,IACrB;AAAA,EACF;AACA,QAAM,SAAS,IAAI,UAAU,OAAO;AACpC,QAAM,SAAyB,KAAK,IAAI,CAAC,OAAO,UAAU;AACxD,UAAM,aAAa,eAAe,KAAK;AACvC,WAAO,EAAE,MAAM,OAAO,KAAK,GAAG,MAAM,WAAW,MAAM,aAAa,WAAW,YAAY;AAAA,EAC3F,CAAC;AACD,QAAM,KAAK,MAAM,OAAO,WAAW,iBAAiB,MAAM;AAC1D,SAAO,IAAI,cAAuB,IAAI,iBAAiB,QAAQ,YAAY,QAAQ,KAAK;AAC1F;;;AKnJA;AAAA,yBAAuB;AAUhB,IAAM,+BAA+B;AA0D5C,SAAS,iBAAiB,OAAwB;AAChD,SAAO,0BAAO,KAAK,KAAK,UAAU,EAAE,QAAQ,8BAA8B,MAAM,CAAC,GAAG,MAAM,EAAE,SAAS,QAAQ;AAC/G;AAEO,SAAS,iBAAoB,SAAoB;AACtD,QAAM,WAAW,KAAK,MAAM,0BAAO,KAAK,SAAS,QAAQ,EAAE,SAAS,MAAM,CAAC;AAI3E,MAAI,SAAS,WAAW,8BAA8B;AACpD,UAAM,IAAI,cAAc,qEAAqE;AAAA,EAC/F;AACA,SAAO,SAAS;AAClB;AAEA,SAAS,SAAS,OAAiD;AACjE,QAAM,CAAC,OAAO,WAAW,GAAG,KAAK,IAAI,MAAM,MAAM,GAAG;AACpD,MAAI,CAAC,SAAS,MAAM,SAAS,EAAG,OAAM,IAAI,cAAc,wBAAwB,KAAK,GAAG;AACxF,QAAM,QAAQ,aAAa,OAAO,IAAI,OAAO,SAAS;AACtD,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,EAAG,OAAM,IAAI,cAAc,yBAAyB,KAAK,GAAG;AACrG,SAAO,EAAE,OAAO,MAAM;AACxB;AAEA,SAAS,kBAAkBC,YAAkD;AAC3E,SAAO;AAAA,IACL,MAAMA,WAAU;AAAA,IAChB,WAAW,oBAAoBA,UAAS;AAAA,IACxC,aAAaA,WAAU;AAAA,IACvB,UAAUA,WAAU;AAAA,EACtB;AACF;AAEA,SAAS,iBACP,aACA,YACkB;AAClB,QAAMC,WAAU,WAAW,QAAQ,WAAW,YAAY,aAAa,WAAW,EAAE,YAAY,EAAE;AAClG,QAAM,MAAM,WAAW,QAAQ,OAAO,OAClC,CAAC,KACA,MAAM,QAAQ,WAAW,QAAQ,GAAG,IAAI,WAAW,QAAQ,MAAM,CAAC,WAAW,QAAQ,GAAG,GAAG,IAAI,QAAQ;AAC5G,QAAM,SAA2B;AAAA,IAC/B,MAAM,WAAW;AAAA,IACjB,aAAa,WAAW,QAAQ;AAAA,IAChC,WAAW;AAAA,IACX,cAAc,CAAC,GAAG,WAAW,QAAQ,OAAO;AAAA,IAC5C,4BAA4B,WAAW,QAAQ;AAAA,IAC/C,aAAa,WAAW,QAAQ;AAAA,IAChC,WAAW;AAAA,MACT,MAAM,WAAW,QAAQ;AAAA,MACzB,WAAW,KAAK,KAAK,WAAW,QAAQ,SAAS,IAAI;AAAA,MACrD,mBAAmB,KAAK,KAAK,WAAW,QAAQ,gBAAgB,IAAI;AAAA,MACpE,MAAM;AAAA,IACR;AAAA,IACA,cAAc;AAAA,MACZ,aAAaA,SAAQ;AAAA,MACrB,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,kBAAkB;AAAA,IACpB;AAAA,IACA,WAAW;AAAA,IACX,YAAY,WAAW,eAAe,OAAO,CAAC,IAAI,WAAW,WAAW,IAAI,iBAAiB;AAAA,IAC7F,aAAa,WAAW,eAAe,OAAO,OAAO,EAAE,GAAG,WAAW,QAAQ,YAAY,OAAO,eAAe;AAAA,IAC/G,uBAAuB;AAAA,MACrB,qBAAqB,WAAW,QAAQ,UAAU,YAAY,QAAQ,WAAW,OAC7E,CAAC,IACD,CAAC,WAAW,WAAW,QAAQ,UAAU,YAAY,QAAQ,MAAM,EAAE;AAAA,IAC3E;AAAA,IACA,iBAAiB;AAAA,EACnB;AACA,MAAI,WAAW,QAAQ,kBAAkB,KAAM,QAAO,kBAAkB,WAAW,QAAQ;AAC3F,MAAI,WAAW,QAAQ,iBAAiB,KAAM,QAAO,iBAAiB,WAAW,QAAQ;AACzF,MAAI,WAAW,QAAQ,iBAAiB,KAAM,QAAO,iBAAiB,WAAW,QAAQ;AACzF,MAAI,WAAW,QAAQ,SAAS,KAAM,QAAO,QAAQ,WAAW,QAAQ,MAAM;AAC9E,SAAO;AACT;AAEO,SAAS,0BAA0B,aAAwD;AAChG,MAAI,YAAY,eAAe,KAAM,OAAM,IAAI,cAAc,GAAG,YAAY,IAAI,wBAAwB;AACxG,QAAM,YAAY,OAAO;AAAA,IACvB,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,MAAM,iBAAiB,aAAa,UAAU,CAAC,CAAC;AAAA,EACjG;AACA,SAAO;AAAA,IACL,MAAM,YAAY;AAAA,IAClB,aAAa,YAAY,QAAQ;AAAA,IACjC,MAAM,EAAE,GAAG,YAAY,YAAY,KAAK;AAAA,IACxC,OAAO,CAAC,GAAG,YAAY,YAAY,KAAK;AAAA,IACxC,SAAS,YAAY,YAAY;AAAA,IACjC,SAAS;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,eAAe,YAAY;AAAA,MAC3B,kBAAkB;AAAA,MAClB,eAAe,iBAAiB,YAAY,WAAW,IAAI,CAACD,gBAAe;AAAA,QACzE,MAAMA,WAAU;AAAA,QAChB,QAAQA,WAAU,OAAO;AAAA,QACzB,UAAUA,WAAU;AAAA,QACpB,YAAYA,WAAU;AAAA,QACtB,cAAcA,WAAU;AAAA,MAC1B,EAAE,CAAC;AAAA,MACH,mBAAmB;AAAA,MACnB,0BAA0B,iBAAiB,YAAY,QAAQ,UAAU;AAAA,IAC3E;AAAA,EACF;AACF;AAEO,SAAS,6BAAoD;AAClE,SAAO,gBAAgB,EAAE,IAAI,yBAAyB;AACxD;AAUO,SAAS,mBAAmBE,UAAS,eAA6B;AACvE,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,QAAAA;AAAA,IACA,WAAW,OAAO,YAAY,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,MAAM,EAAE,MAAM,WAAW,KAAK,CAAC,CAAC,CAAC;AAAA,EAChH;AACF;","names":["path","trimTrailingSlashes","path","exports","module","detectLinuxLibc","fs","read","count","path","require","import_node_module","path","os","import_node_path","import_node_crypto","DEFAULT_IMAGE_NAME","createSandboxImage","Ajv","Ajv2020","parameter","registry","parameter","close","import_node_async_hooks","import_node_crypto","path","import_node_crypto","import_node_crypto","import_node_fs","import_node_os","import_node_path","import_node_util","path","translateNativeError","callNative","path","parameter","parameter","retries","module"]}