rivetkit 2.3.0-rc.5 → 2.3.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/client.d.ts +21 -18
- package/dist/browser/client.js +735 -170
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.js +1 -1
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/tsup/actor/errors.cjs +4 -2
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/actor/errors.d.cts +1 -74
- package/dist/tsup/actor/errors.d.ts +1 -74
- package/dist/tsup/actor/errors.js +3 -1
- package/dist/tsup/agent-os/index.cjs +1 -1
- package/dist/tsup/agent-os/index.cjs.map +1 -1
- package/dist/tsup/agent-os/index.d.cts +18 -7
- package/dist/tsup/agent-os/index.d.ts +18 -7
- package/dist/tsup/agent-os/index.js +1 -1
- package/dist/tsup/agent-os/index.js.map +1 -1
- package/dist/tsup/{chunk-2GANBXVP.cjs → chunk-2G64KSZQ.cjs} +10 -10
- package/dist/tsup/{chunk-2GANBXVP.cjs.map → chunk-2G64KSZQ.cjs.map} +1 -1
- package/dist/tsup/{chunk-N2DQSJIW.js → chunk-6S25NVAP.js} +13 -46
- package/dist/tsup/chunk-6S25NVAP.js.map +1 -0
- package/dist/tsup/{chunk-NATOT3ET.js → chunk-CAF6JDJE.js} +4 -4
- package/dist/tsup/{chunk-PGYEMIOE.js → chunk-DEO7MMWQ.js} +2 -2
- package/dist/tsup/{chunk-SULB574D.js → chunk-EMO6E3PJ.js} +3 -3
- package/dist/tsup/{chunk-FTZIZ3JG.cjs → chunk-ENK7C66G.cjs} +838 -236
- package/dist/tsup/chunk-ENK7C66G.cjs.map +1 -0
- package/dist/tsup/{chunk-JY73X7VU.js → chunk-FLODVLYW.js} +690 -88
- package/dist/tsup/chunk-FLODVLYW.js.map +1 -0
- package/dist/tsup/{chunk-OVJX4IFY.cjs → chunk-HTR4YLNT.cjs} +4 -4
- package/dist/tsup/{chunk-OVJX4IFY.cjs.map → chunk-HTR4YLNT.cjs.map} +1 -1
- package/dist/tsup/{chunk-LELRJK66.cjs → chunk-JALSAX7Z.cjs} +3 -3
- package/dist/tsup/{chunk-LELRJK66.cjs.map → chunk-JALSAX7Z.cjs.map} +1 -1
- package/dist/tsup/{chunk-JRCZDHXT.cjs → chunk-K5BA2LEO.cjs} +19 -52
- package/dist/tsup/chunk-K5BA2LEO.cjs.map +1 -0
- package/dist/tsup/{chunk-K34B3OVG.js → chunk-KIWH5H3K.js} +30 -9
- package/dist/tsup/chunk-KIWH5H3K.js.map +1 -0
- package/dist/tsup/{chunk-NW2J4SOL.cjs → chunk-LIXXFXVR.cjs} +5 -5
- package/dist/tsup/{chunk-NW2J4SOL.cjs.map → chunk-LIXXFXVR.cjs.map} +1 -1
- package/dist/tsup/{chunk-HR547GVH.cjs → chunk-M5C7YNI5.cjs} +8 -8
- package/dist/tsup/{chunk-HR547GVH.cjs.map → chunk-M5C7YNI5.cjs.map} +1 -1
- package/dist/tsup/{chunk-V3QNBJ7N.cjs → chunk-QAZLM4WT.cjs} +31 -10
- package/dist/tsup/chunk-QAZLM4WT.cjs.map +1 -0
- package/dist/tsup/{chunk-LDTT6WKJ.js → chunk-RTC2AZGB.js} +2 -2
- package/dist/tsup/{chunk-UXTP4EBU.js → chunk-ZI5QJMKO.js} +2 -2
- package/dist/tsup/client/mod.cjs +7 -7
- package/dist/tsup/client/mod.d.cts +3 -4
- package/dist/tsup/client/mod.d.ts +3 -4
- package/dist/tsup/client/mod.js +6 -6
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{config-CvQUtDp9.d.ts → config-0Ta55UV0.d.ts} +10 -9
- package/dist/tsup/{config-C-a9vrke.d.cts → config-Ca8dN4cS.d.cts} +10 -9
- package/dist/tsup/{context-A7R0bsZL.d.ts → context-B_IWbWne.d.ts} +1 -1
- package/dist/tsup/{context-CA3r-pf2.d.cts → context-CUrQ9MHc.d.cts} +1 -1
- package/dist/tsup/inspector/mod.cjs +6 -6
- package/dist/tsup/inspector/mod.js +5 -5
- package/dist/tsup/mod.cjs +252 -207
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +4 -5
- package/dist/tsup/mod.d.ts +4 -5
- package/dist/tsup/mod.js +183 -138
- package/dist/tsup/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +10 -10
- package/dist/tsup/test/mod.d.cts +2 -3
- package/dist/tsup/test/mod.d.ts +2 -3
- package/dist/tsup/test/mod.js +6 -6
- package/dist/tsup/utils-DVekpm4I.d.cts +103 -0
- package/dist/tsup/utils-DVekpm4I.d.ts +103 -0
- package/dist/tsup/utils.cjs +3 -3
- package/dist/tsup/utils.d.cts +1 -1
- package/dist/tsup/utils.d.ts +1 -1
- package/dist/tsup/utils.js +2 -2
- package/dist/tsup/workflow/mod.cjs +9 -9
- package/dist/tsup/workflow/mod.d.cts +4 -5
- package/dist/tsup/workflow/mod.d.ts +4 -5
- package/dist/tsup/workflow/mod.js +5 -5
- package/package.json +8 -8
- package/src/actor/errors.ts +53 -7
- package/src/client/actor-conn.ts +52 -29
- package/src/client/actor-handle.ts +57 -23
- package/src/client/errors.ts +2 -1
- package/src/client/raw-utils.ts +2 -4
- package/src/client/utils.ts +32 -3
- package/src/common/actor-router-consts.ts +4 -0
- package/src/common/bare/generated/client-protocol/v4.ts +599 -0
- package/src/common/client-protocol-versioned.ts +125 -18
- package/src/common/client-protocol-zod.ts +7 -0
- package/src/common/client-protocol.ts +1 -1
- package/src/common/database/native-database.test.ts +35 -0
- package/src/common/database/native-database.ts +8 -4
- package/src/common/router.ts +38 -8
- package/src/common/utils.ts +9 -52
- package/src/drivers/engine/actor-driver.ts +18 -17
- package/src/registry/config/index.ts +3 -5
- package/src/registry/index.ts +156 -19
- package/src/registry/napi-runtime.ts +44 -6
- package/src/registry/native.ts +5 -152
- package/src/registry/runtime.ts +16 -5
- package/src/registry/wasm-runtime.ts +22 -2
- package/dist/tsup/chunk-FTZIZ3JG.cjs.map +0 -1
- package/dist/tsup/chunk-JRCZDHXT.cjs.map +0 -1
- package/dist/tsup/chunk-JY73X7VU.js.map +0 -1
- package/dist/tsup/chunk-K34B3OVG.js.map +0 -1
- package/dist/tsup/chunk-N2DQSJIW.js.map +0 -1
- package/dist/tsup/chunk-V3QNBJ7N.cjs.map +0 -1
- package/dist/tsup/utils-fwx3o3K9.d.cts +0 -18
- package/dist/tsup/utils-fwx3o3K9.d.ts +0 -18
- /package/dist/tsup/{chunk-NATOT3ET.js.map → chunk-CAF6JDJE.js.map} +0 -0
- /package/dist/tsup/{chunk-PGYEMIOE.js.map → chunk-DEO7MMWQ.js.map} +0 -0
- /package/dist/tsup/{chunk-SULB574D.js.map → chunk-EMO6E3PJ.js.map} +0 -0
- /package/dist/tsup/{chunk-LDTT6WKJ.js.map → chunk-RTC2AZGB.js.map} +0 -0
- /package/dist/tsup/{chunk-UXTP4EBU.js.map → chunk-ZI5QJMKO.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/common/actor-router-consts.ts","../../src/client/errors.ts","../../src/client/actor-conn.ts","../../src/common/client-protocol-versioned.ts","../../src/common/bare/generated/client-protocol/v1.ts","../../src/common/bare/generated/client-protocol/v2.ts","../../src/common/bare/generated/client-protocol/v3.ts","../../src/common/bare/generated/client-protocol/v4.ts","../../src/common/client-protocol-zod.ts","../../src/client/actor-common.ts","../../src/client/actor-query.ts","../../src/client/lifecycle-errors.ts","../../src/client/utils.ts","../../src/client/queue.ts","../../src/client/raw-utils.ts","../../src/client/resolve-gateway-target.ts","../../src/client/actor-handle.ts","../../src/client/client.ts","../../src/client/config.ts","../../src/utils/endpoint-parser.ts","../../src/engine-client/api-utils.ts","../../src/engine-client/log.ts","../../src/engine-client/api-endpoints.ts","../../src/engine-client/mod.ts","../../src/engine-client/driver.ts","../../src/engine-client/actor-http-client.ts","../../src/common/websocket-test-hooks.ts","../../src/engine-client/actor-websocket-client.ts","../../src/engine-client/metadata.ts","../../src/engine-client/ws-proxy.ts"],"sourcesContent":["// NOTE: This is in a separate file from the router since it needs to be shared between the client & the server. If this was in the router file, the client would end up importing the *entire* actor router and tree shaking would not work.\n\n// MARK: Paths\nexport const PATH_CONNECT = \"/connect\";\nexport const PATH_WEBSOCKET_BASE = \"/websocket\";\nexport const PATH_WEBSOCKET_PREFIX = \"/websocket/\";\n\n// MARK: Headers\nexport const HEADER_ACTOR_QUERY = \"x-rivet-query\";\n\nexport const HEADER_ENCODING = \"x-rivet-encoding\";\n\n// IMPORTANT: Params must be in headers or in an E2EE part of the request (i.e. NOT the URL or query string) in order to ensure that tokens can be securely passed in params.\nexport const HEADER_CONN_PARAMS = \"x-rivet-conn-params\";\n\nexport const HEADER_ACTOR_ID = \"x-rivet-actor\";\nexport const HEADER_ACTOR_GENERATION = \"x-rivet-actor-generation\";\nexport const HEADER_ACTOR_KEY = \"x-rivet-actor-key\";\n\nexport const HEADER_RIVET_TOKEN = \"x-rivet-token\";\n\n// MARK: Manager Gateway Headers\nexport const HEADER_RIVET_TARGET = \"x-rivet-target\";\nexport const HEADER_RIVET_ACTOR = \"x-rivet-actor\";\nexport const HEADER_RIVET_NAMESPACE = \"x-rivet-namespace\";\nexport const HEADER_RIVET_SKIP_READY_WAIT = \"x-rivet-skip-ready-wait\";\n\n// MARK: WebSocket Protocol Prefixes\n/** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */\nexport const WS_PROTOCOL_STANDARD = \"rivet\";\nexport const WS_PROTOCOL_TARGET = \"rivet_target.\";\nexport const WS_PROTOCOL_ACTOR = \"rivet_actor.\";\nexport const WS_PROTOCOL_ENCODING = \"rivet_encoding.\";\nexport const WS_PROTOCOL_CONN_PARAMS = \"rivet_conn_params.\";\nexport const WS_PROTOCOL_TOKEN = \"rivet_token.\";\nexport const WS_PROTOCOL_SKIP_READY_WAIT = \"rivet_skip_ready_wait\";\nexport const WS_PROTOCOL_TEST_ACK_HOOK = \"rivet_test_ack_hook.\";\n\n// MARK: WebSocket Inline Test Protocol Prefixes\nexport const WS_TEST_PROTOCOL_PATH = \"test_path.\";\n\n/**\n * Headers that publics can send from public clients.\n *\n * Used for CORS.\n **/\nexport const ALLOWED_PUBLIC_HEADERS = [\n\t\"Content-Type\",\n\t\"User-Agent\",\n\tHEADER_ACTOR_QUERY,\n\tHEADER_ENCODING,\n\tHEADER_CONN_PARAMS,\n\tHEADER_ACTOR_ID,\n\tHEADER_ACTOR_GENERATION,\n\tHEADER_ACTOR_KEY,\n\tHEADER_RIVET_TARGET,\n\tHEADER_RIVET_ACTOR,\n\tHEADER_RIVET_NAMESPACE,\n\tHEADER_RIVET_TOKEN,\n\tHEADER_RIVET_SKIP_READY_WAIT,\n];\n","import {\n\tINTERNAL_ERROR_CODE,\n\tRivetError,\n\ttype ActorSpecifier,\n\ttype RivetErrorLike,\n\tUserError,\n} from \"@/actor/errors\";\n\nexport class ActorClientError extends Error {}\n\nexport class ManagerError extends ActorClientError {\n\tconstructor(error: string, opts?: ErrorOptions) {\n\t\tsuper(`Manager error: ${error}`, opts);\n\t}\n}\n\nexport class MalformedResponseMessage extends ActorClientError {\n\tconstructor(cause?: unknown) {\n\t\tsuper(`Malformed response message: ${cause}`, { cause });\n\t}\n}\n\nexport { RivetError, RivetError as ActorError, UserError };\nexport type ActorSchedulingError = RivetError;\nexport type { ActorSpecifier, RivetErrorLike };\n\nexport class HttpRequestError extends ActorClientError {\n\tconstructor(message: string, opts?: { cause?: unknown }) {\n\t\tsuper(`HTTP request error: ${message}`, { cause: opts?.cause });\n\t}\n}\n\nexport class ActorConnDisposed extends ActorClientError {\n\tconstructor() {\n\t\tsuper(\"Attempting to interact with a disposed actor connection.\");\n\t}\n}\n\n/**\n * Checks if an error code indicates a scheduling error that may have more details.\n */\nexport function isSchedulingError(group: string, code: string): boolean {\n\treturn (\n\t\tgroup === \"guard\" &&\n\t\t(code === \"actor_ready_timeout\" || code === \"actor_runner_failed\")\n\t);\n}\n\nexport function actorSchedulingError(\n\tgroup: string,\n\tcode: string,\n\tactorId: string,\n\tdetails: unknown,\n): RivetError {\n\treturn new RivetError(\n\t\tgroup,\n\t\tcode,\n\t\t`Actor failed to start (${actorId}): ${JSON.stringify(details)}`,\n\t\t{ metadata: { actorId, details } },\n\t);\n}\n\nexport function internalClientError(\n\tmessage: string,\n\topts?: ErrorOptions,\n): RivetError {\n\treturn new RivetError(\"rivetkit\", INTERNAL_ERROR_CODE, message, {\n\t\tcause: opts?.cause,\n\t});\n}\n","import invariant from \"invariant\";\nimport pRetry, { AbortError } from \"p-retry\";\nimport type { AnyActorDefinition } from \"@/actor/definition\";\nimport { PATH_CONNECT } from \"@/common/actor-router-consts\";\nimport type * as protocol from \"@/common/client-protocol\";\nimport {\n\tCURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,\n\tCLIENT_PROTOCOL_TO_CLIENT,\n\tCLIENT_PROTOCOL_TO_SERVER,\n} from \"@/common/client-protocol-versioned\";\nimport {\n\ttype ToClient as ToClientJson,\n\tToClientSchema,\n\ttype ToServer as ToServerJson,\n\tToServerSchema,\n} from \"@/common/client-protocol-zod\";\nimport {\n\ttype Encoding,\n\tinputDataToBuffer,\n\tjsonStringifyCompat,\n} from \"@/common/encoding\";\nimport { assertUnreachable, stringifyError } from \"@/common/utils\";\nimport type { UniversalWebSocket } from \"@/common/websocket-interface\";\nimport type { EngineControlClient } from \"@/engine-client/driver\";\nimport {\n\tdecodeCborCompat,\n\tdeserializeWithEncoding,\n\tencodeCborCompat,\n\tserializeWithEncoding,\n} from \"@/serde\";\nimport { bufferToArrayBuffer, promiseWithResolvers } from \"@/utils\";\nimport { getLogMessage } from \"@/utils/env-vars\";\nimport type {\n\tActorDefinitionActions,\n\tActorDefinitionEventSubscriptions,\n\tActorDefinitionQueueSend,\n\tActorGatewayOptions,\n\tResolvedActorGatewayOptions,\n} from \"./actor-common\";\nimport { resolveActorGatewayOptions } from \"./actor-common\";\nimport {\n\ttype ActorResolutionState,\n\tcheckForSchedulingError,\n\tgetGatewayTarget,\n\tisDynamicActorQuery,\n\tisStaleResolvedActorError,\n} from \"./actor-query\";\nimport { ACTOR_CONNS_SYMBOL, type ClientRaw } from \"./client\";\nimport * as errors from \"./errors\";\nimport { isRetryableLifecycleReconnectSignal } from \"./lifecycle-errors\";\nimport { logger } from \"./log\";\nimport {\n\tcreateQueueSender,\n\ttype QueueSendNoWaitOptions,\n\ttype QueueSendOptions,\n\ttype QueueSendResult,\n\ttype QueueSendWaitOptions,\n} from \"./queue\";\nimport {\n\ttype WebSocketMessage as ConnMessage,\n\tmessageLength,\n\tparseWebSocketCloseReason,\n} from \"./utils\";\n\ninterface CloseEventLike {\n\tcode?: number;\n\treason?: string;\n\twasClean?: boolean;\n}\n\n/**\n * Connection status for an actor connection.\n *\n * - `\"idle\"`: Not connected, no auto-reconnect (initial state, after dispose, or disabled)\n * - `\"connecting\"`: Attempting to establish connection\n * - `\"connected\"`: Connection is active\n * - `\"disconnected\"`: Connection was lost, will auto-reconnect\n */\nexport type ActorConnStatus =\n\t| \"idle\"\n\t| \"connecting\"\n\t| \"connected\"\n\t| \"disconnected\";\n\ninterface ActionInFlight {\n\tname: string;\n\tresolve: (response: { id: bigint; output: unknown }) => void;\n\treject: (error: Error) => void;\n}\n\ninterface EventSubscriptions<Args extends Array<unknown>> {\n\tcallback: (...args: Args) => void;\n\tonce: boolean;\n}\n\nconst DEFAULT_MAX_INCOMING_MESSAGE_SIZE = 65_536;\n\n/**\n * A function that unsubscribes from an event.\n *\n * @typedef {Function} EventUnsubscribe\n */\nexport type EventUnsubscribe = () => void;\n\n/**\n * A function that handles connection errors.\n *\n * @typedef {Function} ActorErrorCallback\n */\nexport type ActorErrorCallback = (error: errors.ActorError) => void;\n\n/**\n * A callback for connection state changes.\n *\n * @typedef {Function} ConnectionStateCallback\n */\nexport type ConnectionStateCallback = () => void;\n\n/**\n * A callback for connection status changes.\n *\n * @typedef {Function} StatusChangeCallback\n */\nexport type StatusChangeCallback = (status: ActorConnStatus) => void;\n\nexport interface SendHttpMessageOpts {\n\tephemeral: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport const CONNECT_SYMBOL = Symbol(\"connect\");\n\n/**\n * Provides underlying functions for {@link ActorConn}. See {@link ActorConn} for using type-safe remote procedure calls.\n *\n * @see {@link ActorConn}\n */\nexport class ActorConnRaw {\n\t#disposed = false;\n\n\t/* Will be aborted on dispose. */\n\t#abortController = new AbortController();\n\n\t#connStatus: ActorConnStatus = \"idle\";\n\n\t#actorId?: string;\n\t#connId?: string;\n\n\t#messageQueue: Array<{\n\t\tbody:\n\t\t\t| {\n\t\t\t\t\ttag: \"ActionRequest\";\n\t\t\t\t\tval: { id: bigint; name: string; args: unknown };\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\ttag: \"SubscriptionRequest\";\n\t\t\t\t\tval: { eventName: string; subscribe: boolean };\n\t\t\t };\n\t}> = [];\n\t#actionsInFlight = new Map<number, ActionInFlight>();\n\n\t#eventSubscriptions = new Map<string, Set<EventSubscriptions<any[]>>>();\n\n\t#errorHandlers = new Set<ActorErrorCallback>();\n\t#openHandlers = new Set<ConnectionStateCallback>();\n\t#openScheduled = false;\n\t#closeHandlers = new Set<ConnectionStateCallback>();\n\t#statusChangeHandlers = new Set<StatusChangeCallback>();\n\n\t#actionIdCounter = 0;\n\t#queueSender: ReturnType<typeof createQueueSender>;\n\t#readyPromise: ReturnType<typeof promiseWithResolvers<void>>;\n\n\t/**\n\t * Interval that keeps the NodeJS process alive if this is the only thing running.\n\t *\n\t * See ttps://github.com/nodejs/node/issues/22088\n\t */\n\t#keepNodeAliveInterval: NodeJS.Timeout;\n\n\t/** Promise used to indicate the socket has connected successfully. This will be rejected if the connection fails. */\n\t#onOpenPromise?: ReturnType<typeof promiseWithResolvers<undefined>>;\n\n\t#websocket?: UniversalWebSocket;\n\n\t#client: ClientRaw;\n\t#driver: EngineControlClient;\n\t#params: unknown;\n\t#getParams?: () => Promise<unknown>;\n\t#encoding: Encoding;\n\t#actorResolutionState: ActorResolutionState;\n\t#gatewayOptions: ResolvedActorGatewayOptions;\n\n\t// TODO: ws message queue\n\n\t/**\n\t * Do not call this directly.\n\t *\n\t * Creates an instance of ActorConnRaw.\n\t *\n\t * @protected\n\t */\n\tpublic constructor(\n\t\tclient: ClientRaw,\n\t\tdriver: EngineControlClient,\n\t\tparams: unknown,\n\t\tgetParams: (() => Promise<unknown>) | undefined,\n\t\tencoding: Encoding,\n\t\tactorResolutionState: ActorResolutionState,\n\t\tgatewayOptions: ActorGatewayOptions = {},\n\t) {\n\t\tthis.#client = client;\n\t\tthis.#driver = driver;\n\t\tthis.#params = params;\n\t\tthis.#getParams = getParams;\n\t\tthis.#encoding = encoding;\n\t\tthis.#actorResolutionState = actorResolutionState;\n\t\tthis.#gatewayOptions = resolveActorGatewayOptions(gatewayOptions);\n\t\tif (\"getForId\" in actorResolutionState) {\n\t\t\tthis.#actorId = actorResolutionState.getForId.actorId;\n\t\t}\n\t\tthis.#readyPromise = promiseWithResolvers((reason) =>\n\t\t\tlogger().warn({\n\t\t\t\tmsg: \"unhandled ready promise rejection\",\n\t\t\t\treason,\n\t\t\t}),\n\t\t);\n\t\t// Resolve the actor ID for each queue send so key-based connections do\n\t\t// not pin themselves to an earlier resolution.\n\t\tthis.#queueSender = createQueueSender({\n\t\t\tencoding: this.#encoding,\n\t\t\tparams: this.#params,\n\t\t\tcustomFetch: async (request: Request) => {\n\t\t\t\treturn await this.#driver.sendRequest(\n\t\t\t\t\tgetGatewayTarget(this.#actorResolutionState),\n\t\t\t\t\trequest,\n\t\t\t\t\tthis.#gatewayOptions,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tthis.#keepNodeAliveInterval = setInterval(() => 60_000);\n\t}\n\n\t#clearResolvedActorIdentity() {\n\t\tthis.#actorId = undefined;\n\t\tthis.#connId = undefined;\n\t}\n\n\t/**\n\t * If the query is dynamic (getForKey or getOrCreateForKey) and the error\n\t * indicates the previously resolved actor is stale (not_found, starting,\n\t * stopping, or destroyed),\n\t * clear the cached actor ID and connection ID so the next operation\n\t * re-resolves to a fresh actor. Returns true if the identity was\n\t * invalidated.\n\t */\n\t#invalidateActorIfStale(group: string, code: string): boolean {\n\t\tif (\n\t\t\t!isDynamicActorQuery(this.#actorResolutionState) ||\n\t\t\t!isStaleResolvedActorError(group, code)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#clearResolvedActorIdentity();\n\t\treturn true;\n\t}\n\n\t#shouldReconnectForStaleActor(group: string, code: string): boolean {\n\t\treturn (\n\t\t\tisDynamicActorQuery(this.#actorResolutionState) &&\n\t\t\tisStaleResolvedActorError(group, code) &&\n\t\t\tthis.#onOpenPromise !== undefined &&\n\t\t\tthis.#connStatus !== \"connected\"\n\t\t);\n\t}\n\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult>;\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendOptions,\n\t): Promise<QueueSendResult | void> {\n\t\treturn this.#sendQueueMessage(name, body, options as any);\n\t}\n\n\tasync #sendQueueMessage(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendOptions,\n\t): Promise<QueueSendResult | void> {\n\t\treturn await this.#queueSender.send(name, body, options as any);\n\t}\n\n\t/**\n\t * Call a raw action connection. See {@link ActorConn} for type-safe action calls.\n\t *\n\t * @see {@link ActorConn}\n\t * @template Args - The type of arguments to pass to the action function.\n\t * @template Response - The type of the response returned by the action function.\n\t * @param {string} name - The name of the action function to call.\n\t * @param {...Args} args - The arguments to pass to the action function.\n\t * @returns {Promise<Response>} - A promise that resolves to the response of the action function.\n\t */\n\tasync action<\n\t\tArgs extends Array<unknown> = unknown[],\n\t\tResponse = unknown,\n\t>(opts: {\n\t\tname: string;\n\t\targs: Args;\n\t\tsignal?: AbortSignal;\n\t}): Promise<Response> {\n\t\tif (\n\t\t\ttypeof opts === \"string\" ||\n\t\t\ttypeof opts !== \"object\" ||\n\t\t\topts === null ||\n\t\t\t!(\"name\" in opts)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid action call: expected an options object { name, args }, got ${typeof opts}. Use conn.actionName(...args) for the shorthand API.`,\n\t\t\t);\n\t\t}\n\t\tlogger().debug({ msg: \"action\", name: opts.name, args: opts.args });\n\n\t\t// If we have an active connection, use the websockactionId\n\t\tconst actionId = this.#actionIdCounter;\n\t\tthis.#actionIdCounter += 1;\n\n\t\tconst { promise, resolve, reject } = promiseWithResolvers<{\n\t\t\tid: bigint;\n\t\t\toutput: unknown;\n\t\t}>((reason) =>\n\t\t\tlogger().warn({\n\t\t\t\tmsg: \"unhandled action promise rejection\",\n\t\t\t\treason,\n\t\t\t}),\n\t\t);\n\t\tthis.#actionsInFlight.set(actionId, {\n\t\t\tname: opts.name,\n\t\t\tresolve,\n\t\t\treject,\n\t\t});\n\t\tlogger().debug({\n\t\t\tmsg: \"added action to in-flight map\",\n\t\t\tactionId,\n\t\t\tactionName: opts.name,\n\t\t\tinFlightCount: this.#actionsInFlight.size,\n\t\t});\n\n\t\tthis.#sendMessage({\n\t\t\tbody: {\n\t\t\t\ttag: \"ActionRequest\",\n\t\t\t\tval: {\n\t\t\t\t\tid: BigInt(actionId),\n\t\t\t\t\tname: opts.name,\n\t\t\t\t\targs: opts.args,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\t// TODO: Throw error if disconnect is called\n\n\t\tconst { id: responseId, output } = await promise;\n\t\tif (responseId !== BigInt(actionId))\n\t\t\tthrow new Error(\n\t\t\t\t`Request ID ${actionId} does not match response ID ${responseId}`,\n\t\t\t);\n\n\t\treturn output as Response;\n\t}\n\n\t/**\n\t * Do not call this directly.\n\t * Establishes a connection to the server using the specified endpoint & encoding & driver.\n\t *\n\t * @protected\n\t */\n\tpublic [CONNECT_SYMBOL]() {\n\t\tthis.#connectWithRetry();\n\t}\n\n\t#setConnStatus(status: ActorConnStatus) {\n\t\tconst prevStatus = this.#connStatus;\n\t\tif (prevStatus === status) return;\n\t\tthis.#connStatus = status;\n\n\t\t// Notify status change handlers\n\t\tfor (const handler of [...this.#statusChangeHandlers]) {\n\t\t\ttry {\n\t\t\t\thandler(status);\n\t\t\t} catch (err) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"error in status change handler\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Notify open handlers\n\t\tif (status === \"connected\") {\n\t\t\tthis.#readyPromise.resolve(undefined);\n\t\t\tfor (const handler of [...this.#openHandlers]) {\n\t\t\t\ttry {\n\t\t\t\t\thandler();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger().error({\n\t\t\t\t\t\tmsg: \"error in open handler\",\n\t\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Notify close handlers (only if transitioning from Connected to Disconnected or Idle)\n\t\tif (\n\t\t\t(status === \"disconnected\" || status === \"idle\") &&\n\t\t\tprevStatus === \"connected\"\n\t\t) {\n\t\t\tfor (const handler of [...this.#closeHandlers]) {\n\t\t\t\ttry {\n\t\t\t\t\thandler();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger().error({\n\t\t\t\t\t\tmsg: \"error in close handler\",\n\t\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t#connectWithRetry() {\n\t\tthis.#setConnStatus(\"connecting\");\n\n\t\t// Attempt to reconnect indefinitely\n\t\t// This is intentionally not awaited - connection happens in background\n\t\tpRetry(this.#connectAndWait.bind(this), {\n\t\t\tforever: true,\n\t\t\tminTimeout: 250,\n\t\t\tmaxTimeout: 30_000,\n\n\t\t\tonFailedAttempt: (error) => {\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"failed to reconnect\",\n\t\t\t\t\tattempt: error.attemptNumber,\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t// Cancel retry if aborted\n\t\t\tsignal: this.#abortController.signal,\n\t\t}).catch((err) => {\n\t\t\tif (\n\t\t\t\terr instanceof AbortError ||\n\t\t\t\t(err as Error).name === \"AbortError\" ||\n\t\t\t\t!this.#shouldRetryConnectionOpenError(err)\n\t\t\t) {\n\t\t\t\tlogger().info({ msg: \"connection retry aborted\" });\n\t\t\t} else {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"unexpected error in connection retry\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tasync #connectAndWait() {\n\t\ttry {\n\t\t\t// Create promise for open\n\t\t\tif (this.#onOpenPromise)\n\t\t\t\tthrow new Error(\"#onOpenPromise already defined\");\n\t\t\tthis.#onOpenPromise = promiseWithResolvers((reason) =>\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"unhandled open promise rejection\",\n\t\t\t\t\treason,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tawait this.#connectWebSocket();\n\n\t\t\t// Wait for result\n\t\t\tawait this.#onOpenPromise.promise;\n\t\t} catch (error) {\n\t\t\tif (this.#shouldRetryConnectionOpenError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst actorError =\n\t\t\t\terror instanceof errors.ActorError\n\t\t\t\t\t? error\n\t\t\t\t\t: new errors.ActorError(\n\t\t\t\t\t\t\t\"client\",\n\t\t\t\t\t\t\t\"connection_open_failed\",\n\t\t\t\t\t\t\t`Failed to open connection: ${stringifyError(error)}`,\n\t\t\t\t\t\t\t{ error: stringifyError(error) },\n\t\t\t\t\t\t);\n\n\t\t\tthis.#clearQueuedMessages();\n\t\t\tthis.#rejectPendingPromises(actorError, false);\n\t\t\tthis.#dispatchActorError(actorError);\n\t\t\tthis.#setConnStatus(\"idle\");\n\n\t\t\tthrow new AbortError(\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error\n\t\t\t\t\t: new Error(stringifyError(error)),\n\t\t\t);\n\t\t} finally {\n\t\t\tthis.#onOpenPromise = undefined;\n\t\t}\n\t}\n\n\t#shouldRetryConnectionOpenError(error: unknown): boolean {\n\t\tif (error instanceof errors.ActorConnDisposed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\terror instanceof errors.ActorError &&\n\t\t\tthis.#shouldReconnectForStaleActor(error.group, error.code)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\terror instanceof errors.ActorError &&\n\t\t\terror.group === \"client\" &&\n\t\t\terror.code === \"get_params_failed\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn isRetryableLifecycleReconnectSignal(error);\n\t}\n\n\t#clearQueuedMessages() {\n\t\tif (this.#messageQueue.length === 0) return;\n\n\t\tlogger().debug({\n\t\t\tmsg: \"clearing queued connection messages\",\n\t\t\tqueueLength: this.#messageQueue.length,\n\t\t});\n\t\tthis.#messageQueue = [];\n\t}\n\n\tasync #resolveConnectionParams(): Promise<unknown> {\n\t\tif (!this.#getParams) {\n\t\t\treturn this.#params;\n\t\t}\n\n\t\ttry {\n\t\t\treturn await this.#getParams();\n\t\t} catch (err) {\n\t\t\tconst errorMessage = stringifyError(err);\n\t\t\tconst error = new errors.ActorError(\n\t\t\t\t\"client\",\n\t\t\t\t\"get_params_failed\",\n\t\t\t\t`Failed to resolve connection params: ${errorMessage}`,\n\t\t\t\t{ error: errorMessage },\n\t\t\t);\n\n\t\t\tthis.#clearQueuedMessages();\n\t\t\tthis.#rejectPendingPromises(error, false);\n\t\t\tthis.#dispatchActorError(error);\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync #connectWebSocket() {\n\t\tconst params = await this.#resolveConnectionParams();\n\t\tconst target = getGatewayTarget(this.#actorResolutionState);\n\t\tconst ws = await this.#driver.openWebSocket(\n\t\t\tPATH_CONNECT,\n\t\t\ttarget,\n\t\t\tthis.#encoding,\n\t\t\tparams,\n\t\t\tthis.#gatewayOptions,\n\t\t);\n\t\tinvariant(ws, \"websocket should have been created\");\n\t\tlogger().debug({\n\t\t\tmsg: \"opened websocket\",\n\t\t\tconnId: this.#connId,\n\t\t\treadyState: ws.readyState,\n\t\t\tmessageQueueLength: this.#messageQueue.length,\n\t\t});\n\t\tthis.#websocket = ws;\n\t\tws.addEventListener(\"open\", () => {\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"client websocket open\",\n\t\t\t\tconnId: this.#connId,\n\t\t\t});\n\t\t});\n\t\tws.addEventListener(\"message\", async (ev: { data: ConnMessage }) => {\n\t\t\ttry {\n\t\t\t\tawait this.#handleOnMessage(ev.data);\n\t\t\t} catch (err) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"error in websocket message handler\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tws.addEventListener(\"close\", async (ev: Event | CloseEventLike) => {\n\t\t\ttry {\n\t\t\t\tawait this.#handleOnClose(ev);\n\t\t\t} catch (err) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"error in websocket close handler\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tws.addEventListener(\"error\", () => {\n\t\t\ttry {\n\t\t\t\tthis.#handleOnError();\n\t\t\t} catch (err) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"error in websocket error handler\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Called by the onopen event from drivers. */\n\t#handleOnOpen() {\n\t\t// Connection was disposed before Init message arrived - close the websocket to avoid leak\n\t\tif (this.#disposed) {\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"handleOnOpen called after dispose, closing websocket\",\n\t\t\t});\n\t\t\tif (this.#websocket) {\n\t\t\t\tthis.#websocket.close(1000, \"Disposed\");\n\t\t\t\tthis.#websocket = undefined;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#connStatus === \"connected\" || this.#openScheduled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.#openScheduled = true;\n\n\t\tqueueMicrotask(() => {\n\t\t\tthis.#openScheduled = false;\n\t\t\tif (this.#disposed) {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"handleOnOpen scheduled after dispose, closing websocket\",\n\t\t\t\t});\n\t\t\t\tif (this.#websocket) {\n\t\t\t\t\tthis.#websocket.close(1000, \"Disposed\");\n\t\t\t\t\tthis.#websocket = undefined;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"socket open\",\n\t\t\t\tmessageQueueLength: this.#messageQueue.length,\n\t\t\t\tconnId: this.#connId,\n\t\t\t});\n\n\t\t\t// Update connection state (this also notifies handlers)\n\t\t\tthis.#setConnStatus(\"connected\");\n\n\t\t\t// Resolve open promise\n\t\t\tif (this.#onOpenPromise) {\n\t\t\t\tthis.#onOpenPromise.resolve(undefined);\n\t\t\t} else {\n\t\t\t\tlogger().warn({ msg: \"#onOpenPromise is undefined\" });\n\t\t\t}\n\n\t\t\t// Resubscribe to all active events\n\t\t\tfor (const eventName of this.#eventSubscriptions.keys()) {\n\t\t\t\tthis.#sendSubscription(eventName, true);\n\t\t\t}\n\n\t\t\t// Flush queue\n\t\t\t//\n\t\t\t// If the message fails to send, the message will be re-queued\n\t\t\tconst queue = this.#messageQueue;\n\t\t\tthis.#messageQueue = [];\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"flushing message queue\",\n\t\t\t\tqueueLength: queue.length,\n\t\t\t});\n\t\t\tfor (const msg of queue) {\n\t\t\t\tthis.#sendMessage(msg);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Called by the onmessage event from drivers. */\n\tasync #handleOnMessage(data: any) {\n\t\tlogger().trace({\n\t\t\tmsg: \"received message\",\n\t\t\tdataType: typeof data,\n\t\t\tisBlob: data instanceof Blob,\n\t\t\tisArrayBuffer: data instanceof ArrayBuffer,\n\t\t});\n\n\t\tconst response = await this.#parseMessage(data as ConnMessage);\n\t\tlogger().trace(\n\t\t\tgetLogMessage()\n\t\t\t\t? {\n\t\t\t\t\t\tmsg: \"parsed message\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\tjsonStringifyCompat(response).substring(0, 100) +\n\t\t\t\t\t\t\t\"...\",\n\t\t\t\t\t}\n\t\t\t\t: { msg: \"parsed message\" },\n\t\t);\n\n\t\tif (response.body.tag === \"Init\") {\n\t\t\t// Store connection info\n\t\t\tthis.#actorId = response.body.val.actorId;\n\t\t\tthis.#connId = response.body.val.connectionId;\n\t\t\tlogger().trace({\n\t\t\t\tmsg: \"received init message\",\n\t\t\t\tactorId: this.#actorId,\n\t\t\t\tconnId: this.#connId,\n\t\t\t});\n\t\t\tthis.#handleOnOpen();\n\t\t} else if (response.body.tag === \"Error\") {\n\t\t\t// Connection error\n\t\t\tconst { group, code, message, metadata, actionId, actor } =\n\t\t\t\tresponse.body.val;\n\n\t\t\tif (actionId !== null) {\n\t\t\t\tconst inFlight = this.#takeActionInFlight(Number(actionId));\n\t\t\t\tthis.#invalidateActorIfStale(group, code);\n\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"action error\",\n\t\t\t\t\tactionId: actionId,\n\t\t\t\t\tactionName: inFlight?.name,\n\t\t\t\t\tgroup,\n\t\t\t\t\tcode,\n\t\t\t\t\tmessage,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tactorId: actor?.actorId,\n\t\t\t\t\tgeneration: actor?.generation,\n\t\t\t\t\tactorKey: actor?.key,\n\t\t\t\t});\n\n\t\t\t\tinFlight.reject(\n\t\t\t\t\tnew errors.ActorError(group, code, message, {\n\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\tactor,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"connection error\",\n\t\t\t\t\tgroup,\n\t\t\t\t\tcode,\n\t\t\t\t\tmessage,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tactorId: actor?.actorId,\n\t\t\t\t\tgeneration: actor?.generation,\n\t\t\t\t\tactorKey: actor?.key,\n\t\t\t\t});\n\n\t\t\t\tif (this.#shouldReconnectForStaleActor(group, code)) {\n\t\t\t\t\tthis.#clearResolvedActorIdentity();\n\t\t\t\t\tthis.#onOpenPromise?.reject(\n\t\t\t\t\t\tnew errors.ActorError(group, code, message, {\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\tactor,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check if this is an actor scheduling error and try to get more details\n\t\t\t\tlet errorToThrow = new errors.ActorError(\n\t\t\t\t\tgroup,\n\t\t\t\t\tcode,\n\t\t\t\t\tmessage,\n\t\t\t\t\t{ metadata, actor },\n\t\t\t\t);\n\t\t\t\tif (errors.isSchedulingError(group, code) && this.#actorId) {\n\t\t\t\t\tconst schedulingError = await checkForSchedulingError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tthis.#actorId,\n\t\t\t\t\t\tthis.#actorResolutionState,\n\t\t\t\t\t\tthis.#driver,\n\t\t\t\t\t);\n\t\t\t\t\tif (schedulingError) {\n\t\t\t\t\t\terrorToThrow = schedulingError;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we have an onOpenPromise, reject it with the error\n\t\t\t\tif (this.#onOpenPromise) {\n\t\t\t\t\tthis.#onOpenPromise.reject(errorToThrow);\n\t\t\t\t}\n\n\t\t\t\tthis.#invalidateActorIfStale(group, code);\n\n\t\t\t\t// Reject any in-flight requests\n\t\t\t\tfor (const [id, inFlight] of this.#actionsInFlight.entries()) {\n\t\t\t\t\tinFlight.reject(errorToThrow);\n\t\t\t\t\tthis.#actionsInFlight.delete(id);\n\t\t\t\t}\n\n\t\t\t\tthis.#dispatchActorError(errorToThrow);\n\t\t\t}\n\t\t} else if (response.body.tag === \"ActionResponse\") {\n\t\t\t// Action response OK\n\t\t\tconst { id: actionId } = response.body.val;\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"received action response\",\n\t\t\t\tactionId: Number(actionId),\n\t\t\t\tinFlightCount: this.#actionsInFlight.size,\n\t\t\t\tinFlightIds: Array.from(this.#actionsInFlight.keys()),\n\t\t\t});\n\n\t\t\tconst inFlight = this.#takeActionInFlight(Number(actionId));\n\t\t\tlogger().trace({\n\t\t\t\tmsg: \"resolving action promise\",\n\t\t\t\tactionId,\n\t\t\t\tactionName: inFlight?.name,\n\t\t\t});\n\t\t\tinFlight.resolve(response.body.val);\n\t\t} else if (response.body.tag === \"Event\") {\n\t\t\tlogger().trace({\n\t\t\t\tmsg: \"received event\",\n\t\t\t\tname: response.body.val.name,\n\t\t\t});\n\t\t\tthis.#dispatchEvent(response.body.val);\n\t\t} else {\n\t\t\tassertUnreachable(response.body);\n\t\t}\n\t}\n\n\t/** Called by the onclose event from drivers. */\n\tasync #handleOnClose(event: Event | CloseEventLike) {\n\t\t// We can't use `event instanceof CloseEvent` because it's not defined in NodeJS\n\t\tconst closeEvent = event as CloseEventLike;\n\t\tconst wasClean = closeEvent.wasClean;\n\t\tconst wasConnected = this.#connStatus === \"connected\";\n\n\t\tlogger().info({\n\t\t\tmsg: \"socket closed\",\n\t\t\tcode: closeEvent.code,\n\t\t\treason: closeEvent.reason,\n\t\t\twasClean,\n\t\t\tdisposed: this.#disposed,\n\t\t\tconnId: this.#connId,\n\t\t});\n\n\t\tthis.#websocket = undefined;\n\n\t\tif (this.#disposed) {\n\t\t\t// Use ActorConnDisposed error and prevent unhandled rejection\n\t\t\tthis.#rejectPendingPromises(new errors.ActorConnDisposed(), true);\n\t\t} else {\n\t\t\tthis.#setConnStatus(\"disconnected\");\n\n\t\t\t// Build error from close event\n\t\t\tlet error: Error;\n\t\t\tconst reason = closeEvent.reason || \"\";\n\t\t\tconst parsed = parseWebSocketCloseReason(reason);\n\n\t\t\tif (parsed) {\n\t\t\t\tconst { group, code } = parsed;\n\n\t\t\t\tif (this.#shouldReconnectForStaleActor(group, code)) {\n\t\t\t\t\tthis.#clearResolvedActorIdentity();\n\t\t\t\t\tthis.#onOpenPromise?.reject(\n\t\t\t\t\t\tnew errors.ActorError(\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\t`Connection closed: ${reason}`,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check if this is a scheduling error\n\t\t\t\tif (errors.isSchedulingError(group, code) && this.#actorId) {\n\t\t\t\t\tconst schedulingError = await checkForSchedulingError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tthis.#actorId,\n\t\t\t\t\t\tthis.#actorResolutionState,\n\t\t\t\t\t\tthis.#driver,\n\t\t\t\t\t);\n\t\t\t\t\tif (schedulingError) {\n\t\t\t\t\t\terror = schedulingError;\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror = new errors.ActorError(\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\t`Connection closed: ${reason}`,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\terror = new errors.ActorError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\t`Connection closed: ${reason}`,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthis.#invalidateActorIfStale(group, code);\n\t\t\t} else {\n\t\t\t\t// Default error for non-structured close reasons\n\t\t\t\terror = new Error(\n\t\t\t\t\t`${wasClean ? \"Connection closed\" : \"Connection lost\"} (code: ${closeEvent.code}, reason: ${reason})`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.#rejectPendingPromises(error, false);\n\n\t\t\t// Dispatch to error handler if it's an ActorError\n\t\t\tif (error instanceof errors.ActorError) {\n\t\t\t\tthis.#dispatchActorError(error);\n\t\t\t}\n\n\t\t\t// Automatically reconnect if we were connected\n\t\t\tif (wasConnected) {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"triggering reconnect\",\n\t\t\t\t\tconnId: this.#connId,\n\t\t\t\t});\n\t\t\t\tthis.#connectWithRetry();\n\t\t\t}\n\t\t}\n\t}\n\n\t#rejectPendingPromises(error: Error, suppressUnhandled: boolean) {\n\t\tif (this.#onOpenPromise) {\n\t\t\tif (suppressUnhandled) {\n\t\t\t\tthis.#onOpenPromise.promise.catch(() => {});\n\t\t\t}\n\t\t\tthis.#onOpenPromise.reject(error);\n\t\t}\n\n\t\tfor (const actionInfo of this.#actionsInFlight.values()) {\n\t\t\tactionInfo.reject(error);\n\t\t}\n\t\tthis.#actionsInFlight.clear();\n\t}\n\n\t/** Called by the onerror event from drivers. */\n\t#handleOnError() {\n\t\tif (this.#disposed) return;\n\n\t\t// More detailed information will be logged in onclose\n\t\tlogger().warn(\"socket error\");\n\t}\n\n\t#takeActionInFlight(id: number): ActionInFlight {\n\t\tconst inFlight = this.#actionsInFlight.get(id);\n\t\tif (!inFlight) {\n\t\t\tlogger().error({\n\t\t\t\tmsg: \"action not found in in-flight map\",\n\t\t\t\tlookupId: id,\n\t\t\t\tinFlightCount: this.#actionsInFlight.size,\n\t\t\t\tinFlightIds: Array.from(this.#actionsInFlight.keys()),\n\t\t\t\tinFlightActions: Array.from(\n\t\t\t\t\tthis.#actionsInFlight.entries(),\n\t\t\t\t).map(([id, action]) => ({\n\t\t\t\t\tid,\n\t\t\t\t\tname: action.name,\n\t\t\t\t})),\n\t\t\t});\n\t\t\tthrow errors.internalClientError(`No in flight response for ${id}`);\n\t\t}\n\t\tthis.#actionsInFlight.delete(id);\n\t\tlogger().debug({\n\t\t\tmsg: \"removed action from in-flight map\",\n\t\t\tactionId: id,\n\t\t\tactionName: inFlight.name,\n\t\t\tinFlightCount: this.#actionsInFlight.size,\n\t\t});\n\t\treturn inFlight;\n\t}\n\n\t#dispatchEvent(event: { name: string; args: unknown }) {\n\t\tconst { name, args } = event;\n\n\t\tconst listeners = this.#eventSubscriptions.get(name);\n\t\tif (!listeners) return;\n\n\t\t// Create a new array to avoid issues with listeners being removed during iteration\n\t\tfor (const listener of [...listeners]) {\n\t\t\tlistener.callback(...(args as unknown[]));\n\n\t\t\t// Remove if this was a one-time listener\n\t\t\tif (listener.once) {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t}\n\t\t}\n\n\t\t// Clean up empty listener sets\n\t\tif (listeners.size === 0) {\n\t\t\tthis.#eventSubscriptions.delete(name);\n\t\t}\n\t}\n\n\t#dispatchActorError(error: errors.ActorError) {\n\t\t// Call all registered error handlers\n\t\tfor (const handler of [...this.#errorHandlers]) {\n\t\t\ttry {\n\t\t\t\thandler(error);\n\t\t\t} catch (err) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"error in connection error handler\",\n\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t#addEventSubscription<Args extends Array<unknown>>(\n\t\teventName: string,\n\t\tcallback: (...args: Args) => void,\n\t\tonce: boolean,\n\t): EventUnsubscribe {\n\t\tconst listener: EventSubscriptions<Args> = {\n\t\t\tcallback,\n\t\t\tonce,\n\t\t};\n\n\t\tlet subscriptionSet = this.#eventSubscriptions.get(eventName);\n\t\tif (subscriptionSet === undefined) {\n\t\t\tsubscriptionSet = new Set();\n\t\t\tthis.#eventSubscriptions.set(eventName, subscriptionSet);\n\t\t\tthis.#sendSubscription(eventName, true);\n\t\t}\n\t\tsubscriptionSet.add(listener);\n\n\t\t// Return unsubscribe function\n\t\treturn () => {\n\t\t\tconst listeners = this.#eventSubscriptions.get(eventName);\n\t\t\tif (listeners) {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t\tif (listeners.size === 0) {\n\t\t\t\t\tthis.#eventSubscriptions.delete(eventName);\n\t\t\t\t\tthis.#sendSubscription(eventName, false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Subscribes to an event that will happen repeatedly.\n\t *\n\t * @template Args - The type of arguments the event callback will receive.\n\t * @param {string} eventName - The name of the event to subscribe to.\n\t * @param {(...args: Args) => void} callback - The callback function to execute when the event is triggered.\n\t * @returns {EventUnsubscribe} - A function to unsubscribe from the event.\n\t * @see {@link https://rivet.dev/docs/events|Events Documentation}\n\t */\n\ton<Args extends Array<unknown> = unknown[]>(\n\t\teventName: string,\n\t\tcallback: (...args: Args) => void,\n\t): EventUnsubscribe {\n\t\treturn this.#addEventSubscription<Args>(eventName, callback, false);\n\t}\n\n\t/**\n\t * Subscribes to an event that will be triggered only once.\n\t *\n\t * @template Args - The type of arguments the event callback will receive.\n\t * @param {string} eventName - The name of the event to subscribe to.\n\t * @param {(...args: Args) => void} callback - The callback function to execute when the event is triggered.\n\t * @returns {EventUnsubscribe} - A function to unsubscribe from the event.\n\t * @see {@link https://rivet.dev/docs/events|Events Documentation}\n\t */\n\tonce<Args extends Array<unknown> = unknown[]>(\n\t\teventName: string,\n\t\tcallback: (...args: Args) => void,\n\t): EventUnsubscribe {\n\t\treturn this.#addEventSubscription<Args>(eventName, callback, true);\n\t}\n\n\t/**\n\t * Subscribes to connection errors.\n\t *\n\t * @param {ActorErrorCallback} callback - The callback function to execute when a connection error occurs.\n\t * @returns {() => void} - A function to unsubscribe from the error handler.\n\t */\n\tonError(callback: ActorErrorCallback): () => void {\n\t\tthis.#errorHandlers.add(callback);\n\n\t\t// Return unsubscribe function\n\t\treturn () => {\n\t\t\tthis.#errorHandlers.delete(callback);\n\t\t};\n\t}\n\n\t/**\n\t * Returns the current connection status.\n\t *\n\t * @returns {ActorConnStatus} - The current connection status.\n\t */\n\tget connStatus(): ActorConnStatus {\n\t\treturn this.#connStatus;\n\t}\n\n\t/**\n\t * Returns whether the connection is currently open.\n\t *\n\t * @deprecated Use `connStatus` instead.\n\t * @returns {boolean} - True if the connection is open, false otherwise.\n\t */\n\tget isConnected(): boolean {\n\t\treturn this.#connStatus === \"connected\";\n\t}\n\n\t/**\n\t * Resolves when this connection first reaches the connected state.\n\t */\n\tget ready(): Promise<void> {\n\t\treturn this.#readyPromise.promise;\n\t}\n\n\t/**\n\t * Subscribes to connection open events.\n\t *\n\t * This is called when the WebSocket connection is established and the Init message is received.\n\t *\n\t * @param {ConnectionStateCallback} callback - The callback function to execute when the connection opens.\n\t * @returns {() => void} - A function to unsubscribe from the open handler.\n\t */\n\tonOpen(callback: ConnectionStateCallback): () => void {\n\t\tthis.#openHandlers.add(callback);\n\n\t\tif (this.#connStatus === \"connected\") {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (!this.#openHandlers.has(callback)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcallback();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlogger().error({\n\t\t\t\t\t\tmsg: \"error in open handler\",\n\t\t\t\t\t\terror: stringifyError(err),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Return unsubscribe function\n\t\treturn () => {\n\t\t\tthis.#openHandlers.delete(callback);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribes to connection close events.\n\t *\n\t * This is called when the WebSocket connection is closed. The connection will automatically\n\t * attempt to reconnect unless disposed.\n\t *\n\t * @param {ConnectionStateCallback} callback - The callback function to execute when the connection closes.\n\t * @returns {() => void} - A function to unsubscribe from the close handler.\n\t */\n\tonClose(callback: ConnectionStateCallback): () => void {\n\t\tthis.#closeHandlers.add(callback);\n\n\t\t// Return unsubscribe function\n\t\treturn () => {\n\t\t\tthis.#closeHandlers.delete(callback);\n\t\t};\n\t}\n\n\t/**\n\t * Subscribes to connection status changes.\n\t *\n\t * This is called whenever the connection status changes between Disconnected, Connecting, and Connected.\n\t *\n\t * @param {StatusChangeCallback} callback - The callback function to execute when the status changes.\n\t * @returns {() => void} - A function to unsubscribe from the status change handler.\n\t */\n\tonStatusChange(callback: StatusChangeCallback): () => void {\n\t\tthis.#statusChangeHandlers.add(callback);\n\n\t\t// Return unsubscribe function\n\t\treturn () => {\n\t\t\tthis.#statusChangeHandlers.delete(callback);\n\t\t};\n\t}\n\n\t#sendMessage(\n\t\tmessage: {\n\t\t\tbody:\n\t\t\t\t| {\n\t\t\t\t\t\ttag: \"ActionRequest\";\n\t\t\t\t\t\tval: { id: bigint; name: string; args: unknown };\n\t\t\t\t }\n\t\t\t\t| {\n\t\t\t\t\t\ttag: \"SubscriptionRequest\";\n\t\t\t\t\t\tval: { eventName: string; subscribe: boolean };\n\t\t\t\t };\n\t\t},\n\t\topts?: SendHttpMessageOpts,\n\t) {\n\t\tif (this.#disposed) {\n\t\t\tif (opts?.ephemeral) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthrow new errors.ActorConnDisposed();\n\t\t\t}\n\t\t}\n\n\t\tlet queueMessage = false;\n\t\tif (this.#websocket) {\n\t\t\tconst readyState = this.#websocket.readyState;\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"websocket send attempt\",\n\t\t\t\treadyState,\n\t\t\t\treadyStateString:\n\t\t\t\t\treadyState === 0\n\t\t\t\t\t\t? \"CONNECTING\"\n\t\t\t\t\t\t: readyState === 1\n\t\t\t\t\t\t\t? \"OPEN\"\n\t\t\t\t\t\t\t: readyState === 2\n\t\t\t\t\t\t\t\t? \"CLOSING\"\n\t\t\t\t\t\t\t\t: \"CLOSED\",\n\t\t\t\tconnId: this.#connId,\n\t\t\t\tmessageType: (message.body as any).tag,\n\t\t\t\tactionName: (message.body as any).val?.name,\n\t\t\t});\n\t\t\tif (this.#connStatus !== \"connected\") {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"websocket init pending, queueing message\",\n\t\t\t\t\tconnStatus: this.#connStatus,\n\t\t\t\t\tmessageType: (message.body as any).tag,\n\t\t\t\t});\n\t\t\t\tqueueMessage = true;\n\t\t\t} else if (readyState === 1) {\n\t\t\t\ttry {\n\t\t\t\t\tconst messageSerialized = serializeWithEncoding(\n\t\t\t\t\t\tthis.#encoding,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tCLIENT_PROTOCOL_TO_SERVER,\n\t\t\t\t\t\tCLIENT_PROTOCOL_CURRENT_VERSION,\n\t\t\t\t\t\tToServerSchema,\n\t\t\t\t\t\t// JSON: args is the raw value\n\t\t\t\t\t\t(msg): ToServerJson => msg as ToServerJson,\n\t\t\t\t\t\t// BARE: args needs to be CBOR-encoded to ArrayBuffer\n\t\t\t\t\t\t(msg): protocol.ToServer => {\n\t\t\t\t\t\t\tif (msg.body.tag === \"ActionRequest\") {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\t\ttag: \"ActionRequest\",\n\t\t\t\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\t\t\t\tid: msg.body.val.id,\n\t\t\t\t\t\t\t\t\t\t\tname: msg.body.val.name,\n\t\t\t\t\t\t\t\t\t\t\targs: bufferToArrayBuffer(\n\t\t\t\t\t\t\t\t\t\t\t\tencodeCborCompat(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmsg.body.val.args,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn msg as protocol.ToServer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tconst serializedLength = messageLength(messageSerialized);\n\t\t\t\t\tif (\n\t\t\t\t\t\tserializedLength > DEFAULT_MAX_INCOMING_MESSAGE_SIZE &&\n\t\t\t\t\t\tmessage.body.tag === \"ActionRequest\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst actionId = Number(message.body.val.id);\n\t\t\t\t\t\tconst inFlight = this.#takeActionInFlight(actionId);\n\t\t\t\t\t\tconst error = new errors.ActorError(\n\t\t\t\t\t\t\t\"message\",\n\t\t\t\t\t\t\t\"incoming_too_long\",\n\t\t\t\t\t\t\t\"Incoming message too long\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmaxSize: DEFAULT_MAX_INCOMING_MESSAGE_SIZE,\n\t\t\t\t\t\t\t\tactualSize: serializedLength,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\t\tmsg: \"rejecting oversized connection action request\",\n\t\t\t\t\t\t\tactionId,\n\t\t\t\t\t\t\tactionName: inFlight.name,\n\t\t\t\t\t\t\tactualSize: serializedLength,\n\t\t\t\t\t\t\tmaxSize: DEFAULT_MAX_INCOMING_MESSAGE_SIZE,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tinFlight.reject(error);\n\t\t\t\t\t\tthis.#dispatchActorError(error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.#websocket.send(messageSerialized);\n\t\t\t\t\tlogger().trace({\n\t\t\t\t\t\tmsg: \"sent websocket message\",\n\t\t\t\t\t\tlen: serializedLength,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\tmsg: \"failed to send message, added to queue\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tconnId: this.#connId,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Assuming the socket is disconnected and will be reconnected soon\n\t\t\t\t\tqueueMessage = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"websocket not open, queueing message\",\n\t\t\t\t\treadyState,\n\t\t\t\t});\n\t\t\t\tqueueMessage = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// No websocket connected yet\n\t\t\tlogger().debug({ msg: \"no websocket, queueing message\" });\n\t\t\tqueueMessage = true;\n\t\t}\n\n\t\tif (!opts?.ephemeral && queueMessage) {\n\t\t\tthis.#messageQueue.push(message);\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"queued connection message\",\n\t\t\t\tqueueLength: this.#messageQueue.length,\n\t\t\t\tconnId: this.#connId,\n\t\t\t\tmessageType: (message.body as any).tag,\n\t\t\t\tactionName: (message.body as any).val?.name,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync #parseMessage(data: ConnMessage): Promise<{\n\t\tbody:\n\t\t\t| { tag: \"Init\"; val: { actorId: string; connectionId: string } }\n\t\t\t| {\n\t\t\t\t\ttag: \"Error\";\n\t\t\t\t\tval: {\n\t\t\t\t\t\tgroup: string;\n\t\t\t\t\t\tcode: string;\n\t\t\t\t\t\tmessage: string;\n\t\t\t\t\t\tmetadata: unknown;\n\t\t\t\t\t\tactionId: bigint | null;\n\t\t\t\t\t\tactor?: errors.ActorSpecifier;\n\t\t\t\t\t};\n\t\t\t }\n\t\t\t| { tag: \"ActionResponse\"; val: { id: bigint; output: unknown } }\n\t\t\t| { tag: \"Event\"; val: { name: string; args: unknown } };\n\t}> {\n\t\tinvariant(this.#websocket, \"websocket must be defined\");\n\n\t\tconst buffer = await inputDataToBuffer(data);\n\n\t\treturn deserializeWithEncoding(\n\t\t\tthis.#encoding,\n\t\t\tbuffer,\n\t\t\tCLIENT_PROTOCOL_TO_CLIENT,\n\t\t\tToClientSchema,\n\t\t\t// JSON/CBOR: normalize actor generation to the public number shape.\n\t\t\t(msg): any => {\n\t\t\t\tif (msg.body.tag !== \"Error\" || !msg.body.val.actor) {\n\t\t\t\t\treturn msg as ToClientJson;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tbody: {\n\t\t\t\t\t\ttag: \"Error\",\n\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t...msg.body.val,\n\t\t\t\t\t\t\tactor: {\n\t\t\t\t\t\t\t\t...msg.body.val.actor,\n\t\t\t\t\t\t\t\tgeneration: Number(\n\t\t\t\t\t\t\t\t\tmsg.body.val.actor.generation,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\t// BARE: need to decode ArrayBuffer fields back to unknown\n\t\t\t(msg): any => {\n\t\t\t\tif (msg.body.tag === \"Error\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"Error\",\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\tgroup: msg.body.val.group,\n\t\t\t\t\t\t\t\tcode: msg.body.val.code,\n\t\t\t\t\t\t\t\tmessage: msg.body.val.message,\n\t\t\t\t\t\t\t\tmetadata: msg.body.val.metadata\n\t\t\t\t\t\t\t\t\t? decodeCborCompat(\n\t\t\t\t\t\t\t\t\t\t\tnew Uint8Array(\n\t\t\t\t\t\t\t\t\t\t\t\tmsg.body.val.metadata,\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\tactionId: msg.body.val.actionId,\n\t\t\t\t\t\t\t\tactor: msg.body.val.actor\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tactorId: msg.body.val.actor.actorId,\n\t\t\t\t\t\t\t\t\t\t\tgeneration: Number(\n\t\t\t\t\t\t\t\t\t\t\t\tmsg.body.val.actor.generation,\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\t\t\t\t\tmsg.body.val.actor.key ??\n\t\t\t\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} else if (msg.body.tag === \"ActionResponse\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"ActionResponse\",\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\tid: msg.body.val.id,\n\t\t\t\t\t\t\t\toutput: decodeCborCompat(\n\t\t\t\t\t\t\t\t\tnew Uint8Array(msg.body.val.output),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} else if (msg.body.tag === \"Event\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"Event\",\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\tname: msg.body.val.name,\n\t\t\t\t\t\t\t\targs: decodeCborCompat(\n\t\t\t\t\t\t\t\t\tnew Uint8Array(msg.body.val.args),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\t// Init has no ArrayBuffer fields\n\t\t\t\t\treturn msg;\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Get the actor ID (for testing purposes).\n\t * @internal\n\t */\n\tget actorId(): string | undefined {\n\t\treturn this.#actorId;\n\t}\n\n\t/**\n\t * Get the connection ID (for testing purposes).\n\t * @internal\n\t */\n\tget connId(): string | undefined {\n\t\treturn this.#connId;\n\t}\n\n\t/**\n\t * Get the connection ID (for testing purposes).\n\t * @internal\n\t * @deprecated Use `connId` instead.\n\t */\n\tget connectionId(): string | undefined {\n\t\treturn this.#connId;\n\t}\n\n\t/**\n\t * Disconnects from the actor.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when the socket is gracefully closed.\n\t */\n\tasync dispose(): Promise<void> {\n\t\t// Internally, this \"disposes\" the connection\n\n\t\tif (this.#disposed) {\n\t\t\tlogger().warn({ msg: \"connection already disconnected\" });\n\t\t\treturn;\n\t\t}\n\t\tthis.#disposed = true;\n\n\t\tlogger().debug({ msg: \"disposing actor conn\" });\n\n\t\t// Set status to Idle (intentionally closed, no auto-reconnect)\n\t\tthis.#setConnStatus(\"idle\");\n\n\t\t// Clear interval so NodeJS process can exit\n\t\tclearInterval(this.#keepNodeAliveInterval);\n\n\t\t// Abort retry loop\n\t\tthis.#abortController.abort();\n\n\t\t// Remove from registry\n\t\tthis.#client[ACTOR_CONNS_SYMBOL].delete(this);\n\n\t\t// Close websocket (#handleOnClose will reject pending promises)\n\t\tif (this.#websocket) {\n\t\t\tconst ws = this.#websocket;\n\t\t\tif (\n\t\t\t\tws.readyState !== 2 /* CLOSING */ &&\n\t\t\t\tws.readyState !== 3 /* CLOSED */\n\t\t\t) {\n\t\t\t\tconst { promise, resolve } = promiseWithResolvers((reason) =>\n\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\tmsg: \"unhandled websocket close promise rejection\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tws.addEventListener(\"close\", () => resolve(undefined));\n\t\t\t\tws.close(1000, \"Disposed\");\n\t\t\t\tawait promise;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.#rejectPendingPromises(new errors.ActorConnDisposed(), true);\n\t\t}\n\t\tthis.#websocket = undefined;\n\t}\n\n\t#sendSubscription(eventName: string, subscribe: boolean) {\n\t\tthis.#sendMessage(\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\ttag: \"SubscriptionRequest\",\n\t\t\t\t\tval: {\n\t\t\t\t\t\teventName,\n\t\t\t\t\t\tsubscribe,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{ ephemeral: true },\n\t\t);\n\t}\n}\n\n/**\n * Connection to a actor. Allows calling actor's remote procedure calls with inferred types. See {@link ActorConnRaw} for underlying methods.\n *\n * @example\n * ```\n * const room = client.connect<ChatRoom>(...etc...);\n * // This calls the action named `sendMessage` on the `ChatRoom` actor.\n * await room.sendMessage('Hello, world!');\n * ```\n *\n * Private methods (e.g. those starting with `_`) are automatically excluded.\n *\n * @template AD The actor class that this connection is for.\n * @see {@link ActorConnRaw}\n */\nexport type ActorConn<AD extends AnyActorDefinition> = Omit<\n\tActorConnRaw,\n\t\"send\" | \"on\" | \"once\"\n> &\n\tActorDefinitionQueueSend<AD> &\n\tActorDefinitionEventSubscriptions<AD> &\n\tActorDefinitionActions<AD>;\n","import { createVersionedDataHandler } from \"vbare\";\nimport * as v1 from \"./bare/generated/client-protocol/v1\";\nimport * as v2 from \"./bare/generated/client-protocol/v2\";\nimport * as v3 from \"./bare/generated/client-protocol/v3\";\nimport * as v4 from \"./bare/generated/client-protocol/v4\";\n\nexport const CURRENT_VERSION = 4;\n\n// Converter from v1 to v2: Remove connectionToken from Init message\nconst v1ToV2 = (v1Data: v1.ToClient): v2.ToClient => {\n\t// Handle Init message specifically to remove connectionToken\n\tif (v1Data.body.tag === \"Init\") {\n\t\tconst { actorId, connectionId } = v1Data.body.val as v1.Init;\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttag: \"Init\",\n\t\t\t\tval: {\n\t\t\t\t\tactorId,\n\t\t\t\t\tconnectionId,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\t// All other messages are unchanged\n\treturn v1Data as unknown as v2.ToClient;\n};\n\n// Converter from v2 to v1: Add empty connectionToken to Init message\nconst v2ToV1 = (v2Data: v2.ToClient): v1.ToClient => {\n\t// Handle Init message specifically to add connectionToken\n\tif (v2Data.body.tag === \"Init\") {\n\t\tconst { actorId, connectionId } = v2Data.body.val;\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttag: \"Init\",\n\t\t\t\tval: {\n\t\t\t\t\tactorId,\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tconnectionToken: \"\", // Add empty connectionToken for v1 compatibility\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\t// All other messages are unchanged\n\treturn v2Data as unknown as v1.ToClient;\n};\n\n// Converter from v2 to v3: No changes needed for ToClient.\nconst v2ToV3 = (v2Data: v2.ToClient): v3.ToClient => {\n\treturn v2Data as unknown as v3.ToClient;\n};\n\nconst v3ToV4 = (v3Data: v3.ToClient): v4.ToClient => {\n\tif (v3Data.body.tag === \"Error\") {\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttag: \"Error\",\n\t\t\t\tval: {\n\t\t\t\t\t...v3Data.body.val,\n\t\t\t\t\tactor: null,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\treturn v3Data as unknown as v4.ToClient;\n};\n\nconst v4ToV3 = (v4Data: v4.ToClient): v3.ToClient => {\n\tif (v4Data.body.tag === \"Error\") {\n\t\tconst { actor: _, ...val } = v4Data.body.val;\n\t\treturn {\n\t\t\tbody: {\n\t\t\t\ttag: \"Error\",\n\t\t\t\tval,\n\t\t\t},\n\t\t};\n\t}\n\treturn v4Data as unknown as v3.ToClient;\n};\n\n// Converter from v3 to v2: No changes needed for ToClient.\nconst v3ToV2 = (v3Data: v3.ToClient): v2.ToClient => {\n\treturn v3Data as unknown as v2.ToClient;\n};\n\n// ToServer identity converters.\nconst v1ToServerV2 = (v1Data: v1.ToServer): v2.ToServer => {\n\treturn v1Data as unknown as v2.ToServer;\n};\n\nconst v2ToServerV3 = (v2Data: v2.ToServer): v3.ToServer => {\n\treturn v2Data as unknown as v3.ToServer;\n};\n\nconst v3ToServerV4 = (v3Data: v3.ToServer): v4.ToServer => {\n\treturn v3Data as unknown as v4.ToServer;\n};\n\nconst v4ToServerV3 = (v4Data: v4.ToServer): v3.ToServer => {\n\treturn v4Data as unknown as v3.ToServer;\n};\n\nconst v3ToServerV2 = (v3Data: v3.ToServer): v2.ToServer => {\n\treturn v3Data as unknown as v2.ToServer;\n};\n\nconst v2ToServerV1 = (v2Data: v2.ToServer): v1.ToServer => {\n\treturn v2Data as unknown as v1.ToServer;\n};\n\nconst v3HttpResponseErrorToV4 = (\n\tv3Data: v3.HttpResponseError,\n): v4.HttpResponseError => ({\n\t...v3Data,\n\tactor: null,\n});\n\nconst v4HttpResponseErrorToV3 = (\n\tv4Data: v4.HttpResponseError,\n): v3.HttpResponseError => {\n\tconst { actor: _, ...rest } = v4Data;\n\treturn rest;\n};\n\nexport const CLIENT_PROTOCOL_TO_SERVER = createVersionedDataHandler<v4.ToServer>({\n\tdeserializeVersion: (bytes, version) => {\n\t\tswitch (version) {\n\t\t\tcase 1:\n\t\t\t\treturn v1.decodeToServer(bytes);\n\t\t\tcase 2:\n\t\t\t\treturn v2.decodeToServer(bytes);\n\t\t\tcase 3:\n\t\t\t\treturn v3.decodeToServer(bytes);\n\t\t\tcase 4:\n\t\t\t\treturn v4.decodeToServer(bytes);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t}\n\t},\n\tserializeVersion: (data, version) => {\n\t\tswitch (version) {\n\t\t\tcase 1:\n\t\t\t\treturn v1.encodeToServer(data as v1.ToServer);\n\t\t\tcase 2:\n\t\t\t\treturn v2.encodeToServer(data as v2.ToServer);\n\t\t\tcase 3:\n\t\t\t\treturn v3.encodeToServer(data as v3.ToServer);\n\t\t\tcase 4:\n\t\t\t\treturn v4.encodeToServer(data as v4.ToServer);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t}\n\t},\n\tdeserializeConverters: () => [v1ToServerV2, v2ToServerV3, v3ToServerV4],\n\tserializeConverters: () => [v4ToServerV3, v3ToServerV2, v2ToServerV1],\n});\n\nexport const CLIENT_PROTOCOL_TO_CLIENT = createVersionedDataHandler<v4.ToClient>({\n\tdeserializeVersion: (bytes, version) => {\n\t\tswitch (version) {\n\t\t\tcase 1:\n\t\t\t\treturn v1.decodeToClient(bytes);\n\t\t\tcase 2:\n\t\t\t\treturn v2.decodeToClient(bytes);\n\t\t\tcase 3:\n\t\t\t\treturn v3.decodeToClient(bytes);\n\t\t\tcase 4:\n\t\t\t\treturn v4.decodeToClient(bytes);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t}\n\t},\n\tserializeVersion: (data, version) => {\n\t\tswitch (version) {\n\t\t\tcase 1:\n\t\t\t\treturn v1.encodeToClient(data as v1.ToClient);\n\t\t\tcase 2:\n\t\t\t\treturn v2.encodeToClient(data as v2.ToClient);\n\t\t\tcase 3:\n\t\t\t\treturn v3.encodeToClient(data as v3.ToClient);\n\t\t\tcase 4:\n\t\t\t\treturn v4.encodeToClient(data as v4.ToClient);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t}\n\t},\n\tdeserializeConverters: () => [v1ToV2, v2ToV3, v3ToV4],\n\tserializeConverters: () => [v4ToV3, v3ToV2, v2ToV1],\n});\n\nexport const HTTP_ACTION_REQUEST_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpActionRequest>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.decodeHttpActionRequest(bytes);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.decodeHttpActionRequest(bytes);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpActionRequest(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpActionRequest(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.encodeHttpActionRequest(\n\t\t\t\t\t\tdata as v1.HttpActionRequest,\n\t\t\t\t\t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.encodeHttpActionRequest(\n\t\t\t\t\t\tdata as v2.HttpActionRequest,\n\t\t\t\t\t);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpActionRequest(\n\t\t\t\t\t\tdata as v3.HttpActionRequest,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpActionRequest(\n\t\t\t\t\t\tdata as v4.HttpActionRequest,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [],\n\t\tserializeConverters: () => [],\n\t});\n\nexport const HTTP_ACTION_RESPONSE_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpActionResponse>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.decodeHttpActionResponse(bytes);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.decodeHttpActionResponse(bytes);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpActionResponse(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpActionResponse(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.encodeHttpActionResponse(\n\t\t\t\t\t\tdata as v1.HttpActionResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.encodeHttpActionResponse(\n\t\t\t\t\t\tdata as v2.HttpActionResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpActionResponse(\n\t\t\t\t\t\tdata as v3.HttpActionResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpActionResponse(\n\t\t\t\t\t\tdata as v4.HttpActionResponse,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [],\n\t\tserializeConverters: () => [],\n\t});\n\nexport const HTTP_QUEUE_SEND_REQUEST_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpQueueSendRequest>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpQueueSendRequest(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpQueueSendRequest(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`HttpQueueSendRequest only exists in version 3+, got version ${version}`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpQueueSendRequest(\n\t\t\t\t\t\tdata as v3.HttpQueueSendRequest,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpQueueSendRequest(\n\t\t\t\t\t\tdata as v4.HttpQueueSendRequest,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`HttpQueueSendRequest only exists in version 3+, got version ${version}`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [],\n\t\tserializeConverters: () => [],\n\t});\n\nexport const HTTP_QUEUE_SEND_RESPONSE_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpQueueSendResponse>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpQueueSendResponse(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpQueueSendResponse(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`HttpQueueSendResponse only exists in version 3+, got version ${version}`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpQueueSendResponse(\n\t\t\t\t\t\tdata as v3.HttpQueueSendResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpQueueSendResponse(\n\t\t\t\t\t\tdata as v4.HttpQueueSendResponse,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`HttpQueueSendResponse only exists in version 3+, got version ${version}`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [],\n\t\tserializeConverters: () => [],\n\t});\n\nexport const HTTP_RESPONSE_ERROR_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpResponseError>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.decodeHttpResponseError(bytes);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.decodeHttpResponseError(bytes);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpResponseError(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpResponseError(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.encodeHttpResponseError(\n\t\t\t\t\t\tdata as v1.HttpResponseError,\n\t\t\t\t\t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.encodeHttpResponseError(\n\t\t\t\t\t\tdata as v2.HttpResponseError,\n\t\t\t\t\t);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpResponseError(\n\t\t\t\t\t\tdata as v3.HttpResponseError,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpResponseError(\n\t\t\t\t\t\tdata as v4.HttpResponseError,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [\n\t\t\t(data: v1.HttpResponseError) =>\n\t\t\t\tdata as unknown as v2.HttpResponseError,\n\t\t\t(data: v2.HttpResponseError) =>\n\t\t\t\tdata as unknown as v3.HttpResponseError,\n\t\t\tv3HttpResponseErrorToV4,\n\t\t],\n\t\tserializeConverters: () => [\n\t\t\tv4HttpResponseErrorToV3,\n\t\t\t(data: v3.HttpResponseError) =>\n\t\t\t\tdata as unknown as v2.HttpResponseError,\n\t\t\t(data: v2.HttpResponseError) =>\n\t\t\t\tdata as unknown as v1.HttpResponseError,\n\t\t],\n\t});\n\nexport const HTTP_RESOLVE_RESPONSE_VERSIONED =\n\tcreateVersionedDataHandler<v4.HttpResolveResponse>({\n\t\tdeserializeVersion: (bytes, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.decodeHttpResolveResponse(bytes);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.decodeHttpResolveResponse(bytes);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.decodeHttpResolveResponse(bytes);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.decodeHttpResolveResponse(bytes);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tserializeVersion: (data, version) => {\n\t\t\tswitch (version) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn v1.encodeHttpResolveResponse(\n\t\t\t\t\t\tdata as v1.HttpResolveResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn v2.encodeHttpResolveResponse(\n\t\t\t\t\t\tdata as v2.HttpResolveResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 3:\n\t\t\t\t\treturn v3.encodeHttpResolveResponse(\n\t\t\t\t\t\tdata as v3.HttpResolveResponse,\n\t\t\t\t\t);\n\t\t\t\tcase 4:\n\t\t\t\t\treturn v4.encodeHttpResolveResponse(\n\t\t\t\t\t\tdata as v4.HttpResolveResponse,\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unknown version ${version}`);\n\t\t\t}\n\t\t},\n\t\tdeserializeConverters: () => [],\n\t\tserializeConverters: () => [],\n\t});\n","// @generated - post-processed by build.rs\nimport * as bare from \"@rivetkit/bare-ts\"\n\nconst DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({})\n\nexport type uint = bigint\n\nexport type Cbor = ArrayBuffer\n\nexport function readCbor(bc: bare.ByteCursor): Cbor {\n return bare.readData(bc)\n}\n\nexport function writeCbor(bc: bare.ByteCursor, x: Cbor): void {\n bare.writeData(bc, x)\n}\n\nexport type Init = {\n readonly actorId: string\n readonly connectionId: string\n readonly connectionToken: string\n}\n\nexport function readInit(bc: bare.ByteCursor): Init {\n return {\n actorId: bare.readString(bc),\n connectionId: bare.readString(bc),\n connectionToken: bare.readString(bc),\n }\n}\n\nexport function writeInit(bc: bare.ByteCursor, x: Init): void {\n bare.writeString(bc, x.actorId)\n bare.writeString(bc, x.connectionId)\n bare.writeString(bc, x.connectionToken)\n}\n\nfunction read0(bc: bare.ByteCursor): Cbor | null {\n return bare.readBool(bc) ? readCbor(bc) : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: Cbor | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n writeCbor(bc, x)\n }\n}\n\nfunction read1(bc: bare.ByteCursor): uint | null {\n return bare.readBool(bc) ? bare.readUint(bc) : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: uint | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeUint(bc, x)\n }\n}\n\nexport type Error = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n readonly actionId: uint | null\n}\n\nexport function readError(bc: bare.ByteCursor): Error {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n actionId: read1(bc),\n }\n}\n\nexport function writeError(bc: bare.ByteCursor, x: Error): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n write1(bc, x.actionId)\n}\n\nexport type ActionResponse = {\n readonly id: uint\n readonly output: Cbor\n}\n\nexport function readActionResponse(bc: bare.ByteCursor): ActionResponse {\n return {\n id: bare.readUint(bc),\n output: readCbor(bc),\n }\n}\n\nexport function writeActionResponse(bc: bare.ByteCursor, x: ActionResponse): void {\n bare.writeUint(bc, x.id)\n writeCbor(bc, x.output)\n}\n\nexport type Event = {\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readEvent(bc: bare.ByteCursor): Event {\n return {\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeEvent(bc: bare.ByteCursor, x: Event): void {\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type ToClientBody =\n | { readonly tag: \"Init\"; readonly val: Init }\n | { readonly tag: \"Error\"; readonly val: Error }\n | { readonly tag: \"ActionResponse\"; readonly val: ActionResponse }\n | { readonly tag: \"Event\"; readonly val: Event }\n\nexport function readToClientBody(bc: bare.ByteCursor): ToClientBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"Init\", val: readInit(bc) }\n case 1:\n return { tag: \"Error\", val: readError(bc) }\n case 2:\n return { tag: \"ActionResponse\", val: readActionResponse(bc) }\n case 3:\n return { tag: \"Event\", val: readEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToClientBody(bc: bare.ByteCursor, x: ToClientBody): void {\n switch (x.tag) {\n case \"Init\": {\n bare.writeU8(bc, 0)\n writeInit(bc, x.val)\n break\n }\n case \"Error\": {\n bare.writeU8(bc, 1)\n writeError(bc, x.val)\n break\n }\n case \"ActionResponse\": {\n bare.writeU8(bc, 2)\n writeActionResponse(bc, x.val)\n break\n }\n case \"Event\": {\n bare.writeU8(bc, 3)\n writeEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type ToClient = {\n readonly body: ToClientBody\n}\n\nexport function readToClient(bc: bare.ByteCursor): ToClient {\n return {\n body: readToClientBody(bc),\n }\n}\n\nexport function writeToClient(bc: bare.ByteCursor, x: ToClient): void {\n writeToClientBody(bc, x.body)\n}\n\nexport function encodeToClient(x: ToClient, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToClient(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToClient(bytes: Uint8Array): ToClient {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToClient(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type ActionRequest = {\n readonly id: uint\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readActionRequest(bc: bare.ByteCursor): ActionRequest {\n return {\n id: bare.readUint(bc),\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeActionRequest(bc: bare.ByteCursor, x: ActionRequest): void {\n bare.writeUint(bc, x.id)\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type SubscriptionRequest = {\n readonly eventName: string\n readonly subscribe: boolean\n}\n\nexport function readSubscriptionRequest(bc: bare.ByteCursor): SubscriptionRequest {\n return {\n eventName: bare.readString(bc),\n subscribe: bare.readBool(bc),\n }\n}\n\nexport function writeSubscriptionRequest(bc: bare.ByteCursor, x: SubscriptionRequest): void {\n bare.writeString(bc, x.eventName)\n bare.writeBool(bc, x.subscribe)\n}\n\nexport type ToServerBody =\n | { readonly tag: \"ActionRequest\"; readonly val: ActionRequest }\n | { readonly tag: \"SubscriptionRequest\"; readonly val: SubscriptionRequest }\n\nexport function readToServerBody(bc: bare.ByteCursor): ToServerBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"ActionRequest\", val: readActionRequest(bc) }\n case 1:\n return { tag: \"SubscriptionRequest\", val: readSubscriptionRequest(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToServerBody(bc: bare.ByteCursor, x: ToServerBody): void {\n switch (x.tag) {\n case \"ActionRequest\": {\n bare.writeU8(bc, 0)\n writeActionRequest(bc, x.val)\n break\n }\n case \"SubscriptionRequest\": {\n bare.writeU8(bc, 1)\n writeSubscriptionRequest(bc, x.val)\n break\n }\n }\n}\n\nexport type ToServer = {\n readonly body: ToServerBody\n}\n\nexport function readToServer(bc: bare.ByteCursor): ToServer {\n return {\n body: readToServerBody(bc),\n }\n}\n\nexport function writeToServer(bc: bare.ByteCursor, x: ToServer): void {\n writeToServerBody(bc, x.body)\n}\n\nexport function encodeToServer(x: ToServer, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToServer(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToServer(bytes: Uint8Array): ToServer {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToServer(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionRequest = {\n readonly args: Cbor\n}\n\nexport function readHttpActionRequest(bc: bare.ByteCursor): HttpActionRequest {\n return {\n args: readCbor(bc),\n }\n}\n\nexport function writeHttpActionRequest(bc: bare.ByteCursor, x: HttpActionRequest): void {\n writeCbor(bc, x.args)\n}\n\nexport function encodeHttpActionRequest(x: HttpActionRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionRequest(bytes: Uint8Array): HttpActionRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionResponse = {\n readonly output: Cbor\n}\n\nexport function readHttpActionResponse(bc: bare.ByteCursor): HttpActionResponse {\n return {\n output: readCbor(bc),\n }\n}\n\nexport function writeHttpActionResponse(bc: bare.ByteCursor, x: HttpActionResponse): void {\n writeCbor(bc, x.output)\n}\n\nexport function encodeHttpActionResponse(x: HttpActionResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionResponse(bytes: Uint8Array): HttpActionResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResponseError = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n}\n\nexport function readHttpResponseError(bc: bare.ByteCursor): HttpResponseError {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n }\n}\n\nexport function writeHttpResponseError(bc: bare.ByteCursor, x: HttpResponseError): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n}\n\nexport function encodeHttpResponseError(x: HttpResponseError, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResponseError(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResponseError(bytes: Uint8Array): HttpResponseError {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResponseError(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResolveRequest = null\n\nexport type HttpResolveResponse = {\n readonly actorId: string\n}\n\nexport function readHttpResolveResponse(bc: bare.ByteCursor): HttpResolveResponse {\n return {\n actorId: bare.readString(bc),\n }\n}\n\nexport function writeHttpResolveResponse(bc: bare.ByteCursor, x: HttpResolveResponse): void {\n bare.writeString(bc, x.actorId)\n}\n\nexport function encodeHttpResolveResponse(x: HttpResolveResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResolveResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResolveResponse(bytes: Uint8Array): HttpResolveResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResolveResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\n\nfunction assert(condition: boolean, message?: string): asserts condition {\n if (!condition) throw new Error(message ?? \"Assertion failed\")\n}\n","// @generated - post-processed by build.rs\nimport * as bare from \"@rivetkit/bare-ts\"\n\nconst DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({})\n\nexport type uint = bigint\n\nexport type Cbor = ArrayBuffer\n\nexport function readCbor(bc: bare.ByteCursor): Cbor {\n return bare.readData(bc)\n}\n\nexport function writeCbor(bc: bare.ByteCursor, x: Cbor): void {\n bare.writeData(bc, x)\n}\n\nexport type Init = {\n readonly actorId: string\n readonly connectionId: string\n}\n\nexport function readInit(bc: bare.ByteCursor): Init {\n return {\n actorId: bare.readString(bc),\n connectionId: bare.readString(bc),\n }\n}\n\nexport function writeInit(bc: bare.ByteCursor, x: Init): void {\n bare.writeString(bc, x.actorId)\n bare.writeString(bc, x.connectionId)\n}\n\nfunction read0(bc: bare.ByteCursor): Cbor | null {\n return bare.readBool(bc) ? readCbor(bc) : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: Cbor | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n writeCbor(bc, x)\n }\n}\n\nfunction read1(bc: bare.ByteCursor): uint | null {\n return bare.readBool(bc) ? bare.readUint(bc) : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: uint | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeUint(bc, x)\n }\n}\n\nexport type Error = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n readonly actionId: uint | null\n}\n\nexport function readError(bc: bare.ByteCursor): Error {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n actionId: read1(bc),\n }\n}\n\nexport function writeError(bc: bare.ByteCursor, x: Error): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n write1(bc, x.actionId)\n}\n\nexport type ActionResponse = {\n readonly id: uint\n readonly output: Cbor\n}\n\nexport function readActionResponse(bc: bare.ByteCursor): ActionResponse {\n return {\n id: bare.readUint(bc),\n output: readCbor(bc),\n }\n}\n\nexport function writeActionResponse(bc: bare.ByteCursor, x: ActionResponse): void {\n bare.writeUint(bc, x.id)\n writeCbor(bc, x.output)\n}\n\nexport type Event = {\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readEvent(bc: bare.ByteCursor): Event {\n return {\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeEvent(bc: bare.ByteCursor, x: Event): void {\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type ToClientBody =\n | { readonly tag: \"Init\"; readonly val: Init }\n | { readonly tag: \"Error\"; readonly val: Error }\n | { readonly tag: \"ActionResponse\"; readonly val: ActionResponse }\n | { readonly tag: \"Event\"; readonly val: Event }\n\nexport function readToClientBody(bc: bare.ByteCursor): ToClientBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"Init\", val: readInit(bc) }\n case 1:\n return { tag: \"Error\", val: readError(bc) }\n case 2:\n return { tag: \"ActionResponse\", val: readActionResponse(bc) }\n case 3:\n return { tag: \"Event\", val: readEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToClientBody(bc: bare.ByteCursor, x: ToClientBody): void {\n switch (x.tag) {\n case \"Init\": {\n bare.writeU8(bc, 0)\n writeInit(bc, x.val)\n break\n }\n case \"Error\": {\n bare.writeU8(bc, 1)\n writeError(bc, x.val)\n break\n }\n case \"ActionResponse\": {\n bare.writeU8(bc, 2)\n writeActionResponse(bc, x.val)\n break\n }\n case \"Event\": {\n bare.writeU8(bc, 3)\n writeEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type ToClient = {\n readonly body: ToClientBody\n}\n\nexport function readToClient(bc: bare.ByteCursor): ToClient {\n return {\n body: readToClientBody(bc),\n }\n}\n\nexport function writeToClient(bc: bare.ByteCursor, x: ToClient): void {\n writeToClientBody(bc, x.body)\n}\n\nexport function encodeToClient(x: ToClient, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToClient(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToClient(bytes: Uint8Array): ToClient {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToClient(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type ActionRequest = {\n readonly id: uint\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readActionRequest(bc: bare.ByteCursor): ActionRequest {\n return {\n id: bare.readUint(bc),\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeActionRequest(bc: bare.ByteCursor, x: ActionRequest): void {\n bare.writeUint(bc, x.id)\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type SubscriptionRequest = {\n readonly eventName: string\n readonly subscribe: boolean\n}\n\nexport function readSubscriptionRequest(bc: bare.ByteCursor): SubscriptionRequest {\n return {\n eventName: bare.readString(bc),\n subscribe: bare.readBool(bc),\n }\n}\n\nexport function writeSubscriptionRequest(bc: bare.ByteCursor, x: SubscriptionRequest): void {\n bare.writeString(bc, x.eventName)\n bare.writeBool(bc, x.subscribe)\n}\n\nexport type ToServerBody =\n | { readonly tag: \"ActionRequest\"; readonly val: ActionRequest }\n | { readonly tag: \"SubscriptionRequest\"; readonly val: SubscriptionRequest }\n\nexport function readToServerBody(bc: bare.ByteCursor): ToServerBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"ActionRequest\", val: readActionRequest(bc) }\n case 1:\n return { tag: \"SubscriptionRequest\", val: readSubscriptionRequest(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToServerBody(bc: bare.ByteCursor, x: ToServerBody): void {\n switch (x.tag) {\n case \"ActionRequest\": {\n bare.writeU8(bc, 0)\n writeActionRequest(bc, x.val)\n break\n }\n case \"SubscriptionRequest\": {\n bare.writeU8(bc, 1)\n writeSubscriptionRequest(bc, x.val)\n break\n }\n }\n}\n\nexport type ToServer = {\n readonly body: ToServerBody\n}\n\nexport function readToServer(bc: bare.ByteCursor): ToServer {\n return {\n body: readToServerBody(bc),\n }\n}\n\nexport function writeToServer(bc: bare.ByteCursor, x: ToServer): void {\n writeToServerBody(bc, x.body)\n}\n\nexport function encodeToServer(x: ToServer, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToServer(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToServer(bytes: Uint8Array): ToServer {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToServer(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionRequest = {\n readonly args: Cbor\n}\n\nexport function readHttpActionRequest(bc: bare.ByteCursor): HttpActionRequest {\n return {\n args: readCbor(bc),\n }\n}\n\nexport function writeHttpActionRequest(bc: bare.ByteCursor, x: HttpActionRequest): void {\n writeCbor(bc, x.args)\n}\n\nexport function encodeHttpActionRequest(x: HttpActionRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionRequest(bytes: Uint8Array): HttpActionRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionResponse = {\n readonly output: Cbor\n}\n\nexport function readHttpActionResponse(bc: bare.ByteCursor): HttpActionResponse {\n return {\n output: readCbor(bc),\n }\n}\n\nexport function writeHttpActionResponse(bc: bare.ByteCursor, x: HttpActionResponse): void {\n writeCbor(bc, x.output)\n}\n\nexport function encodeHttpActionResponse(x: HttpActionResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionResponse(bytes: Uint8Array): HttpActionResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResponseError = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n}\n\nexport function readHttpResponseError(bc: bare.ByteCursor): HttpResponseError {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n }\n}\n\nexport function writeHttpResponseError(bc: bare.ByteCursor, x: HttpResponseError): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n}\n\nexport function encodeHttpResponseError(x: HttpResponseError, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResponseError(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResponseError(bytes: Uint8Array): HttpResponseError {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResponseError(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResolveRequest = null\n\nexport type HttpResolveResponse = {\n readonly actorId: string\n}\n\nexport function readHttpResolveResponse(bc: bare.ByteCursor): HttpResolveResponse {\n return {\n actorId: bare.readString(bc),\n }\n}\n\nexport function writeHttpResolveResponse(bc: bare.ByteCursor, x: HttpResolveResponse): void {\n bare.writeString(bc, x.actorId)\n}\n\nexport function encodeHttpResolveResponse(x: HttpResolveResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResolveResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResolveResponse(bytes: Uint8Array): HttpResolveResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResolveResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\n\nfunction assert(condition: boolean, message?: string): asserts condition {\n if (!condition) throw new Error(message ?? \"Assertion failed\")\n}\n","// @generated - post-processed by build.rs\nimport * as bare from \"@rivetkit/bare-ts\"\n\nconst DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({})\n\nexport type u64 = bigint\nexport type uint = bigint\n\nexport type Cbor = ArrayBuffer\n\nexport function readCbor(bc: bare.ByteCursor): Cbor {\n return bare.readData(bc)\n}\n\nexport function writeCbor(bc: bare.ByteCursor, x: Cbor): void {\n bare.writeData(bc, x)\n}\n\nexport type Init = {\n readonly actorId: string\n readonly connectionId: string\n}\n\nexport function readInit(bc: bare.ByteCursor): Init {\n return {\n actorId: bare.readString(bc),\n connectionId: bare.readString(bc),\n }\n}\n\nexport function writeInit(bc: bare.ByteCursor, x: Init): void {\n bare.writeString(bc, x.actorId)\n bare.writeString(bc, x.connectionId)\n}\n\nfunction read0(bc: bare.ByteCursor): Cbor | null {\n return bare.readBool(bc) ? readCbor(bc) : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: Cbor | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n writeCbor(bc, x)\n }\n}\n\nfunction read1(bc: bare.ByteCursor): uint | null {\n return bare.readBool(bc) ? bare.readUint(bc) : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: uint | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeUint(bc, x)\n }\n}\n\nexport type Error = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n readonly actionId: uint | null\n}\n\nexport function readError(bc: bare.ByteCursor): Error {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n actionId: read1(bc),\n }\n}\n\nexport function writeError(bc: bare.ByteCursor, x: Error): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n write1(bc, x.actionId)\n}\n\nexport type ActionResponse = {\n readonly id: uint\n readonly output: Cbor\n}\n\nexport function readActionResponse(bc: bare.ByteCursor): ActionResponse {\n return {\n id: bare.readUint(bc),\n output: readCbor(bc),\n }\n}\n\nexport function writeActionResponse(bc: bare.ByteCursor, x: ActionResponse): void {\n bare.writeUint(bc, x.id)\n writeCbor(bc, x.output)\n}\n\nexport type Event = {\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readEvent(bc: bare.ByteCursor): Event {\n return {\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeEvent(bc: bare.ByteCursor, x: Event): void {\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type ToClientBody =\n | { readonly tag: \"Init\"; readonly val: Init }\n | { readonly tag: \"Error\"; readonly val: Error }\n | { readonly tag: \"ActionResponse\"; readonly val: ActionResponse }\n | { readonly tag: \"Event\"; readonly val: Event }\n\nexport function readToClientBody(bc: bare.ByteCursor): ToClientBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"Init\", val: readInit(bc) }\n case 1:\n return { tag: \"Error\", val: readError(bc) }\n case 2:\n return { tag: \"ActionResponse\", val: readActionResponse(bc) }\n case 3:\n return { tag: \"Event\", val: readEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToClientBody(bc: bare.ByteCursor, x: ToClientBody): void {\n switch (x.tag) {\n case \"Init\": {\n bare.writeU8(bc, 0)\n writeInit(bc, x.val)\n break\n }\n case \"Error\": {\n bare.writeU8(bc, 1)\n writeError(bc, x.val)\n break\n }\n case \"ActionResponse\": {\n bare.writeU8(bc, 2)\n writeActionResponse(bc, x.val)\n break\n }\n case \"Event\": {\n bare.writeU8(bc, 3)\n writeEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type ToClient = {\n readonly body: ToClientBody\n}\n\nexport function readToClient(bc: bare.ByteCursor): ToClient {\n return {\n body: readToClientBody(bc),\n }\n}\n\nexport function writeToClient(bc: bare.ByteCursor, x: ToClient): void {\n writeToClientBody(bc, x.body)\n}\n\nexport function encodeToClient(x: ToClient, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToClient(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToClient(bytes: Uint8Array): ToClient {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToClient(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type ActionRequest = {\n readonly id: uint\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readActionRequest(bc: bare.ByteCursor): ActionRequest {\n return {\n id: bare.readUint(bc),\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeActionRequest(bc: bare.ByteCursor, x: ActionRequest): void {\n bare.writeUint(bc, x.id)\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type SubscriptionRequest = {\n readonly eventName: string\n readonly subscribe: boolean\n}\n\nexport function readSubscriptionRequest(bc: bare.ByteCursor): SubscriptionRequest {\n return {\n eventName: bare.readString(bc),\n subscribe: bare.readBool(bc),\n }\n}\n\nexport function writeSubscriptionRequest(bc: bare.ByteCursor, x: SubscriptionRequest): void {\n bare.writeString(bc, x.eventName)\n bare.writeBool(bc, x.subscribe)\n}\n\nexport type ToServerBody =\n | { readonly tag: \"ActionRequest\"; readonly val: ActionRequest }\n | { readonly tag: \"SubscriptionRequest\"; readonly val: SubscriptionRequest }\n\nexport function readToServerBody(bc: bare.ByteCursor): ToServerBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"ActionRequest\", val: readActionRequest(bc) }\n case 1:\n return { tag: \"SubscriptionRequest\", val: readSubscriptionRequest(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToServerBody(bc: bare.ByteCursor, x: ToServerBody): void {\n switch (x.tag) {\n case \"ActionRequest\": {\n bare.writeU8(bc, 0)\n writeActionRequest(bc, x.val)\n break\n }\n case \"SubscriptionRequest\": {\n bare.writeU8(bc, 1)\n writeSubscriptionRequest(bc, x.val)\n break\n }\n }\n}\n\nexport type ToServer = {\n readonly body: ToServerBody\n}\n\nexport function readToServer(bc: bare.ByteCursor): ToServer {\n return {\n body: readToServerBody(bc),\n }\n}\n\nexport function writeToServer(bc: bare.ByteCursor, x: ToServer): void {\n writeToServerBody(bc, x.body)\n}\n\nexport function encodeToServer(x: ToServer, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToServer(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToServer(bytes: Uint8Array): ToServer {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToServer(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionRequest = {\n readonly args: Cbor\n}\n\nexport function readHttpActionRequest(bc: bare.ByteCursor): HttpActionRequest {\n return {\n args: readCbor(bc),\n }\n}\n\nexport function writeHttpActionRequest(bc: bare.ByteCursor, x: HttpActionRequest): void {\n writeCbor(bc, x.args)\n}\n\nexport function encodeHttpActionRequest(x: HttpActionRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionRequest(bytes: Uint8Array): HttpActionRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionResponse = {\n readonly output: Cbor\n}\n\nexport function readHttpActionResponse(bc: bare.ByteCursor): HttpActionResponse {\n return {\n output: readCbor(bc),\n }\n}\n\nexport function writeHttpActionResponse(bc: bare.ByteCursor, x: HttpActionResponse): void {\n writeCbor(bc, x.output)\n}\n\nexport function encodeHttpActionResponse(x: HttpActionResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionResponse(bytes: Uint8Array): HttpActionResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nfunction read2(bc: bare.ByteCursor): string | null {\n return bare.readBool(bc) ? bare.readString(bc) : null\n}\n\nfunction write2(bc: bare.ByteCursor, x: string | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeString(bc, x)\n }\n}\n\nfunction read3(bc: bare.ByteCursor): boolean | null {\n return bare.readBool(bc) ? bare.readBool(bc) : null\n}\n\nfunction write3(bc: bare.ByteCursor, x: boolean | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeBool(bc, x)\n }\n}\n\nfunction read4(bc: bare.ByteCursor): u64 | null {\n return bare.readBool(bc) ? bare.readU64(bc) : null\n}\n\nfunction write4(bc: bare.ByteCursor, x: u64 | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeU64(bc, x)\n }\n}\n\nexport type HttpQueueSendRequest = {\n readonly body: Cbor\n readonly name: string | null\n readonly wait: boolean | null\n readonly timeout: u64 | null\n}\n\nexport function readHttpQueueSendRequest(bc: bare.ByteCursor): HttpQueueSendRequest {\n return {\n body: readCbor(bc),\n name: read2(bc),\n wait: read3(bc),\n timeout: read4(bc),\n }\n}\n\nexport function writeHttpQueueSendRequest(bc: bare.ByteCursor, x: HttpQueueSendRequest): void {\n writeCbor(bc, x.body)\n write2(bc, x.name)\n write3(bc, x.wait)\n write4(bc, x.timeout)\n}\n\nexport function encodeHttpQueueSendRequest(x: HttpQueueSendRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpQueueSendRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpQueueSendRequest(bytes: Uint8Array): HttpQueueSendRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpQueueSendRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpQueueSendResponse = {\n readonly status: string\n readonly response: Cbor | null\n}\n\nexport function readHttpQueueSendResponse(bc: bare.ByteCursor): HttpQueueSendResponse {\n return {\n status: bare.readString(bc),\n response: read0(bc),\n }\n}\n\nexport function writeHttpQueueSendResponse(bc: bare.ByteCursor, x: HttpQueueSendResponse): void {\n bare.writeString(bc, x.status)\n write0(bc, x.response)\n}\n\nexport function encodeHttpQueueSendResponse(x: HttpQueueSendResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpQueueSendResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpQueueSendResponse(bytes: Uint8Array): HttpQueueSendResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpQueueSendResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResponseError = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n}\n\nexport function readHttpResponseError(bc: bare.ByteCursor): HttpResponseError {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read0(bc),\n }\n}\n\nexport function writeHttpResponseError(bc: bare.ByteCursor, x: HttpResponseError): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write0(bc, x.metadata)\n}\n\nexport function encodeHttpResponseError(x: HttpResponseError, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResponseError(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResponseError(bytes: Uint8Array): HttpResponseError {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResponseError(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResolveRequest = null\n\nexport type HttpResolveResponse = {\n readonly actorId: string\n}\n\nexport function readHttpResolveResponse(bc: bare.ByteCursor): HttpResolveResponse {\n return {\n actorId: bare.readString(bc),\n }\n}\n\nexport function writeHttpResolveResponse(bc: bare.ByteCursor, x: HttpResolveResponse): void {\n bare.writeString(bc, x.actorId)\n}\n\nexport function encodeHttpResolveResponse(x: HttpResolveResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResolveResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResolveResponse(bytes: Uint8Array): HttpResolveResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResolveResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\n\nfunction assert(condition: boolean, message?: string): asserts condition {\n if (!condition) throw new Error(message ?? \"Assertion failed\")\n}\n","// @generated - post-processed by build.rs\nimport * as bare from \"@rivetkit/bare-ts\"\n\nconst DEFAULT_CONFIG = /* @__PURE__ */ bare.Config({})\n\nexport type u64 = bigint\nexport type uint = bigint\n\nexport type Cbor = ArrayBuffer\n\nexport function readCbor(bc: bare.ByteCursor): Cbor {\n return bare.readData(bc)\n}\n\nexport function writeCbor(bc: bare.ByteCursor, x: Cbor): void {\n bare.writeData(bc, x)\n}\n\nfunction read0(bc: bare.ByteCursor): string | null {\n return bare.readBool(bc) ? bare.readString(bc) : null\n}\n\nfunction write0(bc: bare.ByteCursor, x: string | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeString(bc, x)\n }\n}\n\nexport type ActorSpecifier = {\n readonly actorId: string\n readonly generation: uint\n readonly key: string | null\n}\n\nexport function readActorSpecifier(bc: bare.ByteCursor): ActorSpecifier {\n return {\n actorId: bare.readString(bc),\n generation: bare.readUint(bc),\n key: read0(bc),\n }\n}\n\nexport function writeActorSpecifier(bc: bare.ByteCursor, x: ActorSpecifier): void {\n bare.writeString(bc, x.actorId)\n bare.writeUint(bc, x.generation)\n write0(bc, x.key)\n}\n\nexport type Init = {\n readonly actorId: string\n readonly connectionId: string\n}\n\nexport function readInit(bc: bare.ByteCursor): Init {\n return {\n actorId: bare.readString(bc),\n connectionId: bare.readString(bc),\n }\n}\n\nexport function writeInit(bc: bare.ByteCursor, x: Init): void {\n bare.writeString(bc, x.actorId)\n bare.writeString(bc, x.connectionId)\n}\n\nfunction read1(bc: bare.ByteCursor): Cbor | null {\n return bare.readBool(bc) ? readCbor(bc) : null\n}\n\nfunction write1(bc: bare.ByteCursor, x: Cbor | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n writeCbor(bc, x)\n }\n}\n\nfunction read2(bc: bare.ByteCursor): uint | null {\n return bare.readBool(bc) ? bare.readUint(bc) : null\n}\n\nfunction write2(bc: bare.ByteCursor, x: uint | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeUint(bc, x)\n }\n}\n\nfunction read3(bc: bare.ByteCursor): ActorSpecifier | null {\n return bare.readBool(bc) ? readActorSpecifier(bc) : null\n}\n\nfunction write3(bc: bare.ByteCursor, x: ActorSpecifier | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n writeActorSpecifier(bc, x)\n }\n}\n\nexport type Error = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n readonly actionId: uint | null\n readonly actor: ActorSpecifier | null\n}\n\nexport function readError(bc: bare.ByteCursor): Error {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read1(bc),\n actionId: read2(bc),\n actor: read3(bc),\n }\n}\n\nexport function writeError(bc: bare.ByteCursor, x: Error): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write1(bc, x.metadata)\n write2(bc, x.actionId)\n write3(bc, x.actor)\n}\n\nexport type ActionResponse = {\n readonly id: uint\n readonly output: Cbor\n}\n\nexport function readActionResponse(bc: bare.ByteCursor): ActionResponse {\n return {\n id: bare.readUint(bc),\n output: readCbor(bc),\n }\n}\n\nexport function writeActionResponse(bc: bare.ByteCursor, x: ActionResponse): void {\n bare.writeUint(bc, x.id)\n writeCbor(bc, x.output)\n}\n\nexport type Event = {\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readEvent(bc: bare.ByteCursor): Event {\n return {\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeEvent(bc: bare.ByteCursor, x: Event): void {\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type ToClientBody =\n | { readonly tag: \"Init\"; readonly val: Init }\n | { readonly tag: \"Error\"; readonly val: Error }\n | { readonly tag: \"ActionResponse\"; readonly val: ActionResponse }\n | { readonly tag: \"Event\"; readonly val: Event }\n\nexport function readToClientBody(bc: bare.ByteCursor): ToClientBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"Init\", val: readInit(bc) }\n case 1:\n return { tag: \"Error\", val: readError(bc) }\n case 2:\n return { tag: \"ActionResponse\", val: readActionResponse(bc) }\n case 3:\n return { tag: \"Event\", val: readEvent(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToClientBody(bc: bare.ByteCursor, x: ToClientBody): void {\n switch (x.tag) {\n case \"Init\": {\n bare.writeU8(bc, 0)\n writeInit(bc, x.val)\n break\n }\n case \"Error\": {\n bare.writeU8(bc, 1)\n writeError(bc, x.val)\n break\n }\n case \"ActionResponse\": {\n bare.writeU8(bc, 2)\n writeActionResponse(bc, x.val)\n break\n }\n case \"Event\": {\n bare.writeU8(bc, 3)\n writeEvent(bc, x.val)\n break\n }\n }\n}\n\nexport type ToClient = {\n readonly body: ToClientBody\n}\n\nexport function readToClient(bc: bare.ByteCursor): ToClient {\n return {\n body: readToClientBody(bc),\n }\n}\n\nexport function writeToClient(bc: bare.ByteCursor, x: ToClient): void {\n writeToClientBody(bc, x.body)\n}\n\nexport function encodeToClient(x: ToClient, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToClient(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToClient(bytes: Uint8Array): ToClient {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToClient(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type ActionRequest = {\n readonly id: uint\n readonly name: string\n readonly args: Cbor\n}\n\nexport function readActionRequest(bc: bare.ByteCursor): ActionRequest {\n return {\n id: bare.readUint(bc),\n name: bare.readString(bc),\n args: readCbor(bc),\n }\n}\n\nexport function writeActionRequest(bc: bare.ByteCursor, x: ActionRequest): void {\n bare.writeUint(bc, x.id)\n bare.writeString(bc, x.name)\n writeCbor(bc, x.args)\n}\n\nexport type SubscriptionRequest = {\n readonly eventName: string\n readonly subscribe: boolean\n}\n\nexport function readSubscriptionRequest(bc: bare.ByteCursor): SubscriptionRequest {\n return {\n eventName: bare.readString(bc),\n subscribe: bare.readBool(bc),\n }\n}\n\nexport function writeSubscriptionRequest(bc: bare.ByteCursor, x: SubscriptionRequest): void {\n bare.writeString(bc, x.eventName)\n bare.writeBool(bc, x.subscribe)\n}\n\nexport type ToServerBody =\n | { readonly tag: \"ActionRequest\"; readonly val: ActionRequest }\n | { readonly tag: \"SubscriptionRequest\"; readonly val: SubscriptionRequest }\n\nexport function readToServerBody(bc: bare.ByteCursor): ToServerBody {\n const offset = bc.offset\n const tag = bare.readU8(bc)\n switch (tag) {\n case 0:\n return { tag: \"ActionRequest\", val: readActionRequest(bc) }\n case 1:\n return { tag: \"SubscriptionRequest\", val: readSubscriptionRequest(bc) }\n default: {\n bc.offset = offset\n throw new bare.BareError(offset, \"invalid tag\")\n }\n }\n}\n\nexport function writeToServerBody(bc: bare.ByteCursor, x: ToServerBody): void {\n switch (x.tag) {\n case \"ActionRequest\": {\n bare.writeU8(bc, 0)\n writeActionRequest(bc, x.val)\n break\n }\n case \"SubscriptionRequest\": {\n bare.writeU8(bc, 1)\n writeSubscriptionRequest(bc, x.val)\n break\n }\n }\n}\n\nexport type ToServer = {\n readonly body: ToServerBody\n}\n\nexport function readToServer(bc: bare.ByteCursor): ToServer {\n return {\n body: readToServerBody(bc),\n }\n}\n\nexport function writeToServer(bc: bare.ByteCursor, x: ToServer): void {\n writeToServerBody(bc, x.body)\n}\n\nexport function encodeToServer(x: ToServer, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeToServer(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeToServer(bytes: Uint8Array): ToServer {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readToServer(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionRequest = {\n readonly args: Cbor\n}\n\nexport function readHttpActionRequest(bc: bare.ByteCursor): HttpActionRequest {\n return {\n args: readCbor(bc),\n }\n}\n\nexport function writeHttpActionRequest(bc: bare.ByteCursor, x: HttpActionRequest): void {\n writeCbor(bc, x.args)\n}\n\nexport function encodeHttpActionRequest(x: HttpActionRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionRequest(bytes: Uint8Array): HttpActionRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpActionResponse = {\n readonly output: Cbor\n}\n\nexport function readHttpActionResponse(bc: bare.ByteCursor): HttpActionResponse {\n return {\n output: readCbor(bc),\n }\n}\n\nexport function writeHttpActionResponse(bc: bare.ByteCursor, x: HttpActionResponse): void {\n writeCbor(bc, x.output)\n}\n\nexport function encodeHttpActionResponse(x: HttpActionResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpActionResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpActionResponse(bytes: Uint8Array): HttpActionResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpActionResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nfunction read4(bc: bare.ByteCursor): boolean | null {\n return bare.readBool(bc) ? bare.readBool(bc) : null\n}\n\nfunction write4(bc: bare.ByteCursor, x: boolean | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeBool(bc, x)\n }\n}\n\nfunction read5(bc: bare.ByteCursor): u64 | null {\n return bare.readBool(bc) ? bare.readU64(bc) : null\n}\n\nfunction write5(bc: bare.ByteCursor, x: u64 | null): void {\n bare.writeBool(bc, x != null)\n if (x != null) {\n bare.writeU64(bc, x)\n }\n}\n\nexport type HttpQueueSendRequest = {\n readonly body: Cbor\n readonly name: string | null\n readonly wait: boolean | null\n readonly timeout: u64 | null\n}\n\nexport function readHttpQueueSendRequest(bc: bare.ByteCursor): HttpQueueSendRequest {\n return {\n body: readCbor(bc),\n name: read0(bc),\n wait: read4(bc),\n timeout: read5(bc),\n }\n}\n\nexport function writeHttpQueueSendRequest(bc: bare.ByteCursor, x: HttpQueueSendRequest): void {\n writeCbor(bc, x.body)\n write0(bc, x.name)\n write4(bc, x.wait)\n write5(bc, x.timeout)\n}\n\nexport function encodeHttpQueueSendRequest(x: HttpQueueSendRequest, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpQueueSendRequest(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpQueueSendRequest(bytes: Uint8Array): HttpQueueSendRequest {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpQueueSendRequest(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpQueueSendResponse = {\n readonly status: string\n readonly response: Cbor | null\n}\n\nexport function readHttpQueueSendResponse(bc: bare.ByteCursor): HttpQueueSendResponse {\n return {\n status: bare.readString(bc),\n response: read1(bc),\n }\n}\n\nexport function writeHttpQueueSendResponse(bc: bare.ByteCursor, x: HttpQueueSendResponse): void {\n bare.writeString(bc, x.status)\n write1(bc, x.response)\n}\n\nexport function encodeHttpQueueSendResponse(x: HttpQueueSendResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpQueueSendResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpQueueSendResponse(bytes: Uint8Array): HttpQueueSendResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpQueueSendResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResponseError = {\n readonly group: string\n readonly code: string\n readonly message: string\n readonly metadata: Cbor | null\n readonly actor: ActorSpecifier | null\n}\n\nexport function readHttpResponseError(bc: bare.ByteCursor): HttpResponseError {\n return {\n group: bare.readString(bc),\n code: bare.readString(bc),\n message: bare.readString(bc),\n metadata: read1(bc),\n actor: read3(bc),\n }\n}\n\nexport function writeHttpResponseError(bc: bare.ByteCursor, x: HttpResponseError): void {\n bare.writeString(bc, x.group)\n bare.writeString(bc, x.code)\n bare.writeString(bc, x.message)\n write1(bc, x.metadata)\n write3(bc, x.actor)\n}\n\nexport function encodeHttpResponseError(x: HttpResponseError, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResponseError(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResponseError(bytes: Uint8Array): HttpResponseError {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResponseError(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\nexport type HttpResolveRequest = null\n\nexport type HttpResolveResponse = {\n readonly actorId: string\n}\n\nexport function readHttpResolveResponse(bc: bare.ByteCursor): HttpResolveResponse {\n return {\n actorId: bare.readString(bc),\n }\n}\n\nexport function writeHttpResolveResponse(bc: bare.ByteCursor, x: HttpResolveResponse): void {\n bare.writeString(bc, x.actorId)\n}\n\nexport function encodeHttpResolveResponse(x: HttpResolveResponse, config?: Partial<bare.Config>): Uint8Array {\n const fullConfig = config != null ? bare.Config(config) : DEFAULT_CONFIG\n const bc = new bare.ByteCursor(\n new Uint8Array(fullConfig.initialBufferLength),\n fullConfig,\n )\n writeHttpResolveResponse(bc, x)\n return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset)\n}\n\nexport function decodeHttpResolveResponse(bytes: Uint8Array): HttpResolveResponse {\n const bc = new bare.ByteCursor(bytes, DEFAULT_CONFIG)\n const result = readHttpResolveResponse(bc)\n if (bc.offset < bc.view.byteLength) {\n throw new bare.BareError(bc.offset, \"remaining bytes\")\n }\n return result\n}\n\n\nfunction assert(condition: boolean, message?: string): asserts condition {\n if (!condition) throw new Error(message ?? \"Assertion failed\")\n}\n","import { z } from \"zod/v4\";\n\n// Helper schemas\nconst UintSchema = z.bigint();\nconst OptionalUintSchema = UintSchema.nullable();\nconst ActorSpecifierSchema = z.object({\n\tactorId: z.string(),\n\tgeneration: z.union([z.number(), z.bigint()]),\n\tkey: z.string().optional(),\n});\n\n// MARK: Message To Client\nexport const InitSchema = z.object({\n\tactorId: z.string(),\n\tconnectionId: z.string(),\n});\nexport type Init = z.infer<typeof InitSchema>;\n\nexport const ErrorSchema = z.object({\n\tgroup: z.string(),\n\tcode: z.string(),\n\tmessage: z.string(),\n\tmetadata: z.unknown().optional(),\n\tactionId: OptionalUintSchema,\n\tactor: ActorSpecifierSchema.optional(),\n});\nexport type Error = z.infer<typeof ErrorSchema>;\n\nexport const ActionResponseSchema = z.object({\n\tid: UintSchema,\n\toutput: z.unknown(),\n});\nexport type ActionResponse = z.infer<typeof ActionResponseSchema>;\n\nexport const EventSchema = z.object({\n\tname: z.string(),\n\targs: z.unknown(),\n});\nexport type Event = z.infer<typeof EventSchema>;\n\nexport const ToClientBodySchema = z.discriminatedUnion(\"tag\", [\n\tz.object({ tag: z.literal(\"Init\"), val: InitSchema }),\n\tz.object({ tag: z.literal(\"Error\"), val: ErrorSchema }),\n\tz.object({ tag: z.literal(\"ActionResponse\"), val: ActionResponseSchema }),\n\tz.object({ tag: z.literal(\"Event\"), val: EventSchema }),\n]);\nexport type ToClientBody = z.infer<typeof ToClientBodySchema>;\n\nexport const ToClientSchema = z.object({\n\tbody: ToClientBodySchema,\n});\nexport type ToClient = z.infer<typeof ToClientSchema>;\n\n// MARK: Message To Server\nexport const ActionRequestSchema = z.object({\n\tid: UintSchema,\n\tname: z.string(),\n\targs: z.unknown(),\n});\nexport type ActionRequest = z.infer<typeof ActionRequestSchema>;\n\nexport const SubscriptionRequestSchema = z.object({\n\teventName: z.string(),\n\tsubscribe: z.boolean(),\n});\nexport type SubscriptionRequest = z.infer<typeof SubscriptionRequestSchema>;\n\nexport const ToServerBodySchema = z.discriminatedUnion(\"tag\", [\n\tz.object({ tag: z.literal(\"ActionRequest\"), val: ActionRequestSchema }),\n\tz.object({\n\t\ttag: z.literal(\"SubscriptionRequest\"),\n\t\tval: SubscriptionRequestSchema,\n\t}),\n]);\nexport type ToServerBody = z.infer<typeof ToServerBodySchema>;\n\nexport const ToServerSchema = z.object({\n\tbody: ToServerBodySchema,\n});\nexport type ToServer = z.infer<typeof ToServerSchema>;\n\n// MARK: HTTP Action\nexport const HttpActionRequestSchema = z.object({\n\targs: z.unknown(),\n});\nexport type HttpActionRequest = z.infer<typeof HttpActionRequestSchema>;\n\nexport const HttpActionResponseSchema = z.object({\n\toutput: z.unknown(),\n});\nexport type HttpActionResponse = z.infer<typeof HttpActionResponseSchema>;\n\n// MARK: HTTP Queue\nexport const HttpQueueSendRequestSchema = z.object({\n\tbody: z.unknown(),\n\tname: z.string().optional(),\n\twait: z.boolean().optional(),\n\ttimeout: z.number().optional(),\n});\nexport type HttpQueueSendRequest = z.infer<typeof HttpQueueSendRequestSchema>;\n\nexport const HttpQueueSendResponseSchema = z.object({\n\tstatus: z.enum([\"completed\", \"timedOut\"]),\n\tresponse: z.unknown().optional(),\n});\nexport type HttpQueueSendResponse = z.infer<typeof HttpQueueSendResponseSchema>;\n\n// MARK: HTTP Error\nexport const HttpResponseErrorSchema = z.object({\n\tgroup: z.string(),\n\tcode: z.string(),\n\tmessage: z.string(),\n\tmetadata: z.unknown().optional(),\n\tactor: ActorSpecifierSchema.optional(),\n});\nexport type HttpResponseError = z.infer<typeof HttpResponseErrorSchema>;\n\n// MARK: HTTP Resolve\nexport const HttpResolveRequestSchema = z.null();\nexport type HttpResolveRequest = z.infer<typeof HttpResolveRequestSchema>;\n\nexport const HttpResolveResponseSchema = z.object({\n\tactorId: z.string(),\n});\nexport type HttpResolveResponse = z.infer<typeof HttpResolveResponseSchema>;\n","import type {\n\tBaseActorDefinition,\n\tAnyActorDefinition,\n} from \"@/actor/definition\";\nimport type {\n\tEventSchemaConfig,\n\tInferEventArgs,\n\tInferQueueCompleteMap,\n\tInferSchemaMap,\n\tQueueSchemaConfig,\n} from \"@/actor/schema\";\nimport type {\n\tQueueSendNoWaitOptions,\n\tQueueSendResult,\n\tQueueSendWaitOptions,\n} from \"./queue\";\n\n/**\n * Action function returned by Actor connections and handles.\n *\n * @typedef {Function} ActorActionFunction\n * @template Args\n * @template Response\n * @param {...Args} args - Arguments for the action function.\n * @returns {Promise<Response>}\n */\nexport type ActorActionFunction<\n\tArgs extends Array<unknown> = unknown[],\n\tResponse = unknown,\n> = (\n\t...args: Args extends [unknown, ...infer Rest] ? Rest : Args\n) => Promise<Response>;\n\nexport interface ActorGatewayOptions {\n\tskipReadyWait?: boolean;\n}\n\nexport type ResolvedActorGatewayOptions = Required<ActorGatewayOptions>;\n\nexport function resolveActorGatewayOptions(\n\tdefaults: ActorGatewayOptions = {},\n\toverrides?: ActorGatewayOptions,\n): ResolvedActorGatewayOptions {\n\tconst skipReadyWait = overrides?.skipReadyWait ?? defaults.skipReadyWait ?? false;\n\n\treturn {\n\t\tskipReadyWait,\n\t};\n}\n\nexport interface ActorActionOptions extends ActorGatewayOptions {\n\tsignal?: AbortSignal;\n}\n\nexport type ActorConnectOptions = ActorGatewayOptions;\n\nexport type ActorFetchInit = RequestInit & ActorGatewayOptions;\n\nexport type ActorWebSocketOptions = ActorGatewayOptions;\n\n/**\n * Maps action methods from actor definition to typed function signatures.\n */\nexport type ActorDefinitionActions<AD extends AnyActorDefinition> =\n\t// biome-ignore lint/suspicious/noExplicitAny: safe to use any here\n\tAD extends BaseActorDefinition<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tinfer R\n\t>\n\t\t? {\n\t\t\t\t[K in keyof R]: R[K] extends (\n\t\t\t\t\t...args: infer Args\n\t\t\t\t) => infer Return\n\t\t\t\t\t? ActorActionFunction<Args, Return>\n\t\t\t\t\t: never;\n\t\t\t}\n\t\t: never;\n\ntype ActorQueueSend<TQueues extends QueueSchemaConfig> = {\n\t<K extends keyof TQueues & string>(\n\t\tname: K,\n\t\tbody: InferSchemaMap<TQueues>[K],\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult<InferQueueCompleteMap<TQueues>[K]>>;\n\t<K extends keyof TQueues & string>(\n\t\tname: K,\n\t\tbody: InferSchemaMap<TQueues>[K],\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n\t(\n\t\tname: keyof TQueues extends never ? string : never,\n\t\tbody: unknown,\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult>;\n\t(\n\t\tname: keyof TQueues extends never ? string : never,\n\t\tbody: unknown,\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n};\n\ntype ActorEventSubscribe<TEvents extends EventSchemaConfig> = {\n\t<K extends keyof TEvents & string>(\n\t\teventName: K,\n\t\tcallback: (...args: InferEventArgs<InferSchemaMap<TEvents>[K]>) => void,\n\t): () => void;\n\t(\n\t\teventName: keyof TEvents extends never ? string : never,\n\t\tcallback: (...args: any[]) => void,\n\t): () => void;\n};\n\nexport type ActorDefinitionQueueSend<AD extends AnyActorDefinition> =\n\t// biome-ignore lint/suspicious/noExplicitAny: safe to use any here\n\tAD extends BaseActorDefinition<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tinfer Q,\n\t\tany\n\t>\n\t\t? Q extends QueueSchemaConfig\n\t\t\t? { send: ActorQueueSend<Q> }\n\t\t\t: never\n\t\t: never;\n\nexport type ActorDefinitionEventSubscriptions<AD extends AnyActorDefinition> =\n\t// biome-ignore lint/suspicious/noExplicitAny: safe to use any here\n\tAD extends BaseActorDefinition<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tinfer E,\n\t\tany,\n\t\tany\n\t>\n\t\t? E extends EventSchemaConfig\n\t\t\t? {\n\t\t\t\t\ton: ActorEventSubscribe<E>;\n\t\t\t\t\tonce: ActorEventSubscribe<E>;\n\t\t\t\t}\n\t\t\t: never\n\t\t: never;\n","import * as errors from \"@/actor/errors\";\nimport { stringifyError } from \"@/common/utils\";\nimport {\n\ttype GatewayTarget,\n\ttype EngineControlClient,\n} from \"@/engine-client/driver\";\nimport type { ActorQuery } from \"@/client/query\";\nimport { actorSchedulingError, type ActorSchedulingError } from \"./errors\";\nimport { logger } from \"./log\";\n\n/**\n * Extract the actor name from a query.\n */\nexport function getActorNameFromQuery(query: ActorQuery): string {\n\tif (\"getForId\" in query) return query.getForId.name;\n\tif (\"getForKey\" in query) return query.getForKey.name;\n\tif (\"getOrCreateForKey\" in query) return query.getOrCreateForKey.name;\n\tif (\"create\" in query) return query.create.name;\n\tthrow errors.invalidRequest(\"Invalid query format\");\n}\n\nexport type ActorResolutionState = ActorQuery;\n\nexport function isDynamicActorQuery(\n\tactorQuery: ActorQuery,\n): actorQuery is\n\t| Extract<ActorQuery, { getForKey: unknown }>\n\t| Extract<ActorQuery, { getOrCreateForKey: unknown }> {\n\treturn \"getForKey\" in actorQuery || \"getOrCreateForKey\" in actorQuery;\n}\n\nexport function getGatewayTarget(state: ActorResolutionState): GatewayTarget {\n\tif (\"getForId\" in state) {\n\t\treturn { directId: state.getForId.actorId };\n\t}\n\n\tif (\"create\" in state) {\n\t\tthrow errors.invalidRequest(\n\t\t\t\"create queries cannot be used as gateway targets. Resolve to an actor ID first.\",\n\t\t);\n\t}\n\n\treturn state;\n}\n\nexport function isStaleResolvedActorError(\n\tgroup: string,\n\tcode: string,\n): boolean {\n\treturn (\n\t\tgroup === \"actor\" &&\n\t\t(code === \"not_found\" ||\n\t\t\tcode === \"starting\" ||\n\t\t\tcode === \"stopping\" ||\n\t\t\tcode === \"not_configured\" ||\n\t\t\tcode === \"dropped_reply\" ||\n\t\t\tcode.startsWith(\"destroyed_\"))\n\t);\n}\n\n/**\n * Fetch actor details and check for scheduling errors.\n */\nexport async function checkForSchedulingError(\n\tgroup: string,\n\tcode: string,\n\tactorId: string,\n\tquery: ActorQuery,\n\tdriver: EngineControlClient,\n): Promise<ActorSchedulingError | null> {\n\tconst name = getActorNameFromQuery(query);\n\n\ttry {\n\t\tconst actor = await driver.getForId({ name, actorId });\n\n\t\tif (actor?.error) {\n\t\t\tlogger().info({\n\t\t\t\tmsg: \"found actor scheduling error\",\n\t\t\t\tactorId,\n\t\t\t\terror: actor.error,\n\t\t\t});\n\t\t\treturn actorSchedulingError(group, code, actorId, actor.error);\n\t\t}\n\t} catch (err) {\n\t\tlogger().warn({\n\t\t\tmsg: \"failed to fetch actor details for scheduling error check\",\n\t\t\tactorId,\n\t\t\terror: stringifyError(err),\n\t\t});\n\t}\n\n\treturn null;\n}\n","import { ActorError, HttpRequestError } from \"./errors\";\n\nexport interface LifecycleBoundaryInfo {\n\tkind: \"request_retry\" | \"reconnect_only\";\n\tsource: \"actor_error\" | \"transport_error\";\n\tgroup?: string;\n\tcode?: string;\n\tmessage: string;\n\tlegacy: boolean;\n}\n\nfunction* walkErrorChain(\n\terror: unknown,\n\tmaxDepth = 8,\n): Generator<unknown, void, undefined> {\n\tlet current = error;\n\tlet depth = 0;\n\n\twhile (current !== undefined && current !== null && depth < maxDepth) {\n\t\tyield current;\n\n\t\tif (\n\t\t\ttypeof current === \"object\" &&\n\t\t\t\"cause\" in current &&\n\t\t\t(current as { cause?: unknown }).cause !== current\n\t\t) {\n\t\t\tcurrent = (current as { cause?: unknown }).cause;\n\t\t\tdepth += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tbreak;\n\t}\n}\n\nfunction buildLifecycleBoundaryInfo(\n\tkind: LifecycleBoundaryInfo[\"kind\"],\n\tsource: LifecycleBoundaryInfo[\"source\"],\n\tmessage: string,\n\topts?: {\n\t\tgroup?: string;\n\t\tcode?: string;\n\t\tlegacy?: boolean;\n\t},\n): LifecycleBoundaryInfo {\n\treturn {\n\t\tkind,\n\t\tsource,\n\t\tgroup: opts?.group,\n\t\tcode: opts?.code,\n\t\tmessage,\n\t\tlegacy: opts?.legacy ?? false,\n\t};\n}\n\nfunction classifyActorError(\n\terror: ActorError,\n): LifecycleBoundaryInfo | undefined {\n\tif (\n\t\terror.group === \"actor\" &&\n\t\terror.code === \"stopping\" &&\n\t\terror.message.includes(\"database accessed after actor stopped\")\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (error.group === \"actor\" && error.code === \"restarting\") {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"request_retry\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (\n\t\terror.group === \"guard\" &&\n\t\tisRetryableGuardGatewayHttpError(error.code)\n\t) {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"request_retry\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t},\n\t\t);\n\t}\n\n\t// TODO(RVT-6193): Remove this legacy match after structured restart errors\n\t// are authoritative everywhere.\n\tif (\n\t\terror.group === \"actor\" &&\n\t\terror.code === \"internal_error\" &&\n\t\terror.message === \"Actor is stopping\"\n\t) {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"request_retry\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t\tlegacy: true,\n\t\t\t},\n\t\t);\n\t}\n\n\t// TODO(RVT-6193): Remove this legacy match after connection admission uses\n\t// actor.restarting consistently.\n\tif (\n\t\terror.group === \"actor\" &&\n\t\terror.code === \"stopping\" &&\n\t\terror.message ===\n\t\t\t\"Actor stopping: Cannot accept new connections while actor is stopping\"\n\t) {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"request_retry\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t\tlegacy: true,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (error.group === \"actor\" && error.code === \"stopped\") {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"reconnect_only\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t\tlegacy: true,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (error.group === \"ws\" && error.code === \"going_away\") {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"reconnect_only\",\n\t\t\t\"actor_error\",\n\t\t\terror.message,\n\t\t\t{\n\t\t\t\tgroup: error.group,\n\t\t\t\tcode: error.code,\n\t\t\t\tlegacy: true,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn undefined;\n}\n\nfunction isRetryableGuardGatewayHttpError(code: string): boolean {\n\treturn (\n\t\tcode === \"service_unavailable\" ||\n\t\tcode === \"actor_stopped_while_waiting\" ||\n\t\tcode === \"tunnel_request_aborted\" ||\n\t\tcode === \"tunnel_message_timeout\" ||\n\t\tcode === \"tunnel_response_closed\" ||\n\t\tcode === \"gateway_response_start_timeout\"\n\t);\n}\n\nfunction classifyTransportError(\n\terror: Error,\n): LifecycleBoundaryInfo | undefined {\n\tif (error.message.includes(\"database accessed after actor stopped\")) {\n\t\treturn undefined;\n\t}\n\n\t// TODO(RVT-6193): Remove this exact string match after the runner surfaces\n\t// structured restart errors end to end.\n\tif (/^Actor [A-Za-z0-9-]+ stopped$/.test(error.message)) {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"request_retry\",\n\t\t\t\"transport_error\",\n\t\t\terror.message,\n\t\t\t{ legacy: true },\n\t\t);\n\t}\n\n\t// TODO(RVT-6193): Remove these exact string matches after transport\n\t// shutdown paths are normalized to structured lifecycle errors.\n\tif (\n\t\terror.message === \"WebSocket connection closed during shutdown\" ||\n\t\terror.message === \"envoy shut down\" ||\n\t\terror.message === \"envoy shutting down\"\n\t) {\n\t\treturn buildLifecycleBoundaryInfo(\n\t\t\t\"reconnect_only\",\n\t\t\t\"transport_error\",\n\t\t\terror.message,\n\t\t\t{ legacy: true },\n\t\t);\n\t}\n\n\treturn undefined;\n}\n\nexport function classifyLifecycleBoundaryError(\n\terror: unknown,\n): LifecycleBoundaryInfo | undefined {\n\tfor (const current of walkErrorChain(error)) {\n\t\tif (current instanceof ActorError) {\n\t\t\tconst classified = classifyActorError(current);\n\t\t\tif (classified) {\n\t\t\t\treturn classified;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (current instanceof HttpRequestError || current instanceof Error) {\n\t\t\tconst classified = classifyTransportError(current);\n\t\t\tif (classified) {\n\t\t\t\treturn classified;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nexport function isRetryableLifecycleRequestError(error: unknown): boolean {\n\treturn classifyLifecycleBoundaryError(error)?.kind === \"request_retry\";\n}\n\nexport function isRetryableLifecycleReconnectSignal(error: unknown): boolean {\n\tconst classified = classifyLifecycleBoundaryError(error);\n\treturn (\n\t\tclassified?.kind === \"reconnect_only\" ||\n\t\tclassified?.kind === \"request_retry\"\n\t);\n}\n\nfunction throwIfAborted(signal?: AbortSignal) {\n\tif (signal?.aborted) {\n\t\tthrow signal.reason ?? new Error(\"Operation aborted\");\n\t}\n}\n\nasync function waitWithSignal(ms: number, signal?: AbortSignal) {\n\tthrowIfAborted(signal);\n\n\tawait new Promise<void>((resolve, reject) => {\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t}, ms);\n\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tcleanup();\n\t\t\treject(signal?.reason ?? new Error(\"Operation aborted\"));\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport async function retryOnLifecycleBoundary<T>(\n\trun: () => Promise<T>,\n\topts?: {\n\t\tmaxAttempts?: number;\n\t\tinitialDelayMs?: number;\n\t\tmaxDelayMs?: number;\n\t\tsignal?: AbortSignal;\n\t},\n): Promise<T> {\n\tconst maxAttempts = opts?.maxAttempts ?? 5;\n\tconst initialDelayMs = opts?.initialDelayMs ?? 25;\n\tconst maxDelayMs = opts?.maxDelayMs ?? 200;\n\n\tlet lastError: unknown;\n\tfor (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n\t\tthrowIfAborted(opts?.signal);\n\n\t\ttry {\n\t\t\treturn await run();\n\t\t} catch (error) {\n\t\t\tif (!isRetryableLifecycleRequestError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tlastError = error;\n\t\t\tif (attempt === maxAttempts - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst delayMs = Math.min(\n\t\t\t\tinitialDelayMs * 2 ** attempt,\n\t\t\t\tmaxDelayMs,\n\t\t\t);\n\t\t\tawait waitWithSignal(delayMs, opts?.signal);\n\t\t}\n\t}\n\n\tthrow lastError;\n}\n","import invariant from \"invariant\";\nimport type { VersionedDataHandler } from \"vbare\";\nimport type { z } from \"zod/v4\";\nimport type { Encoding } from \"@/common/encoding\";\nimport { assertUnreachable } from \"@/common/utils\";\nimport type { HttpResponseError } from \"@/common/client-protocol\";\nimport { HTTP_RESPONSE_ERROR_VERSIONED } from \"@/common/client-protocol-versioned\";\nimport {\n\ttype HttpResponseError as HttpResponseErrorJson,\n\tHttpResponseErrorSchema,\n} from \"@/common/client-protocol-zod\";\nimport {\n\tcontentTypeForEncoding,\n\tdecodeCborCompat,\n\tdeserializeWithEncoding,\n\tencodingIsBinary,\n\tserializeWithEncoding,\n} from \"@/serde\";\nimport { httpUserAgent } from \"@/utils\";\nimport { ActorError, HttpRequestError } from \"./errors\";\nimport { logger } from \"./log\";\n\nexport interface ParsedCloseReason {\n\tgroup: string;\n\tcode: string;\n\trayId?: string;\n}\n\n/**\n * Parses WebSocket close reason string into structured data.\n *\n * Expected format examples:\n * - \"guard.actor_runner_failed#t1s80so6h3irenp8ymzltfoittcl00\"\n * - \"ws.client_closed\"\n *\n * Returns undefined if the format is invalid\n */\nexport function parseWebSocketCloseReason(\n\treason: string,\n): ParsedCloseReason | undefined {\n\tconst [mainPart, rayId] = reason.split(\"#\");\n\tconst [group, code] = mainPart.split(\".\");\n\n\tif (!group || !code) {\n\t\tlogger().warn({ msg: \"failed to parse close reason\", reason });\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tgroup,\n\t\tcode,\n\t\trayId,\n\t};\n}\n\nexport type WebSocketMessage = string | Blob | ArrayBuffer | Uint8Array;\n\nexport function messageLength(message: WebSocketMessage): number {\n\tif (message instanceof Blob) {\n\t\treturn message.size;\n\t}\n\tif (message instanceof ArrayBuffer) {\n\t\treturn message.byteLength;\n\t}\n\tif (message instanceof Uint8Array) {\n\t\treturn message.byteLength;\n\t}\n\tif (typeof message === \"string\") {\n\t\treturn message.length;\n\t}\n\tassertUnreachable(message);\n}\n\nexport interface HttpRequestOpts<\n\tRequestBare,\n\tResponseBare,\n\tRequestJson = RequestBare,\n\tResponseJson = ResponseBare,\n\tRequest = RequestBare,\n\tResponse = ResponseBare,\n> {\n\tmethod: string;\n\turl: string;\n\theaders: Record<string, string>;\n\tbody?: Request;\n\tencoding: Encoding;\n\tskipParseResponse?: boolean;\n\tsignal?: AbortSignal;\n\tcustomFetch?: (req: globalThis.Request) => Promise<globalThis.Response>;\n\trequestVersionedDataHandler: VersionedDataHandler<RequestBare> | undefined;\n\trequestVersion: number | undefined;\n\tresponseVersionedDataHandler:\n\t\t| VersionedDataHandler<ResponseBare>\n\t\t| undefined;\n\tresponseVersion: number | undefined;\n\trequestZodSchema: z.ZodType<RequestJson>;\n\tresponseZodSchema: z.ZodType<ResponseJson>;\n\trequestToJson: (value: Request) => RequestJson;\n\trequestToBare: (value: Request) => RequestBare;\n\tresponseFromJson: (value: ResponseJson) => Response;\n\tresponseFromBare: (value: ResponseBare) => Response;\n}\n\nexport async function sendHttpRequest<\n\tRequestBare = unknown,\n\tResponseBare = unknown,\n\tRequestJson = RequestBare,\n\tResponseJson = ResponseBare,\n\tRequest = RequestBare,\n\tResponse = ResponseBare,\n>(\n\topts: HttpRequestOpts<\n\t\tRequestBare,\n\t\tResponseBare,\n\t\tRequestJson,\n\t\tResponseJson,\n\t\tRequest,\n\t\tResponse\n\t>,\n): Promise<Response> {\n\tlogger().debug({\n\t\tmsg: \"sending http request\",\n\t\turl: opts.url,\n\t\tencoding: opts.encoding,\n\t});\n\n\t// Serialize body\n\tlet contentType: string | undefined;\n\tlet bodyData: string | Uint8Array | undefined;\n\tif (opts.method === \"POST\" || opts.method === \"PUT\") {\n\t\tinvariant(opts.body !== undefined, \"missing body\");\n\t\tcontentType = contentTypeForEncoding(opts.encoding);\n\t\tbodyData = serializeWithEncoding<RequestBare, RequestJson, Request>(\n\t\t\topts.encoding,\n\t\t\topts.body,\n\t\t\topts.requestVersionedDataHandler,\n\t\t\topts.requestVersion,\n\t\t\topts.requestZodSchema,\n\t\t\topts.requestToJson,\n\t\t\topts.requestToBare,\n\t\t);\n\t}\n\n\t// Send request\n\tlet response: globalThis.Response;\n\ttry {\n\t\t// Make the HTTP request\n\t\tresponse = await (opts.customFetch ?? fetch)(\n\t\t\tnew globalThis.Request(opts.url, {\n\t\t\t\tmethod: opts.method,\n\t\t\t\theaders: {\n\t\t\t\t\t...opts.headers,\n\t\t\t\t\t...(contentType\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\"Content-Type\": contentType,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t\"User-Agent\": httpUserAgent(),\n\t\t\t\t},\n\t\t\t\tbody: bodyData,\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tsignal: opts.signal,\n\t\t\t}),\n\t\t);\n\t} catch (error) {\n\t\tthrow new HttpRequestError(`Request failed: ${error}`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n\n\t// Parse response error\n\tif (!response.ok) {\n\t\tconst bufferResponse = await response.arrayBuffer();\n\t\tconst contentType = response.headers.get(\"content-type\");\n\t\tconst rayId = response.headers.get(\"x-rivet-ray-id\");\n\n\t\t// Determine encoding from Content-Type header, defaulting to provided encoding\n\t\tconst encoding: Encoding = contentType?.includes(\"application/json\")\n\t\t\t? \"json\"\n\t\t\t: opts.encoding;\n\n\t\t// Attempt to parse structured error data\n\t\ttry {\n\t\t\tconst responseData = deserializeWithEncoding(\n\t\t\t\tencoding,\n\t\t\t\tnew Uint8Array(bufferResponse),\n\t\t\t\tHTTP_RESPONSE_ERROR_VERSIONED,\n\t\t\t\tHttpResponseErrorSchema,\n\t\t\t\t// JSON/CBOR: normalize actor generation to the public number shape.\n\t\t\t\t(json): any => ({\n\t\t\t\t\t...json,\n\t\t\t\t\tactor: json.actor\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...json.actor,\n\t\t\t\t\t\t\t\tgeneration: Number(json.actor.generation),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t\t// BARE: decode ArrayBuffer metadata to unknown\n\t\t\t\t(bare): any => ({\n\t\t\t\t\tgroup: bare.group,\n\t\t\t\t\tcode: bare.code,\n\t\t\t\t\tmessage: bare.message,\n\t\t\t\t\tmetadata: bare.metadata\n\t\t\t\t\t\t? decodeCborCompat(new Uint8Array(bare.metadata))\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tactor: bare.actor\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tactorId: bare.actor.actorId,\n\t\t\t\t\t\t\t\tgeneration: Number(bare.actor.generation),\n\t\t\t\t\t\t\t\tkey: bare.actor.key ?? undefined,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tlogger().warn({\n\t\t\t\tmsg: \"http error response\",\n\t\t\t\tgroup: responseData.group,\n\t\t\t\tcode: responseData.code,\n\t\t\t\tmessage: responseData.message,\n\t\t\t\tmetadata: responseData.metadata,\n\t\t\t\tactorId: responseData.actor?.actorId,\n\t\t\t\tgeneration: responseData.actor?.generation,\n\t\t\t\tactorKey: responseData.actor?.key,\n\t\t\t});\n\n\t\t\tthrow new ActorError(\n\t\t\t\tresponseData.group,\n\t\t\t\tresponseData.code,\n\t\t\t\tresponseData.message,\n\t\t\t\t{\n\t\t\t\t\tmetadata: responseData.metadata,\n\t\t\t\t\tactor: responseData.actor,\n\t\t\t\t},\n\t\t\t);\n\t\t} catch (error) {\n\t\t\t// If it's already an ActorError, re-throw it\n\t\t\tif (error instanceof ActorError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Otherwise, fall back to generic error with text response\n\t\t\tconst textResponse = new TextDecoder(\"utf-8\", {\n\t\t\t\tfatal: false,\n\t\t\t}).decode(bufferResponse);\n\n\t\t\tif (rayId) {\n\t\t\t\tthrow new HttpRequestError(\n\t\t\t\t\t`${response.statusText} (${response.status}) (Ray ID: ${rayId}):\\n${textResponse}`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrow new HttpRequestError(\n\t\t\t\t\t`${response.statusText} (${response.status}):\\n${textResponse}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Some requests don't need the success response to be parsed, so this can speed things up\n\tif (opts.skipParseResponse) {\n\t\treturn undefined as Response;\n\t}\n\n\t// Parse the response based on encoding\n\ttry {\n\t\tconst buffer = new Uint8Array(await response.arrayBuffer());\n\t\treturn deserializeWithEncoding<ResponseBare, ResponseJson, Response>(\n\t\t\topts.encoding,\n\t\t\tbuffer,\n\t\t\topts.responseVersionedDataHandler,\n\t\t\topts.responseZodSchema,\n\t\t\topts.responseFromJson,\n\t\t\topts.responseFromBare,\n\t\t);\n\t} catch (error) {\n\t\tthrow new HttpRequestError(`Failed to parse response: ${error}`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n","import type { Encoding } from \"@/common/encoding\";\nimport { HEADER_CONN_PARAMS, HEADER_ENCODING } from \"@/common/actor-router-consts\";\nimport type * as protocol from \"@/common/client-protocol\";\nimport {\n\tCURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,\n\tHTTP_QUEUE_SEND_REQUEST_VERSIONED,\n\tHTTP_QUEUE_SEND_RESPONSE_VERSIONED,\n} from \"@/common/client-protocol-versioned\";\nimport {\n\ttype HttpQueueSendRequest as HttpQueueSendRequestJson,\n\tHttpQueueSendRequestSchema,\n\ttype HttpQueueSendResponse as HttpQueueSendResponseJson,\n\tHttpQueueSendResponseSchema,\n} from \"@/common/client-protocol-zod\";\nimport { decodeCborCompat, encodeCborCompat } from \"@/serde\";\nimport { bufferToArrayBuffer } from \"@/utils\";\nimport { sendHttpRequest } from \"./utils\";\n\nexport interface QueueSender {\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult>;\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n}\n\nexport interface QueueSendWaitOptions {\n\twait: true;\n\ttimeout?: number;\n\tsignal?: AbortSignal;\n}\n\nexport interface QueueSendNoWaitOptions {\n\twait?: false;\n\ttimeout?: never;\n\tsignal?: AbortSignal;\n}\n\nexport type QueueSendOptions = QueueSendWaitOptions | QueueSendNoWaitOptions;\n\nexport interface QueueSendResult<TResponse = unknown> {\n\tstatus: \"completed\" | \"timedOut\";\n\tresponse?: TResponse;\n}\n\ninterface QueueSenderOptions {\n\tencoding: Encoding;\n\tparams: unknown;\n\tcustomFetch: (request: Request) => Promise<Response>;\n}\n\nexport function createQueueSender(\n\tsenderOptions: QueueSenderOptions,\n): QueueSender {\n\tasync function send(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult>;\n\tasync function send(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n\tasync function send(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendOptions,\n\t): Promise<QueueSendResult | void> {\n\t\tconst wait = options?.wait ?? false;\n\t\tconst timeout = options?.timeout;\n\n\t\tconst result = await sendHttpRequest<\n\t\t\tprotocol.HttpQueueSendRequest,\n\t\t\tprotocol.HttpQueueSendResponse,\n\t\t\tHttpQueueSendRequestJson,\n\t\t\tHttpQueueSendResponseJson,\n\t\t\t{ body: unknown; wait?: boolean; timeout?: number; name?: string },\n\t\t\tQueueSendResult\n\t\t>({\n\t\t\turl: `http://actor/queue/${encodeURIComponent(name)}`,\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t[HEADER_ENCODING]: senderOptions.encoding,\n\t\t\t\t...(senderOptions.params !== undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t[HEADER_CONN_PARAMS]: JSON.stringify(\n\t\t\t\t\t\t\t\tsenderOptions.params,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t\tbody: { body, wait, timeout },\n\t\t\tencoding: senderOptions.encoding,\n\t\t\tcustomFetch: senderOptions.customFetch,\n\t\t\tsignal: options?.signal,\n\t\t\trequestVersion: CLIENT_PROTOCOL_CURRENT_VERSION,\n\t\t\trequestVersionedDataHandler: HTTP_QUEUE_SEND_REQUEST_VERSIONED,\n\t\t\tresponseVersion: CLIENT_PROTOCOL_CURRENT_VERSION,\n\t\t\tresponseVersionedDataHandler: HTTP_QUEUE_SEND_RESPONSE_VERSIONED,\n\t\t\trequestZodSchema: HttpQueueSendRequestSchema,\n\t\t\tresponseZodSchema: HttpQueueSendResponseSchema,\n\t\t\trequestToJson: (value): HttpQueueSendRequestJson => ({\n\t\t\t\t...value,\n\t\t\t\tname,\n\t\t\t}),\n\t\t\trequestToBare: (value): protocol.HttpQueueSendRequest => ({\n\t\t\t\tname: value.name ?? name,\n\t\t\t\tbody: bufferToArrayBuffer(encodeCborCompat(value.body)),\n\t\t\t\twait: value.wait ?? false,\n\t\t\t\ttimeout:\n\t\t\t\t\tvalue.timeout !== undefined ? BigInt(value.timeout) : null,\n\t\t\t}),\n\t\t\tresponseFromJson: (json): QueueSendResult => {\n\t\t\t\tif (json.response === undefined) {\n\t\t\t\t\treturn { status: json.status as \"completed\" | \"timedOut\" };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: json.status as \"completed\" | \"timedOut\",\n\t\t\t\t\tresponse: json.response,\n\t\t\t\t};\n\t\t\t},\n\t\t\tresponseFromBare: (bare): QueueSendResult => {\n\t\t\t\tif (bare.response === null || bare.response === undefined) {\n\t\t\t\t\treturn { status: bare.status as \"completed\" | \"timedOut\" };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: bare.status as \"completed\" | \"timedOut\",\n\t\t\t\t\tresponse: decodeCborCompat(new Uint8Array(bare.response)),\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\n\t\tif (wait) {\n\t\t\treturn result;\n\t\t}\n\t\treturn;\n\t}\n\n\treturn {\n\t\tsend,\n\t};\n}\n","import { PATH_WEBSOCKET_PREFIX } from \"@/common/actor-router-consts\";\nimport { deconstructError } from \"@/common/utils\";\nimport {\n\ttype GatewayTarget,\n\ttype EngineControlClient,\n\ttype GatewayRequestOptions,\n} from \"@/engine-client/driver\";\nimport { HEADER_CONN_PARAMS } from \"@/common/actor-router-consts\";\nimport { ActorError } from \"./errors\";\nimport { logger } from \"./log\";\n\n/**\n * Shared implementation for raw HTTP fetch requests\n */\nexport async function rawHttpFetch(\n\tdriver: EngineControlClient,\n\ttarget: GatewayTarget,\n\tparams: unknown,\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n\toptions: GatewayRequestOptions = {},\n): Promise<Response> {\n\t// Extract path and merge init options\n\tlet path: string;\n\tlet mergedInit: RequestInit = init || {};\n\n\tif (typeof input === \"string\") {\n\t\tpath = input;\n\t} else if (input instanceof URL) {\n\t\tpath = input.pathname + input.search;\n\t} else if (input instanceof Request) {\n\t\t// Extract path from Request URL\n\t\tconst url = new URL(input.url);\n\t\tpath = url.pathname + url.search;\n\t\t// Merge Request properties with init\n\t\tconst requestHeaders = new Headers(input.headers);\n\t\tconst initHeaders = new Headers(init?.headers || {});\n\n\t\t// Merge headers - init headers override request headers\n\t\tconst mergedHeaders = new Headers(requestHeaders);\n\t\tinitHeaders.forEach((value, key) => {\n\t\t\tmergedHeaders.set(key, value);\n\t\t});\n\n\t\tmergedInit = {\n\t\t\tmethod: input.method,\n\t\t\tbody: input.body,\n\t\t\tmode: input.mode,\n\t\t\tcredentials: input.credentials,\n\t\t\tredirect: input.redirect,\n\t\t\treferrer: input.referrer,\n\t\t\treferrerPolicy: input.referrerPolicy,\n\t\t\tintegrity: input.integrity,\n\t\t\tkeepalive: input.keepalive,\n\t\t\tsignal: input.signal,\n\t\t\t...mergedInit, // init overrides Request properties\n\t\t\theaders: mergedHeaders, // headers must be set after spread to ensure proper merge\n\t\t};\n\t\t// Add duplex if body is present\n\t\tif (mergedInit.body) {\n\t\t\t(mergedInit as any).duplex = \"half\";\n\t\t}\n\t} else {\n\t\tthrow new TypeError(\"Invalid input type for fetch\");\n\t}\n\n\ttry {\n\t\tlogger().debug(\n\t\t\t\"directId\" in target\n\t\t\t\t? {\n\t\t\t\t\t\tmsg: \"sending raw http request to actor\",\n\t\t\t\t\t\tactorId: target.directId,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tmsg: \"sending raw http request with actor query\",\n\t\t\t\t\t\tquery: target,\n\t\t\t\t\t},\n\t\t);\n\n\t\t// Build the URL with normalized path\n\t\tconst normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n\t\tconst url = new URL(`http://actor/request/${normalizedPath}`);\n\n\t\t// Forward conn params if provided\n\t\tconst proxyRequestHeaders = new Headers(mergedInit.headers);\n\t\tif (params) {\n\t\t\tproxyRequestHeaders.set(HEADER_CONN_PARAMS, JSON.stringify(params));\n\t\t}\n\n\t\t// Forward the request to the actor\n\t\tconst proxyRequest = new Request(url, {\n\t\t\t...mergedInit,\n\t\t\theaders: proxyRequestHeaders,\n\t\t});\n\n\t\treturn driver.sendRequest(target, proxyRequest, options);\n\t} catch (err) {\n\t\t// Standardize to ClientActorError instead of the native backend error\n\t\tconst { group, code, message, metadata, actor } = deconstructError(\n\t\t\terr,\n\t\t\ttrue,\n\t\t);\n\t\tthrow new ActorError(group, code, message, { metadata, actor });\n\t}\n}\n\n/**\n * Shared implementation for raw WebSocket connections\n */\nexport async function rawWebSocket(\n\tdriver: EngineControlClient,\n\ttarget: GatewayTarget,\n\tparams: unknown,\n\tpath?: string,\n\t// TODO: Supportp rotocols\n\t_protocols?: string | string[],\n\toptions: GatewayRequestOptions = {},\n): Promise<any> {\n\t// TODO: Do we need encoding in rawWebSocket?\n\tconst encoding = \"bare\";\n\n\t// Parse path and query parameters\n\tlet pathPortion = \"\";\n\tlet queryPortion = \"\";\n\tif (path) {\n\t\tconst queryIndex = path.indexOf(\"?\");\n\t\tif (queryIndex !== -1) {\n\t\t\tpathPortion = path.substring(0, queryIndex);\n\t\t\tqueryPortion = path.substring(queryIndex); // includes the '?'\n\t\t} else {\n\t\t\tpathPortion = path;\n\t\t}\n\t\t// Remove leading slash if present\n\t\tif (pathPortion.startsWith(\"/\")) {\n\t\t\tpathPortion = pathPortion.slice(1);\n\t\t}\n\t}\n\n\tconst fullPath = `${PATH_WEBSOCKET_PREFIX}${pathPortion}${queryPortion}`;\n\n\tlogger().debug({\n\t\tmsg: \"opening websocket\",\n\t\ttarget,\n\t\tencoding,\n\t\tpath: fullPath,\n\t});\n\n\t// Open WebSocket\n\tconst ws = await driver.openWebSocket(\n\t\tfullPath,\n\t\ttarget,\n\t\tencoding,\n\t\tparams,\n\t\toptions,\n\t);\n\n\t// Node & browser WebSocket types are incompatible\n\treturn ws as any;\n}\n","import { actorNotFound, invalidRequest } from \"@/actor/errors\";\nimport type {\n\tGatewayTarget,\n\tEngineControlClient,\n} from \"@/engine-client/driver\";\n\n/**\n * Resolves a GatewayTarget to a concrete actor ID string.\n *\n * Shared across all EngineControlClient implementations to avoid duplicating the\n * same query-to-actorId dispatch logic.\n */\nexport async function resolveGatewayTarget(\n\tdriver: EngineControlClient,\n\ttarget: GatewayTarget,\n): Promise<string> {\n\tif (\"directId\" in target) {\n\t\treturn target.directId;\n\t}\n\n\tif (\"getForId\" in target) {\n\t\treturn target.getForId.actorId;\n\t}\n\n\tif (\"getForKey\" in target) {\n\t\tconst output = await driver.getWithKey({\n\t\t\tname: target.getForKey.name,\n\t\t\tkey: target.getForKey.key,\n\t\t});\n\t\tif (!output) {\n\t\t\tthrow actorNotFound(\n\t\t\t\t`${target.getForKey.name}:${JSON.stringify(target.getForKey.key)}`,\n\t\t\t);\n\t\t}\n\t\treturn output.actorId;\n\t}\n\n\tif (\"getOrCreateForKey\" in target) {\n\t\tconst output = await driver.getOrCreateWithKey({\n\t\t\tname: target.getOrCreateForKey.name,\n\t\t\tkey: target.getOrCreateForKey.key,\n\t\t\tinput: target.getOrCreateForKey.input,\n\t\t\tregion: target.getOrCreateForKey.region,\n\t\t});\n\t\treturn output.actorId;\n\t}\n\n\tif (\"create\" in target) {\n\t\tconst output = await driver.createActor({\n\t\t\tname: target.create.name,\n\t\t\tkey: target.create.key,\n\t\t\tinput: target.create.input,\n\t\t\tregion: target.create.region,\n\t\t});\n\t\treturn output.actorId;\n\t}\n\n\tthrow invalidRequest(\"Invalid query format\");\n}\n","import type { AnyActorDefinition } from \"@/actor/definition\";\nimport type { ActorSpecifier } from \"@/actor/errors\";\nimport type { Encoding } from \"@/common/encoding\";\nimport {\n\tHEADER_CONN_PARAMS,\n\tHEADER_ENCODING,\n} from \"@/common/actor-router-consts\";\nimport type * as protocol from \"@/common/client-protocol\";\nimport {\n\tCURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,\n\tHTTP_ACTION_REQUEST_VERSIONED,\n\tHTTP_ACTION_RESPONSE_VERSIONED,\n\tHTTP_RESPONSE_ERROR_VERSIONED,\n} from \"@/common/client-protocol-versioned\";\nimport { AsyncMutex } from \"@/common/database/shared\";\nimport {\n\ttype HttpActionRequest as HttpActionRequestJson,\n\tHttpActionRequestSchema,\n\ttype HttpActionResponse as HttpActionResponseJson,\n\tHttpActionResponseSchema,\n\ttype HttpResponseError as HttpResponseErrorJson,\n\tHttpResponseErrorSchema,\n} from \"@/common/client-protocol-zod\";\nimport { deconstructError } from \"@/common/utils\";\nimport type { EngineControlClient } from \"@/engine-client/driver\";\nimport { decodeCborCompat, deserializeWithEncoding, encodeCborCompat } from \"@/serde\";\nimport { bufferToArrayBuffer } from \"@/utils\";\nimport type {\n\tActorActionOptions,\n\tActorConnectOptions,\n\tActorDefinitionActions,\n\tActorFetchInit,\n\tActorDefinitionQueueSend,\n\tActorGatewayOptions,\n\tActorWebSocketOptions,\n} from \"./actor-common\";\nimport { resolveActorGatewayOptions } from \"./actor-common\";\nimport { type ActorConn, ActorConnRaw } from \"./actor-conn\";\nimport {\n\ttype ActorResolutionState,\n\tcheckForSchedulingError,\n\tgetActorNameFromQuery,\n\tgetGatewayTarget,\n\tisDynamicActorQuery,\n\tisStaleResolvedActorError,\n} from \"./actor-query\";\nimport { type ClientRaw, CREATE_ACTOR_CONN_PROXY } from \"./client\";\nimport { ActorError, isSchedulingError } from \"./errors\";\nimport { retryOnLifecycleBoundary } from \"./lifecycle-errors\";\nimport { logger } from \"./log\";\nimport {\n\tcreateQueueSender,\n\ttype QueueSendNoWaitOptions,\n\ttype QueueSendOptions,\n\ttype QueueSendResult,\n\ttype QueueSendWaitOptions,\n} from \"./queue\";\nimport { rawHttpFetch, rawWebSocket } from \"./raw-utils\";\nimport { resolveGatewayTarget } from \"./resolve-gateway-target\";\nimport { sendHttpRequest } from \"./utils\";\n\n/**\n * Provides underlying functions for stateless {@link ActorHandle} for action calls.\n * Similar to ActorConnRaw but doesn't maintain a connection.\n *\n * @see {@link ActorHandle}\n */\nexport class ActorHandleRaw {\n\t#client: ClientRaw;\n\t#driver: EngineControlClient;\n\t#encoding: Encoding;\n\t#actorResolutionState: ActorResolutionState;\n\t#gatewayOptions: ActorGatewayOptions;\n\t#params: unknown;\n\t#getParams?: () => Promise<unknown>;\n\t#resolvedActorId?: string;\n\t#resolvingActorId?: Promise<string>;\n\t#queueSendMutex = new AsyncMutex();\n\n\t/**\n\t * Do not call this directly.\n\t *\n\t * Creates an instance of ActorHandleRaw.\n\t *\n\t * @protected\n\t */\n\tpublic constructor(\n\t\tclient: any,\n\t\tdriver: EngineControlClient,\n\t\tparams: unknown,\n\t\tgetParams: (() => Promise<unknown>) | undefined,\n\t\tencoding: Encoding,\n\t\tactorResolutionState: ActorResolutionState,\n\t\tgatewayOptions: ActorGatewayOptions = {},\n\t) {\n\t\tthis.#client = client;\n\t\tthis.#driver = driver;\n\t\tthis.#encoding = encoding;\n\t\tthis.#actorResolutionState = actorResolutionState;\n\t\tthis.#gatewayOptions = gatewayOptions;\n\t\tthis.#params = params;\n\t\tthis.#getParams = getParams;\n\t}\n\n\tasync #resolveConnectionParams(): Promise<unknown> {\n\t\tif (this.#getParams) {\n\t\t\treturn await this.#getParams();\n\t\t}\n\n\t\treturn this.#params;\n\t}\n\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions: QueueSendWaitOptions,\n\t): Promise<QueueSendResult>;\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendNoWaitOptions,\n\t): Promise<void>;\n\tsend(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendOptions,\n\t): Promise<QueueSendResult | void> {\n\t\treturn this.#sendQueueMessage(name, body, options as any);\n\t}\n\n\tasync #sendQueueMessage(\n\t\tname: string,\n\t\tbody: unknown,\n\t\toptions?: QueueSendOptions,\n\t): Promise<QueueSendResult | void> {\n\t\treturn await this.#queueSendMutex.run(async () => {\n\t\t\tconst maxAttempts = this.#getDynamicQueryMaxAttempts();\n\t\t\tlet useQueryTarget = false;\n\n\t\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\t\tlet actorId: string | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst gatewayOptions = resolveActorGatewayOptions(\n\t\t\t\t\t\tthis.#gatewayOptions,\n\t\t\t\t\t);\n\t\t\t\t\tconst target = await this.#resolveGatewayRequestTarget(\n\t\t\t\t\t\tuseQueryTarget,\n\t\t\t\t\t\tgatewayOptions,\n\t\t\t\t\t);\n\t\t\t\t\tactorId = \"directId\" in target ? target.directId : undefined;\n\n\t\t\t\t\treturn await createQueueSender({\n\t\t\t\t\t\tencoding: this.#encoding,\n\t\t\t\t\t\tparams: this.#params,\n\t\t\t\t\t\tcustomFetch: async (request: Request) => {\n\t\t\t\t\t\t\treturn await this.#driver.sendRequest(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\t\tgatewayOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}).send(name, body, options as any);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst { group, code, message, metadata, actor } = deconstructError(\n\t\t\t\t\t\terr,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.#shouldRetryQueueDispatchOverload(\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tawait this.#shouldRetrySchedulingError(\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tactorId,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.#shouldRetryDynamicLifecycleError(\n\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.#clearResolvedActorId();\n\t\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst invalidated = this.#invalidateResolvedActorId(group, code);\n\t\t\t\t\tif (invalidated && attempt < maxAttempts - 1) {\n\t\t\t\t\t\tuseQueryTarget =\n\t\t\t\t\t\t\t(code === \"starting\" ||\n\t\t\t\t\t\t\t\tcode === \"stopping\" ||\n\t\t\t\t\t\t\t\tcode.startsWith(\"destroyed_\"));\n\t\t\t\t\t\tif (useQueryTarget) {\n\t\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new ActorError(group, code, message, { metadata, actor });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new Error(\"unreachable queue retry state\");\n\t\t});\n\t}\n\n\t/**\n\t * Call a raw action. This method sends an HTTP request to invoke the named action.\n\t *\n\t * @see {@link ActorHandle}\n\t * @template Args - The type of arguments to pass to the action function.\n\t * @template Response - The type of the response returned by the action function.\n\t */\n\tasync action<\n\t\tArgs extends Array<unknown> = unknown[],\n\t\tResponse = unknown,\n\t>(opts: {\n\t\tname: string;\n\t\targs: Args;\n\t} & ActorActionOptions): Promise<Response> {\n\t\tif (\n\t\t\ttypeof opts === \"string\" ||\n\t\t\ttypeof opts !== \"object\" ||\n\t\t\topts === null ||\n\t\t\t!(\"name\" in opts)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid action call: expected an options object { name, args }, got ${typeof opts}. Use handle.actionName(...args) for the shorthand API.`,\n\t\t\t);\n\t\t}\n\t\tconst run = async () => (await this.#sendActionNow(opts)) as Response;\n\t\tif (opts.name === \"destroy\") {\n\t\t\treturn await run();\n\t\t}\n\n\t\treturn await retryOnLifecycleBoundary(run, { signal: opts.signal });\n\t}\n\n\tasync #sendActionNow(opts: {\n\t\tname: string;\n\t\targs: unknown[];\n\t} & ActorActionOptions): Promise<unknown> {\n\t\tconst maxAttempts = this.#getDynamicQueryMaxAttempts();\n\t\tlet useQueryTarget = false;\n\t\tconst gatewayOptions = resolveActorGatewayOptions(\n\t\t\tthis.#gatewayOptions,\n\t\t\topts,\n\t\t);\n\n\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\tlet actorId: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst target = await this.#resolveGatewayRequestTarget(\n\t\t\t\t\tuseQueryTarget,\n\t\t\t\t\tgatewayOptions,\n\t\t\t\t);\n\t\t\t\tactorId = \"directId\" in target ? target.directId : undefined;\n\n\t\t\t\tlogger().debug(\n\t\t\t\t\tactorId\n\t\t\t\t\t\t? { msg: \"using direct actor gateway target\", actorId }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tmsg: \"using query gateway target for action\",\n\t\t\t\t\t\t\t\tquery: this.#actorResolutionState,\n\t\t\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"handling action\",\n\t\t\t\t\tname: opts.name,\n\t\t\t\t\tencoding: this.#encoding,\n\t\t\t\t});\n\t\t\t\tconst output = await sendHttpRequest<\n\t\t\t\t\tprotocol.HttpActionRequest,\n\t\t\t\t\tprotocol.HttpActionResponse,\n\t\t\t\t\tHttpActionRequestJson,\n\t\t\t\t\tHttpActionResponseJson,\n\t\t\t\t\tunknown[],\n\t\t\t\t\tResponse\n\t\t\t\t>({\n\t\t\t\t\turl: `http://actor/action/${encodeURIComponent(opts.name)}`,\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t[HEADER_ENCODING]: this.#encoding,\n\t\t\t\t\t\t...(this.#params !== undefined\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t[HEADER_CONN_PARAMS]: JSON.stringify(\n\t\t\t\t\t\t\t\t\t\tthis.#params,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t\tbody: opts.args,\n\t\t\t\t\tencoding: this.#encoding,\n\t\t\t\t\tcustomFetch: async (request) =>\n\t\t\t\t\t\tawait this.#driver.sendRequest(\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\tgatewayOptions,\n\t\t\t\t\t\t),\n\t\t\t\t\tsignal: opts?.signal,\n\t\t\t\t\trequestVersion: CLIENT_PROTOCOL_CURRENT_VERSION,\n\t\t\t\t\trequestVersionedDataHandler: HTTP_ACTION_REQUEST_VERSIONED,\n\t\t\t\t\tresponseVersion: CLIENT_PROTOCOL_CURRENT_VERSION,\n\t\t\t\t\tresponseVersionedDataHandler: HTTP_ACTION_RESPONSE_VERSIONED,\n\t\t\t\t\trequestZodSchema: HttpActionRequestSchema,\n\t\t\t\t\tresponseZodSchema: HttpActionResponseSchema,\n\t\t\t\t\trequestToJson: (args): HttpActionRequestJson => ({\n\t\t\t\t\t\targs,\n\t\t\t\t\t}),\n\t\t\t\t\trequestToBare: (args): protocol.HttpActionRequest => ({\n\t\t\t\t\t\targs: bufferToArrayBuffer(encodeCborCompat(args)),\n\t\t\t\t\t}),\n\t\t\t\t\tresponseFromJson: (json): Response => json.output as Response,\n\t\t\t\t\tresponseFromBare: (bare): Response =>\n\t\t\t\t\t\tdecodeCborCompat(new Uint8Array(bare.output)),\n\t\t\t\t});\n\t\t\t\tif (opts.name === \"destroy\" && actorId) {\n\t\t\t\t\tawait this.#waitForDestroyActionToSettle(actorId);\n\t\t\t\t}\n\t\t\t\treturn output;\n\t\t\t} catch (err) {\n\t\t\t\tconst { group, code, message, metadata, actor } = deconstructError(\n\t\t\t\t\terr,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tawait this.#shouldRetrySchedulingError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tactorId,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\topts.name !== \"destroy\" &&\n\t\t\t\t\tthis.#shouldRetryDynamicLifecycleError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tthis.#clearResolvedActorId();\n\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tgroup === \"actor\" &&\n\t\t\t\t\tcode === \"destroyed_while_waiting_for_ready\" &&\n\t\t\t\t\t\"getForId\" in this.#actorResolutionState\n\t\t\t\t) {\n\t\t\t\t\tthrow new ActorError(\n\t\t\t\t\t\t\"actor\",\n\t\t\t\t\t\t\"not_found\",\n\t\t\t\t\t\t\"The actor does not exist or was destroyed.\",\n\t\t\t\t\t\t{ metadata, actor },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst invalidated = this.#invalidateResolvedActorId(group, code);\n\t\t\t\tif (invalidated && attempt < maxAttempts - 1) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tgroup === \"actor\" &&\n\t\t\t\t\t\t(code === \"starting\" || code === \"stopping\")\n\t\t\t\t\t) {\n\t\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthrow new ActorError(group, code, message, { metadata, actor });\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"unreachable action retry state\");\n\t}\n\n\tasync #waitForDestroyActionToSettle(actorId: string): Promise<void> {\n\t\tconst name = getActorNameFromQuery(this.#actorResolutionState);\n\t\tconst deadline = Date.now() + 1_000;\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst actor = await this.#driver.getForId({ name, actorId });\n\t\t\tif (!actor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 25));\n\t\t}\n\t}\n\n\tasync #waitForRetryWindow(): Promise<void> {\n\t\tawait new Promise((resolve) => setTimeout(resolve, 100));\n\t}\n\n\t#getDynamicQueryMaxAttempts(): number {\n\t\tif (!isDynamicActorQuery(this.#actorResolutionState)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn \"getOrCreateForKey\" in this.#actorResolutionState ? 60 : 24;\n\t}\n\n\t#shouldRetryDynamicLifecycleError(\n\t\tgroup: string,\n\t\tcode: string,\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t): boolean {\n\t\tif (\n\t\t\t!isDynamicActorQuery(this.#actorResolutionState) ||\n\t\t\tattempt >= maxAttempts - 1 ||\n\t\t\tgroup !== \"actor\"\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (\n\t\t\tcode === \"not_found\" ||\n\t\t\tcode === \"starting\" ||\n\t\t\tcode === \"stopping\" ||\n\t\t\tcode === \"not_configured\" ||\n\t\t\tcode === \"dropped_reply\" ||\n\t\t\tcode === \"destroying\" ||\n\t\t\tcode.startsWith(\"destroyed_\")\n\t\t);\n\t}\n\n\t#shouldRetryQueueDispatchOverload(\n\t\tgroup: string,\n\t\tcode: string,\n\t\tmetadata: unknown,\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t): boolean {\n\t\tif (\n\t\t\t!isDynamicActorQuery(this.#actorResolutionState) ||\n\t\t\tattempt >= maxAttempts - 1 ||\n\t\t\tgroup !== \"actor\" ||\n\t\t\tcode !== \"overloaded\" ||\n\t\t\tmetadata === null ||\n\t\t\ttypeof metadata !== \"object\"\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst overload = metadata as {\n\t\t\tchannel?: unknown;\n\t\t\toperation?: unknown;\n\t\t};\n\t\treturn (\n\t\t\toverload.channel === \"dispatch_inbox\" &&\n\t\t\toverload.operation === \"dispatch_queue_send\"\n\t\t);\n\t}\n\n\t#clearResolvedActorId(): void {\n\t\tthis.#resolvedActorId = undefined;\n\t\tthis.#resolvingActorId = undefined;\n\t}\n\n\tasync #shouldRetrySchedulingError(\n\t\tgroup: string,\n\t\tcode: string,\n\t\tactorId: string | undefined,\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t): Promise<boolean> {\n\t\tif (\n\t\t\t!isDynamicActorQuery(this.#actorResolutionState) ||\n\t\t\t!isSchedulingError(group, code) ||\n\t\t\tattempt >= maxAttempts - 1\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (actorId) {\n\t\t\tconst schedulingError = await checkForSchedulingError(\n\t\t\t\tgroup,\n\t\t\t\tcode,\n\t\t\t\tactorId,\n\t\t\t\tthis.#actorResolutionState,\n\t\t\t\tthis.#driver,\n\t\t\t);\n\t\t\tif (schedulingError) {\n\t\t\t\tthrow schedulingError;\n\t\t\t}\n\t\t}\n\n\t\tthis.#clearResolvedActorId();\n\t\treturn true;\n\t}\n\n\t#invalidateResolvedActorId(group: string, code: string): boolean {\n\t\tif (\n\t\t\t!isDynamicActorQuery(this.#actorResolutionState) ||\n\t\t\t!isStaleResolvedActorError(group, code)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.#clearResolvedActorId();\n\t\treturn true;\n\t}\n\n\tasync #resolveActionTarget(useQueryTarget: boolean) {\n\t\tif (\"getForId\" in this.#actorResolutionState) {\n\t\t\treturn getGatewayTarget(this.#actorResolutionState);\n\t\t}\n\n\t\tif (useQueryTarget) {\n\t\t\treturn getGatewayTarget(this.#actorResolutionState);\n\t\t}\n\n\t\tif (this.#resolvedActorId) {\n\t\t\treturn { directId: this.#resolvedActorId } as const;\n\t\t}\n\n\t\tif (!this.#resolvingActorId) {\n\t\t\tthis.#resolvingActorId = resolveGatewayTarget(\n\t\t\t\tthis.#driver,\n\t\t\t\tthis.#actorResolutionState,\n\t\t\t).then((actorId) => {\n\t\t\t\tthis.#resolvedActorId = actorId;\n\t\t\t\treturn actorId;\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\treturn { directId: await this.#resolvingActorId } as const;\n\t\t} finally {\n\t\t\tthis.#resolvingActorId = undefined;\n\t\t}\n\t}\n\n\tasync #resolveGatewayRequestTarget(\n\t\tuseQueryTarget: boolean,\n\t\tgatewayOptions: ActorGatewayOptions,\n\t) {\n\t\tif (gatewayOptions.skipReadyWait) {\n\t\t\treturn getGatewayTarget(this.#actorResolutionState);\n\t\t}\n\n\t\treturn await this.#resolveActionTarget(useQueryTarget);\n\t}\n\n\t/**\n\t * Establishes a persistent connection to the actor.\n\t *\n\t * @template AD The actor class that this connection is for.\n\t * @returns {ActorConn<AD>} A connection to the actor.\n\t */\n\tconnect(\n\t\tparams?: unknown,\n\t\toptions: ActorConnectOptions = {},\n\t): ActorConn<AnyActorDefinition> {\n\t\tlogger().debug({\n\t\t\tmsg: \"establishing connection from handle\",\n\t\t\tquery: this.#actorResolutionState,\n\t\t});\n\n\t\tconst connParams = params === undefined ? this.#params : params;\n\t\tconst getParams = params === undefined ? this.#getParams : undefined;\n\n\t\tconst conn = new ActorConnRaw(\n\t\t\tthis.#client,\n\t\t\tthis.#driver,\n\t\t\tconnParams,\n\t\t\tgetParams,\n\t\t\tthis.#encoding,\n\t\t\tthis.#actorResolutionState,\n\t\t\tresolveActorGatewayOptions(this.#gatewayOptions, options),\n\t\t);\n\n\t\treturn this.#client[CREATE_ACTOR_CONN_PROXY](\n\t\t\tconn,\n\t\t) as ActorConn<AnyActorDefinition>;\n\t}\n\n\t/**\n\t * Fetches a resource from this actor via the /request endpoint. This is a\n\t * convenience wrapper around the raw HTTP API.\n\t */\n\tfetch(input: string | URL | Request, init?: ActorFetchInit) {\n\t\treturn this.#fetchWithResolvedActor(input, init);\n\t}\n\n\tasync #fetchWithResolvedActor(\n\t\tinput: string | URL | Request,\n\t\tinit?: ActorFetchInit,\n\t) {\n\t\tconst maxAttempts = this.#getDynamicQueryMaxAttempts();\n\t\tlet useQueryTarget = false;\n\t\tconst { skipReadyWait, ...requestInit } = init ?? {};\n\t\tconst gatewayOptions = resolveActorGatewayOptions(\n\t\t\tthis.#gatewayOptions,\n\t\t\t{\n\t\t\t\tskipReadyWait,\n\t\t\t},\n\t\t);\n\n\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\tlet actorId: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst target = await this.#resolveGatewayRequestTarget(\n\t\t\t\t\tuseQueryTarget,\n\t\t\t\t\tgatewayOptions,\n\t\t\t\t);\n\t\t\t\tactorId = \"directId\" in target ? target.directId : undefined;\n\t\t\t\tconst response = await rawHttpFetch(\n\t\t\t\t\tthis.#driver,\n\t\t\t\t\ttarget,\n\t\t\t\t\tthis.#params,\n\t\t\t\t\tinput,\n\t\t\t\t\trequestInit,\n\t\t\t\t\tgatewayOptions,\n\t\t\t\t);\n\t\t\t\tconst retry = await this.#shouldRetryRawFetchResponse(\n\t\t\t\t\tresponse,\n\t\t\t\t\tactorId,\n\t\t\t\t\tattempt,\n\t\t\t\t\tmaxAttempts,\n\t\t\t\t);\n\t\t\t\tif (retry) {\n\t\t\t\t\tuseQueryTarget = retry.useQueryTarget;\n\t\t\t\t\tif (retry.waitForRetryWindow) {\n\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t} catch (err) {\n\t\t\t\tconst { group, code, message, metadata, actor } = deconstructError(\n\t\t\t\t\terr,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tawait this.#shouldRetrySchedulingError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tactorId,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tthis.#shouldRetryDynamicLifecycleError(\n\t\t\t\t\t\tgroup,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tmaxAttempts,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tthis.#clearResolvedActorId();\n\t\t\t\t\tuseQueryTarget = true;\n\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst invalidated = this.#invalidateResolvedActorId(group, code);\n\t\t\t\tif (invalidated && attempt < maxAttempts - 1) {\n\t\t\t\t\tuseQueryTarget =\n\t\t\t\t\t\t(code === \"starting\" ||\n\t\t\t\t\t\t\tcode === \"stopping\" ||\n\t\t\t\t\t\t\tcode.startsWith(\"destroyed_\"));\n\t\t\t\t\tif (useQueryTarget) {\n\t\t\t\t\t\tawait this.#waitForRetryWindow();\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthrow new ActorError(group, code, message, { metadata, actor });\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"unreachable fetch retry state\");\n\t}\n\n\tasync #shouldRetryRawFetchResponse(\n\t\tresponse: Response,\n\t\tactorId: string | undefined,\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t): Promise<\n\t\t| {\n\t\t\t\tuseQueryTarget: boolean;\n\t\t\t\twaitForRetryWindow: boolean;\n\t\t }\n\t\t| null\n\t> {\n\t\tif (response.ok || !isDynamicActorQuery(this.#actorResolutionState)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst error = await this.#parseRawFetchErrorResponse(response);\n\t\tif (!error) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { group, code } = error;\n\n\t\tif (\n\t\t\tawait this.#shouldRetrySchedulingError(\n\t\t\t\tgroup,\n\t\t\t\tcode,\n\t\t\t\tactorId,\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts,\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tuseQueryTarget: true,\n\t\t\t\twaitForRetryWindow: true,\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.#shouldRetryDynamicLifecycleError(\n\t\t\t\tgroup,\n\t\t\t\tcode,\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts,\n\t\t\t)\n\t\t) {\n\t\t\tthis.#clearResolvedActorId();\n\t\t\treturn {\n\t\t\t\tuseQueryTarget: true,\n\t\t\t\twaitForRetryWindow: true,\n\t\t\t};\n\t\t}\n\n\t\tconst invalidated = this.#invalidateResolvedActorId(group, code);\n\t\tif (invalidated && attempt < maxAttempts - 1) {\n\t\t\tconst useQueryTarget =\n\t\t\t\tcode === \"starting\" ||\n\t\t\t\tcode === \"stopping\" ||\n\t\t\t\tcode.startsWith(\"destroyed_\");\n\t\t\treturn {\n\t\t\t\tuseQueryTarget,\n\t\t\t\twaitForRetryWindow: useQueryTarget,\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tasync #parseRawFetchErrorResponse(response: Response): Promise<{\n\t\tgroup: string;\n\t\tcode: string;\n\t\tmessage: string;\n\t\tmetadata?: unknown;\n\t\tactor?: ActorSpecifier;\n\t} | null> {\n\t\tif (response.ok) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst contentType = response.headers.get(\"content-type\");\n\t\tconst encoding: Encoding = contentType?.includes(\"application/json\")\n\t\t\t? \"json\"\n\t\t\t: this.#encoding;\n\n\t\ttry {\n\t\t\treturn deserializeWithEncoding<\n\t\t\t\tprotocol.HttpResponseError,\n\t\t\t\tHttpResponseErrorJson,\n\t\t\t\t{\n\t\t\t\t\tgroup: string;\n\t\t\t\t\tcode: string;\n\t\t\t\t\tmessage: string;\n\t\t\t\t\tmetadata?: unknown;\n\t\t\t\t\tactor?: ActorSpecifier;\n\t\t\t\t}\n\t\t\t>(\n\t\t\t\tencoding,\n\t\t\t\tnew Uint8Array(await response.clone().arrayBuffer()),\n\t\t\t\tHTTP_RESPONSE_ERROR_VERSIONED,\n\t\t\t\tHttpResponseErrorSchema,\n\t\t\t\t(json) => ({\n\t\t\t\t\t...json,\n\t\t\t\t\tactor: json.actor\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...json.actor,\n\t\t\t\t\t\t\t\tgeneration: Number(json.actor.generation),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t\t(bare) => ({\n\t\t\t\t\tgroup: bare.group,\n\t\t\t\t\tcode: bare.code,\n\t\t\t\t\tmessage: bare.message,\n\t\t\t\t\tmetadata: bare.metadata\n\t\t\t\t\t\t? decodeCborCompat(new Uint8Array(bare.metadata))\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tactor: bare.actor\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tactorId: bare.actor.actorId,\n\t\t\t\t\t\t\t\tgeneration: Number(bare.actor.generation),\n\t\t\t\t\t\t\t\tkey: bare.actor.key ?? undefined,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Opens a raw WebSocket connection to this actor.\n\t */\n\tasync webSocket(\n\t\tpath?: string,\n\t\tprotocols?: string | string[],\n\t\toptions: ActorWebSocketOptions = {},\n\t) {\n\t\tconst params = await this.#resolveConnectionParams();\n\t\tconst gatewayOptions = resolveActorGatewayOptions(\n\t\t\tthis.#gatewayOptions,\n\t\t\toptions,\n\t\t);\n\t\tconst target = await this.#resolveGatewayRequestTarget(\n\t\t\tfalse,\n\t\t\tgatewayOptions,\n\t\t);\n\t\treturn await rawWebSocket(\n\t\t\tthis.#driver,\n\t\t\ttarget,\n\t\t\tparams,\n\t\t\tpath,\n\t\t\tprotocols,\n\t\t\tgatewayOptions,\n\t\t);\n\t}\n\n\t/**\n\t * Resolves the actor to get its unique actor ID.\n\t */\n\tasync resolve(): Promise<string> {\n\t\tif (\"getForId\" in this.#actorResolutionState) {\n\t\t\treturn this.#actorResolutionState.getForId.actorId;\n\t\t}\n\n\t\tconst target = await this.#resolveActionTarget(false);\n\t\tif (\"directId\" in target) {\n\t\t\treturn target.directId;\n\t\t}\n\n\t\tthrow new Error(\"dynamic actor resolution did not produce a direct actor id\");\n\t}\n\n\t/**\n\t * Returns the raw URL for routing traffic to the actor.\n\t */\n\tasync getGatewayUrl(): Promise<string> {\n\t\treturn await this.#driver.buildGatewayUrl(\n\t\t\tgetGatewayTarget(this.#actorResolutionState),\n\t\t\tthis.#gatewayOptions,\n\t\t);\n\t}\n\n\tasync reload(): Promise<void> {\n\t\tconst target = getGatewayTarget(this.#actorResolutionState);\n\t\tconst request = new Request(\"http://actor/dynamic/reload\", {\n\t\t\tmethod: \"PUT\",\n\t\t});\n\t\tconst response = await this.#driver.sendRequest(target, request);\n\t\tif (!response.ok) {\n\t\t\tconst body = await response.text().catch(() => \"\");\n\t\t\tthrow new ActorError(\n\t\t\t\t\"actor\",\n\t\t\t\t\"reload_failed\",\n\t\t\t\t`reload failed with status ${response.status}: ${body}`,\n\t\t\t\t{},\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Stateless handle to a actor. Allows calling actor's remote procedure calls with inferred types\n * without establishing a persistent connection.\n *\n * @example\n * ```\n * const room = client.get<ChatRoom>(...etc...);\n * // This calls the action named `sendMessage` on the `ChatRoom` actor without a connection.\n * await room.sendMessage('Hello, world!');\n * ```\n *\n * Private methods (e.g. those starting with `_`) are automatically excluded.\n *\n * @template AD The actor class that this handle is for.\n * @see {@link ActorHandleRaw}\n */\nexport type ActorHandle<AD extends AnyActorDefinition> = Omit<\n\tActorHandleRaw,\n\t\"connect\" | \"send\"\n> & {\n\t// Add typed version of ActorConn (instead of using AnyActorDefinition)\n\tconnect(params?: unknown, options?: ActorConnectOptions): ActorConn<AD>;\n\t// Resolve method returns the actor ID\n\tresolve(): Promise<string>;\n} & ActorDefinitionQueueSend<AD> &\n\tActorDefinitionActions<AD>;\n","import type { AnyActorDefinition } from \"@/actor/definition\";\nimport type { ActorQuery } from \"@/client/query\";\nimport type { Encoding } from \"@/common/encoding\";\nimport type { EngineControlClient } from \"@/engine-client/driver\";\nimport type { Registry } from \"@/registry\";\nimport type { ActorActionFunction, ActorGatewayOptions } from \"./actor-common\";\nimport {\n\ttype ActorConn,\n\ttype ActorConnRaw,\n\tCONNECT_SYMBOL,\n} from \"./actor-conn\";\nimport { type ActorHandle, ActorHandleRaw } from \"./actor-handle\";\nimport { logger } from \"./log\";\nimport { resolveGatewayTarget } from \"./resolve-gateway-target\";\n\nexport type { ClientConfig, ClientConfigInput } from \"./config\";\n\n/** Extract the actor registry from the registry definition. */\nexport type ExtractActorsFromRegistry<A extends Registry<any>> =\n\tA extends Registry<infer Actors> ? Actors : never;\n\n/** Extract the registry definition from the client. */\nexport type ExtractRegistryFromClient<C extends Client<Registry<{}>>> =\n\tC extends Client<infer A> ? A : never;\n\n/**\n * Represents a actor accessor that provides methods to interact with a specific actor.\n */\nexport interface ActorAccessor<AD extends AnyActorDefinition> {\n\t/**\n\t * Gets a stateless handle to a actor by its key, but does not create the actor if it doesn't exist.\n\t * The actor name is automatically injected from the property accessor.\n\t *\n\t * Each operation resolves the current actor for the key before sending the\n\t * request.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {GetWithIdOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tget(key?: string | string[], opts?: GetWithIdOptions): ActorHandle<AD>;\n\n\t/**\n\t * Gets a stateless handle to a actor by its key, creating it if necessary.\n\t * The actor name is automatically injected from the property accessor.\n\t *\n\t * Each operation resolves the current actor for the key before sending the\n\t * request.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {GetOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tgetOrCreate(\n\t\tkey?: string | string[],\n\t\topts?: GetOrCreateOptions,\n\t): ActorHandle<AD>;\n\n\t/**\n\t * Gets a stateless handle to a actor by its ID.\n\t *\n\t * If the actor is destroyed, operations will throw without retrying since\n\t * there is no key to re-resolve.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string} actorId - The ID of the actor.\n\t * @param {GetWithIdOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tgetForId(actorId: string, opts?: GetWithIdOptions): ActorHandle<AD>;\n\n\t/**\n\t * Creates a new actor with the name automatically injected from the property accessor,\n\t * and returns a stateless handle to it with the actor ID resolved.\n\t *\n\t * If the actor is destroyed, operations will throw without retrying since\n\t * creation is a one-shot operation.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string | string[]} key - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {CreateOptions} [opts] - Options for creating the actor (excluding name and key).\n\t * @returns {Promise<ActorHandle<AD>>} - A promise that resolves to a handle to the actor.\n\t */\n\tcreate(\n\t\tkey?: string | string[],\n\t\topts?: CreateOptions,\n\t): Promise<ActorHandle<AD>>;\n}\n\n/**\n * Options for querying actors.\n * @typedef {Object} QueryOptions\n * @property {unknown} [parameters] - Parameters to pass to the connection.\n */\nexport interface QueryOptions {\n\t/** Parameters to pass to the connection. */\n\tparams?: unknown;\n\t/**\n\t * Lazily resolves connection parameters for `.connect()` and `.webSocket()`.\n\t * This is called each time a new connection is opened.\n\t */\n\tgetParams?: () => Promise<unknown>;\n\t/** Signal to abort the request. */\n\tsignal?: AbortSignal;\n}\n\n/**\n * Options for getting a actor by ID.\n * @typedef {QueryOptions} GetWithIdOptions\n */\nexport interface GetWithIdOptions extends QueryOptions {}\n\n/**\n * Options for getting a actor.\n * @typedef {QueryOptions} GetOptions\n */\nexport interface GetOptions extends QueryOptions {}\n\n/**\n * Options for getting or creating a actor.\n * @typedef {QueryOptions} GetOrCreateOptions\n * @property {string} [createInRegion] - Region to create the actor in if it doesn't exist.\n */\nexport interface GetOrCreateOptions extends QueryOptions {\n\t/** Region to create the actor in if it doesn't exist. */\n\tcreateInRegion?: string;\n\t/** Input data to pass to the actor. */\n\tcreateWithInput?: unknown;\n}\n\n/**\n * Options for creating a actor.\n * @typedef {QueryOptions} CreateOptions\n * @property {string} [region] - The region to create the actor in.\n */\nexport interface CreateOptions extends QueryOptions {\n\t/** The region to create the actor in. */\n\tregion?: string;\n\t/** Input data to pass to the actor. */\n\tinput?: unknown;\n}\n\n/**\n * Represents a region to connect to.\n * @typedef {Object} Region\n * @property {string} id - The region ID.\n * @property {string} name - The region name.\n * @see {@link https://rivet.dev/docs/edge|Edge Networking}\n * @see {@link https://rivet.dev/docs/regions|Available Regions}\n */\nexport interface Region {\n\t/**\n\t * The region slug.\n\t */\n\tid: string;\n\n\t/**\n\t * The human-friendly region name.\n\t */\n\tname: string;\n}\n\nexport const ACTOR_CONNS_SYMBOL = Symbol(\"actorConns\");\nexport const CREATE_ACTOR_CONN_PROXY = Symbol(\"createActorConnProxy\");\n\n/**\n * Client for managing & connecting to actors.\n *\n * @template A The actors map type that defines the available actors.\n * @see {@link https://rivet.dev/docs/manage|Create & Manage Actors}\n */\nexport class ClientRaw {\n\t#disposed = false;\n\n\t[ACTOR_CONNS_SYMBOL] = new Set<ActorConnRaw>();\n\n\t#driver: EngineControlClient;\n\t#encodingKind: Encoding;\n\t#gatewayOptions: ActorGatewayOptions;\n\n\t/**\n\t * Creates an instance of Client.\n\t */\n\tpublic constructor(\n\t\tdriver: EngineControlClient,\n\t\tencoding: Encoding | undefined,\n\t\tgatewayOptions: ActorGatewayOptions = {},\n\t) {\n\t\tthis.#driver = driver;\n\n\t\tthis.#encodingKind = encoding ?? \"bare\";\n\t\tthis.#gatewayOptions = gatewayOptions;\n\t}\n\n\t/**\n\t * Gets a stateless handle to a actor by its ID.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string} name - The name of the actor.\n\t * @param {string} actorId - The ID of the actor.\n\t * @param {GetWithIdOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tgetForId<AD extends AnyActorDefinition>(\n\t\tname: string,\n\t\tactorId: string,\n\t\topts?: GetWithIdOptions,\n\t): ActorHandle<AD> {\n\t\tlogger().debug({\n\t\t\tmsg: \"get handle to actor with id\",\n\t\t\tname,\n\t\t\tactorId,\n\t\t\tparams: opts?.params,\n\t\t});\n\n\t\tconst actorQuery: ActorQuery = {\n\t\t\tgetForId: {\n\t\t\t\tname,\n\t\t\t\tactorId,\n\t\t\t},\n\t\t};\n\n\t\tconst handle = this.#createHandle(\n\t\t\topts?.params,\n\t\t\topts?.getParams,\n\t\t\tactorQuery,\n\t\t);\n\t\treturn createActorProxy(handle) as ActorHandle<AD>;\n\t}\n\n\t/**\n\t * Gets a stateless handle to a actor by its key, but does not create the actor if it doesn't exist.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string} name - The name of the actor.\n\t * @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {GetWithIdOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tget<AD extends AnyActorDefinition>(\n\t\tname: string,\n\t\tkey?: string | string[],\n\t\topts?: GetWithIdOptions,\n\t): ActorHandle<AD> {\n\t\t// Convert string to array of strings\n\t\tconst keyArray: string[] = typeof key === \"string\" ? [key] : key || [];\n\n\t\tlogger().debug({\n\t\t\tmsg: \"get handle to actor\",\n\t\t\tname,\n\t\t\tkey: keyArray,\n\t\t\tparameters: opts?.params,\n\t\t});\n\n\t\tconst actorQuery: ActorQuery = {\n\t\t\tgetForKey: {\n\t\t\t\tname,\n\t\t\t\tkey: keyArray,\n\t\t\t},\n\t\t};\n\n\t\tconst handle = this.#createHandle(\n\t\t\topts?.params,\n\t\t\topts?.getParams,\n\t\t\tactorQuery,\n\t\t);\n\t\treturn createActorProxy(handle) as ActorHandle<AD>;\n\t}\n\n\t/**\n\t * Gets a stateless handle to a actor by its key, creating it if necessary.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string} name - The name of the actor.\n\t * @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {GetOptions} [opts] - Options for getting the actor.\n\t * @returns {ActorHandle<AD>} - A handle to the actor.\n\t */\n\tgetOrCreate<AD extends AnyActorDefinition>(\n\t\tname: string,\n\t\tkey?: string | string[],\n\t\topts?: GetOrCreateOptions,\n\t): ActorHandle<AD> {\n\t\t// Convert string to array of strings\n\t\tconst keyArray: string[] = typeof key === \"string\" ? [key] : key || [];\n\n\t\tlogger().debug({\n\t\t\tmsg: \"get or create handle to actor\",\n\t\t\tname,\n\t\t\tkey: keyArray,\n\t\t\tparameters: opts?.params,\n\t\t\tcreateInRegion: opts?.createInRegion,\n\t\t});\n\n\t\tconst actorQuery: ActorQuery = {\n\t\t\tgetOrCreateForKey: {\n\t\t\t\tname,\n\t\t\t\tkey: keyArray,\n\t\t\t\tinput: opts?.createWithInput,\n\t\t\t\tregion: opts?.createInRegion,\n\t\t\t},\n\t\t};\n\n\t\tconst handle = this.#createHandle(\n\t\t\topts?.params,\n\t\t\topts?.getParams,\n\t\t\tactorQuery,\n\t\t);\n\t\treturn createActorProxy(handle) as ActorHandle<AD>;\n\t}\n\n\t/**\n\t * Creates a new actor with the provided key and returns a stateless handle to it.\n\t * Resolves the actor ID and returns a handle with getForId query.\n\t *\n\t * @template AD The actor class that this handle is for.\n\t * @param {string} name - The name of the actor.\n\t * @param {string | string[]} key - The key to identify the actor. Can be a single string or an array of strings.\n\t * @param {CreateOptions} [opts] - Options for creating the actor (excluding name and key).\n\t * @returns {Promise<ActorHandle<AD>>} - A promise that resolves to a handle to the actor.\n\t */\n\tasync create<AD extends AnyActorDefinition>(\n\t\tname: string,\n\t\tkey?: string | string[],\n\t\topts?: CreateOptions,\n\t): Promise<ActorHandle<AD>> {\n\t\t// Convert string to array of strings\n\t\tconst keyArray: string[] = typeof key === \"string\" ? [key] : key || [];\n\n\t\tconst createQuery = {\n\t\t\tcreate: {\n\t\t\t\t...opts,\n\t\t\t\t// Do these last to override `opts`\n\t\t\t\tname,\n\t\t\t\tkey: keyArray,\n\t\t\t},\n\t\t} satisfies ActorQuery;\n\n\t\tlogger().debug({\n\t\t\tmsg: \"create actor handle\",\n\t\t\tname,\n\t\t\tkey: keyArray,\n\t\t\tparameters: opts?.params,\n\t\t\tcreate: createQuery.create,\n\t\t});\n\n\t\t// Create the actor\n\t\tconst actorId = await resolveGatewayTarget(this.#driver, createQuery);\n\t\tlogger().debug({\n\t\t\tmsg: \"created actor with ID\",\n\t\t\tname,\n\t\t\tkey: keyArray,\n\t\t\tactorId,\n\t\t});\n\n\t\t// Create handle with actor ID\n\t\tconst getForIdQuery = {\n\t\t\tgetForId: {\n\t\t\t\tname,\n\t\t\t\tactorId,\n\t\t\t},\n\t\t} satisfies ActorQuery;\n\t\tconst handle = this.#createHandle(\n\t\t\topts?.params,\n\t\t\topts?.getParams,\n\t\t\tgetForIdQuery,\n\t\t);\n\n\t\tconst proxy = createActorProxy(handle) as ActorHandle<AD>;\n\n\t\treturn proxy;\n\t}\n\n\t#createHandle(\n\t\tparams: unknown,\n\t\tgetParams: (() => Promise<unknown>) | undefined,\n\t\tactorQuery: ActorQuery,\n\t): ActorHandleRaw {\n\t\treturn new ActorHandleRaw(\n\t\t\tthis,\n\t\t\tthis.#driver,\n\t\t\tparams,\n\t\t\tgetParams,\n\t\t\tthis.#encodingKind,\n\t\t\tactorQuery,\n\t\t\tthis.#gatewayOptions,\n\t\t);\n\t}\n\n\t[CREATE_ACTOR_CONN_PROXY]<AD extends AnyActorDefinition>(\n\t\tconn: ActorConnRaw,\n\t): ActorConn<AD> {\n\t\t// Save to connection list\n\t\tthis[ACTOR_CONNS_SYMBOL].add(conn);\n\n\t\t// Start connection\n\t\tconn[CONNECT_SYMBOL]();\n\n\t\treturn createActorProxy(conn) as ActorConn<AD>;\n\t}\n\n\t/**\n\t * Disconnects from all actors.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when all connections are closed.\n\t */\n\tasync dispose(): Promise<void> {\n\t\tif (this.#disposed) {\n\t\t\tlogger().warn({ msg: \"client already disconnected\" });\n\t\t\treturn;\n\t\t}\n\t\tthis.#disposed = true;\n\n\t\tlogger().debug({ msg: \"disposing client\" });\n\n\t\tconst disposePromises = [];\n\n\t\t// Dispose all connections\n\t\tfor (const conn of this[ACTOR_CONNS_SYMBOL].values()) {\n\t\t\tdisposePromises.push(conn.dispose());\n\t\t}\n\n\t\tawait Promise.all(disposePromises);\n\t}\n}\n\n/**\n * Client type with actor accessors.\n * This adds property accessors for actor names to the ClientRaw base class.\n *\n * @template A The actor registry type.\n */\nexport type Client<A extends Registry<any>> = ClientRaw & {\n\t[K in keyof ExtractActorsFromRegistry<A>]: ActorAccessor<\n\t\tExtractActorsFromRegistry<A>[K]\n\t>;\n};\n\nexport type AnyClient = Client<Registry<any>>;\n\nexport function createClientWithDriver<A extends Registry<any>>(\n\tdriver: EngineControlClient,\n\tconfig: { encoding?: Encoding; gateway?: ActorGatewayOptions } = {},\n): Client<A> {\n\tconst client = new ClientRaw(driver, config.encoding, config.gateway);\n\n\t// Create proxy for accessing actors by name\n\treturn new Proxy(client, {\n\t\tget: (target: ClientRaw, prop: string | symbol, receiver: unknown) => {\n\t\t\t// Get the real property if it exists\n\t\t\tif (typeof prop === \"symbol\" || prop in target) {\n\t\t\t\tconst value = Reflect.get(target, prop, receiver);\n\t\t\t\t// Preserve method binding\n\t\t\t\tif (typeof value === \"function\") {\n\t\t\t\t\treturn value.bind(target);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// Handle actor accessor for string properties (actor names)\n\t\t\tif (typeof prop === \"string\") {\n\t\t\t\t// Return actor accessor object with methods\n\t\t\t\treturn {\n\t\t\t\t\t// Handle methods (stateless action)\n\t\t\t\t\tget: (\n\t\t\t\t\t\tkey?: string | string[],\n\t\t\t\t\t\topts?: GetWithIdOptions,\n\t\t\t\t\t): ActorHandle<\n\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t> => {\n\t\t\t\t\t\treturn target.get<\n\t\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t\t>(prop, key, opts);\n\t\t\t\t\t},\n\t\t\t\t\tgetOrCreate: (\n\t\t\t\t\t\tkey?: string | string[],\n\t\t\t\t\t\topts?: GetOptions,\n\t\t\t\t\t): ActorHandle<\n\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t> => {\n\t\t\t\t\t\treturn target.getOrCreate<\n\t\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t\t>(prop, key, opts);\n\t\t\t\t\t},\n\t\t\t\t\tgetForId: (\n\t\t\t\t\t\tactorId: string,\n\t\t\t\t\t\topts?: GetWithIdOptions,\n\t\t\t\t\t): ActorHandle<\n\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t> => {\n\t\t\t\t\t\treturn target.getForId<\n\t\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t\t>(prop, actorId, opts);\n\t\t\t\t\t},\n\t\t\t\t\tcreate: async (\n\t\t\t\t\t\tkey: string | string[],\n\t\t\t\t\t\topts: CreateOptions = {},\n\t\t\t\t\t): Promise<\n\t\t\t\t\t\tActorHandle<ExtractActorsFromRegistry<A>[typeof prop]>\n\t\t\t\t\t> => {\n\t\t\t\t\t\treturn await target.create<\n\t\t\t\t\t\t\tExtractActorsFromRegistry<A>[typeof prop]\n\t\t\t\t\t\t>(prop, key, opts);\n\t\t\t\t\t},\n\t\t\t\t} as ActorAccessor<ExtractActorsFromRegistry<A>[typeof prop]>;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t}) as Client<A>;\n}\n\n/**\n * Creates a proxy for a actor that enables calling actions without explicitly using `.action`.\n **/\nfunction createActorProxy<AD extends AnyActorDefinition>(\n\thandle: ActorHandleRaw | ActorConnRaw,\n): ActorHandle<AD> | ActorConn<AD> {\n\t// Stores returned action functions for faster calls\n\tconst methodCache = new Map<string, ActorActionFunction>();\n\treturn new Proxy(handle, {\n\t\tget(target: ActorHandleRaw, prop: string | symbol, receiver: unknown) {\n\t\t\t// Handle built-in Symbol properties\n\t\t\tif (typeof prop === \"symbol\") {\n\t\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t\t}\n\n\t\t\t// Handle built-in Promise methods and existing properties\n\t\t\tif (prop === \"constructor\" || prop in target) {\n\t\t\t\tconst value = Reflect.get(target, prop, target);\n\t\t\t\t// Preserve method binding\n\t\t\t\tif (typeof value === \"function\") {\n\t\t\t\t\treturn value.bind(target);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// Create action function that preserves 'this' context\n\t\t\tif (typeof prop === \"string\") {\n\t\t\t\t// If JS is attempting to calling this as a promise, ignore it\n\t\t\t\tif (prop === \"then\") return undefined;\n\n\t\t\t\tlet method = methodCache.get(prop);\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = (...args: unknown[]) =>\n\t\t\t\t\t\ttarget.action({ name: prop, args });\n\t\t\t\t\tmethodCache.set(prop, method);\n\t\t\t\t}\n\t\t\t\treturn method;\n\t\t\t}\n\t\t},\n\n\t\t// Support for 'in' operator\n\t\thas(target: ActorHandleRaw, prop: string | symbol) {\n\t\t\t// All string properties are potentially action functions.\n\t\t\tif (typeof prop === \"string\") return true;\n\t\t\t// For symbols, defer to the target's own has behavior\n\t\t\treturn Reflect.has(target, prop);\n\t\t},\n\n\t\t// Support instanceof checks\n\t\tgetPrototypeOf(target: ActorHandleRaw) {\n\t\t\treturn Reflect.getPrototypeOf(target);\n\t\t},\n\n\t\t// Prevent property enumeration of non-existent action methods\n\t\townKeys(target: ActorHandleRaw) {\n\t\t\treturn Reflect.ownKeys(target);\n\t\t},\n\n\t\t// Support proper property descriptors\n\t\tgetOwnPropertyDescriptor(\n\t\t\ttarget: ActorHandleRaw,\n\t\t\tprop: string | symbol,\n\t\t) {\n\t\t\tconst targetDescriptor = Reflect.getOwnPropertyDescriptor(\n\t\t\t\ttarget,\n\t\t\t\tprop,\n\t\t\t);\n\t\t\tif (targetDescriptor) {\n\t\t\t\treturn targetDescriptor;\n\t\t\t}\n\t\t\tif (typeof prop === \"string\") {\n\t\t\t\t// Make action methods appear non-enumerable\n\t\t\t\treturn {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\twritable: false,\n\t\t\t\t\tvalue: (...args: unknown[]) =>\n\t\t\t\t\t\ttarget.action({ name: prop, args }),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t}) as unknown as ActorHandle<AD> | ActorConn<AD>;\n}\n","import z from \"zod/v4\";\nimport { EncodingSchema } from \"@/common/encoding\";\nimport type { RegistryConfig } from \"@/registry/config\";\nimport type { GetUpgradeWebSocket } from \"@/utils\";\nimport { tryParseEndpoint } from \"@/utils/endpoint-parser\";\nimport {\n\tgetRivetEndpoint,\n\tgetRivetEngine,\n\tgetRivetNamespace,\n\tgetRivetPool,\n\tgetRivetToken,\n} from \"@/utils/env-vars\";\n\nconst DEFAULT_ENDPOINT = \"http://localhost:6420\";\nexport const DEFAULT_MAX_QUERY_INPUT_SIZE = 4 * 1024;\n\nlet hasWarnedMissingEndpoint = false;\n\n/**\n * Base client config schema without transforms so it can be merged in to other schemas.\n */\nexport const ClientConfigSchemaBase = z.object({\n\t/**\n\t * Endpoint to connect to for Rivet Engine or the local RivetKit runtime API.\n\t *\n\t * Supports URL auth syntax for namespace and token:\n\t * - `https://namespace:token@api.rivet.dev`\n\t * - `https://namespace@api.rivet.dev`\n\t *\n\t * Can also be set via RIVET_ENDPOINT environment variables.\n\t *\n\t * Defaults to http://localhost:6420.\n\t */\n\tendpoint: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => {\n\t\t\tconst resolved = val ?? getRivetEngine() ?? getRivetEndpoint();\n\t\t\tif (!resolved && !hasWarnedMissingEndpoint) {\n\t\t\t\thasWarnedMissingEndpoint = true;\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[rivetkit] No endpoint provided to client. Defaulting to ${DEFAULT_ENDPOINT}. ` +\n\t\t\t\t\t\t`Starting in 2.2.0, an explicit endpoint will be required. ` +\n\t\t\t\t\t\t`Pass an endpoint to createClient() or createRivetKit(), ` +\n\t\t\t\t\t\t`or set the RIVET_ENDPOINT environment variable.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn resolved ?? DEFAULT_ENDPOINT;\n\t\t}),\n\n\t/** Token to use to authenticate with the API. */\n\ttoken: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetToken()),\n\n\t/** Namespace to connect to. */\n\tnamespace: z\n\t\t.string()\n\t\t.optional()\n\t\t.transform((val) => val ?? getRivetNamespace()),\n\n\t/** Name of the envoy pool. This is used to group together envoys in to different pools. */\n\tpoolName: z.string().default(() => getRivetPool() ?? \"default\"),\n\n\tencoding: EncodingSchema.default(\"bare\"),\n\n\theaders: z\n\t\t.record(z.string(), z.string())\n\t\t.optional()\n\t\t.default(() => ({})),\n\n\tgateway: z\n\t\t.object({\n\t\t\tskipReadyWait: z.boolean().optional().default(false),\n\t\t})\n\t\t.optional()\n\t\t.default(() => ({ skipReadyWait: false })),\n\n\t// See RunConfig.getUpgradeWebSocket\n\t//\n\t// This is required in the client config in order to support\n\t// `proxyWebSocket`\n\tgetUpgradeWebSocket: z.custom<GetUpgradeWebSocket>().optional(),\n\n\t/** Whether to automatically perform health checks when the client is created. */\n\tdisableMetadataLookup: z.boolean().optional().default(false),\n\n\t/**\n\t * Maximum serialized query input size in bytes before base64url encoding.\n\t *\n\t * This applies to query-backed `getOrCreate()` and `create()` gateway URLs.\n\t */\n\tmaxInputSize: z\n\t\t.number()\n\t\t.int()\n\t\t.positive()\n\t\t.default(DEFAULT_MAX_QUERY_INPUT_SIZE),\n\n\t/** Whether to enable RivetKit Devtools integration. */\n\tdevtools: z\n\t\t.boolean()\n\t\t.default(\n\t\t\t() =>\n\t\t\t\ttypeof window !== \"undefined\" &&\n\t\t\t\t(window?.location?.hostname === \"127.0.0.1\" ||\n\t\t\t\t\twindow.location?.hostname === \"localhost\"),\n\t\t),\n});\n\nexport const ClientConfigSchema = ClientConfigSchemaBase.transform(\n\t(config, ctx) => transformClientConfig(config, ctx),\n);\n\nexport type ClientConfig = z.infer<typeof ClientConfigSchema>;\n\nexport type ClientConfigInput = z.input<typeof ClientConfigSchema>;\n\nexport function transformClientConfig(\n\tconfig: z.infer<typeof ClientConfigSchemaBase>,\n\tctx: z.RefinementCtx,\n) {\n\tconst parsedEndpoint = tryParseEndpoint(ctx, {\n\t\tendpoint: config.endpoint,\n\t\tpath: [\"endpoint\"],\n\t\tnamespace: config.namespace,\n\t\ttoken: config.token,\n\t});\n\n\treturn {\n\t\t...config,\n\t\tendpoint: parsedEndpoint?.endpoint,\n\t\tnamespace: parsedEndpoint?.namespace ?? config.namespace ?? \"default\",\n\t\ttoken: parsedEndpoint?.token ?? config.token,\n\t};\n}\n\n/**\n * Converts a base config in to a client config.\n *\n * The base config does not include all of the properties of the client config,\n * so this converts the subset of properties in to the client config.\n *\n * Note: We construct the object directly rather than using ClientConfigSchema.parse()\n * because RegistryConfig has already transformed the endpoint, namespace, and token.\n * Re-parsing would attempt to extract namespace/token from the endpoint URL again.\n */\nexport function convertRegistryConfigToClientConfig(\n\tconfig: RegistryConfig,\n): ClientConfig {\n\treturn {\n\t\tendpoint: config.endpoint,\n\t\ttoken: config.token,\n\t\tnamespace: config.namespace,\n\t\tpoolName: config.envoy.poolName,\n\t\theaders: config.headers,\n\t\tgateway: { skipReadyWait: false },\n\t\tencoding: \"bare\",\n\t\tgetUpgradeWebSocket: undefined,\n\t\t// We don't need health checks for internal clients\n\t\tdisableMetadataLookup: true,\n\t\tmaxInputSize: DEFAULT_MAX_QUERY_INPUT_SIZE,\n\t\tdevtools:\n\t\t\ttypeof window !== \"undefined\" &&\n\t\t\t(window?.location?.hostname === \"127.0.0.1\" ||\n\t\t\t\twindow?.location?.hostname === \"localhost\"),\n\t};\n}\n","import { z } from \"zod/v4\";\n\nexport interface ParsedEndpoint {\n\tendpoint: string;\n\tnamespace: string | undefined;\n\ttoken: string | undefined;\n}\n\nexport interface TryParseEndpointOptions {\n\t/** The endpoint URL string to parse */\n\tendpoint: string;\n\t/** Path prefix for error messages (default: [\"endpoint\"]) */\n\tpath?: (string | number)[];\n\t/** Namespace from config, to check for duplicate specification */\n\tnamespace?: string;\n\t/** Token from config, to check for duplicate specification */\n\ttoken?: string;\n}\n\n/**\n * Parses an endpoint URL that may contain auth syntax for namespace and token.\n *\n * Uses ctx.addIssue for clean error reporting in Zod transforms.\n *\n * Supports formats like:\n * - `https://namespace:token@api.rivet.dev`\n * - `https://namespace@api.rivet.dev` (namespace only, no token)\n * - `https://api.rivet.dev` (no auth)\n * - `https://namespace:token@api.rivet.dev/path` (with path)\n *\n * Query strings and fragments are not allowed as they may conflict with\n * runtime parameters.\n *\n * @param ctx - Zod refinement context for error reporting\n * @param options - Parsing options including endpoint, path, and config values\n * @returns ParsedEndpoint on success, undefined on error (after adding issues to ctx)\n */\nexport function tryParseEndpoint(\n\tctx: z.RefinementCtx,\n\toptions: TryParseEndpointOptions,\n): ParsedEndpoint | undefined {\n\tconst {\n\t\tendpoint,\n\t\tpath = [\"endpoint\"],\n\t\tnamespace: configNamespace,\n\t\ttoken: configToken,\n\t} = options;\n\t// Parse the URL\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(endpoint);\n\t} catch {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage: `invalid URL: ${endpoint}`,\n\t\t\tpath,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\t// Reject query strings\n\tif (url.search) {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage: \"endpoint cannot contain a query string\",\n\t\t\tpath,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\t// Reject fragments\n\tif (url.hash) {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage: \"endpoint cannot contain a fragment\",\n\t\t\tpath,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\t// Extract namespace and token from username and password\n\t// URL stores these as percent-encoded, so we need to decode them\n\tconst namespace = url.username\n\t\t? decodeURIComponent(url.username)\n\t\t: undefined;\n\tconst token = url.password ? decodeURIComponent(url.password) : undefined;\n\n\t// Reject token without namespace (e.g., https://:token@api.rivet.dev)\n\tif (token && !namespace) {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage: \"endpoint cannot have a token without a namespace\",\n\t\t\tpath,\n\t\t});\n\t\treturn undefined;\n\t}\n\n\t// Check for duplicate credentials (specified both in URL and config)\n\tif (namespace && configNamespace) {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage:\n\t\t\t\t\"cannot specify namespace both in endpoint URL and as a separate config option\",\n\t\t\tpath: [\"namespace\"],\n\t\t});\n\t}\n\tif (token && configToken) {\n\t\tctx.addIssue({\n\t\t\tcode: \"custom\",\n\t\t\tmessage:\n\t\t\t\t\"cannot specify token both in endpoint URL and as a separate config option\",\n\t\t\tpath: [\"token\"],\n\t\t});\n\t}\n\n\t// Strip auth from the URL by clearing username and password\n\turl.username = \"\";\n\turl.password = \"\";\n\n\t// Get the cleaned endpoint without auth\n\tconst cleanedEndpoint = url.toString();\n\n\treturn {\n\t\tendpoint: cleanedEndpoint,\n\t\tnamespace,\n\t\ttoken,\n\t};\n}\n","import { z } from \"zod/v4\";\nimport type { ClientConfig } from \"@/client/config\";\nimport { sendHttpRequest } from \"@/client/utils\";\nimport { RivetError } from \"@/actor/errors\";\nimport { combineUrlPath } from \"@/utils\";\nimport { logger } from \"./log\";\nimport { RegistryConfig } from \"@/registry/config\";\n\nexport { RivetError as EngineApiError };\n\n// TODO: Remove getEndpoint, but it's used in a lot of places\nexport function getEndpoint(config: ClientConfig | RegistryConfig) {\n\t// Endpoint is always defined for ClientConfig (has default in schema).\n\t// RegistryConfig may not have endpoint before the local runtime is prepared.\n\treturn config.endpoint ?? \"http://127.0.0.1:6420\";\n}\n\n// Helper function for making API calls\nexport async function apiCall<TInput = unknown, TOutput = unknown>(\n\tconfig: ClientConfig,\n\tmethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n\tpath: string,\n\tbody?: TInput,\n): Promise<TOutput> {\n\tconst endpoint = getEndpoint(config);\n\tconst url = combineUrlPath(endpoint, path, {\n\t\tnamespace: config.namespace,\n\t});\n\n\tlogger().debug({ msg: \"making api call\", method, url });\n\n\tconst headers: Record<string, string> = {\n\t\t...config.headers,\n\t};\n\n\t// Add Authorization header if token is provided\n\tif (config.token) {\n\t\theaders.Authorization = `Bearer ${config.token}`;\n\t}\n\n\treturn await sendHttpRequest<TInput, TOutput>({\n\t\tmethod,\n\t\turl,\n\t\theaders,\n\t\tbody,\n\t\tencoding: \"json\",\n\t\tskipParseResponse: false,\n\t\trequestVersionedDataHandler: undefined,\n\t\trequestVersion: undefined,\n\t\tresponseVersionedDataHandler: undefined,\n\t\tresponseVersion: undefined,\n\t\trequestZodSchema: z.any() as z.ZodType<TInput>,\n\t\tresponseZodSchema: z.any() as z.ZodType<TOutput>,\n\t\t// Identity conversions (passthrough for generic API calls)\n\t\trequestToJson: (value) => value,\n\t\trequestToBare: (value) => value,\n\t\tresponseFromJson: (value) => value,\n\t\tresponseFromBare: (value) => value,\n\t});\n}\n","import { getLogger } from \"@/common/log\";\n\nexport function logger() {\n\treturn getLogger(\"engine-client\");\n}\n","import { serializeActorKey } from \"@/actor/keys\";\nimport type { ClientConfig } from \"@/client/client\";\nimport type { MetadataResponse } from \"@/common/router\";\nimport type {\n\tActorsCreateRequest,\n\tActorsCreateResponse,\n\tActorsDeleteResponse,\n\tActorsGetOrCreateRequest,\n\tActorsGetOrCreateResponse,\n\tActorsListResponse,\n} from \"@/engine-api/actors\";\nimport type { RivetId } from \"@/engine-api/common\";\nimport { apiCall } from \"./api-utils\";\n\n// MARK: Get actor\nexport async function getActor(\n\tconfig: ClientConfig,\n\t_: string,\n\tactorId: RivetId,\n): Promise<ActorsListResponse> {\n\treturn apiCall<never, ActorsListResponse>(\n\t\tconfig,\n\t\t\"GET\",\n\t\t`/actors?actor_ids=${encodeURIComponent(actorId)}`,\n\t);\n}\n\n// MARK: Get actor by key\nexport async function getActorByKey(\n\tconfig: ClientConfig,\n\tname: string,\n\tkey: string[],\n): Promise<ActorsListResponse> {\n\tconst serializedKey = serializeActorKey(key);\n\treturn apiCall<never, ActorsListResponse>(\n\t\tconfig,\n\t\t\"GET\",\n\t\t`/actors?name=${encodeURIComponent(name)}&key=${encodeURIComponent(serializedKey)}`,\n\t);\n}\n\n// MARK: List actors by name\nexport async function listActorsByName(\n\tconfig: ClientConfig,\n\tname: string,\n): Promise<ActorsListResponse> {\n\treturn apiCall<never, ActorsListResponse>(\n\t\tconfig,\n\t\t\"GET\",\n\t\t`/actors?name=${encodeURIComponent(name)}`,\n\t);\n}\n\n// MARK: Get or create actor by id\nexport async function getOrCreateActor(\n\tconfig: ClientConfig,\n\trequest: ActorsGetOrCreateRequest,\n): Promise<ActorsGetOrCreateResponse> {\n\treturn apiCall<ActorsGetOrCreateRequest, ActorsGetOrCreateResponse>(\n\t\tconfig,\n\t\t\"PUT\",\n\t\t`/actors`,\n\t\trequest,\n\t);\n}\n\n// MARK: Create actor\nexport async function createActor(\n\tconfig: ClientConfig,\n\trequest: ActorsCreateRequest,\n): Promise<ActorsCreateResponse> {\n\treturn apiCall<ActorsCreateRequest, ActorsCreateResponse>(\n\t\tconfig,\n\t\t\"POST\",\n\t\t`/actors`,\n\t\trequest,\n\t);\n}\n\n// MARK: Destroy actor\nexport async function destroyActor(\n\tconfig: ClientConfig,\n\tactorId: RivetId,\n): Promise<ActorsDeleteResponse> {\n\treturn apiCall<never, ActorsDeleteResponse>(\n\t\tconfig,\n\t\t\"DELETE\",\n\t\t`/actors/${encodeURIComponent(actorId)}`,\n\t);\n}\n\n// MARK: Get metadata\nexport async function getMetadata(\n\tconfig: ClientConfig,\n): Promise<MetadataResponse> {\n\treturn apiCall<never, MetadataResponse>(config, \"GET\", `/metadata`);\n}\n\n// MARK: Get datacenters\nexport interface DatacentersResponse {\n\tdatacenters: { name: string }[];\n}\n\nexport async function getDatacenters(\n\tconfig: ClientConfig,\n): Promise<DatacentersResponse> {\n\treturn apiCall<never, DatacentersResponse>(config, \"GET\", `/datacenters`);\n}\n\n// MARK: Update runner config\nexport interface RegistryConfigRequest {\n\tdatacenters: Record<\n\t\tstring,\n\t\t{\n\t\t\tnormal?: Record<string, unknown>;\n\t\t\tserverless?: {\n\t\t\t\turl: string;\n\t\t\t\theaders: Record<string, string>;\n\t\t\t\tdrain_grace_period?: number;\n\t\t\t\tmax_runners: number;\n\t\t\t\tmin_runners: number;\n\t\t\t\trequest_lifespan: number;\n\t\t\t\trunners_margin: number;\n\t\t\t\tslots_per_runner: number;\n\t\t\t\tmetadata_poll_interval?: number;\n\t\t\t};\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t\tdrain_on_version_upgrade?: boolean;\n\t\t}\n\t>;\n}\n\nexport async function updateRunnerConfig(\n\tconfig: ClientConfig,\n\trunnerName: string,\n\trequest: RegistryConfigRequest,\n): Promise<void> {\n\treturn apiCall<RegistryConfigRequest, void>(\n\t\tconfig,\n\t\t\"PUT\",\n\t\t`/runner-configs/${runnerName}`,\n\t\trequest,\n\t);\n}\n\n// MARK: KV Get\ninterface KvGetResponse {\n\tupdate_ts: string;\n\tvalue: string | null;\n}\n\nexport async function kvGet(\n\tconfig: ClientConfig,\n\tactorId: RivetId,\n\tkey: string,\n): Promise<KvGetResponse> {\n\treturn apiCall<{}, KvGetResponse>(\n\t\tconfig,\n\t\t\"GET\",\n\t\t`/actors/${encodeURIComponent(actorId)}/kv/keys/${encodeURIComponent(key)}`,\n\t);\n}\n","import type { Context as HonoContext } from \"hono\";\nimport invariant from \"invariant\";\nimport { deserializeActorKey, serializeActorKey } from \"@/actor/keys\";\nimport type { ClientConfig } from \"@/client/client\";\nimport {\n\tPATH_CONNECT,\n\tPATH_WEBSOCKET_BASE,\n\tPATH_WEBSOCKET_PREFIX,\n} from \"@/common/actor-router-consts\";\nimport { noopNext } from \"@/common/utils\";\nimport type { Actor as ApiActor } from \"@/engine-api/actors\";\nimport { shouldSkipReadyWait } from \"@/engine-client/driver\";\nimport type {\n\tActorOutput,\n\tCreateInput,\n\tEngineControlClient,\n\tGatewayRequestOptions,\n\tGatewayTarget,\n\tGetForIdInput,\n\tGetOrCreateWithKeyInput,\n\tGetWithKeyInput,\n\tListActorsInput,\n\tRuntimeDisplayInformation,\n} from \"@/engine-client/driver\";\nimport type { Encoding, UniversalWebSocket } from \"@/mod\";\nimport { encodeCborCompat, uint8ArrayToBase64 } from \"@/serde\";\nimport { combineUrlPath, type GetUpgradeWebSocket } from \"@/utils\";\nimport { getNextPhase } from \"@/utils/env-vars\";\nimport { sendHttpRequestToGateway } from \"./actor-http-client\";\nimport {\n\tbuildActorGatewayUrl,\n\tbuildActorQueryGatewayUrl,\n\tbuildWebSocketProtocols,\n\topenWebSocketToGateway,\n} from \"./actor-websocket-client\";\nimport {\n\tcreateActor,\n\tdestroyActor,\n\tgetActor,\n\tgetActorByKey,\n\tgetOrCreateActor,\n\tkvGet,\n\tlistActorsByName,\n} from \"./api-endpoints\";\nimport { EngineApiError, getEndpoint } from \"./api-utils\";\nimport { logger } from \"./log\";\nimport { lookupMetadataCached } from \"./metadata\";\nimport { createWebSocketProxy } from \"./ws-proxy\";\n\nexport class RemoteEngineControlClient implements EngineControlClient {\n\t#config: ClientConfig;\n\t#metadataPromise: Promise<void> | undefined;\n\n\tconstructor(runConfig: ClientConfig) {\n\t\t// Disable health check if in Next.js build phase since there is no `/metadata` endpoint\n\t\t//\n\t\t// See https://github.com/vercel/next.js/blob/5e6b008b561caf2710ab7be63320a3d549474a5b/packages/next/shared/lib/constants.ts#L19-L23\n\t\tif (getNextPhase() === \"phase-production-build\") {\n\t\t\tlogger().info(\n\t\t\t\t\"detected next.js build phase, disabling health check\",\n\t\t\t);\n\t\t\trunConfig.disableMetadataLookup = true;\n\t\t}\n\n\t\t// Clone config so we can mutate the endpoint in #metadataPromise\n\t\t// NOTE: This is a shallow clone, so mutating nested properties will not do anything\n\t\tthis.#config = { ...runConfig };\n\n\t\t// Perform metadata check if enabled\n\t\tif (!runConfig.disableMetadataLookup) {\n\t\t\t// This should never error, since it uses pRetry. If it does for\n\t\t\t// any reason, we'll surface the error anywhere #metadataPromise is\n\t\t\t// awaited.\n\t\t\tthis.#metadataPromise = lookupMetadataCached(this.#config).then(\n\t\t\t\t(metadataData) => {\n\t\t\t\t\t// Override endpoint for all future requests\n\t\t\t\t\tif (metadataData.clientEndpoint) {\n\t\t\t\t\t\tthis.#config.endpoint = metadataData.clientEndpoint;\n\t\t\t\t\t\tif (metadataData.clientNamespace) {\n\t\t\t\t\t\t\tthis.#config.namespace =\n\t\t\t\t\t\t\t\tmetadataData.clientNamespace;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metadataData.clientToken) {\n\t\t\t\t\t\t\tthis.#config.token = metadataData.clientToken;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogger().info({\n\t\t\t\t\t\t\tmsg: \"overriding client endpoint\",\n\t\t\t\t\t\t\tendpoint: metadataData.clientEndpoint,\n\t\t\t\t\t\t\tnamespace: metadataData.clientNamespace,\n\t\t\t\t\t\t\ttoken: metadataData.clientToken,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlogger().info({\n\t\t\t\t\t\tmsg: \"connected to rivetkit runtime\",\n\t\t\t\t\t\truntime: metadataData.runtime,\n\t\t\t\t\t\tversion: metadataData.version,\n\t\t\t\t\t\tenvoy: metadataData.envoy,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getForId({\n\t\tname,\n\t\tactorId,\n\t}: GetForIdInput): Promise<ActorOutput | undefined> {\n\t\tawait this.#metadataPromise;\n\n\t\t// Fetch from API if not in cache\n\t\tconst response = await getActor(this.#config, name, actorId);\n\t\tconst actor = response.actors[0];\n\t\tif (!actor) return undefined;\n\n\t\t// Validate name matches\n\t\tif (actor.name !== name) {\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"actor name mismatch from api\",\n\t\t\t\tactorId,\n\t\t\t\tapiName: actor.name,\n\t\t\t\trequestedName: name,\n\t\t\t});\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn apiActorToOutput(actor);\n\t}\n\n\tasync getWithKey({\n\t\tname,\n\t\tkey,\n\t}: GetWithKeyInput): Promise<ActorOutput | undefined> {\n\t\tawait this.#metadataPromise;\n\n\t\tlogger().debug({ msg: \"getWithKey: searching for actor\", name, key });\n\n\t\t// If not in local cache, fetch by key from API\n\t\ttry {\n\t\t\tconst response = await getActorByKey(this.#config, name, key);\n\t\t\tconst actor = response.actors[0];\n\t\t\tif (!actor) return undefined;\n\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"getWithKey: found actor via api\",\n\t\t\t\tactorId: actor.actor_id,\n\t\t\t\tname,\n\t\t\t\tkey,\n\t\t\t});\n\n\t\t\treturn apiActorToOutput(actor);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof EngineApiError &&\n\t\t\t\t(error as EngineApiError).group === \"actor\" &&\n\t\t\t\t(error as EngineApiError).code === \"not_found\"\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync getOrCreateWithKey(\n\t\tinput: GetOrCreateWithKeyInput,\n\t): Promise<ActorOutput> {\n\t\tawait this.#metadataPromise;\n\n\t\tconst { name, key, input: actorInput, region, crashPolicy } = input;\n\n\t\tlogger().info({\n\t\t\tmsg: \"getOrCreateWithKey: getting or creating actor via engine api\",\n\t\t\tname,\n\t\t\tkey,\n\t\t});\n\n\t\tconst { actor, created } = await getOrCreateActor(this.#config, {\n\t\t\tdatacenter: region,\n\t\t\tname,\n\t\t\tkey: serializeActorKey(key),\n\t\t\trunner_name_selector: this.#config.poolName,\n\t\t\tinput: actorInput\n\t\t\t\t? uint8ArrayToBase64(encodeCborCompat(actorInput))\n\t\t\t\t: undefined,\n\t\t\tcrash_policy: crashPolicy ?? \"sleep\",\n\t\t});\n\n\t\tlogger().info({\n\t\t\tmsg: \"getOrCreateWithKey: actor ready\",\n\t\t\tactorId: actor.actor_id,\n\t\t\tname,\n\t\t\tkey,\n\t\t\tcreated,\n\t\t});\n\n\t\treturn apiActorToOutput(actor);\n\t}\n\n\tasync createActor({\n\t\tname,\n\t\tkey,\n\t\tinput,\n\t\tregion,\n\t\tcrashPolicy,\n\t}: CreateInput): Promise<ActorOutput> {\n\t\tawait this.#metadataPromise;\n\n\t\tlogger().info({ msg: \"creating actor via engine api\", name, key });\n\n\t\t// Create actor via engine API\n\t\tconst result = await createActor(this.#config, {\n\t\t\tdatacenter: region,\n\t\t\tname,\n\t\t\trunner_name_selector: this.#config.poolName,\n\t\t\tkey: serializeActorKey(key),\n\t\t\tinput: input\n\t\t\t\t? uint8ArrayToBase64(encodeCborCompat(input))\n\t\t\t\t: undefined,\n\t\t\tcrash_policy: crashPolicy ?? \"sleep\",\n\t\t});\n\n\t\tlogger().info({\n\t\t\tmsg: \"actor created\",\n\t\t\tactorId: result.actor.actor_id,\n\t\t\tname,\n\t\t\tkey,\n\t\t});\n\n\t\treturn apiActorToOutput(result.actor);\n\t}\n\n\tasync listActors({ name }: ListActorsInput): Promise<ActorOutput[]> {\n\t\tawait this.#metadataPromise;\n\n\t\tlogger().debug({ msg: \"listing actors via engine api\", name });\n\n\t\tconst response = await listActorsByName(this.#config, name);\n\n\t\treturn response.actors.map(apiActorToOutput);\n\t}\n\n\tasync destroyActor(actorId: string): Promise<void> {\n\t\tawait this.#metadataPromise;\n\n\t\tlogger().info({ msg: \"destroying actor via engine api\", actorId });\n\n\t\tawait destroyActor(this.#config, actorId);\n\n\t\tlogger().info({ msg: \"actor destroyed\", actorId });\n\t}\n\n\tasync sendRequest(\n\t\ttarget: GatewayTarget,\n\t\tactorRequest: Request,\n\t\toptions: GatewayRequestOptions = {},\n\t): Promise<Response> {\n\t\tawait this.#metadataPromise;\n\n\t\tconst path = requestPath(actorRequest);\n\t\tconst gatewayUrl = this.#buildGatewayUrlForTarget(\n\t\t\ttarget,\n\t\t\tpath,\n\t\t\toptions,\n\t\t);\n\t\tconst httpOptions = {\n\t\t\t...options,\n\t\t\tdirectActorId: shouldSkipReadyWait(options)\n\t\t\t\t? directActorIdFromTarget(target)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn sendHttpRequestToGateway(\n\t\t\tthis.#config,\n\t\t\tgatewayUrl,\n\t\t\tactorRequest,\n\t\t\thttpOptions,\n\t\t);\n\t}\n\n\tasync openWebSocket(\n\t\tpath: string,\n\t\ttarget: GatewayTarget,\n\t\tencoding: Encoding,\n\t\tparams: unknown,\n\t\toptions: GatewayRequestOptions = {},\n\t): Promise<UniversalWebSocket> {\n\t\tawait this.#metadataPromise;\n\n\t\tconst gatewayUrl = this.#buildGatewayUrlForTarget(\n\t\t\ttarget,\n\t\t\tpath,\n\t\t\toptions,\n\t\t);\n\n\t\treturn openWebSocketToGateway(\n\t\t\tthis.#config,\n\t\t\tgatewayUrl,\n\t\t\tencoding,\n\t\t\tparams,\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\tdirectActorId: shouldSkipReadyWait(options)\n\t\t\t\t\t? directActorIdFromTarget(target)\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t);\n\t}\n\n\tasync buildGatewayUrl(\n\t\ttarget: GatewayTarget,\n\t\toptions: GatewayRequestOptions = {},\n\t): Promise<string> {\n\t\tawait this.#metadataPromise;\n\t\treturn this.#buildGatewayUrlForTarget(target, \"\", options);\n\t}\n\n\tasync proxyRequest(\n\t\t_c: HonoContext,\n\t\tactorRequest: Request,\n\t\tactorId: string,\n\t): Promise<Response> {\n\t\tawait this.#metadataPromise;\n\n\t\tconst gatewayUrl = this.#buildGatewayUrlForTarget(\n\t\t\t{ directId: actorId },\n\t\t\trequestPath(actorRequest),\n\t\t);\n\n\t\treturn sendHttpRequestToGateway(this.#config, gatewayUrl, actorRequest);\n\t}\n\n\tasync proxyWebSocket(\n\t\tc: HonoContext,\n\t\tpath: string,\n\t\tactorId: string,\n\t\tencoding: Encoding,\n\t\tparams: unknown,\n\t): Promise<Response> {\n\t\tawait this.#metadataPromise;\n\n\t\tconst upgradeWebSocket = this.#config.getUpgradeWebSocket?.();\n\t\tinvariant(upgradeWebSocket, \"missing getUpgradeWebSocket\");\n\n\t\tconst endpoint = getEndpoint(this.#config);\n\t\tconst guardUrl = combineUrlPath(endpoint, path);\n\t\tconst wsGuardUrl = guardUrl.replace(\"http://\", \"ws://\");\n\n\t\tlogger().debug({\n\t\t\tmsg: \"forwarding websocket to actor via guard\",\n\t\t\tactorId,\n\t\t\tpath,\n\t\t\tguardUrl,\n\t\t});\n\n\t\t// Build protocols\n\t\tconst protocols = buildWebSocketProtocols(\n\t\t\tthis.#config,\n\t\t\tencoding,\n\t\t\tparams,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttarget: \"actor\",\n\t\t\t\tactorId,\n\t\t\t},\n\t\t);\n\t\tconst args = await createWebSocketProxy(c, wsGuardUrl, protocols);\n\n\t\treturn await upgradeWebSocket(() => args)(c, noopNext());\n\t}\n\n\tasync kvGet(actorId: string, key: Uint8Array): Promise<string | null> {\n\t\tawait this.#metadataPromise;\n\n\t\tlogger().debug({ msg: \"getting kv value via engine api\", key });\n\n\t\tconst response = await kvGet(\n\t\t\tthis.#config,\n\t\t\tactorId,\n\t\t\tnew TextDecoder(\"utf8\").decode(key),\n\t\t);\n\n\t\treturn response.value;\n\t}\n\n\tasync kvBatchGet(\n\t\t_actorId: string,\n\t\t_keys: Uint8Array[],\n\t): Promise<(Uint8Array | null)[]> {\n\t\tthrow new Error(\"kvBatchGet not supported on remote engine client\");\n\t}\n\n\tasync kvBatchPut(\n\t\t_actorId: string,\n\t\t_entries: [Uint8Array, Uint8Array][],\n\t): Promise<void> {\n\t\tthrow new Error(\"kvBatchPut not supported on remote engine client\");\n\t}\n\n\tasync kvBatchDelete(_actorId: string, _keys: Uint8Array[]): Promise<void> {\n\t\tthrow new Error(\"kvBatchDelete not supported on remote engine client\");\n\t}\n\n\tasync kvDeleteRange(\n\t\t_actorId: string,\n\t\t_start: Uint8Array,\n\t\t_end: Uint8Array,\n\t): Promise<void> {\n\t\tthrow new Error(\"kvDeleteRange not supported on remote engine client\");\n\t}\n\n\tdisplayInformation(): RuntimeDisplayInformation {\n\t\treturn { properties: {} };\n\t}\n\n\tsetGetUpgradeWebSocket(getUpgradeWebSocket: GetUpgradeWebSocket): void {\n\t\tthis.#config.getUpgradeWebSocket = getUpgradeWebSocket;\n\t}\n\n\t#buildGatewayUrlForTarget(\n\t\ttarget: GatewayTarget,\n\t\tpath: string,\n\t\toptions: GatewayRequestOptions = {},\n\t): string {\n\t\tconst endpoint = getEndpoint(this.#config);\n\n\t\tif (\n\t\t\tshouldSkipReadyWait(options) &&\n\t\t\tdirectActorIdFromTarget(target) &&\n\t\t\tcanUseDirectSkipReadyWaitPath(path)\n\t\t) {\n\t\t\treturn combineUrlPath(endpoint, path);\n\t\t}\n\n\t\tif (\"directId\" in target) {\n\t\t\treturn buildActorGatewayUrl(\n\t\t\t\tendpoint,\n\t\t\t\ttarget.directId,\n\t\t\t\tthis.#config.token,\n\t\t\t\tpath,\n\t\t\t);\n\t\t}\n\n\t\tif (\"getForId\" in target) {\n\t\t\treturn buildActorGatewayUrl(\n\t\t\t\tendpoint,\n\t\t\t\ttarget.getForId.actorId,\n\t\t\t\tthis.#config.token,\n\t\t\t\tpath,\n\t\t\t);\n\t\t}\n\n\t\tif (\"getForKey\" in target || \"getOrCreateForKey\" in target) {\n\t\t\treturn buildActorQueryGatewayUrl(\n\t\t\t\tendpoint,\n\t\t\t\tthis.#config.namespace,\n\t\t\t\ttarget,\n\t\t\t\tthis.#config.token,\n\t\t\t\tpath,\n\t\t\t\tthis.#config.maxInputSize,\n\t\t\t\tundefined,\n\t\t\t\t\"getOrCreateForKey\" in target\n\t\t\t\t\t? this.#config.poolName\n\t\t\t\t\t: undefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t}\n\n\t\tif (\"create\" in target) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Gateway URLs only support direct actor IDs, get, and getOrCreate targets.\",\n\t\t\t);\n\t\t}\n\n\t\tthrow new Error(\"unreachable: unknown gateway target type\");\n\t}\n}\n\nfunction canUseDirectSkipReadyWaitPath(path: string): boolean {\n\treturn (\n\t\tisActorHttpRequestPath(path) ||\n\t\tisPathOrQuery(path, PATH_CONNECT) ||\n\t\tisPathOrQuery(path, PATH_WEBSOCKET_BASE) ||\n\t\tpath.startsWith(PATH_WEBSOCKET_PREFIX)\n\t);\n}\n\nfunction isPathOrQuery(path: string, basePath: string): boolean {\n\treturn path === basePath || path.startsWith(`${basePath}?`);\n}\n\nfunction isActorHttpRequestPath(path: string): boolean {\n\tconst stripped = path.slice(\"/request\".length);\n\treturn (\n\t\tpath.startsWith(\"/request\") &&\n\t\t(stripped.length === 0 ||\n\t\t\tstripped.startsWith(\"/\") ||\n\t\t\tstripped.startsWith(\"?\"))\n\t);\n}\n\nfunction directActorIdFromTarget(target: GatewayTarget): string | undefined {\n\tif (\"directId\" in target) {\n\t\treturn target.directId;\n\t}\n\tif (\"getForId\" in target) {\n\t\treturn target.getForId.actorId;\n\t}\n\treturn undefined;\n}\n\nfunction requestPath(req: Request): string {\n\tconst url = new URL(req.url);\n\treturn `${url.pathname}${url.search}`;\n}\n\nfunction apiActorToOutput(actor: ApiActor): ActorOutput {\n\treturn {\n\t\tactorId: actor.actor_id,\n\t\tname: actor.name,\n\t\tkey: deserializeActorKey(actor.key),\n\t\tcreateTs: actor.create_ts,\n\t\tstartTs: actor.start_ts ?? null,\n\t\tconnectableTs: actor.connectable_ts ?? null,\n\t\tsleepTs: actor.sleep_ts ?? null,\n\t\tdestroyTs: actor.destroy_ts ?? null,\n\t\terror: actor.error ?? undefined,\n\t};\n}\n","import type { Hono, Context as HonoContext } from \"hono\";\nimport type { ActorKey, Encoding, UniversalWebSocket } from \"@/actor/mod\";\nimport type { RegistryConfig } from \"@/registry/config\";\nimport type { GetUpgradeWebSocket } from \"@/utils\";\nimport type { ActorQuery, CrashPolicy } from \"@/client/query\";\n\nexport type GatewayTarget = { directId: string } | ActorQuery;\n\nexport interface GatewayRequestOptions {\n\tskipReadyWait?: boolean;\n}\n\nexport function shouldSkipReadyWait(\n\toptions: GatewayRequestOptions = {},\n): boolean {\n\treturn options.skipReadyWait === true;\n}\n\nexport interface EngineControlClient {\n\tgetForId(input: GetForIdInput): Promise<ActorOutput | undefined>;\n\tgetWithKey(input: GetWithKeyInput): Promise<ActorOutput | undefined>;\n\tgetOrCreateWithKey(input: GetOrCreateWithKeyInput): Promise<ActorOutput>;\n\tcreateActor(input: CreateInput): Promise<ActorOutput>;\n\tlistActors(input: ListActorsInput): Promise<ActorOutput[]>;\n\n\tsendRequest(\n\t\ttarget: GatewayTarget,\n\t\tactorRequest: Request,\n\t\toptions?: GatewayRequestOptions,\n\t): Promise<Response>;\n\topenWebSocket(\n\t\tpath: string,\n\t\ttarget: GatewayTarget,\n\t\tencoding: Encoding,\n\t\tparams: unknown,\n\t\toptions?: GatewayRequestOptions,\n\t): Promise<UniversalWebSocket>;\n\tproxyRequest(\n\t\tc: HonoContext,\n\t\tactorRequest: Request,\n\t\tactorId: string,\n\t): Promise<Response>;\n\tproxyWebSocket(\n\t\tc: HonoContext,\n\t\tpath: string,\n\t\tactorId: string,\n\t\tencoding: Encoding,\n\t\tparams: unknown,\n\t): Promise<Response>;\n\tbuildGatewayUrl(\n\t\ttarget: GatewayTarget,\n\t\toptions?: GatewayRequestOptions,\n\t): Promise<string>;\n\tdisplayInformation(): RuntimeDisplayInformation;\n\textraStartupLog?: () => Record<string, unknown>;\n\tmodifyRuntimeRouter?: (config: RegistryConfig, router: Hono) => void;\n\tsetGetUpgradeWebSocket(getUpgradeWebSocket: GetUpgradeWebSocket): void;\n\tshutdown?(): void;\n\n\t/**\n\t * Test-only helper that simulates an abrupt actor crash.\n\t */\n\thardCrashActor?(actorId: string): Promise<void>;\n\tkvGet(actorId: string, key: Uint8Array): Promise<string | null>;\n\tkvBatchGet(\n\t\tactorId: string,\n\t\tkeys: Uint8Array[],\n\t): Promise<(Uint8Array | null)[]>;\n\tkvBatchPut(\n\t\tactorId: string,\n\t\tentries: [Uint8Array, Uint8Array][],\n\t): Promise<void>;\n\tkvBatchDelete(actorId: string, keys: Uint8Array[]): Promise<void>;\n\tkvDeleteRange(\n\t\tactorId: string,\n\t\tstart: Uint8Array,\n\t\tend: Uint8Array,\n\t): Promise<void>;\n}\n\nexport interface RuntimeDisplayInformation {\n\tproperties: Record<string, string>;\n}\n\nexport interface GetForIdInput {\n\tc?: HonoContext | undefined;\n\tname: string;\n\tactorId: string;\n}\n\nexport interface GetWithKeyInput {\n\tc?: HonoContext | undefined;\n\tname: string;\n\tkey: ActorKey;\n}\n\nexport interface GetOrCreateWithKeyInput {\n\tc?: HonoContext | undefined;\n\tname: string;\n\tkey: ActorKey;\n\tinput?: unknown;\n\tregion?: string;\n\tcrashPolicy?: CrashPolicy;\n}\n\nexport interface CreateInput {\n\tc?: HonoContext | undefined;\n\tname: string;\n\tkey: ActorKey;\n\tinput?: unknown;\n\tregion?: string;\n\tcrashPolicy?: CrashPolicy;\n}\n\nexport interface ListActorsInput {\n\tc?: HonoContext | undefined;\n\tname: string;\n\tkey?: string;\n\tincludeDestroyed?: boolean;\n}\n\nexport interface ActorOutput {\n\tactorId: string;\n\tname: string;\n\tkey: ActorKey;\n\tcreateTs?: number;\n\tstartTs?: number | null;\n\tconnectableTs?: number | null;\n\tsleepTs?: number | null;\n\tdestroyTs?: number | null;\n\terror?: unknown;\n}\n","import type { ClientConfig } from \"@/client/config\";\nimport {\n\tHEADER_RIVET_ACTOR,\n\tHEADER_RIVET_SKIP_READY_WAIT,\n\tHEADER_RIVET_TARGET,\n\tHEADER_RIVET_TOKEN,\n} from \"@/common/actor-router-consts\";\nimport { shouldSkipReadyWait, type GatewayRequestOptions } from \"./driver\";\n\nexport interface HttpGatewayRequestOptions extends GatewayRequestOptions {\n\tdirectActorId?: string;\n}\n\nexport async function sendHttpRequestToGateway(\n\trunConfig: ClientConfig,\n\tgatewayUrl: string,\n\tactorRequest: Request,\n\toptions: HttpGatewayRequestOptions = {},\n): Promise<Response> {\n\t// Handle body properly based on method and presence\n\tlet bodyToSend: ArrayBuffer | null = null;\n\tconst guardHeaders = buildGuardHeaders(runConfig, actorRequest, options);\n\n\tif (actorRequest.method !== \"GET\" && actorRequest.method !== \"HEAD\") {\n\t\tif (actorRequest.bodyUsed) {\n\t\t\tthrow new Error(\"Request body has already been consumed\");\n\t\t}\n\n\t\t// TODO: This buffers the entire request in memory every time. We\n\t\t// need to properly implement streaming bodies.\n\t\tconst reqBody = await actorRequest.arrayBuffer();\n\n\t\tif (reqBody.byteLength !== 0) {\n\t\t\tbodyToSend = reqBody;\n\n\t\t\t// If this is a streaming request, we need to convert the headers\n\t\t\t// for the basic array buffer\n\t\t\tguardHeaders.delete(\"transfer-encoding\");\n\t\t\tguardHeaders.set(\"content-length\", String(bodyToSend.byteLength));\n\t\t}\n\t}\n\n\tconst guardRequest = new Request(gatewayUrl, {\n\t\tmethod: actorRequest.method,\n\t\theaders: guardHeaders,\n\t\tbody: bodyToSend,\n\t\tsignal: actorRequest.signal,\n\t});\n\n\treturn mutableResponse(await fetch(guardRequest));\n}\n\nfunction mutableResponse(fetchRes: Response): Response {\n\t// We cannot return the raw response from `fetch` since the response type is not mutable.\n\t//\n\t// In order for middleware to be able to mutate the response, we need to build a new Response object that is mutable.\n\treturn new Response(fetchRes.body, fetchRes);\n}\n\nfunction buildGuardHeaders(\n\trunConfig: ClientConfig,\n\tactorRequest: Request,\n\toptions: HttpGatewayRequestOptions,\n): Headers {\n\tconst headers = new Headers();\n\t// Copy all headers from the original request\n\tactorRequest.headers.forEach((value, key) => {\n\t\theaders.set(key, value);\n\t});\n\t// Add extra headers from config\n\tfor (const [key, value] of Object.entries(runConfig.headers)) {\n\t\theaders.set(key, value as string);\n\t}\n\t// Add guard-specific headers\n\tif (runConfig.token) {\n\t\theaders.set(HEADER_RIVET_TOKEN, runConfig.token);\n\t}\n\tif (options.directActorId !== undefined) {\n\t\theaders.set(HEADER_RIVET_TARGET, \"actor\");\n\t\theaders.set(HEADER_RIVET_ACTOR, options.directActorId);\n\t}\n\tif (shouldSkipReadyWait(options)) {\n\t\theaders.set(HEADER_RIVET_SKIP_READY_WAIT, \"1\");\n\t}\n\treturn headers;\n}\n","import type { UniversalWebSocket } from \"./websocket-interface\";\n\nconst UTF8_DECODER = new TextDecoder();\n\nexport type IndexedWebSocketPayload =\n\t| string\n\t| ArrayBufferLike\n\t| Blob\n\t| ArrayBufferView;\n\nexport type IndexedWebSocketSender = (\n\tdata: IndexedWebSocketPayload,\n\trivetMessageIndex?: number,\n) => void | Promise<void>;\n\nexport interface IndexedWebSocketTestHook {\n\t__rivetSendWithMessageIndex?: IndexedWebSocketSender;\n\t__rivetGetHibernatableAckState?: () => HibernatableWebSocketAckStateSnapshot;\n\t__rivetWaitForHibernatableAck?: (\n\t\tserverMessageIndex: number,\n\t) => Promise<void>;\n}\n\nexport interface HibernatableWebSocketAckStateSnapshot {\n\tlastSentIndex: number;\n\tlastAckedIndex: number;\n\tpendingIndexes: number[];\n}\n\ninterface RemoteHibernatableWebSocketAckHooks {\n\tgetState: () => HibernatableWebSocketAckStateSnapshot;\n\twaitForAck: (serverMessageIndex: number) => Promise<void>;\n}\n\nconst REMOTE_HIBERNATABLE_WEBSOCKET_ACK_HOOKS = new Map<\n\tstring,\n\tRemoteHibernatableWebSocketAckHooks\n>();\n\nexport interface HibernatableWebSocketAckStateTestRequest {\n\t__rivetkitTestHibernatableAckStateV1: true;\n}\n\nexport function setIndexedWebSocketTestSender(\n\twebsocket: UniversalWebSocket,\n\tsender: IndexedWebSocketSender,\n\tenabled: boolean,\n): void {\n\tif (!enabled) {\n\t\treturn;\n\t}\n\n\t(websocket as IndexedWebSocketTestHook).__rivetSendWithMessageIndex =\n\t\tsender;\n}\n\nexport function getIndexedWebSocketTestSender(\n\twebsocket: UniversalWebSocket,\n): IndexedWebSocketSender | undefined {\n\treturn (websocket as IndexedWebSocketTestHook).__rivetSendWithMessageIndex;\n}\n\nexport function setHibernatableWebSocketAckTestHooks(\n\twebsocket: UniversalWebSocket,\n\thooks: {\n\t\tgetState: () => HibernatableWebSocketAckStateSnapshot;\n\t\twaitForAck: (serverMessageIndex: number) => Promise<void>;\n\t},\n\tenabled: boolean,\n): void {\n\tif (!enabled) {\n\t\treturn;\n\t}\n\n\tconst testWebSocket = websocket as IndexedWebSocketTestHook;\n\ttestWebSocket.__rivetGetHibernatableAckState = hooks.getState;\n\ttestWebSocket.__rivetWaitForHibernatableAck = hooks.waitForAck;\n}\n\nexport function getHibernatableWebSocketAckState(\n\twebsocket: UniversalWebSocket,\n): HibernatableWebSocketAckStateSnapshot | undefined {\n\treturn (\n\t\twebsocket as IndexedWebSocketTestHook\n\t).__rivetGetHibernatableAckState?.();\n}\n\nexport function registerRemoteHibernatableWebSocketAckHooks(\n\ttoken: string,\n\thooks: RemoteHibernatableWebSocketAckHooks,\n\tenabled: boolean,\n): void {\n\tif (!enabled) {\n\t\treturn;\n\t}\n\n\tREMOTE_HIBERNATABLE_WEBSOCKET_ACK_HOOKS.set(token, hooks);\n}\n\nexport function unregisterRemoteHibernatableWebSocketAckHooks(\n\ttoken: string | undefined,\n\tenabled: boolean,\n): void {\n\tif (!enabled || !token) {\n\t\treturn;\n\t}\n\n\tREMOTE_HIBERNATABLE_WEBSOCKET_ACK_HOOKS.delete(token);\n}\n\nexport function setRemoteHibernatableWebSocketAckTestHooks(\n\twebsocket: UniversalWebSocket,\n\ttoken: string,\n\tenabled: boolean,\n): void {\n\tif (!enabled) {\n\t\treturn;\n\t}\n\n\tsetHibernatableWebSocketAckTestHooks(\n\t\twebsocket,\n\t\t{\n\t\t\tgetState: () => {\n\t\t\t\tconst hooks =\n\t\t\t\t\tREMOTE_HIBERNATABLE_WEBSOCKET_ACK_HOOKS.get(token);\n\t\t\t\tif (!hooks) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`remote hibernatable websocket ack hooks are unavailable for token ${token}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn hooks.getState();\n\t\t\t},\n\t\t\twaitForAck: async (serverMessageIndex) => {\n\t\t\t\tconst hooks =\n\t\t\t\t\tREMOTE_HIBERNATABLE_WEBSOCKET_ACK_HOOKS.get(token);\n\t\t\t\tif (!hooks) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`remote hibernatable websocket ack hooks are unavailable for token ${token}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait hooks.waitForAck(serverMessageIndex);\n\t\t\t},\n\t\t},\n\t\tenabled,\n\t);\n}\n\nexport async function waitForHibernatableWebSocketAck(\n\twebsocket: UniversalWebSocket,\n\tserverMessageIndex: number,\n): Promise<void> {\n\tconst waitForAck = (websocket as IndexedWebSocketTestHook)\n\t\t.__rivetWaitForHibernatableAck;\n\tif (!waitForAck) {\n\t\tthrow new Error(\n\t\t\t\"hibernatable websocket ack test hook is unavailable on this transport\",\n\t\t);\n\t}\n\n\tawait waitForAck(serverMessageIndex);\n}\n\nexport function parseHibernatableWebSocketAckStateTestRequest(\n\tdata: IndexedWebSocketPayload,\n\tenabled: boolean,\n): HibernatableWebSocketAckStateTestRequest | undefined {\n\tif (!enabled) {\n\t\treturn undefined;\n\t}\n\n\tlet rawText: string | undefined;\n\tif (typeof data === \"string\") {\n\t\trawText = data;\n\t} else if (ArrayBuffer.isView(data)) {\n\t\trawText = UTF8_DECODER.decode(\n\t\t\tnew Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n\t\t);\n\t} else if (data instanceof ArrayBuffer) {\n\t\trawText = UTF8_DECODER.decode(data);\n\t} else if (\n\t\tdata &&\n\t\ttypeof data === \"object\" &&\n\t\t\"byteLength\" in data &&\n\t\ttypeof data.byteLength === \"number\"\n\t) {\n\t\trawText = UTF8_DECODER.decode(new Uint8Array(data as ArrayBufferLike));\n\t}\n\tif (rawText === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(rawText);\n\t} catch {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\t!parsed ||\n\t\ttypeof parsed !== \"object\" ||\n\t\t(parsed as Partial<HibernatableWebSocketAckStateTestRequest>)\n\t\t\t.__rivetkitTestHibernatableAckStateV1 !== true\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t__rivetkitTestHibernatableAckStateV1: true,\n\t};\n}\n\nexport function buildHibernatableWebSocketAckStateTestResponse(\n\tstate: HibernatableWebSocketAckStateSnapshot,\n\tenabled: boolean,\n): string | undefined {\n\tif (!enabled) {\n\t\treturn undefined;\n\t}\n\n\treturn JSON.stringify({\n\t\t__rivetkitTestHibernatableAckStateV1: true,\n\t\tlastSentIndex: state.lastSentIndex,\n\t\tlastAckedIndex: state.lastAckedIndex,\n\t\tpendingIndexes: state.pendingIndexes,\n\t});\n}\n","import {\n\ttype ClientConfig,\n\tDEFAULT_MAX_QUERY_INPUT_SIZE,\n} from \"@/client/config\";\nimport {\n\tWS_PROTOCOL_CONN_PARAMS,\n\tWS_PROTOCOL_ENCODING,\n\tWS_PROTOCOL_STANDARD as WS_PROTOCOL_RIVETKIT,\n\tWS_PROTOCOL_TARGET,\n\tWS_PROTOCOL_ACTOR,\n\tWS_PROTOCOL_SKIP_READY_WAIT,\n\tWS_PROTOCOL_TEST_ACK_HOOK,\n\tWS_PROTOCOL_TOKEN,\n} from \"@/common/actor-router-consts\";\nimport { importWebSocket } from \"@/common/websocket\";\nimport { setRemoteHibernatableWebSocketAckTestHooks } from \"@/common/websocket-test-hooks\";\nimport type { ActorGatewayQuery, CrashPolicy } from \"@/client/query\";\nimport type { Encoding, UniversalWebSocket } from \"@/mod\";\nimport { encodeCborCompat, uint8ArrayToBase64 } from \"@/serde\";\nimport { combineUrlPath } from \"@/utils\";\nimport { shouldSkipReadyWait, type GatewayRequestOptions } from \"./driver\";\nimport { logger } from \"./log\";\n\nclass BufferedRemoteWebSocket implements UniversalWebSocket {\n\treadonly CONNECTING = 0 as const;\n\treadonly OPEN = 1 as const;\n\treadonly CLOSING = 2 as const;\n\treadonly CLOSED = 3 as const;\n\n\t#inner: UniversalWebSocket;\n\t#listeners = new Map<string, Set<(event: any) => void>>();\n\t#queuedEvents: Array<{ type: string; event: any }> = [];\n\t#onopen: ((event: any) => void) | null = null;\n\t#onclose: ((event: any) => void) | null = null;\n\t#onerror: ((event: any) => void) | null = null;\n\t#onmessage: ((event: any) => void) | null = null;\n\n\tconstructor(inner: UniversalWebSocket) {\n\t\tthis.#inner = inner;\n\t\tfor (const type of [\"open\", \"message\", \"close\", \"error\"]) {\n\t\t\tthis.#inner.addEventListener(type, (event) => {\n\t\t\t\tthis.#handleEvent(type, event);\n\t\t\t});\n\t\t}\n\t}\n\n\tget readyState() {\n\t\treturn this.#inner.readyState;\n\t}\n\n\tget binaryType() {\n\t\treturn this.#inner.binaryType;\n\t}\n\n\tset binaryType(value) {\n\t\tthis.#inner.binaryType = value;\n\t}\n\n\tget bufferedAmount() {\n\t\treturn this.#inner.bufferedAmount;\n\t}\n\n\tget extensions() {\n\t\treturn this.#inner.extensions;\n\t}\n\n\tget protocol() {\n\t\treturn this.#inner.protocol;\n\t}\n\n\tget url() {\n\t\treturn this.#inner.url;\n\t}\n\n\tget onopen() {\n\t\treturn this.#onopen;\n\t}\n\n\tset onopen(handler) {\n\t\tthis.#onopen = handler;\n\t\tthis.#flushQueuedEvents();\n\t}\n\n\tget onclose() {\n\t\treturn this.#onclose;\n\t}\n\n\tset onclose(handler) {\n\t\tthis.#onclose = handler;\n\t\tthis.#flushQueuedEvents();\n\t}\n\n\tget onerror() {\n\t\treturn this.#onerror;\n\t}\n\n\tset onerror(handler) {\n\t\tthis.#onerror = handler;\n\t\tthis.#flushQueuedEvents();\n\t}\n\n\tget onmessage() {\n\t\treturn this.#onmessage;\n\t}\n\n\tset onmessage(handler) {\n\t\tthis.#onmessage = handler;\n\t\tthis.#flushQueuedEvents();\n\t}\n\n\tsend(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n\t\tthis.#inner.send(data);\n\t}\n\n\tclose(code?: number, reason?: string): void {\n\t\tthis.#inner.close(code, reason);\n\t}\n\n\taddEventListener(type: string, listener: (event: any) => void): void {\n\t\tconst listeners = this.#listeners.get(type) ?? new Set();\n\t\tlisteners.add(listener);\n\t\tthis.#listeners.set(type, listeners);\n\t\tthis.#flushQueuedEvents();\n\t}\n\n\tremoveEventListener(type: string, listener: (event: any) => void): void {\n\t\tthis.#listeners.get(type)?.delete(listener);\n\t}\n\n\tdispatchEvent(event: any): boolean {\n\t\treturn this.#dispatchEvent(event.type, event);\n\t}\n\n\t#handleEvent(type: string, event: any): void {\n\t\tif (this.#hasConsumer(type)) {\n\t\t\tthis.#dispatchEvent(type, event);\n\t\t\treturn;\n\t\t}\n\t\tthis.#queuedEvents.push({ type, event });\n\t}\n\n\t#flushQueuedEvents(): void {\n\t\tif (this.#queuedEvents.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pending = this.#queuedEvents;\n\t\tthis.#queuedEvents = [];\n\t\tfor (const pendingEvent of pending) {\n\t\t\tif (this.#hasConsumer(pendingEvent.type)) {\n\t\t\t\tthis.#dispatchEvent(pendingEvent.type, pendingEvent.event);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.#queuedEvents.push(pendingEvent);\n\t\t}\n\t}\n\n\t#hasConsumer(type: string): boolean {\n\t\tconst handler =\n\t\t\ttype === \"open\"\n\t\t\t\t? this.#onopen\n\t\t\t\t: type === \"close\"\n\t\t\t\t\t? this.#onclose\n\t\t\t\t\t: type === \"error\"\n\t\t\t\t\t\t? this.#onerror\n\t\t\t\t\t\t: type === \"message\"\n\t\t\t\t\t\t\t? this.#onmessage\n\t\t\t\t\t\t\t: null;\n\t\treturn Boolean(handler) || (this.#listeners.get(type)?.size ?? 0) > 0;\n\t}\n\n\t#dispatchEvent(type: string, event: any): boolean {\n\t\tconst listeners = this.#listeners.get(type);\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}\n\n\t\tconst handler =\n\t\t\ttype === \"open\"\n\t\t\t\t? this.#onopen\n\t\t\t\t: type === \"close\"\n\t\t\t\t\t? this.#onclose\n\t\t\t\t\t: type === \"error\"\n\t\t\t\t\t\t? this.#onerror\n\t\t\t\t\t\t: type === \"message\"\n\t\t\t\t\t\t\t? this.#onmessage\n\t\t\t\t\t\t\t: null;\n\t\thandler?.(event);\n\t\treturn true;\n\t}\n}\n\nexport function buildActorGatewayUrl(\n\tendpoint: string,\n\tactorId: string,\n\ttoken: string | undefined,\n\tpath = \"\",\n): string {\n\tconst tokenSegment =\n\t\ttoken !== undefined ? `@${encodeURIComponent(token)}` : \"\";\n\tconst gatewayPath = `/gateway/${encodeURIComponent(actorId)}${tokenSegment}${path}`;\n\treturn combineUrlPath(endpoint, gatewayPath);\n}\n\nexport function buildActorQueryGatewayUrl(\n\tendpoint: string,\n\tnamespace: string,\n\tquery: ActorGatewayQuery,\n\ttoken: string | undefined,\n\tpath = \"\",\n\tmaxInputSize = DEFAULT_MAX_QUERY_INPUT_SIZE,\n\tcrashPolicy: CrashPolicy | undefined = undefined,\n\trunnerName?: string,\n\toptions: GatewayRequestOptions = {},\n): string {\n\tif (namespace.length === 0) {\n\t\tthrow new Error(\"actor query namespace must not be empty\");\n\t}\n\n\tlet name: string;\n\tconst params = new URLSearchParams();\n\tparams.append(\"rvt-namespace\", namespace);\n\n\tif (\"getForKey\" in query) {\n\t\tname = query.getForKey.name;\n\t\tparams.append(\"rvt-method\", \"get\");\n\t\tpushKeyQueryParams(params, query.getForKey.key);\n\t\tif (crashPolicy !== undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Actor query method=get does not support crashPolicy.\",\n\t\t\t);\n\t\t}\n\t\tif (runnerName !== undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Actor query method=get does not support runnerName.\",\n\t\t\t);\n\t\t}\n\t} else if (\"getOrCreateForKey\" in query) {\n\t\tname = query.getOrCreateForKey.name;\n\t\tparams.append(\"rvt-method\", \"getOrCreate\");\n\t\tif (runnerName === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Actor query method=getOrCreate requires runnerName.\",\n\t\t\t);\n\t\t}\n\t\tparams.append(\"rvt-runner\", runnerName);\n\t\tpushKeyQueryParams(params, query.getOrCreateForKey.key);\n\t\tpushInputQueryParam(\n\t\t\tparams,\n\t\t\tquery.getOrCreateForKey.input,\n\t\t\tmaxInputSize,\n\t\t);\n\t\tif (query.getOrCreateForKey.region !== undefined) {\n\t\t\tparams.append(\"rvt-region\", query.getOrCreateForKey.region);\n\t\t}\n\t\tparams.append(\"rvt-crash-policy\", crashPolicy ?? \"sleep\");\n\t} else {\n\t\tthrow new Error(\n\t\t\t\"Actor query gateway URLs only support get and getOrCreate.\",\n\t\t);\n\t}\n\n\tif (name.length === 0) {\n\t\tthrow new Error(\"actor query name must not be empty\");\n\t}\n\n\tif (token !== undefined) {\n\t\tparams.append(\"rvt-token\", token);\n\t}\n\tif (shouldSkipReadyWait(options)) {\n\t\tparams.append(\"rvt-skip-ready-wait\", \"true\");\n\t}\n\n\tconst queryString = params.toString();\n\tlet separator: string;\n\tif (path.endsWith(\"?\") || path.endsWith(\"&\")) {\n\t\tseparator = \"\";\n\t} else if (path.includes(\"?\")) {\n\t\tseparator = \"&\";\n\t} else {\n\t\tseparator = \"?\";\n\t}\n\tconst gatewayPath = `/gateway/${encodeURIComponent(name)}${path}${separator}${queryString}`;\n\n\treturn combineUrlPath(endpoint, gatewayPath);\n}\n\nfunction pushKeyQueryParams(params: URLSearchParams, key: string[]): void {\n\tif (key.length > 0) {\n\t\tparams.append(\"rvt-key\", key.join(\",\"));\n\t}\n}\n\nfunction pushInputQueryParam(\n\tparams: URLSearchParams,\n\tinput: unknown,\n\tmaxInputSize: number,\n): void {\n\tif (input === undefined) {\n\t\treturn;\n\t}\n\n\tconst encodedInput = encodeCborCompat(input);\n\tif (encodedInput.byteLength > maxInputSize) {\n\t\tthrow new Error(\n\t\t\t`Actor query input exceeds maxInputSize (${encodedInput.byteLength} > ${maxInputSize} bytes). Increase client maxInputSize to allow larger query payloads.`,\n\t\t);\n\t}\n\n\tparams.append(\"rvt-input\", uint8ArrayToBase64Url(encodedInput));\n}\n\nfunction uint8ArrayToBase64Url(value: Uint8Array): string {\n\treturn uint8ArrayToBase64(value)\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/g, \"\");\n}\n\nexport async function openWebSocketToGateway(\n\trunConfig: ClientConfig,\n\tgatewayUrl: string,\n\tencoding: Encoding,\n\tparams: unknown,\n\toptions: GatewayRequestOptions & { directActorId?: string } = {},\n): Promise<UniversalWebSocket> {\n\tconst WebSocket = await importWebSocket();\n\n\tconst ackHookToken =\n\t\ttypeof process !== \"undefined\" && process.env.VITEST\n\t\t\t? crypto.randomUUID()\n\t\t\t: undefined;\n\n\tlogger().debug({\n\t\tmsg: \"opening websocket to actor via guard\",\n\t\tgatewayUrl,\n\t});\n\n\t// Create WebSocket connection\n\tconst ws = new WebSocket(\n\t\tgatewayUrl,\n\t\tbuildWebSocketProtocols(\n\t\t\trunConfig,\n\t\t\tencoding,\n\t\t\tparams,\n\t\t\tackHookToken,\n\t\t\toptions.directActorId\n\t\t\t\t? {\n\t\t\t\t\t\ttarget: \"actor\",\n\t\t\t\t\t\tactorId: options.directActorId,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\toptions,\n\t\t),\n\t);\n\n\t// The WebSocket is returned before the connection is open. This follows\n\t// standard WebSocket behavior where the caller listens for the \"open\"\n\t// event before sending messages.\n\tws.binaryType = \"arraybuffer\";\n\tconst bufferedWs = new BufferedRemoteWebSocket(\n\t\tws as unknown as UniversalWebSocket,\n\t);\n\tif (ackHookToken) {\n\t\tsetRemoteHibernatableWebSocketAckTestHooks(\n\t\t\tbufferedWs,\n\t\t\tackHookToken,\n\t\t\ttrue,\n\t\t);\n\t}\n\n\treturn bufferedWs;\n}\n\nexport function buildWebSocketProtocols(\n\trunConfig: ClientConfig,\n\tencoding: Encoding,\n\tparams?: unknown,\n\tackHookToken?: string,\n\ttarget?: {\n\t\ttarget: \"actor\";\n\t\tactorId: string;\n\t},\n\toptions: GatewayRequestOptions = {},\n): string[] {\n\tconst protocols: string[] = [];\n\tprotocols.push(WS_PROTOCOL_RIVETKIT);\n\tprotocols.push(`${WS_PROTOCOL_ENCODING}${encoding}`);\n\tif (target) {\n\t\tprotocols.push(`${WS_PROTOCOL_TARGET}${target.target}`);\n\t\tprotocols.push(`${WS_PROTOCOL_ACTOR}${target.actorId}`);\n\t\tif (runConfig.token) {\n\t\t\tprotocols.push(`${WS_PROTOCOL_TOKEN}${runConfig.token}`);\n\t\t}\n\t}\n\tif (shouldSkipReadyWait(options)) {\n\t\tprotocols.push(WS_PROTOCOL_SKIP_READY_WAIT);\n\t}\n\tif (params) {\n\t\tprotocols.push(\n\t\t\t`${WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`,\n\t\t);\n\t}\n\tif (ackHookToken) {\n\t\tprotocols.push(\n\t\t\t`${WS_PROTOCOL_TEST_ACK_HOOK}${encodeURIComponent(ackHookToken)}`,\n\t\t);\n\t}\n\treturn protocols;\n}\n","import pRetry from \"p-retry\";\nimport type { ClientConfig } from \"@/client/client\";\nimport type { MetadataResponse } from \"@/common/router\";\nimport { stringifyError } from \"@/common/utils\";\nimport { getMetadata } from \"./api-endpoints\";\nimport { getEndpoint } from \"./api-utils\";\nimport { logger } from \"./log\";\n\n// Global cache to store metadata check promises for each endpoint\nconst metadataLookupCache = new Map<string, Promise<MetadataResponse>>();\n\nexport async function lookupMetadataCached(\n\tconfig: ClientConfig,\n): Promise<MetadataResponse> {\n\tconst endpoint = getEndpoint(config);\n\n\t// Check if metadata lookup is already in progress or completed for this endpoint\n\tconst existingPromise = metadataLookupCache.get(endpoint);\n\tif (existingPromise) {\n\t\treturn existingPromise;\n\t}\n\n\t// Create and store the promise immediately to prevent racing requests\n\tconst metadataLookupPromise = pRetry(\n\t\tasync () => {\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"fetching metadata\",\n\t\t\t\tendpoint,\n\t\t\t});\n\n\t\t\tconst metadataData = await getMetadata(config);\n\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"received metadata\",\n\t\t\t\tendpoint,\n\t\t\t\tclientEndpoint: metadataData.clientEndpoint,\n\t\t\t});\n\n\t\t\treturn metadataData;\n\t\t},\n\t\t{\n\t\t\tforever: true,\n\t\t\tminTimeout: 500,\n\t\t\tmaxTimeout: 15_000,\n\t\t\tonFailedAttempt: (error) => {\n\t\t\t\t// Skip logging warning on first attempt since this attempt\n\t\t\t\t// fails if called immediately on startup. This is because the\n\t\t\t\t// runtime startup is an async operation that will not be\n\t\t\t\t// available on the first tick.\n\t\t\t\tif (error.attemptNumber > 1) {\n\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\tmsg: \"failed to fetch metadata, retrying\",\n\t\t\t\t\t\tendpoint,\n\t\t\t\t\t\tattempt: error.attemptNumber,\n\t\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t);\n\n\tmetadataLookupCache.set(endpoint, metadataLookupPromise);\n\treturn metadataLookupPromise;\n}\n","import type { Context as HonoContext } from \"hono\";\nimport type { WSContext } from \"hono/ws\";\nimport type { UpgradeWebSocketArgs } from \"@/common/actor-websocket\";\nimport { stringifyError } from \"@/common/utils\";\nimport { importWebSocket } from \"@/common/websocket\";\nimport { logger } from \"./log\";\n\n/**\n * Returns Hono `upgradeWebSocket` args that will proxy requests from the client to a destination address.\n */\nexport async function createWebSocketProxy(\n\tc: HonoContext,\n\ttargetUrl: string,\n\tprotocols: string[],\n): Promise<UpgradeWebSocketArgs> {\n\tconst WebSocket = await importWebSocket();\n\n\t// WebSocket state\n\tinterface WsState {\n\t\ttargetWs?: WebSocket;\n\t\tconnectPromise?: Promise<void>;\n\t}\n\tconst state: WsState = {};\n\n\treturn {\n\t\tonOpen: async (event: any, clientWs: WSContext) => {\n\t\t\tlogger().debug({ msg: \"client websocket connected\", targetUrl });\n\n\t\t\tif (clientWs.readyState !== 1) {\n\t\t\t\tlogger().warn({\n\t\t\t\t\tmsg: \"client websocket not open on connection\",\n\t\t\t\t\ttargetUrl,\n\t\t\t\t\treadyState: clientWs.readyState,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create WebSocket\n\t\t\tconst targetWs = new WebSocket(targetUrl, protocols);\n\t\t\tstate.targetWs = targetWs;\n\n\t\t\t// Setup connection promise\n\t\t\tstate.connectPromise = new Promise<void>((resolve, reject) => {\n\t\t\t\ttargetWs.addEventListener(\"open\", () => {\n\t\t\t\t\tlogger().debug({\n\t\t\t\t\t\tmsg: \"target websocket connected\",\n\t\t\t\t\t\ttargetUrl,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (clientWs.readyState !== 1) {\n\t\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\t\tmsg: \"client websocket closed before target connected\",\n\t\t\t\t\t\t\ttargetUrl,\n\t\t\t\t\t\t\tclientReadyState: clientWs.readyState,\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttargetWs.close(1001, \"Client disconnected\");\n\t\t\t\t\t\treject(new Error(\"Client disconnected\"));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\n\t\t\t\ttargetWs.addEventListener(\"error\", (error) => {\n\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\tmsg: \"target websocket error during connection\",\n\t\t\t\t\t\ttargetUrl,\n\t\t\t\t\t});\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Setup bidirectional forwarding\n\t\t\tstate.targetWs.addEventListener(\"message\", (event) => {\n\t\t\t\tif (\n\t\t\t\t\ttypeof event.data === \"string\" ||\n\t\t\t\t\tevent.data instanceof ArrayBuffer\n\t\t\t\t) {\n\t\t\t\t\tclientWs.send(event.data);\n\t\t\t\t} else if (event.data instanceof Blob) {\n\t\t\t\t\tevent.data.arrayBuffer().then((buffer) => {\n\t\t\t\t\t\tclientWs.send(buffer);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tstate.targetWs.addEventListener(\"close\", (event) => {\n\t\t\t\tlogger().debug({\n\t\t\t\t\tmsg: \"target websocket closed\",\n\t\t\t\t\ttargetUrl,\n\t\t\t\t\tcode: event.code,\n\t\t\t\t\treason: event.reason,\n\t\t\t\t});\n\t\t\t\tcloseWebSocketIfOpen(clientWs, event.code, event.reason);\n\t\t\t});\n\n\t\t\tstate.targetWs.addEventListener(\"error\", (error) => {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"target websocket error\",\n\t\t\t\t\ttargetUrl,\n\t\t\t\t\terror: stringifyError(error),\n\t\t\t\t});\n\t\t\t\tcloseWebSocketIfOpen(clientWs, 1011, \"Target WebSocket error\");\n\t\t\t});\n\t\t},\n\n\t\tonMessage: async (event: any, clientWs: WSContext) => {\n\t\t\tif (!state.targetWs || !state.connectPromise) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"websocket state not initialized\",\n\t\t\t\t\ttargetUrl,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait state.connectPromise;\n\t\t\t\tif (state.targetWs.readyState === WebSocket.OPEN) {\n\t\t\t\t\tstate.targetWs.send(event.data);\n\t\t\t\t} else {\n\t\t\t\t\tlogger().warn({\n\t\t\t\t\t\tmsg: \"target websocket not open\",\n\t\t\t\t\t\ttargetUrl,\n\t\t\t\t\t\treadyState: state.targetWs.readyState,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlogger().error({\n\t\t\t\t\tmsg: \"failed to connect to target websocket\",\n\t\t\t\t\ttargetUrl,\n\t\t\t\t\terror,\n\t\t\t\t});\n\t\t\t\tcloseWebSocketIfOpen(\n\t\t\t\t\tclientWs,\n\t\t\t\t\t1011,\n\t\t\t\t\t\"Failed to connect to target\",\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tonClose: (event: any, clientWs: WSContext) => {\n\t\t\tlogger().debug({\n\t\t\t\tmsg: \"client websocket closed\",\n\t\t\t\ttargetUrl,\n\t\t\t\tcode: event.code,\n\t\t\t\treason: event.reason,\n\t\t\t\twasClean: event.wasClean,\n\t\t\t});\n\n\t\t\tif (state.targetWs) {\n\t\t\t\tif (\n\t\t\t\t\tstate.targetWs.readyState === WebSocket.OPEN ||\n\t\t\t\t\tstate.targetWs.readyState === WebSocket.CONNECTING\n\t\t\t\t) {\n\t\t\t\t\tstate.targetWs.close(\n\t\t\t\t\t\t1000,\n\t\t\t\t\t\tevent.reason || \"Client disconnected\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tonError: (event: any, clientWs: WSContext) => {\n\t\t\tlogger().error({ msg: \"client websocket error\", targetUrl, event });\n\n\t\t\tif (state.targetWs) {\n\t\t\t\tif (state.targetWs.readyState === WebSocket.OPEN) {\n\t\t\t\t\tstate.targetWs.close(1011, \"Client WebSocket error\");\n\t\t\t\t} else if (state.targetWs.readyState === WebSocket.CONNECTING) {\n\t\t\t\t\tstate.targetWs.close();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction closeWebSocketIfOpen(\n\tws: WebSocket | WSContext,\n\tcode: number,\n\treason: string,\n): void {\n\tif (ws.readyState === 1) {\n\t\tws.close(code, reason);\n\t} else if (\n\t\t\"close\" in ws &&\n\t\t(ws as WebSocket).readyState === WebSocket.OPEN\n\t) {\n\t\tws.close(code, reason);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,eAAe;AACrB,IAAM,sBAAsB;AAC5B,IAAM,wBAAwB;AAG9B,IAAM,qBAAqB;AAE3B,IAAM,kBAAkB;AAGxB,IAAM,qBAAqB;AAE3B,IAAM,kBAAkB;AACxB,IAAM,0BAA0B;AAChC,IAAM,mBAAmB;AAEzB,IAAM,qBAAqB;AAG3B,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,yBAAyB;AAC/B,IAAM,+BAA+B;AAIrC,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAC7B,IAAM,0BAA0B;AAChC,IAAM,oBAAoB;AAC1B,IAAM,8BAA8B;AACpC,IAAM,4BAA4B;AAUlC,IAAM,yBAAyB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;ACpDO,IAAM,mBAAN,cAA+B,MAAM;AAAC;AAEtC,IAAM,eAAN,cAA2B,iBAAiB;AAAA,EAClD,YAAY,OAAe,MAAqB;AAC/C,UAAM,kBAAkB,KAAK,IAAI,IAAI;AAAA,EACtC;AACD;AAEO,IAAM,2BAAN,cAAuC,iBAAiB;AAAA,EAC9D,YAAY,OAAiB;AAC5B,UAAM,+BAA+B,KAAK,IAAI,EAAE,MAAM,CAAC;AAAA,EACxD;AACD;AAMO,IAAM,mBAAN,cAA+B,iBAAiB;AAAA,EACtD,YAAY,SAAiB,MAA4B;AACxD,UAAM,uBAAuB,OAAO,IAAI,EAAE,OAAO,6BAAM,MAAM,CAAC;AAAA,EAC/D;AACD;AAEO,IAAM,oBAAN,cAAgC,iBAAiB;AAAA,EACvD,cAAc;AACb,UAAM,0DAA0D;AAAA,EACjE;AACD;AAKO,SAAS,kBAAkB,OAAe,MAAuB;AACvE,SACC,UAAU,YACT,SAAS,yBAAyB,SAAS;AAE9C;AAEO,SAAS,qBACf,OACA,MACA,SACA,SACa;AACb,SAAO,IAAI;AAAA,IACV;AAAA,IACA;AAAA,IACA,0BAA0B,OAAO,MAAM,KAAK,UAAU,OAAO,CAAC;AAAA,IAC9D,EAAE,UAAU,EAAE,SAAS,QAAQ,EAAE;AAAA,EAClC;AACD;AAEO,SAAS,oBACf,SACA,MACa;AACb,SAAO,IAAI,WAAW,YAAY,qBAAqB,SAAS;AAAA,IAC/D,OAAO,6BAAM;AAAA,EACd,CAAC;AACF;;;ACrEA,OAAOA,gBAAe;AACtB,OAAO,UAAU,kBAAkB;;;ACDnC,SAAS,kCAAkC;;;ACC3C,YAAY,UAAU;AAEtB,IAAM,iBAAiC,gBAAK,YAAO,CAAC,CAAC;AAM9C,SAAS,SAAS,IAA2B;AAChD,SAAY,cAAS,EAAE;AAC3B;AAEO,SAAS,UAAU,IAAqB,GAAe;AAC1D,EAAK,eAAU,IAAI,CAAC;AACxB;AAQO,SAAS,SAAS,IAA2B;AAChD,SAAO;AAAA,IACH,SAAc,gBAAW,EAAE;AAAA,IAC3B,cAAmB,gBAAW,EAAE;AAAA,IAChC,iBAAsB,gBAAW,EAAE;AAAA,EACvC;AACJ;AAEO,SAAS,UAAU,IAAqB,GAAe;AAC1D,EAAK,iBAAY,IAAI,EAAE,OAAO;AAC9B,EAAK,iBAAY,IAAI,EAAE,YAAY;AACnC,EAAK,iBAAY,IAAI,EAAE,eAAe;AAC1C;AAEA,SAAS,MAAM,IAAkC;AAC7C,SAAY,cAAS,EAAE,IAAI,SAAS,EAAE,IAAI;AAC9C;AAEA,SAAS,OAAO,IAAqB,GAAsB;AACvD,EAAK,eAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,cAAU,IAAI,CAAC;AAAA,EACnB;AACJ;AAEA,SAAS,MAAM,IAAkC;AAC7C,SAAY,cAAS,EAAE,IAAS,cAAS,EAAE,IAAI;AACnD;AAEA,SAAS,OAAO,IAAqB,GAAsB;AACvD,EAAK,eAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,eAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAUO,SAAS,UAAU,IAA4B;AAClD,SAAO;AAAA,IACH,OAAY,gBAAW,EAAE;AAAA,IACzB,MAAW,gBAAW,EAAE;AAAA,IACxB,SAAc,gBAAW,EAAE;AAAA,IAC3B,UAAU,MAAM,EAAE;AAAA,IAClB,UAAU,MAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAAS,WAAW,IAAqB,GAAgB;AAC5D,EAAK,iBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,iBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,iBAAY,IAAI,EAAE,OAAO;AAC9B,SAAO,IAAI,EAAE,QAAQ;AACrB,SAAO,IAAI,EAAE,QAAQ;AACzB;AAOO,SAAS,mBAAmB,IAAqC;AACpE,SAAO;AAAA,IACH,IAAS,cAAS,EAAE;AAAA,IACpB,QAAQ,SAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAAS,oBAAoB,IAAqB,GAAyB;AAC9E,EAAK,eAAU,IAAI,EAAE,EAAE;AACvB,YAAU,IAAI,EAAE,MAAM;AAC1B;AAOO,SAAS,UAAU,IAA4B;AAClD,SAAO;AAAA,IACH,MAAW,gBAAW,EAAE;AAAA,IACxB,MAAM,SAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS,WAAW,IAAqB,GAAgB;AAC5D,EAAK,iBAAY,IAAI,EAAE,IAAI;AAC3B,YAAU,IAAI,EAAE,IAAI;AACxB;AAQO,SAAS,iBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,YAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,QAAQ,KAAK,SAAS,EAAE,EAAE;AAAA,IAC5C,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAK,UAAU,EAAE,EAAE;AAAA,IAC9C,KAAK;AACD,aAAO,EAAE,KAAK,kBAAkB,KAAK,mBAAmB,EAAE,EAAE;AAAA,IAChE,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAK,UAAU,EAAE,EAAE;AAAA,IAC9C,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,eAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,QAAQ;AACT,MAAK,aAAQ,IAAI,CAAC;AAClB,gBAAU,IAAI,EAAE,GAAG;AACnB;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,aAAQ,IAAI,CAAC;AAClB,iBAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,IACA,KAAK,kBAAkB;AACnB,MAAK,aAAQ,IAAI,CAAC;AAClB,0BAAoB,IAAI,EAAE,GAAG;AAC7B;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,aAAQ,IAAI,CAAC;AAClB,iBAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAAS,aAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAM,iBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAAS,cAAc,IAAqB,GAAmB;AAClE,oBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAAS,eAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,gBAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,eAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,aAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAAS,kBAAkB,IAAoC;AAClE,SAAO;AAAA,IACH,IAAS,cAAS,EAAE;AAAA,IACpB,MAAW,gBAAW,EAAE;AAAA,IACxB,MAAM,SAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS,mBAAmB,IAAqB,GAAwB;AAC5E,EAAK,eAAU,IAAI,EAAE,EAAE;AACvB,EAAK,iBAAY,IAAI,EAAE,IAAI;AAC3B,YAAU,IAAI,EAAE,IAAI;AACxB;AAOO,SAAS,wBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,WAAgB,gBAAW,EAAE;AAAA,IAC7B,WAAgB,cAAS,EAAE;AAAA,EAC/B;AACJ;AAEO,SAAS,yBAAyB,IAAqB,GAA8B;AACxF,EAAK,iBAAY,IAAI,EAAE,SAAS;AAChC,EAAK,eAAU,IAAI,EAAE,SAAS;AAClC;AAMO,SAAS,iBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,YAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,iBAAiB,KAAK,kBAAkB,EAAE,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,EAAE,KAAK,uBAAuB,KAAK,wBAAwB,EAAE,EAAE;AAAA,IAC1E,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,eAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAAS,kBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,iBAAiB;AAClB,MAAK,aAAQ,IAAI,CAAC;AAClB,yBAAmB,IAAI,EAAE,GAAG;AAC5B;AAAA,IACJ;AAAA,IACA,KAAK,uBAAuB;AACxB,MAAK,aAAQ,IAAI,CAAC;AAClB,+BAAyB,IAAI,EAAE,GAAG;AAClC;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAAS,aAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAM,iBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAAS,cAAc,IAAqB,GAAmB;AAClE,oBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAAS,eAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,gBAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,eAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,aAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAAS,sBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,MAAM,SAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS,uBAAuB,IAAqB,GAA4B;AACpF,YAAU,IAAI,EAAE,IAAI;AACxB;AAEO,SAAS,wBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,yBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,wBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,sBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAAS,uBAAuB,IAAyC;AAC5E,SAAO;AAAA,IACH,QAAQ,SAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAAS,wBAAwB,IAAqB,GAA6B;AACtF,YAAU,IAAI,EAAE,MAAM;AAC1B;AAEO,SAAS,yBAAyB,GAAuB,QAA2C;AACvG,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,0BAAwB,IAAI,CAAC;AAC7B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,yBAAyB,OAAuC;AAC5E,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,uBAAuB,EAAE;AACxC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AASO,SAAS,sBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,OAAY,gBAAW,EAAE;AAAA,IACzB,MAAW,gBAAW,EAAE;AAAA,IACxB,SAAc,gBAAW,EAAE;AAAA,IAC3B,UAAU,MAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAAS,uBAAuB,IAAqB,GAA4B;AACpF,EAAK,iBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,iBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,iBAAY,IAAI,EAAE,OAAO;AAC9B,SAAO,IAAI,EAAE,QAAQ;AACzB;AAEO,SAAS,wBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,yBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,wBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,sBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAAS,wBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,SAAc,gBAAW,EAAE;AAAA,EAC/B;AACJ;AAEO,SAAS,yBAAyB,IAAqB,GAA8B;AACxF,EAAK,iBAAY,IAAI,EAAE,OAAO;AAClC;AAEO,SAAS,0BAA0B,GAAwB,QAA2C;AACzG,QAAM,aAAa,UAAU,OAAY,YAAO,MAAM,IAAI;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,2BAAyB,IAAI,CAAC;AAC9B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,0BAA0B,OAAwC;AAC9E,QAAM,KAAK,IAAS,gBAAW,OAAO,cAAc;AACpD,QAAM,SAAS,wBAAwB,EAAE;AACzC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,eAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;;;AC9bA,YAAYC,WAAU;AAEtB,IAAMC,kBAAiC,gBAAK,aAAO,CAAC,CAAC;AAM9C,SAASC,UAAS,IAA2B;AAChD,SAAY,eAAS,EAAE;AAC3B;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,gBAAU,IAAI,CAAC;AACxB;AAOO,SAASC,UAAS,IAA2B;AAChD,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,IAC3B,cAAmB,iBAAW,EAAE;AAAA,EACpC;AACJ;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAK,kBAAY,IAAI,EAAE,YAAY;AACvC;AAEA,SAASC,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAIJ,UAAS,EAAE,IAAI;AAC9C;AAEA,SAASK,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAAJ,WAAU,IAAI,CAAC;AAAA,EACnB;AACJ;AAEA,SAASK,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAS,eAAS,EAAE,IAAI;AACnD;AAEA,SAASC,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,gBAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAUO,SAASC,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAUJ,OAAM,EAAE;AAAA,IAClB,UAAUE,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAASG,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAAJ,QAAO,IAAI,EAAE,QAAQ;AACrB,EAAAE,QAAO,IAAI,EAAE,QAAQ;AACzB;AAOO,SAASG,oBAAmB,IAAqC;AACpE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,QAAQV,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASW,qBAAoB,IAAqB,GAAyB;AAC9E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAAV,WAAU,IAAI,EAAE,MAAM;AAC1B;AAOO,SAASW,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMZ,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASa,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAAZ,WAAU,IAAI,EAAE,IAAI;AACxB;AAQO,SAASa,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,QAAQ,KAAKZ,UAAS,EAAE,EAAE;AAAA,IAC5C,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKM,WAAU,EAAE,EAAE;AAAA,IAC9C,KAAK;AACD,aAAO,EAAE,KAAK,kBAAkB,KAAKE,oBAAmB,EAAE,EAAE;AAAA,IAChE,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKE,WAAU,EAAE,EAAE;AAAA,IAC9C,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,QAAQ;AACT,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAZ,WAAU,IAAI,EAAE,GAAG;AACnB;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAM,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,IACA,KAAK,kBAAkB;AACnB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,qBAAoB,IAAI,EAAE,GAAG;AAC7B;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAInB;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAkB,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAOpB,eAAc;AACpD,QAAM,SAASiB,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,mBAAkB,IAAoC;AAClE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMpB,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASqB,oBAAmB,IAAqB,GAAwB;AAC5E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAApB,WAAU,IAAI,EAAE,IAAI;AACxB;AAOO,SAASqB,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,WAAgB,iBAAW,EAAE;AAAA,IAC7B,WAAgB,eAAS,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,SAAS;AAChC,EAAK,gBAAU,IAAI,EAAE,SAAS;AAClC;AAMO,SAASC,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,iBAAiB,KAAKJ,mBAAkB,EAAE,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,EAAE,KAAK,uBAAuB,KAAKE,yBAAwB,EAAE,EAAE;AAAA,IAC1E,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,iBAAiB;AAClB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAJ,oBAAmB,IAAI,EAAE,GAAG;AAC5B;AAAA,IACJ;AAAA,IACA,KAAK,uBAAuB;AACxB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,0BAAyB,IAAI,EAAE,GAAG;AAClC;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI7B;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA4B,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAO9B,eAAc;AACpD,QAAM,SAAS2B,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,MAAM9B,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS+B,wBAAuB,IAAqB,GAA4B;AACpF,EAAA9B,WAAU,IAAI,EAAE,IAAI;AACxB;AAEO,SAAS+B,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIjC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAgC,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAOlC,eAAc;AACpD,QAAM,SAAS+B,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,wBAAuB,IAAyC;AAC5E,SAAO;AAAA,IACH,QAAQlC,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASmC,yBAAwB,IAAqB,GAA6B;AACtF,EAAAlC,WAAU,IAAI,EAAE,MAAM;AAC1B;AAEO,SAASmC,0BAAyB,GAAuB,QAA2C;AACvG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIrC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAoC,yBAAwB,IAAI,CAAC;AAC7B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,0BAAyB,OAAuC;AAC5E,QAAM,KAAK,IAAS,iBAAW,OAAOtC,eAAc;AACpD,QAAM,SAASmC,wBAAuB,EAAE;AACxC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AASO,SAASI,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAUlC,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAASmC,wBAAuB,IAAqB,GAA4B;AACpF,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAAlC,QAAO,IAAI,EAAE,QAAQ;AACzB;AAEO,SAASmC,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIzC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAwC,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAO1C,eAAc;AACpD,QAAM,SAASuC,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,OAAO;AAClC;AAEO,SAASC,2BAA0B,GAAwB,QAA2C;AACzG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI7C;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA4C,0BAAyB,IAAI,CAAC;AAC9B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,2BAA0B,OAAwC;AAC9E,QAAM,KAAK,IAAS,iBAAW,OAAO9C,eAAc;AACpD,QAAM,SAAS2C,yBAAwB,EAAE;AACzC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;;;AC3bA,YAAYI,WAAU;AAEtB,IAAMC,kBAAiC,gBAAK,aAAO,CAAC,CAAC;AAO9C,SAASC,UAAS,IAA2B;AAChD,SAAY,eAAS,EAAE;AAC3B;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,gBAAU,IAAI,CAAC;AACxB;AAOO,SAASC,UAAS,IAA2B;AAChD,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,IAC3B,cAAmB,iBAAW,EAAE;AAAA,EACpC;AACJ;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAK,kBAAY,IAAI,EAAE,YAAY;AACvC;AAEA,SAASC,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAIJ,UAAS,EAAE,IAAI;AAC9C;AAEA,SAASK,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAAJ,WAAU,IAAI,CAAC;AAAA,EACnB;AACJ;AAEA,SAASK,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAS,eAAS,EAAE,IAAI;AACnD;AAEA,SAASC,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,gBAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAUO,SAASC,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAUJ,OAAM,EAAE;AAAA,IAClB,UAAUE,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAASG,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAAJ,QAAO,IAAI,EAAE,QAAQ;AACrB,EAAAE,QAAO,IAAI,EAAE,QAAQ;AACzB;AAOO,SAASG,oBAAmB,IAAqC;AACpE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,QAAQV,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASW,qBAAoB,IAAqB,GAAyB;AAC9E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAAV,WAAU,IAAI,EAAE,MAAM;AAC1B;AAOO,SAASW,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMZ,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASa,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAAZ,WAAU,IAAI,EAAE,IAAI;AACxB;AAQO,SAASa,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,QAAQ,KAAKZ,UAAS,EAAE,EAAE;AAAA,IAC5C,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKM,WAAU,EAAE,EAAE;AAAA,IAC9C,KAAK;AACD,aAAO,EAAE,KAAK,kBAAkB,KAAKE,oBAAmB,EAAE,EAAE;AAAA,IAChE,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKE,WAAU,EAAE,EAAE;AAAA,IAC9C,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,QAAQ;AACT,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAZ,WAAU,IAAI,EAAE,GAAG;AACnB;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAM,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,IACA,KAAK,kBAAkB;AACnB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,qBAAoB,IAAI,EAAE,GAAG;AAC7B;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAInB;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAkB,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAOpB,eAAc;AACpD,QAAM,SAASiB,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,mBAAkB,IAAoC;AAClE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMpB,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASqB,oBAAmB,IAAqB,GAAwB;AAC5E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAApB,WAAU,IAAI,EAAE,IAAI;AACxB;AAOO,SAASqB,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,WAAgB,iBAAW,EAAE;AAAA,IAC7B,WAAgB,eAAS,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,SAAS;AAChC,EAAK,gBAAU,IAAI,EAAE,SAAS;AAClC;AAMO,SAASC,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,iBAAiB,KAAKJ,mBAAkB,EAAE,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,EAAE,KAAK,uBAAuB,KAAKE,yBAAwB,EAAE,EAAE;AAAA,IAC1E,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,iBAAiB;AAClB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAJ,oBAAmB,IAAI,EAAE,GAAG;AAC5B;AAAA,IACJ;AAAA,IACA,KAAK,uBAAuB;AACxB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,0BAAyB,IAAI,EAAE,GAAG;AAClC;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI7B;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA4B,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAO9B,eAAc;AACpD,QAAM,SAAS2B,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,MAAM9B,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS+B,wBAAuB,IAAqB,GAA4B;AACpF,EAAA9B,WAAU,IAAI,EAAE,IAAI;AACxB;AAEO,SAAS+B,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIjC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAgC,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAOlC,eAAc;AACpD,QAAM,SAAS+B,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,wBAAuB,IAAyC;AAC5E,SAAO;AAAA,IACH,QAAQlC,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASmC,yBAAwB,IAAqB,GAA6B;AACtF,EAAAlC,WAAU,IAAI,EAAE,MAAM;AAC1B;AAEO,SAASmC,0BAAyB,GAAuB,QAA2C;AACvG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIrC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAoC,yBAAwB,IAAI,CAAC;AAC7B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,0BAAyB,OAAuC;AAC5E,QAAM,KAAK,IAAS,iBAAW,OAAOtC,eAAc;AACpD,QAAM,SAASmC,wBAAuB,EAAE;AACxC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAEA,SAAS,MAAM,IAAoC;AAC/C,SAAY,eAAS,EAAE,IAAS,iBAAW,EAAE,IAAI;AACrD;AAEA,SAAS,OAAO,IAAqB,GAAwB;AACzD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,kBAAY,IAAI,CAAC;AAAA,EAC1B;AACJ;AAEA,SAAS,MAAM,IAAqC;AAChD,SAAY,eAAS,EAAE,IAAS,eAAS,EAAE,IAAI;AACnD;AAEA,SAAS,OAAO,IAAqB,GAAyB;AAC1D,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,gBAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAEA,SAAS,MAAM,IAAiC;AAC5C,SAAY,eAAS,EAAE,IAAS,cAAQ,EAAE,IAAI;AAClD;AAEA,SAAS,OAAO,IAAqB,GAAqB;AACtD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,eAAS,IAAI,CAAC;AAAA,EACvB;AACJ;AASO,SAAS,yBAAyB,IAA2C;AAChF,SAAO;AAAA,IACH,MAAMlC,UAAS,EAAE;AAAA,IACjB,MAAM,MAAM,EAAE;AAAA,IACd,MAAM,MAAM,EAAE;AAAA,IACd,SAAS,MAAM,EAAE;AAAA,EACrB;AACJ;AAEO,SAAS,0BAA0B,IAAqB,GAA+B;AAC1F,EAAAC,WAAU,IAAI,EAAE,IAAI;AACpB,SAAO,IAAI,EAAE,IAAI;AACjB,SAAO,IAAI,EAAE,IAAI;AACjB,SAAO,IAAI,EAAE,OAAO;AACxB;AAEO,SAAS,2BAA2B,GAAyB,QAA2C;AAC3G,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIF;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,4BAA0B,IAAI,CAAC;AAC/B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,2BAA2B,OAAyC;AAChF,QAAM,KAAK,IAAS,iBAAW,OAAOA,eAAc;AACpD,QAAM,SAAS,yBAAyB,EAAE;AAC1C,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAOO,SAAS,0BAA0B,IAA4C;AAClF,SAAO;AAAA,IACH,QAAa,iBAAW,EAAE;AAAA,IAC1B,UAAUK,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAAS,2BAA2B,IAAqB,GAAgC;AAC5F,EAAK,kBAAY,IAAI,EAAE,MAAM;AAC7B,EAAAC,QAAO,IAAI,EAAE,QAAQ;AACzB;AAEO,SAAS,4BAA4B,GAA0B,QAA2C;AAC7G,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIN;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,6BAA2B,IAAI,CAAC;AAChC,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAAS,4BAA4B,OAA0C;AAClF,QAAM,KAAK,IAAS,iBAAW,OAAOA,eAAc;AACpD,QAAM,SAAS,0BAA0B,EAAE;AAC3C,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AASO,SAASuC,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAUlC,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAASmC,wBAAuB,IAAqB,GAA4B;AACpF,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAAlC,QAAO,IAAI,EAAE,QAAQ;AACzB;AAEO,SAASmC,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIzC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAwC,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAO1C,eAAc;AACpD,QAAM,SAASuC,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,OAAO;AAClC;AAEO,SAASC,2BAA0B,GAAwB,QAA2C;AACzG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI7C;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA4C,0BAAyB,IAAI,CAAC;AAC9B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,2BAA0B,OAAwC;AAC9E,QAAM,KAAK,IAAS,iBAAW,OAAO9C,eAAc;AACpD,QAAM,SAAS2C,yBAAwB,EAAE;AACzC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;;;AC3iBA,YAAYI,WAAU;AAEtB,IAAMC,kBAAiC,gBAAK,aAAO,CAAC,CAAC;AAO9C,SAASC,UAAS,IAA2B;AAChD,SAAY,eAAS,EAAE;AAC3B;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,gBAAU,IAAI,CAAC;AACxB;AAEA,SAASC,OAAM,IAAoC;AAC/C,SAAY,eAAS,EAAE,IAAS,iBAAW,EAAE,IAAI;AACrD;AAEA,SAASC,QAAO,IAAqB,GAAwB;AACzD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,kBAAY,IAAI,CAAC;AAAA,EAC1B;AACJ;AAQO,SAAS,mBAAmB,IAAqC;AACpE,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,IAC3B,YAAiB,eAAS,EAAE;AAAA,IAC5B,KAAKD,OAAM,EAAE;AAAA,EACjB;AACJ;AAEO,SAAS,oBAAoB,IAAqB,GAAyB;AAC9E,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAK,gBAAU,IAAI,EAAE,UAAU;AAC/B,EAAAC,QAAO,IAAI,EAAE,GAAG;AACpB;AAOO,SAASC,UAAS,IAA2B;AAChD,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,IAC3B,cAAmB,iBAAW,EAAE;AAAA,EACpC;AACJ;AAEO,SAASC,WAAU,IAAqB,GAAe;AAC1D,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAK,kBAAY,IAAI,EAAE,YAAY;AACvC;AAEA,SAASC,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAIN,UAAS,EAAE,IAAI;AAC9C;AAEA,SAASO,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAAN,WAAU,IAAI,CAAC;AAAA,EACnB;AACJ;AAEA,SAASO,OAAM,IAAkC;AAC7C,SAAY,eAAS,EAAE,IAAS,eAAS,EAAE,IAAI;AACnD;AAEA,SAASC,QAAO,IAAqB,GAAsB;AACvD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,gBAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAEA,SAASC,OAAM,IAA4C;AACvD,SAAY,eAAS,EAAE,IAAI,mBAAmB,EAAE,IAAI;AACxD;AAEA,SAASC,QAAO,IAAqB,GAAgC;AACjE,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,wBAAoB,IAAI,CAAC;AAAA,EAC7B;AACJ;AAWO,SAASC,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAUN,OAAM,EAAE;AAAA,IAClB,UAAUE,OAAM,EAAE;AAAA,IAClB,OAAOE,OAAM,EAAE;AAAA,EACnB;AACJ;AAEO,SAASG,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAAN,QAAO,IAAI,EAAE,QAAQ;AACrB,EAAAE,QAAO,IAAI,EAAE,QAAQ;AACrB,EAAAE,QAAO,IAAI,EAAE,KAAK;AACtB;AAOO,SAASG,oBAAmB,IAAqC;AACpE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,QAAQd,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASe,qBAAoB,IAAqB,GAAyB;AAC9E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAAd,WAAU,IAAI,EAAE,MAAM;AAC1B;AAOO,SAASe,WAAU,IAA4B;AAClD,SAAO;AAAA,IACH,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMhB,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASiB,YAAW,IAAqB,GAAgB;AAC5D,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAAhB,WAAU,IAAI,EAAE,IAAI;AACxB;AAQO,SAASiB,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,QAAQ,KAAKd,UAAS,EAAE,EAAE;AAAA,IAC5C,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKQ,WAAU,EAAE,EAAE;AAAA,IAC9C,KAAK;AACD,aAAO,EAAE,KAAK,kBAAkB,KAAKE,oBAAmB,EAAE,EAAE;AAAA,IAChE,KAAK;AACD,aAAO,EAAE,KAAK,SAAS,KAAKE,WAAU,EAAE,EAAE;AAAA,IAC9C,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,QAAQ;AACT,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAd,WAAU,IAAI,EAAE,GAAG;AACnB;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAQ,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,IACA,KAAK,kBAAkB;AACnB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,qBAAoB,IAAI,EAAE,GAAG;AAC7B;AAAA,IACJ;AAAA,IACA,KAAK,SAAS;AACV,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,YAAW,IAAI,EAAE,GAAG;AACpB;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIvB;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAsB,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAOxB,eAAc;AACpD,QAAM,SAASqB,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,mBAAkB,IAAoC;AAClE,SAAO;AAAA,IACH,IAAS,eAAS,EAAE;AAAA,IACpB,MAAW,iBAAW,EAAE;AAAA,IACxB,MAAMxB,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASyB,oBAAmB,IAAqB,GAAwB;AAC5E,EAAK,gBAAU,IAAI,EAAE,EAAE;AACvB,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAAxB,WAAU,IAAI,EAAE,IAAI;AACxB;AAOO,SAASyB,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,WAAgB,iBAAW,EAAE;AAAA,IAC7B,WAAgB,eAAS,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,SAAS;AAChC,EAAK,gBAAU,IAAI,EAAE,SAAS;AAClC;AAMO,SAASC,kBAAiB,IAAmC;AAChE,QAAM,SAAS,GAAG;AAClB,QAAM,MAAW,aAAO,EAAE;AAC1B,UAAQ,KAAK;AAAA,IACT,KAAK;AACD,aAAO,EAAE,KAAK,iBAAiB,KAAKJ,mBAAkB,EAAE,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,EAAE,KAAK,uBAAuB,KAAKE,yBAAwB,EAAE,EAAE;AAAA,IAC1E,SAAS;AACL,SAAG,SAAS;AACZ,YAAM,IAAS,gBAAU,QAAQ,aAAa;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,SAASG,mBAAkB,IAAqB,GAAuB;AAC1E,UAAQ,EAAE,KAAK;AAAA,IACX,KAAK,iBAAiB;AAClB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAJ,oBAAmB,IAAI,EAAE,GAAG;AAC5B;AAAA,IACJ;AAAA,IACA,KAAK,uBAAuB;AACxB,MAAK,cAAQ,IAAI,CAAC;AAClB,MAAAE,0BAAyB,IAAI,EAAE,GAAG;AAClC;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,SAASG,cAAa,IAA+B;AACxD,SAAO;AAAA,IACH,MAAMF,kBAAiB,EAAE;AAAA,EAC7B;AACJ;AAEO,SAASG,eAAc,IAAqB,GAAmB;AAClE,EAAAF,mBAAkB,IAAI,EAAE,IAAI;AAChC;AAEO,SAASG,gBAAe,GAAa,QAA2C;AACnF,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIjC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAgC,eAAc,IAAI,CAAC;AACnB,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,gBAAe,OAA6B;AACxD,QAAM,KAAK,IAAS,iBAAW,OAAOlC,eAAc;AACpD,QAAM,SAAS+B,cAAa,EAAE;AAC9B,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,MAAMlC,UAAS,EAAE;AAAA,EACrB;AACJ;AAEO,SAASmC,wBAAuB,IAAqB,GAA4B;AACpF,EAAAlC,WAAU,IAAI,EAAE,IAAI;AACxB;AAEO,SAASmC,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIrC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAoC,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAOtC,eAAc;AACpD,QAAM,SAASmC,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAMO,SAASI,wBAAuB,IAAyC;AAC5E,SAAO;AAAA,IACH,QAAQtC,UAAS,EAAE;AAAA,EACvB;AACJ;AAEO,SAASuC,yBAAwB,IAAqB,GAA6B;AACtF,EAAAtC,WAAU,IAAI,EAAE,MAAM;AAC1B;AAEO,SAASuC,0BAAyB,GAAuB,QAA2C;AACvG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIzC;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAwC,yBAAwB,IAAI,CAAC;AAC7B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,0BAAyB,OAAuC;AAC5E,QAAM,KAAK,IAAS,iBAAW,OAAO1C,eAAc;AACpD,QAAM,SAASuC,wBAAuB,EAAE;AACxC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAEA,SAASI,OAAM,IAAqC;AAChD,SAAY,eAAS,EAAE,IAAS,eAAS,EAAE,IAAI;AACnD;AAEA,SAASC,QAAO,IAAqB,GAAyB;AAC1D,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,gBAAU,IAAI,CAAC;AAAA,EACxB;AACJ;AAEA,SAAS,MAAM,IAAiC;AAC5C,SAAY,eAAS,EAAE,IAAS,cAAQ,EAAE,IAAI;AAClD;AAEA,SAAS,OAAO,IAAqB,GAAqB;AACtD,EAAK,gBAAU,IAAI,KAAK,IAAI;AAC5B,MAAI,KAAK,MAAM;AACX,IAAK,eAAS,IAAI,CAAC;AAAA,EACvB;AACJ;AASO,SAASC,0BAAyB,IAA2C;AAChF,SAAO;AAAA,IACH,MAAM5C,UAAS,EAAE;AAAA,IACjB,MAAME,OAAM,EAAE;AAAA,IACd,MAAMwC,OAAM,EAAE;AAAA,IACd,SAAS,MAAM,EAAE;AAAA,EACrB;AACJ;AAEO,SAASG,2BAA0B,IAAqB,GAA+B;AAC1F,EAAA5C,WAAU,IAAI,EAAE,IAAI;AACpB,EAAAE,QAAO,IAAI,EAAE,IAAI;AACjB,EAAAwC,QAAO,IAAI,EAAE,IAAI;AACjB,SAAO,IAAI,EAAE,OAAO;AACxB;AAEO,SAASG,4BAA2B,GAAyB,QAA2C;AAC3G,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI/C;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA8C,2BAA0B,IAAI,CAAC;AAC/B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,4BAA2B,OAAyC;AAChF,QAAM,KAAK,IAAS,iBAAW,OAAOhD,eAAc;AACpD,QAAM,SAAS6C,0BAAyB,EAAE;AAC1C,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAOO,SAASI,2BAA0B,IAA4C;AAClF,SAAO;AAAA,IACH,QAAa,iBAAW,EAAE;AAAA,IAC1B,UAAU1C,OAAM,EAAE;AAAA,EACtB;AACJ;AAEO,SAAS2C,4BAA2B,IAAqB,GAAgC;AAC5F,EAAK,kBAAY,IAAI,EAAE,MAAM;AAC7B,EAAA1C,QAAO,IAAI,EAAE,QAAQ;AACzB;AAEO,SAAS2C,6BAA4B,GAA0B,QAA2C;AAC7G,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAInD;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAkD,4BAA2B,IAAI,CAAC;AAChC,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,6BAA4B,OAA0C;AAClF,QAAM,KAAK,IAAS,iBAAW,OAAOpD,eAAc;AACpD,QAAM,SAASiD,2BAA0B,EAAE;AAC3C,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAUO,SAASI,uBAAsB,IAAwC;AAC1E,SAAO;AAAA,IACH,OAAY,iBAAW,EAAE;AAAA,IACzB,MAAW,iBAAW,EAAE;AAAA,IACxB,SAAc,iBAAW,EAAE;AAAA,IAC3B,UAAU9C,OAAM,EAAE;AAAA,IAClB,OAAOI,OAAM,EAAE;AAAA,EACnB;AACJ;AAEO,SAAS2C,wBAAuB,IAAqB,GAA4B;AACpF,EAAK,kBAAY,IAAI,EAAE,KAAK;AAC5B,EAAK,kBAAY,IAAI,EAAE,IAAI;AAC3B,EAAK,kBAAY,IAAI,EAAE,OAAO;AAC9B,EAAA9C,QAAO,IAAI,EAAE,QAAQ;AACrB,EAAAI,QAAO,IAAI,EAAE,KAAK;AACtB;AAEO,SAAS2C,yBAAwB,GAAsB,QAA2C;AACrG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAIvD;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAAsD,wBAAuB,IAAI,CAAC;AAC5B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,yBAAwB,OAAsC;AAC1E,QAAM,KAAK,IAAS,iBAAW,OAAOxD,eAAc;AACpD,QAAM,SAASqD,uBAAsB,EAAE;AACvC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;AAQO,SAASI,yBAAwB,IAA0C;AAC9E,SAAO;AAAA,IACH,SAAc,iBAAW,EAAE;AAAA,EAC/B;AACJ;AAEO,SAASC,0BAAyB,IAAqB,GAA8B;AACxF,EAAK,kBAAY,IAAI,EAAE,OAAO;AAClC;AAEO,SAASC,2BAA0B,GAAwB,QAA2C;AACzG,QAAM,aAAa,UAAU,OAAY,aAAO,MAAM,IAAI3D;AAC1D,QAAM,KAAK,IAAS;AAAA,IAChB,IAAI,WAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AACA,EAAA0D,0BAAyB,IAAI,CAAC;AAC9B,SAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,GAAG,KAAK,YAAY,GAAG,MAAM;AACvE;AAEO,SAASE,2BAA0B,OAAwC;AAC9E,QAAM,KAAK,IAAS,iBAAW,OAAO5D,eAAc;AACpD,QAAM,SAASyD,yBAAwB,EAAE;AACzC,MAAI,GAAG,SAAS,GAAG,KAAK,YAAY;AAChC,UAAM,IAAS,gBAAU,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AACA,SAAO;AACX;;;AJ3kBO,IAAM,kBAAkB;AAG/B,IAAM,SAAS,CAAC,WAAqC;AAEpD,MAAI,OAAO,KAAK,QAAQ,QAAQ;AAC/B,UAAM,EAAE,SAAS,aAAa,IAAI,OAAO,KAAK;AAC9C,WAAO;AAAA,MACN,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,UACJ;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAGA,IAAM,SAAS,CAAC,WAAqC;AAEpD,MAAI,OAAO,KAAK,QAAQ,QAAQ;AAC/B,UAAM,EAAE,SAAS,aAAa,IAAI,OAAO,KAAK;AAC9C,WAAO;AAAA,MACN,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,UACJ;AAAA,UACA;AAAA,UACA,iBAAiB;AAAA;AAAA,QAClB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAGA,IAAM,SAAS,CAAC,WAAqC;AACpD,SAAO;AACR;AAEA,IAAM,SAAS,CAAC,WAAqC;AACpD,MAAI,OAAO,KAAK,QAAQ,SAAS;AAChC,WAAO;AAAA,MACN,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,UACJ,GAAG,OAAO,KAAK;AAAA,UACf,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAEA,IAAM,SAAS,CAAC,WAAqC;AACpD,MAAI,OAAO,KAAK,QAAQ,SAAS;AAChC,UAAM,EAAE,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,KAAK;AACzC,WAAO;AAAA,MACN,MAAM;AAAA,QACL,KAAK;AAAA,QACL;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAGA,IAAM,SAAS,CAAC,WAAqC;AACpD,SAAO;AACR;AAGA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,eAAe,CAAC,WAAqC;AAC1D,SAAO;AACR;AAEA,IAAM,0BAA0B,CAC/B,YAC2B;AAAA,EAC3B,GAAG;AAAA,EACH,OAAO;AACR;AAEA,IAAM,0BAA0B,CAC/B,WAC0B;AAC1B,QAAM,EAAE,OAAO,GAAG,GAAG,KAAK,IAAI;AAC9B,SAAO;AACR;AAEO,IAAM,4BAA4B,2BAAwC;AAAA,EAChF,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,eAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUI,gBAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUA,gBAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUA,gBAAe,KAAK;AAAA,MAC/B;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,eAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUC,gBAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUA,gBAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUA,gBAAe,IAAmB;AAAA,MAC7C;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC,cAAc,cAAc,YAAY;AAAA,EACtE,qBAAqB,MAAM,CAAC,cAAc,cAAc,YAAY;AACrE,CAAC;AAEM,IAAM,4BAA4B,2BAAwC;AAAA,EAChF,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,eAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUC,gBAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUA,gBAAe,KAAK;AAAA,MAC/B,KAAK;AACJ,eAAUA,gBAAe,KAAK;AAAA,MAC/B;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,eAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUC,gBAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUA,gBAAe,IAAmB;AAAA,MAC7C,KAAK;AACJ,eAAUA,gBAAe,IAAmB;AAAA,MAC7C;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACpD,qBAAqB,MAAM,CAAC,QAAQ,QAAQ,MAAM;AACnD,CAAC;AAEM,IAAM,gCACZ,2BAAiD;AAAA,EAChD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,wBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUC,yBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUA,yBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUA,yBAAwB,KAAK;AAAA,MACxC;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC;AAAA,EAC9B,qBAAqB,MAAM,CAAC;AAC7B,CAAC;AAEK,IAAM,iCACZ,2BAAkD;AAAA,EACjD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,yBAAyB,KAAK;AAAA,MACzC,KAAK;AACJ,eAAUC,0BAAyB,KAAK;AAAA,MACzC,KAAK;AACJ,eAAUA,0BAAyB,KAAK;AAAA,MACzC,KAAK;AACJ,eAAUA,0BAAyB,KAAK;AAAA,MACzC;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC;AAAA,EAC9B,qBAAqB,MAAM,CAAC;AAC7B,CAAC;AAEK,IAAM,oCACZ,2BAAoD;AAAA,EACnD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,2BAA2B,KAAK;AAAA,MAC3C,KAAK;AACJ,eAAUC,4BAA2B,KAAK;AAAA,MAC3C;AACC,cAAM,IAAI;AAAA,UACT,+DAA+D,OAAO;AAAA,QACvE;AAAA,IACF;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI;AAAA,UACT,+DAA+D,OAAO;AAAA,QACvE;AAAA,IACF;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC;AAAA,EAC9B,qBAAqB,MAAM,CAAC;AAC7B,CAAC;AAEK,IAAM,qCACZ,2BAAqD;AAAA,EACpD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,4BAA4B,KAAK;AAAA,MAC5C,KAAK;AACJ,eAAUC,6BAA4B,KAAK;AAAA,MAC5C;AACC,cAAM,IAAI;AAAA,UACT,gEAAgE,OAAO;AAAA,QACxE;AAAA,IACF;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI;AAAA,UACT,gEAAgE,OAAO;AAAA,QACxE;AAAA,IACF;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC;AAAA,EAC9B,qBAAqB,MAAM,CAAC;AAC7B,CAAC;AAEK,IAAM,gCACZ,2BAAiD;AAAA,EAChD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,wBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUC,yBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUA,yBAAwB,KAAK;AAAA,MACxC,KAAK;AACJ,eAAUA,yBAAwB,KAAK;AAAA,MACxC;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM;AAAA,IAC5B,CAAC,SACA;AAAA,IACD,CAAC,SACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,qBAAqB,MAAM;AAAA,IAC1B;AAAA,IACA,CAAC,SACA;AAAA,IACD,CAAC,SACA;AAAA,EACF;AACD,CAAC;AAEK,IAAM,kCACZ,2BAAmD;AAAA,EAClD,oBAAoB,CAAC,OAAO,YAAY;AACvC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU,0BAA0B,KAAK;AAAA,MAC1C,KAAK;AACJ,eAAUC,2BAA0B,KAAK;AAAA,MAC1C,KAAK;AACJ,eAAUA,2BAA0B,KAAK;AAAA,MAC1C,KAAK;AACJ,eAAUA,2BAA0B,KAAK;AAAA,MAC1C;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,kBAAkB,CAAC,MAAM,YAAY;AACpC,YAAQ,SAAS;AAAA,MAChB,KAAK;AACJ,eAAU;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUC;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD,KAAK;AACJ,eAAUA;AAAA,UACT;AAAA,QACD;AAAA,MACD;AACC,cAAM,IAAI,MAAM,mBAAmB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACD;AAAA,EACA,uBAAuB,MAAM,CAAC;AAAA,EAC9B,qBAAqB,MAAM,CAAC;AAC7B,CAAC;;;AKpbF,SAAS,SAAS;AAGlB,IAAM,aAAa,EAAE,OAAO;AAC5B,IAAM,qBAAqB,WAAW,SAAS;AAC/C,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACrC,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,EAC5C,KAAK,EAAE,OAAO,EAAE,SAAS;AAC1B,CAAC;AAGM,IAAM,aAAa,EAAE,OAAO;AAAA,EAClC,SAAS,EAAE,OAAO;AAAA,EAClB,cAAc,EAAE,OAAO;AACxB,CAAC;AAGM,IAAM,cAAc,EAAE,OAAO;AAAA,EACnC,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,UAAU;AAAA,EACV,OAAO,qBAAqB,SAAS;AACtC,CAAC;AAGM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC5C,IAAI;AAAA,EACJ,QAAQ,EAAE,QAAQ;AACnB,CAAC;AAGM,IAAM,cAAc,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,QAAQ;AACjB,CAAC;AAGM,IAAM,qBAAqB,EAAE,mBAAmB,OAAO;AAAA,EAC7D,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,MAAM,GAAG,KAAK,WAAW,CAAC;AAAA,EACpD,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,OAAO,GAAG,KAAK,YAAY,CAAC;AAAA,EACtD,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,gBAAgB,GAAG,KAAK,qBAAqB,CAAC;AAAA,EACxE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,OAAO,GAAG,KAAK,YAAY,CAAC;AACvD,CAAC;AAGM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACtC,MAAM;AACP,CAAC;AAIM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC3C,IAAI;AAAA,EACJ,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,QAAQ;AACjB,CAAC;AAGM,IAAM,4BAA4B,EAAE,OAAO;AAAA,EACjD,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,QAAQ;AACtB,CAAC;AAGM,IAAM,qBAAqB,EAAE,mBAAmB,OAAO;AAAA,EAC7D,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,eAAe,GAAG,KAAK,oBAAoB,CAAC;AAAA,EACtE,EAAE,OAAO;AAAA,IACR,KAAK,EAAE,QAAQ,qBAAqB;AAAA,IACpC,KAAK;AAAA,EACN,CAAC;AACF,CAAC;AAGM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACtC,MAAM;AACP,CAAC;AAIM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,QAAQ;AACjB,CAAC;AAGM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAChD,QAAQ,EAAE,QAAQ;AACnB,CAAC;AAIM,IAAM,6BAA6B,EAAE,OAAO;AAAA,EAClD,MAAM,EAAE,QAAQ;AAAA,EAChB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,8BAA8B,EAAE,OAAO;AAAA,EACnD,QAAQ,EAAE,KAAK,CAAC,aAAa,UAAU,CAAC;AAAA,EACxC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;AAIM,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC/C,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,OAAO,qBAAqB,SAAS;AACtC,CAAC;AAIM,IAAM,2BAA2B,EAAE,KAAK;AAGxC,IAAM,4BAA4B,EAAE,OAAO;AAAA,EACjD,SAAS,EAAE,OAAO;AACnB,CAAC;;;ACpFM,SAAS,2BACf,WAAgC,CAAC,GACjC,WAC8B;AAC9B,QAAM,iBAAgB,uCAAW,kBAAiB,SAAS,iBAAiB;AAE5E,SAAO;AAAA,IACN;AAAA,EACD;AACD;;;ACnCO,SAAS,sBAAsB,OAA2B;AAChE,MAAI,cAAc,MAAO,QAAO,MAAM,SAAS;AAC/C,MAAI,eAAe,MAAO,QAAO,MAAM,UAAU;AACjD,MAAI,uBAAuB,MAAO,QAAO,MAAM,kBAAkB;AACjE,MAAI,YAAY,MAAO,QAAO,MAAM,OAAO;AAC3C,QAAa,eAAe,sBAAsB;AACnD;AAIO,SAAS,oBACf,YAGsD;AACtD,SAAO,eAAe,cAAc,uBAAuB;AAC5D;AAEO,SAAS,iBAAiB,OAA4C;AAC5E,MAAI,cAAc,OAAO;AACxB,WAAO,EAAE,UAAU,MAAM,SAAS,QAAQ;AAAA,EAC3C;AAEA,MAAI,YAAY,OAAO;AACtB,UAAa;AAAA,MACZ;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,0BACf,OACA,MACU;AACV,SACC,UAAU,YACT,SAAS,eACT,SAAS,cACT,SAAS,cACT,SAAS,oBACT,SAAS,mBACT,KAAK,WAAW,YAAY;AAE/B;AAKA,eAAsB,wBACrB,OACA,MACA,SACA,OACA,QACuC;AACvC,QAAM,OAAO,sBAAsB,KAAK;AAExC,MAAI;AACH,UAAM,QAAQ,MAAM,OAAO,SAAS,EAAE,MAAM,QAAQ,CAAC;AAErD,QAAI,+BAAO,OAAO;AACjB,aAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM;AAAA,MACd,CAAC;AACD,aAAO,qBAAqB,OAAO,MAAM,SAAS,MAAM,KAAK;AAAA,IAC9D;AAAA,EACD,SAAS,KAAK;AACb,WAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MACL;AAAA,MACA,OAAO,eAAe,GAAG;AAAA,IAC1B,CAAC;AAAA,EACF;AAEA,SAAO;AACR;;;ACjFA,UAAU,eACT,OACA,WAAW,GAC2B;AACtC,MAAI,UAAU;AACd,MAAI,QAAQ;AAEZ,SAAO,YAAY,UAAa,YAAY,QAAQ,QAAQ,UAAU;AACrE,UAAM;AAEN,QACC,OAAO,YAAY,YACnB,WAAW,WACV,QAAgC,UAAU,SAC1C;AACD,gBAAW,QAAgC;AAC3C,eAAS;AACT;AAAA,IACD;AAEA;AAAA,EACD;AACD;AAEA,SAAS,2BACR,MACA,QACA,SACA,MAKwB;AACxB,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO,6BAAM;AAAA,IACb,MAAM,6BAAM;AAAA,IACZ;AAAA,IACA,SAAQ,6BAAM,WAAU;AAAA,EACzB;AACD;AAEA,SAAS,mBACR,OACoC;AACpC,MACC,MAAM,UAAU,WAChB,MAAM,SAAS,cACf,MAAM,QAAQ,SAAS,uCAAuC,GAC7D;AACD,WAAO;AAAA,EACR;AAEA,MAAI,MAAM,UAAU,WAAW,MAAM,SAAS,cAAc;AAC3D,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAEA,MACC,MAAM,UAAU,WAChB,iCAAiC,MAAM,IAAI,GAC1C;AACD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAIA,MACC,MAAM,UAAU,WAChB,MAAM,SAAS,oBACf,MAAM,YAAY,qBACjB;AACD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAIA,MACC,MAAM,UAAU,WAChB,MAAM,SAAS,cACf,MAAM,YACL,yEACA;AACD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,MAAI,MAAM,UAAU,WAAW,MAAM,SAAS,WAAW;AACxD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,MAAI,MAAM,UAAU,QAAQ,MAAM,SAAS,cAAc;AACxD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,QACC,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,QAAQ;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,iCAAiC,MAAuB;AAChE,SACC,SAAS,yBACT,SAAS,iCACT,SAAS,4BACT,SAAS,4BACT,SAAS,4BACT,SAAS;AAEX;AAEA,SAAS,uBACR,OACoC;AACpC,MAAI,MAAM,QAAQ,SAAS,uCAAuC,GAAG;AACpE,WAAO;AAAA,EACR;AAIA,MAAI,gCAAgC,KAAK,MAAM,OAAO,GAAG;AACxD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,EAAE,QAAQ,KAAK;AAAA,IAChB;AAAA,EACD;AAIA,MACC,MAAM,YAAY,iDAClB,MAAM,YAAY,qBAClB,MAAM,YAAY,uBACjB;AACD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,EAAE,QAAQ,KAAK;AAAA,IAChB;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,+BACf,OACoC;AACpC,aAAW,WAAW,eAAe,KAAK,GAAG;AAC5C,QAAI,mBAAmB,YAAY;AAClC,YAAM,aAAa,mBAAmB,OAAO;AAC7C,UAAI,YAAY;AACf,eAAO;AAAA,MACR;AACA;AAAA,IACD;AAEA,QAAI,mBAAmB,oBAAoB,mBAAmB,OAAO;AACpE,YAAM,aAAa,uBAAuB,OAAO;AACjD,UAAI,YAAY;AACf,eAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,iCAAiC,OAAyB;AAvO1E;AAwOC,WAAO,oCAA+B,KAAK,MAApC,mBAAuC,UAAS;AACxD;AAEO,SAAS,oCAAoC,OAAyB;AAC5E,QAAM,aAAa,+BAA+B,KAAK;AACvD,UACC,yCAAY,UAAS,qBACrB,yCAAY,UAAS;AAEvB;AAEA,SAAS,eAAe,QAAsB;AAC7C,MAAI,iCAAQ,SAAS;AACpB,UAAM,OAAO,UAAU,IAAI,MAAM,mBAAmB;AAAA,EACrD;AACD;AAEA,eAAe,eAAe,IAAY,QAAsB;AAC/D,iBAAe,MAAM;AAErB,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,UAAM,UAAU,WAAW,MAAM;AAChC,cAAQ;AACR,cAAQ;AAAA,IACT,GAAG,EAAE;AAEL,UAAM,UAAU,MAAM;AACrB,mBAAa,OAAO;AACpB,cAAQ;AACR,cAAO,iCAAQ,WAAU,IAAI,MAAM,mBAAmB,CAAC;AAAA,IACxD;AAEA,UAAM,UAAU,MAAM;AACrB,uCAAQ,oBAAoB,SAAS;AAAA,IACtC;AAEA,qCAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK;AAAA,EACzD,CAAC;AACF;AAEA,eAAsB,yBACrB,KACA,MAMa;AACb,QAAM,eAAc,6BAAM,gBAAe;AACzC,QAAM,kBAAiB,6BAAM,mBAAkB;AAC/C,QAAM,cAAa,6BAAM,eAAc;AAEvC,MAAI;AACJ,WAAS,UAAU,GAAG,UAAU,aAAa,WAAW,GAAG;AAC1D,mBAAe,6BAAM,MAAM;AAE3B,QAAI;AACH,aAAO,MAAM,IAAI;AAAA,IAClB,SAAS,OAAO;AACf,UAAI,CAAC,iCAAiC,KAAK,GAAG;AAC7C,cAAM;AAAA,MACP;AAEA,kBAAY;AACZ,UAAI,YAAY,cAAc,GAAG;AAChC;AAAA,MACD;AAEA,YAAM,UAAU,KAAK;AAAA,QACpB,iBAAiB,KAAK;AAAA,QACtB;AAAA,MACD;AACA,YAAM,eAAe,SAAS,6BAAM,MAAM;AAAA,IAC3C;AAAA,EACD;AAEA,QAAM;AACP;;;ACtTA,OAAO,eAAe;AAqCf,SAAS,0BACf,QACgC;AAChC,QAAM,CAAC,UAAU,KAAK,IAAI,OAAO,MAAM,GAAG;AAC1C,QAAM,CAAC,OAAO,IAAI,IAAI,SAAS,MAAM,GAAG;AAExC,MAAI,CAAC,SAAS,CAAC,MAAM;AACpB,WAAO,EAAE,KAAK,EAAE,KAAK,gCAAgC,OAAO,CAAC;AAC7D,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAIO,SAAS,cAAc,SAAmC;AAChE,MAAI,mBAAmB,MAAM;AAC5B,WAAO,QAAQ;AAAA,EAChB;AACA,MAAI,mBAAmB,aAAa;AACnC,WAAO,QAAQ;AAAA,EAChB;AACA,MAAI,mBAAmB,YAAY;AAClC,WAAO,QAAQ;AAAA,EAChB;AACA,MAAI,OAAO,YAAY,UAAU;AAChC,WAAO,QAAQ;AAAA,EAChB;AACA,oBAAkB,OAAO;AAC1B;AAgCA,eAAsB,gBAQrB,MAQoB;AAvHrB;AAwHC,SAAO,EAAE,MAAM;AAAA,IACd,KAAK;AAAA,IACL,KAAK,KAAK;AAAA,IACV,UAAU,KAAK;AAAA,EAChB,CAAC;AAGD,MAAI;AACJ,MAAI;AACJ,MAAI,KAAK,WAAW,UAAU,KAAK,WAAW,OAAO;AACpD,cAAU,KAAK,SAAS,QAAW,cAAc;AACjD,kBAAc,uBAAuB,KAAK,QAAQ;AAClD,eAAW;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAAA,EACD;AAGA,MAAI;AACJ,MAAI;AAEH,eAAW,OAAO,KAAK,eAAe;AAAA,MACrC,IAAI,WAAW,QAAQ,KAAK,KAAK;AAAA,QAChC,QAAQ,KAAK;AAAA,QACb,SAAS;AAAA,UACR,GAAG,KAAK;AAAA,UACR,GAAI,cACD;AAAA,YACA,gBAAgB;AAAA,UACjB,IACC,CAAC;AAAA,UACJ,cAAc,cAAc;AAAA,QAC7B;AAAA,QACA,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ,KAAK;AAAA,MACd,CAAC;AAAA,IACF;AAAA,EACD,SAAS,OAAO;AACf,UAAM,IAAI,iBAAiB,mBAAmB,KAAK,IAAI;AAAA,MACtD,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAGA,MAAI,CAAC,SAAS,IAAI;AACjB,UAAM,iBAAiB,MAAM,SAAS,YAAY;AAClD,UAAMC,eAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,UAAM,QAAQ,SAAS,QAAQ,IAAI,gBAAgB;AAGnD,UAAM,YAAqBA,gBAAA,gBAAAA,aAAa,SAAS,uBAC9C,SACA,KAAK;AAGR,QAAI;AACH,YAAM,eAAe;AAAA,QACpB;AAAA,QACA,IAAI,WAAW,cAAc;AAAA,QAC7B;AAAA,QACA;AAAA;AAAA,QAEA,CAAC,UAAe;AAAA,UACf,GAAG;AAAA,UACH,OAAO,KAAK,QACT;AAAA,YACA,GAAG,KAAK;AAAA,YACR,YAAY,OAAO,KAAK,MAAM,UAAU;AAAA,UACzC,IACC;AAAA,QACJ;AAAA;AAAA,QAEA,CAACC,WAAe;AAAA,UACf,OAAOA,MAAK;AAAA,UACZ,MAAMA,MAAK;AAAA,UACX,SAASA,MAAK;AAAA,UACd,UAAUA,MAAK,WACZ,iBAAiB,IAAI,WAAWA,MAAK,QAAQ,CAAC,IAC9C;AAAA,UACH,OAAOA,MAAK,QACT;AAAA,YACA,SAASA,MAAK,MAAM;AAAA,YACpB,YAAY,OAAOA,MAAK,MAAM,UAAU;AAAA,YACxC,KAAKA,MAAK,MAAM,OAAO;AAAA,UACxB,IACC;AAAA,QACJ;AAAA,MACD;AAEA,aAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL,OAAO,aAAa;AAAA,QACpB,MAAM,aAAa;AAAA,QACnB,SAAS,aAAa;AAAA,QACtB,UAAU,aAAa;AAAA,QACvB,UAAS,kBAAa,UAAb,mBAAoB;AAAA,QAC7B,aAAY,kBAAa,UAAb,mBAAoB;AAAA,QAChC,WAAU,kBAAa,UAAb,mBAAoB;AAAA,MAC/B,CAAC;AAED,YAAM,IAAI;AAAA,QACT,aAAa;AAAA,QACb,aAAa;AAAA,QACb,aAAa;AAAA,QACb;AAAA,UACC,UAAU,aAAa;AAAA,UACvB,OAAO,aAAa;AAAA,QACrB;AAAA,MACD;AAAA,IACD,SAAS,OAAO;AAEf,UAAI,iBAAiB,YAAY;AAChC,cAAM;AAAA,MACP;AAGA,YAAM,eAAe,IAAI,YAAY,SAAS;AAAA,QAC7C,OAAO;AAAA,MACR,CAAC,EAAE,OAAO,cAAc;AAExB,UAAI,OAAO;AACV,cAAM,IAAI;AAAA,UACT,GAAG,SAAS,UAAU,KAAK,SAAS,MAAM,cAAc,KAAK;AAAA,EAAO,YAAY;AAAA,QACjF;AAAA,MACD,OAAO;AACN,cAAM,IAAI;AAAA,UACT,GAAG,SAAS,UAAU,KAAK,SAAS,MAAM;AAAA,EAAO,YAAY;AAAA,QAC9D;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAGA,MAAI,KAAK,mBAAmB;AAC3B,WAAO;AAAA,EACR;AAGA,MAAI;AACH,UAAM,SAAS,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AAC1D,WAAO;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAAA,EACD,SAAS,OAAO;AACf,UAAM,IAAI,iBAAiB,6BAA6B,KAAK,IAAI;AAAA,MAChE,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AACD;;;AChOO,SAAS,kBACf,eACc;AAWd,iBAAe,KACd,MACA,MACA,SACkC;AAClC,UAAM,QAAO,mCAAS,SAAQ;AAC9B,UAAM,UAAU,mCAAS;AAEzB,UAAM,SAAS,MAAM,gBAOnB;AAAA,MACD,KAAK,sBAAsB,mBAAmB,IAAI,CAAC;AAAA,MACnD,QAAQ;AAAA,MACR,SAAS;AAAA,QACR,CAAC,eAAe,GAAG,cAAc;AAAA,QACjC,GAAI,cAAc,WAAW,SAC1B;AAAA,UACA,CAAC,kBAAkB,GAAG,KAAK;AAAA,YAC1B,cAAc;AAAA,UACf;AAAA,QACD,IACC,CAAC;AAAA,MACL;AAAA,MACA,MAAM,EAAE,MAAM,MAAM,QAAQ;AAAA,MAC5B,UAAU,cAAc;AAAA,MACxB,aAAa,cAAc;AAAA,MAC3B,QAAQ,mCAAS;AAAA,MACjB,gBAAgB;AAAA,MAChB,6BAA6B;AAAA,MAC7B,iBAAiB;AAAA,MACjB,8BAA8B;AAAA,MAC9B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,eAAe,CAAC,WAAqC;AAAA,QACpD,GAAG;AAAA,QACH;AAAA,MACD;AAAA,MACA,eAAe,CAAC,WAA0C;AAAA,QACzD,MAAM,MAAM,QAAQ;AAAA,QACpB,MAAM,oBAAoB,iBAAiB,MAAM,IAAI,CAAC;AAAA,QACtD,MAAM,MAAM,QAAQ;AAAA,QACpB,SACC,MAAM,YAAY,SAAY,OAAO,MAAM,OAAO,IAAI;AAAA,MACxD;AAAA,MACA,kBAAkB,CAAC,SAA0B;AAC5C,YAAI,KAAK,aAAa,QAAW;AAChC,iBAAO,EAAE,QAAQ,KAAK,OAAmC;AAAA,QAC1D;AACA,eAAO;AAAA,UACN,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK;AAAA,QAChB;AAAA,MACD;AAAA,MACA,kBAAkB,CAACC,UAA0B;AAC5C,YAAIA,MAAK,aAAa,QAAQA,MAAK,aAAa,QAAW;AAC1D,iBAAO,EAAE,QAAQA,MAAK,OAAmC;AAAA,QAC1D;AACA,eAAO;AAAA,UACN,QAAQA,MAAK;AAAA,UACb,UAAU,iBAAiB,IAAI,WAAWA,MAAK,QAAQ,CAAC;AAAA,QACzD;AAAA,MACD;AAAA,IACD,CAAC;AAED,QAAI,MAAM;AACT,aAAO;AAAA,IACR;AACA;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,EACD;AACD;;;ACrIA,eAAsB,aACrB,QACA,QACA,QACA,OACA,MACA,UAAiC,CAAC,GACd;AAEpB,MAAI;AACJ,MAAI,aAA0B,QAAQ,CAAC;AAEvC,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO;AAAA,EACR,WAAW,iBAAiB,KAAK;AAChC,WAAO,MAAM,WAAW,MAAM;AAAA,EAC/B,WAAW,iBAAiB,SAAS;AAEpC,UAAM,MAAM,IAAI,IAAI,MAAM,GAAG;AAC7B,WAAO,IAAI,WAAW,IAAI;AAE1B,UAAM,iBAAiB,IAAI,QAAQ,MAAM,OAAO;AAChD,UAAM,cAAc,IAAI,SAAQ,6BAAM,YAAW,CAAC,CAAC;AAGnD,UAAM,gBAAgB,IAAI,QAAQ,cAAc;AAChD,gBAAY,QAAQ,CAAC,OAAO,QAAQ;AACnC,oBAAc,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAED,iBAAa;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,MACtB,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,GAAG;AAAA;AAAA,MACH,SAAS;AAAA;AAAA,IACV;AAEA,QAAI,WAAW,MAAM;AACpB,MAAC,WAAmB,SAAS;AAAA,IAC9B;AAAA,EACD,OAAO;AACN,UAAM,IAAI,UAAU,8BAA8B;AAAA,EACnD;AAEA,MAAI;AACH,WAAO,EAAE;AAAA,MACR,cAAc,SACX;AAAA,QACA,KAAK;AAAA,QACL,SAAS,OAAO;AAAA,MACjB,IACC;AAAA,QACA,KAAK;AAAA,QACL,OAAO;AAAA,MACR;AAAA,IACH;AAGA,UAAM,iBAAiB,KAAK,WAAW,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI;AAC9D,UAAM,MAAM,IAAI,IAAI,wBAAwB,cAAc,EAAE;AAG5D,UAAM,sBAAsB,IAAI,QAAQ,WAAW,OAAO;AAC1D,QAAI,QAAQ;AACX,0BAAoB,IAAI,oBAAoB,KAAK,UAAU,MAAM,CAAC;AAAA,IACnE;AAGA,UAAM,eAAe,IAAI,QAAQ,KAAK;AAAA,MACrC,GAAG;AAAA,MACH,SAAS;AAAA,IACV,CAAC;AAED,WAAO,OAAO,YAAY,QAAQ,cAAc,OAAO;AAAA,EACxD,SAAS,KAAK;AAEb,UAAM,EAAE,OAAO,MAAM,SAAS,UAAU,MAAM,IAAI;AAAA,MACjD;AAAA,MACA;AAAA,IACD;AACA,UAAM,IAAI,WAAW,OAAO,MAAM,SAAS,EAAE,UAAU,MAAM,CAAC;AAAA,EAC/D;AACD;AAKA,eAAsB,aACrB,QACA,QACA,QACA,MAEA,YACA,UAAiC,CAAC,GACnB;AAEf,QAAM,WAAW;AAGjB,MAAI,cAAc;AAClB,MAAI,eAAe;AACnB,MAAI,MAAM;AACT,UAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,QAAI,eAAe,IAAI;AACtB,oBAAc,KAAK,UAAU,GAAG,UAAU;AAC1C,qBAAe,KAAK,UAAU,UAAU;AAAA,IACzC,OAAO;AACN,oBAAc;AAAA,IACf;AAEA,QAAI,YAAY,WAAW,GAAG,GAAG;AAChC,oBAAc,YAAY,MAAM,CAAC;AAAA,IAClC;AAAA,EACD;AAEA,QAAM,WAAW,GAAG,qBAAqB,GAAG,WAAW,GAAG,YAAY;AAEtE,SAAO,EAAE,MAAM;AAAA,IACd,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACP,CAAC;AAGD,QAAM,KAAK,MAAM,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAGA,SAAO;AACR;;;AClJA,eAAsB,qBACrB,QACA,QACkB;AAClB,MAAI,cAAc,QAAQ;AACzB,WAAO,OAAO;AAAA,EACf;AAEA,MAAI,cAAc,QAAQ;AACzB,WAAO,OAAO,SAAS;AAAA,EACxB;AAEA,MAAI,eAAe,QAAQ;AAC1B,UAAM,SAAS,MAAM,OAAO,WAAW;AAAA,MACtC,MAAM,OAAO,UAAU;AAAA,MACvB,KAAK,OAAO,UAAU;AAAA,IACvB,CAAC;AACD,QAAI,CAAC,QAAQ;AACZ,YAAM;AAAA,QACL,GAAG,OAAO,UAAU,IAAI,IAAI,KAAK,UAAU,OAAO,UAAU,GAAG,CAAC;AAAA,MACjE;AAAA,IACD;AACA,WAAO,OAAO;AAAA,EACf;AAEA,MAAI,uBAAuB,QAAQ;AAClC,UAAM,SAAS,MAAM,OAAO,mBAAmB;AAAA,MAC9C,MAAM,OAAO,kBAAkB;AAAA,MAC/B,KAAK,OAAO,kBAAkB;AAAA,MAC9B,OAAO,OAAO,kBAAkB;AAAA,MAChC,QAAQ,OAAO,kBAAkB;AAAA,IAClC,CAAC;AACD,WAAO,OAAO;AAAA,EACf;AAEA,MAAI,YAAY,QAAQ;AACvB,UAAM,SAAS,MAAM,OAAO,YAAY;AAAA,MACvC,MAAM,OAAO,OAAO;AAAA,MACpB,KAAK,OAAO,OAAO;AAAA,MACnB,OAAO,OAAO,OAAO;AAAA,MACrB,QAAQ,OAAO,OAAO;AAAA,IACvB,CAAC;AACD,WAAO,OAAO;AAAA,EACf;AAEA,QAAM,eAAe,sBAAsB;AAC5C;;;ACSO,IAAM,iBAAN,MAAqB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB,IAAI,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B,YACN,QACA,QACA,QACA,WACA,UACA,sBACA,iBAAsC,CAAC,GACtC;AACD,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,wBAAwB;AAC7B,SAAK,kBAAkB;AACvB,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACnB;AAAA,EAEA,MAAM,2BAA6C;AAClD,QAAI,KAAK,YAAY;AACpB,aAAO,MAAM,KAAK,WAAW;AAAA,IAC9B;AAEA,WAAO,KAAK;AAAA,EACb;AAAA,EAYA,KACC,MACA,MACA,SACkC;AAClC,WAAO,KAAK,kBAAkB,MAAM,MAAM,OAAc;AAAA,EACzD;AAAA,EAEA,MAAM,kBACL,MACA,MACA,SACkC;AAClC,WAAO,MAAM,KAAK,gBAAgB,IAAI,YAAY;AACjD,YAAM,cAAc,KAAK,4BAA4B;AACrD,UAAI,iBAAiB;AAErB,eAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACvD,YAAI;AACJ,YAAI;AACH,gBAAM,iBAAiB;AAAA,YACtB,KAAK;AAAA,UACN;AACA,gBAAM,SAAS,MAAM,KAAK;AAAA,YACzB;AAAA,YACA;AAAA,UACD;AACA,oBAAU,cAAc,SAAS,OAAO,WAAW;AAEnD,iBAAO,MAAM,kBAAkB;AAAA,YAC9B,UAAU,KAAK;AAAA,YACf,QAAQ,KAAK;AAAA,YACb,aAAa,OAAO,YAAqB;AACxC,qBAAO,MAAM,KAAK,QAAQ;AAAA,gBACzB;AAAA,gBACA;AAAA,gBACA;AAAA,cACD;AAAA,YACD;AAAA,UACD,CAAC,EAAE,KAAK,MAAM,MAAM,OAAc;AAAA,QACnC,SAAS,KAAK;AACb,gBAAM,EAAE,OAAO,MAAM,SAAS,UAAU,MAAM,IAAI;AAAA,YACjD;AAAA,YACA;AAAA,UACD;AAEA,cACC,KAAK;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,GACC;AACD,kBAAM,KAAK,oBAAoB;AAC/B;AAAA,UACD;AAEA,cACC,MAAM,KAAK;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,GACC;AACD,6BAAiB;AACjB,kBAAM,KAAK,oBAAoB;AAC/B;AAAA,UACD;AAEA,cACC,KAAK;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,GACC;AACD,iBAAK,sBAAsB;AAC3B,6BAAiB;AACjB,kBAAM,KAAK,oBAAoB;AAC/B;AAAA,UACD;AAEA,gBAAM,cAAc,KAAK,2BAA2B,OAAO,IAAI;AAC/D,cAAI,eAAe,UAAU,cAAc,GAAG;AAC7C,6BACE,SAAS,cACT,SAAS,cACT,KAAK,WAAW,YAAY;AAC9B,gBAAI,gBAAgB;AACnB,oBAAM,KAAK,oBAAoB;AAAA,YAChC;AACA;AAAA,UACD;AAEA,gBAAM,IAAI,WAAW,OAAO,MAAM,SAAS,EAAE,UAAU,MAAM,CAAC;AAAA,QAC/D;AAAA,MACD;AAEA,YAAM,IAAI,MAAM,+BAA+B;AAAA,IAChD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAGJ,MAGyC;AAC1C,QACC,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,SAAS,QACT,EAAE,UAAU,OACX;AACD,YAAM,IAAI;AAAA,QACT,uEAAuE,OAAO,IAAI;AAAA,MACnF;AAAA,IACD;AACA,UAAM,MAAM,YAAa,MAAM,KAAK,eAAe,IAAI;AACvD,QAAI,KAAK,SAAS,WAAW;AAC5B,aAAO,MAAM,IAAI;AAAA,IAClB;AAEA,WAAO,MAAM,yBAAyB,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,eAAe,MAGqB;AACzC,UAAM,cAAc,KAAK,4BAA4B;AACrD,QAAI,iBAAiB;AACrB,UAAM,iBAAiB;AAAA,MACtB,KAAK;AAAA,MACL;AAAA,IACD;AAEA,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACvD,UAAI;AACJ,UAAI;AACH,cAAM,SAAS,MAAM,KAAK;AAAA,UACzB;AAAA,UACA;AAAA,QACD;AACA,kBAAU,cAAc,SAAS,OAAO,WAAW;AAEnD,eAAO,EAAE;AAAA,UACR,UACG,EAAE,KAAK,qCAAqC,QAAQ,IACpD;AAAA,YACA,KAAK;AAAA,YACL,OAAO,KAAK;AAAA,UACb;AAAA,QACH;AAEA,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,QAChB,CAAC;AACD,cAAM,SAAS,MAAM,gBAOnB;AAAA,UACD,KAAK,uBAAuB,mBAAmB,KAAK,IAAI,CAAC;AAAA,UACzD,QAAQ;AAAA,UACR,SAAS;AAAA,YACR,CAAC,eAAe,GAAG,KAAK;AAAA,YACxB,GAAI,KAAK,YAAY,SAClB;AAAA,cACA,CAAC,kBAAkB,GAAG,KAAK;AAAA,gBAC1B,KAAK;AAAA,cACN;AAAA,YACD,IACC,CAAC;AAAA,UACL;AAAA,UACA,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,UACf,aAAa,OAAO,YACnB,MAAM,KAAK,QAAQ;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,UACD,QAAQ,6BAAM;AAAA,UACd,gBAAgB;AAAA,UAChB,6BAA6B;AAAA,UAC7B,iBAAiB;AAAA,UACjB,8BAA8B;AAAA,UAC9B,kBAAkB;AAAA,UAClB,mBAAmB;AAAA,UACnB,eAAe,CAAC,UAAiC;AAAA,YAChD;AAAA,UACD;AAAA,UACA,eAAe,CAAC,UAAsC;AAAA,YACrD,MAAM,oBAAoB,iBAAiB,IAAI,CAAC;AAAA,UACjD;AAAA,UACA,kBAAkB,CAAC,SAAmB,KAAK;AAAA,UAC3C,kBAAkB,CAACC,UAClB,iBAAiB,IAAI,WAAWA,MAAK,MAAM,CAAC;AAAA,QAC9C,CAAC;AACD,YAAI,KAAK,SAAS,aAAa,SAAS;AACvC,gBAAM,KAAK,8BAA8B,OAAO;AAAA,QACjD;AACA,eAAO;AAAA,MACR,SAAS,KAAK;AACb,cAAM,EAAE,OAAO,MAAM,SAAS,UAAU,MAAM,IAAI;AAAA,UACjD;AAAA,UACA;AAAA,QACD;AAEA,YACC,MAAM,KAAK;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,GACC;AACD,2BAAiB;AACjB,gBAAM,KAAK,oBAAoB;AAC/B;AAAA,QACD;AAEA,YACC,KAAK,SAAS,aACd,KAAK;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,GACC;AACD,eAAK,sBAAsB;AAC3B,2BAAiB;AACjB,gBAAM,KAAK,oBAAoB;AAC/B;AAAA,QACD;AAEA,YACC,UAAU,WACV,SAAS,uCACT,cAAc,KAAK,uBAClB;AACD,gBAAM,IAAI;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,EAAE,UAAU,MAAM;AAAA,UACnB;AAAA,QACD;AAEA,cAAM,cAAc,KAAK,2BAA2B,OAAO,IAAI;AAC/D,YAAI,eAAe,UAAU,cAAc,GAAG;AAC7C,cACC,UAAU,YACT,SAAS,cAAc,SAAS,aAChC;AACD,6BAAiB;AACjB,kBAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,UACxD;AACA;AAAA,QACD;AAEA,cAAM,IAAI,WAAW,OAAO,MAAM,SAAS,EAAE,UAAU,MAAM,CAAC;AAAA,MAC/D;AAAA,IACD;AAEA,UAAM,IAAI,MAAM,gCAAgC;AAAA,EACjD;AAAA,EAEA,MAAM,8BAA8B,SAAgC;AACnE,UAAM,OAAO,sBAAsB,KAAK,qBAAqB;AAC7D,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,WAAO,KAAK,IAAI,IAAI,UAAU;AAC7B,YAAM,QAAQ,MAAM,KAAK,QAAQ,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3D,UAAI,CAAC,OAAO;AACX;AAAA,MACD;AACA,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,IACvD;AAAA,EACD;AAAA,EAEA,MAAM,sBAAqC;AAC1C,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,EACxD;AAAA,EAEA,8BAAsC;AACrC,QAAI,CAAC,oBAAoB,KAAK,qBAAqB,GAAG;AACrD,aAAO;AAAA,IACR;AAEA,WAAO,uBAAuB,KAAK,wBAAwB,KAAK;AAAA,EACjE;AAAA,EAEA,kCACC,OACA,MACA,SACA,aACU;AACV,QACC,CAAC,oBAAoB,KAAK,qBAAqB,KAC/C,WAAW,cAAc,KACzB,UAAU,SACT;AACD,aAAO;AAAA,IACR;AAEA,WACC,SAAS,eACT,SAAS,cACT,SAAS,cACT,SAAS,oBACT,SAAS,mBACT,SAAS,gBACT,KAAK,WAAW,YAAY;AAAA,EAE9B;AAAA,EAEA,kCACC,OACA,MACA,UACA,SACA,aACU;AACV,QACC,CAAC,oBAAoB,KAAK,qBAAqB,KAC/C,WAAW,cAAc,KACzB,UAAU,WACV,SAAS,gBACT,aAAa,QACb,OAAO,aAAa,UACnB;AACD,aAAO;AAAA,IACR;AAEA,UAAM,WAAW;AAIjB,WACC,SAAS,YAAY,oBACrB,SAAS,cAAc;AAAA,EAEzB;AAAA,EAEA,wBAA8B;AAC7B,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAAA,EAC1B;AAAA,EAEA,MAAM,4BACL,OACA,MACA,SACA,SACA,aACmB;AACnB,QACC,CAAC,oBAAoB,KAAK,qBAAqB,KAC/C,CAAC,kBAAkB,OAAO,IAAI,KAC9B,WAAW,cAAc,GACxB;AACD,aAAO;AAAA,IACR;AAEA,QAAI,SAAS;AACZ,YAAM,kBAAkB,MAAM;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AACA,UAAI,iBAAiB;AACpB,cAAM;AAAA,MACP;AAAA,IACD;AAEA,SAAK,sBAAsB;AAC3B,WAAO;AAAA,EACR;AAAA,EAEA,2BAA2B,OAAe,MAAuB;AAChE,QACC,CAAC,oBAAoB,KAAK,qBAAqB,KAC/C,CAAC,0BAA0B,OAAO,IAAI,GACrC;AACD,aAAO;AAAA,IACR;AAEA,SAAK,sBAAsB;AAC3B,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,qBAAqB,gBAAyB;AACnD,QAAI,cAAc,KAAK,uBAAuB;AAC7C,aAAO,iBAAiB,KAAK,qBAAqB;AAAA,IACnD;AAEA,QAAI,gBAAgB;AACnB,aAAO,iBAAiB,KAAK,qBAAqB;AAAA,IACnD;AAEA,QAAI,KAAK,kBAAkB;AAC1B,aAAO,EAAE,UAAU,KAAK,iBAAiB;AAAA,IAC1C;AAEA,QAAI,CAAC,KAAK,mBAAmB;AAC5B,WAAK,oBAAoB;AAAA,QACxB,KAAK;AAAA,QACL,KAAK;AAAA,MACN,EAAE,KAAK,CAAC,YAAY;AACnB,aAAK,mBAAmB;AACxB,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAEA,QAAI;AACH,aAAO,EAAE,UAAU,MAAM,KAAK,kBAAkB;AAAA,IACjD,UAAE;AACD,WAAK,oBAAoB;AAAA,IAC1B;AAAA,EACD;AAAA,EAEA,MAAM,6BACL,gBACA,gBACC;AACD,QAAI,eAAe,eAAe;AACjC,aAAO,iBAAiB,KAAK,qBAAqB;AAAA,IACnD;AAEA,WAAO,MAAM,KAAK,qBAAqB,cAAc;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QACC,QACA,UAA+B,CAAC,GACA;AAChC,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,OAAO,KAAK;AAAA,IACb,CAAC;AAED,UAAM,aAAa,WAAW,SAAY,KAAK,UAAU;AACzD,UAAM,YAAY,WAAW,SAAY,KAAK,aAAa;AAE3D,UAAM,OAAO,IAAI;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,2BAA2B,KAAK,iBAAiB,OAAO;AAAA,IACzD;AAEA,WAAO,KAAK,QAAQ,uBAAuB;AAAA,MAC1C;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAA+B,MAAuB;AAC3D,WAAO,KAAK,wBAAwB,OAAO,IAAI;AAAA,EAChD;AAAA,EAEA,MAAM,wBACL,OACA,MACC;AACD,UAAM,cAAc,KAAK,4BAA4B;AACrD,QAAI,iBAAiB;AACrB,UAAM,EAAE,eAAe,GAAG,YAAY,IAAI,QAAQ,CAAC;AACnD,UAAM,iBAAiB;AAAA,MACtB,KAAK;AAAA,MACL;AAAA,QACC;AAAA,MACD;AAAA,IACD;AAEA,aAAS,UAAU,GAAG,UAAU,aAAa,WAAW;AACvD,UAAI;AACJ,UAAI;AACH,cAAM,SAAS,MAAM,KAAK;AAAA,UACzB;AAAA,UACA;AAAA,QACD;AACA,kBAAU,cAAc,SAAS,OAAO,WAAW;AACnD,cAAM,WAAW,MAAM;AAAA,UACtB,KAAK;AAAA,UACL;AAAA,UACA,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACD;AACA,cAAM,QAAQ,MAAM,KAAK;AAAA,UACxB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AACA,YAAI,OAAO;AACV,2BAAiB,MAAM;AACvB,cAAI,MAAM,oBAAoB;AAC7B,kBAAM,KAAK,oBAAoB;AAAA,UAChC;AACA;AAAA,QACD;AACA,eAAO;AAAA,MACR,SAAS,KAAK;AACb,cAAM,EAAE,OAAO,MAAM,SAAS,UAAU,MAAM,IAAI;AAAA,UACjD;AAAA,UACA;AAAA,QACD;AAEA,YACC,MAAM,KAAK;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,GACC;AACD,2BAAiB;AACjB,gBAAM,KAAK,oBAAoB;AAC/B;AAAA,QACD;AAEA,YACC,KAAK;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,GACC;AACD,eAAK,sBAAsB;AAC3B,2BAAiB;AACjB,gBAAM,KAAK,oBAAoB;AAC/B;AAAA,QACD;AAEA,cAAM,cAAc,KAAK,2BAA2B,OAAO,IAAI;AAC/D,YAAI,eAAe,UAAU,cAAc,GAAG;AAC7C,2BACE,SAAS,cACT,SAAS,cACT,KAAK,WAAW,YAAY;AAC9B,cAAI,gBAAgB;AACnB,kBAAM,KAAK,oBAAoB;AAAA,UAChC;AACA;AAAA,QACD;AAEA,cAAM,IAAI,WAAW,OAAO,MAAM,SAAS,EAAE,UAAU,MAAM,CAAC;AAAA,MAC/D;AAAA,IACD;AAEA,UAAM,IAAI,MAAM,+BAA+B;AAAA,EAChD;AAAA,EAEA,MAAM,6BACL,UACA,SACA,SACA,aAOC;AACD,QAAI,SAAS,MAAM,CAAC,oBAAoB,KAAK,qBAAqB,GAAG;AACpE,aAAO;AAAA,IACR;AAEA,UAAM,QAAQ,MAAM,KAAK,4BAA4B,QAAQ;AAC7D,QAAI,CAAC,OAAO;AACX,aAAO;AAAA,IACR;AAEA,UAAM,EAAE,OAAO,KAAK,IAAI;AAExB,QACC,MAAM,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,GACC;AACD,aAAO;AAAA,QACN,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACrB;AAAA,IACD;AAEA,QACC,KAAK;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,GACC;AACD,WAAK,sBAAsB;AAC3B,aAAO;AAAA,QACN,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACrB;AAAA,IACD;AAEA,UAAM,cAAc,KAAK,2BAA2B,OAAO,IAAI;AAC/D,QAAI,eAAe,UAAU,cAAc,GAAG;AAC7C,YAAM,iBACL,SAAS,cACT,SAAS,cACT,KAAK,WAAW,YAAY;AAC7B,aAAO;AAAA,QACN;AAAA,QACA,oBAAoB;AAAA,MACrB;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,4BAA4B,UAMxB;AACT,QAAI,SAAS,IAAI;AAChB,aAAO;AAAA,IACR;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,UAAM,YAAqB,2CAAa,SAAS,uBAC9C,SACA,KAAK;AAER,QAAI;AACH,aAAO;AAAA,QAWN;AAAA,QACA,IAAI,WAAW,MAAM,SAAS,MAAM,EAAE,YAAY,CAAC;AAAA,QACnD;AAAA,QACA;AAAA,QACA,CAAC,UAAU;AAAA,UACV,GAAG;AAAA,UACH,OAAO,KAAK,QACT;AAAA,YACA,GAAG,KAAK;AAAA,YACR,YAAY,OAAO,KAAK,MAAM,UAAU;AAAA,UACzC,IACC;AAAA,QACJ;AAAA,QACA,CAACA,WAAU;AAAA,UACV,OAAOA,MAAK;AAAA,UACZ,MAAMA,MAAK;AAAA,UACX,SAASA,MAAK;AAAA,UACd,UAAUA,MAAK,WACZ,iBAAiB,IAAI,WAAWA,MAAK,QAAQ,CAAC,IAC9C;AAAA,UACH,OAAOA,MAAK,QACT;AAAA,YACA,SAASA,MAAK,MAAM;AAAA,YACpB,YAAY,OAAOA,MAAK,MAAM,UAAU;AAAA,YACxC,KAAKA,MAAK,MAAM,OAAO;AAAA,UACxB,IACC;AAAA,QACJ;AAAA,MACD;AAAA,IACD,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UACL,MACA,WACA,UAAiC,CAAC,GACjC;AACD,UAAM,SAAS,MAAM,KAAK,yBAAyB;AACnD,UAAM,iBAAiB;AAAA,MACtB,KAAK;AAAA,MACL;AAAA,IACD;AACA,UAAM,SAAS,MAAM,KAAK;AAAA,MACzB;AAAA,MACA;AAAA,IACD;AACA,WAAO,MAAM;AAAA,MACZ,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAA2B;AAChC,QAAI,cAAc,KAAK,uBAAuB;AAC7C,aAAO,KAAK,sBAAsB,SAAS;AAAA,IAC5C;AAEA,UAAM,SAAS,MAAM,KAAK,qBAAqB,KAAK;AACpD,QAAI,cAAc,QAAQ;AACzB,aAAO,OAAO;AAAA,IACf;AAEA,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAiC;AACtC,WAAO,MAAM,KAAK,QAAQ;AAAA,MACzB,iBAAiB,KAAK,qBAAqB;AAAA,MAC3C,KAAK;AAAA,IACN;AAAA,EACD;AAAA,EAEA,MAAM,SAAwB;AAC7B,UAAM,SAAS,iBAAiB,KAAK,qBAAqB;AAC1D,UAAM,UAAU,IAAI,QAAQ,+BAA+B;AAAA,MAC1D,QAAQ;AAAA,IACT,CAAC;AACD,UAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,QAAQ,OAAO;AAC/D,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACjD,YAAM,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA,6BAA6B,SAAS,MAAM,KAAK,IAAI;AAAA,QACrD,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;;AC/uBO,IAAM,qBAAqB,uBAAO,YAAY;AAC9C,IAAM,0BAA0B,uBAAO,sBAAsB;AAQ7D,IAAM,YAAN,MAAgB;AAAA,EACtB,YAAY;AAAA,EAEZ,CAAC,kBAAkB,IAAI,oBAAI,IAAkB;AAAA,EAE7C;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKO,YACN,QACA,UACA,iBAAsC,CAAC,GACtC;AACD,SAAK,UAAU;AAEf,SAAK,gBAAgB,YAAY;AACjC,SAAK,kBAAkB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SACC,MACA,SACA,MACkB;AAClB,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,6BAAM;AAAA,IACf,CAAC;AAED,UAAM,aAAyB;AAAA,MAC9B,UAAU;AAAA,QACT;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAEA,UAAM,SAAS,KAAK;AAAA,MACnB,6BAAM;AAAA,MACN,6BAAM;AAAA,MACN;AAAA,IACD;AACA,WAAO,iBAAiB,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IACC,MACA,KACA,MACkB;AAElB,UAAM,WAAqB,OAAO,QAAQ,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC;AAErE,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,YAAY,6BAAM;AAAA,IACnB,CAAC;AAED,UAAM,aAAyB;AAAA,MAC9B,WAAW;AAAA,QACV;AAAA,QACA,KAAK;AAAA,MACN;AAAA,IACD;AAEA,UAAM,SAAS,KAAK;AAAA,MACnB,6BAAM;AAAA,MACN,6BAAM;AAAA,MACN;AAAA,IACD;AACA,WAAO,iBAAiB,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,YACC,MACA,KACA,MACkB;AAElB,UAAM,WAAqB,OAAO,QAAQ,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC;AAErE,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,YAAY,6BAAM;AAAA,MAClB,gBAAgB,6BAAM;AAAA,IACvB,CAAC;AAED,UAAM,aAAyB;AAAA,MAC9B,mBAAmB;AAAA,QAClB;AAAA,QACA,KAAK;AAAA,QACL,OAAO,6BAAM;AAAA,QACb,QAAQ,6BAAM;AAAA,MACf;AAAA,IACD;AAEA,UAAM,SAAS,KAAK;AAAA,MACnB,6BAAM;AAAA,MACN,6BAAM;AAAA,MACN;AAAA,IACD;AACA,WAAO,iBAAiB,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,OACL,MACA,KACA,MAC2B;AAE3B,UAAM,WAAqB,OAAO,QAAQ,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC;AAErE,UAAM,cAAc;AAAA,MACnB,QAAQ;AAAA,QACP,GAAG;AAAA;AAAA,QAEH;AAAA,QACA,KAAK;AAAA,MACN;AAAA,IACD;AAEA,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,YAAY,6BAAM;AAAA,MAClB,QAAQ,YAAY;AAAA,IACrB,CAAC;AAGD,UAAM,UAAU,MAAM,qBAAqB,KAAK,SAAS,WAAW;AACpE,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACD,CAAC;AAGD,UAAM,gBAAgB;AAAA,MACrB,UAAU;AAAA,QACT;AAAA,QACA;AAAA,MACD;AAAA,IACD;AACA,UAAM,SAAS,KAAK;AAAA,MACnB,6BAAM;AAAA,MACN,6BAAM;AAAA,MACN;AAAA,IACD;AAEA,UAAM,QAAQ,iBAAiB,MAAM;AAErC,WAAO;AAAA,EACR;AAAA,EAEA,cACC,QACA,WACA,YACiB;AACjB,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA,EAEA,CAAC,uBAAuB,EACvB,MACgB;AAEhB,SAAK,kBAAkB,EAAE,IAAI,IAAI;AAGjC,SAAK,cAAc,EAAE;AAErB,WAAO,iBAAiB,IAAI;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAyB;AAC9B,QAAI,KAAK,WAAW;AACnB,aAAO,EAAE,KAAK,EAAE,KAAK,8BAA8B,CAAC;AACpD;AAAA,IACD;AACA,SAAK,YAAY;AAEjB,WAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,CAAC;AAE1C,UAAM,kBAAkB,CAAC;AAGzB,eAAW,QAAQ,KAAK,kBAAkB,EAAE,OAAO,GAAG;AACrD,sBAAgB,KAAK,KAAK,QAAQ,CAAC;AAAA,IACpC;AAEA,UAAM,QAAQ,IAAI,eAAe;AAAA,EAClC;AACD;AAgBO,SAAS,uBACf,QACA,SAAiE,CAAC,GACtD;AACZ,QAAM,SAAS,IAAI,UAAU,QAAQ,OAAO,UAAU,OAAO,OAAO;AAGpE,SAAO,IAAI,MAAM,QAAQ;AAAA,IACxB,KAAK,CAAC,QAAmB,MAAuB,aAAsB;AAErE,UAAI,OAAO,SAAS,YAAY,QAAQ,QAAQ;AAC/C,cAAM,QAAQ,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAEhD,YAAI,OAAO,UAAU,YAAY;AAChC,iBAAO,MAAM,KAAK,MAAM;AAAA,QACzB;AACA,eAAO;AAAA,MACR;AAGA,UAAI,OAAO,SAAS,UAAU;AAE7B,eAAO;AAAA;AAAA,UAEN,KAAK,CACJ,KACA,SAGI;AACJ,mBAAO,OAAO,IAEZ,MAAM,KAAK,IAAI;AAAA,UAClB;AAAA,UACA,aAAa,CACZ,KACA,SAGI;AACJ,mBAAO,OAAO,YAEZ,MAAM,KAAK,IAAI;AAAA,UAClB;AAAA,UACA,UAAU,CACT,SACA,SAGI;AACJ,mBAAO,OAAO,SAEZ,MAAM,SAAS,IAAI;AAAA,UACtB;AAAA,UACA,QAAQ,OACP,KACA,OAAsB,CAAC,MAGnB;AACJ,mBAAO,MAAM,OAAO,OAElB,MAAM,KAAK,IAAI;AAAA,UAClB;AAAA,QACD;AAAA,MACD;AAEA,aAAO;AAAA,IACR;AAAA,EACD,CAAC;AACF;AAKA,SAAS,iBACR,QACkC;AAElC,QAAM,cAAc,oBAAI,IAAiC;AACzD,SAAO,IAAI,MAAM,QAAQ;AAAA,IACxB,IAAI,QAAwB,MAAuB,UAAmB;AAErE,UAAI,OAAO,SAAS,UAAU;AAC7B,eAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,MAC1C;AAGA,UAAI,SAAS,iBAAiB,QAAQ,QAAQ;AAC7C,cAAM,QAAQ,QAAQ,IAAI,QAAQ,MAAM,MAAM;AAE9C,YAAI,OAAO,UAAU,YAAY;AAChC,iBAAO,MAAM,KAAK,MAAM;AAAA,QACzB;AACA,eAAO;AAAA,MACR;AAGA,UAAI,OAAO,SAAS,UAAU;AAE7B,YAAI,SAAS,OAAQ,QAAO;AAE5B,YAAI,SAAS,YAAY,IAAI,IAAI;AACjC,YAAI,CAAC,QAAQ;AACZ,mBAAS,IAAI,SACZ,OAAO,OAAO,EAAE,MAAM,MAAM,KAAK,CAAC;AACnC,sBAAY,IAAI,MAAM,MAAM;AAAA,QAC7B;AACA,eAAO;AAAA,MACR;AAAA,IACD;AAAA;AAAA,IAGA,IAAI,QAAwB,MAAuB;AAElD,UAAI,OAAO,SAAS,SAAU,QAAO;AAErC,aAAO,QAAQ,IAAI,QAAQ,IAAI;AAAA,IAChC;AAAA;AAAA,IAGA,eAAe,QAAwB;AACtC,aAAO,QAAQ,eAAe,MAAM;AAAA,IACrC;AAAA;AAAA,IAGA,QAAQ,QAAwB;AAC/B,aAAO,QAAQ,QAAQ,MAAM;AAAA,IAC9B;AAAA;AAAA,IAGA,yBACC,QACA,MACC;AACD,YAAM,mBAAmB,QAAQ;AAAA,QAChC;AAAA,QACA;AAAA,MACD;AACA,UAAI,kBAAkB;AACrB,eAAO;AAAA,MACR;AACA,UAAI,OAAO,SAAS,UAAU;AAE7B,eAAO;AAAA,UACN,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAO,IAAI,SACV,OAAO,OAAO,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,QACpC;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAAA,EACD,CAAC;AACF;;;AftfA,IAAM,oCAAoC;AAmCnC,IAAM,iBAAiB,uBAAO,SAAS;AAOvC,IAAM,eAAN,MAAmB;AAAA,EACzB,YAAY;AAAA;AAAA,EAGZ,mBAAmB,IAAI,gBAAgB;AAAA,EAEvC,cAA+B;AAAA,EAE/B;AAAA,EACA;AAAA,EAEA,gBAUK,CAAC;AAAA,EACN,mBAAmB,oBAAI,IAA4B;AAAA,EAEnD,sBAAsB,oBAAI,IAA4C;AAAA,EAEtE,iBAAiB,oBAAI,IAAwB;AAAA,EAC7C,gBAAgB,oBAAI,IAA6B;AAAA,EACjD,iBAAiB;AAAA,EACjB,iBAAiB,oBAAI,IAA6B;AAAA,EAClD,wBAAwB,oBAAI,IAA0B;AAAA,EAEtD,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA,EAGA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,YACN,QACA,QACA,QACA,WACA,UACA,sBACA,iBAAsC,CAAC,GACtC;AACD,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,wBAAwB;AAC7B,SAAK,kBAAkB,2BAA2B,cAAc;AAChE,QAAI,cAAc,sBAAsB;AACvC,WAAK,WAAW,qBAAqB,SAAS;AAAA,IAC/C;AACA,SAAK,gBAAgB;AAAA,MAAqB,CAAC,WAC1C,OAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL;AAAA,MACD,CAAC;AAAA,IACF;AAGA,SAAK,eAAe,kBAAkB;AAAA,MACrC,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,aAAa,OAAO,YAAqB;AACxC,eAAO,MAAM,KAAK,QAAQ;AAAA,UACzB,iBAAiB,KAAK,qBAAqB;AAAA,UAC3C;AAAA,UACA,KAAK;AAAA,QACN;AAAA,MACD;AAAA,IACD,CAAC;AAED,SAAK,yBAAyB,YAAY,MAAM,GAAM;AAAA,EACvD;AAAA,EAEA,8BAA8B;AAC7B,SAAK,WAAW;AAChB,SAAK,UAAU;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,wBAAwB,OAAe,MAAuB;AAC7D,QACC,CAAC,oBAAoB,KAAK,qBAAqB,KAC/C,CAAC,0BAA0B,OAAO,IAAI,GACrC;AACD,aAAO;AAAA,IACR;AAEA,SAAK,4BAA4B;AACjC,WAAO;AAAA,EACR;AAAA,EAEA,8BAA8B,OAAe,MAAuB;AACnE,WACC,oBAAoB,KAAK,qBAAqB,KAC9C,0BAA0B,OAAO,IAAI,KACrC,KAAK,mBAAmB,UACxB,KAAK,gBAAgB;AAAA,EAEvB;AAAA,EAYA,KACC,MACA,MACA,SACkC;AAClC,WAAO,KAAK,kBAAkB,MAAM,MAAM,OAAc;AAAA,EACzD;AAAA,EAEA,MAAM,kBACL,MACA,MACA,SACkC;AAClC,WAAO,MAAM,KAAK,aAAa,KAAK,MAAM,MAAM,OAAc;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,OAGJ,MAIoB;AACrB,QACC,OAAO,SAAS,YAChB,OAAO,SAAS,YAChB,SAAS,QACT,EAAE,UAAU,OACX;AACD,YAAM,IAAI;AAAA,QACT,uEAAuE,OAAO,IAAI;AAAA,MACnF;AAAA,IACD;AACA,WAAO,EAAE,MAAM,EAAE,KAAK,UAAU,MAAM,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC;AAGlE,UAAM,WAAW,KAAK;AACtB,SAAK,oBAAoB;AAEzB,UAAM,EAAE,SAAS,SAAS,OAAO,IAAI;AAAA,MAGlC,CAAC,WACH,OAAO,EAAE,KAAK;AAAA,QACb,KAAK;AAAA,QACL;AAAA,MACD,CAAC;AAAA,IACF;AACA,SAAK,iBAAiB,IAAI,UAAU;AAAA,MACnC,MAAM,KAAK;AAAA,MACX;AAAA,MACA;AAAA,IACD,CAAC;AACD,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK,iBAAiB;AAAA,IACtC,CAAC;AAED,SAAK,aAAa;AAAA,MACjB,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,UACJ,IAAI,OAAO,QAAQ;AAAA,UACnB,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,QACZ;AAAA,MACD;AAAA,IACD,CAAC;AAID,UAAM,EAAE,IAAI,YAAY,OAAO,IAAI,MAAM;AACzC,QAAI,eAAe,OAAO,QAAQ;AACjC,YAAM,IAAI;AAAA,QACT,cAAc,QAAQ,+BAA+B,UAAU;AAAA,MAChE;AAED,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAQ,cAAc,IAAI;AACzB,SAAK,kBAAkB;AAAA,EACxB;AAAA,EAEA,eAAe,QAAyB;AACvC,UAAM,aAAa,KAAK;AACxB,QAAI,eAAe,OAAQ;AAC3B,SAAK,cAAc;AAGnB,eAAW,WAAW,CAAC,GAAG,KAAK,qBAAqB,GAAG;AACtD,UAAI;AACH,gBAAQ,MAAM;AAAA,MACf,SAAS,KAAK;AACb,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD;AAGA,QAAI,WAAW,aAAa;AAC3B,WAAK,cAAc,QAAQ,MAAS;AACpC,iBAAW,WAAW,CAAC,GAAG,KAAK,aAAa,GAAG;AAC9C,YAAI;AACH,kBAAQ;AAAA,QACT,SAAS,KAAK;AACb,iBAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,OAAO,eAAe,GAAG;AAAA,UAC1B,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAGA,SACE,WAAW,kBAAkB,WAAW,WACzC,eAAe,aACd;AACD,iBAAW,WAAW,CAAC,GAAG,KAAK,cAAc,GAAG;AAC/C,YAAI;AACH,kBAAQ;AAAA,QACT,SAAS,KAAK;AACb,iBAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,OAAO,eAAe,GAAG;AAAA,UAC1B,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,oBAAoB;AACnB,SAAK,eAAe,YAAY;AAIhC,WAAO,KAAK,gBAAgB,KAAK,IAAI,GAAG;AAAA,MACvC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ,iBAAiB,CAAC,UAAU;AAC3B,eAAO,EAAE,KAAK;AAAA,UACb,KAAK;AAAA,UACL,SAAS,MAAM;AAAA,UACf,OAAO,eAAe,KAAK;AAAA,QAC5B,CAAC;AAAA,MACF;AAAA;AAAA,MAGA,QAAQ,KAAK,iBAAiB;AAAA,IAC/B,CAAC,EAAE,MAAM,CAAC,QAAQ;AACjB,UACC,eAAe,cACd,IAAc,SAAS,gBACxB,CAAC,KAAK,gCAAgC,GAAG,GACxC;AACD,eAAO,EAAE,KAAK,EAAE,KAAK,2BAA2B,CAAC;AAAA,MAClD,OAAO;AACN,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB;AACvB,QAAI;AAEH,UAAI,KAAK;AACR,cAAM,IAAI,MAAM,gCAAgC;AACjD,WAAK,iBAAiB;AAAA,QAAqB,CAAC,WAC3C,OAAO,EAAE,KAAK;AAAA,UACb,KAAK;AAAA,UACL;AAAA,QACD,CAAC;AAAA,MACF;AAEA,YAAM,KAAK,kBAAkB;AAG7B,YAAM,KAAK,eAAe;AAAA,IAC3B,SAAS,OAAO;AACf,UAAI,KAAK,gCAAgC,KAAK,GAAG;AAChD,cAAM;AAAA,MACP;AAEA,YAAM,aACL,iBAAwB,aACrB,QACA,IAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA,8BAA8B,eAAe,KAAK,CAAC;AAAA,QACnD,EAAE,OAAO,eAAe,KAAK,EAAE;AAAA,MAChC;AAEH,WAAK,qBAAqB;AAC1B,WAAK,uBAAuB,YAAY,KAAK;AAC7C,WAAK,oBAAoB,UAAU;AACnC,WAAK,eAAe,MAAM;AAE1B,YAAM,IAAI;AAAA,QACT,iBAAiB,QACd,QACA,IAAI,MAAM,eAAe,KAAK,CAAC;AAAA,MACnC;AAAA,IACD,UAAE;AACD,WAAK,iBAAiB;AAAA,IACvB;AAAA,EACD;AAAA,EAEA,gCAAgC,OAAyB;AACxD,QAAI,iBAAwB,mBAAmB;AAC9C,aAAO;AAAA,IACR;AAEA,QACC,iBAAwB,cACxB,KAAK,8BAA8B,MAAM,OAAO,MAAM,IAAI,GACzD;AACD,aAAO;AAAA,IACR;AAEA,QACC,iBAAwB,cACxB,MAAM,UAAU,YAChB,MAAM,SAAS,qBACd;AACD,aAAO;AAAA,IACR;AAEA,WAAO,oCAAoC,KAAK;AAAA,EACjD;AAAA,EAEA,uBAAuB;AACtB,QAAI,KAAK,cAAc,WAAW,EAAG;AAErC,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,aAAa,KAAK,cAAc;AAAA,IACjC,CAAC;AACD,SAAK,gBAAgB,CAAC;AAAA,EACvB;AAAA,EAEA,MAAM,2BAA6C;AAClD,QAAI,CAAC,KAAK,YAAY;AACrB,aAAO,KAAK;AAAA,IACb;AAEA,QAAI;AACH,aAAO,MAAM,KAAK,WAAW;AAAA,IAC9B,SAAS,KAAK;AACb,YAAM,eAAe,eAAe,GAAG;AACvC,YAAM,QAAQ,IAAW;AAAA,QACxB;AAAA,QACA;AAAA,QACA,wCAAwC,YAAY;AAAA,QACpD,EAAE,OAAO,aAAa;AAAA,MACvB;AAEA,WAAK,qBAAqB;AAC1B,WAAK,uBAAuB,OAAO,KAAK;AACxC,WAAK,oBAAoB,KAAK;AAE9B,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,MAAM,oBAAoB;AACzB,UAAM,SAAS,MAAM,KAAK,yBAAyB;AACnD,UAAM,SAAS,iBAAiB,KAAK,qBAAqB;AAC1D,UAAM,KAAK,MAAM,KAAK,QAAQ;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACN;AACA,IAAAC,WAAU,IAAI,oCAAoC;AAClD,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,YAAY,GAAG;AAAA,MACf,oBAAoB,KAAK,cAAc;AAAA,IACxC,CAAC;AACD,SAAK,aAAa;AAClB,OAAG,iBAAiB,QAAQ,MAAM;AACjC,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,QAAQ,KAAK;AAAA,MACd,CAAC;AAAA,IACF,CAAC;AACD,OAAG,iBAAiB,WAAW,OAAO,OAA8B;AACnE,UAAI;AACH,cAAM,KAAK,iBAAiB,GAAG,IAAI;AAAA,MACpC,SAAS,KAAK;AACb,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AACD,OAAG,iBAAiB,SAAS,OAAO,OAA+B;AAClE,UAAI;AACH,cAAM,KAAK,eAAe,EAAE;AAAA,MAC7B,SAAS,KAAK;AACb,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AACD,OAAG,iBAAiB,SAAS,MAAM;AAClC,UAAI;AACH,aAAK,eAAe;AAAA,MACrB,SAAS,KAAK;AACb,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB;AAEf,QAAI,KAAK,WAAW;AACnB,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,MACN,CAAC;AACD,UAAI,KAAK,YAAY;AACpB,aAAK,WAAW,MAAM,KAAM,UAAU;AACtC,aAAK,aAAa;AAAA,MACnB;AACA;AAAA,IACD;AAEA,QAAI,KAAK,gBAAgB,eAAe,KAAK,gBAAgB;AAC5D;AAAA,IACD;AACA,SAAK,iBAAiB;AAEtB,mBAAe,MAAM;AACpB,WAAK,iBAAiB;AACtB,UAAI,KAAK,WAAW;AACnB,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,QACN,CAAC;AACD,YAAI,KAAK,YAAY;AACpB,eAAK,WAAW,MAAM,KAAM,UAAU;AACtC,eAAK,aAAa;AAAA,QACnB;AACA;AAAA,MACD;AAEA,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,oBAAoB,KAAK,cAAc;AAAA,QACvC,QAAQ,KAAK;AAAA,MACd,CAAC;AAGD,WAAK,eAAe,WAAW;AAG/B,UAAI,KAAK,gBAAgB;AACxB,aAAK,eAAe,QAAQ,MAAS;AAAA,MACtC,OAAO;AACN,eAAO,EAAE,KAAK,EAAE,KAAK,8BAA8B,CAAC;AAAA,MACrD;AAGA,iBAAW,aAAa,KAAK,oBAAoB,KAAK,GAAG;AACxD,aAAK,kBAAkB,WAAW,IAAI;AAAA,MACvC;AAKA,YAAM,QAAQ,KAAK;AACnB,WAAK,gBAAgB,CAAC;AACtB,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,aAAa,MAAM;AAAA,MACpB,CAAC;AACD,iBAAW,OAAO,OAAO;AACxB,aAAK,aAAa,GAAG;AAAA,MACtB;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBAAiB,MAAW;AAjsBnC;AAksBE,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,UAAU,OAAO;AAAA,MACjB,QAAQ,gBAAgB;AAAA,MACxB,eAAe,gBAAgB;AAAA,IAChC,CAAC;AAED,UAAM,WAAW,MAAM,KAAK,cAAc,IAAmB;AAC7D,WAAO,EAAE;AAAA,MACR,cAAc,IACX;AAAA,QACA,KAAK;AAAA,QACL,SACC,oBAAoB,QAAQ,EAAE,UAAU,GAAG,GAAG,IAC9C;AAAA,MACF,IACC,EAAE,KAAK,iBAAiB;AAAA,IAC5B;AAEA,QAAI,SAAS,KAAK,QAAQ,QAAQ;AAEjC,WAAK,WAAW,SAAS,KAAK,IAAI;AAClC,WAAK,UAAU,SAAS,KAAK,IAAI;AACjC,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,SAAS,KAAK;AAAA,QACd,QAAQ,KAAK;AAAA,MACd,CAAC;AACD,WAAK,cAAc;AAAA,IACpB,WAAW,SAAS,KAAK,QAAQ,SAAS;AAEzC,YAAM,EAAE,OAAO,MAAM,SAAS,UAAU,UAAU,MAAM,IACvD,SAAS,KAAK;AAEf,UAAI,aAAa,MAAM;AACtB,cAAM,WAAW,KAAK,oBAAoB,OAAO,QAAQ,CAAC;AAC1D,aAAK,wBAAwB,OAAO,IAAI;AAExC,eAAO,EAAE,KAAK;AAAA,UACb,KAAK;AAAA,UACL;AAAA,UACA,YAAY,qCAAU;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,+BAAO;AAAA,UAChB,YAAY,+BAAO;AAAA,UACnB,UAAU,+BAAO;AAAA,QAClB,CAAC;AAED,iBAAS;AAAA,UACR,IAAW,WAAW,OAAO,MAAM,SAAS;AAAA,YAC3C;AAAA,YACA;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD,OAAO;AACN,eAAO,EAAE,KAAK;AAAA,UACb,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,+BAAO;AAAA,UAChB,YAAY,+BAAO;AAAA,UACnB,UAAU,+BAAO;AAAA,QAClB,CAAC;AAED,YAAI,KAAK,8BAA8B,OAAO,IAAI,GAAG;AACpD,eAAK,4BAA4B;AACjC,qBAAK,mBAAL,mBAAqB;AAAA,YACpB,IAAW,WAAW,OAAO,MAAM,SAAS;AAAA,cAC3C;AAAA,cACA;AAAA,YACD,CAAC;AAAA;AAEF;AAAA,QACD;AAGA,YAAI,eAAe,IAAW;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA,EAAE,UAAU,MAAM;AAAA,QACnB;AACA,YAAW,kBAAkB,OAAO,IAAI,KAAK,KAAK,UAAU;AAC3D,gBAAM,kBAAkB,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACN;AACA,cAAI,iBAAiB;AACpB,2BAAe;AAAA,UAChB;AAAA,QACD;AAGA,YAAI,KAAK,gBAAgB;AACxB,eAAK,eAAe,OAAO,YAAY;AAAA,QACxC;AAEA,aAAK,wBAAwB,OAAO,IAAI;AAGxC,mBAAW,CAAC,IAAI,QAAQ,KAAK,KAAK,iBAAiB,QAAQ,GAAG;AAC7D,mBAAS,OAAO,YAAY;AAC5B,eAAK,iBAAiB,OAAO,EAAE;AAAA,QAChC;AAEA,aAAK,oBAAoB,YAAY;AAAA,MACtC;AAAA,IACD,WAAW,SAAS,KAAK,QAAQ,kBAAkB;AAElD,YAAM,EAAE,IAAI,SAAS,IAAI,SAAS,KAAK;AACvC,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,UAAU,OAAO,QAAQ;AAAA,QACzB,eAAe,KAAK,iBAAiB;AAAA,QACrC,aAAa,MAAM,KAAK,KAAK,iBAAiB,KAAK,CAAC;AAAA,MACrD,CAAC;AAED,YAAM,WAAW,KAAK,oBAAoB,OAAO,QAAQ,CAAC;AAC1D,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,YAAY,qCAAU;AAAA,MACvB,CAAC;AACD,eAAS,QAAQ,SAAS,KAAK,GAAG;AAAA,IACnC,WAAW,SAAS,KAAK,QAAQ,SAAS;AACzC,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,MAAM,SAAS,KAAK,IAAI;AAAA,MACzB,CAAC;AACD,WAAK,eAAe,SAAS,KAAK,GAAG;AAAA,IACtC,OAAO;AACN,wBAAkB,SAAS,IAAI;AAAA,IAChC;AAAA,EACD;AAAA;AAAA,EAGA,MAAM,eAAe,OAA+B;AAl1BrD;AAo1BE,UAAM,aAAa;AACnB,UAAM,WAAW,WAAW;AAC5B,UAAM,eAAe,KAAK,gBAAgB;AAE1C,WAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,QAAQ,WAAW;AAAA,MACnB;AAAA,MACA,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,IACd,CAAC;AAED,SAAK,aAAa;AAElB,QAAI,KAAK,WAAW;AAEnB,WAAK,uBAAuB,IAAW,kBAAkB,GAAG,IAAI;AAAA,IACjE,OAAO;AACN,WAAK,eAAe,cAAc;AAGlC,UAAI;AACJ,YAAM,SAAS,WAAW,UAAU;AACpC,YAAM,SAAS,0BAA0B,MAAM;AAE/C,UAAI,QAAQ;AACX,cAAM,EAAE,OAAO,KAAK,IAAI;AAExB,YAAI,KAAK,8BAA8B,OAAO,IAAI,GAAG;AACpD,eAAK,4BAA4B;AACjC,qBAAK,mBAAL,mBAAqB;AAAA,YACpB,IAAW;AAAA,cACV;AAAA,cACA;AAAA,cACA,sBAAsB,MAAM;AAAA,cAC5B;AAAA,YACD;AAAA;AAED;AAAA,QACD;AAGA,YAAW,kBAAkB,OAAO,IAAI,KAAK,KAAK,UAAU;AAC3D,gBAAM,kBAAkB,MAAM;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACN;AACA,cAAI,iBAAiB;AACpB,oBAAQ;AAAA,UACT,OAAO;AACN,oBAAQ,IAAW;AAAA,cAClB;AAAA,cACA;AAAA,cACA,sBAAsB,MAAM;AAAA,cAC5B;AAAA,YACD;AAAA,UACD;AAAA,QACD,OAAO;AACN,kBAAQ,IAAW;AAAA,YAClB;AAAA,YACA;AAAA,YACA,sBAAsB,MAAM;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAEA,aAAK,wBAAwB,OAAO,IAAI;AAAA,MACzC,OAAO;AAEN,gBAAQ,IAAI;AAAA,UACX,GAAG,WAAW,sBAAsB,iBAAiB,WAAW,WAAW,IAAI,aAAa,MAAM;AAAA,QACnG;AAAA,MACD;AAEA,WAAK,uBAAuB,OAAO,KAAK;AAGxC,UAAI,iBAAwB,YAAY;AACvC,aAAK,oBAAoB,KAAK;AAAA,MAC/B;AAGA,UAAI,cAAc;AACjB,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,QAAQ,KAAK;AAAA,QACd,CAAC;AACD,aAAK,kBAAkB;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,uBAAuB,OAAc,mBAA4B;AAChE,QAAI,KAAK,gBAAgB;AACxB,UAAI,mBAAmB;AACtB,aAAK,eAAe,QAAQ,MAAM,MAAM;AAAA,QAAC,CAAC;AAAA,MAC3C;AACA,WAAK,eAAe,OAAO,KAAK;AAAA,IACjC;AAEA,eAAW,cAAc,KAAK,iBAAiB,OAAO,GAAG;AACxD,iBAAW,OAAO,KAAK;AAAA,IACxB;AACA,SAAK,iBAAiB,MAAM;AAAA,EAC7B;AAAA;AAAA,EAGA,iBAAiB;AAChB,QAAI,KAAK,UAAW;AAGpB,WAAO,EAAE,KAAK,cAAc;AAAA,EAC7B;AAAA,EAEA,oBAAoB,IAA4B;AAC/C,UAAM,WAAW,KAAK,iBAAiB,IAAI,EAAE;AAC7C,QAAI,CAAC,UAAU;AACd,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,UAAU;AAAA,QACV,eAAe,KAAK,iBAAiB;AAAA,QACrC,aAAa,MAAM,KAAK,KAAK,iBAAiB,KAAK,CAAC;AAAA,QACpD,iBAAiB,MAAM;AAAA,UACtB,KAAK,iBAAiB,QAAQ;AAAA,QAC/B,EAAE,IAAI,CAAC,CAACC,KAAI,MAAM,OAAO;AAAA,UACxB,IAAAA;AAAA,UACA,MAAM,OAAO;AAAA,QACd,EAAE;AAAA,MACH,CAAC;AACD,YAAa,oBAAoB,6BAA6B,EAAE,EAAE;AAAA,IACnE;AACA,SAAK,iBAAiB,OAAO,EAAE;AAC/B,WAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL,UAAU;AAAA,MACV,YAAY,SAAS;AAAA,MACrB,eAAe,KAAK,iBAAiB;AAAA,IACtC,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAEA,eAAe,OAAwC;AACtD,UAAM,EAAE,MAAM,KAAK,IAAI;AAEvB,UAAM,YAAY,KAAK,oBAAoB,IAAI,IAAI;AACnD,QAAI,CAAC,UAAW;AAGhB,eAAW,YAAY,CAAC,GAAG,SAAS,GAAG;AACtC,eAAS,SAAS,GAAI,IAAkB;AAGxC,UAAI,SAAS,MAAM;AAClB,kBAAU,OAAO,QAAQ;AAAA,MAC1B;AAAA,IACD;AAGA,QAAI,UAAU,SAAS,GAAG;AACzB,WAAK,oBAAoB,OAAO,IAAI;AAAA,IACrC;AAAA,EACD;AAAA,EAEA,oBAAoB,OAA0B;AAE7C,eAAW,WAAW,CAAC,GAAG,KAAK,cAAc,GAAG;AAC/C,UAAI;AACH,gBAAQ,KAAK;AAAA,MACd,SAAS,KAAK;AACb,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,OAAO,eAAe,GAAG;AAAA,QAC1B,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAEA,sBACC,WACA,UACA,MACmB;AACnB,UAAM,WAAqC;AAAA,MAC1C;AAAA,MACA;AAAA,IACD;AAEA,QAAI,kBAAkB,KAAK,oBAAoB,IAAI,SAAS;AAC5D,QAAI,oBAAoB,QAAW;AAClC,wBAAkB,oBAAI,IAAI;AAC1B,WAAK,oBAAoB,IAAI,WAAW,eAAe;AACvD,WAAK,kBAAkB,WAAW,IAAI;AAAA,IACvC;AACA,oBAAgB,IAAI,QAAQ;AAG5B,WAAO,MAAM;AACZ,YAAM,YAAY,KAAK,oBAAoB,IAAI,SAAS;AACxD,UAAI,WAAW;AACd,kBAAU,OAAO,QAAQ;AACzB,YAAI,UAAU,SAAS,GAAG;AACzB,eAAK,oBAAoB,OAAO,SAAS;AACzC,eAAK,kBAAkB,WAAW,KAAK;AAAA,QACxC;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,GACC,WACA,UACmB;AACnB,WAAO,KAAK,sBAA4B,WAAW,UAAU,KAAK;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,KACC,WACA,UACmB;AACnB,WAAO,KAAK,sBAA4B,WAAW,UAAU,IAAI;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,UAA0C;AACjD,SAAK,eAAe,IAAI,QAAQ;AAGhC,WAAO,MAAM;AACZ,WAAK,eAAe,OAAO,QAAQ;AAAA,IACpC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,aAA8B;AACjC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,cAAuB;AAC1B,WAAO,KAAK,gBAAgB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAuB;AAC1B,WAAO,KAAK,cAAc;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,UAA+C;AACrD,SAAK,cAAc,IAAI,QAAQ;AAE/B,QAAI,KAAK,gBAAgB,aAAa;AACrC,qBAAe,MAAM;AACpB,YAAI,CAAC,KAAK,cAAc,IAAI,QAAQ,GAAG;AACtC;AAAA,QACD;AAEA,YAAI;AACH,mBAAS;AAAA,QACV,SAAS,KAAK;AACb,iBAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,OAAO,eAAe,GAAG;AAAA,UAC1B,CAAC;AAAA,QACF;AAAA,MACD,CAAC;AAAA,IACF;AAGA,WAAO,MAAM;AACZ,WAAK,cAAc,OAAO,QAAQ;AAAA,IACnC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAQ,UAA+C;AACtD,SAAK,eAAe,IAAI,QAAQ;AAGhC,WAAO,MAAM;AACZ,WAAK,eAAe,OAAO,QAAQ;AAAA,IACpC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,UAA4C;AAC1D,SAAK,sBAAsB,IAAI,QAAQ;AAGvC,WAAO,MAAM;AACZ,WAAK,sBAAsB,OAAO,QAAQ;AAAA,IAC3C;AAAA,EACD;AAAA,EAEA,aACC,SAWA,MACC;AAnsCH;AAosCE,QAAI,KAAK,WAAW;AACnB,UAAI,6BAAM,WAAW;AACpB;AAAA,MACD,OAAO;AACN,cAAM,IAAW,kBAAkB;AAAA,MACpC;AAAA,IACD;AAEA,QAAI,eAAe;AACnB,QAAI,KAAK,YAAY;AACpB,YAAM,aAAa,KAAK,WAAW;AACnC,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,kBACC,eAAe,IACZ,eACA,eAAe,IACd,SACA,eAAe,IACd,YACA;AAAA,QACN,QAAQ,KAAK;AAAA,QACb,aAAc,QAAQ,KAAa;AAAA,QACnC,aAAa,aAAQ,KAAa,QAArB,mBAA0B;AAAA,MACxC,CAAC;AACD,UAAI,KAAK,gBAAgB,aAAa;AACrC,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL,YAAY,KAAK;AAAA,UACjB,aAAc,QAAQ,KAAa;AAAA,QACpC,CAAC;AACD,uBAAe;AAAA,MAChB,WAAW,eAAe,GAAG;AAC5B,YAAI;AACH,gBAAM,oBAAoB;AAAA,YACzB,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,YAEA,CAAC,QAAsB;AAAA;AAAA,YAEvB,CAAC,QAA2B;AAC3B,kBAAI,IAAI,KAAK,QAAQ,iBAAiB;AACrC,uBAAO;AAAA,kBACN,MAAM;AAAA,oBACL,KAAK;AAAA,oBACL,KAAK;AAAA,sBACJ,IAAI,IAAI,KAAK,IAAI;AAAA,sBACjB,MAAM,IAAI,KAAK,IAAI;AAAA,sBACnB,MAAM;AAAA,wBACL;AAAA,0BACC,IAAI,KAAK,IAAI;AAAA,wBACd;AAAA,sBACD;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD,OAAO;AACN,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD;AACA,gBAAM,mBAAmB,cAAc,iBAAiB;AACxD,cACC,mBAAmB,qCACnB,QAAQ,KAAK,QAAQ,iBACpB;AACD,kBAAM,WAAW,OAAO,QAAQ,KAAK,IAAI,EAAE;AAC3C,kBAAM,WAAW,KAAK,oBAAoB,QAAQ;AAClD,kBAAM,QAAQ,IAAW;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,gBACC,SAAS;AAAA,gBACT,YAAY;AAAA,cACb;AAAA,YACD;AACA,mBAAO,EAAE,KAAK;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA,YAAY,SAAS;AAAA,cACrB,YAAY;AAAA,cACZ,SAAS;AAAA,YACV,CAAC;AACD,qBAAS,OAAO,KAAK;AACrB,iBAAK,oBAAoB,KAAK;AAC9B;AAAA,UACD;AACA,eAAK,WAAW,KAAK,iBAAiB;AACtC,iBAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL,KAAK;AAAA,UACN,CAAC;AAAA,QACF,SAAS,OAAO;AACf,iBAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL;AAAA,YACA,QAAQ,KAAK;AAAA,UACd,CAAC;AAGD,yBAAe;AAAA,QAChB;AAAA,MACD,OAAO;AACN,eAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL;AAAA,QACD,CAAC;AACD,uBAAe;AAAA,MAChB;AAAA,IACD,OAAO;AAEN,aAAO,EAAE,MAAM,EAAE,KAAK,iCAAiC,CAAC;AACxD,qBAAe;AAAA,IAChB;AAEA,QAAI,EAAC,6BAAM,cAAa,cAAc;AACrC,WAAK,cAAc,KAAK,OAAO;AAC/B,aAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,aAAa,KAAK,cAAc;AAAA,QAChC,QAAQ,KAAK;AAAA,QACb,aAAc,QAAQ,KAAa;AAAA,QACnC,aAAa,aAAQ,KAAa,QAArB,mBAA0B;AAAA,MACxC,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,MAAM,cAAc,MAgBjB;AACF,IAAAD,WAAU,KAAK,YAAY,2BAA2B;AAEtD,UAAM,SAAS,MAAM,kBAAkB,IAAI;AAE3C,WAAO;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,CAAC,QAAa;AACb,YAAI,IAAI,KAAK,QAAQ,WAAW,CAAC,IAAI,KAAK,IAAI,OAAO;AACpD,iBAAO;AAAA,QACR;AACA,eAAO;AAAA,UACN,MAAM;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,cACJ,GAAG,IAAI,KAAK;AAAA,cACZ,OAAO;AAAA,gBACN,GAAG,IAAI,KAAK,IAAI;AAAA,gBAChB,YAAY;AAAA,kBACX,IAAI,KAAK,IAAI,MAAM;AAAA,gBACpB;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA;AAAA,MAEA,CAAC,QAAa;AACb,YAAI,IAAI,KAAK,QAAQ,SAAS;AAC7B,iBAAO;AAAA,YACN,MAAM;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,gBACJ,OAAO,IAAI,KAAK,IAAI;AAAA,gBACpB,MAAM,IAAI,KAAK,IAAI;AAAA,gBACnB,SAAS,IAAI,KAAK,IAAI;AAAA,gBACtB,UAAU,IAAI,KAAK,IAAI,WACpB;AAAA,kBACA,IAAI;AAAA,oBACH,IAAI,KAAK,IAAI;AAAA,kBACd;AAAA,gBACD,IACC;AAAA,gBACH,UAAU,IAAI,KAAK,IAAI;AAAA,gBACvB,OAAO,IAAI,KAAK,IAAI,QACjB;AAAA,kBACA,SAAS,IAAI,KAAK,IAAI,MAAM;AAAA,kBAC5B,YAAY;AAAA,oBACX,IAAI,KAAK,IAAI,MAAM;AAAA,kBACpB;AAAA,kBACA,KACC,IAAI,KAAK,IAAI,MAAM,OACnB;AAAA,gBACF,IACC;AAAA,cACJ;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,IAAI,KAAK,QAAQ,kBAAkB;AAC7C,iBAAO;AAAA,YACN,MAAM;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,gBACJ,IAAI,IAAI,KAAK,IAAI;AAAA,gBACjB,QAAQ;AAAA,kBACP,IAAI,WAAW,IAAI,KAAK,IAAI,MAAM;AAAA,gBACnC;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,IAAI,KAAK,QAAQ,SAAS;AACpC,iBAAO;AAAA,YACN,MAAM;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,gBACJ,MAAM,IAAI,KAAK,IAAI;AAAA,gBACnB,MAAM;AAAA,kBACL,IAAI,WAAW,IAAI,KAAK,IAAI,IAAI;AAAA,gBACjC;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD,OAAO;AAEN,iBAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAA8B;AACjC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAA6B;AAChC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,eAAmC;AACtC,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAyB;AAG9B,QAAI,KAAK,WAAW;AACnB,aAAO,EAAE,KAAK,EAAE,KAAK,kCAAkC,CAAC;AACxD;AAAA,IACD;AACA,SAAK,YAAY;AAEjB,WAAO,EAAE,MAAM,EAAE,KAAK,uBAAuB,CAAC;AAG9C,SAAK,eAAe,MAAM;AAG1B,kBAAc,KAAK,sBAAsB;AAGzC,SAAK,iBAAiB,MAAM;AAG5B,SAAK,QAAQ,kBAAkB,EAAE,OAAO,IAAI;AAG5C,QAAI,KAAK,YAAY;AACpB,YAAM,KAAK,KAAK;AAChB,UACC,GAAG,eAAe,KAClB,GAAG,eAAe,GACjB;AACD,cAAM,EAAE,SAAS,QAAQ,IAAI;AAAA,UAAqB,CAAC,WAClD,OAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL;AAAA,UACD,CAAC;AAAA,QACF;AACA,WAAG,iBAAiB,SAAS,MAAM,QAAQ,MAAS,CAAC;AACrD,WAAG,MAAM,KAAM,UAAU;AACzB,cAAM;AAAA,MACP;AAAA,IACD,OAAO;AACN,WAAK,uBAAuB,IAAW,kBAAkB,GAAG,IAAI;AAAA,IACjE;AACA,SAAK,aAAa;AAAA,EACnB;AAAA,EAEA,kBAAkB,WAAmB,WAAoB;AACxD,SAAK;AAAA,MACJ;AAAA,QACC,MAAM;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,YACJ;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,IACnB;AAAA,EACD;AACD;;;AgBhhDA,OAAOE,QAAO;;;ACqCP,SAAS,iBACf,KACA,SAC6B;AAC7B,QAAM;AAAA,IACL;AAAA,IACA,OAAO,CAAC,UAAU;AAAA,IAClB,WAAW;AAAA,IACX,OAAO;AAAA,EACR,IAAI;AAEJ,MAAI;AACJ,MAAI;AACH,UAAM,IAAI,IAAI,QAAQ;AAAA,EACvB,QAAQ;AACP,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,gBAAgB,QAAQ;AAAA,MACjC;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AAGA,MAAI,IAAI,QAAQ;AACf,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AAGA,MAAI,IAAI,MAAM;AACb,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AAIA,QAAM,YAAY,IAAI,WACnB,mBAAmB,IAAI,QAAQ,IAC/B;AACH,QAAM,QAAQ,IAAI,WAAW,mBAAmB,IAAI,QAAQ,IAAI;AAGhE,MAAI,SAAS,CAAC,WAAW;AACxB,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AAGA,MAAI,aAAa,iBAAiB;AACjC,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SACC;AAAA,MACD,MAAM,CAAC,WAAW;AAAA,IACnB,CAAC;AAAA,EACF;AACA,MAAI,SAAS,aAAa;AACzB,QAAI,SAAS;AAAA,MACZ,MAAM;AAAA,MACN,SACC;AAAA,MACD,MAAM,CAAC,OAAO;AAAA,IACf,CAAC;AAAA,EACF;AAGA,MAAI,WAAW;AACf,MAAI,WAAW;AAGf,QAAM,kBAAkB,IAAI,SAAS;AAErC,SAAO;AAAA,IACN,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACD;AACD;;;ADlHA,IAAM,mBAAmB;AAClB,IAAM,+BAA+B,IAAI;AAEhD,IAAI,2BAA2B;AAKxB,IAAM,yBAAyBC,GAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY9C,UAAUA,GACR,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ;AACnB,UAAM,WAAW,OAAO,eAAe,KAAK,iBAAiB;AAC7D,QAAI,CAAC,YAAY,CAAC,0BAA0B;AAC3C,iCAA2B;AAC3B,cAAQ;AAAA,QACP,4DAA4D,gBAAgB;AAAA,MAI7E;AAAA,IACD;AACA,WAAO,YAAY;AAAA,EACpB,CAAC;AAAA;AAAA,EAGF,OAAOA,GACL,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,cAAc,CAAC;AAAA;AAAA,EAG3C,WAAWA,GACT,OAAO,EACP,SAAS,EACT,UAAU,CAAC,QAAQ,OAAO,kBAAkB,CAAC;AAAA;AAAA,EAG/C,UAAUA,GAAE,OAAO,EAAE,QAAQ,MAAM,aAAa,KAAK,SAAS;AAAA,EAE9D,UAAU,eAAe,QAAQ,MAAM;AAAA,EAEvC,SAASA,GACP,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT,QAAQ,OAAO,CAAC,EAAE;AAAA,EAEpB,SAASA,GACP,OAAO;AAAA,IACP,eAAeA,GAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EACpD,CAAC,EACA,SAAS,EACT,QAAQ,OAAO,EAAE,eAAe,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,qBAAqBA,GAAE,OAA4B,EAAE,SAAS;AAAA;AAAA,EAG9D,uBAAuBA,GAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3D,cAAcA,GACZ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,QAAQ,4BAA4B;AAAA;AAAA,EAGtC,UAAUA,GACR,QAAQ,EACR;AAAA,IACA,MAAG;AAvGN;AAwGI,oBAAO,WAAW,kBACjB,sCAAQ,aAAR,mBAAkB,cAAa,iBAC/B,YAAO,aAAP,mBAAiB,cAAa;AAAA;AAAA,EACjC;AACF,CAAC;AAEM,IAAM,qBAAqB,uBAAuB;AAAA,EACxD,CAAC,QAAQ,QAAQ,sBAAsB,QAAQ,GAAG;AACnD;AAMO,SAAS,sBACf,QACA,KACC;AACD,QAAM,iBAAiB,iBAAiB,KAAK;AAAA,IAC5C,UAAU,OAAO;AAAA,IACjB,MAAM,CAAC,UAAU;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,OAAO,OAAO;AAAA,EACf,CAAC;AAED,SAAO;AAAA,IACN,GAAG;AAAA,IACH,UAAU,iDAAgB;AAAA,IAC1B,YAAW,iDAAgB,cAAa,OAAO,aAAa;AAAA,IAC5D,QAAO,iDAAgB,UAAS,OAAO;AAAA,EACxC;AACD;AAYO,SAAS,oCACf,QACe;AArJhB;AAsJC,SAAO;AAAA,IACN,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO,MAAM;AAAA,IACvB,SAAS,OAAO;AAAA,IAChB,SAAS,EAAE,eAAe,MAAM;AAAA,IAChC,UAAU;AAAA,IACV,qBAAqB;AAAA;AAAA,IAErB,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,UACC,OAAO,WAAW,kBACjB,sCAAQ,aAAR,mBAAkB,cAAa,iBAC/B,sCAAQ,aAAR,mBAAkB,cAAa;AAAA,EAClC;AACD;;;AEvKA,SAAS,KAAAC,UAAS;;;ACEX,SAASC,UAAS;AACxB,SAAO,UAAU,eAAe;AACjC;;;ADOO,SAAS,YAAY,QAAuC;AAGlE,SAAO,OAAO,YAAY;AAC3B;AAGA,eAAsB,QACrB,QACA,QACA,MACA,MACmB;AACnB,QAAM,WAAW,YAAY,MAAM;AACnC,QAAM,MAAM,eAAe,UAAU,MAAM;AAAA,IAC1C,WAAW,OAAO;AAAA,EACnB,CAAC;AAED,EAAAC,QAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,QAAQ,IAAI,CAAC;AAEtD,QAAM,UAAkC;AAAA,IACvC,GAAG,OAAO;AAAA,EACX;AAGA,MAAI,OAAO,OAAO;AACjB,YAAQ,gBAAgB,UAAU,OAAO,KAAK;AAAA,EAC/C;AAEA,SAAO,MAAM,gBAAiC;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,iBAAiB;AAAA,IACjB,kBAAkBC,GAAE,IAAI;AAAA,IACxB,mBAAmBA,GAAE,IAAI;AAAA;AAAA,IAEzB,eAAe,CAAC,UAAU;AAAA,IAC1B,eAAe,CAAC,UAAU;AAAA,IAC1B,kBAAkB,CAAC,UAAU;AAAA,IAC7B,kBAAkB,CAAC,UAAU;AAAA,EAC9B,CAAC;AACF;;;AE5CA,eAAsB,SACrB,QACA,GACA,SAC8B;AAC9B,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,qBAAqB,mBAAmB,OAAO,CAAC;AAAA,EACjD;AACD;AAGA,eAAsB,cACrB,QACA,MACA,KAC8B;AAC9B,QAAM,gBAAgB,kBAAkB,GAAG;AAC3C,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,gBAAgB,mBAAmB,IAAI,CAAC,QAAQ,mBAAmB,aAAa,CAAC;AAAA,EAClF;AACD;AAGA,eAAsB,iBACrB,QACA,MAC8B;AAC9B,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,EACzC;AACD;AAGA,eAAsB,iBACrB,QACA,SACqC;AACrC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAGA,eAAsB,YACrB,QACA,SACgC;AAChC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAGA,eAAsB,aACrB,QACA,SACgC;AAChC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,WAAW,mBAAmB,OAAO,CAAC;AAAA,EACvC;AACD;AAGA,eAAsB,YACrB,QAC4B;AAC5B,SAAO,QAAiC,QAAQ,OAAO,WAAW;AACnE;AAOA,eAAsB,eACrB,QAC+B;AAC/B,SAAO,QAAoC,QAAQ,OAAO,cAAc;AACzE;AAyBA,eAAsB,mBACrB,QACA,YACA,SACgB;AAChB,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,mBAAmB,UAAU;AAAA,IAC7B;AAAA,EACD;AACD;AAQA,eAAsB,MACrB,QACA,SACA,KACyB;AACzB,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,WAAW,mBAAmB,OAAO,CAAC,YAAY,mBAAmB,GAAG,CAAC;AAAA,EAC1E;AACD;;;AChKA,OAAOC,gBAAe;;;ACWf,SAAS,oBACf,UAAiC,CAAC,GACxB;AACV,SAAO,QAAQ,kBAAkB;AAClC;;;ACHA,eAAsB,yBACrB,WACA,YACA,cACA,UAAqC,CAAC,GAClB;AAEpB,MAAI,aAAiC;AACrC,QAAM,eAAe,kBAAkB,WAAW,cAAc,OAAO;AAEvE,MAAI,aAAa,WAAW,SAAS,aAAa,WAAW,QAAQ;AACpE,QAAI,aAAa,UAAU;AAC1B,YAAM,IAAI,MAAM,wCAAwC;AAAA,IACzD;AAIA,UAAM,UAAU,MAAM,aAAa,YAAY;AAE/C,QAAI,QAAQ,eAAe,GAAG;AAC7B,mBAAa;AAIb,mBAAa,OAAO,mBAAmB;AACvC,mBAAa,IAAI,kBAAkB,OAAO,WAAW,UAAU,CAAC;AAAA,IACjE;AAAA,EACD;AAEA,QAAM,eAAe,IAAI,QAAQ,YAAY;AAAA,IAC5C,QAAQ,aAAa;AAAA,IACrB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ,aAAa;AAAA,EACtB,CAAC;AAED,SAAO,gBAAgB,MAAM,MAAM,YAAY,CAAC;AACjD;AAEA,SAAS,gBAAgB,UAA8B;AAItD,SAAO,IAAI,SAAS,SAAS,MAAM,QAAQ;AAC5C;AAEA,SAAS,kBACR,WACA,cACA,SACU;AACV,QAAM,UAAU,IAAI,QAAQ;AAE5B,eAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC5C,YAAQ,IAAI,KAAK,KAAK;AAAA,EACvB,CAAC;AAED,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,OAAO,GAAG;AAC7D,YAAQ,IAAI,KAAK,KAAe;AAAA,EACjC;AAEA,MAAI,UAAU,OAAO;AACpB,YAAQ,IAAI,oBAAoB,UAAU,KAAK;AAAA,EAChD;AACA,MAAI,QAAQ,kBAAkB,QAAW;AACxC,YAAQ,IAAI,qBAAqB,OAAO;AACxC,YAAQ,IAAI,oBAAoB,QAAQ,aAAa;AAAA,EACtD;AACA,MAAI,oBAAoB,OAAO,GAAG;AACjC,YAAQ,IAAI,8BAA8B,GAAG;AAAA,EAC9C;AACA,SAAO;AACR;;;ACnFA,IAAM,eAAe,IAAI,YAAY;AAgCrC,IAAM,0CAA0C,oBAAI,IAGlD;AAyBK,SAAS,qCACf,WACA,OAIA,SACO;AACP,MAAI,CAAC,SAAS;AACb;AAAA,EACD;AAEA,QAAM,gBAAgB;AACtB,gBAAc,iCAAiC,MAAM;AACrD,gBAAc,gCAAgC,MAAM;AACrD;AAiCO,SAAS,2CACf,WACA,OACA,SACO;AACP,MAAI,CAAC,SAAS;AACb;AAAA,EACD;AAEA;AAAA,IACC;AAAA,IACA;AAAA,MACC,UAAU,MAAM;AACf,cAAM,QACL,wCAAwC,IAAI,KAAK;AAClD,YAAI,CAAC,OAAO;AACX,gBAAM,IAAI;AAAA,YACT,qEAAqE,KAAK;AAAA,UAC3E;AAAA,QACD;AACA,eAAO,MAAM,SAAS;AAAA,MACvB;AAAA,MACA,YAAY,OAAO,uBAAuB;AACzC,cAAM,QACL,wCAAwC,IAAI,KAAK;AAClD,YAAI,CAAC,OAAO;AACX,gBAAM,IAAI;AAAA,YACT,qEAAqE,KAAK;AAAA,UAC3E;AAAA,QACD;AACA,cAAM,MAAM,WAAW,kBAAkB;AAAA,MAC1C;AAAA,IACD;AAAA,IACA;AAAA,EACD;AACD;;;AC1HA,IAAM,0BAAN,MAA4D;AAAA,EAClD,aAAa;AAAA,EACb,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EAElB;AAAA,EACA,aAAa,oBAAI,IAAuC;AAAA,EACxD,gBAAqD,CAAC;AAAA,EACtD,UAAyC;AAAA,EACzC,WAA0C;AAAA,EAC1C,WAA0C;AAAA,EAC1C,aAA4C;AAAA,EAE5C,YAAY,OAA2B;AACtC,SAAK,SAAS;AACd,eAAW,QAAQ,CAAC,QAAQ,WAAW,SAAS,OAAO,GAAG;AACzD,WAAK,OAAO,iBAAiB,MAAM,CAAC,UAAU;AAC7C,aAAK,aAAa,MAAM,KAAK;AAAA,MAC9B,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,WAAW,OAAO;AACrB,SAAK,OAAO,aAAa;AAAA,EAC1B;AAAA,EAEA,IAAI,iBAAiB;AACpB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,aAAa;AAChB,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,WAAW;AACd,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,MAAM;AACT,WAAO,KAAK,OAAO;AAAA,EACpB;AAAA,EAEA,IAAI,SAAS;AACZ,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,OAAO,SAAS;AACnB,SAAK,UAAU;AACf,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,IAAI,UAAU;AACb,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,QAAQ,SAAS;AACpB,SAAK,WAAW;AAChB,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,IAAI,UAAU;AACb,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,QAAQ,SAAS;AACpB,SAAK,WAAW;AAChB,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,IAAI,YAAY;AACf,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,IAAI,UAAU,SAAS;AACtB,SAAK,aAAa;AAClB,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,KAAK,MAA+D;AACnE,SAAK,OAAO,KAAK,IAAI;AAAA,EACtB;AAAA,EAEA,MAAM,MAAe,QAAuB;AAC3C,SAAK,OAAO,MAAM,MAAM,MAAM;AAAA,EAC/B;AAAA,EAEA,iBAAiB,MAAc,UAAsC;AACpE,UAAM,YAAY,KAAK,WAAW,IAAI,IAAI,KAAK,oBAAI,IAAI;AACvD,cAAU,IAAI,QAAQ;AACtB,SAAK,WAAW,IAAI,MAAM,SAAS;AACnC,SAAK,mBAAmB;AAAA,EACzB;AAAA,EAEA,oBAAoB,MAAc,UAAsC;AA7HzE;AA8HE,eAAK,WAAW,IAAI,IAAI,MAAxB,mBAA2B,OAAO;AAAA,EACnC;AAAA,EAEA,cAAc,OAAqB;AAClC,WAAO,KAAK,eAAe,MAAM,MAAM,KAAK;AAAA,EAC7C;AAAA,EAEA,aAAa,MAAc,OAAkB;AAC5C,QAAI,KAAK,aAAa,IAAI,GAAG;AAC5B,WAAK,eAAe,MAAM,KAAK;AAC/B;AAAA,IACD;AACA,SAAK,cAAc,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,EACxC;AAAA,EAEA,qBAA2B;AAC1B,QAAI,KAAK,cAAc,WAAW,GAAG;AACpC;AAAA,IACD;AAEA,UAAM,UAAU,KAAK;AACrB,SAAK,gBAAgB,CAAC;AACtB,eAAW,gBAAgB,SAAS;AACnC,UAAI,KAAK,aAAa,aAAa,IAAI,GAAG;AACzC,aAAK,eAAe,aAAa,MAAM,aAAa,KAAK;AACzD;AAAA,MACD;AACA,WAAK,cAAc,KAAK,YAAY;AAAA,IACrC;AAAA,EACD;AAAA,EAEA,aAAa,MAAuB;AA7JrC;AA8JE,UAAM,UACL,SAAS,SACN,KAAK,UACL,SAAS,UACR,KAAK,WACL,SAAS,UACR,KAAK,WACL,SAAS,YACR,KAAK,aACL;AACP,WAAO,QAAQ,OAAO,QAAM,UAAK,WAAW,IAAI,IAAI,MAAxB,mBAA2B,SAAQ,KAAK;AAAA,EACrE;AAAA,EAEA,eAAe,MAAc,OAAqB;AACjD,UAAM,YAAY,KAAK,WAAW,IAAI,IAAI;AAC1C,QAAI,WAAW;AACd,iBAAW,YAAY,WAAW;AACjC,iBAAS,KAAK;AAAA,MACf;AAAA,IACD;AAEA,UAAM,UACL,SAAS,SACN,KAAK,UACL,SAAS,UACR,KAAK,WACL,SAAS,UACR,KAAK,WACL,SAAS,YACR,KAAK,aACL;AACP,uCAAU;AACV,WAAO;AAAA,EACR;AACD;AAEO,SAAS,qBACf,UACA,SACA,OACA,OAAO,IACE;AACT,QAAM,eACL,UAAU,SAAY,IAAI,mBAAmB,KAAK,CAAC,KAAK;AACzD,QAAM,cAAc,YAAY,mBAAmB,OAAO,CAAC,GAAG,YAAY,GAAG,IAAI;AACjF,SAAO,eAAe,UAAU,WAAW;AAC5C;AAEO,SAAS,0BACf,UACA,WACA,OACA,OACA,OAAO,IACP,eAAe,8BACf,cAAuC,QACvC,YACA,UAAiC,CAAC,GACzB;AACT,MAAI,UAAU,WAAW,GAAG;AAC3B,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC1D;AAEA,MAAI;AACJ,QAAM,SAAS,IAAI,gBAAgB;AACnC,SAAO,OAAO,iBAAiB,SAAS;AAExC,MAAI,eAAe,OAAO;AACzB,WAAO,MAAM,UAAU;AACvB,WAAO,OAAO,cAAc,KAAK;AACjC,uBAAmB,QAAQ,MAAM,UAAU,GAAG;AAC9C,QAAI,gBAAgB,QAAW;AAC9B,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AACA,QAAI,eAAe,QAAW;AAC7B,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AAAA,EACD,WAAW,uBAAuB,OAAO;AACxC,WAAO,MAAM,kBAAkB;AAC/B,WAAO,OAAO,cAAc,aAAa;AACzC,QAAI,eAAe,QAAW;AAC7B,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AACA,WAAO,OAAO,cAAc,UAAU;AACtC,uBAAmB,QAAQ,MAAM,kBAAkB,GAAG;AACtD;AAAA,MACC;AAAA,MACA,MAAM,kBAAkB;AAAA,MACxB;AAAA,IACD;AACA,QAAI,MAAM,kBAAkB,WAAW,QAAW;AACjD,aAAO,OAAO,cAAc,MAAM,kBAAkB,MAAM;AAAA,IAC3D;AACA,WAAO,OAAO,oBAAoB,eAAe,OAAO;AAAA,EACzD,OAAO;AACN,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,MAAI,KAAK,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACrD;AAEA,MAAI,UAAU,QAAW;AACxB,WAAO,OAAO,aAAa,KAAK;AAAA,EACjC;AACA,MAAI,oBAAoB,OAAO,GAAG;AACjC,WAAO,OAAO,uBAAuB,MAAM;AAAA,EAC5C;AAEA,QAAM,cAAc,OAAO,SAAS;AACpC,MAAI;AACJ,MAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC7C,gBAAY;AAAA,EACb,WAAW,KAAK,SAAS,GAAG,GAAG;AAC9B,gBAAY;AAAA,EACb,OAAO;AACN,gBAAY;AAAA,EACb;AACA,QAAM,cAAc,YAAY,mBAAmB,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW;AAEzF,SAAO,eAAe,UAAU,WAAW;AAC5C;AAEA,SAAS,mBAAmB,QAAyB,KAAqB;AACzE,MAAI,IAAI,SAAS,GAAG;AACnB,WAAO,OAAO,WAAW,IAAI,KAAK,GAAG,CAAC;AAAA,EACvC;AACD;AAEA,SAAS,oBACR,QACA,OACA,cACO;AACP,MAAI,UAAU,QAAW;AACxB;AAAA,EACD;AAEA,QAAM,eAAe,iBAAiB,KAAK;AAC3C,MAAI,aAAa,aAAa,cAAc;AAC3C,UAAM,IAAI;AAAA,MACT,2CAA2C,aAAa,UAAU,MAAM,YAAY;AAAA,IACrF;AAAA,EACD;AAEA,SAAO,OAAO,aAAa,sBAAsB,YAAY,CAAC;AAC/D;AAEA,SAAS,sBAAsB,OAA2B;AACzD,SAAO,mBAAmB,KAAK,EAC7B,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,QAAQ,EAAE;AACrB;AAEA,eAAsB,uBACrB,WACA,YACA,UACA,QACA,UAA8D,CAAC,GACjC;AAC9B,QAAMC,aAAY,MAAM,gBAAgB;AAExC,QAAM,eACL,OAAO,YAAY,eAAe,QAAQ,IAAI,SAC3C,OAAO,WAAW,IAClB;AAEJ,EAAAC,QAAO,EAAE,MAAM;AAAA,IACd,KAAK;AAAA,IACL;AAAA,EACD,CAAC;AAGD,QAAM,KAAK,IAAID;AAAA,IACd;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,gBACL;AAAA,QACA,QAAQ;AAAA,QACR,SAAS,QAAQ;AAAA,MAClB,IACC;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAKA,KAAG,aAAa;AAChB,QAAM,aAAa,IAAI;AAAA,IACtB;AAAA,EACD;AACA,MAAI,cAAc;AACjB;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,wBACf,WACA,UACA,QACA,cACA,QAIA,UAAiC,CAAC,GACvB;AACX,QAAM,YAAsB,CAAC;AAC7B,YAAU,KAAK,oBAAoB;AACnC,YAAU,KAAK,GAAG,oBAAoB,GAAG,QAAQ,EAAE;AACnD,MAAI,QAAQ;AACX,cAAU,KAAK,GAAG,kBAAkB,GAAG,OAAO,MAAM,EAAE;AACtD,cAAU,KAAK,GAAG,iBAAiB,GAAG,OAAO,OAAO,EAAE;AACtD,QAAI,UAAU,OAAO;AACpB,gBAAU,KAAK,GAAG,iBAAiB,GAAG,UAAU,KAAK,EAAE;AAAA,IACxD;AAAA,EACD;AACA,MAAI,oBAAoB,OAAO,GAAG;AACjC,cAAU,KAAK,2BAA2B;AAAA,EAC3C;AACA,MAAI,QAAQ;AACX,cAAU;AAAA,MACT,GAAG,uBAAuB,GAAG,mBAAmB,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,IACxE;AAAA,EACD;AACA,MAAI,cAAc;AACjB,cAAU;AAAA,MACT,GAAG,yBAAyB,GAAG,mBAAmB,YAAY,CAAC;AAAA,IAChE;AAAA,EACD;AACA,SAAO;AACR;;;AC3ZA,OAAOE,aAAY;AASnB,IAAM,sBAAsB,oBAAI,IAAuC;AAEvE,eAAsB,qBACrB,QAC4B;AAC5B,QAAM,WAAW,YAAY,MAAM;AAGnC,QAAM,kBAAkB,oBAAoB,IAAI,QAAQ;AACxD,MAAI,iBAAiB;AACpB,WAAO;AAAA,EACR;AAGA,QAAM,wBAAwBC;AAAA,IAC7B,YAAY;AACX,MAAAC,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,MACD,CAAC;AAED,YAAM,eAAe,MAAM,YAAY,MAAM;AAE7C,MAAAA,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,gBAAgB,aAAa;AAAA,MAC9B,CAAC;AAED,aAAO;AAAA,IACR;AAAA,IACA;AAAA,MACC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,iBAAiB,CAAC,UAAU;AAK3B,YAAI,MAAM,gBAAgB,GAAG;AAC5B,UAAAA,QAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL;AAAA,YACA,SAAS,MAAM;AAAA,YACf,OAAO,eAAe,KAAK;AAAA,UAC5B,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,sBAAoB,IAAI,UAAU,qBAAqB;AACvD,SAAO;AACR;;;ACrDA,eAAsB,qBACrB,GACA,WACA,WACgC;AAChC,QAAMC,aAAY,MAAM,gBAAgB;AAOxC,QAAM,QAAiB,CAAC;AAExB,SAAO;AAAA,IACN,QAAQ,OAAO,OAAY,aAAwB;AAClD,MAAAC,QAAO,EAAE,MAAM,EAAE,KAAK,8BAA8B,UAAU,CAAC;AAE/D,UAAI,SAAS,eAAe,GAAG;AAC9B,QAAAA,QAAO,EAAE,KAAK;AAAA,UACb,KAAK;AAAA,UACL;AAAA,UACA,YAAY,SAAS;AAAA,QACtB,CAAC;AACD;AAAA,MACD;AAGA,YAAM,WAAW,IAAID,WAAU,WAAW,SAAS;AACnD,YAAM,WAAW;AAGjB,YAAM,iBAAiB,IAAI,QAAc,CAAC,SAAS,WAAW;AAC7D,iBAAS,iBAAiB,QAAQ,MAAM;AACvC,UAAAC,QAAO,EAAE,MAAM;AAAA,YACd,KAAK;AAAA,YACL;AAAA,UACD,CAAC;AAED,cAAI,SAAS,eAAe,GAAG;AAC9B,YAAAA,QAAO,EAAE,KAAK;AAAA,cACb,KAAK;AAAA,cACL;AAAA,cACA,kBAAkB,SAAS;AAAA,YAC5B,CAAC;AACD,qBAAS,MAAM,MAAM,qBAAqB;AAC1C,mBAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC;AAAA,UACD;AACA,kBAAQ;AAAA,QACT,CAAC;AAED,iBAAS,iBAAiB,SAAS,CAAC,UAAU;AAC7C,UAAAA,QAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL;AAAA,UACD,CAAC;AACD,iBAAO,KAAK;AAAA,QACb,CAAC;AAAA,MACF,CAAC;AAGD,YAAM,SAAS,iBAAiB,WAAW,CAACC,WAAU;AACrD,YACC,OAAOA,OAAM,SAAS,YACtBA,OAAM,gBAAgB,aACrB;AACD,mBAAS,KAAKA,OAAM,IAAI;AAAA,QACzB,WAAWA,OAAM,gBAAgB,MAAM;AACtC,UAAAA,OAAM,KAAK,YAAY,EAAE,KAAK,CAAC,WAAW;AACzC,qBAAS,KAAK,MAAM;AAAA,UACrB,CAAC;AAAA,QACF;AAAA,MACD,CAAC;AAED,YAAM,SAAS,iBAAiB,SAAS,CAACA,WAAU;AACnD,QAAAD,QAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL;AAAA,UACA,MAAMC,OAAM;AAAA,UACZ,QAAQA,OAAM;AAAA,QACf,CAAC;AACD,6BAAqB,UAAUA,OAAM,MAAMA,OAAM,MAAM;AAAA,MACxD,CAAC;AAED,YAAM,SAAS,iBAAiB,SAAS,CAAC,UAAU;AACnD,QAAAD,QAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL;AAAA,UACA,OAAO,eAAe,KAAK;AAAA,QAC5B,CAAC;AACD,6BAAqB,UAAU,MAAM,wBAAwB;AAAA,MAC9D,CAAC;AAAA,IACF;AAAA,IAEA,WAAW,OAAO,OAAY,aAAwB;AACrD,UAAI,CAAC,MAAM,YAAY,CAAC,MAAM,gBAAgB;AAC7C,QAAAA,QAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL;AAAA,QACD,CAAC;AACD;AAAA,MACD;AAEA,UAAI;AACH,cAAM,MAAM;AACZ,YAAI,MAAM,SAAS,eAAeD,WAAU,MAAM;AACjD,gBAAM,SAAS,KAAK,MAAM,IAAI;AAAA,QAC/B,OAAO;AACN,UAAAC,QAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL;AAAA,YACA,YAAY,MAAM,SAAS;AAAA,UAC5B,CAAC;AAAA,QACF;AAAA,MACD,SAAS,OAAO;AACf,QAAAA,QAAO,EAAE,MAAM;AAAA,UACd,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QACD,CAAC;AACD;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,SAAS,CAAC,OAAY,aAAwB;AAC7C,MAAAA,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd,UAAU,MAAM;AAAA,MACjB,CAAC;AAED,UAAI,MAAM,UAAU;AACnB,YACC,MAAM,SAAS,eAAeD,WAAU,QACxC,MAAM,SAAS,eAAeA,WAAU,YACvC;AACD,gBAAM,SAAS;AAAA,YACd;AAAA,YACA,MAAM,UAAU;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,SAAS,CAAC,OAAY,aAAwB;AAC7C,MAAAC,QAAO,EAAE,MAAM,EAAE,KAAK,0BAA0B,WAAW,MAAM,CAAC;AAElE,UAAI,MAAM,UAAU;AACnB,YAAI,MAAM,SAAS,eAAeD,WAAU,MAAM;AACjD,gBAAM,SAAS,MAAM,MAAM,wBAAwB;AAAA,QACpD,WAAW,MAAM,SAAS,eAAeA,WAAU,YAAY;AAC9D,gBAAM,SAAS,MAAM;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,qBACR,IACA,MACA,QACO;AACP,MAAI,GAAG,eAAe,GAAG;AACxB,OAAG,MAAM,MAAM,MAAM;AAAA,EACtB,WACC,WAAW,MACV,GAAiB,eAAe,UAAU,MAC1C;AACD,OAAG,MAAM,MAAM,MAAM;AAAA,EACtB;AACD;;;AN3IO,IAAM,4BAAN,MAA+D;AAAA,EACrE;AAAA,EACA;AAAA,EAEA,YAAY,WAAyB;AAIpC,QAAI,aAAa,MAAM,0BAA0B;AAChD,MAAAG,QAAO,EAAE;AAAA,QACR;AAAA,MACD;AACA,gBAAU,wBAAwB;AAAA,IACnC;AAIA,SAAK,UAAU,EAAE,GAAG,UAAU;AAG9B,QAAI,CAAC,UAAU,uBAAuB;AAIrC,WAAK,mBAAmB,qBAAqB,KAAK,OAAO,EAAE;AAAA,QAC1D,CAAC,iBAAiB;AAEjB,cAAI,aAAa,gBAAgB;AAChC,iBAAK,QAAQ,WAAW,aAAa;AACrC,gBAAI,aAAa,iBAAiB;AACjC,mBAAK,QAAQ,YACZ,aAAa;AAAA,YACf;AACA,gBAAI,aAAa,aAAa;AAC7B,mBAAK,QAAQ,QAAQ,aAAa;AAAA,YACnC;AAEA,YAAAA,QAAO,EAAE,KAAK;AAAA,cACb,KAAK;AAAA,cACL,UAAU,aAAa;AAAA,cACvB,WAAW,aAAa;AAAA,cACxB,OAAO,aAAa;AAAA,YACrB,CAAC;AAAA,UACF;AAEA,UAAAA,QAAO,EAAE,KAAK;AAAA,YACb,KAAK;AAAA,YACL,SAAS,aAAa;AAAA,YACtB,SAAS,aAAa;AAAA,YACtB,OAAO,aAAa;AAAA,UACrB,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,EACD,GAAoD;AACnD,UAAM,KAAK;AAGX,UAAM,WAAW,MAAM,SAAS,KAAK,SAAS,MAAM,OAAO;AAC3D,UAAM,QAAQ,SAAS,OAAO,CAAC;AAC/B,QAAI,CAAC,MAAO,QAAO;AAGnB,QAAI,MAAM,SAAS,MAAM;AACxB,MAAAA,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,SAAS,MAAM;AAAA,QACf,eAAe;AAAA,MAChB,CAAC;AACD,aAAO;AAAA,IACR;AAEA,WAAO,iBAAiB,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,EACD,GAAsD;AACrD,UAAM,KAAK;AAEX,IAAAA,QAAO,EAAE,MAAM,EAAE,KAAK,mCAAmC,MAAM,IAAI,CAAC;AAGpE,QAAI;AACH,YAAM,WAAW,MAAM,cAAc,KAAK,SAAS,MAAM,GAAG;AAC5D,YAAM,QAAQ,SAAS,OAAO,CAAC;AAC/B,UAAI,CAAC,MAAO,QAAO;AAEnB,MAAAA,QAAO,EAAE,MAAM;AAAA,QACd,KAAK;AAAA,QACL,SAAS,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACD,CAAC;AAED,aAAO,iBAAiB,KAAK;AAAA,IAC9B,SAAS,OAAO;AACf,UACC,iBAAiB,cAChB,MAAyB,UAAU,WACnC,MAAyB,SAAS,aAClC;AACD,eAAO;AAAA,MACR;AACA,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,MAAM,mBACL,OACuB;AACvB,UAAM,KAAK;AAEX,UAAM,EAAE,MAAM,KAAK,OAAO,YAAY,QAAQ,YAAY,IAAI;AAE9D,IAAAA,QAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACD,CAAC;AAED,UAAM,EAAE,OAAO,QAAQ,IAAI,MAAM,iBAAiB,KAAK,SAAS;AAAA,MAC/D,YAAY;AAAA,MACZ;AAAA,MACA,KAAK,kBAAkB,GAAG;AAAA,MAC1B,sBAAsB,KAAK,QAAQ;AAAA,MACnC,OAAO,aACJ,mBAAmB,iBAAiB,UAAU,CAAC,IAC/C;AAAA,MACH,cAAc,eAAe;AAAA,IAC9B,CAAC;AAED,IAAAA,QAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MACL,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAED,WAAO,iBAAiB,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,YAAY;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAsC;AACrC,UAAM,KAAK;AAEX,IAAAA,QAAO,EAAE,KAAK,EAAE,KAAK,iCAAiC,MAAM,IAAI,CAAC;AAGjE,UAAM,SAAS,MAAM,YAAY,KAAK,SAAS;AAAA,MAC9C,YAAY;AAAA,MACZ;AAAA,MACA,sBAAsB,KAAK,QAAQ;AAAA,MACnC,KAAK,kBAAkB,GAAG;AAAA,MAC1B,OAAO,QACJ,mBAAmB,iBAAiB,KAAK,CAAC,IAC1C;AAAA,MACH,cAAc,eAAe;AAAA,IAC9B,CAAC;AAED,IAAAA,QAAO,EAAE,KAAK;AAAA,MACb,KAAK;AAAA,MACL,SAAS,OAAO,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,IACD,CAAC;AAED,WAAO,iBAAiB,OAAO,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,WAAW,EAAE,KAAK,GAA4C;AACnE,UAAM,KAAK;AAEX,IAAAA,QAAO,EAAE,MAAM,EAAE,KAAK,iCAAiC,KAAK,CAAC;AAE7D,UAAM,WAAW,MAAM,iBAAiB,KAAK,SAAS,IAAI;AAE1D,WAAO,SAAS,OAAO,IAAI,gBAAgB;AAAA,EAC5C;AAAA,EAEA,MAAM,aAAa,SAAgC;AAClD,UAAM,KAAK;AAEX,IAAAA,QAAO,EAAE,KAAK,EAAE,KAAK,mCAAmC,QAAQ,CAAC;AAEjE,UAAM,aAAa,KAAK,SAAS,OAAO;AAExC,IAAAA,QAAO,EAAE,KAAK,EAAE,KAAK,mBAAmB,QAAQ,CAAC;AAAA,EAClD;AAAA,EAEA,MAAM,YACL,QACA,cACA,UAAiC,CAAC,GACd;AACpB,UAAM,KAAK;AAEX,UAAM,OAAO,YAAY,YAAY;AACrC,UAAM,aAAa,KAAK;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,UAAM,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,eAAe,oBAAoB,OAAO,IACvC,wBAAwB,MAAM,IAC9B;AAAA,IACJ;AAEA,WAAO;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,cACL,MACA,QACA,UACA,QACA,UAAiC,CAAC,GACJ;AAC9B,UAAM,KAAK;AAEX,UAAM,aAAa,KAAK;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,WAAO;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACC,GAAG;AAAA,QACH,eAAe,oBAAoB,OAAO,IACvC,wBAAwB,MAAM,IAC9B;AAAA,MACJ;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,gBACL,QACA,UAAiC,CAAC,GAChB;AAClB,UAAM,KAAK;AACX,WAAO,KAAK,0BAA0B,QAAQ,IAAI,OAAO;AAAA,EAC1D;AAAA,EAEA,MAAM,aACL,IACA,cACA,SACoB;AACpB,UAAM,KAAK;AAEX,UAAM,aAAa,KAAK;AAAA,MACvB,EAAE,UAAU,QAAQ;AAAA,MACpB,YAAY,YAAY;AAAA,IACzB;AAEA,WAAO,yBAAyB,KAAK,SAAS,YAAY,YAAY;AAAA,EACvE;AAAA,EAEA,MAAM,eACL,GACA,MACA,SACA,UACA,QACoB;AAlVtB;AAmVE,UAAM,KAAK;AAEX,UAAM,oBAAmB,gBAAK,SAAQ,wBAAb;AACzB,IAAAC,WAAU,kBAAkB,6BAA6B;AAEzD,UAAM,WAAW,YAAY,KAAK,OAAO;AACzC,UAAM,WAAW,eAAe,UAAU,IAAI;AAC9C,UAAM,aAAa,SAAS,QAAQ,WAAW,OAAO;AAEtD,IAAAD,QAAO,EAAE,MAAM;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAGD,UAAM,YAAY;AAAA,MACjB,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACC,QAAQ;AAAA,QACR;AAAA,MACD;AAAA,IACD;AACA,UAAM,OAAO,MAAM,qBAAqB,GAAG,YAAY,SAAS;AAEhE,WAAO,MAAM,iBAAiB,MAAM,IAAI,EAAE,GAAG,SAAS,CAAC;AAAA,EACxD;AAAA,EAEA,MAAM,MAAM,SAAiB,KAAyC;AACrE,UAAM,KAAK;AAEX,IAAAA,QAAO,EAAE,MAAM,EAAE,KAAK,mCAAmC,IAAI,CAAC;AAE9D,UAAM,WAAW,MAAM;AAAA,MACtB,KAAK;AAAA,MACL;AAAA,MACA,IAAI,YAAY,MAAM,EAAE,OAAO,GAAG;AAAA,IACnC;AAEA,WAAO,SAAS;AAAA,EACjB;AAAA,EAEA,MAAM,WACL,UACA,OACiC;AACjC,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACnE;AAAA,EAEA,MAAM,WACL,UACA,UACgB;AAChB,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACnE;AAAA,EAEA,MAAM,cAAc,UAAkB,OAAoC;AACzE,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACtE;AAAA,EAEA,MAAM,cACL,UACA,QACA,MACgB;AAChB,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACtE;AAAA,EAEA,qBAAgD;AAC/C,WAAO,EAAE,YAAY,CAAC,EAAE;AAAA,EACzB;AAAA,EAEA,uBAAuB,qBAAgD;AACtE,SAAK,QAAQ,sBAAsB;AAAA,EACpC;AAAA,EAEA,0BACC,QACA,MACA,UAAiC,CAAC,GACzB;AACT,UAAM,WAAW,YAAY,KAAK,OAAO;AAEzC,QACC,oBAAoB,OAAO,KAC3B,wBAAwB,MAAM,KAC9B,8BAA8B,IAAI,GACjC;AACD,aAAO,eAAe,UAAU,IAAI;AAAA,IACrC;AAEA,QAAI,cAAc,QAAQ;AACzB,aAAO;AAAA,QACN;AAAA,QACA,OAAO;AAAA,QACP,KAAK,QAAQ;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,QAAI,cAAc,QAAQ;AACzB,aAAO;AAAA,QACN;AAAA,QACA,OAAO,SAAS;AAAA,QAChB,KAAK,QAAQ;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,QAAI,eAAe,UAAU,uBAAuB,QAAQ;AAC3D,aAAO;AAAA,QACN;AAAA,QACA,KAAK,QAAQ;AAAA,QACb;AAAA,QACA,KAAK,QAAQ;AAAA,QACb;AAAA,QACA,KAAK,QAAQ;AAAA,QACb;AAAA,QACA,uBAAuB,SACpB,KAAK,QAAQ,WACb;AAAA,QACH;AAAA,MACD;AAAA,IACD;AAEA,QAAI,YAAY,QAAQ;AACvB,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AAEA,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC3D;AACD;AAEA,SAAS,8BAA8B,MAAuB;AAC7D,SACC,uBAAuB,IAAI,KAC3B,cAAc,MAAM,YAAY,KAChC,cAAc,MAAM,mBAAmB,KACvC,KAAK,WAAW,qBAAqB;AAEvC;AAEA,SAAS,cAAc,MAAc,UAA2B;AAC/D,SAAO,SAAS,YAAY,KAAK,WAAW,GAAG,QAAQ,GAAG;AAC3D;AAEA,SAAS,uBAAuB,MAAuB;AACtD,QAAM,WAAW,KAAK,MAAM,WAAW,MAAM;AAC7C,SACC,KAAK,WAAW,UAAU,MACzB,SAAS,WAAW,KACpB,SAAS,WAAW,GAAG,KACvB,SAAS,WAAW,GAAG;AAE1B;AAEA,SAAS,wBAAwB,QAA2C;AAC3E,MAAI,cAAc,QAAQ;AACzB,WAAO,OAAO;AAAA,EACf;AACA,MAAI,cAAc,QAAQ;AACzB,WAAO,OAAO,SAAS;AAAA,EACxB;AACA,SAAO;AACR;AAEA,SAAS,YAAY,KAAsB;AAC1C,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,SAAO,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM;AACpC;AAEA,SAAS,iBAAiB,OAA8B;AACvD,SAAO;AAAA,IACN,SAAS,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,KAAK,oBAAoB,MAAM,GAAG;AAAA,IAClC,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM,YAAY;AAAA,IAC3B,eAAe,MAAM,kBAAkB;AAAA,IACvC,SAAS,MAAM,YAAY;AAAA,IAC3B,WAAW,MAAM,cAAc;AAAA,IAC/B,OAAO,MAAM,SAAS;AAAA,EACvB;AACD;","names":["invariant","bare","DEFAULT_CONFIG","readCbor","writeCbor","readInit","writeInit","read0","write0","read1","write1","readError","writeError","readActionResponse","writeActionResponse","readEvent","writeEvent","readToClientBody","writeToClientBody","readToClient","writeToClient","encodeToClient","decodeToClient","readActionRequest","writeActionRequest","readSubscriptionRequest","writeSubscriptionRequest","readToServerBody","writeToServerBody","readToServer","writeToServer","encodeToServer","decodeToServer","readHttpActionRequest","writeHttpActionRequest","encodeHttpActionRequest","decodeHttpActionRequest","readHttpActionResponse","writeHttpActionResponse","encodeHttpActionResponse","decodeHttpActionResponse","readHttpResponseError","writeHttpResponseError","encodeHttpResponseError","decodeHttpResponseError","readHttpResolveResponse","writeHttpResolveResponse","encodeHttpResolveResponse","decodeHttpResolveResponse","bare","DEFAULT_CONFIG","readCbor","writeCbor","readInit","writeInit","read0","write0","read1","write1","readError","writeError","readActionResponse","writeActionResponse","readEvent","writeEvent","readToClientBody","writeToClientBody","readToClient","writeToClient","encodeToClient","decodeToClient","readActionRequest","writeActionRequest","readSubscriptionRequest","writeSubscriptionRequest","readToServerBody","writeToServerBody","readToServer","writeToServer","encodeToServer","decodeToServer","readHttpActionRequest","writeHttpActionRequest","encodeHttpActionRequest","decodeHttpActionRequest","readHttpActionResponse","writeHttpActionResponse","encodeHttpActionResponse","decodeHttpActionResponse","readHttpResponseError","writeHttpResponseError","encodeHttpResponseError","decodeHttpResponseError","readHttpResolveResponse","writeHttpResolveResponse","encodeHttpResolveResponse","decodeHttpResolveResponse","bare","DEFAULT_CONFIG","readCbor","writeCbor","read0","write0","readInit","writeInit","read1","write1","read2","write2","read3","write3","readError","writeError","readActionResponse","writeActionResponse","readEvent","writeEvent","readToClientBody","writeToClientBody","readToClient","writeToClient","encodeToClient","decodeToClient","readActionRequest","writeActionRequest","readSubscriptionRequest","writeSubscriptionRequest","readToServerBody","writeToServerBody","readToServer","writeToServer","encodeToServer","decodeToServer","readHttpActionRequest","writeHttpActionRequest","encodeHttpActionRequest","decodeHttpActionRequest","readHttpActionResponse","writeHttpActionResponse","encodeHttpActionResponse","decodeHttpActionResponse","read4","write4","readHttpQueueSendRequest","writeHttpQueueSendRequest","encodeHttpQueueSendRequest","decodeHttpQueueSendRequest","readHttpQueueSendResponse","writeHttpQueueSendResponse","encodeHttpQueueSendResponse","decodeHttpQueueSendResponse","readHttpResponseError","writeHttpResponseError","encodeHttpResponseError","decodeHttpResponseError","readHttpResolveResponse","writeHttpResolveResponse","encodeHttpResolveResponse","decodeHttpResolveResponse","decodeToServer","encodeToServer","decodeToClient","encodeToClient","decodeHttpActionRequest","encodeHttpActionRequest","decodeHttpActionResponse","encodeHttpActionResponse","decodeHttpQueueSendRequest","encodeHttpQueueSendRequest","decodeHttpQueueSendResponse","encodeHttpQueueSendResponse","decodeHttpResponseError","encodeHttpResponseError","decodeHttpResolveResponse","encodeHttpResolveResponse","contentType","bare","bare","bare","invariant","id","z","z","z","logger","logger","z","invariant","WebSocket","logger","pRetry","pRetry","logger","WebSocket","logger","event","logger","invariant"]}
|