netra-sdk 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts","../src/utils/context-propagation.ts","../src/api/http-client.ts","../src/api/usage/client.ts","../src/api/usage/api.ts","../src/config.ts","../src/utils/pattern-matching.ts","../src/processors/localfiltering-span-processor.ts","../src/processors/root-span-processor.ts","../src/types.ts","../src/session-manager.ts","../src/span-wrapper.ts","../src/api/evaluation/client.ts","../src/api/evaluation/utils.ts","../src/api/evaluation/api.ts","../src/api/evaluation/models.ts","../src/api/evaluation/context.ts","../src/api/dashboard/client.ts","../src/api/dashboard/models.ts","../src/api/dashboard/api.ts","../src/api/prompts/client.ts","../src/api/prompts/api.ts","../src/processors/instrumentation-span-processor.ts","../src/processors/llm-trace-identifier-span-processor.ts","../src/processors/scrubbing-span-processor.ts","../src/processors/session-span-processor.ts","../src/processors/root-instrument-filter-processor.ts","../src/processors/span-io-processor.ts","../src/instrumentation/span-attributes.ts","../src/instrumentation/utils.ts","../src/instrumentation/anthropic/utils.ts","../src/instrumentation/anthropic/version.ts","../src/instrumentation/anthropic/wrappers.ts","../src/instrumentation/anthropic/index.ts","../src/instrumentation/google-genai/version.ts","../src/instrumentation/google-genai/utils.ts","../src/instrumentation/google-genai/wrappers.ts","../src/instrumentation/google-genai/index.ts","../src/instrumentation/groq/version.ts","../src/instrumentation/groq/utils.ts","../src/instrumentation/groq/wrappers.ts","../src/instrumentation/groq/index.ts","../src/instrumentation/langgraph/version.ts","../node_modules/@langchain/core/dist/_virtual/rolldown_runtime.js","../node_modules/@langchain/core/src/load/map_keys.ts","../node_modules/@langchain/core/src/load/validation.ts","../node_modules/@langchain/core/src/load/serializable.ts","../node_modules/@langchain/core/src/utils/env.ts","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/index.ts","../src/instrumentation/mistralai/version.ts","../src/instrumentation/mistralai/utils.ts","../src/instrumentation/mistralai/wrappers.ts","../src/instrumentation/mistralai/index.ts","../src/instrumentation/openai/version.ts","../src/instrumentation/openai/utils.ts","../src/instrumentation/openai/wrappers.ts","../src/instrumentation/openai/index.ts","../src/instrumentation/openai-agents/constants.ts","../src/instrumentation/openai-agents/utils.ts","../src/instrumentation/openai-agents/attributes.ts","../src/instrumentation/openai-agents/processor.ts","../src/instrumentation/openai-agents/version.ts","../src/instrumentation/openai-agents/index.ts","../src/instrumentation/typeorm/utils.ts","../src/instrumentation/typeorm/wrappers.ts","../src/instrumentation/typeorm/version.ts","../src/instrumentation/typeorm/index.ts","../src/exporters/utils.ts","../src/exporters/filteringSpanExporter.ts","../src/exporters/trialAwareOtlpExporter.ts","../src/instrumentation/index.ts","../src/simulation/task.ts","../src/simulation/utils.ts","../src/simulation/client.ts","../src/simulation/api.ts","../src/tracer.ts","../src/decorators.ts","../src/index.ts"],"names":["config","trace","span","NetraInstruments","isEmpty","otelContext","propagation","SpanType","ConversationType","context","task","EntryStatus","RunStatus","SpanKind","Scope","ChartType","Measure","Aggregation","GroupBy","DimensionField","Operator","FilterType","FilterField","SpanAttributes","setRequestAttributes","setResponseAttributes","SpanStatusCode","value","__version__","safeStringify","isTraceContentEnabled","CHAT_SPAN_NAME","chatWrapper","INSTRUMENTATION_NAME","INSTRUMENTS","isInstrumented","createRequire","STREAM_ENABLED_REQUESTS","AsyncStreamingWrapper","originalMethods","key: string","map?: SerializedKeyAlias","snakeCase","fields: SerializedFields","mapper: typeof keyToJson","mapped: SerializedFields","obj: Record<string, unknown>","obj: unknown","id: string[]","value: unknown","pathSet: WeakSet<object>","result: Record<string, unknown>","obj: T","root: SerializedFields","secretsMap: { [key: string]: string }","current: any","serializableClass: typeof Serializable","Serializable","kwargs?: SerializedFields","aliases: { [key: string]: string }","secrets: { [key: string]: string }","read: any","write: any","escapedKwargs: SerializedFields","env: string","runtimeEnvironment: RuntimeEnvironment | undefined","name: string","x: BaseCallbackHandler","input?: BaseCallbackHandlerInput","methods: CallbackHandlerMethods","x: unknown","getContextManager","EMBEDDING_SPAN_NAME","endTime","StreamingWrapper","chatStreamWrapper","embeddingsWrapper","openAIClasses","setUsageAttributes","require","ExportResultCode","BaggagePropagator","resolved","executeTask","LOG_PREFIX","axios","pLimit","Tracer","serializeValue","tracer"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Centralized logger for the Netra SDK.\n *\n * Call Logger.setDebugMode(true) once during Netra.init() so all modules\n * automatically respect the configured debug flag without passing Config around.\n */\n\nconst PREFIX = \"[Netra]\";\n\nexport class Logger {\n private static _debugMode = false;\n\n static setDebugMode(enabled: boolean): void {\n this._debugMode = enabled;\n }\n\n private static get isDebug(): boolean {\n return (\n this._debugMode ||\n [\"1\", \"true\"].includes((process.env.NETRA_DEBUG ?? \"\").toLowerCase())\n );\n }\n\n static debug(...args: any[]): void {\n if (this.isDebug) console.debug(PREFIX, ...args);\n }\n\n static info(...args: any[]): void {\n if (this.isDebug) console.info(PREFIX, ...args);\n }\n\n static warn(...args: any[]): void {\n if (this.isDebug) console.warn(PREFIX, ...args);\n }\n\n static error(...args: any[]): void {\n console.error(PREFIX, ...args);\n }\n\n static log(...args: any[]): void {\n if (this.isDebug) console.log(PREFIX, ...args);\n }\n}\n","/**\n * Public helpers for distributed tracing context propagation.\n *\n * These utilities let users extract incoming W3C Trace Context from HTTP\n * headers and run code within that context so that all child spans (LLM\n * calls, database queries, outgoing HTTP, etc.) are linked to the upstream\n * trace.\n *\n * When `@opentelemetry/instrumentation-http` + `@opentelemetry/instrumentation-express`\n * are installed and working, incoming context extraction happens automatically.\n * These helpers cover cases where auto-instrumentation is unavailable (e.g.\n * ESM module loading order issues, missing peer dependencies, or non-Express\n * frameworks).\n */\n\nimport { context, propagation, Context } from \"@opentelemetry/api\";\nimport { Logger } from \"../logger\";\n\n/**\n * Inject W3C trace context (traceparent/tracestate) from the currently active\n * span into a copy of the provided headers object.\n *\n * This is used internally by HTTP clients to propagate distributed trace\n * context on outgoing requests. The injection is best-effort — if propagation\n * fails for any reason, the original headers are returned unmodified.\n *\n * @param headers - Base headers to merge trace context into.\n * @returns A new headers object containing the original headers plus trace context.\n */\nexport function injectTraceContextHeaders(\n headers: Record<string, string>,\n): Record<string, string> {\n const carrier: Record<string, string> = { ...headers };\n try {\n propagation.inject(context.active(), carrier);\n } catch {\n Logger.warn(\"netra: Failed to inject trace context headers\");\n return headers;\n }\n return carrier;\n}\n\n/**\n * Extract an OpenTelemetry context from HTTP request headers.\n *\n * Handles the common Node.js header shapes -- plain strings, string arrays,\n * and `undefined` values -- and normalises keys to lower-case before passing\n * them to the global W3C propagator.\n *\n * @param headers - Incoming HTTP request headers (e.g. `req.headers`).\n * @returns An OTel `Context` carrying the extracted span context and baggage.\n */\nexport function extractContextFromHeaders(\n headers: Record<string, string | string[] | undefined>,\n): Context {\n const carrier: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n carrier[key.toLowerCase()] = value;\n } else if (Array.isArray(value) && value.length > 0) {\n carrier[key.toLowerCase()] = value[0];\n }\n }\n return propagation.extract(context.active(), carrier);\n}\n\n/**\n * Run a function within a context extracted from HTTP headers.\n *\n * All spans created inside `fn` will be children of the trace described by the\n * incoming `traceparent` / `tracestate` headers, enabling end-to-end\n * distributed tracing across service boundaries.\n *\n * @param headers - Incoming HTTP request headers (e.g. `req.headers`).\n * @param fn - The function to execute within the extracted context.\n * May be sync or async -- the return value is forwarded as-is.\n * @returns The return value of `fn`.\n *\n * @example\n * ```ts\n * import { runWithExtractedContext } from \"netra\";\n *\n * app.post(\"/api/chat\", async (req, res) => {\n * await runWithExtractedContext(req.headers, async () => {\n * const result = await myAgent(req.body.message);\n * res.json(result);\n * });\n * });\n * ```\n */\nexport function runWithExtractedContext<T>(\n headers: Record<string, string | string[] | undefined>,\n fn: () => T,\n): T {\n const extractedCtx = extractContextFromHeaders(headers);\n return context.with(extractedCtx, fn);\n}\n\n/**\n * Express/Connect-compatible middleware that extracts W3C Trace Context from\n * incoming request headers and runs all downstream handlers within the\n * extracted context.\n *\n * This is the recommended way to enable distributed tracing for Express\n * servers when `@opentelemetry/instrumentation-http` is not available or not\n * working (e.g. due to ESM module loading order with `tsx`). It is the\n * TypeScript equivalent of the Python SDK's `NetraFastAPIMiddleware`.\n *\n * **Note:** In Express 4.x, async errors thrown inside downstream handlers are\n * not automatically caught by the Express error handler. Wrap async route\n * handlers with your own try/catch or use Express 5 which supports async\n * error propagation natively.\n *\n * @returns An Express middleware function.\n *\n * @example\n * ```ts\n * import express from \"express\";\n * import { netraExpressMiddleware } from \"netra-sdk\";\n *\n * const app = express();\n * app.use(netraExpressMiddleware());\n *\n * app.post(\"/api/chat\", async (req, res) => {\n * // Spans created here are children of the upstream trace\n * const result = await myAgent(req.body.message);\n * res.json(result);\n * });\n * ```\n */\nexport function netraExpressMiddleware(): (\n req: { headers: Record<string, string | string[] | undefined> },\n res: unknown,\n next: () => void,\n) => void {\n return (req, _res, next) => {\n const extractedCtx = extractContextFromHeaders(req.headers);\n context.with(extractedCtx, next);\n };\n}\n","/**\n * Base HTTP client for Netra API calls\n */\n\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { injectTraceContextHeaders } from \"../utils/context-propagation\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n headers: Record<string, string>;\n timeout: number;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n ok: boolean;\n}\n\nexport class NetraHttpClient {\n private baseUrl: string;\n private headers: Record<string, string>;\n private timeout: number;\n private initialized: boolean = false;\n\n constructor(config: Config, timeoutEnvVar: string, defaultTimeout: number) {\n const endpoint = config.otlpEndpoint?.trim() || \"\";\n if (!endpoint) {\n Logger.error(\n \"netra: NETRA_OTLP_ENDPOINT is required for API calls\"\n );\n this.baseUrl = \"\";\n this.headers = {};\n this.timeout = defaultTimeout;\n return;\n }\n\n this.baseUrl = this.resolveBaseUrl(endpoint);\n this.headers = this.buildHeaders(config);\n this.timeout = this.getTimeout(timeoutEnvVar, defaultTimeout);\n this.initialized = true;\n }\n\n private resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.replace(/\\/+$/, \"\");\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n private buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n headers[\"Content-Type\"] = \"application/json\";\n return headers;\n }\n\n private getTimeout(envVar: string, defaultValue: number): number {\n const envValue = process.env[envVar];\n if (!envValue) {\n return defaultValue;\n }\n const parsed = parseFloat(envValue);\n if (isNaN(parsed)) {\n Logger.warn(\n `netra: Invalid ${envVar} value '${envValue}', using default ${defaultValue}`\n );\n return defaultValue;\n }\n return parsed;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async get<T = any>(\n path: string,\n params?: Record<string, string | number | undefined>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: injectTraceContextHeaders(this.headers),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: GET ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n async post<T = any>(\n path: string,\n body?: Record<string, any>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"POST\",\n headers: injectTraceContextHeaders(this.headers),\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: POST ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n /**\n * Extract data from nested response format\n * Netra API typically returns { data: { data: actualData } }\n */\n extractData<T>(response: HttpResponse<any>, defaultValue: T): T {\n if (!response.ok) {\n return defaultValue;\n }\n const data = response.data;\n if (data && typeof data === \"object\" && \"data\" in data) {\n return data.data ?? defaultValue;\n }\n return data ?? defaultValue;\n }\n}\n","/**\n * Internal HTTP client for Usage APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class UsageHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_USAGE_TIMEOUT\", 10.0);\n }\n\n async getSessionUsage(\n sessionId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch session usage '${sessionId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/sessions/${sessionId}`, params);\n return this.extractData(response, {});\n }\n\n async getTenantUsage(\n tenantId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch tenant usage '${tenantId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/tenants/${tenantId}`, params);\n return this.extractData(response, {});\n }\n\n async listTraces(params: {\n startTime?: string;\n endTime?: string;\n traceId?: string;\n sessionId?: string;\n userId?: string;\n tenantId?: string;\n limit?: number;\n cursor?: string;\n direction?: string;\n sortField?: string;\n sortOrder?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\"netra.usage: Usage client is not initialized; cannot list traces\");\n return {};\n }\n\n const payload: Record<string, any> = {};\n\n if (params.startTime) payload.startTime = params.startTime;\n if (params.endTime) payload.endTime = params.endTime;\n\n // Build filters array\n const filters: Array<{\n field: string;\n operator: string;\n type: string;\n value: string;\n }> = [];\n\n const filterMapping: Record<string, string | undefined> = {\n trace_id: params.traceId,\n session_id: params.sessionId,\n user_id: params.userId,\n tenant_id: params.tenantId,\n };\n\n for (const [field, value] of Object.entries(filterMapping)) {\n if (value !== undefined) {\n filters.push({\n field,\n operator: \"equals\",\n type: \"string\",\n value,\n });\n }\n }\n\n payload.filters = filters;\n\n // Build pagination object\n const pagination: Record<string, any> = {};\n if (params.limit !== undefined) pagination.limit = params.limit;\n if (params.cursor !== undefined) pagination.cursor = params.cursor;\n if (params.direction !== undefined) pagination.direction = params.direction;\n if (Object.keys(pagination).length > 0) {\n payload.pagination = pagination;\n }\n\n if (params.sortField !== undefined) payload.sortField = params.sortField;\n if (params.sortOrder !== undefined) payload.sortOrder = params.sortOrder;\n\n const response = await this.post(\"/sdk/traces\", payload);\n return response.ok ? response.data : {};\n }\n\n async listSpansByTraceId(params: {\n traceId: string;\n cursor?: string;\n direction?: string;\n limit?: number;\n spanName?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot list spans for trace '${params.traceId}'`\n );\n return {};\n }\n\n const queryParams: Record<string, string | number | undefined> = {};\n if (params.cursor !== undefined) queryParams.cursor = params.cursor;\n if (params.direction !== undefined) queryParams.direction = params.direction;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.spanName !== undefined) queryParams.spanName = params.spanName;\n\n const response = await this.get(\n `/sdk/traces/${params.traceId}/spans`,\n queryParams\n );\n return response.ok ? response.data : {};\n }\n}\n","/**\n * Public Usage API\n * Exposed as Netra.usage\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { UsageHttpClient } from \"./client\";\nimport {\n ListSpansParams,\n ListTracesParams,\n SessionUsageData,\n SpansPage,\n TenantUsageData,\n TraceSpan,\n TracesPage,\n TraceSummary,\n} from \"./models\";\n\nexport class Usage {\n private config: Config;\n private client: UsageHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new UsageHttpClient(config);\n }\n\n /**\n * Get session usage data\n * @param sessionId Session identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Session usage data or null on error\n */\n async getSessionUsage(\n sessionId: string,\n startTime: string,\n endTime: string\n ): Promise<SessionUsageData | null> {\n if (!sessionId) {\n Logger.error(\"netra.usage: session_id is required to fetch session usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch session usage\"\n );\n return null;\n }\n\n const result = await this.client.getSessionUsage(sessionId, startTime, endTime);\n const sessionIdFromResult = result.session_id;\n if (!sessionIdFromResult) {\n return null;\n }\n\n return {\n sessionId: sessionIdFromResult,\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * Get tenant usage data\n * @param tenantId Tenant identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Tenant usage data or null on error\n */\n async getTenantUsage(\n tenantId: string,\n startTime: string,\n endTime: string\n ): Promise<TenantUsageData | null> {\n if (!tenantId) {\n Logger.error(\"netra.usage: tenant_id is required to fetch tenant usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch tenant usage\"\n );\n return null;\n }\n\n const result = await this.client.getTenantUsage(tenantId, startTime, endTime);\n const tenantIdFromResult = result.tenant_id;\n if (!tenantIdFromResult) {\n return null;\n }\n\n return {\n tenantId: tenantIdFromResult,\n organisationId: result.organisation_id ?? \"\",\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n sessionCount: result.sessionsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * List all traces\n * @param params List traces parameters\n * @returns Traces page or null on error\n */\n async listTraces(params: ListTracesParams): Promise<TracesPage | null> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to list traces\");\n return null;\n }\n\n const result = await this.client.listTraces({\n startTime: params.startTime,\n endTime: params.endTime,\n traceId: params.traceId,\n sessionId: params.sessionId,\n userId: params.userId,\n tenantId: params.tenantId,\n limit: params.limit,\n cursor: params.cursor,\n direction: params.direction,\n sortField: params.sortField,\n sortOrder: params.sortOrder,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const traces: TraceSummary[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSummary(item));\n\n return {\n traces,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * List all spans for a given trace\n * @param params List spans parameters\n * @returns Spans page or null on error\n */\n async listSpansByTraceId(params: ListSpansParams): Promise<SpansPage | null> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to list spans\");\n return null;\n }\n\n const result = await this.client.listSpansByTraceId({\n traceId: params.traceId,\n cursor: params.cursor,\n direction: params.direction,\n limit: params.limit,\n spanName: params.spanName,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const spans: TraceSpan[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSpan(item));\n\n return {\n spans,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * Iterate over traces using cursor-based pagination\n * @param params List traces parameters\n * @returns Async generator yielding TraceSummary items\n */\n async *iterTraces(\n params: ListTracesParams\n ): AsyncGenerator<TraceSummary, void, unknown> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to iterate traces\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listTraces({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const trace of page.traces) {\n yield trace;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n /**\n * Iterate over spans for a given trace using cursor-based pagination\n * @param params List spans parameters\n * @returns Async generator yielding TraceSpan items\n */\n async *iterSpansByTraceId(\n params: ListSpansParams\n ): AsyncGenerator<TraceSpan, void, unknown> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to iterate spans\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listSpansByTraceId({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const span of page.spans) {\n yield span;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n private mapToTraceSummary(item: any): TraceSummary {\n return {\n id: item.id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n latencyMs: item.latency_ms ?? 0,\n startTime: item.start_time ?? \"\",\n endTime: item.end_time ?? \"\",\n cursor: item.cursor ?? \"\",\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n models: item.models,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n hasViolation: item.has_violation,\n violations: item.violations,\n hasError: item.has_error,\n service: item.service,\n };\n }\n\n private mapToTraceSpan(item: any): TraceSpan {\n return {\n id: item.id ?? \"\",\n traceId: item.trace_id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n parentSpanId: item.parent_span_id,\n latencyMs: item.latency_ms,\n startTimeMs: item.start_time_ms,\n endTimeMs: item.end_time_ms,\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n modelName: item.model_name,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n piiActions: item.pii_actions,\n hasViolation: item.has_violation,\n violations: item.violations,\n violationActions: item.violation_actions,\n status: item.status,\n attributes: item.attributes,\n events: item.events,\n links: item.links,\n resources: item.resources,\n metadata: item.metadata,\n hasError: item.has_error,\n createdAt: item.created_at ?? \"\",\n cursor: item.cursor ?? \"\",\n };\n }\n}\n","/**\n * Configuration management for Netra SDK\n */\n\nimport { Logger } from \"./logger\";\n\nexport interface NetraConfig {\n appName?: string;\n headers?: string | Record<string, string>;\n disableBatch?: boolean;\n traceContent?: boolean;\n debugMode?: boolean;\n enableRootSpan?: boolean;\n resourceAttributes?: Record<string, any>;\n environment?: string;\n enableScrubbing?: boolean;\n blockedSpans?: string[];\n instruments?: Set<NetraInstruments>;\n blockInstruments?: Set<NetraInstruments>;\n rootInstruments?: Set<NetraInstruments>;\n}\n\nexport enum NetraInstruments {\n /**\n * Sentinel value: when included in `instruments` or `rootInstruments`,\n * restores the legacy behaviour where every available instrumentation is\n * enabled automatically (no curated default list is applied).\n */\n ALL = \"__all__\",\n\n // LLM Providers\n OPENAI = \"openai\",\n GOOGLE_GENERATIVE_AI = \"google_genai\",\n MISTRAL = \"mistral_ai\",\n GROQ = \"groq\",\n VERTEX_AI = \"vertexai\",\n TOGETHER = \"together\",\n ANTHROPIC = \"anthropic\",\n\n // AI Frameworks\n LANGCHAIN = \"langchain\",\n LANGGRAPH = \"langgraph\",\n LLAMA_INDEX = \"llama_index\",\n OPENAI_AGENTS = \"openai_agents\",\n\n // Vector DBs\n PINECONE = \"pinecone\",\n QDRANT = \"qdrant\",\n CHROMADB = \"chromadb\",\n\n // HTTP Clients\n HTTP = \"http\",\n\n // Databases\n PRISMA = \"prisma\",\n TYPEORM = \"typeorm\",\n\n // Web Frameworks\n EXPRESS = \"express\",\n}\n\n/**\n * Subset of DEFAULT_INSTRUMENTS allowed to produce root-level spans.\n * Covers core LLM/AI providers and agent frameworks.\n */\nexport const DEFAULT_INSTRUMENTS_FOR_ROOT: Set<NetraInstruments> = new Set([\n // LLM / AI providers\n NetraInstruments.OPENAI,\n NetraInstruments.ANTHROPIC,\n NetraInstruments.GROQ,\n NetraInstruments.MISTRAL,\n NetraInstruments.GOOGLE_GENERATIVE_AI,\n NetraInstruments.VERTEX_AI,\n NetraInstruments.TOGETHER,\n // AI frameworks\n NetraInstruments.LANGCHAIN,\n NetraInstruments.LANGGRAPH,\n NetraInstruments.LLAMA_INDEX,\n]);\n\n/**\n * Full set of instrumentations installed by default. Includes the root\n * defaults plus common vector DBs, HTTP clients, and database libraries.\n */\nexport const DEFAULT_INSTRUMENTS: Set<NetraInstruments> = new Set([\n ...DEFAULT_INSTRUMENTS_FOR_ROOT,\n // Vector DBs\n NetraInstruments.PINECONE,\n NetraInstruments.QDRANT,\n NetraInstruments.CHROMADB,\n // HTTP\n NetraInstruments.HTTP,\n // Databases\n NetraInstruments.PRISMA,\n NetraInstruments.TYPEORM,\n // Web Frameworks\n NetraInstruments.EXPRESS,\n]);\n\nexport class Config {\n static readonly SDK_NAME = \"netra\";\n static readonly LIBRARY_NAME = \"netra\";\n static readonly LIBRARY_VERSION = \"1.0.0\";\n static readonly TRIAL_BLOCK_DURATION_SECONDS = 900; // 15 minutes\n static readonly ATTRIBUTE_MAX_LEN = parseInt(\n process.env.NETRA_ATTRIBUTE_MAX_LEN || \"50000\",\n );\n static readonly CONVERSATION_MAX_LEN = parseInt(\n process.env.NETRA_CONVERSATION_CONTENT_MAX_LEN || \"50000\",\n );\n\n appName: string;\n otlpEndpoint?: string;\n apiKey?: string;\n headers: Record<string, string>;\n disableBatch: boolean;\n traceContent: boolean;\n debugMode: boolean;\n enableRootSpan: boolean;\n enableScrubbing: boolean;\n environment: string;\n resourceAttributes: Record<string, any>;\n blockedSpans?: string[];\n\n constructor(config: NetraConfig = {}) {\n this.appName = this._getAppName(config.appName);\n this.otlpEndpoint = this._getOtlpEndpoint();\n this.apiKey = process.env.NETRA_API_KEY;\n this.headers = this._parseHeaders(config.headers);\n this.disableBatch = this._getBoolConfig(\n config.disableBatch,\n \"NETRA_DISABLE_BATCH\",\n false,\n );\n this.traceContent = this._getBoolConfig(\n config.traceContent,\n \"NETRA_TRACE_CONTENT\",\n true,\n );\n this.debugMode = this._getBoolConfig(\n config.debugMode,\n \"NETRA_DEBUG\",\n false,\n );\n this.enableRootSpan = this._getBoolConfig(\n config.enableRootSpan,\n \"NETRA_ENABLE_ROOT_SPAN\",\n false,\n );\n this.enableScrubbing = this._getBoolConfig(\n config.enableScrubbing,\n \"NETRA_ENABLE_SCRUBBING\",\n false,\n );\n this.environment = config.environment || process.env.NETRA_ENV || \"local\";\n this.resourceAttributes = this._getResourceAttributes(\n config.resourceAttributes,\n );\n this.blockedSpans = config.blockedSpans;\n\n this._validateApiKey();\n this._setupAuthentication();\n this._setTraceContentEnv();\n }\n\n private _getAppName(appName?: string): string {\n return (\n appName ||\n process.env.NETRA_APP_NAME ||\n process.env.OTEL_SERVICE_NAME ||\n process.env.npm_package_name ||\n \"llm_tracing_service\"\n );\n }\n\n private _getOtlpEndpoint(): string | undefined {\n return (\n process.env.NETRA_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT\n );\n }\n\n private _parseHeaders(\n headers?: string | Record<string, string>,\n ): Record<string, string> {\n if (!headers) {\n const envHeaders = process.env.NETRA_HEADERS;\n if (envHeaders) {\n return this._parseEnvHeaders(envHeaders);\n }\n return {};\n }\n\n if (typeof headers === \"string\") {\n return this._parseEnvHeaders(headers);\n }\n\n return headers;\n }\n\n private _parseEnvHeaders(headers: string): Record<string, string> {\n const result: Record<string, string> = {};\n const pairs = headers.split(\",\");\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split(\"=\");\n if (key && valueParts.length > 0) {\n result[key.trim()] = valueParts.join(\"=\").trim();\n }\n }\n return result;\n }\n\n private _validateApiKey(): void {\n if (\n this.otlpEndpoint &&\n this.otlpEndpoint.toLowerCase().includes(\"getnetra\") &&\n !this.apiKey\n ) {\n Logger.error(\n \"Error: Missing Netra API key, go to netra dashboard to create one\",\n );\n Logger.error(\"Set the NETRA_API_KEY environment variable to the key\");\n }\n }\n\n private _setupAuthentication(): void {\n if (!this.apiKey || !this.otlpEndpoint) {\n return;\n }\n\n const isNetra = this.otlpEndpoint.toLowerCase().includes(\"getnetra\");\n const authKey = isNetra ? \"x-api-key\" : \"Authorization\";\n const authValue = isNetra ? this.apiKey : `Bearer ${this.apiKey}`;\n\n if (!this.headers[authKey]) {\n this.headers[authKey] = authValue;\n }\n }\n\n private _getBoolConfig(\n param: boolean | undefined,\n envVar: string,\n defaultValue: boolean,\n ): boolean {\n if (param !== undefined) {\n return param;\n }\n\n const envValue = process.env[envVar];\n if (envValue === undefined) {\n return defaultValue;\n }\n\n return [\"1\", \"true\"].includes(envValue.toLowerCase());\n }\n\n private _getResourceAttributes(\n resourceAttributes?: Record<string, any>,\n ): Record<string, any> {\n if (resourceAttributes !== undefined) {\n return resourceAttributes;\n }\n\n const envRa = process.env.NETRA_RESOURCE_ATTRS;\n if (!envRa) {\n return {};\n }\n\n try {\n return JSON.parse(envRa);\n } catch (e) {\n Logger.warn(`Failed to parse NETRA_RESOURCE_ATTRS: ${e}`);\n return {};\n }\n }\n\n private _setTraceContentEnv(): void {\n process.env.TRACELOOP_TRACE_CONTENT = this.traceContent ? \"true\" : \"false\";\n }\n\n /**\n * Format the OTLP endpoint URL by appending /v1/traces if not already present\n */\n public formatOtlpEndpoint(): any {\n if (!this.otlpEndpoint) {\n return undefined;\n }\n\n const url = this.otlpEndpoint.trim();\n\n // Remove trailing slash if present\n const cleanUrl = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n\n // Append /v1/traces if not already present\n if (!cleanUrl.endsWith(\"/v1/traces\")) {\n return `${cleanUrl}/v1/traces`;\n }\n\n return cleanUrl;\n }\n\n /**\n * Set Traceloop environment variables based on Netra config.\n * This ensures the Traceloop SDK picks up our configuration.\n */\n public setTraceloopEnv(): void {\n // Set TRACELOOP_BASE_URL so Traceloop SDK uses our endpoint\n if (this.otlpEndpoint && !process.env.TRACELOOP_BASE_URL) {\n process.env.TRACELOOP_BASE_URL = this.otlpEndpoint;\n }\n\n // Set TRACELOOP_API_KEY if we have one\n if (this.apiKey && !process.env.TRACELOOP_API_KEY) {\n process.env.TRACELOOP_API_KEY = this.apiKey;\n }\n\n // Set headers for Traceloop\n if (\n Object.keys(this.headers).length > 0 &&\n !process.env.TRACELOOP_HEADERS\n ) {\n const headerStr = Object.entries(this.headers)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n process.env.TRACELOOP_HEADERS = headerStr;\n }\n }\n}\n","/**\n * Shared span-name pattern matching utilities for span blocking.\n *\n * Pattern forms, determined by the position of `*`:\n * - Exact: \"openai.chat\" → name === \"openai.chat\"\n * - Prefix: \"openai.*\" → name.startsWith(\"openai.\")\n * - Suffix: \"*.chat\" → name.endsWith(\".chat\")\n * - Contains: \"*openai*\" → name.includes(\"openai\")\n * - Wildcard: \"*\" → matches everything\n */\n\nexport interface CompiledPatterns {\n matchAll: boolean;\n exact: Set<string>;\n prefixes: string[];\n suffixes: string[];\n contains: string[];\n isEmpty: boolean;\n}\n\n/**\n * Compile a list of raw pattern strings into a CompiledPatterns object.\n * Empty strings are skipped.\n */\nexport function compilePatterns(patterns: string[]): CompiledPatterns {\n const exact = new Set<string>();\n const prefixes: string[] = [];\n const suffixes: string[] = [];\n const contains: string[] = [];\n let matchAll = false;\n\n for (const p of patterns) {\n if (!p) continue;\n\n if (p === \"*\") {\n matchAll = true;\n } else if (p.startsWith(\"*\") && p.endsWith(\"*\")) {\n const inner = p.slice(1, -1);\n if (inner) contains.push(inner);\n } else if (p.endsWith(\"*\")) {\n prefixes.push(p.slice(0, -1));\n } else if (p.startsWith(\"*\")) {\n suffixes.push(p.slice(1));\n } else {\n exact.add(p);\n }\n }\n\n const isEmpty = !matchAll && exact.size === 0 && prefixes.length === 0 &&\n suffixes.length === 0 && contains.length === 0;\n\n return { matchAll, exact, prefixes, suffixes, contains, isEmpty };\n}\n\n/**\n * Test whether `name` matches any pattern in a compiled set.\n */\nexport function matchesAnyPattern(\n name: string,\n compiled: CompiledPatterns,\n): boolean {\n if (compiled.matchAll) return true;\n if (compiled.exact.has(name)) return true;\n\n for (const pref of compiled.prefixes) {\n if (name.startsWith(pref)) return true;\n }\n\n for (const suf of compiled.suffixes) {\n if (name.endsWith(suf)) return true;\n }\n\n for (const sub of compiled.contains) {\n if (name.includes(sub)) return true;\n }\n\n return false;\n}\n","import {\n context as otelContext,\n propagation,\n ROOT_CONTEXT,\n SpanContext,\n trace,\n} from \"@opentelemetry/api\";\nimport type { Baggage, Context, Span } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { compilePatterns, matchesAnyPattern, CompiledPatterns } from \"../utils/pattern-matching\";\n\nexport const LOCAL_BLOCKED_SPANS_BAGGAGE_KEY = \"netra.local_blocked_spans\";\nexport const LOCAL_BLOCKED_SPANS_ATTR_KEY = \"netra.local_blocked_spans\";\n\nfunction decodePatterns(raw: string): string[] | null {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === \"string\")) {\n return parsed.filter(Boolean);\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T>,\n): Promise<T>;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => T,\n): T;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T> | T,\n): Promise<T> | T {\n const incoming = patterns.filter(Boolean);\n const activeCtx = otelContext.active();\n\n const baggage: Baggage =\n propagation.getBaggage(activeCtx) ??\n propagation.getBaggage(ROOT_CONTEXT) ??\n propagation.createBaggage();\n\n const existingRaw = baggage.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n const existingPatterns = existingRaw ? (decodePatterns(existingRaw) ?? []) : [];\n const merged = [...new Set([...existingPatterns, ...incoming])];\n const payload = JSON.stringify(merged);\n\n const nextBaggage = baggage.setEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY, {\n value: payload,\n });\n\n const nextCtx = propagation.setBaggage(activeCtx, nextBaggage);\n return otelContext.with(nextCtx, fn);\n}\n\nexport class LocalFilteringSpanProcessor implements SpanProcessor {\n private static readonly MAX_ENTRIES = 10_000;\n\n /**\n * Instance-scoped registry: spanId → parent SpanContext.\n *\n * Populated in onStart when a span's name matches blocking patterns\n * (both global and local). Shared with FilteringSpanExporter via\n * constructor injection (as a ReadonlyMap) for reparenting.\n *\n * Eviction is size-based (FIFO) rather than per-span onEnd deletion to\n * avoid a race condition: with SimpleSpanProcessor, onEnd fires before\n * export(), so deleting here would remove entries the exporter still needs.\n *\n * This map solves a timing problem with SimpleSpanProcessor: a child span may\n * be exported (and need reparenting) before its blocked parent is exported.\n * Pre-registering the blocked parent here lets the exporter find it immediately.\n */\n private readonly _blockedParentMap = new Map<string, SpanContext | undefined>();\n\n get blockedParentMap(): ReadonlyMap<string, SpanContext | undefined> {\n return this._blockedParentMap;\n }\n\n private readonly globalCompiled: CompiledPatterns;\n\n /** Cache for compiled local pattern sets from baggage. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 50;\n\n constructor(globalPatterns: string[] = []) {\n this.globalCompiled = compilePatterns(globalPatterns);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n // The OTel API `Span` interface does not expose `.name`, but the SDK's\n // concrete Span class (sdk-trace-base >=1.x) stores it as a public field.\n // This cast relies on that implementation detail.\n const name = (span as any).name as string | undefined;\n if (!name) return;\n\n let blocked = false;\n\n if (matchesAnyPattern(name, this.globalCompiled)) {\n blocked = true;\n }\n\n const bag = propagation.getBaggage(parentContext);\n const raw = bag?.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n\n if (raw) {\n const patterns = decodePatterns(raw);\n if (patterns && patterns.length > 0) {\n span.setAttribute(LOCAL_BLOCKED_SPANS_ATTR_KEY, patterns);\n\n const compiled = this.getCompiledLocalPatterns(raw, patterns);\n if (matchesAnyPattern(name, compiled)) {\n span.setAttribute(\"netra.local_blocked\", true);\n blocked = true;\n }\n }\n }\n\n if (blocked) {\n const spanId = span.spanContext().spanId;\n const parentSpan = trace.getSpan(parentContext);\n const parentSpanContext = parentSpan?.spanContext();\n this._blockedParentMap.set(spanId, parentSpanContext);\n this.evictIfNeeded();\n }\n } catch (e) {\n Logger.debug(\"LocalFilteringSpanProcessor.onStart error:\", e);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n // No-op: cleanup is handled by size-based eviction in onStart and by\n // FilteringSpanExporter.evictRememberedIfNeeded() to avoid race\n // conditions with out-of-order export batches.\n }\n\n shutdown(): Promise<void> {\n this._blockedParentMap.clear();\n this.localPatternCache.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private getCompiledLocalPatterns(cacheKey: string, patterns: string[]): CompiledPatterns {\n let compiled = this.localPatternCache.get(cacheKey);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(cacheKey, compiled);\n if (this.localPatternCache.size > LocalFilteringSpanProcessor.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictIfNeeded(): void {\n if (this._blockedParentMap.size <= LocalFilteringSpanProcessor.MAX_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-insertion eviction\n const toRemove = Math.max(\n this._blockedParentMap.size - LocalFilteringSpanProcessor.MAX_ENTRIES,\n Math.ceil(LocalFilteringSpanProcessor.MAX_ENTRIES * 0.25),\n );\n const keys = Array.from(this._blockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this._blockedParentMap.delete(key);\n }\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n/**\n * Tracks the root span for each trace keyed by traceId.\n * Exposes static helpers so other processors and session utilities\n * Register this processor AFTER LlmTraceIdentifierSpanProcessor so that\n * on_end cleanup happens after the LLM processor has finished marking the\n * root span.\n */\nexport class RootSpanProcessor implements SpanProcessor {\n private static readonly _rootSpans = new Map<string, Span>();\n\n static getRootSpanByTraceId(traceId: string): Span | undefined {\n return RootSpanProcessor._rootSpans.get(traceId);\n }\n\n static getRootSpan(span: Span): Span | undefined {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return undefined;\n return RootSpanProcessor._rootSpans.get(ctx.traceId);\n }\n\n static isRootSpanForTrace(traceId: string, spanId: string): boolean {\n const root = RootSpanProcessor._rootSpans.get(traceId);\n return root?.spanContext().spanId === spanId;\n }\n\n /**\n * Set an attribute on the root span of the currently active trace.\n * Resolves the root span via the active OTel context\n */\n static setAttributeOnRootSpan(key: string, value: string): void {\n try {\n const active = trace.getActiveSpan();\n if (!active) {\n Logger.warn(`setAttributeOnRootSpan: no active span`);\n return;\n }\n const spanCtx = active.spanContext();\n if (!trace.isSpanContextValid(spanCtx)) {\n Logger.warn(`setAttributeOnRootSpan: active span context is invalid`);\n return;\n }\n const root = RootSpanProcessor._rootSpans.get(spanCtx.traceId);\n if (!root) {\n Logger.warn(`setAttributeOnRootSpan: no root span found for current trace`);\n return;\n }\n root.setAttribute(key, value);\n } catch (e) {\n Logger.error(`setAttributeOnRootSpan: failed to set '${key}':`, e);\n }\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n if (!this._isRootSpan(parentContext)) return;\n // setdefault: first span with no valid parent wins\n if (!RootSpanProcessor._rootSpans.has(ctx.traceId)) {\n RootSpanProcessor._rootSpans.set(ctx.traceId, span);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onStart: unexpected error:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n const root = RootSpanProcessor._rootSpans.get(ctx.traceId);\n if (root?.spanContext().spanId === ctx.spanId) {\n RootSpanProcessor._rootSpans.delete(ctx.traceId);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onEnd: unexpected error:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n RootSpanProcessor._rootSpans.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isRootSpan(parentContext: Context | undefined): boolean {\n const parentSpan = parentContext ? trace.getSpan(parentContext) : undefined;\n if (!parentSpan) return true;\n const parentCtx = parentSpan.spanContext();\n return !parentCtx || !trace.isSpanContextValid(parentCtx);\n }\n}\n","/**\n * Type definitions for Netra SDK\n */\n\nimport { SpanWrapper } from \"./span-wrapper\";\n\nexport enum SpanType {\n SPAN = \"SPAN\",\n GENERATION = \"GENERATION\",\n TOOL = \"TOOL\",\n EMBEDDING = \"EMBEDDING\",\n AGENT = \"AGENT\",\n HANDOFF = \"HANDOFF\",\n GUARDRAIL = \"GUARDRAIL\",\n}\n\nexport enum ConversationType {\n INPUT = \"input\",\n OUTPUT = \"output\",\n}\n\nexport interface UsageModel {\n model: string;\n usage_type: string;\n units_used?: number;\n cost_in_usd?: number;\n}\n\nexport interface ActionModel {\n start_time: string;\n action: string;\n action_type: string;\n success: boolean;\n affected_records?: Array<{ record_id: string; record_type: string }>;\n metadata?: Record<string, string>;\n}\n\nexport type SpanAttributes = Record<string, string | string[] | boolean>;\n\nexport interface SpanOptions {\n attributes?: SpanAttributes;\n moduleName?: string;\n asType?: SpanType;\n /** Patterns for blocking descendant spans (e.g. [\"http.*\", \"*.resolve\"]) */\n blockedSpans?: string[];\n}\n\nexport interface DecoratorOptions {\n name?: string;\n asType?: SpanType;\n}\n\nexport type SpanCallback<T> = (span: SpanWrapper) => T;\n","/**\n * Session Manager — entity stack tracking and span annotation utilities.\n *\n * Uses AsyncLocalStorage for per-async-scope entity stacks (workflow, task,\n * agent, span) so concurrent requests stay isolated. All span resolution and\n * attribute writes delegate to OpenTelemetry's native APIs; no shadow copies\n * of spans are kept here.\n */\n\nimport { Span, context, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { RootSpanProcessor } from \"./processors/root-span-processor\";\nimport { ConversationType } from \"./types\";\n\nexport { ConversationType };\n\nconst MODULE_NAME = \"netra.session-manager\";\n\n/**\n * Per-async-scope state: entity name stacks and a name→span registry.\n * Deliberately minimal — live span references belong to OTel's context, not here.\n */\ninterface EntityContext {\n workflowStack: string[];\n taskStack: string[];\n agentStack: string[];\n spanStack: string[];\n spansByName: Map<string, Span[]>;\n}\n\nconst entityStorage = new AsyncLocalStorage<EntityContext>();\n\n// Global fallback for single-threaded / non-async entry points\nconst globalFallbackContext: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n};\n\nfunction getEntityContext(): EntityContext {\n return entityStorage.getStore() ?? globalFallbackContext;\n}\n\n/**\n * Run `fn` with a fresh, isolated entity context.\n * Use this when spawning concurrent async operations that should have\n * independent entity stacks.\n */\nexport function runWithEntityContext<T>(fn: () => T): T {\n const ctx: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n };\n return entityStorage.run(ctx, fn);\n}\n\n// Internal serialization\n\nfunction serializeValue(value: any): string {\n if (typeof value === \"string\") {\n return value.substring(0, Config.ATTRIBUTE_MAX_LEN);\n }\n return JSON.stringify(value).substring(0, Config.ATTRIBUTE_MAX_LEN);\n}\n\n// SessionManager\n\nexport class SessionManager {\n\n // Span registry (name → stack)\n\n static registerSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name) ?? [];\n stack.push(span);\n ctx.spansByName.set(name, stack);\n } catch (e) {\n Logger.error(`Failed to register span '${name}':`, e);\n }\n }\n\n static unregisterSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n if (!stack) return;\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i] === span) {\n stack.splice(i, 1);\n break;\n }\n }\n if (stack.length === 0) ctx.spansByName.delete(name);\n } catch (e) {\n Logger.error(`Failed to unregister span '${name}':`, e);\n }\n }\n\n static getSpanByName(name: string): Span | undefined {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n return stack?.length ? stack[stack.length - 1] : undefined;\n }\n\n // Entity stacks (workflow / task / agent / span)\n\n static pushEntity(entityType: string, entityName: string): void {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": ctx.workflowStack.push(entityName); break;\n case \"task\": ctx.taskStack.push(entityName); break;\n case \"agent\": ctx.agentStack.push(entityName); break;\n case \"span\": ctx.spanStack.push(entityName); break;\n }\n }\n\n static popEntity(entityType: string): string | undefined {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": return ctx.workflowStack.pop();\n case \"task\": return ctx.taskStack.pop();\n case \"agent\": return ctx.agentStack.pop();\n case \"span\": return ctx.spanStack.pop();\n default: return undefined;\n }\n }\n\n static getCurrentEntityAttributes(): Record<string, string> {\n const ctx = getEntityContext();\n const attrs: Record<string, string> = {};\n const last = <T>(arr: T[]) => arr[arr.length - 1];\n if (ctx.workflowStack.length) attrs[`${Config.LIBRARY_NAME}.workflow.name`] = last(ctx.workflowStack)!;\n if (ctx.taskStack.length) attrs[`${Config.LIBRARY_NAME}.task.name`] = last(ctx.taskStack)!;\n if (ctx.agentStack.length) attrs[`${Config.LIBRARY_NAME}.agent.name`] = last(ctx.agentStack)!;\n if (ctx.spanStack.length) attrs[`${Config.LIBRARY_NAME}.span.name`] = last(ctx.spanStack)!;\n return attrs;\n }\n\n static clearEntityStacks(): void {\n const ctx = getEntityContext();\n ctx.workflowStack = [];\n ctx.taskStack = [];\n ctx.agentStack = [];\n ctx.spanStack = [];\n }\n\n // OTel context helpers\n\n /**\n * Returns the trace ID of the currently active span, or undefined if none.\n */\n static getTraceId(): string | undefined {\n const ctx = trace.getActiveSpan()?.spanContext();\n return ctx && trace.isSpanContextValid(ctx) ? ctx.traceId : undefined;\n }\n\n // Span attribute writers\n\n /**\n * Set an attribute on the currently active OTel span.\n */\n static setAttributeOnActiveSpan(key: string, value: any): void {\n try {\n const span = trace.getActiveSpan();\n if (span?.isRecording()) {\n span.setAttribute(key, typeof value === \"string\" ? value : JSON.stringify(value));\n } else {\n Logger.warn(`setAttributeOnActiveSpan: no recording span for key '${key}'`);\n }\n } catch (e) {\n Logger.error(`Failed to set attribute '${key}' on active span:`, e);\n }\n }\n\n /**\n * Set input on the currently active span.\n * Writes to `netra.user.input` so that SpanIOProcessor can promote it\n * to `input` at span end, giving user-supplied values the highest priority.\n */\n static setInput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\"netra.user.input\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setInput failed:\", e);\n }\n }\n\n /**\n * Set output on the currently active span.\n * Writes to `netra.user.output` so that SpanIOProcessor can promote it\n * to `output` at span end, giving user-supplied values the highest priority.\n */\n static setOutput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\"netra.user.output\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setOutput failed:\", e);\n }\n }\n\n /**\n * Set input on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.input` so SpanIOProcessor promotes it at span end.\n */\n static setRootInput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\"netra.user.input\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setRootInput failed:\", e);\n }\n }\n\n /**\n * Set output on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.output` so SpanIOProcessor promotes it at span end.\n */\n static setRootOutput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\"netra.user.output\", serializeValue(value));\n } catch (e) {\n Logger.error(\"setRootOutput failed:\", e);\n }\n }\n\n // Events and conversations\n\n static setCustomEvent(name: string, attributes: Record<string, any>): void {\n try {\n const span = trace.getActiveSpan();\n const timestamp = Date.now();\n if (span?.isRecording()) {\n span.addEvent(name, attributes, timestamp);\n } else {\n // Fallback: create a short-lived span to carry the event\n trace.getTracer(MODULE_NAME).startActiveSpan(\n `${Config.LIBRARY_NAME}.${name}`,\n { attributes },\n context.active(),\n (newSpan: Span) => {\n newSpan.addEvent(name, attributes, timestamp);\n newSpan.end();\n },\n );\n }\n } catch (e) {\n Logger.error(`setCustomEvent '${name}' failed:`, e);\n }\n }\n\n /**\n * Append a conversation entry to the active span's `conversation` attribute.\n *\n * Reads and re-serialises the existing JSON array so entries accumulate\n * rather than overwrite — matching the Python SDK's behaviour.\n * Writes directly to the span's internal attribute store to bypass OTel's\n * per-attribute length truncation on the final payload.\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n if (!role || !content) {\n Logger.error(\"addConversation: role and content must be provided\");\n return;\n }\n\n try {\n const span = trace.getActiveSpan();\n if (!span?.isRecording()) {\n Logger.warn(\"addConversation: no active recording span\");\n return;\n }\n\n // Read existing entries from the span's internal attribute store\n let existing: Array<{\n type: string;\n role: string;\n content: string | Record<string, any>;\n format: string;\n }> = [];\n try {\n const raw = (span as any)._attributes?.[\"conversation\"];\n if (typeof raw === \"string\") {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) existing = parsed;\n }\n } catch (e) {\n Logger.warn(\"addConversation: failed to parse existing conversation, starting fresh:\", e);\n }\n\n const maxLen = Config.CONVERSATION_MAX_LEN;\n const processedContent =\n typeof content === \"string\" ? content.substring(0, maxLen) : content;\n\n existing.push({\n type: conversationType,\n role,\n content: processedContent,\n format: typeof processedContent === \"string\" ? \"text\" : \"json\",\n });\n\n const payload = JSON.stringify(existing);\n\n // Bypass per-attribute truncation by writing to the internal store directly\n const internalAttrs = (span as any)._attributes;\n if (internalAttrs && typeof internalAttrs === \"object\") {\n internalAttrs[\"conversation\"] = payload;\n } else {\n span.setAttribute(\"conversation\", payload);\n }\n } catch (e) {\n Logger.error(\"addConversation failed:\", e);\n }\n }\n}\n","/**\n * Span Wrapper for custom span tracking\n */\n\nimport {\n context,\n propagation,\n Span,\n SpanKind,\n SpanStatusCode,\n trace,\n} from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { LOCAL_BLOCKED_SPANS_BAGGAGE_KEY } from \"./processors/localfiltering-span-processor\";\nimport { SessionManager } from \"./session-manager\";\nimport { ActionModel, SpanAttributes, SpanType, UsageModel } from \"./types\";\n\nexport class SpanWrapper {\n private name: string;\n private attributes: SpanAttributes;\n private moduleName: string;\n private startTime?: number;\n private endTime?: number;\n private status: string = \"pending\";\n private errorMessage?: string;\n private span?: Span;\n private activeContext?: ReturnType<typeof context.active>;\n private tracer?: any;\n private blockedSpanPatterns?: string[];\n\n constructor(\n name: string,\n attributes: SpanAttributes = {},\n moduleName: string = \"netra_sdk\",\n asType: SpanType = SpanType.SPAN,\n tracer?: any,\n blockedSpanPatterns?: string[],\n ) {\n this.name = name;\n this.attributes = { ...attributes };\n this.moduleName = moduleName;\n this.attributes[\"netra.span.type\"] = asType;\n this.tracer = tracer;\n this.blockedSpanPatterns = blockedSpanPatterns;\n }\n\n start(): this {\n this.startTime = Date.now();\n\n const tracer = this.tracer || trace.getTracer(this.moduleName);\n\n let ctx = context.active();\n\n if (this.blockedSpanPatterns && this.blockedSpanPatterns.length > 0) {\n const patterns = this.blockedSpanPatterns.filter(Boolean);\n if (patterns.length > 0) {\n const existingBaggage =\n propagation.getBaggage(ctx) ?? propagation.createBaggage();\n const existingRaw = existingBaggage.getEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n )?.value;\n const existingPatterns = this.decodeBaggagePatterns(existingRaw);\n const merged = [...new Set([...existingPatterns, ...patterns])];\n const payload = JSON.stringify(merged);\n const updatedBaggage = existingBaggage.setEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n { value: payload },\n );\n ctx = propagation.setBaggage(ctx, updatedBaggage);\n }\n }\n\n this.span = tracer.startSpan(\n this.name,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n ...this.attributes,\n \"netra.span.name\": this.name,\n },\n },\n ctx,\n );\n\n // Store the context with this span (and any baggage) so withActive()\n // propagates both parent-span and blocking baggage to child spans.\n if (this.span) {\n this.activeContext = trace.setSpan(ctx, this.span);\n SessionManager.registerSpan(this.name, this.span);\n }\n\n return this;\n }\n\n end(): this {\n this.endTime = Date.now();\n const durationMs =\n this.startTime && this.endTime\n ? (this.endTime - this.startTime) / 1000\n : undefined;\n\n if (durationMs !== undefined) {\n this.setAttribute(\n `${Config.LIBRARY_NAME}.duration_ms`,\n durationMs.toFixed(2),\n );\n }\n\n if (this.status === \"pending\") {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n this.setAttribute(`${Config.LIBRARY_NAME}.status`, this.status);\n\n if (this.span) {\n for (const [key, value] of Object.entries(this.attributes)) {\n if (value !== undefined) {\n this.span.setAttribute(key, value);\n }\n }\n\n SessionManager.unregisterSpan(this.name, this.span);\n this.span.end();\n }\n\n // Release the stored context so it can be GC'd\n this.activeContext = undefined;\n\n return this;\n }\n\n setAttribute(key: string, value: string | string[] | boolean): this {\n this.attributes[key] = value;\n if (this.span) {\n this.span.setAttribute(key, value);\n }\n return this;\n }\n\n /**\n * Run a function with this span set as the active span in the OTel context.\n * Child spans created inside `fn` will have this span as their parent and will\n * also inherit any blocking baggage set via `blockedSpans`. Works for both\n * sync and async functions — context.with() passes through the return value as-is.\n */\n withActive<T>(fn: () => T): T {\n if (!this.span) return fn();\n\n const ctx =\n this.activeContext ?? trace.setSpan(context.active(), this.span);\n return context.with(ctx, fn);\n }\n\n setPrompt(prompt: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.prompt`, prompt);\n }\n\n setNegativePrompt(negativePrompt: string): this {\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.negative_prompt`,\n negativePrompt,\n );\n }\n\n setUsage(usage: UsageModel[]): this {\n const usageJson = JSON.stringify(usage);\n return this.setAttribute(`${Config.LIBRARY_NAME}.usage`, usageJson);\n }\n\n setAction(action: ActionModel[]): this {\n const actionJson = JSON.stringify(action);\n return this.setAttribute(`${Config.LIBRARY_NAME}.action`, actionJson);\n }\n\n setModel(model: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.model`, model);\n }\n\n setLlmSystem(system: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.llm_system`, system);\n }\n\n setError(errorMessage: string): this {\n this.status = \"error\";\n this.errorMessage = errorMessage;\n if (this.span) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errorMessage,\n });\n }\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.error_message`,\n errorMessage,\n );\n }\n\n setSuccess(): this {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n return this;\n }\n\n addEvent(name: string, attributes?: Record<string, string>): this {\n if (this.span) {\n this.span.addEvent(name, attributes);\n }\n return this;\n }\n\n getCurrentSpan(): Span | undefined {\n return this.span;\n }\n\n private decodeBaggagePatterns(raw: string | undefined): string[] {\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.filter((v: unknown) => typeof v === \"string\" && v);\n }\n } catch {\n // ignore malformed baggage\n }\n return [];\n }\n}\n","/**\n * Internal HTTP client for Evaluation APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport { EntryStatus, EvaluationScore, RunStatus } from \"./models\";\n\nexport class EvaluationHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_EVALUATION_TIMEOUT\", 10.0);\n }\n\n /**\n * Fetch dataset items for a dataset id\n */\n async getDataset(datasetId: string): Promise<any[]> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot fetch dataset '${datasetId}'`,\n );\n return [];\n }\n\n const response = await this.get(`/evaluations/dataset/${datasetId}`);\n return this.extractData(response, []);\n }\n\n /**\n * Create a run for a dataset\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: Record<string, any>[],\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot create run for dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const payload = {\n name,\n datasetId,\n localEvaluators: evaluatorsConfig,\n };\n const response = await this.post(\"/evaluations/test_run\", payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Create an empty dataset and return backend data\n */\n async createDataset(name: string, tags?: string[]): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot create dataset\",\n );\n return { success: false };\n }\n\n const payload = {\n name,\n tags: tags ?? [],\n };\n\n const response = await this.post(\"/evaluations/dataset\", payload);\n \n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Add a single item to an existing dataset\n */\n async addDatasetItem(\n datasetId: string,\n itemPayload: Record<string, any>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot add item to dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const response = await this.post(\n `/evaluations/dataset/${datasetId}/items`,\n itemPayload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Fetch test run results by run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot fetch run\",\n );\n return { success: false };\n }\n\n try {\n const response = await this.get(`/evaluations/run/${runId}`);\n if (!response.ok) {\n const errorMessage =\n response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}': ${errorMessage}`,\n );\n return null;\n }\n const data = this.extractData(response, null);\n if (data !== null) {\n Logger.info(\"netra.evaluation: Run fetched successfully\");\n }\n return data;\n } catch {\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}'`,\n );\n return null;\n }\n }\n\n /**\n * Submit a new run item to the backend\n */\n async postRunItem(runId: string, payload: Record<string, any>): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run item\",\n );\n return { success: false };\n }\n\n const response = await this.post(`/evaluations/run/${runId}/item`, payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\" && \"item\" in data) {\n const runItem = data.item;\n if (runItem && typeof runItem === \"object\" && \"id\" in runItem) {\n return runItem.id;\n }\n }\n return data;\n }\n\n /**\n * Submit local evaluations result\n */\n async submitLocalEvaluations(\n runId: string,\n testRunItemId: string,\n evaluatorResults: Array<Record<string, any>>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot submit local evaluations\",\n );\n return { success: false };\n }\n\n const payload = { evaluatorResults };\n const response = await this.post(\n `/evaluations/run/${runId}/item/${testRunItemId}/local-evaluations`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Submit the run status\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run status\",\n );\n return { success: false };\n }\n\n const payload = { status };\n const response = await this.post(\n `/evaluations/run/${runId}/status`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\") {\n Logger.info(\"netra.evaluation: Completed test run successfully\");\n }\n return data;\n }\n\n /**\n * Check if a span exists in the backend\n */\n async getSpanById(spanId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot get span\",\n );\n return null;\n }\n\n try {\n const response = await this.get(`sdk/traces/spans/${spanId}`);\n if (!response.ok) {\n return null;\n }\n return this.extractData(response, null);\n } catch {\n return null;\n }\n }\n\n /**\n * Wait until a span is available in the backend\n * Polls the GET /spans/:id endpoint to verify span availability before running evaluators\n */\n async waitForSpanIngestion(\n spanId?: string,\n timeoutSeconds: number = 60.0,\n pollIntervalSeconds: number = 1.0,\n initialDelaySeconds: number = 0.5,\n ): Promise<boolean> {\n if (!spanId) {\n return false;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelaySeconds * 1000),\n );\n\n const deadline = Date.now() + timeoutSeconds * 1000;\n while (Date.now() < deadline) {\n const spanData = await this.getSpanById(spanId);\n if (spanData !== null) {\n return true;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, pollIntervalSeconds * 1000),\n );\n }\n\n return false;\n }\n}\n","/**\n * Evaluation Utility Functions\n */\n\nimport { propagation, context as otelContext } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { DatasetRecord, EvaluatorConfig, ItemContext } from \"./models\";\n\n/**\n * Get the session ID from the OpenTelemetry baggage\n */\nexport function getSessionIdFromBaggage(): string | undefined {\n const ctx = otelContext.active();\n const baggageObj = propagation.getBaggage(ctx);\n const sessionId = baggageObj?.getEntry(\"session_id\")?.value;\n if (typeof sessionId === \"string\" && sessionId) {\n return sessionId;\n }\n return undefined;\n}\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string\n */\nexport function formatTraceId(traceId: string): string {\n // Ensure it's 32 characters long, pad with zeros if needed\n return traceId.padStart(32, \"0\");\n}\n\n/**\n * Format the span ID as a 16-digit hexadecimal string\n */\nexport function formatSpanId(spanId: string): string {\n // Ensure it's 16 characters long, pad with zeros if needed\n return spanId.padStart(16, \"0\");\n}\n\n/**\n * Run a callable function that may be sync or async\n */\nexport async function runCallableMaybeAsync<T>(\n fn: (...args: any[]) => T | Promise<T>,\n ...args: any[]\n): Promise<T> {\n const result = fn(...args);\n if (result instanceof Promise) {\n return await result;\n }\n return result;\n}\n\n/**\n * Extract evaluator configuration from an evaluator object\n */\nexport function extractEvaluatorConfig(evaluator: any): EvaluatorConfig | null {\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"config\" in evaluator)\n ) {\n return null;\n }\n\n const config = evaluator.config;\n\n if (!config || typeof config !== \"object\") {\n return null;\n }\n\n return config as EvaluatorConfig;\n}\n\n/**\n * Execute a task function (sync or async) and return (output, status)\n */\nexport async function executeTask(\n task: (input: any) => any | Promise<any>,\n itemInput: any,\n): Promise<{ output: any; status: string }> {\n try {\n const result = await runCallableMaybeAsync(task, itemInput);\n return { output: result, status: \"completed\" };\n } catch (error) {\n return { output: String(error), status: \"failed\" };\n }\n}\n\n/**\n * Run a single evaluator and return normalized result\n */\nexport async function runSingleEvaluator(params: {\n evaluator: any;\n itemInput: any;\n taskOutput: any;\n expectedOutput: any;\n metadata?: Record<string, any>;\n}): Promise<Record<string, any> | null> {\n const { evaluator, itemInput, taskOutput, expectedOutput, metadata } =\n params;\n\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"evaluate\" in evaluator)\n ) {\n return null;\n }\n\n let expectedName: string | null = null;\n const config = extractEvaluatorConfig(evaluator);\n if (config) {\n expectedName = config.name;\n }\n\n const context = {\n input: itemInput,\n taskOutput: taskOutput,\n expectedOutput: expectedOutput,\n metadata: metadata,\n };\n\n let result = evaluator.evaluate(context);\n if (result instanceof Promise) {\n result = await result;\n }\n\n const resultPayload = {\n evaluatorName: result.evaluatorName,\n result: result.result,\n isPassed: result.isPassed,\n reason: result.reason,\n };\n\n if (expectedName && resultPayload.evaluatorName !== expectedName) {\n return null;\n }\n\n return resultPayload;\n}\n\n/**\n * Build a payload dict for posting item status\n */\nexport function buildItemPayload(\n ctx: ItemContext,\n status: string,\n includeOutput: boolean = false,\n): Record<string, any> {\n const payload: Record<string, any> = {\n traceId: ctx.traceId,\n sessionId: ctx.sessionId,\n };\n\n if (ctx.datasetItemId) {\n payload.datasetItemId = ctx.datasetItemId;\n } else {\n payload.input = ctx.itemInput;\n payload.expectedOutput = ctx.expectedOutput;\n if (ctx.metadata) {\n payload.metadata = ctx.metadata;\n }\n }\n\n if (ctx.status === \"failed\") {\n payload.status = \"failed\";\n return payload;\n }\n\n if (includeOutput) {\n payload.taskOutput = ctx.taskOutput;\n }\n\n return payload;\n}\n\n/**\n * Validate required inputs for runTestSuite\n */\nexport function validateRunInputs(\n name: string,\n data: any,\n task: ((arg: any) => any) | null | undefined,\n): boolean {\n if (!name) {\n Logger.error(\"netra.evaluation: run name is required\");\n return false;\n }\n if (!data) {\n Logger.error(\"netra.evaluation: data is required\");\n return false;\n }\n if (task == null) {\n Logger.error(\"netra.evaluation: task function is required\");\n return false;\n }\n return true;\n}\n\n/**\n * Extract datasetId from items if they are DatasetRecords\n */\nexport function extractDatasetId(items: any[]): string | null {\n if (items.length > 0 && isDatasetRecord(items[0])) {\n return items[0].datasetId;\n }\n return null;\n}\n\n/**\n * Type guard for DatasetRecord\n */\nfunction isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n}\n\n/**\n * Build evaluator configurations from evaluator objects\n */\nexport function buildEvaluatorsConfig(\n evaluators?: any[] | null,\n): EvaluatorConfig[] {\n const configs: EvaluatorConfig[] = [];\n if (!evaluators || evaluators.length === 0) {\n return configs;\n }\n\n for (const evaluator of evaluators) {\n const config = extractEvaluatorConfig(evaluator);\n if (!config) {\n continue;\n }\n\n try {\n configs.push(config);\n } catch {\n continue;\n }\n }\n\n return configs;\n}\n","/**\n * Public Evaluation API\n * Exposed as Netra.evaluation\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { SpanWrapper } from \"../../span-wrapper\";\nimport { EvaluationHttpClient } from \"./client\";\nimport {\n AddDatasetItemResponse,\n CreateDatasetResponse,\n Dataset,\n DatasetEntry,\n DatasetRecord,\n EvaluatorConfig,\n GetDatasetItemsResponse,\n ItemContext,\n TaskFunction,\n} from \"./models\";\nimport {\n buildEvaluatorsConfig,\n buildItemPayload,\n executeTask,\n extractDatasetId,\n formatSpanId,\n formatTraceId,\n getSessionIdFromBaggage,\n runSingleEvaluator,\n validateRunInputs,\n} from \"./utils\";\n\n/**\n * Public entry-point exposed as Netra.evaluation\n */\nexport class Evaluation {\n private config: Config;\n private client: EvaluationHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new EvaluationHttpClient(this.config);\n }\n\n /**\n * Create an empty dataset and return its id on success, else null\n * @param name The name of the dataset\n * @param tags Optional list of tags to associate with the dataset\n * @returns A backend JSON response containing dataset info (id, name, tags, etc.) on success\n */\n async createDataset(\n name: string,\n tags?: string[],\n ): Promise<CreateDatasetResponse | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create dataset: dataset name is required\",\n );\n return null;\n }\n\n const response = await this.client.createDataset(name, tags);\n\n if (!response) {\n return null;\n }\n\n return {\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n name: response.name ?? \"\",\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Add a single item to an existing dataset\n * @param datasetId The id of the dataset to which the item will be added\n * @param item The dataset item to add\n * @returns A backend JSON response containing dataset item info (id, input, expectedOutput, etc.) on success\n */\n async addDatasetItem(\n datasetId: string,\n item: DatasetEntry,\n ): Promise<AddDatasetItemResponse | null> {\n if (!item.input) {\n Logger.error(\n \"netra.evaluation: Skipping dataset item without required 'input'\",\n );\n return null;\n }\n\n const response = await this.client.addDatasetItem(datasetId, item);\n\n return {\n datasetId: response.datasetId ?? \"\",\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n source: response.source ?? \"\",\n input: response.input ?? \"\",\n expectedOutput: response.expectedOutput ?? \"\",\n isActive: true,\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n sourceId: response.sourceId ?? null,\n metadata: response.metadata ?? null,\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Get a dataset by ID\n * @param datasetId The id of the dataset to retrieve\n * @returns A backend JSON response containing dataset info (id, input, expectedOutput etc.) on success\n */\n async getDataset(datasetId: string): Promise<GetDatasetItemsResponse | null> {\n if (!datasetId) {\n Logger.error(\n \"netra.evaluation: Failed to get dataset: dataset id is required\",\n );\n return null;\n }\n\n const response = await this.client.getDataset(datasetId);\n if (!response) {\n return null;\n }\n\n const datasetItems: DatasetRecord[] = [];\n for (const item of response) {\n const itemId = item?.id;\n const itemInput = item?.input;\n const itemDatasetId = item?.datasetId;\n\n if (itemId == null || itemDatasetId == null || itemInput == null) {\n Logger.warn(\n \"netra.evaluation: Skipping dataset item with missing required fields:\",\n item,\n );\n continue;\n }\n\n try {\n datasetItems.push({\n id: itemId,\n input: itemInput,\n datasetId: itemDatasetId,\n expectedOutput: item?.expectedOutput ?? \"\",\n });\n } catch (exc) {\n Logger.error(\"netra.evaluation: Failed to parse dataset item:\", exc);\n }\n }\n\n return { items: datasetItems };\n }\n\n /**\n * Create a new run for the given dataset and evaluators\n * @param name The name of the run\n * @param datasetId The id of the dataset to which the run will be associated\n * @param evaluatorsConfig Optional list of evaluators to be used for the run\n * @returns runId: The id of the created run\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: EvaluatorConfig[],\n ): Promise<string | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create run: run name is required\",\n );\n return null;\n }\n\n const evaluatorsConfigDicts: Array<Record<string, any>> | undefined =\n evaluatorsConfig?.map((e) => ({\n name: e.name,\n label: e.label,\n scoreType: e.scoreType,\n }));\n\n const response = await this.client.createRun(\n name,\n datasetId,\n evaluatorsConfigDicts,\n );\n const runId = response?.id ?? null;\n return runId;\n }\n\n /**\n * Fetch test run results based on run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!runId) {\n Logger.error(\n \"netra.evaluation: Failed to get run: run_id is required\",\n );\n return null;\n }\n\n const response = await this.client.getRunResults(runId);\n return response;\n }\n\n /**\n * Netra evaluation function to initiate a test suite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns A dictionary containing the run id and the results of the test suite\n */\n runTestSuite(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators?: any[],\n maxConcurrency: number = 50,\n ): Promise<Record<string, any> | null> {\n return this.runTestSuiteAsync(name, data, task, evaluators, maxConcurrency);\n }\n\n /**\n * Async implementation of runTestSuite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns items: The results of the test suite\n */\n private async runTestSuiteAsync(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators: any[] | undefined,\n maxConcurrency: number,\n ): Promise<Record<string, any> | null> {\n if (!validateRunInputs(name, data, task)) {\n return null;\n }\n\n const items = [...data.items];\n const totalItems = items.length;\n const datasetId = extractDatasetId(items);\n const evaluatorsConfig = buildEvaluatorsConfig(evaluators);\n\n const runId = await this.createRun(\n name,\n datasetId ?? undefined,\n evaluatorsConfig,\n );\n if (!runId) {\n Logger.error(\"netra.evaluation: Failed to create run\");\n return null;\n }\n Logger.info(\"netra.evaluation: Initiated test run\");\n\n const semaphore = new Semaphore(Math.max(1, maxConcurrency));\n const results: Array<Record<string, any>> = [];\n const bgEvalTasks: Promise<void>[] = [];\n let completedItems = 0;\n\n const processItem = async (idx: number, item: any): Promise<void> => {\n await semaphore.acquire();\n try {\n const ctx = this.createItemContext(idx, item);\n const itemResult = await this.executeItemPipeline(\n runId,\n name,\n ctx,\n task,\n evaluators,\n results,\n bgEvalTasks,\n );\n\n completedItems += 1;\n Logger.info(\n `netra.evaluation: ${completedItems}/${totalItems} items processed (status=${itemResult.status})`,\n );\n } finally {\n semaphore.release();\n }\n };\n\n await Promise.all(items.map((item, i) => processItem(i, item)));\n\n if (bgEvalTasks.length > 0) {\n await Promise.allSettled(bgEvalTasks);\n }\n\n this.client.postRunStatus(runId, \"completed\");\n return { runId, items: results };\n }\n\n /**\n * Create an ItemContext from a dataset item\n * @param idx The index of the item\n * @param item The dataset item\n * @returns ItemContext: The created ItemContext\n */\n private createItemContext(idx: number, item: any): ItemContext {\n // Check if item is a DatasetRecord (has datasetId property)\n if (this.isDatasetRecord(item)) {\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n datasetItemId: item.id,\n };\n }\n\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n };\n }\n\n /**\n * Type guard for DatasetRecord\n */\n private isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n }\n\n /**\n * Execute the full pipeline for a single item\n * @param runId The run ID\n * @param runName The name of the run\n * @param ctx The item context\n * @param task The task function to execute\n * @param evaluators Optional list of evaluators\n * @param results List to append results to\n * @param bgEvalTasks List to append background evaluation tasks to\n */\n private async executeItemPipeline(\n runId: string,\n runName: string,\n ctx: ItemContext,\n task: TaskFunction,\n evaluators: any[] | undefined,\n results: Array<Record<string, any>>,\n bgEvalTasks: Promise<void>[],\n ): Promise<{ status: string }> {\n const spanName = `TestRun.${runName}`;\n\n const span = new SpanWrapper(spanName, {}, \"netra.evaluation\");\n span.start();\n\n try {\n const otelSpan = span.getCurrentSpan();\n if (otelSpan) {\n const spanContext = otelSpan.spanContext();\n ctx.traceId = formatTraceId(spanContext.traceId);\n ctx.spanId = formatSpanId(spanContext.spanId);\n }\n ctx.sessionId = getSessionIdFromBaggage();\n\n const { output, status } = await span.withActive(() =>\n executeTask(task, ctx.itemInput),\n );\n ctx.taskOutput = output;\n ctx.status = status;\n\n ctx.testRunItemId = await span.withActive(() =>\n this.postCompletedStatus(runId, ctx),\n );\n\n if (evaluators && ctx.status === \"completed\") {\n const evalTask = this.runEvaluatorsForItem(runId, ctx, evaluators);\n bgEvalTasks.push(evalTask);\n }\n\n results.push({\n index: ctx.index,\n status: ctx.status,\n traceId: ctx.traceId,\n spanId: ctx.spanId,\n testRunItemId: ctx.testRunItemId,\n });\n\n return { status: ctx.status ?? \"pending\" };\n } finally {\n span.end();\n }\n }\n\n /**\n * Post agent_triggered status and return testRunItemId\n * @param runId The run ID\n * @param ctx The item context\n * @returns str: The testRunItemId\n */\n private async postTriggeredStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<string> {\n const payload = buildItemPayload(ctx, \"agent_triggered\");\n const response = await this.client.postRunItem(runId, payload);\n\n if (response && typeof response === \"object\") {\n const itemId = response.id ?? response.testRunItemId;\n if (itemId) {\n return String(itemId);\n }\n }\n return `local-${ctx.index}`;\n }\n\n /**\n * Post completed/failed status with task output\n * @param runId The run ID\n * @param ctx The item context\n */\n private async postCompletedStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<any> {\n const payload = buildItemPayload(ctx, ctx.status ?? \"pending\", true);\n const runItemId = await this.client.postRunItem(runId, payload);\n return runItemId;\n }\n\n /**\n * Run all evaluators for a single item after span ingestion\n * @param runId The run ID\n * @param ctx The item context\n * @param evaluators List of evaluators\n */\n private async runEvaluatorsForItem(\n runId: string,\n ctx: ItemContext,\n evaluators: any[],\n ): Promise<void> {\n await this.client.waitForSpanIngestion(ctx.spanId);\n\n const evaluatorResults: Array<Record<string, any>> = [];\n for (const evaluator of evaluators) {\n try {\n const result = await runSingleEvaluator({\n evaluator,\n itemInput: ctx.itemInput,\n taskOutput: ctx.taskOutput,\n expectedOutput: ctx.expectedOutput,\n metadata: ctx.metadata,\n });\n\n if (result) {\n evaluatorResults.push(result);\n }\n } catch {\n continue;\n }\n }\n\n if (evaluatorResults.length > 0 && ctx.testRunItemId) {\n this.client.submitLocalEvaluations(\n runId,\n ctx.testRunItemId,\n evaluatorResults,\n );\n }\n }\n}\n\n/**\n * Simple semaphore for concurrency control\n */\nclass Semaphore {\n private permits: number;\n private waiting: Array<() => void> = [];\n\n constructor(permits: number) {\n this.permits = permits;\n }\n\n async acquire(): Promise<void> {\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.waiting.push(resolve);\n });\n }\n\n release(): void {\n if (this.waiting.length > 0) {\n const next = this.waiting.shift();\n next?.();\n } else {\n this.permits++;\n }\n }\n\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n}\n","/**\n * Evaluation API Models\n */\n\nexport interface DatasetEntry {\n id: string;\n input: string;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface DatasetItem {\n input: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n tags?: string[];\n}\n\nexport interface DatasetRecord {\n id: string;\n input: any;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface Dataset {\n items: DatasetItem[] | DatasetRecord[];\n}\n\nexport interface Run {\n id: string;\n datasetId: string;\n name?: string;\n testEntries: DatasetItem[];\n}\n\nexport interface EvaluationScore {\n metricType: string;\n score: number;\n}\n\nexport enum EntryStatus {\n AGENT_TRIGGERED = \"agent_triggered\",\n AGENT_COMPLETED = \"agent_completed\",\n FAILED = \"failed\",\n}\n\nexport enum RunStatus {\n COMPLETED = \"completed\",\n}\n\nexport interface CreateDatasetParams {\n name: string;\n tags?: string[];\n}\n\nexport interface TestSuiteResult {\n success: boolean;\n runId?: string;\n error?: string;\n results?: Array<{\n id: string;\n input: string;\n output: any;\n status: string;\n error?: string;\n }>;\n}\n\nexport enum ScoreType {\n BOOLEAN = \"boolean\",\n NUMERICAL = \"numerical\",\n CATEGORICAL = \"categorical\",\n}\n\nexport interface EvaluatorConfig {\n name: string;\n label: string;\n scoreType: ScoreType;\n}\n\nexport interface AddDatasetItemResponse {\n datasetId: string;\n projectId: string;\n organizationId: string;\n source: string;\n input: any;\n expectedOutput?: any;\n isActive: boolean;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n sourceId?: string;\n metadata?: Record<string, any>;\n id: string;\n createdAt?: string;\n deletedAt?: string;\n}\n\nexport interface ItemContext {\n index: number;\n itemInput: any;\n expectedOutput?: any;\n metadata?: any;\n datasetItemId?: string;\n traceId?: string;\n spanId?: string;\n sessionId?: string;\n taskOutput?: any;\n status?: string;\n testRunItemId?: string;\n}\n\nexport interface CreateDatasetResponse {\n projectId: string;\n organizationId: string;\n name: string;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n id: string;\n createdAt: string;\n deletedAt?: string | null;\n}\n\nexport interface GetDatasetItemsResponse {\n items: DatasetRecord[];\n}\n\nexport interface LocalDataset {\n items: DatasetEntry[];\n}\n\nexport interface EvaluatorContext {\n input: any;\n taskOutput: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n}\n\nexport interface EvaluatorOutput {\n evaluatorName: string;\n result: any;\n isPassed: boolean;\n reason?: string;\n}\n\nexport type EvaluatorFunction = (params: {\n input: string;\n output: any;\n expectedOutput?: any;\n}) =>\n | EvaluationScore\n | EvaluationScore[]\n | Promise<EvaluationScore | EvaluationScore[]>;\n\nexport type TaskFunction = (input: any) => any | Promise<any>;\n","/**\n * Run Entry Context for Evaluation\n * Provides context management for evaluation run entries\n */\n\nimport { Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { Config } from \"../../config\";\nimport { EvaluationHttpClient } from \"./client\";\nimport { DatasetEntry, EntryStatus, EvaluationScore, Run } from \"./models\";\n\nexport class RunEntryContext {\n private client: EvaluationHttpClient;\n private config: Config;\n readonly evaluationRun: Run;\n readonly entry: DatasetEntry;\n traceId?: string;\n private span?: Span;\n private startTime?: Date;\n\n constructor(\n client: EvaluationHttpClient,\n config: Config,\n run: Run,\n entry: DatasetEntry,\n ) {\n this.client = client;\n this.config = config;\n this.evaluationRun = run;\n this.entry = entry;\n }\n\n /**\n * Get the run associated with this context\n * Alias for evaluationRun for backwards compatibility\n */\n get run(): Run {\n return this.evaluationRun;\n }\n\n /**\n * Start the run entry context\n * Creates a span and posts agent_triggered status\n */\n async start(): Promise<void> {\n this.startTime = new Date();\n\n // Create a span for this entry\n const tracer = trace.getTracer(\"netra.evaluation\");\n this.span = tracer.startSpan(\n `evaluation.run.${this.evaluationRun.id}.entry.${this.entry.id}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"netra.evaluation.runId\": this.evaluationRun.id,\n \"netra.evaluation.entryId\": this.entry.id,\n \"netra.evaluation.datasetId\": this.evaluationRun.datasetId,\n },\n },\n );\n\n // Get trace ID from the span\n const spanContext = this.span.spanContext();\n this.traceId = spanContext.traceId;\n\n // Post agent_triggered status using postRunItem\n const payload = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: EntryStatus.AGENT_TRIGGERED,\n };\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n }\n\n /**\n * End the run entry context\n * @param success Whether the entry completed successfully\n * @param scores Optional scores to record\n */\n async end(\n success: boolean = true,\n scores?: EvaluationScore[],\n ): Promise<void> {\n const status = success ? EntryStatus.AGENT_COMPLETED : EntryStatus.FAILED;\n\n // Post completed/failed status using postRunItem\n const payload: Record<string, any> = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: status,\n };\n\n if (scores) {\n payload.scores = scores;\n }\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n\n if (this.span) {\n this.span.end();\n }\n }\n\n /**\n * Get the current span\n */\n getSpan(): Span | undefined {\n return this.span;\n }\n\n /**\n * Execute a function within this context\n * Automatically handles start/end and error handling\n */\n async execute<T>(\n fn: (ctx: RunEntryContext) => Promise<T>,\n scores?: EvaluationScore[],\n ): Promise<T> {\n await this.start();\n\n try {\n const result = await fn(this);\n await this.end(true, scores);\n return result;\n } catch (error) {\n await this.end(false);\n throw error;\n }\n }\n}\n","/**\n * Internal HTTP client for Dashboard APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n Scope,\n SessionFilter,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class DashboardHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_DASHBOARD_TIMEOUT\", 30.0);\n }\n\n /**\n * Execute a dynamic query for dashboards\n */\n async queryData(\n scope: Scope,\n chartType: ChartType,\n metrics: Metrics,\n filter: FilterConfig,\n dimension?: Dimension,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n const payload: Record<string, any> = {\n scope: scope,\n chartType: chartType,\n metrics: {\n measure: metrics.measure,\n aggregation: metrics.aggregation,\n },\n };\n\n // Build filter object\n if (filter) {\n const filterPayload: Record<string, any> = {\n startTime: filter.startTime,\n endTime: filter.endTime,\n groupBy: filter.groupBy,\n };\n\n if (filter.filters && filter.filters.length > 0) {\n filterPayload.filters = filter.filters.map((item) => {\n const filterItem: Record<string, any> = {\n field: item.field,\n operator: item.operator,\n type: item.type,\n value: item.value,\n };\n if (item.key) {\n filterItem.key = item.key;\n }\n return filterItem;\n });\n }\n\n payload.filter = filterPayload;\n }\n\n // Add dimension if provided\n if (dimension) {\n payload.dimension = {\n field: dimension.field,\n };\n }\n\n const response = await this.post(\"/public/dashboard/query-data\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n }\n\n /**\n * Get session statistics with pagination.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n * limit: Maximum number of results per page.\n * page: Page number for pagination.\n * sortField: Field to sort by.\n * sortOrder: Sort order (asc/desc).\n *\n * Returns:\n * The session stats response data or null on error.\n */\n async getSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n limit?: number,\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot get session stats\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/stats\";\n\n const payload: Record<string, any> = {\n startTime,\n endTime,\n };\n\n if (filters && filters.length > 0) {\n payload.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n if (limit !== undefined || cursor !== undefined) {\n payload.pagination = {};\n\n if (limit !== undefined) {\n payload.pagination.limit = limit;\n }\n\n if (cursor !== undefined) {\n payload.pagination.cursor = cursor;\n }\n }\n\n if (sortField !== undefined) {\n payload.sortField = sortField;\n }\n\n if (sortOrder !== undefined) {\n payload.sortOrder = sortOrder;\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.dashboard: Failed to fetch session stats:\", message);\n return null;\n }\n }\n\n /**\n * Get aggregated session metrics including total sessions, costs, latency,\n * and cost breakdown by model.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n *\n * Returns:\n * The session summary response data or null on error.\n */\n async getSessionSummary(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/summary\";\n\n const payload: Record<string, any> = {\n filter: {\n startTime,\n endTime,\n },\n };\n\n if (filters && filters.length > 0) {\n payload.filter.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\n \"netra.dashboard: Failed to fetch session summary:\",\n message,\n );\n return null;\n }\n }\n}\n","/**\n * Dashboard API Models\n */\n\nexport enum Scope {\n SPANS = \"Spans\",\n TRACES = \"Traces\",\n}\n\nexport enum ChartType {\n LINE_TIME_SERIES = \"Line Time Series\",\n BAR_TIME_SERIES = \"Bar Time Series\",\n HORIZONTAL_BAR = \"Horizontal Bar\",\n VERTICAL_BAR = \"Vertical Bar\",\n PIE = \"Pie\",\n NUMBER = \"Number\",\n}\n\nexport enum Measure {\n LATENCY = \"Latency\",\n ERROR_RATE = \"Error Rate\",\n PII_COUNT = \"PII Count\",\n REQUEST_COUNT = \"Request Count\",\n TOTAL_COST = \"Total Cost\",\n VIOLATIONS = \"Violations\",\n TOTAL_TOKENS = \"Total Tokens\",\n AUDIO_DURATION = \"Audio Duration\",\n CHARACTER_COUNT = \"Character Count\",\n}\n\nexport enum Aggregation {\n AVERAGE = \"Average\",\n P50 = \"p50\",\n P90 = \"p90\",\n P95 = \"p95\",\n P99 = \"p99\",\n MEDIAN = \"Median (p50)\",\n PERCENTAGE = \"Percentage\",\n TOTAL_COUNT = \"Total Count\",\n}\n\nexport enum GroupBy {\n DAY = \"day\",\n HOUR = \"hour\",\n MINUTE = \"minute\",\n}\n\nexport enum DimensionField {\n ENVIRONMENT = \"environment\",\n SERVICE = \"service\",\n MODEL_NAME = \"model_name\",\n}\n\nexport enum Operator {\n EQUALS = \"equals\",\n NOT_EQUALS = \"not_equals\",\n CONTAINS = \"contains\",\n NOT_CONTAINS = \"not_contains\",\n STARTS_WITH = \"starts_with\",\n ENDS_WITH = \"ends_with\",\n GREATER_THAN = \"greater_than\",\n LESS_THAN = \"less_than\",\n GREATER_EQUAL_TO = \"greater_equal_to\",\n LESS_EQUAL_TO = \"less_equal_to\",\n ANY_OF = \"any_of\",\n NONE_OF = \"none_of\",\n}\n\nexport enum FilterType {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY_OPTIONS = \"arrayOptions\",\n OBJECT = \"object\",\n}\n\nexport enum FilterField {\n TOTAL_COST = \"total_cost\",\n SERVICE = \"service\",\n TENANT_ID = \"tenant_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n ENVIRONMENT = \"environment\",\n LATENCY = \"latency\",\n MODEL_NAME = \"model_name\",\n MODELS = \"models\",\n METADATA = \"metadata\",\n}\n\nexport enum SessionFilterField {\n TENANT_ID = \"tenant_id\",\n}\n\nexport enum SessionOperator {\n ANY_OF = \"any_of\",\n}\n\nexport enum SessionFilterType {\n ARRAY = \"arrayOptions\",\n}\n\nexport enum SortField {\n SESSION_ID = \"session_id\",\n START_TIME = \"start_time\",\n TOTAL_REQUESTS = \"totalRequests\",\n TOTAL_COST = \"totalCost\",\n}\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n}\n\n/**\n * Create a metadata filter field\n * @param key The metadata key to filter on\n * @returns The formatted metadata field string\n * @example\n * metadataField(\"customer_tier\") // returns \"metadata['customer_tier']\"\n */\nexport function metadataField(key: string): string {\n return `metadata['${key}']`;\n}\n\nexport interface Filter {\n field: FilterField | string;\n operator: Operator;\n type: FilterType;\n value: any;\n key?: string;\n}\n\nexport interface Metrics {\n measure: Measure;\n aggregation: Aggregation;\n}\n\nexport interface Dimension {\n field: DimensionField;\n}\n\nexport interface FilterConfig {\n startTime: string;\n endTime: string;\n groupBy: GroupBy;\n filters?: Filter[];\n}\n\nexport interface TimeRange {\n startTime: string;\n endTime: string;\n}\n\nexport interface TimeSeriesDataPoint {\n date: string;\n value: number;\n}\n\nexport interface DimensionValue {\n dimension: string;\n value: number;\n}\n\nexport interface TimeSeriesWithDimension {\n date: string;\n values: DimensionValue[];\n}\n\nexport interface TimeSeriesResponse {\n timeSeries: TimeSeriesWithDimension[];\n dimensions: string[];\n}\n\nexport interface CategoricalDataPoint {\n dimension: string;\n value: number;\n}\n\nexport interface NumberResponse {\n value: number;\n}\n\nexport type DashboardData =\n | TimeSeriesDataPoint[]\n | TimeSeriesResponse\n | CategoricalDataPoint[]\n | NumberResponse\n | Record<string, any>;\n\nexport interface QueryResponse {\n timeRange: TimeRange;\n data: DashboardData;\n}\n\nexport interface QueryDataParams {\n scope: Scope;\n chartType: ChartType;\n metrics: Metrics;\n filter: FilterConfig;\n dimension?: Dimension;\n}\n\n//Sessions\nexport interface SessionFilter {\n field: SessionFilterField;\n operator: SessionOperator;\n type: SessionFilterType;\n value: string[];\n}\n\nexport interface SessionStatsResult {\n data: SessionStatsData[];\n hasNextPage: boolean;\n nextCursor?: string;\n}\n\nexport interface SessionFilterConfig {\n startTime: string;\n endTime: string;\n filters?: SessionFilter[];\n}\n\nexport interface SessionStatsData {\n session_id: string;\n session_start_time: string;\n totalRequests: number;\n totalCost: number;\n session_duration: string;\n cursor: string;\n}\n","/**\n * Public Dashboard API\n * Exposed as Netra.dashboard\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { DashboardHttpClient } from \"./client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n QueryDataParams,\n QueryResponse,\n Scope,\n SessionFilter,\n SessionFilterConfig,\n SessionStatsData,\n SessionStatsResult,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class Dashboard {\n private config: Config;\n private client: DashboardHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new DashboardHttpClient(config);\n }\n\n /**\n * Execute a dynamic query for dashboards to retrieve metrics and time-series data\n * @param params Query parameters\n * @returns Query response containing timeRange and data, or null on error\n */\n async queryData(params: QueryDataParams): Promise<QueryResponse | null> {\n // Validate parameters\n if (!this.isValidScope(params.scope)) {\n throw new TypeError(\n `scope must be a Scope value, got ${typeof params.scope}`,\n );\n }\n if (!this.isValidChartType(params.chartType)) {\n throw new TypeError(\n `chartType must be a ChartType value, got ${typeof params.chartType}`,\n );\n }\n if (!this.isValidMetrics(params.metrics)) {\n throw new TypeError(\n `metrics must be a Metrics object, got ${typeof params.metrics}`,\n );\n }\n if (!this.isValidFilterConfig(params.filter)) {\n throw new TypeError(\n `filter must be a FilterConfig object, got ${typeof params.filter}`,\n );\n }\n if (\n params.dimension !== undefined &&\n !this.isValidDimension(params.dimension)\n ) {\n throw new TypeError(\n `dimension must be a Dimension object or undefined, got ${typeof params.dimension}`,\n );\n }\n\n const result = await this.client.queryData(\n params.scope,\n params.chartType,\n params.metrics,\n params.filter,\n params.dimension,\n );\n\n return result;\n }\n \nasync getSessionStats(\n startTime: string,\n endTime: string,\n limit: number = 10,\n filters?: SessionFilter[],\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<SessionStatsResult | null> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session stats\",\n );\n return null;\n }\n\n const result = await this.client.getSessionStats(\n startTime,\n endTime,\n filters,\n limit,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return null;\n }\n\n const data = result.data ?? {};\n const sessionStats = data.sessions ?? [];\n const pageInfo = data.pageInfo ?? {};\n\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n \n let nextCursor: string | undefined = undefined;\n if (sessionStats.length > 0) {\n const lastItem = sessionStats[sessionStats.length - 1];\n nextCursor = lastItem.cursor;\n }\n\n return {\n data: sessionStats,\n hasNextPage,\n nextCursor,\n };\n }\n\n async *iterSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): AsyncGenerator<SessionStatsData, void, unknown> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to iterate session stats\",\n );\n return;\n }\n\n let cursor: string | undefined = undefined;\n\n while (true) {\n const result = await this.getSessionStats(\n startTime,\n endTime,\n undefined,\n filters,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return;\n }\n\n for (const session of result.data) {\n yield session;\n }\n\n if (!result.hasNextPage) {\n break;\n }\n\n cursor = result.nextCursor;\n }\n }\n\n async getSessionSummary(filter: SessionFilterConfig): Promise<any | null> {\n if (!this.isSessionFilterConfig(filter)) {\n Logger.error(\"netra.dashboard: filter must be a SessionFilterConfig\");\n return null;\n }\n\n if (!filter.startTime || !filter.endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session summary\",\n );\n return null;\n }\n\n const result = await this.client.getSessionSummary(\n filter.startTime,\n filter.endTime,\n filter.filters,\n );\n\n if (!result) {\n return null;\n }\n\n return result.data ?? {};\n }\n\n private isValidScope(scope: any): scope is Scope {\n return Object.values(Scope).includes(scope);\n }\n\n private isValidChartType(chartType: any): chartType is ChartType {\n return Object.values(ChartType).includes(chartType);\n }\n\n private isValidMetrics(metrics: any): metrics is Metrics {\n return (\n metrics &&\n typeof metrics === \"object\" &&\n \"measure\" in metrics &&\n \"aggregation\" in metrics\n );\n }\n\n private isValidFilterConfig(filter: any): filter is FilterConfig {\n return (\n filter &&\n typeof filter === \"object\" &&\n \"startTime\" in filter &&\n \"endTime\" in filter &&\n \"groupBy\" in filter\n );\n }\n\n private isValidDimension(dimension: any): dimension is Dimension {\n return dimension && typeof dimension === \"object\" && \"field\" in dimension;\n }\n\n private isSessionFilterConfig(value: unknown): value is SessionFilterConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"startTime\" in value &&\n \"endTime\" in value\n );\n }\n}\n","/**\n * Internal HTTP client for Prompts APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class PromptsHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_PROMPTS_TIMEOUT\", 30.0);\n }\n\n /**\n * Fetch prompt version from backend\n */\n async getPromptVersion(name: string, label: string): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.prompts: Prompts client is not initialized; cannot fetch prompt\",\n );\n return null;\n }\n\n try {\n const payload = {\n promptName: name,\n label: label,\n };\n\n const response = await this.post(\"/sdk/prompts/version\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n\n Logger.error(`netra.prompts: Failed to fetch prompt: ${errorMessage}`);\n\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.prompts: Failed to fetch prompt:\", message);\n\n return null;\n }\n }\n}\n","import { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { PromptsHttpClient } from \"./client\";\nimport { GetPromptParams, PromptResponse } from \"./models\";\n\nexport class Prompts {\n private config: Config;\n private client: PromptsHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new PromptsHttpClient(config);\n }\n\n /**\n * Fetch prompt version by name and label.\n *\n * @param params.name - Name of the prompt (required)\n * @param params.label - Label of the prompt version (default: \"production\")\n */\n async getPrompt(params: GetPromptParams): Promise<PromptResponse | null> {\n if (!params || typeof params.name !== \"string\" || !params.name) {\n Logger.error(\"netra.prompts: name is required to fetch a prompt\");\n return null;\n }\n\n const label = params.label ?? \"production\";\n const result = await this.client.getPromptVersion(params.name, label);\n\n if (!result) {\n return null;\n }\n\n return result.data ?? null;\n }\n}\n","/**\n * Instrumentation Span Processor\n * \n * OpenTelemetry span processor that:\n * 1. Records the raw instrumentation scope name for each span\n * 2. Truncates attribute values to prevent oversized payloads\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\n// Allowed instrumentation names that we recognize and tag\nconst ALLOWED_INSTRUMENTATION_NAMES = new Set([\n \"openai\",\n \"openai_agents\",\n \"groq\",\n \"mistral_ai\",\n \"mistralai\",\n \"google_genai\",\n \"langchain\",\n \"llama_index\",\n \"pinecone\",\n \"qdrant\",\n \"chromadb\",\n \"together\",\n \"vertexai\",\n \"cohere_ai\",\n \"litellm\",\n \"dspy\",\n \"pydantic_ai\",\n \"weaviate_db\",\n \"fastapi\",\n \"adk\",\n \"httpx\",\n \"aiohttp\",\n \"undici\",\n \"fetch\",\n \"cerebras\",\n \"deepgram\",\n \"cartesia\",\n \"elevenlabs\",\n]);\n\nexport class InstrumentationSpanProcessor implements SpanProcessor {\n private maxAttributeLength: number;\n\n constructor(maxAttributeLength?: number) {\n this.maxAttributeLength = maxAttributeLength ?? Config.ATTRIBUTE_MAX_LEN;\n }\n\n /**\n * Detect the raw instrumentation name from the span's instrumentation scope.\n */\n private detectRawInstrumentationName(span: Span): string | null {\n try {\n // Access the instrumentation scope from the span\n // In JS SDK, this is typically available via the span's internal properties\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n\n if (scope) {\n const name = scope.name;\n if (typeof name === \"string\" && name) {\n // Extract the base name from fully qualified names\n if (\n name.startsWith(\"opentelemetry.instrumentation.\") ||\n name.startsWith(\"netra.instrumentation.\") ||\n name.startsWith(\"@opentelemetry/instrumentation-\") ||\n name.startsWith(\"@traceloop/instrumentation-\")\n ) {\n try {\n // Get the last segment\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n } catch {\n // Fall through to return the full name\n }\n }\n return name;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n }\n\n /**\n * Truncate a value to the maximum allowed length.\n * Handles strings, bytes, and recursively handles lists and objects.\n */\n private truncateValue(value: unknown): unknown {\n try {\n if (typeof value === \"string\") {\n return value.length <= this.maxAttributeLength\n ? value\n : value.substring(0, this.maxAttributeLength);\n }\n\n if (Array.isArray(value)) {\n return value.map((v) =>\n typeof v === \"string\" ? this.truncateValue(v) : v\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = typeof v === \"string\" ? this.truncateValue(v) : v;\n }\n return result;\n }\n } catch {\n return value;\n }\n return value;\n }\n\n /**\n * Called when a span starts. Wraps setAttribute to truncate values\n * and records the instrumentation name.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Wrap setAttribute to truncate values\n const originalSetAttribute = span.setAttribute.bind(span);\n\n span.setAttribute = (key: string, value: unknown): Span => {\n try {\n const truncated = this.truncateValue(value);\n return originalSetAttribute(key, truncated as any);\n } catch {\n // Best-effort; never break span\n try {\n return originalSetAttribute(key, value as any);\n } catch {\n return span;\n }\n }\n };\n\n // Set instrumentation name attribute\n const name = this.detectRawInstrumentationName(span);\n if (name && ALLOWED_INSTRUMENTATION_NAMES.has(name.toLowerCase())) {\n span.setAttribute(`${Config.LIBRARY_NAME}.instrumentation.name`, name);\n }\n } catch (e) {\n Logger.error(\n \"InstrumentationSpanProcessor: Error on span start:\",\n e\n );\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { RootSpanProcessor } from \"./root-span-processor\";\n\n/**\n * Marks the root span of any trace that contains at least one LLM call with\n * `netra.trace.llm.call = true`.\n *\n * Root span resolution is delegated to RootSpanProcessor, which must be\n * registered AFTER this processor in the chain so that its on_end cleanup\n * runs after this processor has finished annotating the root span.\n */\nexport class LlmTraceIdentifierSpanProcessor implements SpanProcessor {\n static DEFAULT_REQUEST_MODEL_KEY = \"gen_ai.request.model\";\n static DEFAULT_RESPONSE_MODEL_KEY = \"gen_ai.response.model\";\n static DEFAULT_ROOT_MARKER_KEY = \"netra.trace.llm.call\";\n\n private readonly _requestModelKey: string;\n private readonly _responseModelKey: string;\n private readonly _rootMarkerKey: string;\n\n // Tracks which traces have already been marked to avoid redundant writes\n private readonly _markedTraces = new Set<string>();\n\n constructor(\n requestModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_REQUEST_MODEL_KEY,\n responseModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_RESPONSE_MODEL_KEY,\n rootMarkerAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_ROOT_MARKER_KEY,\n ) {\n if (!requestModelAttributeKey || !responseModelAttributeKey || !rootMarkerAttributeKey) {\n throw new Error(\"Attribute keys cannot be empty\");\n }\n this._requestModelKey = requestModelAttributeKey;\n this._responseModelKey = responseModelAttributeKey;\n this._rootMarkerKey = rootMarkerAttributeKey;\n }\n\n onStart(_span: Span, _parentContext: Context): void {\n // Root span tracking is owned by RootSpanProcessor\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const spanCtx = span.spanContext();\n if (!spanCtx || !trace.isSpanContextValid(spanCtx)) return;\n\n const { traceId, spanId } = spanCtx;\n\n // When the root span ends, clean up local state and stop processing\n if (RootSpanProcessor.isRootSpanForTrace(traceId, spanId)) {\n this._markedTraces.delete(traceId);\n return;\n }\n\n if (this._markedTraces.has(traceId)) return;\n if (!this._isLlmSpan(span)) return;\n\n this._markRootSpan(traceId);\n } catch (e) {\n Logger.warn(\"LlmTraceIdentifierSpanProcessor: error in onEnd:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n this._markedTraces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isLlmSpan(span: ReadableSpan): boolean {\n const attrs = span.attributes;\n if (!attrs) return false;\n return (\n Object.prototype.hasOwnProperty.call(attrs, this._requestModelKey) ||\n Object.prototype.hasOwnProperty.call(attrs, this._responseModelKey)\n );\n }\n\n private _markRootSpan(traceId: string): void {\n const root = RootSpanProcessor.getRootSpanByTraceId(traceId);\n this._markedTraces.add(traceId);\n if (!root) return;\n if (!root.isRecording()) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: root span for trace ${traceId} is not recording`);\n return;\n }\n try {\n root.setAttribute(this._rootMarkerKey, true);\n } catch (e) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: failed to mark root span for trace ${traceId}:`, e);\n }\n }\n}\n","/**\n * Scrubbing Span Processor\n *\n * OpenTelemetry span processor that scrubs sensitive data from span attributes.\n * This includes API keys, emails, phone numbers, SSNs, credit cards, passwords,\n * bearer tokens, and other sensitive information.\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n// Sensitive patterns for data detection (based on pydantic logfire scrubbing)\nconst SENSITIVE_PATTERNS: Record<string, RegExp> = {\n // API keys - scrub \"Token: <value>\" or sk-... tokens\n api_key: new RegExp(\n \"(?:Token:\\\\s*\\\\S{32,})\" + // Token: <32+ chars>\n \"|(?:sk-[A-Za-z0-9]{16,})\", // sk-... tokens\n \"g\",\n ),\n // Email addresses\n email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/gi,\n // Phone numbers (US format)\n phone: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}/g,\n // Credit cards (Visa, Mastercard, Amex, Discover)\n credit_card:\n /(?<!\\d)(?:4\\d{15}|5[1-5]\\d{14}|3[47]\\d{13}|6(?:011|5\\d{2})\\d{12})(?!\\d)/g,\n // Social Security Numbers\n ssn: /\\b\\d{3}-?\\d{2}-?\\d{4}\\b/g,\n // Password patterns\n password: /(?:password|passwd|pwd|secret|token)\\s*[:=]\\s*\\S+/gi,\n // Bearer tokens\n bearer_token: /(?:authorization:\\s*)?bearer\\s+[A-Za-z0-9\\-._~+/]+=*/gi,\n // Authorization headers\n authorization: /authorization\\s*:\\s*\\S+/gi,\n};\n\n// Generic pattern for long digit sequences (credit/debit cards)\nconst LONG_DIGIT_PATTERN = /(?<!\\d)\\d{13,19}(?!\\d)/g;\n\n// Sensitive attribute keys that should have their values scrubbed\nconst SENSITIVE_KEYS = new Set([\n \"password\",\n \"passwd\",\n \"pwd\",\n \"secret\",\n \"key\",\n \"api_key\",\n \"auth\",\n \"authorization\",\n \"bearer\",\n \"credential\",\n \"private_key\",\n \"access_token\",\n \"refresh_token\",\n \"session_token\",\n \"x-api-key\",\n \"x-auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"span\",\n]);\n\nconst SCRUB_REPLACEMENT = \"[SCRUBBED]\";\n\nexport class ScrubbingSpanProcessor implements SpanProcessor {\n /**\n * Check if a key is considered sensitive.\n */\n private isSensitiveKey(key: string): boolean {\n const keyLower = key.toLowerCase();\n for (const sensitiveKey of SENSITIVE_KEYS) {\n if (keyLower.includes(sensitiveKey)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrub sensitive patterns from a string value.\n */\n private scrubStringValue(value: string): string {\n let scrubbed = value;\n\n // Early catch-all for contiguous 13-19 digit sequences (credit/debit cards)\n scrubbed = scrubbed.replace(LONG_DIGIT_PATTERN, SCRUB_REPLACEMENT);\n\n // Apply all sensitive patterns\n for (const pattern of Object.values(SENSITIVE_PATTERNS)) {\n // Reset lastIndex for global patterns\n pattern.lastIndex = 0;\n if (pattern.test(scrubbed)) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, SCRUB_REPLACEMENT);\n }\n }\n\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a dictionary value.\n */\n private scrubDictValue(\n value: Record<string, unknown>,\n ): Record<string, unknown> {\n const scrubbed: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const [, scrubbedValue] = this.scrubKeyValue(k, v);\n scrubbed[k] = scrubbedValue;\n }\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a list value.\n */\n private scrubListValue(value: unknown[]): unknown[] {\n return value.map((item) => {\n if (typeof item === \"string\") {\n return this.scrubStringValue(item);\n } else if (Array.isArray(item)) {\n return this.scrubListValue(item);\n } else if (typeof item === \"object\" && item !== null) {\n return this.scrubDictValue(item as Record<string, unknown>);\n }\n return item;\n });\n }\n\n /**\n * Scrub sensitive data from a key-value pair.\n */\n private scrubKeyValue(key: string, value: unknown): [string, unknown] {\n // Check if key itself is sensitive and value is a simple type\n if (\n this.isSensitiveKey(key) &&\n typeof value !== \"object\" &&\n !Array.isArray(value)\n ) {\n return [key, SCRUB_REPLACEMENT];\n }\n\n // Scrub value based on its type\n if (typeof value === \"string\") {\n return [key, this.scrubStringValue(value)];\n } else if (Array.isArray(value)) {\n return [key, this.scrubListValue(value)];\n } else if (typeof value === \"object\" && value !== null) {\n return [key, this.scrubDictValue(value as Record<string, unknown>)];\n }\n\n return [key, value];\n }\n\n /**\n * Called when a span starts. No-op for this processor.\n */\n onStart(span: Span, parentContext: Context): void {\n // No-op - scrubbing happens on span end\n }\n\n /**\n * Called when a span ends. Scrubs sensitive data from span attributes.\n */\n onEnd(span: ReadableSpan): void {\n try {\n // Get span attributes - we need to access the internal attributes\n const spanAny = span as any;\n const attributes = spanAny.attributes || spanAny._attributes;\n\n if (attributes && typeof attributes === \"object\") {\n const scrubbedAttributes: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n const [, scrubbedValue] = this.scrubKeyValue(key, value);\n scrubbedAttributes[key] = scrubbedValue;\n }\n\n // Replace attributes with scrubbed versions\n // This works because ReadableSpan is actually a reference to the span object\n if (spanAny._attributes) {\n spanAny._attributes = scrubbedAttributes;\n } else if (spanAny.attributes) {\n // Some implementations use different property names\n Object.keys(spanAny.attributes).forEach(\n (k) => delete spanAny.attributes[k],\n );\n Object.assign(spanAny.attributes, scrubbedAttributes);\n }\n }\n } catch (e) {\n Logger.error(\"ScrubbingSpanProcessor: Error scrubbing attributes:\", e);\n }\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Session Span Processor\n *\n * OpenTelemetry span processor that automatically adds session attributes to spans.\n * This includes session_id, user_id, tenant_id from OpenTelemetry baggage, and entity context\n * (workflow, task, agent names) from SessionManager.\n *\n * Uses OpenTelemetry's baggage API for automatic context propagation across async boundaries.\n */\n\nimport { context, Context, propagation, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SessionManager } from \"../session-manager\";\n\n/**\n * Get the registered OTel context manager.\n * Skips NOOP_CONTEXT_MANAGER (returned when nothing is registered) and falls back\n * to inspecting the OTel global state to handle multiple @opentelemetry/api instances.\n */\nfunction getContextManager(): any {\n try {\n // 1. Try the ContextAPI's delegate — but only if it's a real manager (has _asyncLocalStorage)\n if ((context as any)._getContextManager) {\n const manager = (context as any)._getContextManager();\n if (manager?._asyncLocalStorage != null) {\n return manager;\n }\n }\n\n // 2. Fallback: read from OTel's globalThis symbol — handles multiple @opentelemetry/api copies.\n // OTel stores { context: ContextAPI, ... } keyed by Symbol('opentelemetry.js.api.<version>').\n // The registered context manager lives at ContextAPI._delegate.\n const globalSymbols = Object.getOwnPropertySymbols(globalThis);\n const otelSymbol = globalSymbols.find(s => s.toString().includes('opentelemetry.js.api'));\n if (otelSymbol) {\n const delegate = (globalThis as any)[otelSymbol]?.context?._delegate;\n if (delegate?._asyncLocalStorage != null) {\n return delegate;\n }\n }\n\n return null;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Binds newContext as the active context for the current async resource,\n * equivalent to Python's otel_context.attach(ctx).\n */\nfunction safeEnterWith(newContext: Context): void {\n const contextManager = getContextManager();\n\n if (!contextManager) {\n return;\n }\n\n // AsyncLocalStorageContextManager v2.x has no direct enterWith — go through _asyncLocalStorage\n if (typeof contextManager._asyncLocalStorage?.enterWith === 'function') {\n contextManager._asyncLocalStorage.enterWith(newContext);\n return;\n }\n\n // Future-proof: some managers may expose enterWith directly\n if (typeof contextManager.enterWith === 'function') {\n contextManager.enterWith(newContext);\n return;\n }\n\n Logger.warn(\"SessionSpanProcessor: enterWith not available on context manager; baggage will not propagate.\");\n}\n\n/**\n * Persistent store for session values (session_id, user_id, tenant_id, etc.).\n *\n * OTel's context.with() / asyncLocalStorage.run() creates isolated scopes — enterWith()\n * inside a span's callback does not propagate to sibling spans started after it. This map\n * lives outside any async scope so values set anywhere (pre-init, inside a span, etc.)\n * are visible to all subsequent spans. OTel baggage from parentContext still takes\n * precedence in onStart to honour cross-process propagated values.\n */\nconst sessionValues = new Map<string, string>();\n\n/**\n * Set a session baggage value using OpenTelemetry's baggage API\n * This automatically propagates across async boundaries via AsyncLocalStorage\n */\nexport function setSessionBaggage(key: string, value: string): void {\n // Always persist in the module-level store — survives run() scope boundaries\n sessionValues.set(key, value);\n\n // Best-effort: also push into OTel baggage for cross-process propagation\n try {\n const currentBaggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const newBaggage = currentBaggage.setEntry(key, { value });\n const newContext = propagation.setBaggage(context.active(), newBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n // non-fatal — sessionValues is the primary in-process store\n }\n}\n\n/**\n * Get a session baggage value — checks OTel baggage first, then the persistent store.\n */\nexport function getSessionBaggage(key: string): string | undefined {\n try {\n return propagation.getBaggage(context.active())?.getEntry(key)?.value ?? sessionValues.get(key);\n } catch (e) {\n return sessionValues.get(key);\n }\n}\n\n/**\n * Clear all session baggage from the current context\n */\nexport function clearSessionBaggage(): void {\n sessionValues.clear();\n try {\n const emptyBaggage = propagation.createBaggage();\n const newContext = propagation.setBaggage(context.active(), emptyBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n Logger.warn(\"SessionSpanProcessor: Failed to clear baggage:\", e);\n }\n}\n\nexport class SessionSpanProcessor implements SpanProcessor {\n /**\n * Called when a span starts. Adds session and entity context attributes.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Add library metadata\n span.setAttribute(\"library.name\", Config.LIBRARY_NAME);\n span.setAttribute(\"library.version\", Config.LIBRARY_VERSION);\n span.setAttribute(\"sdk.name\", Config.SDK_NAME);\n\n // Get baggage from the parent context (or current if not provided)\n const ctxToUse = parentContext || context.active();\n const baggage = propagation.getBaggage(ctxToUse);\n\n // Add session context — OTel baggage (cross-process) takes precedence, then persistent store\n const sessionId = baggage?.getEntry(\"session_id\")?.value ?? sessionValues.get(\"session_id\");\n const userId = baggage?.getEntry(\"user_id\")?.value ?? sessionValues.get(\"user_id\");\n const tenantId = baggage?.getEntry(\"tenant_id\")?.value ?? sessionValues.get(\"tenant_id\");\n\n if (sessionId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.session_id`, sessionId);\n }\n if (userId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.user_id`, userId);\n }\n if (tenantId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.tenant_id`, tenantId);\n }\n\n // Add custom attributes from baggage\n const customKeys = baggage?.getEntry(\"custom_keys\")?.value;\n if (customKeys) {\n for (const key of customKeys.split(\",\")) {\n const value = baggage?.getEntry(`custom.${key}`)?.value;\n if (value) {\n span.setAttribute(`${Config.LIBRARY_NAME}.custom.${key}`, value);\n }\n }\n }\n\n // Add entity attributes from SessionManager (workflow, task, agent context)\n const entityAttributes = SessionManager.getCurrentEntityAttributes();\n for (const [attrKey, attrValue] of Object.entries(entityAttributes)) {\n span.setAttribute(attrKey, attrValue);\n }\n } catch (e) {\n Logger.error(\"SessionSpanProcessor: Error setting span attributes:\", e);\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(_span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Root Instrument Filter Processor\n *\n * Blocks root spans (and their entire subtree) from instrumentations not in\n * the allowed root_instruments set. Tracking is trace-ID-based: when a root\n * span is blocked, its trace_id is recorded and all subsequent spans sharing\n * that trace_id are blocked as well.\n *\n * This guarantees correct propagation even in async frameworks where a parent\n * span may end before all children have started.\n */\n\nimport { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\nconst LOCAL_BLOCKED_ATTR = \"netra.local_blocked\";\n\nconst INSTRUMENTATION_PREFIXES = [\n \"opentelemetry.instrumentation.\",\n \"netra.instrumentation.\",\n \"@opentelemetry/instrumentation-\",\n \"@traceloop/instrumentation-\",\n];\n\nconst MAX_BLOCKED_TRACES = 4096;\nconst BLOCKED_TRACE_TTL_MS = 600_000; // 600 seconds\n\ninterface BlockedEntry {\n timestamp: number;\n}\n\nexport class RootInstrumentFilterProcessor implements SpanProcessor {\n private readonly _allowed: Set<string>;\n private readonly _blockedTraceIds: Map<string, BlockedEntry> = new Map();\n\n constructor(allowedRootInstrumentNames: Set<string>) {\n this._allowed = new Set(allowedRootInstrumentNames);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n this._processSpanStart(span, parentContext);\n } catch {\n // Best-effort; never break span pipeline\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n this._evictStaleTraces();\n } catch {\n // no-op\n }\n }\n\n shutdown(): Promise<void> {\n this._blockedTraceIds.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _processSpanStart(span: Span, parentContext: Context): void {\n const parentSpanId = this._resolveParentSpanId(parentContext)\n ?? this._getParentSpanIdFromSpan(span);\n\n const isChild = parentSpanId !== null && parentSpanId !== \"0000000000000000\";\n\n if (isChild) {\n this._maybeBlockChild(span);\n } else {\n this._maybeBlockRoot(span);\n }\n }\n\n private _maybeBlockChild(span: Span): void {\n const traceId = this._getTraceId(span);\n if (!traceId) {\n return;\n }\n if (this._blockedTraceIds.has(traceId)) {\n this._markBlocked(span);\n }\n }\n\n private _maybeBlockRoot(span: Span): void {\n if (!this._isFromInstrumentationLibrary(span)) {\n return;\n }\n\n const instrName = this._extractInstrumentationName(span);\n if (instrName === null || this._allowed.has(instrName)) {\n return;\n }\n\n const traceId = this._getTraceId(span);\n if (traceId) {\n this._blockedTraceIds.set(traceId, { timestamp: Date.now() });\n this._evictOverflow();\n }\n this._markBlocked(span);\n }\n\n private _resolveParentSpanId(parentContext: Context): string | null {\n const parentSpan = trace.getSpan(parentContext);\n if (!parentSpan) {\n return null;\n }\n const sc = parentSpan.spanContext();\n if (!sc || sc.spanId === \"0000000000000000\") {\n return null;\n }\n return sc.spanId;\n }\n\n private _getParentSpanIdFromSpan(span: Span): string | null {\n const spanAny = span as any;\n const parent = spanAny.parentSpanId ?? spanAny.parent?.spanId ?? null;\n if (!parent || parent === \"0000000000000000\") {\n return null;\n }\n return parent;\n }\n\n private _getTraceId(span: Span | ReadableSpan): string | null {\n try {\n const ctx = (span as any).spanContext?.() ?? (span as any).context;\n if (ctx) {\n return ctx.traceId ?? null;\n }\n } catch {\n // no-op\n }\n return null;\n }\n\n private _markBlocked(span: Span): void {\n try {\n span.setAttribute(LOCAL_BLOCKED_ATTR, true);\n } catch {\n // no-op\n }\n }\n\n private _isFromInstrumentationLibrary(span: Span): boolean {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return false;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return false;\n }\n return INSTRUMENTATION_PREFIXES.some((prefix) => name.startsWith(prefix));\n }\n\n private _extractInstrumentationName(span: Span): string | null {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return null;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return null;\n }\n for (const prefix of INSTRUMENTATION_PREFIXES) {\n if (name.startsWith(prefix)) {\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n }\n }\n return name;\n }\n\n private _evictStaleTraces(): void {\n const cutoff = Date.now() - BLOCKED_TRACE_TTL_MS;\n for (const [traceId, entry] of this._blockedTraceIds) {\n if (entry.timestamp > cutoff) {\n break;\n }\n this._blockedTraceIds.delete(traceId);\n }\n }\n\n private _evictOverflow(): void {\n while (this._blockedTraceIds.size > MAX_BLOCKED_TRACES) {\n const first = this._blockedTraceIds.keys().next().value;\n if (first !== undefined) {\n this._blockedTraceIds.delete(first);\n } else {\n break;\n }\n }\n }\n}\n","import { AttributeValue, Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\nconst _PROMPT_RE = /^gen_ai\\.prompts?\\.(\\d+)\\.(role|content)$/;\nconst _COMPLETION_RE = /^gen_ai\\.completions?\\.(\\d+)\\.(role|content)$/;\n\nconst _TRACELOOP_PREFIX = \"traceloop.\";\nconst _NETRA_PREFIX = \"netra.\";\n\nconst _USAGE_INPUT_TOKENS = \"gen_ai.usage.input_tokens\";\nconst _USAGE_PROMPT_TOKENS = \"gen_ai.usage.prompt_tokens\";\nconst _USAGE_OUTPUT_TOKENS = \"gen_ai.usage.output_tokens\";\nconst _USAGE_COMPLETION_TOKENS = \"gen_ai.usage.completion_tokens\";\n\nconst NETRA_USER_INPUT = \"netra.user.input\";\nconst NETRA_USER_OUTPUT = \"netra.user.output\";\n\nconst NETRA_ENTITY_INPUT = \"netra.entity.input\";\nconst NETRA_ENTITY_OUTPUT = \"netra.entity.output\";\n\nconst MAX_PARSE_LEN = 1_000_000;\n\ntype SetAttributeFn = (key: string, value: AttributeValue) => Span;\n\nfunction buildMessages(indexMap: Map<number, Record<string, string>>): string {\n const sorted = Array.from(indexMap.keys()).sort((a, b) => a - b);\n return JSON.stringify(sorted.map((i) => indexMap.get(i)!));\n}\n\nfunction extractTraceloopInput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"inputs\" in parsed\n ? (parsed as Record<string, unknown>).inputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction extractTraceloopOutput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"outputs\" in parsed\n ? (parsed as Record<string, unknown>).outputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction isEmpty(v: unknown): boolean {\n return v === undefined || v === null || v === \"\";\n}\n\nexport class SpanIOProcessor implements SpanProcessor {\n onStart(span: Span, _parentContext: Context): void {\n try {\n const attrs = (span as any).attributes ?? {};\n if (!(\"input\" in attrs)) {\n span.setAttribute(\"input\", \"\");\n }\n if (!(\"output\" in attrs)) {\n span.setAttribute(\"output\", \"\");\n }\n this._wrapSetAttribute(span);\n } catch (e) {\n Logger.error(\"SpanIOProcessor.onStart failed:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const attrs =\n (span as any)._attributes ?? (span as any).attributes;\n if (!attrs || typeof attrs !== \"object\") {\n Logger.debug(\n \"SpanIOProcessor.onEnd: could not access span attributes — OTel SDK internal API may have changed\",\n );\n return;\n }\n\n try {\n if (NETRA_USER_INPUT in attrs) {\n const userInput = attrs[NETRA_USER_INPUT];\n if (!isEmpty(userInput)) {\n attrs[\"input\"] = userInput;\n }\n delete attrs[NETRA_USER_INPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.input → input\",\n e,\n );\n }\n\n try {\n if (NETRA_USER_OUTPUT in attrs) {\n const userOutput = attrs[NETRA_USER_OUTPUT];\n if (!isEmpty(userOutput)) {\n attrs[\"output\"] = userOutput;\n }\n delete attrs[NETRA_USER_OUTPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.output → output\",\n e,\n );\n }\n } catch (e) {\n Logger.error(\n \"SpanIOProcessor.onEnd: unexpected error during netra.user promotion\",\n e,\n );\n }\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _wrapSetAttribute(span: Span): void {\n const original: SetAttributeFn = span.setAttribute.bind(span);\n\n let prompts: Map<number, Record<string, string>> | undefined;\n let completions: Map<number, Record<string, string>> | undefined;\n\n let genAiOwnsInput = false;\n let genAiOwnsOutput = false;\n\n const inputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"input\"]);\n\n const outputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"output\"]);\n\n const patched = (key: string, value: AttributeValue): Span => {\n try {\n // 1. gen_ai.prompt(s).N.{role,content} → accumulate into input\n const promptMatch = _PROMPT_RE.exec(key);\n if (promptMatch) {\n original(key, value);\n const idx = parseInt(promptMatch[1], 10);\n const field = promptMatch[2];\n if (!prompts) prompts = new Map();\n let entry = prompts.get(idx);\n if (!entry) {\n entry = {};\n prompts.set(idx, entry);\n }\n entry[field] = String(value);\n if (inputIsEmpty() || genAiOwnsInput) {\n original(\"input\", buildMessages(prompts));\n genAiOwnsInput = true;\n }\n return span;\n }\n\n // 2. gen_ai.completion(s).N.{role,content} → accumulate into output\n const completionMatch = _COMPLETION_RE.exec(key);\n if (completionMatch) {\n original(key, value);\n const idx = parseInt(completionMatch[1], 10);\n const field = completionMatch[2];\n if (!completions) completions = new Map();\n let entry = completions.get(idx);\n if (!entry) {\n entry = {};\n completions.set(idx, entry);\n }\n entry[field] = String(value);\n if (outputIsEmpty() || genAiOwnsOutput) {\n original(\"output\", buildMessages(completions));\n genAiOwnsOutput = true;\n }\n return span;\n }\n\n // 3. traceloop.entity.input → extract inputs → set input\n if (key === \"traceloop.entity.input\") {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 4. traceloop.entity.output → extract outputs → set output\n if (key === \"traceloop.entity.output\") {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 5. netra.entity.input → extract inputs → set input (LangGraph)\n if (key === NETRA_ENTITY_INPUT) {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 6. netra.entity.output → extract outputs → set output (LangGraph)\n if (key === NETRA_ENTITY_OUTPUT) {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 7. Other traceloop.* → remap to netra.*\n if (key.startsWith(_TRACELOOP_PREFIX)) {\n const newKey = _NETRA_PREFIX + key.slice(_TRACELOOP_PREFIX.length);\n return original(newKey, value);\n }\n\n // 8. gen_ai.usage token aliasing\n if (key === _USAGE_INPUT_TOKENS) {\n return original(_USAGE_PROMPT_TOKENS, value);\n }\n if (key === _USAGE_OUTPUT_TOKENS) {\n return original(_USAGE_COMPLETION_TOKENS, value);\n }\n\n // 9. Pass through\n return original(key, value);\n } catch (e) {\n Logger.debug(`SpanIOProcessor: error processing key=${key}`, e);\n try {\n return original(key, value);\n } catch {\n return span;\n }\n }\n };\n\n (span as any).setAttribute = patched;\n }\n}\n","// TODO: Replace this temporary implementation with the official OpenTelemetry GenAI semantic conventions\n// when they are published for the JavaScript SDK.\n\nexport const SpanAttributes = {\n LLM_SYSTEM: \"gen_ai.system\",\n\n LLM_REQUEST_TYPE: \"llm.request.type\",\n LLM_REQUEST_MODEL: \"gen_ai.request.model\",\n LLM_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n LLM_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n LLM_REQUEST_TOP_P: \"gen_ai.request.top_p\",\n LLM_REQUEST_REASONING: \"gen_ai.request.reasoning\",\n LLM_REQUEST_REASONING_EFFORT: \"gen_ai.request.reasoning_effort\",\n\n LLM_RESPONSE_MODEL: \"gen_ai.response.model\",\n\n LLM_USAGE_PROMPT_TOKENS: \"gen_ai.usage.prompt_tokens\",\n LLM_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n LLM_USAGE_CACHE_READ_INPUT_TOKENS: \"gen_ai.usage.cache_read_input_tokens\",\n LLM_USAGE_REASONING_TOKENS: \"gen_ai.usage.reasoning_tokens\",\n LLM_USAGE_TOTAL_TOKENS: \"llm.usage.total_tokens\",\n\n LLM_FREQUENCY_PENALTY: \"llm.frequency_penalty\",\n LLM_PRESENCE_PENALTY: \"llm.presence_penalty\",\n LLM_CHAT_STOP_SEQUENCES: \"llm.chat.stop_sequences\",\n LLM_IS_STREAMING: \"llm.is_streaming\",\n LLM_COMPLETIONS: \"gen_ai.completion\",\n LLM_PROMPTS: \"gen_ai.prompt\",\n} as const;\n","/**\n * Shared utility functions for instrumentation.\n * Handles setting OTel span attributes for LLM request/response tracing.\n */\n\nimport { Span, context } from \"@opentelemetry/api\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SpanAttributes } from \"./span-attributes\";\n\n// Suppression\nconst SUPPRESS_INSTRUMENTATION_KEY = Symbol(\"netra.suppress_instrumentation\");\n\nexport function shouldSuppressInstrumentation(): boolean {\n const ctx = context.active();\n return ctx.getValue(SUPPRESS_INSTRUMENTATION_KEY) === true;\n}\n\n// Type Utilities\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return value instanceof Promise;\n}\n\n/**\n * Define a non-enumerable, writable, configurable property on `target`.\n * Used to hide OTel internals (spans, contexts) from JSON.stringify\n * while keeping them accessible to instance methods.\n */\nexport function defineHidden<T>(target: object, key: string, value: T): void {\n Object.defineProperty(target, key, {\n value,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n}\n\nexport function isDict(v: unknown): v is Record<string, any> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport function modelAsDict(obj: unknown): Record<string, unknown> {\n if (obj == null || typeof obj !== \"object\") return {};\n\n if (\n \"toJSON\" in obj &&\n typeof (obj as { toJSON?: unknown }).toJSON === \"function\"\n ) {\n return (obj as { toJSON: () => unknown }).toJSON() as Record<\n string,\n unknown\n >;\n }\n\n if (Object.getPrototypeOf(obj) === Object.prototype) {\n return { ...(obj as Record<string, unknown>) };\n }\n\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch {\n return {};\n }\n}\n\n/**\n * A normalized input or output message used for span attribute recording.\n * Providers can build TracedMessage[] using their own extraction logic and\n * pass it directly to writePromptAttributes / writeCompletionAttributes.\n */\nexport interface TracedMessage {\n role: string;\n content: string;\n}\n\n// Internal Helpers\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction truncate(value: string, maxLen: number): string {\n if (!value || value.length <= maxLen) return value;\n return value.slice(0, maxLen) + \"...(truncated)\";\n}\n\n/**\n * Returns true if `value` represents meaningful content worth recording.\n * Guards against setting empty-string attributes on spans.\n */\nexport function hasContent(value: unknown): boolean {\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\") return value.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\n// Attribute Mapping (model params → span attributes)\nconst PARAM_ATTRIBUTE_MAP: Record<string, string> = {\n model: SpanAttributes.LLM_REQUEST_MODEL,\n temperature: SpanAttributes.LLM_REQUEST_TEMPERATURE,\n max_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_completion_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_output_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_tokens_to_sample: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n frequency_penalty: SpanAttributes.LLM_FREQUENCY_PENALTY,\n presence_penalty: SpanAttributes.LLM_PRESENCE_PENALTY,\n reasoning_effort: SpanAttributes.LLM_REQUEST_REASONING_EFFORT,\n stop: SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n stream: SpanAttributes.LLM_IS_STREAMING,\n top_p: SpanAttributes.LLM_REQUEST_TOP_P,\n};\n\nfunction setModelParams(span: Span, kwargs: Record<string, unknown>): void {\n for (const [key, attr] of Object.entries(PARAM_ATTRIBUTE_MAP)) {\n const value = kwargs[key];\n if (value !== undefined) {\n span.setAttribute(attr, value as any);\n }\n }\n}\n\n/**\n * Extracts input messages for OpenAI-compatible request shapes:\n * - \"chat\": messages[] (standard Chat Completions API)\n * - \"response\": instructions + input (Responses API)\n * - everything else: prompt string or embedding input\n *\n * Google GenAI and other providers with different shapes should build their\n * own TracedMessage[] and call writePromptAttributes directly.\n */\nexport function buildInputMessages(\n kwargs: Record<string, unknown>,\n requestType: string,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n if (requestType === \"chat\") {\n if (hasContent(kwargs.system)) {\n const systemContent =\n typeof kwargs.system === \"string\"\n ? kwargs.system\n : safeStringify(kwargs.system);\n messages.push({ role: \"system\", content: systemContent });\n }\n\n const rawMessages = kwargs.messages;\n if (!Array.isArray(rawMessages)) return messages;\n for (const msg of rawMessages) {\n if (!isDict(msg)) continue;\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n }\n }\n } else if (requestType === \"response\") {\n if (hasContent(kwargs.instructions)) {\n messages.push({ role: \"system\", content: String(kwargs.instructions) });\n }\n const input = kwargs.input;\n if (typeof input === \"string\" && input.length > 0) {\n messages.push({ role: \"user\", content: input });\n } else if (Array.isArray(input)) {\n for (const msg of input) {\n if (!isDict(msg)) continue;\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n }\n }\n }\n } else if (kwargs.prompt !== undefined) {\n // Legacy single-prompt (e.g.,completions)\n const content = String(kwargs.prompt);\n if (content.length > 0) {\n messages.push({ role: \"user\", content });\n }\n } else {\n // Embeddings / genericinput\n const input = kwargs.input ?? kwargs.inputs;\n if (hasContent(input)) {\n const content = truncate(\n safeStringify(input),\n Config.CONVERSATION_MAX_LEN,\n );\n messages.push({ role: \"user\", content });\n }\n }\n\n return messages;\n}\n\n/**\n * Extracts output messages for OpenAI-compatible response shapes:\n * - choices[].message (Chat Completions API) — with optional tool_calls\n * - output[].content[].text (Responses API)\n * - content[] text/tool_use blocks (Anthropic-style)\n * - scalar output_text shorthand\n *\n * Skips messages with empty content to avoid polluting traces.\n */\nexport function buildOutputMessages(\n response: Record<string, unknown>,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n // Priority 1: Chat Completions API (choices[]) — mutually exclusive with all others.\n // A response carrying choices[] is definitively a Chat Completions response; stop here.\n if (Array.isArray(response.choices)) {\n for (const choice of response.choices as Array<Record<string, any>>) {\n const msg = choice.message ?? choice.delta;\n if (!msg) continue;\n\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({ role: msg.role, content: String(msg.content) });\n }\n\n if (Array.isArray(msg.tool_calls)) {\n for (const tc of msg.tool_calls as Array<Record<string, unknown>>) {\n const fn = tc.function as Record<string, unknown> | undefined;\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: fn?.name ?? \"\",\n arguments: fn?.arguments ?? \"\",\n }),\n });\n }\n }\n }\n return messages;\n }\n\n // Priority 2: Responses API — output_text and/or output[].\n // output_text is a scalar shorthand that mirrors the text portions of output[].\n // When both are present, use output_text for text and output[] only for tool calls\n // to avoid duplicating the same text content.\n const hasOutputText =\n typeof response.output_text === \"string\" && response.output_text.length > 0;\n const hasOutputArray = Array.isArray(response.output);\n\n if (hasOutputText || hasOutputArray) {\n if (hasOutputText) {\n messages.push({\n role: \"assistant\",\n content: response.output_text as string,\n });\n }\n\n if (hasOutputArray) {\n for (const element of response.output as Array<Record<string, unknown>>) {\n if (!Array.isArray(element.content)) continue;\n for (const chunk of element.content as Array<Record<string, unknown>>) {\n // Only include text from output[] when output_text has not already covered it\n if (!hasOutputText && hasContent(chunk.text)) {\n messages.push({ role: \"assistant\", content: String(chunk.text) });\n }\n // Always capture tool_use blocks — output_text never contains these\n if (\n (chunk as any).type === \"tool_use\" &&\n (chunk as any).name\n ) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: (chunk as any).name,\n input: (chunk as any).input,\n }),\n });\n }\n }\n }\n }\n return messages;\n }\n\n // Priority 3: Anthropic-style content[] blocks — only reached when neither\n // Chat Completions nor Responses API fields are present.\n if (Array.isArray(response.content)) {\n for (const block of response.content as Array<any>) {\n if (block.type === \"text\" && hasContent(block.text)) {\n messages.push({ role: \"assistant\", content: String(block.text) });\n } else if (block.type === \"tool_use\" && block.name) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({ name: block.name, input: block.input }),\n });\n }\n }\n }\n\n return messages;\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.prompt.{i}.role / gen_ai.prompt.{i}.content (OTel GenAI conventions)\n * 2. \"input\" JSON blob (Netra dashboard attribute)\n */\nexport function writePromptAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n for (let i = 0; i < messages.length; i++) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.role`,\n messages[i].role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content`,\n messages[i].content,\n );\n }\n\n span.setAttribute(\"input\", JSON.stringify(messages));\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.completion.{i}.role / gen_ai.completion.{i}.content (OTel GenAI conventions)\n * 2. \"output\" JSON blob (Netra dashboard attribute)\n *\n * Tool-call blocks in the messages are also written to gen_ai.response.tool_calls.*.\n */\nexport function writeCompletionAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n let completionIdx = 0;\n\n for (const msg of messages) {\n if (msg.role === \"tool\") {\n // Tool entries are emitted as tool_call attributes, not completion entries\n try {\n const parsed = JSON.parse(msg.content) as Record<string, unknown>;\n const toolData = {\n name: parsed.name,\n id: parsed.id,\n input: parsed.input,\n arguments: parsed.arguments,\n };\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.role`,\n \"tool\",\n );\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.content`,\n JSON.stringify(toolData),\n );\n completionIdx++;\n } catch (error) {\n Logger.error(\"Error parsing tool content:\", error);\n }\n } else {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.role`,\n msg.role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.content`,\n msg.content,\n );\n completionIdx++;\n }\n }\n\n span.setAttribute(\"output\", JSON.stringify(messages));\n}\n\n\n// Request Attributes\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n system: string,\n): void {\n if (!span.isRecording()) return;\n\n // Core identifiers\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, system);\n\n if (kwargs.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Standard model parameters\n setModelParams(span, kwargs);\n\n // Reasoning config\n if (kwargs.reasoning !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_REASONING,\n JSON.stringify(kwargs.reasoning),\n );\n }\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildInputMessages(kwargs, requestType);\n writePromptAttributes(span, messages);\n\n // Legacy: FIMsuffix\n if (kwargs.suffix !== undefined) {\n span.setAttribute(\n \"llm.request.suffix\",\n truncate(safeStringify(kwargs.suffix), Config.CONVERSATION_MAX_LEN),\n );\n }\n }\n}\n\n// Response Attributes\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n\n // ResponseID\n if (response.id) {\n span.setAttribute(\"llm.response.id\", String(response.id));\n }\n\n // Model\n const model = response.model || (response.response_metadata as any)?.model;\n if (model) {\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, String(model));\n }\n\n // Tokenusage\n setUsageAttributes(span, response);\n\n // Finish reason (from firstchoice)\n setFinishReason(span, response);\n\n // Embeddingmetadata\n setEmbeddingResponseMeta(span, response);\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildOutputMessages(response);\n writeCompletionAttributes(span, messages);\n }\n}\n\n// Response Sub-helpers\nfunction setFinishReason(span: Span, response: Record<string, unknown>): void {\n const choices = response.choices as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(choices) || choices.length === 0) return;\n\n const reason = choices[0].finish_reason ?? choices[0].finishReason;\n if (reason) {\n span.setAttribute(\"gen_ai.response.finish_reason\", String(reason));\n span.setAttribute(\"llm.response.finish_reason\", String(reason));\n }\n}\n\nfunction setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usage = (response.usage ?? response.usage_metadata) as\n | Record<string, unknown>\n | undefined;\n if (!usage) return;\n\n const promptTokens = usage.prompt_tokens ?? usage.input_tokens;\n if (promptTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(promptTokens),\n );\n }\n\n const completionTokens = usage.completion_tokens ?? usage.output_tokens;\n if (completionTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(completionTokens),\n );\n }\n\n const totalTokens = usage.total_tokens;\n if (totalTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(totalTokens),\n );\n }\n\n const cacheTokens = (\n (usage.prompt_tokens_details ?? usage.input_tokens_details) as\n | { cached_tokens?: unknown }\n | undefined\n )?.cached_tokens;\n if (cacheTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(cacheTokens),\n );\n }\n\n const reasoningTokens = (\n (usage.completion_tokens_details ?? usage.output_tokens_details) as\n | { reasoning_tokens?: unknown }\n | undefined\n )?.reasoning_tokens;\n if (reasoningTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_REASONING_TOKENS,\n Number(reasoningTokens),\n );\n }\n}\n\nfunction setEmbeddingResponseMeta(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const data = response.data as Array<unknown> | undefined;\n if (!Array.isArray(data) || data.length === 0) return;\n\n span.setAttribute(\"llm.response.embedding_count\", data.length);\n\n const firstItem = data[0] as Record<string, unknown>;\n const embedding = firstItem?.embedding as number[] | undefined;\n if (Array.isArray(embedding)) {\n span.setAttribute(\"llm.response.embedding_dimensions\", embedding.length);\n }\n}\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"anthropic\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n if(response?.type === 'message_batch'){\n span.setAttribute(\"status\", response?.processing_status as string);\n }\n setBaseResponseAttributes(span, response);\n}\n","export const __version__ = \"1.0.0\";","import { context, Span, SpanKind, SpanStatusCode, trace, Tracer } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { defineHidden, isPromise, modelAsDict, shouldSuppressInstrumentation } from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype AnthropicRequestType = \"chat\" | \"beta\" | \"batches\";\n\nconst CHAT_SPAN_NAME = \"anthropic.chat\";\nconst BETA_SPAN_NAME = \"anthropic.beta\";\nconst BATCHES_SPAN_NAME = \"anthropic.batches\";\nconst STREAM_ENABLED_REQUESTS: AnthropicRequestType[] = [\"chat\", \"beta\"];\n\nfunction anthropicWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n const currentContext = context.active();\n const isStreaming = args[0]?.stream === true;\n \n const activeSpan = trace.getSpan(context.active());\n Logger.debug(`Anthropic invoke (${requestType}). Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n const span = tracer.startSpan(spanName + \".create\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.streaming\": true\n },\n },\n currentContext);\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n\n // Call the original function and get the APIPromise\n const spanContext = trace.setSpan(currentContext, span);\n const response = context.with(spanContext, () => wrapped.call(instance, ...args));\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs, spanContext);\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new AsyncStreamingWrapper(span, response, startTime, kwargs, spanContext);\n }\n\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n // Non streaming\n else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const spanContext = trace.setSpan(currentContext, span);\n const response = context.with(spanContext, () => wrapped.call(instance, ...args));\n if (isPromise(response)) {\n // Create a new promise that handles instrumentation\n const instrumentedPromise = (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n\n // Use a Proxy to preserve all methods from the original APIPromise\n // This includes withResponse(), asResponse(), etc.\n return new Proxy(instrumentedPromise, {\n get(target, prop, receiver) {\n // Special handling for then/catch/finally - use our instrumented promise\n if (prop === 'then' || prop === 'catch' || prop === 'finally') {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n\n // For all other properties, first check the original response object\n // This ensures methods like withResponse() are available\n const responseValue = (response as any)[prop];\n if (responseValue !== undefined) {\n if (typeof responseValue === 'function') {\n return responseValue.bind(response);\n }\n return responseValue;\n }\n\n // Fall back to the instrumented promise\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n });\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const betaWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BETA_SPAN_NAME, \"beta\");\n\nexport const batchesWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, BATCHES_SPAN_NAME, \"batches\"); \n\n\nconst WRAPPER_OWN_PROPS = new Set([\n 'span', 'messageStream', 'startTime', 'requestKwargs', 'completeResponse',\n 'processChunk', 'finalizeSpan', 'processEventData', 'finalizeSpanFromMessage',\n]);\n\nconst EVENT_EMITTER_METHODS = new Set([\n 'on', 'once', 'off', 'removeListener', 'addListener',\n 'emit', 'removeAllListeners', 'listeners', 'listenerCount',\n]);\n\nconst LISTENER_REGISTRATION_METHODS = new Set(['on', 'once', 'addListener']);\n\nconst COMPLETION_METHODS = new Set(['finalMessage', 'done', 'finalText']);\n\nconst TRACKED_STREAM_EVENTS = new Set(['message', 'contentBlock', 'text', 'finalMessage']);\n\nexport class MessageStreamWrapper {\n private completeResponse: Record<string, any> = {\n content: [],\n model: \"\",\n usage: {},\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private messageStream!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n private spanContext!: any;\n\n constructor(span: Span, messageStream: any, startTime: number, requestKwargs: Record<string, any>, spanContext?: any) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"messageStream\", messageStream);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n defineHidden(this, \"spanContext\", spanContext || trace.setSpan(context.active(), span));\n // Use Proxy to delegate all properties and methods to messageStream\n return new Proxy(this, {\n get(target, prop, receiver) {\n if (prop === 'toJSON') {\n return () => target.completeResponse;\n }\n\n if (typeof prop === 'string' && WRAPPER_OWN_PROPS.has(prop)) {\n return Reflect.get(target, prop, receiver);\n }\n \n // Symbol.asyncIterator - use our custom implementation\n if (prop === Symbol.asyncIterator) {\n return target[Symbol.asyncIterator].bind(target);\n }\n \n // Event emitter methods - need special handling to maintain 'this' context\n if (typeof prop === 'string' && EVENT_EMITTER_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n if (LISTENER_REGISTRATION_METHODS.has(prop)) {\n return function(event: string, listener: Function) {\n // Wrap the listener to track events in our span\n const wrappedListener = (...args: any[]) => {\n target.span.addEvent(`messagestream.event.${event}`, {\n 'event.type': event,\n });\n \n if (TRACKED_STREAM_EVENTS.has(event)) {\n if (args[0]) {\n target.processEventData(event, args[0]);\n }\n }\n \n return listener(...args);\n };\n \n return method.call(target.messageStream, event, wrappedListener);\n };\n }\n return method.bind(target.messageStream);\n }\n return method;\n }\n \n if (typeof prop === 'string' && COMPLETION_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method === 'function') {\n return async function(...args: any[]) {\n try {\n const result = await method.call(target.messageStream, ...args);\n \n // When stream completes, finalize our span\n if (prop === 'finalMessage' || prop === 'done') {\n target.finalizeSpanFromMessage(result);\n }\n \n return result;\n } catch (error) {\n target.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n };\n }\n return method;\n }\n \n // Everything else - delegate to messageStream\n const value = target.messageStream[prop];\n if (typeof value === 'function') {\n return value.bind(target.messageStream);\n }\n return value;\n }\n });\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<unknown> {\n try {\n for await (const chunk of this.messageStream) {\n this.processChunk(chunk);\n yield chunk;\n }\n this.finalizeSpan(SpanStatusCode.OK);\n } catch (err) {\n Logger.error(\"netra.instrumentation.anthropic: Stream error\", err);\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw err;\n }\n }\n\n getSpanContext(): any {\n return this.spanContext;\n }\n\n private processEventData(eventType: string, data: any): void {\n switch (eventType) {\n case 'message':\n // This is the message_start event data\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n if (data.usage) {\n this.completeResponse.usage = data.usage;\n }\n break;\n \n case 'text':\n // Accumulate text\n if (!this.completeResponse.currentText) {\n this.completeResponse.currentText = '';\n }\n this.completeResponse.currentText += data;\n break;\n \n case 'contentBlock':\n // Track content blocks\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push(data);\n break;\n \n case 'finalMessage':\n // Final message contains everything\n if (data.model) this.completeResponse.model = data.model;\n if (data.content) this.completeResponse.content = data.content;\n if (data.usage) this.completeResponse.usage = data.usage;\n break;\n }\n }\n\n private processChunk(chunk: any): void {\n /**\n * Anthropic streaming events look like:\n * - message_start\n * - content_block_start\n * - content_block_delta\n * - content_block_stop\n * - message_delta\n * - message_stop\n */\n\n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n const block = chunk.content_block;\n if (block.type === \"tool_use\") {\n this.completeResponse.content.push({\n type: \"tool_use\",\n id: block.id,\n name: block.name,\n input: \"\",\n });\n } else {\n this.completeResponse.content.push({\n type: block.type,\n text: \"\",\n });\n }\n break;\n }\n\n case \"content_block_delta\": {\n if (!this.completeResponse.content || this.completeResponse.content.length === 0) {\n this.completeResponse.content = [{ type: 'text', text: '' }];\n }\n \n const lastBlock =\n this.completeResponse.content[\n this.completeResponse.content.length - 1\n ];\n\n if (chunk.delta?.type === \"input_json_delta\" && lastBlock?.type === \"tool_use\") {\n lastBlock.input += chunk.delta.partial_json ?? \"\";\n } else if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"content_block_stop\": {\n const blocks = this.completeResponse.content;\n if (blocks && blocks.length > 0) {\n const finishedBlock = blocks[blocks.length - 1];\n if (finishedBlock?.type === \"tool_use\" && typeof finishedBlock.input === \"string\") {\n try {\n finishedBlock.input = JSON.parse(finishedBlock.input);\n } catch {\n Logger.warn(\"netra.instrumentation.anthropic: Failed to parse tool use input\", finishedBlock.input);\n }\n }\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n this.completeResponse.usage = {\n ...this.completeResponse.usage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpanFromMessage(message: any): void {\n // Extract from final message if available\n if (message) {\n if (message.model) this.completeResponse.model = message.model;\n if (message.content) this.completeResponse.content = message.content;\n if (message.usage) this.completeResponse.usage = message.usage;\n }\n \n this.finalizeSpan(SpanStatusCode.OK);\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n private spanContext!: any;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>, spanContext?: any) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n defineHidden(this, \"spanContext\", spanContext || trace.setSpan(context.active(), span));\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await context.with(this.spanContext, () => this.iterator!.next());\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n // Reusing the same chunk processing logic as MessageStreamWrapper, but adapted for this context\n // The raw chunks from messages.create({stream:true}) are the same as what MessageStreamWrapper handles.\n \n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n this.completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n this.completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n const content = this.completeResponse.content as any[] || [];\n this.completeResponse.content = content;\n const block = chunk.content_block;\n if (block.type === \"tool_use\") {\n content.push({\n type: \"tool_use\",\n id: block.id,\n name: block.name,\n input: \"\",\n });\n } else {\n content.push({\n type: block.type,\n text: \"\",\n });\n }\n break;\n }\n\n case \"content_block_delta\": {\n const content = this.completeResponse.content as any[] || [];\n if (content.length === 0) {\n content.push({ type: 'text', text: '' });\n this.completeResponse.content = content;\n }\n \n const lastBlock = content[content.length - 1];\n\n if (chunk.delta?.type === \"input_json_delta\" && lastBlock?.type === \"tool_use\") {\n lastBlock.input += chunk.delta.partial_json ?? \"\";\n } else if (lastBlock && chunk.delta?.text) {\n lastBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"content_block_stop\": {\n const content = this.completeResponse.content as any[] || [];\n if (content.length > 0) {\n const finishedBlock = content[content.length - 1];\n if (finishedBlock?.type === \"tool_use\" && typeof finishedBlock.input === \"string\") {\n try {\n finishedBlock.input = JSON.parse(finishedBlock.input);\n } catch {\n Logger.warn(\"netra.instrumentation.anthropic: Failed to parse tool use input\", finishedBlock.input);\n }\n }\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.usage) {\n const currentUsage = this.completeResponse.usage as any || {};\n this.completeResponse.usage = {\n ...currentUsage,\n ...chunk.delta.usage,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n this.completeResponse.usage = chunk.usage;\n }\n break;\n }\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n \n // We match the format expected by setResponseAttributes\n setResponseAttributes(this.span, {\n model: this.completeResponse.model,\n content: this.completeResponse.content,\n usage: this.completeResponse.usage,\n });\n\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","import { createRequire } from \"module\";\nimport { context, SpanKind, trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { setRequestAttributes } from \"./utils\";\nimport { __version__ } from \"./version\";\nimport { batchesWrapper, betaWrapper, chatWrapper, MessageStreamWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.anthropic\";\nconst INSTRUMENTS = [\"anthropic >= 0.71.2\"];\n\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\nlet anthropicClasses: any[] = [];\n\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Resolve the Anthropic module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveAnthropicAsync(): Promise<any[]> {\n if (anthropicClasses.length > 0) return anthropicClasses;\n\n try {\n // @ts-ignore - @anthropic-ai/sdk is an optional peer dependency\n const anthropicModule = await import(\"@anthropic-ai/sdk\");\n anthropicClasses.push(anthropicModule.Anthropic || anthropicModule.default || anthropicModule);\n } catch {\n Logger.warn(\"Failed to resolve Anthropic ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@anthropic-ai/sdk\");\n const cjsClass = mod.Anthropic || mod.default || mod;\n if (!anthropicClasses.includes(cjsClass)) {\n anthropicClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Anthropic CJS module\");\n }\n\n return anthropicClasses;\n}\n\nfunction resolveAnthropic(): any[] {\n return anthropicClasses;\n}\n\n\nexport class NetraAnthropicInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n async instrumentAsync(options: InstrumentorOptions = {}): Promise<NetraAnthropicInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Anthropic is already instrumented\");\n return this;\n }\n\n const classes = await resolveAnthropicAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((AnthropicSDK, index) => {\n this._instrumentMessages(AnthropicSDK, index);\n this._instrumentBetaMessages(AnthropicSDK, index);\n this._instrumentBatchMessages(AnthropicSDK, index);\n });\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void{\n if (!isInstrumented) {\n Logger.warn(\"Anthropic is not instrumented\");\n return;\n }\n\n const classes = resolveAnthropic();\n classes.forEach((AnthropicSDK, index) => {\n this._uninstrumentMessages(AnthropicSDK, index);\n this._uninstrumentBetaMessages(AnthropicSDK, index);\n this._uninstrumentBatchMessages(AnthropicSDK, index);\n });\n\n originalMethods.clear();\n anthropicClasses = [];\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\nprivate _instrumentMessages(AnthropicSDK: any, index: number): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const MessagesClass = AnthropicSDK.Messages;\n if (!MessagesClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Messages class to instrument\",\n );\n return;\n }\n\n if (MessagesClass?.prototype?.stream) {\n const originalStream = MessagesClass.prototype.stream as Function;\n originalMethods.set(`messages.stream-${index}`, originalStream);\n const tracer = this.tracer;\n MessagesClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n\n const currentContext = context.active();\n const span = tracer.startSpan(\"anthropic\" + \".stream\", {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": \"chat\",\n \"llm.streaming\": true,\n \"llm.operation\": \"stream\"\n },\n }, currentContext);\n\n const spanContext = trace.setSpan(currentContext, span);\n\n setRequestAttributes(span, kwargs, \"chat\");\n const startTime = Date.now();\n\n const instrumentedCreate = (this as any).create;\n const originalCreate = originalMethods.get(`messages.create-${index}`);\n if (originalCreate) {\n (this as any).create = originalCreate;\n }\n\n try {\n const messageStream = context.with(spanContext, () => original(...args));\n return new MessageStreamWrapper(span, messageStream, startTime, kwargs, spanContext);\n } finally {\n if (originalCreate) {\n (this as any).create = instrumentedCreate;\n }\n }\n } as typeof MessagesClass.prototype.stream;\n }\n\n if (MessagesClass?.prototype?.create) {\n const originalCreate = MessagesClass.prototype.create as Function;\n originalMethods.set(`messages.create-${index}`, originalCreate);\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n MessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof MessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument messages: ${error}`);\n }\n}\n\nprivate _instrumentBetaMessages(AnthropicSDK: any, index: number): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n if (!BetaMessagesClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Beta Messages class to instrument\",\n );\n return;\n }\n\n if (BetaMessagesClass?.prototype?.create) {\n const originalCreate = BetaMessagesClass.prototype.create as Function;\n originalMethods.set(`beta.messages.create-${index}`, originalCreate);\n const tracer = this.tracer;\n const wrapper = betaWrapper(tracer);\n\n BetaMessagesClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument beta: ${error}`);\n }\n}\n\nprivate _instrumentBatchMessages(AnthropicSDK: any, index: number):void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const BatchMessageClass = AnthropicSDK.Messages?.Batches;\n if (!BatchMessageClass) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Anthropic Batches class to instrument\",\n );\n return;\n }\n\n if (BatchMessageClass?.prototype?.create) {\n const originalCreate = BatchMessageClass.prototype.create as Function;\n originalMethods.set(`batch.messages.create-${index}`, originalCreate);\n const tracer = this.tracer;\n const wrapper = batchesWrapper(tracer);\n\n BatchMessageClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n \n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs,\n );\n } as typeof BatchMessageClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to instrument batches: ${error}`);\n }\n}\n private _uninstrumentMessages(AnthropicSDK: any, index: number): void {\n try {\n const MessagesClass = AnthropicSDK.Messages;\n\n const originalCreate = originalMethods.get(`messages.create-${index}`);\n if (originalCreate && MessagesClass?.prototype) {\n MessagesClass.prototype.create =\n originalCreate as typeof MessagesClass.prototype.create;\n }\n\n const originalStream = originalMethods.get(`messages.stream-${index}`);\n if (originalStream && MessagesClass?.prototype) {\n MessagesClass.prototype.stream =\n originalStream as typeof MessagesClass.prototype.stream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument messages: ${error}`);\n }\n }\n private _uninstrumentBetaMessages(AnthropicSDK: any, index: number): void {\n try {\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n\n const originalCreate = originalMethods.get(`beta.messages.create-${index}`);\n if (originalCreate && BetaMessagesClass?.prototype) {\n BetaMessagesClass.prototype.create =\n originalCreate as typeof BetaMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument beta: ${error}`);\n }\n }\n private _uninstrumentBatchMessages(AnthropicSDK: any, index: number): void {\n try {\n const BatchMessagesClass = AnthropicSDK.Messages?.Batches;\n\n const originalCreate = originalMethods.get(`batch.messages.create-${index}`);\n if (originalCreate && BatchMessagesClass?.prototype) {\n BatchMessagesClass.prototype.create =\n originalCreate as typeof BatchMessagesClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument batches: ${error}`);\n }\n }\n}\n\nexport const anthropicInstrumentor = new NetraAnthropicInstrumentor();\n\nexport { AsyncStreamingWrapper, chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for Google GenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n","/**\n * Utility functions for Google GenAI instrumentation\n *\n * Google GenAI has a different response format than OpenAI:\n * - Response: { response: EnhancedGenerateContentResponse }\n * - EnhancedGenerateContentResponse: { candidates, usageMetadata, promptFeedback }\n * - UsageMetadata: { promptTokenCount, candidatesTokenCount, totalTokenCount, cachedContentTokenCount }\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nfunction safeStringify(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * Extract the model name from the model string.\n * @param model - The model string.\n * @returns The model name without the \"models/\" prefix if it exists.\n */\nexport function extractModelName(model: string): string {\n if (model && model.startsWith(\"models/\")) {\n return model.replace(/^models\\//, \"\");\n }\n return model;\n}\n\n/**\n * Normalize role values from Google GenAI.\n *\n * Google GenAI uses \"model\" to indicate the assistant role.\n * This function maps \"model\" → \"assistant\" and returns any other role unchanged in lowercase.\n */\nfunction normalizeGenAIRole(raw: string): string {\n const rawLower = raw.toLowerCase();\n return rawLower === \"model\" ? \"assistant\" : rawLower;\n}\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n args: Record<string, unknown>,\n): void {\n // Use a private property on the span to store kwargs temporarily for setResponseAttributes\n (span as any)._netra_kwargs = kwargs;\n if (!span.isRecording()) {\n return;\n }\n\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, \"google_genai\");\n\n // Model is set on the GenerativeModel instance, not in the request kwargs\n // We need to access it from `this.model` in the wrapper if available\n // For now, set from kwargs if provided\n if (kwargs.model !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Generation config parameters (from generationConfig object or direct kwargs)\n const generationConfig =\n (kwargs.generationConfig as Record<string, unknown>) ?? kwargs;\n\n if (generationConfig.temperature !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TEMPERATURE,\n Number(generationConfig.temperature),\n );\n }\n\n if (generationConfig.topP !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TOP_P,\n Number(generationConfig.topP),\n );\n }\n\n if (generationConfig.topK !== undefined) {\n span.setAttribute(\"gen_ai.request.top_k\", Number(generationConfig.topK));\n }\n\n if (generationConfig.maxOutputTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n Number(generationConfig.maxOutputTokens),\n );\n }\n\n if (generationConfig.stopSequences !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n safeStringify(generationConfig.stopSequences),\n );\n }\n\n // Candidate count\n if (generationConfig.candidateCount !== undefined) {\n span.setAttribute(\n \"gen_ai.request.candidate_count\",\n Number(generationConfig.candidateCount),\n );\n }\n\n // Presence/frequency penalty\n if (generationConfig.presencePenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_PRESENCE_PENALTY,\n Number(generationConfig.presencePenalty),\n );\n }\n if (generationConfig.frequencyPenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_FREQUENCY_PENALTY,\n Number(generationConfig.frequencyPenalty),\n );\n }\n\n // Embedding dimensions\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n\n // Tools\n if (Array.isArray(kwargs.tools) && kwargs.tools.length > 0) {\n span.setAttribute(\"gen_ai.request.tools_count\", kwargs.tools.length);\n }\n\n // Tool config\n if (kwargs.toolConfig !== undefined) {\n span.setAttribute(\n \"gen_ai.request.tool_config\",\n safeStringify(kwargs.toolConfig),\n );\n }\n\n // Safety settings\n if (\n Array.isArray(kwargs.safetySettings) &&\n kwargs.safetySettings.length > 0\n ) {\n span.setAttribute(\n \"gen_ai.request.safety_settings_count\",\n kwargs.safetySettings.length,\n );\n }\n\n // System instruction\n if (kwargs.systemInstruction !== undefined) {\n if (isTraceContentEnabled()) {\n span.setAttribute(\n \"gen_ai.request.system_instruction\",\n safeStringify(kwargs.systemInstruction),\n );\n }\n span.setAttribute(\"gen_ai.request.has_system_instruction\", true);\n }\n\n // Content tracing - prompts\n if (isTraceContentEnabled()) {\n _setPromptAttributes(span, kwargs, args);\n }\n}\n\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\n/**\n * Extract and set prompt content from Google GenAI request\n */\nfunction _setPromptAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n args: any,\n): void {\n // For generateContent, the prompt can be:\n // 1. A string (simple prompt)\n // 2. An array of Parts (Array<string | Part>)\n // 3. A GenerateContentRequest object with contents array\n\n let promptIndex = 0;\n\n // 1. Add system instruction if present (from getGenerativeModel)\n if (kwargs.systemInstruction !== undefined) {\n const systemInstruction = kwargs.systemInstruction as any;\n let systemContent = \"\";\n\n if (typeof systemInstruction === \"string\") {\n systemContent = systemInstruction;\n } else if (\n systemInstruction.parts &&\n Array.isArray(systemInstruction.parts)\n ) {\n systemContent = systemInstruction.parts\n .filter((p: any) => p.text !== undefined)\n .map((p: any) => String(p.text))\n .join(\"\");\n } else if (systemInstruction.text) {\n systemContent = String(systemInstruction.text);\n } else {\n systemContent = JSON.stringify(systemInstruction);\n }\n\n if (systemContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"system\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n systemContent,\n );\n promptIndex++;\n }\n }\n\n // 2. Chat history from startChat (multiturn context)\n if (kwargs.history && Array.isArray(kwargs.history)) {\n for (const turn of kwargs.history as Array<Record<string, unknown>>) {\n const role = normalizeGenAIRole(String(turn.role ?? \"user\"));\n const parts = turn.parts as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(parts)) {\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n }\n\n // 3. Add prompts from args (generateContent/embedContent call)\n if (!args) return;\n\n // Handle string prompt\n if (typeof args === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n args,\n );\n promptIndex++;\n return;\n }\n\n // Handle Array<string | Part>\n if (Array.isArray(args)) {\n const textParts = args\n .map((p: any) => {\n if (typeof p === \"string\") return p;\n if (p && typeof p.text === \"string\") return p.text;\n return \"\";\n })\n .filter(Boolean)\n .join(\" \");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n return;\n }\n\n // Handle GenerateContentRequest object { contents: [...] }\n const contents = args.contents as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(contents)) {\n for (const content of contents) {\n const role = String(content.role ?? \"user\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (Array.isArray(parts)) {\n const textParts = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n\n // Track non-text parts\n const inlineDataParts = parts.filter((p) => p.inlineData !== undefined);\n if (inlineDataParts.length > 0) {\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.has_inline_data`,\n true,\n );\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.inline_data_count`,\n inlineDataParts.length,\n );\n }\n }\n }\n }\n\n // For embedContent, handle content object { parts: [...] } or string\n if (args.content !== undefined) {\n const content = args.content as Record<string, unknown> | string;\n if (typeof content === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n content,\n );\n promptIndex++;\n } else if (content.parts !== undefined) {\n const parts = content.parts as Array<Record<string, unknown>>;\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n}\n\n/**\n * Set response attributes for Google GenAI responses\n * Handles the specific structure of GenerateContentResult\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) {\n return;\n }\n\n // Google GenAI returns { response: EnhancedGenerateContentResponse }\n // The response object itself is what we need to parse\n const actualResponse =\n (response.response as Record<string, unknown>) ?? response;\n\n // Set usage metadata\n _setUsageAttributes(span, actualResponse);\n\n // Set candidate attributes\n _setCandidateAttributes(span, actualResponse);\n\n // Set prompt feedback if present (content filtering)\n _setPromptFeedbackAttributes(span, actualResponse);\n\n // Set completion content if tracing is enabled\n if (isTraceContentEnabled()) {\n _setCompletionAttributes(span, actualResponse);\n }\n\n // Handle embedding response\n _setEmbeddingResponseAttributes(span, actualResponse);\n}\n\n/**\n * Extract and set token usage from usageMetadata\n */\nfunction _setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usageMetadata = response.usageMetadata as\n | Record<string, unknown>\n | undefined;\n if (!usageMetadata) return;\n\n // Prompt tokens\n if (usageMetadata.promptTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(usageMetadata.promptTokenCount),\n );\n }\n\n // Completion/candidates tokens\n if (usageMetadata.candidatesTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(usageMetadata.candidatesTokenCount),\n );\n }\n\n // Total tokens\n if (usageMetadata.totalTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(usageMetadata.totalTokenCount),\n );\n }\n\n // Cached content tokens\n if (usageMetadata.cachedContentTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(usageMetadata.cachedContentTokenCount),\n );\n }\n}\n\n/**\n * Extract and set attributes from candidates\n */\nfunction _setCandidateAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates) || candidates.length === 0) return;\n\n span.setAttribute(\"gen_ai.response.candidate_count\", candidates.length);\n\n const firstCandidate = candidates[0];\n\n // Finish reason\n if (firstCandidate.finishReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.finish_reason\",\n String(firstCandidate.finishReason),\n );\n }\n\n // Average log probs (if present)\n if (firstCandidate.avgLogprobs !== undefined) {\n span.setAttribute(\n \"gen_ai.response.avg_logprobs\",\n Number(firstCandidate.avgLogprobs),\n );\n }\n\n // Safety ratings\n const safetyRatings = firstCandidate.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings) && safetyRatings.length > 0) {\n span.setAttribute(\n \"gen_ai.response.safety_ratings_count\",\n safetyRatings.length,\n );\n\n // Set individual safety ratings\n for (let i = 0; i < safetyRatings.length; i++) {\n const rating = safetyRatings[i];\n if (rating.category !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.category`,\n String(rating.category),\n );\n }\n if (rating.probability !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.probability`,\n String(rating.probability),\n );\n }\n }\n }\n\n // Citation metadata\n const citationMetadata = firstCandidate.citationMetadata as\n | Record<string, unknown>\n | undefined;\n if (citationMetadata?.citationSources !== undefined) {\n const sources = citationMetadata.citationSources as Array<unknown>;\n span.setAttribute(\"gen_ai.response.citation_count\", sources.length);\n }\n\n // Grounding metadata\n if (firstCandidate.groundingMetadata !== undefined) {\n span.setAttribute(\"gen_ai.response.has_grounding\", true);\n }\n}\n\n/**\n * Set prompt feedback attributes (content filtering info)\n */\nfunction _setPromptFeedbackAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const promptFeedback = response.promptFeedback as\n | Record<string, unknown>\n | undefined;\n if (!promptFeedback) return;\n\n if (promptFeedback.blockReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_reason\",\n String(promptFeedback.blockReason),\n );\n }\n\n if (promptFeedback.blockReasonMessage !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_message\",\n String(promptFeedback.blockReasonMessage),\n );\n }\n\n const safetyRatings = promptFeedback.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings)) {\n span.setAttribute(\n \"gen_ai.response.prompt_safety_ratings_count\",\n safetyRatings.length,\n );\n }\n}\n\n/**\n * Extract and set completion content from candidates\n */\nfunction _setCompletionAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates)) return;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const content = candidate.content as Record<string, unknown> | undefined;\n\n if (!content) continue;\n\n const role = normalizeGenAIRole(String(content.role ?? \"model\"));\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (!Array.isArray(parts)) continue;\n\n // Extract text from parts\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textContent) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${i}.role`, role);\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${i}.content`,\n textContent,\n );\n }\n\n // Track function calls\n const functionCalls = parts.filter((p) => p.functionCall !== undefined);\n if (functionCalls.length > 0) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call_count`,\n functionCalls.length,\n );\n\n for (let j = 0; j < functionCalls.length; j++) {\n const fc = functionCalls[j].functionCall as Record<string, unknown>;\n if (fc.name !== undefined) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call.${j}.name`,\n String(fc.name),\n );\n }\n }\n }\n }\n}\n\n/**\n * Set attributes for embedding responses\n */\nfunction _setEmbeddingResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n // Single embedding response\n const embedding = response.embedding as Record<string, unknown> | undefined;\n if (embedding?.values !== undefined) {\n const values = embedding.values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n\n // Batch embedding response\n const embeddings = response.embeddings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(embeddings)) {\n span.setAttribute(\"gen_ai.response.embedding_count\", embeddings.length);\n if (embeddings.length > 0 && embeddings[0].values !== undefined) {\n const values = embeddings[0].values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n }\n}\n","import {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { extractModelName, setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype GoogleGenAIRequestType = \"chat\" | \"embedding\";\n\nconst CHAT_SPAN_NAME = \"google_genai.chat\";\nconst EMBEDDING_SPAN_NAME = \"google_genai.embedding\";\n\nfunction googleGenAIWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n const history = modelInstance.history as unknown | undefined;\n\n if(modelName) {\n kwargs.model = extractModelName(modelName);\n }\n if (systemInstruction) {\n kwargs.systemInstruction = systemInstruction;\n }\n if (history) {\n kwargs.history = history;\n }\n\n const currentContext = context.active();\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n const startTime = Date.now();\n const response = original.apply(this, args);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\nfunction googleGenAIStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n const history = modelInstance.history as unknown | undefined;\n\n if (modelName) kwargs.model = extractModelName(modelName);\n if (systemInstruction) kwargs.systemInstruction = systemInstruction;\n if (history) kwargs.history = history;\n\n const currentContext = context.active();\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n const startTime = Date.now();\n\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n\n const response = original.apply(this, args);\n\n // generateContentStream() is async -> Promise<StreamResult>\n if (!isPromise(response)) {\n // If SDK changes to sync stream, still handle it safely\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n\n return (async () => {\n try {\n const streamResult: any = await response;\n\n // Google GenAI stream result typically looks like:\n // { stream: AsyncIterable<Chunk>, response?: Promise<FinalResponse> }\n // We will wrap streamResult.stream so we can end span at completion.\n const originalStream: AsyncIterable<any> = streamResult.stream;\n\n if (\n !originalStream ||\n typeof originalStream[Symbol.asyncIterator] !== \"function\"\n ) {\n // Not a real stream, treat like non-stream\n const endTime = Date.now();\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return streamResult;\n }\n\n let chunkIndex = 0;\n let finalText = \"\";\n let firstTokenRecorded = false;\n\n const wrappedStream: AsyncIterable<any> = {\n [Symbol.asyncIterator]() {\n const iterator = originalStream[Symbol.asyncIterator]();\n return {\n async next() {\n try {\n const res = await iterator.next();\n\n // res = { value, done }\n if (res?.done) {\n const endTime = Date.now();\n\n // Await the response promise if available to get full metadata (token counts, etc.)\n if (\n streamResult.response &&\n isPromise(streamResult.response)\n ) {\n try {\n const finalResponse =\n await streamResult.response;\n const responseDict = modelAsDict(finalResponse);\n setResponseAttributes(span, responseDict);\n } catch {\n // If response promise fails, still set what we have from stream\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n } else {\n // Fallback: set attributes from streamResult\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\n \"llm.response.duration\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return res;\n }\n\n const chunk = res.value;\n\n // Optional: store chunk-by-chunk attributes if you want\n // span.setAttribute(`llm.stream.chunk.${chunkIndex}`, ...)\n // Best-effort: accumulate chunk.text() if available\n try {\n const t =\n typeof chunk?.text === \"function\"\n ? chunk.text()\n : chunk?.text;\n if (typeof t === \"string\") {\n if (t && !firstTokenRecorded) {\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n (Date.now() - startTime) / 1000,\n );\n firstTokenRecorded = true;\n }\n finalText += t;\n }\n } catch {\n // ignore chunk parsing issues\n }\n\n chunkIndex += 1;\n return res;\n } catch (error) {\n // End span on streaming error\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error\n ? error.message\n : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n async return() {\n // Called if consumer stops early (break)\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return { value: undefined, done: true };\n },\n };\n },\n };\n\n // Return same object but with wrapped stream\n return {\n ...streamResult,\n stream: wrappedStream,\n };\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\n/**\n * Wraps startChat to instrument the returned ChatSession's sendMessage\n * and sendMessageStream methods with proper tracing.\n */\nfunction googleGenAIStartChatWrapper(tracer: Tracer, spanName: string, requestType: GoogleGenAIRequestType) {\n const sendMessageWrapperFn = googleGenAIWrapper(tracer, spanName, requestType);\n const sendMessageStreamWrapperFn = googleGenAIStreamWrapper(tracer, spanName, requestType);\n\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n const chatSession = original.apply(this, args);\n if (!chatSession) return chatSession;\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as unknown | undefined;\n const chatHistory = (args[0] as Record<string, unknown> | undefined)?.history;\n\n if (typeof chatSession.sendMessage === \"function\" && !chatSession.__netra_patched) {\n const originalSendMessage = chatSession.sendMessage.bind(chatSession);\n const wrappedSendMessage = sendMessageWrapperFn(originalSendMessage);\n\n chatSession.sendMessage = function (this: unknown, ...sendArgs: any[]) {\n const ctx = this as Record<string, unknown>;\n if (modelName) ctx.model = modelName;\n if (systemInstruction) ctx.systemInstruction = systemInstruction;\n if (chatHistory) ctx.history = chatHistory;\n return wrappedSendMessage.apply(this, sendArgs);\n };\n\n if (typeof chatSession.sendMessageStream === \"function\") {\n const originalSendStream = chatSession.sendMessageStream.bind(chatSession);\n const wrappedSendStream = sendMessageStreamWrapperFn(originalSendStream);\n\n chatSession.sendMessageStream = function (this: unknown, ...sendArgs: any[]) {\n const ctx = this as Record<string, unknown>;\n if (modelName) ctx.model = modelName;\n if (systemInstruction) ctx.systemInstruction = systemInstruction;\n if (chatHistory) ctx.history = chatHistory;\n return wrappedSendStream.apply(this, sendArgs);\n };\n }\n\n chatSession.__netra_patched = true;\n }\n\n return chatSession;\n } as unknown as F;\n };\n}\n\n/* Specific wrappers for different requests */\nexport const chatWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\nexport const chatStreamWrapper = (tracer: Tracer) =>\n googleGenAIStreamWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const startChatWrapper = (tracer: Tracer) =>\n googleGenAIStartChatWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n","/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatStreamWrapper, chatWrapper, embeddingsWrapper, startChatWrapper } from \"./wrappers\";\n\nimport shimmer from \"shimmer\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.google_genai\";\nconst INSTRUMENTS = [\"@google/genai >= 0.24.1\"];\n\n// Track instrumentation state\nlet isInstrumented = false;\nlet generativeModelClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Resolve the Google GenAI module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveGoogleGenerativeAIAsync(): Promise<any[]> {\n if (generativeModelClasses.length > 0) return generativeModelClasses;\n\n try {\n // @ts-ignore - @google/generative-ai is an optional peer dependency\n const googleGenAIModule = await import(\"@google/generative-ai\");\n const esmClass =\n googleGenAIModule.GenerativeModel ||\n googleGenAIModule.default?.GenerativeModel ||\n googleGenAIModule.default ||\n googleGenAIModule;\n generativeModelClasses.push(esmClass);\n } catch {\n Logger.warn(\"Failed to resolve Google GenAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@google/generative-ai\");\n const cjsClass =\n mod.GenerativeModel ||\n mod.default?.GenerativeModel ||\n mod.default ||\n mod;\n if (!generativeModelClasses.includes(cjsClass)) {\n generativeModelClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Google GenAI CJS module\");\n }\n\n return generativeModelClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveGoogleGenerativeAIAsync() first to populate cache.\n */\nfunction resolveGoogleGenerativeAI(): any[] {\n return generativeModelClasses;\n}\n\n/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nexport class NetraGoogleGenerativeAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n // Tracer is initialized lazily during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n /**\n * Instrument Google GenAI client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {},\n ): Promise<NetraGoogleGenerativeAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n const classes = await resolveGoogleGenerativeAIAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((model) => this._instrumentGenerativeModel(model));\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Google GenAI client methods (sync version)\n */\n instrument(\n options: InstrumentorOptions = {},\n ): NetraGoogleGenerativeAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n const classes = resolveGoogleGenerativeAI();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Google GenAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((model) => this._instrumentGenerativeModel(model));\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument Google GenAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Google GenAI is not instrumented\");\n return;\n }\n\n const classes = resolveGoogleGenerativeAI();\n classes.forEach((model) => this._uninstrumentGenerativeModel(model));\n\n generativeModelClasses = [];\n isInstrumented = false;\n }\n\n /**\n * Check if Google GenAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentGenerativeModel(GenerativeModel: any): void {\n if (!this.tracer) return;\n\n try {\n if (!GenerativeModel?.prototype) {\n Logger.error(\n \"Failed to find Google GenAI GenerativeModel to instrument\",\n );\n return;\n }\n\n const tracer = this.tracer;\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContent\",\n chatWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContentStream\",\n chatStreamWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"embedContent\",\n embeddingsWrapper(tracer),\n );\n\n if (typeof GenerativeModel.prototype.startChat === \"function\") {\n shimmer.wrap(\n GenerativeModel.prototype,\n \"startChat\",\n startChatWrapper(tracer),\n );\n }\n } catch (error) {\n Logger.debug(\n `Google GenAI instrumentation: failed to instrument: ${error}`,\n );\n }\n }\n\n private _uninstrumentGenerativeModel(GenerativeModel: any): void {\n try {\n if (!GenerativeModel?.prototype) return;\n\n if (typeof GenerativeModel.prototype.generateContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContent\");\n }\n if (\n typeof GenerativeModel.prototype.generateContentStream === \"function\"\n ) {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContentStream\");\n }\n if (typeof GenerativeModel.prototype.embedContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"embedContent\");\n }\n if (typeof GenerativeModel.prototype.startChat === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"startChat\");\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Google GenAI: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const googleGenerativeAIInstrumentor =\n new NetraGoogleGenerativeAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport { chatWrapper, chatStreamWrapper, embeddingsWrapper, startChatWrapper } from \"./wrappers\";\n\n// Re-export utilities\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"groq\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseResponseAttributes(span, response);\n}\n","import { Tracer, Span, SpanKind, SpanStatusCode, context } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport {\n defineHidden,\n modelAsDict,\n isPromise,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\ntype GroqRequestType = \"chat\";\n\nconst CHAT_SPAN_NAME = \"groq.chat\";\nconst STREAM_ENABLED_REQUESTS: GroqRequestType[] = [\"chat\"];\n\nfunction groqWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GroqRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n const isStreaming = kwargs.stream === true;\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext\n );\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream: any = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new StreamingWrapper(span, response, startTime, kwargs);\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n groqWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, any> = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (!this.iterator) {\n if (typeof this.response[Symbol.iterator] === \"function\") {\n this.iterator = this.response[Symbol.iterator]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) {\n throw new Error(\"Iterator not initialized\");\n }\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict =\n typeof chunk?.toDict === \"function\" ? chunk.toDict() : chunk;\n const choices = this.completeResponse.choices as any[];\n\n if (chunkDict.model) this.completeResponse.model = chunkDict.model;\n\n const chunkChoices = chunkDict.choices || [];\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = choice.delta || {};\n if (delta?.content) {\n if (!choices[index].message) {\n choices[index].message = { role: \"assistant\", content: \"\" };\n }\n choices[index].message.content += String(delta.content);\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n if (chunkDict.response?.status === \"completed\") {\n const outputs = chunkDict.response.output || [];\n outputs.forEach((output: any) => {\n const content = output.content || [];\n content.forEach((item: any) => {\n choices.push({\n message: { role: \"assistant\", content: item.text || \"\" },\n });\n });\n });\n this.completeResponse.usage = chunkDict.response.usage || {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const duration = (Date.now() - this.startTime) / 1000;\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (Symbol.iterator in (this.response as any)) {\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n\n // Completion API\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n // Response API\n if ((chunkDict.response as any)?.status === \"completed\") {\n const response = chunkDict.response as Record<string, unknown>;\n const responseOutput = (response.output || []) as Array<\n Record<string, unknown>\n >;\n responseOutput.forEach((output: any) => {\n const content = output.content as Array<Record<string, unknown>>;\n if (content) {\n for (const contentItem of content) {\n const assistantText = contentItem.text || \"\";\n // Append to choices array instead of replacing\n (\n this.completeResponse.choices as Array<Record<string, unknown>>\n ).push({\n message: { role: \"assistant\", content: assistantText },\n });\n }\n }\n const usage = response.usage || {};\n this.completeResponse.usage = usage;\n });\n }\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","/**\n * Custom Groq instrumentor for Netra SDK\n *\n * Note: 'groq-sdk' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.groq\";\nconst INSTRUMENTS = [\"groq-sdk >= 0.3.0\"];\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\n// Cache all resolved Groq classes (ESM + CJS)\nlet groqClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Resolve the Groq module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveGroqAsync(): Promise<any[]> {\n if (groqClasses.length > 0) return groqClasses;\n\n try {\n // @ts-ignore - groq-sdk is an optional peer dependency\n const groqModule = await import(\"groq-sdk\");\n groqClasses.push(groqModule.Groq || groqModule.default || groqModule);\n } catch {\n Logger.warn(\"Failed to resolve Groq ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"groq-sdk\");\n const cjsClass = mod.Groq || mod.default || mod;\n if (!groqClasses.includes(cjsClass)) {\n groqClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Groq CJS module\");\n }\n\n return groqClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveGroqAsync() first to populate cache.\n */\nfunction resolveGroq(): any[] {\n return groqClasses;\n}\n\nexport class NetraGroqInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument Groq client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraGroqInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n const classes = await resolveGroqAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((Groq, index) => {\n this._instrumentChatCompletions(Groq, index);\n });\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Groq client methods (sync version - for backwards compatibility)\n * Note: This uses cached Groq classes. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraGroqInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n const classes = resolveGroq();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Groq:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((Groq, index) => {\n this._instrumentChatCompletions(Groq, index);\n });\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Groq is not instrumented\");\n return;\n }\n\n const classes = resolveGroq();\n classes.forEach((Groq, index) => {\n this._uninstrumentChatCompletions(Groq, index);\n });\n\n originalMethods.clear();\n groqClasses = [];\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentChatCompletions(Groq: any, index: number): void {\n if (!this.tracer) {\n Logger.warn(\"Groq instrumentation: No tracer available\");\n return;\n }\n\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n if (!CompletionsClass?.prototype?.create) {\n Logger.error(\n \"Groq instrumentation: Could not find Groq chat completions class to instrument\"\n );\n return;\n }\n const originalCreate = CompletionsClass.prototype.create as Function;\n originalMethods.set(`chat.completions.create-${index}`, originalCreate);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n CompletionsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n const wrappedFn = (...a: unknown[]) => original(...a);\n return wrapper(wrappedFn, this, args, kwargs);\n } as typeof CompletionsClass.prototype.create;\n } catch (error) {\n Logger.error(\n `Groq instrumentation: Failed to instrument chat completions: ${error}`\n );\n }\n }\n\n private _uninstrumentChatCompletions(Groq: any, index: number): void {\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n const originalCreate = originalMethods.get(`chat.completions.create-${index}`);\n if (originalCreate && CompletionsClass?.prototype) {\n CompletionsClass.prototype.create =\n originalCreate as typeof CompletionsClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument chat completions: ${error}`);\n }\n }\n}\n\nexport const groqInstrumentor = new NetraGroqInstrumentor();\n\nexport { chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n","//#region rolldown:runtime\nvar __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n};\n\n//#endregion\nexport { __export };","import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n","/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n","import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented\n extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n","// Inlined from https://github.com/flexdinesh/browser-or-node\ndeclare global {\n const Deno:\n | {\n version: {\n deno: string;\n };\n env: {\n get: (name: string) => string | undefined;\n };\n }\n | undefined;\n}\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nexport const isWebWorker = () =>\n typeof globalThis === \"object\" &&\n globalThis.constructor &&\n globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const isJsDom = () =>\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\"));\n\n// Supabase Edge Function provides a `Deno` global object\n// without `version` property\nexport const isDeno = () => typeof Deno !== \"undefined\";\n\n// Mark not-as-node if in Supabase Edge Function\nexport const isNode = () =>\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\" &&\n !isDeno();\n\nexport const getEnv = () => {\n let env: string;\n if (isBrowser()) {\n env = \"browser\";\n } else if (isNode()) {\n env = \"node\";\n } else if (isWebWorker()) {\n env = \"webworker\";\n } else if (isJsDom()) {\n env = \"jsdom\";\n } else if (isDeno()) {\n env = \"deno\";\n } else {\n env = \"other\";\n }\n\n return env;\n};\n\nexport type RuntimeEnvironment = {\n library: string;\n libraryVersion?: string;\n runtime: string;\n runtimeVersion?: string;\n};\n\nlet runtimeEnvironment: RuntimeEnvironment | undefined;\n\nexport function getRuntimeEnvironment(): RuntimeEnvironment {\n if (runtimeEnvironment === undefined) {\n const env = getEnv();\n\n runtimeEnvironment = {\n library: \"langchain-js\",\n runtime: env,\n };\n }\n return runtimeEnvironment;\n}\n\nexport function getEnvironmentVariable(name: string): string | undefined {\n // Certain Deno setups will throw an error if you try to access environment variables\n // https://github.com/langchain-ai/langchainjs/issues/1412\n try {\n if (typeof process !== \"undefined\") {\n // eslint-disable-next-line no-process-env\n return process.env?.[name];\n } else if (isDeno()) {\n return Deno?.env.get(name);\n } else {\n return undefined;\n }\n } catch {\n return undefined;\n }\n}\n","import * as uuid from \"uuid\";\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type {\n ChatGenerationChunk,\n GenerationChunk,\n LLMResult,\n} from \"../outputs.js\";\nimport {\n Serializable,\n Serialized,\n SerializedNotImplemented,\n get_lc_unique_name,\n} from \"../load/serializable.js\";\nimport type { SerializedFields } from \"../load/map_keys.js\";\nimport type { DocumentInterface } from \"../documents/document.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Error = any;\n\n/**\n * Interface for the input parameters of the BaseCallbackHandler class. It\n * allows to specify which types of events should be ignored by the\n * callback handler.\n */\nexport interface BaseCallbackHandlerInput {\n ignoreLLM?: boolean;\n ignoreChain?: boolean;\n ignoreAgent?: boolean;\n ignoreRetriever?: boolean;\n ignoreCustomEvent?: boolean;\n _awaitHandler?: boolean;\n raiseError?: boolean;\n}\n\n/**\n * Interface for the indices of a new token produced by an LLM or Chat\n * Model in streaming mode.\n */\nexport interface NewTokenIndices {\n prompt: number;\n completion: number;\n}\n\n// TODO: Add all additional callback fields here\nexport type HandleLLMNewTokenCallbackFields = {\n chunk?: GenerationChunk | ChatGenerationChunk;\n};\n\n/**\n * Abstract class that provides a set of optional methods that can be\n * overridden in derived classes to handle various events during the\n * execution of a LangChain application.\n */\nabstract class BaseCallbackHandlerMethodsClass {\n /**\n * Called at the start of an LLM or Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleLLMStart?(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called when an LLM/ChatModel in `streaming` mode produces a new token\n */\n handleLLMNewToken?(\n token: string,\n /**\n * idx.prompt is the index of the prompt that produced the token\n * (if there are multiple prompts)\n * idx.completion is the index of the completion that produced the token\n * (if multiple completions per prompt are requested)\n */\n idx: NewTokenIndices,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if an LLM/ChatModel run encounters an error\n */\n handleLLMError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of an LLM/ChatModel run, with the output and the run ID.\n */\n handleLLMEnd?(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleChatModelStart?(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chain run, with the chain name and inputs\n * and the run ID.\n */\n handleChainStart?(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n runType?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n parentRunId?: string,\n extra?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Chain run encounters an error\n */\n handleChainError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Chain run, with the outputs and the run ID.\n */\n handleChainEnd?(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Tool run, with the tool name and input\n * and the run ID.\n */\n handleToolStart?(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Tool run encounters an error\n */\n handleToolError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Tool run, with the tool output and the run ID.\n */\n handleToolEnd?(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleText?(\n text: string,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent is about to execute an action,\n * with the action and the run ID.\n */\n handleAgentAction?(\n action: AgentAction,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent finishes execution, before it exits.\n * with the final output and the run ID.\n */\n handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n handleRetrieverStart?(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverEnd?(\n documents: DocumentInterface[],\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleCustomEvent?(\n eventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any,\n runId: string,\n tags?: string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n}\n\n/**\n * Base interface for callbacks. All methods are optional. If a method is not\n * implemented, it will be ignored. If a method is implemented, it will be\n * called at the appropriate time. All methods are called with the run ID of\n * the LLM/ChatModel/Chain that is running, which is generated by the\n * CallbackManager.\n *\n * @interface\n */\nexport type CallbackHandlerMethods = BaseCallbackHandlerMethodsClass;\n\n/**\n * Interface for handlers that can indicate a preference for streaming responses.\n * When implemented, this allows the handler to signal whether it prefers to receive\n * streaming responses from language models rather than complete responses.\n */\nexport interface CallbackHandlerPrefersStreaming {\n readonly lc_prefer_streaming: boolean;\n}\n\nexport function callbackHandlerPrefersStreaming(x: BaseCallbackHandler) {\n return \"lc_prefer_streaming\" in x && x.lc_prefer_streaming;\n}\n\n/**\n * Abstract base class for creating callback handlers in the LangChain\n * framework. It provides a set of optional methods that can be overridden\n * in derived classes to handle various events during the execution of a\n * LangChain application.\n */\nexport abstract class BaseCallbackHandler\n extends BaseCallbackHandlerMethodsClass\n implements BaseCallbackHandlerInput, Serializable\n{\n lc_serializable = false;\n\n get lc_namespace(): [\"langchain_core\", \"callbacks\", string] {\n return [\"langchain_core\", \"callbacks\", this.name];\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_attributes(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof BaseCallbackHandler),\n ];\n }\n\n lc_kwargs: SerializedFields;\n\n abstract name: string;\n\n ignoreLLM = false;\n\n ignoreChain = false;\n\n ignoreAgent = false;\n\n ignoreRetriever = false;\n\n ignoreCustomEvent = false;\n\n raiseError = false;\n\n awaitHandlers =\n getEnvironmentVariable(\"LANGCHAIN_CALLBACKS_BACKGROUND\") === \"false\";\n\n constructor(input?: BaseCallbackHandlerInput) {\n super();\n this.lc_kwargs = input || {};\n if (input) {\n this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM;\n this.ignoreChain = input.ignoreChain ?? this.ignoreChain;\n this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent;\n this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever;\n this.ignoreCustomEvent =\n input.ignoreCustomEvent ?? this.ignoreCustomEvent;\n this.raiseError = input.raiseError ?? this.raiseError;\n this.awaitHandlers =\n this.raiseError || (input._awaitHandler ?? this.awaitHandlers);\n }\n }\n\n copy(): BaseCallbackHandler {\n return new (this.constructor as new (\n input?: BaseCallbackHandlerInput\n ) => BaseCallbackHandler)(this);\n }\n\n toJSON(): Serialized {\n return Serializable.prototype.toJSON.call(this);\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return Serializable.prototype.toJSONNotImplemented.call(this);\n }\n\n static fromMethods(methods: CallbackHandlerMethods) {\n class Handler extends BaseCallbackHandler {\n name = uuid.v7();\n\n constructor() {\n super();\n Object.assign(this, methods);\n }\n }\n return new Handler();\n }\n}\n\nexport const isBaseCallbackHandler = (x: unknown) => {\n const callbackHandler = x as BaseCallbackHandler;\n return (\n callbackHandler !== undefined &&\n typeof callbackHandler.copy === \"function\" &&\n typeof callbackHandler.name === \"string\" &&\n typeof callbackHandler.awaitHandlers === \"boolean\"\n );\n};\n","import { Span } from \"@opentelemetry/api\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { SpanAttributes } from \"../span-attributes\";\n\nexport const NetraLanggraphAttributes = {\n spanType: \"netra.span.type\",\n entityInput: \"netra.entity.input\",\n entityOutput: \"netra.entity.output\",\n} as const;\n\nconst tagFilter = (tag: string) => {\n const filterableTags = [\"langsmith:hidden\"];\n return !filterableTags.includes(tag);\n};\n\nconst metadataFilter = (key: string) => {\n return !key.startsWith(\"__\");\n};\n\nexport function setGraphInputAttributes(\n span: Span,\n inputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify({ inputs }),\n );\n}\n\nexport function setGraphOutputAttributes(\n span: Span,\n outputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs }),\n );\n}\n\nexport function setLlmRequestAttributes(\n span: Span,\n metadata: Record<string, any>,\n prompts: string[],\n extraParams: Record<string, any>,\n): void {\n setLlmPrompts(span, prompts);\n const attributeMappings = mapLlmAttributes(metadata, extraParams);\n for (let [key, value] of Object.entries(attributeMappings)) {\n if (value !== undefined) {\n span.setAttribute(key, value);\n }\n }\n}\n\nexport function setChainInputAttributes(\n span: Span,\n inputs: ChainValues,\n tags?: string[],\n metadata?: Record<string, unknown>,\n): void {\n const entityInputs: Record<string, any> = { inputs };\n\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityInputs[\"tags\"] = filteredTags;\n }\n }\n\n if (metadata) {\n const filteredMetadata: Record<string, any> = {};\n const kwargs: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n if (key === \"langgraph_node\") kwargs.name = value;\n }\n\n entityInputs[\"metadata\"] = filteredMetadata;\n if (Object.keys(kwargs).length > 0) {\n entityInputs[\"kwargs\"] = kwargs;\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n}\n\nexport function setChainOutputAttributes(\n span: Span,\n outputs: ChainValues,\n tags?: string[],\n): void {\n const entityOutputs: Record<string, any> = { outputs };\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityOutputs[\"kwargs\"] = { tags: filteredTags };\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nexport function setToolAttributes(\n span: Span,\n toolName: string,\n input: Record<string, any>,\n output: string,\n metadata?: Record<string, any>,\n tags?: string[],\n): void {\n span.setAttribute(NetraLanggraphAttributes.spanType, \"TOOL\");\n const filteredTags = tags?.filter(tagFilter) ?? [];\n const filteredMetadata: Record<string, any> = {};\n\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n }\n }\n\n const entityInputs: Record<string, any> = {\n input_str: JSON.stringify(input),\n metadata: filteredMetadata,\n tags: filteredTags,\n };\n\n const entityOutputs: Record<string, any> = {\n output,\n kwargs: { name: toolName, tags: filteredTags },\n };\n\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nfunction mapLlmAttributes(\n metadata: Record<string, any>,\n extraParams: Record<string, any>,\n): Record<string, any> {\n const options = extraParams?.invocation_params?.options || {};\n\n return {\n [SpanAttributes.LLM_REQUEST_MODEL]: options.model || metadata.ls_model_name,\n [SpanAttributes.LLM_REQUEST_TEMPERATURE]:\n options.temperature ?? metadata.ls_temperature,\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n options.num_predict ?? metadata.ls_max_tokens,\n [SpanAttributes.LLM_FREQUENCY_PENALTY]: options.frequency_penalty,\n [SpanAttributes.LLM_PRESENCE_PENALTY]: options.presence_penalty,\n [SpanAttributes.LLM_CHAT_STOP_SEQUENCES]: options.stop ?? metadata.ls_stop,\n [SpanAttributes.LLM_REQUEST_TOP_P]: options.top_p,\n };\n}\n\nfunction setLlmPrompts(span: Span, prompts: string[]): void {\n const seperator = \":\";\n const roleMap: Record<string, string> = { human: \"user\" };\n\n prompts.forEach((prompt, index) => {\n const [role, ...rest] = prompt.split(seperator);\n const content = rest.join(seperator);\n\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.role`,\n roleMap[role.toLowerCase()] ?? role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n content,\n );\n });\n}\n","import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { LLMResult } from \"@langchain/core/outputs\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n Span,\n SpanKind,\n Tracer,\n Context,\n context,\n trace,\n createContextKey,\n} from \"@opentelemetry/api\";\n\nimport { Logger } from \"../../logger\";\nimport {\n defineHidden,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Context key to track if we're inside a LangGraph instrumented call\n// This prevents double-instrumentation when invoke internally calls stream\nconst LANGGRAPH_INSTRUMENTATION_ACTIVE = createContextKey(\"netra.langgraph.active\");\n\nfunction getContextManager(): any {\n try {\n if ((context as any)._getContextManager) {\n return (context as any)._getContextManager();\n }\n\n const globalSymbols = Object.getOwnPropertySymbols(global);\n const otelSymbol = globalSymbols.find(s =>\n s.toString().includes(\"opentelemetry.js.api\"),\n );\n if (otelSymbol) {\n const globalState = (global as any)[otelSymbol];\n if (globalState?.contextManager) {\n return globalState.contextManager;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nfunction enterWithContext(newContext: Context): void {\n const contextManager = getContextManager();\n if (!contextManager) return;\n\n if (typeof contextManager.enterWith === \"function\") {\n contextManager.enterWith(newContext);\n return;\n }\n\n if (\n contextManager._asyncLocalStorage &&\n typeof contextManager._asyncLocalStorage.enterWith === \"function\"\n ) {\n contextManager._asyncLocalStorage.enterWith(newContext);\n }\n}\nimport {\n NetraLanggraphAttributes,\n setChainInputAttributes,\n setChainOutputAttributes,\n setGraphInputAttributes,\n setGraphOutputAttributes,\n setLlmRequestAttributes,\n setToolAttributes,\n} from \"./utils\";\n\ntype AnyFunc = (...args: any[]) => any;\ntype AsyncIterableFunc = (...args: any[]) => Promise<AsyncIterable<any>>;\n\nclass NetraLanggraphCallbackHandler extends BaseCallbackHandler {\n name = \"netra-langgraph-callback-handler\";\n // Map runId -> Span for explicit parenting\n private spans: Map<string, Span> = new Map();\n private nodeAttributes: Map<string, Record<string, any>> = new Map();\n private runStack: string[] = [];\n private inferredParents: Map<string, string> = new Map();\n\n constructor(\n private tracer: Tracer,\n private rootSpan: Span,\n ) {\n super();\n }\n\n private getParentSpan(parentRunId?: string): Span {\n if (parentRunId && this.spans.has(parentRunId)) {\n return this.spans.get(parentRunId)!;\n }\n return this.rootSpan;\n }\n\n private addNodeAttributes(runId: string, attributes: Record<string, any>) {\n const current = this.nodeAttributes.get(runId) || {};\n this.nodeAttributes.set(runId, { ...current, ...attributes });\n }\n\n private inferParentRunId(parentRunId?: string): string | undefined {\n if (parentRunId) return parentRunId;\n return this.runStack.length > 0\n ? this.runStack[this.runStack.length - 1]\n : undefined;\n }\n\n private pushRun(runId: string): void {\n this.runStack.push(runId);\n }\n\n private popRun(runId: string): void {\n const last = this.runStack[this.runStack.length - 1];\n if (last === runId) {\n this.runStack.pop();\n return;\n }\n const idx = this.runStack.lastIndexOf(runId);\n if (idx >= 0) {\n this.runStack.splice(idx, 1);\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n runType?: string,\n ) {\n const metadataNodeName =\n typeof metadata?.langgraph_node === \"string\"\n ? (metadata.langgraph_node as string)\n : \"\";\n const runNameValue = typeof runName === \"string\" ? runName : \"\";\n const chainIdName =\n Array.isArray(chain.id) && chain.id.length > 0\n ? chain.id[chain.id.length - 1]\n : \"\";\n const nodeName = metadataNodeName || runNameValue || chainIdName || \"Chain\";\n const nodeType = chainIdName || \"Unknown\";\n\n const metadataKeys =\n metadata && typeof metadata === \"object\"\n ? Object.keys(metadata as Record<string, unknown>).join(\",\")\n : \"n/a\";\n Logger.debug(\n `NetraLanggraph handleChainStart: runId=${runId} parentRunId=${parentRunId} nodeName=${nodeName} nodeType=${nodeType} runName=${runNameValue || \"n/a\"} metadataKeys=${metadataKeys}`,\n );\n\n if (\n !nodeName ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const effectiveParentRunId = this.inferParentRunId(parentRunId);\n if (\n !parentRunId &&\n effectiveParentRunId &&\n effectiveParentRunId !== runId\n ) {\n this.inferredParents.set(runId, effectiveParentRunId);\n Logger.debug(`NetraLanggraph inferred parent: runId=${runId} parentRunId=${effectiveParentRunId}`);\n }\n\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n\n // Create span parented to the correct node/workflow\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${nodeName}.task`, undefined, ctx);\n\n setChainInputAttributes(span, inputs, tags, metadata);\n\n this.spans.set(runId, span);\n this.pushRun(runId);\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n\n setChainOutputAttributes(span, outputs, tags);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleChainError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n span.recordException(err);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const llmId = llm.id?.[llm.id.length - 1] || \"llm\";\n Logger.debug(`NetraLanggraph handleLLMStart: runId=${runId} parentRunId=${effectiveParentRunId} llmId=${llmId}`);\n }\n this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId: effectiveParentRunId, // Store parent ID to link back\n });\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const response = (output?.generations?.[0]?.[0] as any)?.message;\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n setLlmRequestAttributes(\n span,\n attributes.metadata,\n attributes.prompts,\n attributes.extraParams,\n );\n setBaseResponseAttributes(span, response);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>,\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n let parsedInput: Record<string | number, any>;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n parsedInput = {};\n }\n\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const toolName = tool.id?.[tool.id.length - 1] || \"tool\";\n Logger.debug(`NetraLanggraph handleToolStart: runId=${runId} parentRunId=${effectiveParentRunId} tool=${toolName}`);\n }\n this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\n parentRunId: effectiveParentRunId,\n });\n }\n\n async handleToolEnd(\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const { input, metadata } = attributes;\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n setToolAttributes(span, toolName, input ?? {}, output, metadata, tags);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n}\n\nclass LanggraphStreamingWrapper implements AsyncIterable<unknown> {\n private iterable: any;\n private output: Record<string, any> = {};\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private rootSpan!: Span;\n private rootContext!: Context;\n\n constructor(rootSpan: Span, rootContext: Context) {\n defineHidden(this, \"rootSpan\", rootSpan);\n defineHidden(this, \"rootContext\", rootContext);\n }\n\n toJSON() {\n try {\n return this.output;\n } catch {\n return {};\n }\n }\n\n async startStream(\n originalFunc: (...args: any[]) => any,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ) {\n this.iterable = await originalFunc.call(instance, input, config, ...rest);\n return this;\n }\n\n async *[Symbol.asyncIterator]() {\n const spanContext = trace.setSpan(this.rootContext, this.rootSpan);\n try {\n const iterator = await this.iterable[Symbol.asyncIterator]();\n while (true) {\n let result: any;\n await context.with(spanContext, async () => {\n result = await iterator.next();\n });\n if (result.done) break;\n const value = result?.value ?? {};\n this.output = { ...this.output, ...value };\n yield result;\n }\n this.rootSpan.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs: this.output }),\n );\n } catch (error) {\n this.rootSpan.recordException(error as Error);\n throw error;\n } finally {\n this.rootSpan.end();\n }\n }\n}\n\nexport class LanggraphWrapper {\n private spanName: string;\n\n constructor(private tracer: Tracer) {\n this.spanName = \"Langgraph.workflow\";\n }\n\n private getUpdatedConfig(\n config?: RunnableConfig,\n rootSpan?: Span,\n ): RunnableConfig {\n if (!rootSpan) return config || {};\n\n const callbackHandler = new NetraLanggraphCallbackHandler(\n this.tracer,\n rootSpan,\n );\n const callbacks = config?.callbacks;\n const normalizedCallbacks = callbacks\n ? Array.isArray(callbacks)\n ? callbacks\n : [callbacks]\n : [];\n const updatedConfig: RunnableConfig = {\n ...config,\n callbacks: [...normalizedCallbacks, callbackHandler],\n };\n return updatedConfig;\n }\n\n async invoke(\n originalFunc: AnyFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n const activeSpan = trace.getSpan(context.active());\n Logger.debug(`LangGraph invoke start. Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n\n // Start metadata spanning for the workflow\n // We use context.active() to parent to the current active span (e.g. request handler)\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active()\n );\n\n Logger.debug(`LangGraph span created. New TraceId: ${span.spanContext().traceId}, SpanId: ${span.spanContext().spanId}`);\n\n // Set the active flag to prevent nested instrumentation (e.g., when invoke calls stream internally)\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n\n return context.with(ctxWithFlag, async () => {\n {\n const innerSpan = trace.getSpan(context.active());\n Logger.debug(`Inside LangGraph context. Active TraceId: ${innerSpan?.spanContext().traceId}, SpanId: ${innerSpan?.spanContext().spanId}`);\n }\n try {\n setGraphInputAttributes(span, input);\n\n // Pass the workflow span as the root for the callback handler\n const updatedConfig = this.getUpdatedConfig(config, span);\n\n const output = await originalFunc.call(\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n\n setGraphOutputAttributes(span, output);\n\n return output;\n } catch (e) {\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n });\n }\n\n async stream(\n originalFunc: AsyncIterableFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n Logger.debug(\"LangGraph stream skipped (inside instrumented call)\");\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n Logger.debug(\"LangGraph stream starting instrumentation\");\n\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active(),\n );\n setGraphInputAttributes(span, input);\n const updatedConfig = this.getUpdatedConfig(config, span);\n try {\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n const streamingWrapper = new LanggraphStreamingWrapper(span, ctxWithFlag);\n return streamingWrapper.startStream(\n originalFunc,\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n }\n }\n}\n","import { RunnableConfig } from \"@langchain/core/runnables\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { LanggraphWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.langgraph\";\nconst INSTRUMENTS = [\"langgraph >= 1.1.1\"];\n\nlet isInstrumented = false;\nlet LanggraphClass: any = null;\nconst originalMethods: Map<string, Function | object> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Find a module in Node's require cache by name pattern.\n * This allows us to patch the same module instance the app is using.\n */\nfunction findModuleInCache(moduleName: string): any {\n // Try require.cache first (CommonJS)\n if (typeof require !== 'undefined' && require.cache) {\n const cache = require.cache;\n for (const key of Object.keys(cache)) {\n // Match the module name in the path, but exclude our own SDK's copy\n if (key.includes(moduleName.replace(/\\//g, '/')) && !key.includes('netra-sdk')) {\n Logger.debug(`Found module in require.cache: ${key}`);\n return cache[key]?.exports;\n }\n }\n Logger.debug(\n `Module ${moduleName} not found in require.cache. Cache keys containing 'langgraph':`,\n Object.keys(cache).filter(k => k.includes('langgraph')),\n );\n }\n return null;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n // First, try to find the module in require.cache (already loaded by the app)\n // This ensures we patch the same module instance the app is using\n let langgraphModule = findModuleInCache('@langchain/langgraph');\n\n if (langgraphModule) {\n Logger.debug(\"Found @langchain/langgraph in require.cache (using app's module instance)\");\n } else {\n // Fallback to dynamic import if not in cache\n langgraphModule = await import(\"@langchain/langgraph\");\n Logger.debug(\"Loaded @langchain/langgraph via dynamic import\");\n }\n\n Logger.debug(\"LangGraph Module Exports:\", Object.keys(langgraphModule));\n LanggraphClass = langgraphModule.CompiledStateGraph ?? langgraphModule.StateGraph;\n Logger.debug(\"Resolved LanggraphClass:\", !!LanggraphClass);\n Logger.debug(\"LanggraphClass name:\", LanggraphClass?.name);\n Logger.debug(\n \"LanggraphClass.prototype keys:\",\n LanggraphClass?.prototype ? Object.getOwnPropertyNames(LanggraphClass.prototype) : \"no prototype\",\n );\n Logger.debug(\"Has invoke on prototype:\", !!LanggraphClass?.prototype?.invoke);\n Logger.debug(\"Has stream on prototype:\", !!LanggraphClass?.prototype?.stream);\n\n // Check prototype chain to find where invoke is defined\n Logger.debug(\"Checking prototype chain for invoke location:\");\n let proto = LanggraphClass?.prototype;\n while (proto) {\n const hasOwn = Object.getOwnPropertyNames(proto).includes('invoke');\n Logger.debug(` ${proto.constructor?.name}: hasOwnProperty('invoke')=${hasOwn}`);\n if (hasOwn) {\n Logger.debug(` -> invoke is defined on: ${proto.constructor?.name}`);\n break;\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return LanggraphClass;\n } catch (e) {\n Logger.error(\"Failed to resolve LangGraph:\", e);\n return null;\n }\n}\n\nexport class NetraLanggraphInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraLanggraphInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Langgraph is already instrumented\");\n return this;\n }\n\n const Langgraph = await resolveLanggraph();\n if (!Langgraph) {\n Logger.warn(\"LangGraph class not found, skipping instrumentation\");\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentInvoke(Langgraph);\n this._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n Logger.warn(\"LangGraph is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (Langgraph) {\n this._uninstrumentInvoke(Langgraph);\n this._uninstrumentStream(Langgraph);\n }\n\n originalMethods.clear();\n LanggraphClass = null;\n isInstrumented = false;\n }\n\n private _instrumentInvoke(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the invoke method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('invoke')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.invoke) {\n Logger.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n\n Logger.debug(`Found invoke on prototype: ${targetProto.constructor?.name}`);\n\n const originalInvoke = targetProto.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.invoke.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n const patchedInvoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph invoke intercepted!\");\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\n };\n // Add marker to identify patched method\n (patchedInvoke as any).__netra_patched = true;\n targetProto.invoke = patchedInvoke;\n\n Logger.debug(`Successfully instrumented LangGraph invoke method on ${targetProto.constructor?.name}`);\n Logger.debug(`Patched Pregel class identity:`, targetProto.constructor);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph invoke: ${error}`);\n }\n }\n\n private _instrumentStream(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the stream method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('stream')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.stream) {\n Logger.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n\n Logger.debug(`Found stream on prototype: ${targetProto.constructor?.name}`);\n\n const originalStream = targetProto.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.stream.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n targetProto.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph stream intercepted!\");\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\n };\n\n Logger.debug(`Successfully instrumented LangGraph stream method on ${targetProto.constructor?.name}`);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph stream: ${error}`);\n }\n }\n\n private _uninstrumentInvoke(Langgraph: any): void {\n try {\n const originalInvoke = originalMethods.get(\"langgraph.graph.invoke\");\n const targetProto = originalMethods.get(\"langgraph.graph.invoke.proto\") || Langgraph?.prototype;\n if (originalInvoke && targetProto?.invoke) {\n targetProto.invoke = originalInvoke;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph invoke: ${error}`);\n }\n return;\n }\n\n private _uninstrumentStream(Langgraph: any): void {\n try {\n const originalStream = originalMethods.get(\"langgraph.graph.stream\");\n const targetProto = originalMethods.get(\"langgraph.graph.stream.proto\") || Langgraph?.prototype;\n if (originalStream && targetProto?.stream) {\n targetProto.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph stream: ${error}`);\n }\n return;\n }\n}\n\nexport const langgraphInstrumentor = new NetraLanggraphInstrumentor();\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for MistralAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","/**\n * MistralAI-specific utility functions for instrumentation.\n *\n * This file extends the shared instrumentation utilities with Mistral-only\n * fields while keeping attribute naming consistent across providers.\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport {\n modelAsDict,\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Re-export common utilities for convenience\nexport { modelAsDict, shouldSuppressInstrumentation };\n\n/**\n * Set request attributes on span for MistralAI.\n * Includes MistralAI-specific attributes.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n // Set shared/common attributes first\n setBaseRequestAttributes(span, kwargs, requestType, \"mistralai\");\n\n // MistralAI-specific: Agent ID (agents API)\n if (kwargs.agentId) {\n span.setAttribute(\"gen_ai.agent.id\", String(kwargs.agentId));\n span.setAttribute(\"llm.agent.id\", String(kwargs.agentId));\n }\n\n // MistralAI-specific: Safe prompt\n if (kwargs.safePrompt !== undefined) {\n span.setAttribute(\"gen_ai.mistral.safe_prompt\", Boolean(kwargs.safePrompt));\n }\n\n // MistralAI-specific: Random seed\n if (kwargs.randomSeed !== undefined && kwargs.randomSeed !== null) {\n span.setAttribute(\"gen_ai.mistral.random_seed\", Number(kwargs.randomSeed));\n }\n\n // MistralAI FIM-specific: prompt and suffix\n if (kwargs.prompt !== undefined) {\n span.setAttribute(\"llm.request.has_prompt\", true);\n }\n if (kwargs.suffix !== undefined && kwargs.suffix !== null) {\n span.setAttribute(\"llm.request.has_suffix\", true);\n }\n}\n\n/**\n * Set response attributes on span for MistralAI\n * Uses the shared response attributes (supports snake_case + camelCase).\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n // Use common response attributes - handles both snake_case and camelCase\n setBaseResponseAttributes(span, response);\n}\n","/**\n * Wrapper functions for MistralAI instrumentation\n */\n\nimport {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { defineHidden, isPromise } from \"../utils\";\nimport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\n// Span names\nconst CHAT_SPAN_NAME = \"mistralai.chat\";\nconst EMBEDDING_SPAN_NAME = \"mistralai.embedding\";\nconst FIM_SPAN_NAME = \"mistralai.fim\";\nconst AGENTS_SPAN_NAME = \"mistralai.agents\";\n// Align with OpenAI/Groq: streaming uses same span name\nconst CHAT_STREAM_SPAN_NAME = CHAT_SPAN_NAME;\nconst FIM_STREAM_SPAN_NAME = FIM_SPAN_NAME;\nconst AGENTS_STREAM_SPAN_NAME = AGENTS_SPAN_NAME;\n\ntype MistralRequestType = \"chat\" | \"embedding\" | \"fim\" | \"agent\";\n\nfunction mistralWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(value));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(response));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nfunction mistralStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.request.stream\": true,\n },\n },\n currentContext\n );\n\n try {\n // Force stream=true for attribution\n setRequestAttributes(span, { ...kwargs, stream: true }, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n if (\n stream &&\n typeof stream === \"object\" &&\n Symbol.asyncIterator in (stream as any)\n ) {\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n }\n return new StreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n if (\n response &&\n typeof response === \"object\" &&\n Symbol.asyncIterator in (response as any)\n ) {\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrapper factory for chat completions\n */\nexport const chatWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for chat stream\n */\nexport const chatStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, CHAT_STREAM_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for embeddings\n */\nexport const embeddingsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\n/**\n * Wrapper factory for FIM completions\n */\nexport const fimWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, FIM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for FIM stream\n */\nexport const fimStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, FIM_STREAM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for agents completions\n */\nexport const agentsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, AGENTS_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper factory for agents stream\n */\nexport const agentsStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, AGENTS_STREAM_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper for streaming responses when the SDK returns a sync Iterable/Iterator.\n * (Matches the newer OpenAI/Groq wrapper behavior.)\n */\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n\n constructor(span: Span, response: unknown, startTime: number, requestKwargs: Record<string, unknown>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) throw new Error(\"Response is not an iterable\");\n\n if (typeof (this.response as any)[Symbol.iterator] === \"function\") {\n this.iterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) throw new Error(\"Iterator not initialized\");\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n\n/**\n * Async wrapper for streaming responses (AsyncIterable from MistralAI SDK)\n */\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private iterator: AsyncIterator<unknown> | null = null;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n private completeResponse: Record<string, unknown>;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n this.completeResponse = { choices: [], model: \"\" };\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n // Initialize the iterator on first call\n if (!this.iterator) {\n // Check if response is an AsyncIterable and get the iterator\n if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.asyncIterator in this.response\n ) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.iterator in (this.response as any)\n ) {\n // Handle sync iterables\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n // Already an iterator\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n","/**\n * Custom MistralAI instrumentor for Netra SDK\n *\n * Note: '@mistralai/mistralai' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport {\n agentsStreamWrapper,\n agentsWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n} from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.mistral_ai\";\nconst INSTRUMENTS = [\"@mistralai/mistralai >= 1.0.0\"];\n\n// Store original methods for uninstrumentation\nconst originalMethods: Map<string, Function> = new Map();\n\n// Track instrumentation state\nlet isInstrumented = false;\n\n// Cache all resolved Mistral classes (ESM + CJS)\nlet mistralClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\ntype MistralResourceName = \"chat\" | \"embeddings\" | \"fim\" | \"agents\";\n\n/**\n * Resolve the Mistral module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveMistralAsync(): Promise<any[]> {\n if (mistralClasses.length > 0) return mistralClasses;\n\n try {\n // @ts-ignore - @mistralai/mistralai is an optional peer dependency\n const mistralModule = await import(\"@mistralai/mistralai\");\n mistralClasses.push(\n mistralModule.Mistral || mistralModule.default || mistralModule\n );\n } catch {\n Logger.warn(\"Failed to resolve MistralAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@mistralai/mistralai\");\n const cjsClass = mod.Mistral || mod.default || mod;\n if (!mistralClasses.includes(cjsClass)) {\n mistralClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve MistralAI CJS module\");\n }\n\n return mistralClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveMistralAsync() first to populate cache.\n */\nfunction resolveMistral(): any[] {\n return mistralClasses;\n}\n\n/**\n * Custom MistralAI instrumentor for Netra SDK\n */\nexport class NetraMistralAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n private resourceCtors: Partial<Record<MistralResourceName, any>> = {};\n\n constructor() {\n // Initialize without tracer - will be set during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument MistralAI client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraMistralAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n const classes = await resolveMistralAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n let didPatch = false;\n classes.forEach((Mistral, index) => {\n const patchedChat = this._instrumentChat(Mistral, index);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral, index);\n const patchedFIM = this._instrumentFIM(Mistral, index);\n const patchedAgents = this._instrumentAgents(Mistral, index);\n if (patchedChat || patchedEmbeddings || patchedFIM || patchedAgents) {\n didPatch = true;\n }\n });\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument MistralAI client methods (sync version - for backwards compatibility)\n * Note: This uses cached Mistral classes. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraMistralAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n const classes = resolveMistral();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument MistralAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n let didPatch = false;\n classes.forEach((Mistral, index) => {\n const patchedChat = this._instrumentChat(Mistral, index);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral, index);\n const patchedFIM = this._instrumentFIM(Mistral, index);\n const patchedAgents = this._instrumentAgents(Mistral, index);\n if (patchedChat || patchedEmbeddings || patchedFIM || patchedAgents) {\n didPatch = true;\n }\n });\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument MistralAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"MistralAI is not instrumented\");\n return;\n }\n\n const classes = resolveMistral();\n classes.forEach((Mistral, index) => {\n this._uninstrumentChat(Mistral, index);\n this._uninstrumentEmbeddings(Mistral, index);\n this._uninstrumentFIM(Mistral, index);\n this._uninstrumentAgents(Mistral, index);\n });\n\n originalMethods.clear();\n mistralClasses = [];\n isInstrumented = false;\n }\n\n /**\n * Check if MistralAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Resolve public resource constructors from the exported Mistral client.\n * This avoids relying on internal \"@mistralai/mistralai/sdk/*\" paths.\n *\n * We create a temporary client instance purely for discovery; it should not\n * make network calls.\n */\n private _ensureResourceCtors(Mistral: any): void {\n if (\n this.resourceCtors.chat &&\n this.resourceCtors.embeddings &&\n this.resourceCtors.fim &&\n this.resourceCtors.agents\n ) {\n return;\n }\n\n // Some SDK versions require an apiKey at construction time.\n // Use a dummy if none is provided; this is only for discovering constructors.\n const apiKey = process.env.MISTRAL_API_KEY ?? \"netra_dummy_api_key\";\n\n let client: any;\n try {\n client = new Mistral({ apiKey });\n } catch {\n // Fallback for alternate ctor signatures\n client = new Mistral(apiKey);\n }\n\n for (const name of [\"chat\", \"embeddings\", \"fim\", \"agents\"] as const) {\n const res = client?.[name];\n if (res && res.constructor) {\n this.resourceCtors[name] = res.constructor;\n }\n }\n }\n\n private _getCtor(Mistral: any, name: MistralResourceName): any | null {\n this._ensureResourceCtors(Mistral);\n return this.resourceCtors[name] ?? null;\n }\n\n private _instrumentChat(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n let didPatch = false;\n\n if (ChatClass?.prototype?.complete) {\n const originalComplete = ChatClass.prototype.complete;\n originalMethods.set(`chat.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n ChatClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (ChatClass?.prototype?.stream) {\n const originalStream = ChatClass.prototype.stream;\n originalMethods.set(`chat.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = chatStreamWrapper(tracer);\n\n ChatClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI chat:\", error);\n return false;\n }\n }\n\n private _instrumentEmbeddings(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n let didPatch = false;\n\n if (EmbeddingsClass?.prototype?.create) {\n const originalCreate = EmbeddingsClass.prototype.create;\n originalMethods.set(`embeddings.create-${index}`, originalCreate);\n\n const tracer = this.tracer;\n const wrapper = embeddingsWrapper(tracer);\n\n EmbeddingsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI embeddings:\", error);\n return false;\n }\n }\n\n private _instrumentFIM(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n let didPatch = false;\n\n if (FimClass?.prototype?.complete) {\n const originalComplete = FimClass.prototype.complete;\n originalMethods.set(`fim.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = fimWrapper(tracer);\n\n FimClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (FimClass?.prototype?.stream) {\n const originalStream = FimClass.prototype.stream;\n originalMethods.set(`fim.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = fimStreamWrapper(tracer);\n\n FimClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI FIM:\", error);\n return false;\n }\n }\n\n private _instrumentAgents(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n let didPatch = false;\n\n if (AgentsClass?.prototype?.complete) {\n const originalComplete = AgentsClass.prototype.complete;\n originalMethods.set(`agents.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = agentsWrapper(tracer);\n\n AgentsClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (AgentsClass?.prototype?.stream) {\n const originalStream = AgentsClass.prototype.stream;\n originalMethods.set(`agents.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = agentsStreamWrapper(tracer);\n\n AgentsClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI agents:\", error);\n return false;\n }\n }\n\n private _uninstrumentChat(Mistral: any, index: number): void {\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n\n const originalComplete = originalMethods.get(`chat.complete-${index}`);\n if (originalComplete && ChatClass?.prototype) {\n ChatClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`chat.stream-${index}`);\n if (originalStream && ChatClass?.prototype) {\n ChatClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI chat: ${error}`);\n }\n }\n\n private _uninstrumentEmbeddings(Mistral: any, index: number): void {\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n\n const originalCreate = originalMethods.get(`embeddings.create-${index}`);\n if (originalCreate && EmbeddingsClass?.prototype) {\n EmbeddingsClass.prototype.create = originalCreate;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI embeddings: ${error}`);\n }\n }\n\n private _uninstrumentFIM(Mistral: any, index: number): void {\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n\n const originalComplete = originalMethods.get(`fim.complete-${index}`);\n if (originalComplete && FimClass?.prototype) {\n FimClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`fim.stream-${index}`);\n if (originalStream && FimClass?.prototype) {\n FimClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI FIM: ${error}`);\n }\n }\n\n private _uninstrumentAgents(Mistral: any, index: number): void {\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n\n const originalComplete = originalMethods.get(`agents.complete-${index}`);\n if (originalComplete && AgentsClass?.prototype) {\n AgentsClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`agents.stream-${index}`);\n if (originalStream && AgentsClass?.prototype) {\n AgentsClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI agents: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const mistralAIInstrumentor = new NetraMistralAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport {\n agentsStreamWrapper,\n agentsWrapper,\n AsyncStreamingWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\n// Re-export utilities\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for OpenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\n/**\n * OpenAI-specific request attributes.\n * Calls the shared base implementation with \"openai\" as the system identifier,\n * then adds any OpenAI-only fields.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n): void {\n if (!span.isRecording()) return;\n setBaseRequestAttributes(span, kwargs, requestType, \"openai\");\n\n // Embeddings-only: output dimension hint\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n}\n\n/**\n * OpenAI-specific response attributes.\n * Delegates entirely to the shared base implementation.\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n setBaseResponseAttributes(span, response);\n}\n","import {\n Context,\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n defineHidden,\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport { OpenAIRequestType, StreamResponse, WrapperFn } from \"./types\";\n\nconst SPAN_NAMES: Record<OpenAIRequestType, string> = {\n chat: \"openai.chat\",\n embedding: \"openai.embedding\",\n response: \"openai.response\",\n};\n\nconst STREAMING_TYPES = new Set<OpenAIRequestType>([\"chat\", \"response\"]);\n\nfunction handleSpanError(span: Span, error: unknown): void {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n}\n\nfunction setSpanRequestContext(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n): void {\n setRequestAttributes(span, kwargs, requestType);\n}\n\nfunction finalizeSpanSuccess(\n span: Span,\n response: Record<string, unknown>,\n startTime: number,\n): void {\n setResponseAttributes(span, response);\n span.setAttribute(\"llm.response.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n}\n\nabstract class BaseStreamHandler {\n protected completeResponse: StreamResponse = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n protected span!: Span;\n protected startTime!: number;\n protected requestKwargs!: Record<string, unknown>;\n\n constructor(\n span: Span,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON(): StreamResponse {\n return this.completeResponse;\n }\n\n protected processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n\n if (chunkDict.model) {\n this.completeResponse.model = String(chunkDict.model);\n }\n\n const chunkChoices = chunkDict.choices;\n if (Array.isArray(chunkChoices)) {\n for (const choice of chunkChoices as Array<Record<string, unknown>>) {\n const index = Number(choice.index ?? 0);\n this.ensureChoice(index);\n const delta = (choice.delta ?? {}) as Record<string, unknown>;\n if (delta.content) {\n const entry = this.completeResponse.choices[index];\n if (!entry.message) {\n entry.message = { role: \"assistant\", content: \"\" };\n }\n const msg = entry.message as Record<string, unknown>;\n msg.content = String(msg.content ?? \"\") + String(delta.content);\n }\n if (choice.finish_reason) {\n this.completeResponse.choices[index].finish_reason =\n choice.finish_reason;\n }\n }\n }\n\n if (chunkDict.usage) {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n // Responses API: final response object arrives in a chunk\n const responseChunk = chunkDict.response as\n | Record<string, unknown>\n | undefined;\n if (responseChunk?.status === \"completed\") {\n const outputs = (responseChunk.output ?? []) as Array<\n Record<string, unknown>\n >;\n for (const out of outputs) {\n const content = out.content as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(content)) {\n for (const item of content) {\n this.completeResponse.choices.push({\n message: { role: \"assistant\", content: String(item.text ?? \"\") },\n });\n }\n }\n }\n this.completeResponse.usage = responseChunk.usage ?? {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n protected ensureChoice(index: number): void {\n const isChat = Array.isArray(this.requestKwargs.messages);\n while (this.completeResponse.choices.length <= index) {\n this.completeResponse.choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" },\n );\n }\n }\n\n protected finalizeSpan(code: SpanStatusCode): void {\n if (code === SpanStatusCode.OK) {\n finalizeSpanSuccess(\n this.span,\n this.completeResponse as Record<string, unknown>,\n this.startTime,\n );\n } else {\n this.span.setAttribute(\n \"llm.response.duration\",\n (Date.now() - this.startTime) / 1000,\n );\n this.span.setStatus({ code });\n this.span.end();\n }\n }\n}\n\nexport class StreamingWrapper\n extends BaseStreamHandler\n implements Iterable<unknown>\n{\n private iterator: Iterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): Iterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.iterator in (this.response as object)) {\n return (this.response as Iterable<unknown>)[Symbol.iterator]();\n }\n if (typeof (this.response as Iterator<unknown>).next === \"function\") {\n return this.response as Iterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nexport class AsyncStreamingWrapper\n extends BaseStreamHandler\n implements AsyncIterable<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): AsyncIterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.asyncIterator in (this.response as object)) {\n return (this.response as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n }\n if (Symbol.iterator in (this.response as object)) {\n const syncIter = (this.response as Iterable<unknown>)[Symbol.iterator]();\n return {\n async next() {\n return syncIter.next();\n },\n };\n }\n if (typeof (this.response as AsyncIterator<unknown>).next === \"function\") {\n return this.response as AsyncIterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nfunction executeStreaming(\n span: Span,\n ctx: Context,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const response = context.with(trace.setSpan(ctx, span), call);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n })();\n }\n\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction executeNonStreaming(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const result = call();\n\n if (isPromise(result)) {\n return result.then(\n (value) => {\n finalizeSpanSuccess(span, modelAsDict(value), startTime);\n return value;\n },\n (error) => {\n handleSpanError(span, error);\n throw error;\n },\n );\n }\n\n finalizeSpanSuccess(span, modelAsDict(result), startTime);\n return result;\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction openAIWrapper(\n tracer: Tracer,\n requestType: OpenAIRequestType,\n): WrapperFn {\n const spanName = SPAN_NAMES[requestType];\n const spanOpts = { kind: SpanKind.CLIENT, attributes: { \"llm.request.type\": requestType } };\n\n return (wrapped, instance, args, kwargs) => {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((v) => v) : result;\n }\n\n const currentContext = context.active();\n const call = () => wrapped.call(instance, ...args);\n const isStreaming = kwargs.stream === true && STREAMING_TYPES.has(requestType);\n\n if (isStreaming) {\n const span = tracer.startSpan(spanName, spanOpts, currentContext);\n return executeStreaming(span, currentContext, kwargs, requestType, call);\n }\n\n return tracer.startActiveSpan(spanName, spanOpts, (span) =>\n executeNonStreaming(span, kwargs, requestType, call),\n );\n };\n}\n\nexport const chatWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"embedding\");\n\nexport const responsesWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"response\");\n","import { createRequire } from \"module\";\nimport { trace, Tracer } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper, embeddingsWrapper, responsesWrapper } from \"./wrappers\";\nimport { InstrumentorOptions, PatchTarget } from \"./types\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.openai\";\nconst SUPPORTED_VERSIONS = [\"openai >= 4.0.0\"];\n\nlet openAIClasses: any[] = [];\n\n/**\n * Resolve the OpenAI module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveOpenAI(): Promise<any[]> {\n if (openAIClasses.length > 0) return openAIClasses;\n\n try {\n // @ts-ignore - openai is an optional peer dependency\n const mod = await import(\"openai\");\n openAIClasses.push(mod.OpenAI ?? mod.default ?? mod);\n } catch {\n Logger.warn(\"Failed to resolve OpenAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"openai\");\n const cjsClass = mod.OpenAI ?? mod.default ?? mod;\n // Only add if it resolves to a different class identity than what ESM gave us.\n // In bundler / dual-package setups the two could resolve to the same object,\n // and patching the same prototype twice would wrap methods redundantly.\n if (!openAIClasses.includes(cjsClass)) {\n openAIClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve OpenAI CJS module\");\n }\n\n return openAIClasses;\n}\n\nconst PATCH_TARGETS: PatchTarget[] = [\n {\n key: \"chat.completions.create\",\n getPrototype: (O) => O.Chat?.Completions?.prototype,\n wrapperFactory: chatWrapper,\n },\n {\n key: \"embeddings.create\",\n getPrototype: (O) => O.Embeddings?.prototype,\n wrapperFactory: embeddingsWrapper,\n },\n {\n key: \"responses.create\",\n getPrototype: (O) => O.Responses?.prototype,\n wrapperFactory: responsesWrapper,\n optional: true,\n },\n];\n\nexport class NetraOpenAIInstrumentor {\n private tracer: Tracer | null = null;\n private static _isInstrumented = false;\n private readonly originalMethods = new Map<string, Function>();\n\n instrumentationDependencies(): string[] {\n return [...SUPPORTED_VERSIONS];\n }\n\n isInstrumented(): boolean {\n return NetraOpenAIInstrumentor._isInstrumented;\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIInstrumentor> {\n if (this.isInstrumented()) {\n Logger.warn(\"OpenAI is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n this.tracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.patch(openAIClass, target, index);\n });\n });\n\n NetraOpenAIInstrumentor._isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!this.isInstrumented()) {\n Logger.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.unpatch(openAIClass, target, index);\n });\n });\n\n this.originalMethods.clear();\n openAIClasses.length = 0;\n NetraOpenAIInstrumentor._isInstrumented = false;\n }\n\n private patch(openAIClass: any, target: PatchTarget, index: number): void {\n if (!this.tracer) return;\n\n const proto = target.getPrototype(openAIClass);\n if (!proto?.create) {\n if (!target.optional) {\n Logger.error(`Failed to find OpenAI method to patch: ${target.key}`);\n }\n return;\n }\n\n try {\n const original = proto.create as Function;\n this.originalMethods.set(`${target.key}-${index}`, original);\n const wrapper = target.wrapperFactory(this.tracer);\n\n proto.create = function (this: unknown, ...args: unknown[]): unknown {\n const kwargs = (args[0] ?? {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => (original as any).call(this, ...a),\n this,\n args,\n kwargs,\n );\n };\n } catch (error) {\n Logger.error(`Failed to patch ${target.key}: ${error}`);\n }\n }\n\n private unpatch(openAIClass: any, target: PatchTarget, index: number): void {\n try {\n const proto = target.getPrototype(openAIClass);\n const original = this.originalMethods.get(`${target.key}-${index}`);\n if (proto && original) {\n proto.create = original;\n }\n } catch (error) {\n Logger.error(`Failed to unpatch ${target.key}: ${error}`);\n }\n }\n}\n\nexport const openAIInstrumentor = new NetraOpenAIInstrumentor();\n\nexport {\n AsyncStreamingWrapper,\n chatWrapper,\n embeddingsWrapper,\n responsesWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\nexport {\n setRequestAttributes,\n setResponseAttributes,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const INSTRUMENTATION_NAME = \"netra.instrumentation.openai_agents\";\nexport const DEFAULT_LLM_SYSTEM = \"openai\";\nexport const MAX_INDEXED_MESSAGES = 128;\nexport const MAX_STRINGIFY_LENGTH = 65_536;\n\nexport const NETRA_SPAN_TYPE_ATTR = \"netra.span.type\";\n\n// Workflow attributes\nexport const NETRA_WORKFLOW_NAME = \"netra.workflow.name\";\n\n// Agent attributes\nexport const NETRA_AGENT_NAME = \"netra.agent.name\";\nexport const NETRA_AGENT_HANDOFFS = \"netra.agent.handoffs\";\nexport const NETRA_AGENT_TOOLS = \"netra.agent.tools\";\nexport const NETRA_AGENT_OUTPUT_TYPE = \"netra.agent.output_type\";\n\n// Agents SDK trace/span attributes\nexport const NETRA_AGENTS_GROUP_ID = \"netra.agents.group_id\";\nexport const NETRA_AGENTS_METADATA = \"netra.agents.metadata\";\nexport const NETRA_AGENTS_SPAN_TYPE = \"netra.agents.span_type\";\nexport const NETRA_AGENTS_PARENT_AGENT = \"netra.agents.parent_agent\";\n\n// Handoff attributes\nexport const NETRA_HANDOFF_SOURCE_AGENT = \"netra.handoff.source_agent\";\nexport const NETRA_HANDOFF_TARGET_AGENT = \"netra.handoff.target_agent\";\n\n// Guardrail attributes\nexport const NETRA_GUARDRAIL_NAME = \"netra.guardrail.name\";\nexport const NETRA_GUARDRAIL_TRIGGERED = \"netra.guardrail.triggered\";\n\n// MCP attributes\nexport const NETRA_MCP_DATA = \"netra.mcp.data\";\nexport const NETRA_MCP_SERVER = \"netra.mcp.server\";\n\n// Custom span attributes\nexport const NETRA_SPAN_NAME = \"netra.span.name\";\nexport const NETRA_CUSTOM_DATA = \"netra.custom.data\";\n\n// GenAI semantic convention attributes not covered by shared SpanAttributes\nexport const GEN_AI_AGENT_NAME = \"gen_ai.agent.name\";\nexport const GEN_AI_TOOL_NAME = \"gen_ai.tool.name\";\nexport const GEN_AI_RESPONSE_ID = \"gen_ai.response.id\";\n","import { SpanType } from \"../../types\";\nimport { MAX_STRINGIFY_LENGTH } from \"./constants\";\nimport { AgentSpan, SpanData } from \"./types\";\n\nexport function safeJsonStringify(obj: unknown, maxLength: number = MAX_STRINGIFY_LENGTH): string {\n try {\n if (typeof obj === \"string\") {\n return maxLength > 0 && obj.length > maxLength ? obj.slice(0, maxLength) : obj;\n }\n const s = JSON.stringify(obj);\n return maxLength > 0 && s.length > maxLength ? s.slice(0, maxLength) : s;\n } catch {\n return String(obj);\n }\n}\n\nexport function getNetraSpanType(data: SpanData): SpanType {\n switch (data.type) {\n case \"agent\":\n return SpanType.AGENT;\n case \"generation\":\n case \"response\":\n return SpanType.GENERATION;\n case \"function\":\n case \"mcp_list_tools\":\n return SpanType.TOOL;\n case \"handoff\":\n return SpanType.HANDOFF;\n case \"guardrail\":\n return SpanType.GUARDRAIL;\n default:\n return SpanType.SPAN;\n }\n}\n\nexport function getSpanName(agentSpan: AgentSpan): string {\n const data = agentSpan.spanData;\n if (data.name) return data.name;\n if (data.type === \"handoff\" && data.to_agent) return `handoff to ${data.to_agent}`;\n return `openai.agents.${data.type}`;\n}\n\nexport function extractContentString(content: unknown): string {\n if (content === undefined || content === null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const texts: string[] = [];\n for (const item of content) {\n if (item && typeof item === \"object\") {\n const part = item as Record<string, unknown>;\n if (part.text !== undefined) {\n texts.push(String(part.text));\n }\n }\n }\n return texts.length > 0 ? texts.join(\" \") : safeJsonStringify(content);\n }\n return String(content);\n}\n\nexport function extractInstructions(response: unknown): string | undefined {\n if (!response || typeof response !== \"object\") return undefined;\n const resp = response as Record<string, unknown>;\n if (typeof resp.instructions === \"string\" && resp.instructions.length > 0) {\n return resp.instructions;\n }\n return undefined;\n}\n","import { Span as OTelSpan } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n GEN_AI_AGENT_NAME,\n GEN_AI_RESPONSE_ID,\n GEN_AI_TOOL_NAME,\n MAX_INDEXED_MESSAGES,\n NETRA_AGENT_HANDOFFS,\n NETRA_AGENT_NAME,\n NETRA_AGENT_OUTPUT_TYPE,\n NETRA_AGENT_TOOLS,\n NETRA_CUSTOM_DATA,\n NETRA_GUARDRAIL_NAME,\n NETRA_GUARDRAIL_TRIGGERED,\n NETRA_HANDOFF_SOURCE_AGENT,\n NETRA_HANDOFF_TARGET_AGENT,\n NETRA_MCP_DATA,\n NETRA_MCP_SERVER,\n NETRA_SPAN_NAME,\n} from \"./constants\";\nimport { Logger } from \"../../logger\";\nimport { AgentSpan, SpanData } from \"./types\";\nimport { extractContentString, extractInstructions, safeJsonStringify } from \"./utils\";\n\nexport function setSpanDataAttributes(\n otelSpan: OTelSpan,\n agentSpan: AgentSpan,\n systemName: string = DEFAULT_LLM_SYSTEM,\n): void {\n const data = agentSpan.spanData;\n\n switch (data.type) {\n case \"agent\":\n setAgentAttributes(otelSpan, data);\n break;\n case \"generation\":\n setGenerationAttributes(otelSpan, data, systemName);\n break;\n case \"response\":\n setResponseAttributes(otelSpan, agentSpan, systemName);\n break;\n case \"function\":\n setFunctionAttributes(otelSpan, data);\n break;\n case \"handoff\":\n setHandoffAttributes(otelSpan, data);\n break;\n case \"guardrail\":\n setGuardrailAttributes(otelSpan, data);\n break;\n case \"mcp_list_tools\":\n setMCPListToolsAttributes(otelSpan, data);\n break;\n default:\n setCustomAttributes(otelSpan, data);\n break;\n }\n}\n\nfunction setAgentAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_AGENT_NAME, data.name);\n span.setAttribute(GEN_AI_AGENT_NAME, data.name);\n }\n if (data.handoffs && data.handoffs.length > 0) {\n span.setAttribute(NETRA_AGENT_HANDOFFS, data.handoffs.join(\", \"));\n }\n if (data.tools && data.tools.length > 0) {\n span.setAttribute(NETRA_AGENT_TOOLS, data.tools.join(\", \"));\n }\n if (data.output_type) {\n span.setAttribute(NETRA_AGENT_OUTPUT_TYPE, data.output_type);\n }\n}\n\nfunction setGenerationAttributes(span: OTelSpan, data: SpanData, systemName: string): void {\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"chat\");\n\n if (data.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, data.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, data.model);\n }\n\n if (data.model_config) {\n const config = data.model_config;\n if (config.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, Number(config.temperature));\n }\n if (config.max_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MAX_TOKENS, Number(config.max_tokens));\n }\n if (config.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, Number(config.top_p));\n }\n if (config.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, Number(config.frequency_penalty));\n }\n if (config.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, Number(config.presence_penalty));\n }\n if (config.stop !== undefined) {\n span.setAttribute(SpanAttributes.LLM_CHAT_STOP_SEQUENCES, safeJsonStringify(config.stop));\n }\n if (config.reasoning_effort !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, String(config.reasoning_effort));\n } else if (config.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(config.reasoning));\n }\n }\n\n if (data.usage) {\n setUsageAttributes(span, data.usage);\n }\n\n if (data.input !== undefined) {\n setIndexedPromptAttributes(span, data.input);\n }\n if (data.output !== undefined) {\n setIndexedCompletionAttributes(span, data.output);\n }\n}\n\nfunction setResponseAttributes(span: OTelSpan, agentSpan: AgentSpan, systemName: string): void {\n const data = agentSpan.spanData;\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"response\");\n\n if (data.response_id) {\n span.setAttribute(GEN_AI_RESPONSE_ID, data.response_id);\n }\n\n if (!data._response && !data._input) {\n Logger.debug(\n \"NetraAgentsTracingProcessor: response span has no _response/_input data;\",\n \"the @openai/agents SDK may have changed its internal fields\",\n );\n }\n\n let promptStartIndex = 0;\n\n const instructions = extractInstructions(data._response);\n if (instructions) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"system\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, instructions);\n promptStartIndex = 1;\n }\n\n if (data._input !== undefined) {\n setIndexedPromptAttributes(span, data._input, promptStartIndex);\n }\n\n if (data._response) {\n setResponseObjectAttributes(span, data._response);\n setIndexedCompletionAttributes(span, data._response);\n }\n\n const resp = data._response as Record<string, unknown> | undefined;\n if (data.usage && !(resp && typeof resp === \"object\" && resp.usage)) {\n setUsageAttributes(span, data.usage);\n }\n}\n\nfunction setFunctionAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.name);\n }\n if (data.mcp_data) {\n span.setAttribute(NETRA_MCP_DATA, data.mcp_data);\n }\n if (data.input !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, safeJsonStringify(data.input));\n }\n if (data.output !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.content`, safeJsonStringify(data.output));\n }\n}\n\nfunction setHandoffAttributes(span: OTelSpan, data: SpanData): void {\n if (data.from_agent) {\n span.setAttribute(NETRA_HANDOFF_SOURCE_AGENT, data.from_agent);\n }\n if (data.to_agent) {\n span.setAttribute(NETRA_HANDOFF_TARGET_AGENT, data.to_agent);\n }\n}\n\nfunction setGuardrailAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_GUARDRAIL_NAME, data.name);\n }\n if (data.triggered !== undefined) {\n span.setAttribute(NETRA_GUARDRAIL_TRIGGERED, data.triggered);\n }\n}\n\nfunction setMCPListToolsAttributes(span: OTelSpan, data: SpanData): void {\n if (data.server) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.server);\n span.setAttribute(NETRA_MCP_SERVER, data.server);\n }\n}\n\nfunction setCustomAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_SPAN_NAME, data.name);\n }\n if (data.data !== undefined) {\n span.setAttribute(NETRA_CUSTOM_DATA, safeJsonStringify(data.data));\n }\n}\n\nfunction setUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<SpanData[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n usage.input_tokens + usage.output_tokens,\n );\n }\n\n if (usage.details) {\n const details = usage.details;\n if (details.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, Number(details.cached_tokens));\n }\n if (details.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, Number(details.reasoning_tokens));\n }\n }\n}\n\ninterface ResponseObject {\n model?: string;\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n reasoning?: unknown;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n input_tokens_details?: { cached_tokens?: number };\n output_tokens_details?: { reasoning_tokens?: number };\n };\n output?: Array<{\n type?: string;\n role?: string;\n content?: Array<{ type?: string; text?: string }>;\n name?: string;\n arguments?: string;\n call_id?: string;\n id?: string;\n }>;\n}\n\nfunction setResponseObjectAttributes(span: OTelSpan, response: unknown): void {\n if (!response || typeof response !== \"object\") return;\n const resp = response as ResponseObject;\n\n if (resp.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, resp.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, resp.model);\n }\n\n if (resp.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, resp.temperature);\n }\n if (resp.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, resp.top_p);\n }\n if (resp.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, resp.frequency_penalty);\n }\n if (resp.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, resp.presence_penalty);\n }\n if (resp.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(resp.reasoning));\n }\n\n if (resp.usage) {\n setResponseObjectUsageAttributes(span, resp.usage);\n }\n}\n\nfunction setResponseObjectUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<ResponseObject[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.total_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.total_tokens);\n } else if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.input_tokens + usage.output_tokens);\n }\n if (usage.input_tokens_details?.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, usage.input_tokens_details.cached_tokens);\n }\n if (usage.output_tokens_details?.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, usage.output_tokens_details.reasoning_tokens);\n }\n}\n\nfunction setIndexedPromptAttributes(span: OTelSpan, input: unknown, startIndex = 0): void {\n if (!input) return;\n\n if (typeof input === \"string\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.role`, \"user\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.content`, input);\n return;\n }\n\n if (!Array.isArray(input)) return;\n\n let index = startIndex;\n for (const message of input) {\n if (index - startIndex >= MAX_INDEXED_MESSAGES) break;\n if (!message || typeof message !== \"object\") continue;\n const msg = message as Record<string, unknown>;\n const msgType = msg.type as string | undefined;\n\n if (msgType === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n safeJsonStringify({ name: msg.name, arguments: msg.arguments }),\n );\n } else if (msgType === \"function_call_output\" || msgType === \"function_call_result\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"tool\");\n const output = msg.output;\n const outputText = output && typeof output === \"object\" && (output as Record<string, unknown>).text\n ? String((output as Record<string, unknown>).text)\n : String(output ?? \"\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, outputText);\n } else {\n const role = (msg.role as string) || \"user\";\n const content = extractContentString(msg.content);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, role);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, content);\n }\n index++;\n }\n}\n\nfunction setIndexedCompletionAttributes(span: OTelSpan, responseData: unknown): void {\n if (!responseData || typeof responseData !== \"object\") return;\n const resp = responseData as Record<string, unknown>;\n\n if (Array.isArray(resp.output)) {\n let index = 0;\n for (const item of resp.output) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!item || typeof item !== \"object\") continue;\n const element = item as Record<string, unknown>;\n\n if (element.type === \"message\" && Array.isArray(element.content)) {\n for (const contentItem of element.content as Array<Record<string, unknown>>) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (contentItem.type === \"output_text\" && contentItem.text) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.content`, String(contentItem.text));\n index++;\n }\n }\n } else if (element.type === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: element.name, arguments: element.arguments }),\n );\n const toolCallId = element.call_id || element.id;\n if (toolCallId) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(toolCallId));\n }\n index++;\n }\n }\n return;\n }\n\n if (Array.isArray(resp.choices)) {\n let index = 0;\n for (const choice of resp.choices) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!choice || typeof choice !== \"object\") continue;\n const c = choice as Record<string, unknown>;\n const message = (c.message || c.delta) as Record<string, unknown> | undefined;\n const choiceStartIndex = index;\n\n if (message) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.role`,\n String(message.role ?? \"assistant\"),\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n String(message.content ?? \"\"),\n );\n index++;\n\n const toolCalls = message.tool_calls as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(toolCalls)) {\n for (const tc of toolCalls) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n const func = (tc.function || {}) as Record<string, unknown>;\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: func.name ?? \"\", arguments: func.arguments ?? \"\" }),\n );\n if (tc.id) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(tc.id));\n }\n index++;\n }\n }\n }\n\n if (c.finish_reason) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${choiceStartIndex}.finish_reason`, String(c.finish_reason));\n }\n }\n }\n}\n","import {\n Span as OTelSpan,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport { SpanType } from \"../../types\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n NETRA_AGENTS_GROUP_ID,\n NETRA_AGENTS_METADATA,\n NETRA_AGENTS_PARENT_AGENT,\n NETRA_AGENTS_SPAN_TYPE,\n NETRA_SPAN_TYPE_ATTR,\n NETRA_WORKFLOW_NAME,\n} from \"./constants\";\nimport { getNetraSpanType, getSpanName, safeJsonStringify } from \"./utils\";\nimport { setSpanDataAttributes } from \"./attributes\";\nimport { Logger } from \"../../logger\";\nimport type { AgentSpan, AgentTrace, TracingProcessor } from \"./types\";\n\nexport class NetraAgentsTracingProcessor implements TracingProcessor {\n private static readonly MAX_TRACKED_SPANS = 10_000;\n private static readonly MAX_TRACKED_TRACES = 1_000;\n\n private _tracer: Tracer;\n private _systemName: string;\n private _isShutdown = false;\n private _rootSpans = new Map<string, OTelSpan>();\n private _otelSpans = new Map<string, OTelSpan>();\n private _handoffs = new Map<string, Map<string, string>>();\n private _traceErrors = new Set<string>();\n private _traceSpans = new Map<string, Set<string>>();\n\n constructor(tracer: Tracer, systemName: string = DEFAULT_LLM_SYSTEM) {\n this._tracer = tracer;\n this._systemName = systemName;\n }\n\n private _parseTimestamp(iso: string | null | undefined): Date | undefined {\n if (!iso) return undefined;\n const ts = new Date(iso);\n return isNaN(ts.getTime()) ? undefined : ts;\n }\n\n private _evictOldestSpan(): void {\n const oldest = this._otelSpans.keys().next().value;\n if (oldest) {\n const stale = this._otelSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(oldest);\n Logger.debug(\"NetraAgentsTracingProcessor: evicted span due to MAX_TRACKED_SPANS limit\");\n }\n }\n\n private _evictOldestTrace(): void {\n const oldest = this._rootSpans.keys().next().value;\n if (oldest) {\n const stale = this._rootSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.setStatus({ code: SpanStatusCode.ERROR, message: \"Trace evicted due to limit\" });\n stale?.end();\n } catch { /* already ended */ }\n this._rootSpans.delete(oldest);\n this._traceErrors.delete(oldest);\n this._handoffs.delete(oldest);\n\n const orphanedSpanIds = this._traceSpans.get(oldest);\n if (orphanedSpanIds) {\n for (const spanId of orphanedSpanIds) {\n const orphan = this._otelSpans.get(spanId);\n if (orphan) {\n try {\n orphan.setAttribute(\"netra.agents.evicted\", true);\n orphan.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(spanId);\n }\n }\n this._traceSpans.delete(oldest);\n }\n\n Logger.debug(\"NetraAgentsTracingProcessor: evicted root trace due to MAX_TRACKED_TRACES limit\");\n }\n }\n\n onTraceStart(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n if (agentTrace.disabled) return;\n\n const existingRoot = this._rootSpans.get(agentTrace.traceId);\n if (existingRoot) {\n try { existingRoot.end(); } catch { /* already ended */ }\n this._rootSpans.delete(agentTrace.traceId);\n }\n\n if (this._rootSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_TRACES) {\n this._evictOldestTrace();\n }\n\n const span = this._tracer.startSpan(agentTrace.name || \"Agent workflow\", {\n kind: SpanKind.INTERNAL,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: SpanType.AGENT,\n [NETRA_WORKFLOW_NAME]: agentTrace.name || \"Agent workflow\",\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n },\n });\n\n if (agentTrace.groupId) {\n span.setAttribute(NETRA_AGENTS_GROUP_ID, agentTrace.groupId);\n }\n if (agentTrace.metadata) {\n span.setAttribute(NETRA_AGENTS_METADATA, safeJsonStringify(agentTrace.metadata));\n }\n\n this._rootSpans.set(agentTrace.traceId, span);\n }\n\n onTraceEnd(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n\n const rootSpan = this._rootSpans.get(agentTrace.traceId);\n if (!rootSpan) return;\n\n const hasErrors = this._traceErrors.has(agentTrace.traceId);\n rootSpan.setStatus(hasErrors\n ? { code: SpanStatusCode.ERROR, message: \"One or more child spans failed\" }\n : { code: SpanStatusCode.OK },\n );\n rootSpan.end();\n\n this._rootSpans.delete(agentTrace.traceId);\n this._traceErrors.delete(agentTrace.traceId);\n this._handoffs.delete(agentTrace.traceId);\n this._traceSpans.delete(agentTrace.traceId);\n }\n\n onSpanStart(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const existingSpan = this._otelSpans.get(agentSpan.spanId);\n if (existingSpan) {\n try { existingSpan.end(); } catch { /* already ended */ }\n this._otelSpans.delete(agentSpan.spanId);\n }\n\n if (this._otelSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_SPANS) {\n this._evictOldestSpan();\n }\n\n const parentSpan = agentSpan.parentId\n ? this._otelSpans.get(agentSpan.parentId)\n : this._rootSpans.get(agentSpan.traceId);\n\n const parentContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined;\n\n const spanName = getSpanName(agentSpan);\n const netraType = getNetraSpanType(agentSpan.spanData);\n const startTime = this._parseTimestamp(agentSpan.startedAt);\n\n const span = this._tracer.startSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n startTime,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: netraType,\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n [NETRA_AGENTS_SPAN_TYPE]: agentSpan.spanData.type,\n },\n },\n parentContext,\n );\n\n this._otelSpans.set(agentSpan.spanId, span);\n\n let spanSet = this._traceSpans.get(agentSpan.traceId);\n if (!spanSet) {\n spanSet = new Set();\n this._traceSpans.set(agentSpan.traceId, spanSet);\n }\n spanSet.add(agentSpan.spanId);\n }\n\n onSpanEnd(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const span = this._otelSpans.get(agentSpan.spanId);\n if (!span) return;\n\n span.updateName(getSpanName(agentSpan));\n setSpanDataAttributes(span, agentSpan, this._systemName);\n\n const data = agentSpan.spanData;\n\n if (data.type === \"handoff\" && data.to_agent && data.from_agent) {\n let traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (!traceHandoffs) {\n traceHandoffs = new Map();\n this._handoffs.set(agentSpan.traceId, traceHandoffs);\n }\n traceHandoffs.set(data.to_agent, data.from_agent);\n }\n\n if (data.type === \"agent\" && data.name) {\n const traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (traceHandoffs) {\n const parentNode = traceHandoffs.get(data.name);\n if (parentNode) {\n span.setAttribute(NETRA_AGENTS_PARENT_AGENT, parentNode);\n traceHandoffs.delete(data.name);\n if (traceHandoffs.size === 0) {\n this._handoffs.delete(agentSpan.traceId);\n }\n }\n }\n }\n\n if (agentSpan.error) {\n const errorMsg = agentSpan.error.data\n ? `${agentSpan.error.message}: ${safeJsonStringify(agentSpan.error.data)}`\n : agentSpan.error.message;\n span.setStatus({ code: SpanStatusCode.ERROR, message: errorMsg });\n span.recordException(new Error(agentSpan.error.message));\n this._traceErrors.add(agentSpan.traceId);\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n\n const endTime = this._parseTimestamp(agentSpan.endedAt);\n span.end(endTime);\n this._otelSpans.delete(agentSpan.spanId);\n\n const spanSet = this._traceSpans.get(agentSpan.traceId);\n if (spanSet) {\n spanSet.delete(agentSpan.spanId);\n if (spanSet.size === 0) {\n this._traceSpans.delete(agentSpan.traceId);\n }\n }\n }\n\n forceFlush(): void {\n // The OTel pipeline handles flushing via its own span processors.\n // In-flight spans (started but not yet ended) cannot be flushed here\n // because they are still accumulating attributes; they will be exported\n // when their corresponding onSpanEnd / onTraceEnd callback fires.\n }\n\n shutdown(): void {\n this._isShutdown = true;\n\n for (const span of this._rootSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n\n for (const span of this._otelSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n this._rootSpans.clear();\n this._otelSpans.clear();\n this._handoffs.clear();\n this._traceErrors.clear();\n this._traceSpans.clear();\n }\n}\n","import { createRequire } from \"module\";\n\nlet _version = \"1.0.0\";\ntry {\n const req = createRequire(import.meta.url);\n const pkg = req(\"../../../package.json\");\n if (pkg?.version) _version = pkg.version;\n} catch {\n // Fall back to hardcoded version if package.json is unavailable at runtime\n}\n\nexport const __version__ = _version;\n","import { trace, Tracer } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { NetraAgentsTracingProcessor } from \"./processor\";\nimport { DEFAULT_LLM_SYSTEM, INSTRUMENTATION_NAME } from \"./constants\";\nimport { __version__ } from \"./version\";\nimport { Logger } from \"../../logger\";\nimport type { InstrumentorOptions } from \"./types\";\n\nlet cachedAgentsModule: any = null;\nlet isInstrumented = false;\nlet activeTracer: Tracer | null = null;\nlet activeProcessor: NetraAgentsTracingProcessor | null = null;\n\n/**\n * Resolve the @openai/agents module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveAgentsModule(): Promise<any> {\n if (cachedAgentsModule) return cachedAgentsModule;\n\n try {\n // @ts-ignore - @openai/agents is an optional peer dependency\n const mod = await import(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"ESM resolution of @openai/agents failed, trying CJS fallback\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"CJS resolution of @openai/agents also failed\");\n }\n\n return null;\n}\n\nexport class NetraOpenAIAgentsInstrumentor {\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Register the Netra tracing processor with the OpenAI Agents SDK.\n *\n * Returns `this` in all cases (success **and** failure) so the call can be\n * chained. Check {@link isInstrumented} afterwards to verify the processor\n * was registered successfully.\n */\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIAgentsInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n activeTracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer for OpenAI Agents: ${error}`);\n return this;\n }\n\n const agentsModule = await resolveAgentsModule();\n if (!agentsModule) {\n Logger.warn(\n \"OpenAI Agents SDK (@openai/agents) not found.\",\n \"Install it to enable automatic agent tracing.\",\n );\n return this;\n }\n\n const systemName = options.systemName ?? DEFAULT_LLM_SYSTEM;\n activeProcessor = new NetraAgentsTracingProcessor(activeTracer!, systemName);\n\n try {\n if (typeof agentsModule.addTraceProcessor === \"function\") {\n agentsModule.addTraceProcessor(activeProcessor);\n } else if (typeof agentsModule.setTraceProcessors === \"function\") {\n const existing = typeof agentsModule.getTraceProcessors === \"function\"\n ? agentsModule.getTraceProcessors()\n : [];\n agentsModule.setTraceProcessors([...existing, activeProcessor]);\n } else {\n Logger.warn(\n \"OpenAI Agents SDK does not expose addTraceProcessor or setTraceProcessors.\",\n \"Tracing integration may not work.\",\n );\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n } catch (error) {\n Logger.warn(\"Failed to register trace processor with @openai/agents:\", error);\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is not instrumented\");\n return;\n }\n\n if (activeProcessor) {\n activeProcessor.shutdown();\n // The Agents SDK TraceProvider has no API to remove a single processor.\n // Calling setTraceProcessors([]) would wipe all processors including\n // those registered by the user or other integrations.\n // After shutdown() our processor's internal state is cleared, so any\n // further callbacks from the SDK become safe no-ops.\n activeProcessor = null;\n }\n\n activeTracer = null;\n cachedAgentsModule = null;\n isInstrumented = false;\n }\n}\n\nexport const openaiAgentsInstrumentor = new NetraOpenAIAgentsInstrumentor();\n\nexport { NetraAgentsTracingProcessor } from \"./processor\";\nexport type { AgentSpan, AgentTrace, InstrumentorOptions, TracingProcessor } from \"./types\";\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\n\nexport function extractQuery(query: string | { query: string; parameters?: any[] }): {\n sql: string;\n parameters?: any[];\n} {\n if (typeof query === \"string\") {\n return { sql: query };\n }\n if (query && typeof query === \"object\" && \"query\" in query) {\n return {\n sql: String(query.query),\n parameters: Array.isArray(query.parameters) ? query.parameters : undefined,\n };\n }\n return { sql: String(query) };\n}\nexport function sanitizeQuery(sql: string, maxLength: number = 5000): string {\n if (sql.length <= maxLength) {\n return sql;\n }\n return sql.substring(0, maxLength) + \"...\";\n}\n\nexport function setQueryAttributes(\n span: Span,\n sql: string,\n parameters?: any[],\n operation?: string\n): void {\n span.setAttribute(\"db.system\", \"typeorm\");\n span.setAttribute(\"db.type\", \"sql\");\n \n if (operation) {\n span.setAttribute(\"db.operation\", operation);\n }\n\n if (!operation) {\n const upperSql = sql.trim().toUpperCase();\n if (upperSql.startsWith(\"SELECT\")) {\n span.setAttribute(\"db.operation\", \"SELECT\");\n } else if (upperSql.startsWith(\"INSERT\")) {\n span.setAttribute(\"db.operation\", \"INSERT\");\n } else if (upperSql.startsWith(\"UPDATE\")) {\n span.setAttribute(\"db.operation\", \"UPDATE\");\n } else if (upperSql.startsWith(\"DELETE\")) {\n span.setAttribute(\"db.operation\", \"DELETE\");\n } else if (upperSql.startsWith(\"CREATE\")) {\n span.setAttribute(\"db.operation\", \"CREATE\");\n } else if (upperSql.startsWith(\"DROP\")) {\n span.setAttribute(\"db.operation\", \"DROP\");\n } else if (upperSql.startsWith(\"ALTER\")) {\n span.setAttribute(\"db.operation\", \"ALTER\");\n }\n }\n\n span.setAttribute(\"db.statement\", sanitizeQuery(sql));\n\n if (parameters && parameters.length > 0) {\n try {\n span.setAttribute(\"db.statement.parameters\", JSON.stringify(parameters));\n } catch (e) {\n Logger.log(e);\n }\n }\n}\n\nexport function setResultAttributes(\n span: Span,\n result: any,\n rowCount?: number\n): void {\n if (rowCount !== undefined) {\n span.setAttribute(\"db.rows_affected\", rowCount);\n } else if (result !== undefined && result !== null) {\n if (Array.isArray(result)) {\n span.setAttribute(\"db.rows_affected\", result.length);\n } else if (typeof result === \"object\" && \"affected\" in result) {\n span.setAttribute(\"db.rows_affected\", Number(result.affected) || 0);\n } else if (typeof result === \"number\") {\n span.setAttribute(\"db.rows_affected\", result);\n }\n }\n}\n\nexport function extractDatabaseName(dataSource: any): string | undefined {\n if (!dataSource) return undefined;\n \n const options = dataSource.options || dataSource.connectionOptions;\n if (options) {\n if (options.database) return String(options.database);\n if (options.url) {\n try {\n const url = new URL(options.url);\n const dbName = url.pathname?.replace(/^\\//, \"\");\n if (dbName) return dbName;\n } catch(e) {\n Logger.log(e);\n }\n }\n }\n \n return undefined;\n}\n\n","import {\n Tracer,\n Span,\n SpanKind,\n SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport {\n extractQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nconst QUERY_SPAN_NAME = \"typeorm.query\";\nconst MANAGER_QUERY_SPAN_NAME = \"typeorm.manager.query\";\nconst REPOSITORY_QUERY_SPAN_NAME = \"typeorm.repository.query\";\n\ntype WrappedFunction = (...args: unknown[]) => unknown;\n\nexport function queryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const dbName = extractDatabaseName(instance);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function managerQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n MANAGER_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const manager = instance as any;\n const connection = manager.connection || manager.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function repositoryQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n REPOSITORY_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const repository = instance as any;\n const manager = repository.manager;\n const connection = manager?.connection || manager?.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n if (repository.metadata) {\n span.setAttribute(\"db.typeorm.entity\", repository.metadata.name);\n if (repository.metadata.tableName) {\n span.setAttribute(\"db.sql.table\", repository.metadata.tableName);\n }\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\n","export const __version__ = \"1.0.0\";\n\n","import {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\nimport { __version__ } from \"./version\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { createRequire } from \"module\";\n\nconst require = createRequire(import.meta.url);\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.typeorm\";\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nexport class NetraTypeORMInstrumentor {\n private tracer?: Tracer;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n }\n\n async instrument(options: InstrumentorOptions = {}): Promise<NetraTypeORMInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"TypeORM is already instrumented\");\n return this;\n }\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__) : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n await this._instrumentDataSource();\n await this._instrumentEntityManager();\n await this._instrumentRepository();\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"TypeORM is not instrumented\");\n return;\n }\n this._uninstrumentDataSource().catch(() => {\n });\n this._uninstrumentEntityManager().catch(() => {\n });\n this._uninstrumentRepository().catch(() => {\n });\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private async _instrumentDataSource(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n if (!DataSource) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM DataSource not found, skipping instrumentation\");\n }\n return;\n }\n\n if (DataSource.prototype?.query) {\n const originalQuery = DataSource.prototype.query;\n originalMethods.set(\"DataSource.prototype.query\", originalQuery);\n const tracer = this.tracer;\n const wrapper = queryWrapper(tracer);\n DataSource.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument DataSource: ${error}`);\n }\n }\n\n private async _instrumentEntityManager(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n if (!EntityManager) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM EntityManager not found, skipping instrumentation\");\n }\n return;\n }\n if (EntityManager.prototype?.query) {\n const originalQuery = EntityManager.prototype.query;\n originalMethods.set(\"EntityManager.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = managerQueryWrapper(tracer);\n\n EntityManager.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument EntityManager: ${error}`);\n }\n }\n\n private async _instrumentRepository(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n\n if (!Repository) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM Repository not found, skipping instrumentation\");\n }\n return;\n }\n\n if (Repository.prototype?.query) {\n const originalQuery = Repository.prototype.query;\n originalMethods.set(\"Repository.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = repositoryQueryWrapper(tracer);\n\n Repository.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument Repository: ${error}`);\n }\n }\n\n private async _uninstrumentDataSource(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n\n const originalQuery = originalMethods.get(\"DataSource.prototype.query\");\n if (originalQuery && DataSource?.prototype) {\n DataSource.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument DataSource: ${error}`);\n }\n }\n\n private async _uninstrumentEntityManager(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n const originalQuery = originalMethods.get(\"EntityManager.prototype.query\");\n if (originalQuery && EntityManager?.prototype) {\n EntityManager.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument EntityManager: ${error}`);\n }\n }\n\n private async _uninstrumentRepository(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n const originalQuery = originalMethods.get(\"Repository.prototype.query\");\n if (originalQuery && Repository?.prototype) {\n Repository.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Repository: ${error}`);\n }\n }\n}\n\nexport const typeORMInstrumentor = new NetraTypeORMInstrumentor();\n\nexport {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\n\nexport {\n extractQuery,\n sanitizeQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n\n","import { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\nlet trialBlockedAt: number | null = null;\nconst blockedTraceIds = new Set<string>();\n\nexport function setTrialBlocked(blocked: boolean) {\n if (blocked) {\n if (!trialBlockedAt) {\n trialBlockedAt = Date.now();\n Logger.warn(\n `Trial/quota exhausted: blocking span export for ${Config.TRIAL_BLOCK_DURATION_SECONDS}s`,\n );\n }\n } else {\n trialBlockedAt = null;\n }\n}\n\nexport function isTrialBlocked(): boolean {\n if (trialBlockedAt === null) return false;\n\n const elapsed = (Date.now() - trialBlockedAt) / 1000;\n\n if (elapsed >= Config.TRIAL_BLOCK_DURATION_SECONDS) {\n trialBlockedAt = null;\n return false;\n }\n\n return true;\n}\n\nexport function addBlockedTraceId(traceId: string) {\n blockedTraceIds.add(traceId);\n}\n\nexport function isTraceIdBlocked(traceId: string): boolean {\n return blockedTraceIds.has(traceId);\n}\n\nexport function getTraceId(span: ReadableSpan): string {\n try {\n return span.spanContext().traceId;\n } catch {\n return \"\";\n }\n}\n","import { ExportResultCode } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport type { SpanContext } from \"@opentelemetry/api\";\nimport {\n compilePatterns,\n matchesAnyPattern,\n CompiledPatterns,\n} from \"../utils/pattern-matching\";\nimport {\n addBlockedTraceId,\n getTraceId,\n isTraceIdBlocked,\n isTrialBlocked,\n} from \"./utils\";\n\n/**\n * Wrapper that overrides parentSpanContext without mutating the original span.\n * Delegates all other ReadableSpan properties to the original.\n *\n * NOTE: This class manually delegates every property of the ReadableSpan\n * interface. If the upstream interface adds new properties, they must be\n * forwarded here as well to avoid silent data loss during export.\n */\nclass ReparentedSpan implements ReadableSpan {\n constructor(\n private readonly delegate: ReadableSpan,\n private readonly newParent: SpanContext | undefined,\n ) {}\n\n get parentSpanContext(): SpanContext | undefined {\n return this.newParent;\n }\n\n get name() { return this.delegate.name; }\n get kind() { return this.delegate.kind; }\n spanContext() { return this.delegate.spanContext(); }\n get startTime() { return this.delegate.startTime; }\n get endTime() { return this.delegate.endTime; }\n get status() { return this.delegate.status; }\n get attributes() { return this.delegate.attributes; }\n get links() { return this.delegate.links; }\n get events() { return this.delegate.events; }\n get duration() { return this.delegate.duration; }\n get ended() { return this.delegate.ended; }\n get resource() { return this.delegate.resource; }\n get instrumentationScope() { return this.delegate.instrumentationScope; }\n get droppedAttributesCount() { return this.delegate.droppedAttributesCount; }\n get droppedEventsCount() { return this.delegate.droppedEventsCount; }\n get droppedLinksCount() { return this.delegate.droppedLinksCount; }\n}\n\nexport class FilteringSpanExporter implements SpanExporter {\n private static readonly MAX_REMEMBERED_ENTRIES = 10_000;\n\n /** Pre-compiled global patterns — compiled once in the constructor. */\n private readonly compiled: CompiledPatterns;\n\n /**\n * Spans that were blocked in a previous export() call but whose children\n * may still arrive in a later call (e.g. out-of-order export batches).\n */\n private readonly rememberedBlockedParentMap = new Map<\n string,\n SpanContext | undefined\n >();\n\n /** Cache for compiled local pattern sets to avoid per-span recompilation. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 100;\n\n constructor(\n private readonly exporter: SpanExporter,\n globalPatterns: string[],\n private readonly localBlockedMap?: ReadonlyMap<string, SpanContext | undefined>,\n ) {\n this.compiled = compilePatterns(globalPatterns);\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: { code: ExportResultCode }) => void,\n ): void {\n if (isTrialBlocked()) {\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId) addBlockedTraceId(traceId);\n }\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n const filtered: ReadableSpan[] = [];\n const batchBlockedMap = new Map<string, SpanContext | undefined>();\n\n // Snapshot the shared processor map to avoid iteration/mutation races\n // when BatchSpanProcessor invokes export() concurrently with onStart().\n const localBlockedSnapshot = this.localBlockedMap\n ? new Map(this.localBlockedMap)\n : undefined;\n\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId && isTraceIdBlocked(traceId)) continue;\n\n const name = span.name;\n\n const globallyBlocked = matchesAnyPattern(name, this.compiled);\n\n const localPatterns = this.getLocalPatterns(span);\n const locallyBlocked =\n (localPatterns.length > 0 &&\n matchesAnyPattern(name, this.getCompiledLocalPatterns(localPatterns))) ||\n this.hasLocalBlockFlag(span);\n\n if (!globallyBlocked && !locallyBlocked) {\n filtered.push(span);\n continue;\n }\n\n const spanId = span.spanContext().spanId;\n const parentCtx = span.parentSpanContext;\n batchBlockedMap.set(spanId, parentCtx);\n this.rememberedBlockedParentMap.set(spanId, parentCtx);\n }\n\n const merged = new Map<string, SpanContext | undefined>();\n\n for (const [k, v] of this.rememberedBlockedParentMap) {\n merged.set(k, v);\n }\n if (localBlockedSnapshot) {\n for (const [k, v] of localBlockedSnapshot) {\n merged.set(k, v);\n }\n }\n for (const [k, v] of batchBlockedMap) {\n merged.set(k, v);\n }\n\n if (merged.size > 0) {\n this.reparentBlockedChildren(filtered, merged);\n }\n\n this.evictRememberedIfNeeded();\n\n if (filtered.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.exporter.export(filtered, resultCallback);\n }\n\n shutdown(): Promise<void> {\n this.rememberedBlockedParentMap.clear();\n this.localPatternCache.clear();\n return this.exporter.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.() ?? Promise.resolve();\n }\n\n private getCompiledLocalPatterns(patterns: string[]): CompiledPatterns {\n const key = patterns.join(\"\\0\");\n let compiled = this.localPatternCache.get(key);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(key, compiled);\n if (this.localPatternCache.size > FilteringSpanExporter.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictRememberedIfNeeded(): void {\n if (this.rememberedBlockedParentMap.size <= FilteringSpanExporter.MAX_REMEMBERED_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-export eviction overhead\n const toRemove = Math.max(\n this.rememberedBlockedParentMap.size - FilteringSpanExporter.MAX_REMEMBERED_ENTRIES,\n Math.ceil(FilteringSpanExporter.MAX_REMEMBERED_ENTRIES * 0.25),\n );\n const keys = Array.from(this.rememberedBlockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this.rememberedBlockedParentMap.delete(key);\n }\n }\n\n private getLocalPatterns(span: ReadableSpan): string[] {\n const value = span.attributes?.[\"netra.local_blocked_spans\"];\n if (Array.isArray(value) && value.every((v) => typeof v === \"string\")) {\n return (value as string[]).filter((v) => v !== \"\");\n }\n return [];\n }\n\n private hasLocalBlockFlag(span: ReadableSpan): boolean {\n return span.attributes?.[\"netra.local_blocked\"] === true;\n }\n\n /**\n * Walk up the blocked-parent chain for each surviving span and wrap it\n * with a ReparentedSpan pointing to the nearest non-blocked ancestor.\n *\n * A cycle guard (visited set) prevents infinite loops in malformed traces.\n */\n private reparentBlockedChildren(\n spans: ReadableSpan[],\n blockedMap: Map<string, SpanContext | undefined>,\n ): void {\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n let parent = span.parentSpanContext;\n if (!parent) continue;\n\n const visited = new Set<string>();\n let changed = false;\n\n while (parent && blockedMap.has(parent.spanId)) {\n if (visited.has(parent.spanId)) break;\n visited.add(parent.spanId);\n parent = blockedMap.get(parent.spanId);\n changed = true;\n }\n\n if (changed) {\n spans[i] = new ReparentedSpan(span, parent);\n }\n }\n }\n}\n","import * as http from \"http\";\nimport * as https from \"https\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { JsonTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { isTrialBlocked, setTrialBlocked } from \"./utils\";\n\ninterface ExporterConfig {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport class TrialAwareOTLPExporter implements SpanExporter {\n private _url: string;\n private _headers: Record<string, string>;\n private _isShutdown = false;\n\n constructor(config: ExporterConfig) {\n this._url = config.url;\n this._headers = config.headers || {};\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this._isShutdown || isTrialBlocked()) {\n return resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n let data: Uint8Array | string;\n try {\n const serialized = JsonTraceSerializer.serializeRequest(spans);\n if (!serialized) throw new Error(\"Serialization failed\");\n data = serialized;\n } catch (err) {\n return resultCallback({\n code: ExportResultCode.FAILED,\n error: err instanceof Error ? err : new Error(\"Serialization failed\"),\n });\n }\n\n const url = new URL(this._url);\n const options: https.RequestOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.pathname,\n method: \"POST\",\n headers: {\n ...this._headers,\n host: url.host,\n \"Content-Type\": \"application/json\",\n \"Content-Length\":\n typeof data === \"string\" ? Buffer.byteLength(data) : data.byteLength,\n },\n };\n\n const lib = url.protocol === \"https:\" ? https : http;\n\n const req = lib.request(options, (res) => {\n let body = \"\";\n res.on(\"data\", (chunk) => (body += chunk));\n res.on(\"end\", () => {\n if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n } else {\n this.checkErrorBody(body, res.statusCode);\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error(`Status ${res.statusCode}`),\n });\n }\n });\n });\n\n req.on(\"error\", (err) =>\n resultCallback({ code: ExportResultCode.FAILED, error: err }),\n );\n req.write(data);\n req.end();\n }\n\n private checkErrorBody(bodyString: string, statusCode?: number) {\n try {\n const jsonBody = JSON.parse(bodyString);\n const errorCode = jsonBody?.error?.code || statusCode;\n const errorMessage = jsonBody?.error?.message || \"\";\n\n if (errorCode === 429 || errorMessage.includes(\"usage quota exceeded\")) {\n setTrialBlocked(true);\n }\n } catch (e) {\n if (statusCode === 429 || bodyString.includes(\"quota exceeded\")) {\n setTrialBlocked(true);\n }\n }\n }\n\n async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n async shutdown(): Promise<void> {\n this._isShutdown = true;\n return Promise.resolve();\n }\n}\n","/**\n * Instrumentation setup for Netra SDK\n */\n\nimport { context, trace } from \"@opentelemetry/api\";\nimport {\n ConsoleSpanExporter,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { initialize, InitializeOptions } from \"@traceloop/node-server-sdk\";\nimport { createRequire } from \"module\";\nimport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"../config\";\nimport { Logger } from \"../logger\";\nimport {\n InstrumentationSpanProcessor,\n LlmTraceIdentifierSpanProcessor,\n RootSpanProcessor,\n RootInstrumentFilterProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"../processors\";\nimport { anthropicInstrumentor } from \"./anthropic\";\nimport { googleGenerativeAIInstrumentor } from \"./google-genai\";\nimport { groqInstrumentor } from \"./groq\";\nimport { langgraphInstrumentor } from \"./langgraph\";\nimport { mistralAIInstrumentor } from \"./mistralai\";\nimport { openAIInstrumentor } from \"./openai\";\nimport { openaiAgentsInstrumentor } from \"./openai-agents\";\nimport { typeORMInstrumentor } from \"./typeorm\";\nimport { FilteringSpanExporter, TrialAwareOTLPExporter } from \"../exporters\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { LocalFilteringSpanProcessor } from \"../processors/localfiltering-span-processor\";\nimport { propagation } from \"@opentelemetry/api\";\nimport {\n CompositePropagator,\n W3CBaggagePropagator as BaggagePropagator,\n W3CTraceContextPropagator,\n} from \"@opentelemetry/core\";\n\n// Interface for TracerProvider with addSpanProcessor method\ninterface TracerProviderWithProcessors {\n addSpanProcessor(processor: SpanProcessor): void;\n}\n\n// Re-export shared utilities for use across instrumentations\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nconst require = createRequire(import.meta.url);\n\nlet _httpInstrumentation: any = null;\nlet _undiciInstrumentation: any = null;\n\n/**\n * Check if a package is installed and resolvable.\n * Equivalent to Python SDK's `is_package_installed()`.\n */\nfunction isPackageInstalled(packageName: string): boolean {\n try {\n require.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Promise that resolves when custom instrumentations are initialized.\n * Can be awaited after calling initInstrumentations() to ensure\n * all async instrumentations are complete.\n */\nexport let instrumentationsReady: Promise<void> = Promise.resolve();\n\npropagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [new W3CTraceContextPropagator(), new BaggagePropagator()],\n }),\n);\n\nfunction patchTraceloopLangchainCallbackHandler(): void {\n const applyPatch = (mod: any, sourceLabel: string) => {\n const Handler = mod?.TraceloopCallbackHandler;\n if (!Handler || Handler.__netra_patched) return;\n\n const wrapWithParentContext = (methodName: string) => {\n const original = Handler.prototype[methodName];\n if (typeof original !== \"function\") return;\n Handler.prototype[methodName] = function (...args: any[]) {\n const parentRunId = args[3];\n const parentSpan = parentRunId\n ? this?.spans?.get(parentRunId)?.span\n : undefined;\n const active = trace.getSpan(context.active());\n Logger.debug(\n `Traceloop ${methodName}: runId=${args[2]} parentRunId=${parentRunId} parentSpan=${parentSpan ? \"yes\" : \"no\"} activeSpanId=${active?.spanContext().spanId}`,\n );\n // Always bind the current active context (or explicit parent) for this callback.\n const ctx = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : context.active();\n return context.with(ctx, () => original.apply(this, args));\n };\n };\n\n wrapWithParentContext(\"handleChainStart\");\n wrapWithParentContext(\"handleLLMStart\");\n wrapWithParentContext(\"handleChatModelStart\");\n wrapWithParentContext(\"handleToolStart\");\n\n Handler.__netra_patched = true;\n Logger.debug(`Patched TraceloopCallbackHandler for parent context (${sourceLabel}).`);\n };\n\n try {\n const mod = require(\"@traceloop/instrumentation-langchain\");\n Logger.debug(`Loaded @traceloop/instrumentation-langchain via require from ${require.resolve(\"@traceloop/instrumentation-langchain\")}`);\n applyPatch(mod, \"require\");\n return;\n } catch (e) {\n Logger.debug(\"require() for traceloop langchain failed, falling back to import().\");\n }\n\n import(\"@traceloop/instrumentation-langchain\")\n .then((mod: any) => {\n applyPatch(mod, \"import\");\n })\n .catch(() => {\n // No-op: langchain instrumentation not installed or not in use\n });\n}\n\nfunction disableTraceloopLangchainCallbackHandler(): void {\n try {\n const callbackManagerModule = require(\"@langchain/core/callbacks/manager\");\n const CallbackManager = callbackManagerModule?.CallbackManager;\n if (!CallbackManager || (CallbackManager as any).__netra_disable_traceloop) {\n return;\n }\n const originalConfigureSync = (CallbackManager as any)._configureSync;\n if (typeof originalConfigureSync !== \"function\") return;\n\n (CallbackManager as any)._configureSync = function (\n inheritableHandlers: any,\n localHandlers: any,\n inheritableTags: any,\n localTags: any,\n inheritableMetadata: any,\n localMetadata: any,\n options?: any,\n ) {\n const filterHandlers = (handlers: any) => {\n if (!handlers) return handlers;\n if (Array.isArray(handlers)) {\n return handlers.filter(\n (h) => h?.name !== \"traceloop_callback_handler\",\n );\n }\n return handlers;\n };\n const filteredInheritable = filterHandlers(inheritableHandlers);\n const filteredLocal = filterHandlers(localHandlers);\n return originalConfigureSync.call(\n this,\n filteredInheritable,\n filteredLocal,\n inheritableTags,\n localTags,\n inheritableMetadata,\n localMetadata,\n options,\n );\n };\n (CallbackManager as any).__netra_disable_traceloop = true;\n Logger.debug(\"Disabled Traceloop LangChain callback injection.\");\n } catch {\n // no-op\n }\n}\n\n/**\n * Resolve the effective root instrument allow-list.\n *\n * `rootInstruments` is resolved independently of the non-root `instruments`\n * set. `blockInstruments` is subtracted from the resolved root set.\n *\n * When `NetraInstruments.ALL` is in `rootInstruments`, returns `null` (no\n * root filtering — all instrumentations may create root spans) unless\n * `blockInstruments` restricts the set.\n *\n * Returns a set of instrumentation-name strings, or `null` when no filtering\n * should be applied.\n */\nfunction resolveRootInstrumentNames(\n rootInstruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): Set<string> | null {\n const allSentinel = NetraInstruments.ALL;\n const rootHasAll = rootInstruments != null && rootInstruments.has(allSentinel);\n const blockHasAll = blockInstruments != null && blockInstruments.has(allSentinel);\n\n if (blockHasAll) {\n if (rootHasAll) {\n Logger.error(\n \"Netra: rootInstruments=ALL is contradicted by blockInstruments=ALL; \" +\n \"all root instrumentation is disabled.\",\n );\n } else {\n Logger.warn(\n \"Netra: blockInstruments contains ALL; all instrumentation will be disabled.\",\n );\n }\n }\n\n // All instrument values (excluding the ALL sentinel)\n const allInstrumentValues = new Set<string>(\n Object.values(NetraInstruments).filter((v) => v !== allSentinel),\n );\n\n // Compute blocked values\n let blockedValues: Set<string>;\n if (blockHasAll) {\n blockedValues = new Set(allInstrumentValues);\n } else if (blockInstruments && blockInstruments.size > 0) {\n blockedValues = new Set(\n [...blockInstruments]\n .filter((m) => m !== allSentinel)\n .map((m) => m.valueOf()),\n );\n } else {\n blockedValues = new Set();\n }\n\n // Resolve root set\n if (rootHasAll) {\n if (blockedValues.size > 0) {\n const resolved = new Set<string>();\n for (const v of allInstrumentValues) {\n if (!blockedValues.has(v)) {\n resolved.add(v);\n }\n }\n return resolved;\n }\n return null; // No filtering — all roots allowed\n }\n\n // Use explicit rootInstruments or fall back to DEFAULT_INSTRUMENTS_FOR_ROOT\n const effectiveRoot =\n rootInstruments && rootInstruments.size > 0\n ? rootInstruments\n : DEFAULT_INSTRUMENTS_FOR_ROOT;\n\n const resolved = new Set<string>();\n for (const m of effectiveRoot) {\n if (m === allSentinel) continue;\n const val = m.valueOf();\n if (!blockedValues.has(val)) {\n resolved.add(val);\n }\n }\n\n return resolved;\n}\n\nexport function initInstrumentations(\n config: Config,\n instruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n rootInstruments?: Set<NetraInstruments>,\n): TracerProviderWithProcessors | null {\n // Resolve effective instruments: use DEFAULT_INSTRUMENTS when not provided\n const enableAll = instruments != null && instruments.has(NetraInstruments.ALL);\n\n // Resolve root instrument names (independent of `instruments`).\n // blockInstruments is subtracted from the resolved root set.\n const resolvedRootNames: Set<string> | null = resolveRootInstrumentNames(\n rootInstruments,\n blockInstruments,\n );\n\n // Map Netra instruments to Traceloop instrument modules\n const instrumentModules: InitializeOptions[\"instrumentModules\"] = {};\n\n // Track whether to use custom instrumentors\n const customInstrumentModules: Record<string, boolean> = {\n openai: false,\n groq: false,\n mistral: false,\n langgraph: false,\n googleGenAI: false,\n anthropic: false,\n openAiAgents: false,\n };\n\n // Resolve effective instrument set (Python parity):\n // ALL → enable everything; otherwise fall back to DEFAULT_INSTRUMENTS\n const resolved: Set<NetraInstruments> = enableAll\n ? new Set(Object.values(NetraInstruments).filter((v) => v !== NetraInstruments.ALL) as NetraInstruments[])\n : (instruments && instruments.size > 0) ? instruments : DEFAULT_INSTRUMENTS;\n\n // Explicitly disable all Traceloop modules, then selectively enable\n instrumentModules.google_vertexai = false;\n instrumentModules.langchain = false;\n instrumentModules.llamaIndex = false;\n instrumentModules.pinecone = false;\n instrumentModules.qdrant = false;\n instrumentModules.chromadb = false;\n instrumentModules.together = false;\n\n if (resolved.has(NetraInstruments.OPENAI)) {\n customInstrumentModules.openai = true;\n }\n if (resolved.has(NetraInstruments.MISTRAL)) {\n customInstrumentModules.mistral = true;\n }\n if (resolved.has(NetraInstruments.GROQ)) {\n customInstrumentModules.groq = true;\n }\n if (resolved.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) {\n customInstrumentModules.googleGenAI = true;\n }\n if (resolved.has(NetraInstruments.VERTEX_AI) && isPackageInstalled(\"@google-cloud/vertexai\")) {\n instrumentModules.google_vertexai = require(\"@google-cloud/vertexai\");\n }\n if (resolved.has(NetraInstruments.LANGCHAIN)) {\n instrumentModules.langchain = true;\n }\n if (resolved.has(NetraInstruments.LANGGRAPH)) {\n customInstrumentModules.langgraph = true;\n }\n if (resolved.has(NetraInstruments.LLAMA_INDEX) && isPackageInstalled(\"llamaindex\")) {\n instrumentModules.llamaIndex = require(\"llamaindex\");\n }\n if (resolved.has(NetraInstruments.PINECONE) && isPackageInstalled(\"@pinecone-database/pinecone\")) {\n instrumentModules.pinecone = require(\"@pinecone-database/pinecone\");\n }\n if (resolved.has(NetraInstruments.QDRANT) && isPackageInstalled(\"@qdrant/js-client-rest\")) {\n instrumentModules.qdrant = require(\"@qdrant/js-client-rest\");\n }\n if (resolved.has(NetraInstruments.CHROMADB) && isPackageInstalled(\"chromadb\")) {\n instrumentModules.chromadb = require(\"chromadb\");\n }\n if (resolved.has(NetraInstruments.TOGETHER) && isPackageInstalled(\"together-ai\")) {\n instrumentModules.together = require(\"together-ai\");\n }\n if (resolved.has(NetraInstruments.ANTHROPIC)) {\n customInstrumentModules.anthropic = true;\n }\n\n // Apply blockInstruments to Traceloop and Netra custom modules\n if (blockInstruments && blockInstruments.size > 0) {\n const blockAll = blockInstruments.has(NetraInstruments.ALL);\n if (blockAll || blockInstruments.has(NetraInstruments.OPENAI)) customInstrumentModules.openai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GROQ)) customInstrumentModules.groq = false;\n if (blockAll || blockInstruments.has(NetraInstruments.MISTRAL)) customInstrumentModules.mistral = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGGRAPH)) customInstrumentModules.langgraph = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) customInstrumentModules.googleGenAI = false;\n if (blockAll || blockInstruments.has(NetraInstruments.ANTHROPIC)) customInstrumentModules.anthropic = false;\n if (blockAll || blockInstruments.has(NetraInstruments.VERTEX_AI)) instrumentModules.google_vertexai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGCHAIN)) instrumentModules.langchain = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LLAMA_INDEX)) instrumentModules.llamaIndex = false;\n if (blockAll || blockInstruments.has(NetraInstruments.PINECONE)) instrumentModules.pinecone = false;\n if (blockAll || blockInstruments.has(NetraInstruments.QDRANT)) instrumentModules.qdrant = false;\n if (blockAll || blockInstruments.has(NetraInstruments.CHROMADB)) instrumentModules.chromadb = false;\n if (blockAll || blockInstruments.has(NetraInstruments.TOGETHER)) instrumentModules.together = false;\n }\n\n // Set Traceloop environment variables before initializing\n // This ensures the SDK picks up our configuration\n config.setTraceloopEnv();\n\n // Debug: Log configuration being used\n Logger.debug(\"Netra SDK Configuration:\");\n Logger.debug(` App Name: ${config.appName}`);\n Logger.debug(` OTLP Endpoint: ${config.otlpEndpoint || \"(default - localhost:3002)\"}`);\n Logger.debug(` API Key: ${config.apiKey ? \"***\" + config.apiKey.slice(-4) : \"(not set)\"}`);\n Logger.debug(` Trace Content: ${config.traceContent}`);\n Logger.debug(` Enable Scrubbing: ${config.enableScrubbing}`);\n\n // Initialize Traceloop SDK\n const traceloopOptions: InitializeOptions = {\n appName: config.appName,\n apiKey: config.apiKey,\n baseUrl: config.otlpEndpoint,\n disableBatch: config.disableBatch,\n traceContent: config.traceContent,\n headers: config.headers,\n instrumentModules,\n silenceInitializationMessage: !config.debugMode,\n };\n // ---- updated exporter setup (Python-equivalent) ----\n\n // 1) Pick base exporter (Console fallback OR TrialAware(OTLP))\n let exporter: SpanExporter;\n\n if (!traceloopOptions.baseUrl || traceloopOptions.baseUrl == undefined) {\n exporter = new ConsoleSpanExporter();\n } else {\n const formattedEndpoint = config.formatOtlpEndpoint();\n\n // In TS, we pass the config directly to our custom class\n // because it handles the HTTP transport itself to catch the error body.\n exporter = new TrialAwareOTLPExporter({\n url: formattedEndpoint,\n headers: config.headers,\n });\n }\n\n // 2) Always attempt filtering (even for Console fallback)\n // The LocalFilteringSpanProcessor is instantiated below and its\n // blockedParentMap is injected into FilteringSpanExporter so the\n // two can share reparenting state without module-level globals.\n const globalBlockedPatterns = config.blockedSpans ?? [];\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor(globalBlockedPatterns);\n const originalExporter = exporter;\n\n try {\n exporter = new FilteringSpanExporter(\n exporter,\n globalBlockedPatterns,\n localFilteringSpanProcessor.blockedParentMap,\n );\n } catch {\n exporter = originalExporter;\n }\n\n traceloopOptions.exporter = exporter;\n\n initialize(traceloopOptions);\n\n if (instrumentModules.langchain) {\n patchTraceloopLangchainCallbackHandler();\n } else {\n disableTraceloopLangchainCallbackHandler();\n }\n\n // ---- rest stays same ----\n const tracerProvider = trace.getTracerProvider();\n\n // Add custom span processors to the TracerProvider\n // The Traceloop SDK creates a BasicTracerProvider internally\n const effectiveProvider = addCustomSpanProcessors(\n tracerProvider,\n config,\n resolvedRootNames,\n );\n\n // Initialize custom instrumentations asynchronously\n // We use async initialization to ensure we get the same ES module instances\n // that the application uses (important for ESM/CJS dual package handling)\n instrumentationsReady = initCustomInstrumentationsAsync(\n config,\n tracerProvider,\n customInstrumentModules,\n blockInstruments,\n );\n\n // Initialize additional OpenTelemetry instrumentations (uses resolved set)\n initOpenTelemetryInstrumentations(config, resolved, blockInstruments);\n\n return effectiveProvider;\n}\n\n/**\n * Returns true if the given instrument should be blocked.\n * Handles the ALL sentinel (blocks everything).\n */\nfunction isBlocked(\n instrument: NetraInstruments,\n blockInstruments?: Set<NetraInstruments>,\n): boolean {\n if (!blockInstruments || blockInstruments.size === 0) return false;\n return (\n blockInstruments.has(NetraInstruments.ALL) ||\n blockInstruments.has(instrument)\n );\n}\n\n/**\n * Initialize custom instrumentations asynchronously\n * This uses dynamic import() to ensure we patch the same ES module instances\n * that the application uses.\n */\nasync function initCustomInstrumentationsAsync(\n config: Config,\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n customInstrumentModules: Record<string, boolean>,\n blockInstruments?: Set<NetraInstruments>,\n): Promise<void> {\n if (customInstrumentModules.mistral) {\n try {\n await mistralAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom MistralAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom MistralAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.openai) {\n try {\n await openAIInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.groq) {\n try {\n await groqInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Groq instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Groq instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.googleGenAI) {\n try {\n await googleGenerativeAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Google GenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Google GenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.langgraph) {\n try {\n await langgraphInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom Langgraph instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Langgraph instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.anthropic) {\n try {\n await anthropicInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Anthropic instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Anthropic instrumentation:\", e);\n }\n }\n\n // Initialize OpenAI Agents SDK instrumentation\n if (\n customInstrumentModules.openaiAgents &&\n !blockInstruments?.has(NetraInstruments.OPENAI_AGENTS)\n ) {\n try {\n await openaiAgentsInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI Agents SDK instrumentation:\", e);\n }\n }\n}\n\nfunction initOpenTelemetryInstrumentations(\n config: Config,\n resolved: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): void {\n // HTTP/HTTPS instrumentation\n // Also auto-enabled when Express is requested (Express needs HTTP for traceparent propagation)\n // Shared URL exclusion — mirrors Python's OTEL_PYTHON_EXCLUDED_URLS global.\n // Always skips internal Netra egress; OTEL_NODE_EXCLUDED_URLS adds user patterns.\n let netraHost = \"\";\n try {\n if (config.otlpEndpoint) {\n netraHost = new URL(config.otlpEndpoint).host;\n }\n } catch {\n Logger.debug(`OTEL_NODE_EXCLUDED_URLS: malformed otlpEndpoint '${config.otlpEndpoint}', skipping host-based exclusion`);\n }\n\n // Comma-separated regex patterns (unanchored search). Precompiled once;\n // invalid patterns are skipped so a bad entry never breaks instrumentation.\n const excludeRegexes = (process.env.OTEL_NODE_EXCLUDED_URLS || \"\")\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n .map((pattern) => {\n try {\n return new RegExp(pattern);\n } catch {\n if (config.debugMode) {\n Logger.debug(\n `Invalid OTEL_NODE_EXCLUDED_URLS pattern skipped: ${pattern}`,\n );\n }\n return null;\n }\n })\n .filter((re): re is RegExp => re !== null);\n\n const isExcludedUrl = (url: string): boolean => {\n if (netraHost && url.includes(netraHost)) return true;\n return excludeRegexes.some((re) => re.test(url));\n };\n\n if (\n !isBlocked(NetraInstruments.HTTP, blockInstruments) &&\n (resolved.has(NetraInstruments.HTTP) || resolved.has(NetraInstruments.EXPRESS))\n ) {\n try {\n const { HttpInstrumentation } = require(\"@opentelemetry/instrumentation-http\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n _httpInstrumentation = new HttpInstrumentation({\n ignoreOutgoingRequestHook: (request: { host?: string; hostname?: string; path?: string }) => {\n const url = `${request.host ?? request.hostname ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_httpInstrumentation] });\n if (config.debugMode) {\n Logger.debug(\"HTTP instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"HTTP instrumentation not available:\", e);\n }\n }\n\n // undici / native fetch instrumentation. instrumentation-http does NOT cover\n // Node's global fetch (Node 18+) — it is backed by undici and bypasses the\n // http module. This is the primary egress path for OpenAI/Anthropic/AI-SDK.\n const fetchEnabled =\n !isBlocked(NetraInstruments.HTTP, blockInstruments) &&\n resolved.has(NetraInstruments.HTTP);\n\n if (fetchEnabled) {\n try {\n const { UndiciInstrumentation } = require(\"@opentelemetry/instrumentation-undici\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n\n _undiciInstrumentation = new UndiciInstrumentation({\n ignoreRequestHook: (request: { origin?: string; path?: string }) => {\n const url = `${request.origin ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_undiciInstrumentation] });\n if (config.debugMode) {\n Logger.debug(\"Undici/fetch instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n Logger.debug(\"Undici/fetch instrumentation not available:\", e);\n }\n }\n }\n\n // Prisma instrumentation\n if (\n !isBlocked(NetraInstruments.PRISMA, blockInstruments) &&\n resolved.has(NetraInstruments.PRISMA) &&\n isPackageInstalled(\"@prisma/instrumentation\")\n ) {\n try {\n const { PrismaInstrumentation } = require(\"@prisma/instrumentation\");\n // Note: This would need to be registered with the SDK\n } catch (e) {\n Logger.debug(\"Prisma instrumentation not available:\", e);\n }\n }\n\n if (\n !isBlocked(NetraInstruments.TYPEORM, blockInstruments) &&\n resolved.has(NetraInstruments.TYPEORM) &&\n isPackageInstalled(\"typeorm\")\n ) {\n typeORMInstrumentor\n .instrument()\n .then(() => {\n Logger.debug(\"TypeORM instrumentation successfully initialized\");\n })\n .catch((e) => {\n Logger.debug(\"TypeORM instrumentation error:\", e);\n });\n }\n\n // Express instrumentation\n if (\n !isBlocked(NetraInstruments.EXPRESS, blockInstruments) &&\n resolved.has(NetraInstruments.EXPRESS)\n ) {\n try {\n const { ExpressInstrumentation } = require(\"@opentelemetry/instrumentation-express\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n registerInstrumentations({ instrumentations: [new ExpressInstrumentation()] });\n if (config.debugMode) {\n Logger.debug(\"Express instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"Express instrumentation not available:\", e);\n }\n }\n}\n\n/**\n * Add custom span processors to the TracerProvider\n * These processors add session context, instrumentation metadata, and scrubbing\n *\n * Returns the effective TracerProvider that processors were added to.\n */\nfunction addCustomSpanProcessors(\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n config: Config,\n rootInstrumentNames: Set<string> | null,\n): TracerProviderWithProcessors | null {\n try {\n // The TracerProvider from Traceloop is a ProxyTracerProvider\n // We need to find the actual provider with addSpanProcessor method\n let provider: TracerProviderWithProcessors | null = null;\n\n // Try to access the delegate/underlying provider\n const providerAny = tracerProvider as any;\n\n // Check if it's a ProxyTracerProvider with a delegate\n if (\n providerAny._delegate &&\n typeof providerAny._delegate.addSpanProcessor === \"function\"\n ) {\n provider = providerAny._delegate as TracerProviderWithProcessors;\n }\n // Check if it has getDelegate method\n else if (typeof providerAny.getDelegate === \"function\") {\n const delegate = providerAny.getDelegate();\n if (delegate) {\n if (typeof delegate.addSpanProcessor === \"function\") {\n provider = delegate as TracerProviderWithProcessors;\n } else if (\n delegate._activeSpanProcessor &&\n delegate._activeSpanProcessor.constructor.name ===\n \"MultiSpanProcessor\" &&\n Array.isArray(delegate._activeSpanProcessor._spanProcessors)\n ) {\n // Fallback for OTel SDKs where addSpanProcessor is removed/protected\n // and MultiSpanProcessor is used (e.g. created by Traceloop)\n provider = {\n addSpanProcessor: (processor: SpanProcessor) => {\n delegate._activeSpanProcessor._spanProcessors.push(processor);\n },\n getTracer: (name: string, version?: string) => {\n return delegate.getTracer(name, version);\n },\n } as TracerProviderWithProcessors;\n }\n }\n }\n // Check if it directly has addSpanProcessor\n else if (typeof providerAny.addSpanProcessor === \"function\") {\n provider = providerAny as TracerProviderWithProcessors;\n }\n // Try accessing via global registry (NodeTracerProvider stores itself)\n else {\n try {\n // Try to get the active provider from the SDK\n const { NodeTracerProvider } = require(\"@opentelemetry/sdk-trace-node\");\n // The provider might be accessible via other means\n } catch {\n // SDK not available\n }\n }\n\n if (!provider) {\n Logger.debug(\n \"Could not access TracerProvider for adding span processors. \" +\n \"Session context will still be propagated via baggage.\",\n );\n return null;\n }\n\n // ─── Processor registration order matters ───\n // Processors that wrap span.setAttribute form an implicit call chain:\n // InstrumentationSpanProcessor (#1) wraps setAttribute for truncation,\n // then SpanIOProcessor (#3) wraps the already-wrapped setAttribute for\n // IO normalisation. Reordering these will break the chain silently.\n //\n // onEnd runs in registration order: SpanIOProcessor (#3) promotes\n // netra.user.input/output → input/output BEFORE RootSpanProcessor (#5)\n // cleans up its root span map.\n\n // 0. Local Filtering Span Processor - filters spans based on local context\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor();\n provider.addSpanProcessor(localFilteringSpanProcessor);\n\n // 0.5. Root Instrument Filter Processor - blocks root spans from non-allowed instrumentations\n // When rootInstrumentNames is null, all instrumentations may produce root spans (no filtering).\n if (rootInstrumentNames !== null) {\n const rootFilterProcessor = new RootInstrumentFilterProcessor(\n rootInstrumentNames,\n );\n provider.addSpanProcessor(rootFilterProcessor);\n }\n\n // 1. Instrumentation Span Processor - truncates attributes and adds instrumentation name.\n // MUST run before SpanIOProcessor so the IO processor's setAttribute wrapper\n // captures the truncation wrapper in its call chain.\n const instrumentationProcessor = new InstrumentationSpanProcessor();\n provider.addSpanProcessor(instrumentationProcessor);\n\n // 2. Session Span Processor - adds session context (session_id, user_id, etc.)\n const sessionProcessor = new SessionSpanProcessor();\n provider.addSpanProcessor(sessionProcessor);\n\n // 3. Span I/O Processor - normalises input/output from gen_ai.prompt/completion\n // and traceloop.entity attributes; remaps traceloop.* → netra.*\n // MUST run after InstrumentationSpanProcessor (captures its setAttribute wrapper).\n // MUST run before RootSpanProcessor (promotes netra.user.* in onEnd first).\n const spanIOProcessor = new SpanIOProcessor();\n provider.addSpanProcessor(spanIOProcessor);\n\n // 4. LLM Trace Identifier Span Processor - marks root spans that contain LLM calls\n const llmTraceProcessor = new LlmTraceIdentifierSpanProcessor();\n provider.addSpanProcessor(llmTraceProcessor);\n\n // 5. Root Span Processor - tracks the root span per trace by traceId.\n // Registered AFTER LlmTraceIdentifierSpanProcessor so that on_end cleanup\n // happens after the LLM processor has finished annotating the root span.\n // Registered AFTER SpanIOProcessor so root spans have setAttribute wrapped\n // before being stored in the root span map.\n const rootSpanProcessor = new RootSpanProcessor();\n provider.addSpanProcessor(rootSpanProcessor);\n\n // 6. Scrubbing Span Processor - scrubs sensitive data (if enabled)\n if (config.enableScrubbing) {\n const scrubbingProcessor = new ScrubbingSpanProcessor();\n provider.addSpanProcessor(scrubbingProcessor);\n }\n\n Logger.debug(\"Custom span processors registered successfully\");\n\n return provider;\n } catch (e) {\n Logger.debug(\"Failed to add custom span processors:\", e);\n return null;\n }\n}\n\n/**\n * Uninstrument all active instrumentations\n * Should be called during shutdown\n */\nexport async function uninstrumentAll(): Promise<void> {\n // Uninstrument custom OpenAI instrumentation\n try {\n if (openAIInstrumentor.isInstrumented()) {\n await openAIInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI:\", e);\n }\n\n // Uninstrument custom MistralAI instrumentation\n try {\n if (mistralAIInstrumentor.isInstrumented()) {\n mistralAIInstrumentor.uninstrument();\n Logger.debug(\"Custom MistralAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument MistralAI:\", e);\n }\n\n // Uninstrument custom Groq instrumentation\n try {\n if (groqInstrumentor.isInstrumented()) {\n groqInstrumentor.uninstrument();\n Logger.debug(\"Custom Groq instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Groq:\", e);\n }\n\n // Uninstrument custom Anthropic instrumentation\n try {\n if (anthropicInstrumentor.isInstrumented()) {\n anthropicInstrumentor.uninstrument();\n Logger.debug(\"Custom Anthropic instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Anthropic:\", e);\n }\n\n // Uninstrument custom Google GenAI instrumentation\n try {\n if (googleGenerativeAIInstrumentor.isInstrumented()) {\n googleGenerativeAIInstrumentor.uninstrument();\n Logger.debug(\"Custom Google GenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Google GenAI:\", e);\n }\n\n // Uninstrument custom Langgraph instrumentation\n try {\n if (langgraphInstrumentor.isInstrumented()) {\n await langgraphInstrumentor.uninstrument();\n Logger.debug(\"Custom Langgraph instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Langgraph:\", e);\n }\n\n // Uninstrument custom TypeORM instrumentation\n try {\n if (typeORMInstrumentor.isInstrumented()) {\n typeORMInstrumentor.uninstrument();\n Logger.debug(\"Custom TypeORM instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument TypeORM:\", e);\n }\n\n // Uninstrument custom OpenAI Agents SDK instrumentation\n try {\n if (openaiAgentsInstrumentor.isInstrumented()) {\n openaiAgentsInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI Agents SDK:\", e);\n }\n\n // Uninstrument HTTP instrumentation\n try {\n if (_httpInstrumentation) {\n _httpInstrumentation.disable();\n _httpInstrumentation = null;\n Logger.debug(\"HTTP instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument HTTP:\", e);\n }\n\n // Uninstrument undici/fetch instrumentation\n try {\n if (_undiciInstrumentation) {\n _undiciInstrumentation.disable();\n _undiciInstrumentation = null;\n Logger.debug(\"Undici/fetch instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument undici:\", e);\n }\n}\n","import { ProcessedFile, TaskResult } from \"./models\";\n\n\nexport abstract class BaseTask {\n /**\n * Process a simulation turn and return the agent's response.\n *\n * @param message - The input message from the simulation.\n * @param sessionId - The session identifier.\n * @param files - Optional list of base64-encoded file attachments from the\n * dataset item. Will be `null` when no files are attached.\n * @returns The task result containing:\n * - message (string): The response message from the task.\n * - sessionId (string): The session identifier.\n */\n abstract run(\n message: string,\n sessionId?: string | null,\n files?: ProcessedFile[] | null,\n ): Promise<TaskResult> | TaskResult;\n}\n","import axios from \"axios\";\nimport pLimit from \"p-limit\";\nimport { Logger } from \"../logger\";\nimport { FileData, ProcessedFile } from \"./models\";\nimport { BaseTask } from \"./task\";\n\ntype LimitFunction = ReturnType<typeof pLimit>;\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_FILE_DOWNLOAD_TIMEOUT_S = 30;\nconst MAX_FILE_DOWNLOAD_WORKERS = 8;\n\nlet _cachedFileDownloadTimeoutMs: number | null = null;\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string.\n *\n * @param traceId - The integer trace ID to format\n * @returns The formatted trace ID as a hexadecimal string\n */\nexport function formatTraceId(traceId: number): string {\n return traceId.toString(16).padStart(32, \"0\");\n}\n\n/**\n * Validate required inputs for simulation.\n *\n * @param datasetId - The dataset identifier to validate\n * @param task - The task function to validate\n * @returns True if inputs are valid, false otherwise\n */\nexport function validateSimulationInputs(\n datasetId: string,\n task: BaseTask,\n): boolean {\n if (!datasetId) {\n Logger.error(`${LOG_PREFIX}: dataset_id is required`);\n return false;\n }\n if (!(task instanceof BaseTask)) {\n Logger.error(`${LOG_PREFIX}: task must be a BaseTask instance`);\n return false;\n }\n return true;\n}\n\n/**\n * Get the file download timeout in milliseconds.\n *\n * Reads from the `NETRA_SIMULATION_FILE_DOWNLOAD_TIMEOUT` environment\n * variable (value in seconds) on first access and caches the result.\n * Falls back to the default of 30 s.\n *\n * @returns Timeout in milliseconds\n */\nfunction _getFileDownloadTimeout(): number {\n if (_cachedFileDownloadTimeoutMs !== null) {\n return _cachedFileDownloadTimeoutMs;\n }\n\n const envVal = process.env.NETRA_SIMULATION_FILE_DOWNLOAD_TIMEOUT;\n if (envVal) {\n const parsed = parseFloat(envVal);\n if (!isNaN(parsed) && parsed > 0) {\n _cachedFileDownloadTimeoutMs = parsed * 1000;\n return _cachedFileDownloadTimeoutMs;\n }\n Logger.warn(\n `${LOG_PREFIX}: Invalid file download timeout '${envVal}', using default ${DEFAULT_FILE_DOWNLOAD_TIMEOUT_S}s`,\n );\n }\n _cachedFileDownloadTimeoutMs = DEFAULT_FILE_DOWNLOAD_TIMEOUT_S * 1000;\n return _cachedFileDownloadTimeoutMs;\n}\n\n/**\n * Download a single file from its pre-signed URL and base64-encode the content.\n *\n * @param fileData - Metadata with the download URL\n * @param timeoutMs - Request timeout in milliseconds\n * @param signal - AbortSignal to cancel the download if another file in the\n * batch fails\n * @returns ProcessedFile with base64-encoded data\n * @throws Error if the download fails, with contextual information about which\n * file failed and the HTTP status (if available)\n */\nasync function _downloadSingleFile(\n fileData: FileData,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<ProcessedFile> {\n try {\n const response = await axios.get(fileData.downloadUrl, {\n responseType: \"arraybuffer\",\n timeout: timeoutMs,\n signal,\n });\n\n const encoded = Buffer.from(response.data).toString(\"base64\");\n return {\n fileName: fileData.fileName,\n contentType: fileData.contentType,\n description: fileData.description,\n data: encoded,\n };\n } catch (error) {\n if (axios.isCancel(error)) {\n throw new Error(\n `Download of '${fileData.fileName}' was cancelled`,\n );\n }\n\n const status = axios.isAxiosError(error) ? error.response?.status : undefined;\n const reason = status\n ? `HTTP ${status}`\n : (error instanceof Error ? error.message : String(error));\n\n Logger.error(\n `${LOG_PREFIX}: Failed to download file '${fileData.fileName}': ${reason}`,\n );\n\n throw new Error(\n `Failed to download file '${fileData.fileName}': ${reason}`,\n );\n }\n}\n\n/**\n * Parse raw attachment entries from the backend into typed FileData objects.\n *\n * Entries missing a `fileName` or `downloadUrl` are skipped with a warning.\n *\n * @param rawFiles - Array of attachment objects from the API response\n * @returns Parsed FileData array (empty when input is null/undefined)\n */\nexport function parseFiles(\n rawFiles: Array<Record<string, string>> | null | undefined,\n): FileData[] {\n if (!rawFiles) {\n return [];\n }\n\n const parsed: FileData[] = [];\n for (const entry of rawFiles) {\n const fileName = entry.fileName || \"\";\n const downloadUrl = entry.downloadUrl || \"\";\n\n if (!fileName || !downloadUrl) {\n Logger.warn(\n `${LOG_PREFIX}: Skipping malformed file attachment (missing fileName or downloadUrl)`,\n );\n continue;\n }\n\n parsed.push({\n fileName,\n contentType: entry.contentType || \"\",\n description: entry.description || undefined,\n downloadUrl,\n });\n }\n\n return parsed;\n}\n\n/**\n * Download and base64-encode a batch of files concurrently.\n *\n * Uses up to {@link MAX_FILE_DOWNLOAD_WORKERS} parallel downloads. If any\n * single download fails, outstanding downloads are cancelled via\n * AbortController and the error propagates to the caller.\n *\n * @param files - Array of FileData objects to download\n * @returns Array of ProcessedFile objects with base64-encoded data, or null\n * when the input array is empty / undefined\n * @throws Error if any file download fails\n */\nexport async function processFiles(\n files: FileData[] | null | undefined,\n): Promise<ProcessedFile[] | null> {\n if (!files || files.length === 0) {\n return null;\n }\n\n const timeoutMs = _getFileDownloadTimeout();\n const limit: LimitFunction = pLimit(MAX_FILE_DOWNLOAD_WORKERS);\n const controller = new AbortController();\n\n const downloadPromises = files.map((file) =>\n limit(() => _downloadSingleFile(file, timeoutMs, controller.signal)),\n );\n\n try {\n return await Promise.all(downloadPromises);\n } catch (error) {\n controller.abort();\n limit.clearQueue();\n throw error;\n }\n}\n\n/**\n * Execute a task function (sync or async) and extract message and session_id.\n *\n * When `rawFiles` is provided, the files are downloaded and base64-encoded\n * before being passed to the task's `run` method.\n *\n * @param task - The task function to execute\n * @param message - The input message to pass to the task\n * @param sessionId - The current session identifier\n * @param rawFiles - Optional array of file metadata to download and forward\n * @returns A tuple of [response_message, session_id]\n * @throws Error if the task returns an unsupported type or file download fails\n */\nexport async function executeTask(\n task: BaseTask,\n message: string,\n sessionId: string | null,\n rawFiles?: FileData[] | null,\n): Promise<[string, string | null]> {\n const processedFiles = rawFiles && rawFiles.length > 0\n ? await processFiles(rawFiles)\n : null;\n\n const result = task.run(message, sessionId, processedFiles);\n\n const resolvedResult = result instanceof Promise ? await result : result;\n\n if (\n typeof resolvedResult === \"object\" &&\n resolvedResult !== null &&\n \"message\" in resolvedResult &&\n \"sessionId\" in resolvedResult\n ) {\n return [resolvedResult.message, resolvedResult.sessionId];\n }\n\n throw new Error(\n `Task must return TaskResult, got ${typeof resolvedResult}`,\n );\n}\n","import axios, { AxiosInstance, AxiosResponse, AxiosError } from \"axios\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { injectTraceContextHeaders } from \"../utils/context-propagation\";\nimport { ConversationResponse, SimulationItem } from \"./models\";\nimport { parseFiles } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_TIMEOUT = 10000; // 10 seconds in milliseconds\n\n/**\n * Result from creating a simulation run.\n */\nexport interface CreateRunResult {\n runId: string;\n simulationItems: SimulationItem[];\n}\n\n/**\n * Internal HTTP client for simulation API endpoints.\n */\nexport class SimulationHttpClient {\n private client: AxiosInstance | null = null;\n\n constructor(config: Config) {\n this.client = this._createClient(config);\n }\n\n /**\n * Create and configure the HTTP client.\n */\n private _createClient(config: Config): AxiosInstance | null {\n const endpoint = (config.otlpEndpoint || \"\").trim();\n if (!endpoint) {\n Logger.error(`${LOG_PREFIX}: NETRA_OTLP_ENDPOINT is required`);\n return null;\n }\n\n const baseURL = this._resolveBaseUrl(endpoint);\n const headers = this._buildHeaders(config);\n const timeout = this._getTimeout();\n\n try {\n const instance = axios.create({\n baseURL,\n headers,\n timeout,\n });\n\n // Inject W3C trace context (traceparent/tracestate) into every\n // outgoing request so the Netra backend can join the active trace.\n instance.interceptors.request.use(\n (config) => {\n const traceHeaders = injectTraceContextHeaders({});\n Object.assign(config.headers, traceHeaders);\n return config;\n },\n (error) => Promise.reject(error),\n );\n\n return instance;\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Failed to create HTTP client:`, error);\n return null;\n }\n }\n\n /**\n * Extract base URL, removing telemetry suffix if present.\n */\n private _resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint;\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n /**\n * Build request headers from configuration.\n */\n private _buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n return headers;\n }\n\n /**\n * Get timeout from environment or use default.\n */\n private _getTimeout(): number {\n const timeoutStr = process.env.NETRA_SIMULATION_TIMEOUT;\n if (!timeoutStr) {\n return DEFAULT_TIMEOUT;\n }\n\n const timeout = parseFloat(timeoutStr);\n if (isNaN(timeout)) {\n Logger.warn(\n `${LOG_PREFIX}: Invalid timeout '${timeoutStr}', using default ${DEFAULT_TIMEOUT}ms`,\n );\n return DEFAULT_TIMEOUT;\n }\n\n return timeout * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Create a new simulation run for the specified dataset.\n */\n async createRun(\n name: string,\n datasetId: string,\n context?: Record<string, any>,\n ): Promise<CreateRunResult | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/test_run/multi-turn\";\n const payload = {\n name,\n datasetId,\n context: context || {},\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const userMessages = responseData.userMessages || [];\n\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages returned from create_run`);\n return null;\n }\n\n const runId = responseData.id || \"\";\n const simulationItems: SimulationItem[] = userMessages.map(\n (msg: any) => ({\n runItemId: msg.testRunItemId || \"\",\n message: msg.userMessage || \"\",\n turnId: msg.turnId || \"\",\n files: parseFiles(msg.attachments),\n }),\n );\n\n return {\n runId,\n simulationItems,\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to create simulation run:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Send a conversation turn to the backend and get the next response.\n */\n async triggerConversation(\n message: string,\n turnId: string,\n sessionId: string,\n traceId: string,\n ): Promise<ConversationResponse | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/turn/agent-response\";\n const payload = {\n turnId,\n agentResponse: { message },\n sessionId,\n traceId,\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const decision = responseData.decision || \"continue\";\n\n if (decision === \"stop\") {\n return {\n decision,\n reason: responseData.reason || \"\",\n };\n }\n\n const userMessages = responseData.userMessages || [];\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages in continue response`);\n return null;\n }\n\n const nextMsg = userMessages[0];\n return {\n decision,\n nextTurnId: nextMsg.turnId || \"\",\n nextUserMessage: nextMsg.userMessage || \"\",\n nextRunItemId: nextMsg.testRunItemId || \"\",\n nextFiles: parseFiles(nextMsg.attachments),\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to trigger conversation:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Report a task execution failure to the backend.\n */\n async reportFailure(runId: string, runItemId: string, error: string): Promise<void> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return;\n }\n\n try {\n const url = `/evaluations/run/${runId}/item/${runItemId}/status`;\n const payload = { status: \"failed\", failureReason: error };\n await this.client.patch(url, payload);\n Logger.info(`${LOG_PREFIX}: Reported failure - ${error}`);\n } catch (err) {\n const errorMsg = this._extractErrorMessage(err);\n Logger.error(`${LOG_PREFIX}: Failed to report failure:`, errorMsg);\n }\n }\n\n /**\n * Submit the run status.\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.client) {\n Logger.error(\n `${LOG_PREFIX}: Client not initialized; cannot post run status`,\n );\n return { success: false };\n }\n\n try {\n const url = `/evaluations/run/${runId}/status`;\n const payload = { status };\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n if (data && typeof data === \"object\" && \"data\" in data) {\n Logger.info(`${LOG_PREFIX}: Completed test run successfully`);\n return data.data || {};\n }\n return data;\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(\n `${LOG_PREFIX}: Failed to post run status for run '${runId}':`,\n errorMsg,\n );\n return { success: false };\n }\n }\n\n /**\n * Extract error message from response or exception.\n */\n private _extractErrorMessage(error: any): string {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError;\n if (axiosError.response?.data) {\n const responseData = axiosError.response.data as any;\n if (\n typeof responseData === \"object\" &&\n responseData.error &&\n typeof responseData.error === \"object\"\n ) {\n return responseData.error.message || error.message;\n }\n }\n return axiosError.message;\n }\n return error?.message || String(error);\n }\n}\n","/**\n * Public API for running multi-turn conversation simulations.\n */\n\nimport pLimit from \"p-limit\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SpanWrapper } from \"../span-wrapper\";\nimport { SimulationHttpClient } from \"./client\";\nimport {\n ConversationResult,\n FileData,\n SimulationItem,\n SimulationResult,\n} from \"./models\";\nimport { BaseTask } from \"./task\";\nimport { executeTask, validateSimulationInputs } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst SPAN_NAME = \"Netra.Simulation.TestRun\";\n\n\nexport interface SimulationOptions {\n name: string;\n datasetId: string;\n task: BaseTask;\n context?: Record<string, any>;\n maxConcurrency?: number; // default: 5\n}\n\n/**\n * Public API for running multi-turn conversation simulations.\n */\nexport class Simulation {\n private _config: Config;\n private _client: SimulationHttpClient;\n\n constructor(config: Config) {\n this._config = config;\n this._client = new SimulationHttpClient(config);\n }\n\n /**\n * Run a multi-turn conversation simulation.\n *\n * @param options - Simulation configuration options\n * @returns Dictionary with simulation results, or null on failure\n */\n async runSimulation(\n options: SimulationOptions,\n ): Promise<SimulationResult | null> {\n const {\n name,\n datasetId,\n task,\n context,\n maxConcurrency = 5,\n } = options;\n\n if (!validateSimulationInputs(datasetId, task)) {\n return null;\n }\n\n const startTime = Date.now();\n const runResult = await this._client.createRun(name, datasetId, context);\n if (!runResult) {\n return null;\n }\n\n const { runId, simulationItems } = runResult;\n if (!simulationItems || simulationItems.length === 0) {\n Logger.error(`${LOG_PREFIX}: No items returned from create_run`);\n return null;\n }\n\n let interrupted = false;\n const proc = typeof process !== \"undefined\" ? process : undefined;\n const finalizeFailure = (signal?: NodeJS.Signals) => {\n if (interrupted) {\n return;\n }\n interrupted = true;\n proc?.removeListener(\"SIGINT\", handleSignal);\n proc?.removeListener(\"SIGTERM\", handleSignal);\n proc?.removeListener(\"uncaughtException\", handleException);\n proc?.removeListener(\"unhandledRejection\", handleRejection);\n void this._client.postRunStatus(runId, \"failed\").finally(() => {\n if (signal) {\n proc?.kill(proc.pid, signal);\n }\n });\n };\n const handleSignal = (signal: \"SIGINT\" | \"SIGTERM\") => {\n finalizeFailure(signal);\n };\n const handleException = () => {\n finalizeFailure();\n };\n const handleRejection = () => {\n finalizeFailure();\n };\n if (proc && typeof proc.once === \"function\") {\n proc.once(\"SIGINT\", handleSignal);\n proc.once(\"SIGTERM\", handleSignal);\n proc.once(\"uncaughtException\", handleException);\n proc.once(\"unhandledRejection\", handleRejection);\n }\n\n Logger.info(\n `${LOG_PREFIX}: Starting simulation with ${simulationItems.length} items`,\n );\n\n try {\n const result = await this._runSimulationAsync(\n runId,\n simulationItems,\n task,\n maxConcurrency,\n );\n\n const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(2);\n Logger.info(\n `${LOG_PREFIX}: Simulation completed in ${elapsedTime} seconds`,\n );\n\n return result;\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Run simulation failed`);\n await this._client.postRunStatus(runId, \"failed\");\n throw error;\n } finally {\n if (proc && typeof proc.removeListener === \"function\") {\n proc.removeListener(\"SIGINT\", handleSignal);\n proc.removeListener(\"SIGTERM\", handleSignal);\n proc.removeListener(\"uncaughtException\", handleException);\n proc.removeListener(\"unhandledRejection\", handleRejection);\n }\n }\n }\n\n /**\n * Async implementation of run_simulation with concurrency control.\n */\n private async _runSimulationAsync(\n runId: string,\n runItems: SimulationItem[],\n task: BaseTask,\n maxConcurrency: number,\n ): Promise<SimulationResult> {\n const results: SimulationResult = {\n success: true,\n completed: [],\n failed: [],\n totalItems: runItems.length,\n };\n\n let processedCount = 0;\n\n // Create concurrency limiter\n const limit = pLimit(Math.min(5, maxConcurrency));\n\n // Process items with concurrency control\n const promises = runItems.map((runItem) =>\n limit(async () => {\n const result = await this._executeConversation(runId, runItem, task);\n\n if (result.success) {\n results.completed.push(result);\n } else {\n results.failed.push(result);\n }\n\n processedCount++;\n Logger.info(\n `${LOG_PREFIX}: ${processedCount}/${runItems.length} processed (run_item_id=${runItem.runItemId})`,\n );\n\n return result;\n }),\n );\n\n await Promise.all(promises);\n\n Logger.info(\n `${LOG_PREFIX}: Completed=${results.completed.length}, Failed=${results.failed.length}`,\n );\n\n await this._client.postRunStatus(runId, \"completed\");\n\n return results;\n }\n\n /**\n * Execute a multi-turn conversation for a single simulation item.\n */\n private async _executeConversation(\n runId: string,\n runItem: SimulationItem,\n task: BaseTask,\n ): Promise<ConversationResult> {\n const { runItemId, message: initialMessage, turnId: initialTurnId, files: initialFiles } = runItem;\n let message = initialMessage;\n let turnId = initialTurnId;\n let sessionId: string | null = null;\n let rawFiles: FileData[] = initialFiles ?? [];\n\n while (true) {\n const span = new SpanWrapper(SPAN_NAME, {}, LOG_PREFIX);\n span.start();\n\n try {\n const traceId = span.getCurrentSpan()?.spanContext().traceId ?? \"\";\n\n const [responseMessage, taskSessionId] = await span.withActive(\n () => executeTask(task, message, sessionId, rawFiles),\n );\n\n if (taskSessionId) {\n sessionId = taskSessionId;\n }\n\n // Trigger conversation inside the same active context so the\n // axios interceptor injects the correct traceparent header.\n const response = await span.withActive(() =>\n this._client.triggerConversation(\n responseMessage,\n turnId,\n sessionId || \"\",\n traceId,\n ),\n );\n\n if (response === null) {\n const errorMsg = \"Failed to get conversation response\";\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n\n if (response.decision === \"stop\") {\n Logger.info(\n `${LOG_PREFIX}: Completed run_item_id=${runItemId} reason=${response.reason}`,\n );\n return {\n runItemId,\n success: true,\n finalTurnId: turnId,\n };\n }\n\n message = response.nextUserMessage!;\n turnId = response.nextTurnId!;\n rawFiles = response.nextFiles || [];\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n Logger.error(\n `${LOG_PREFIX}: Task failed run_item_id=${runItemId}, turn_id=${turnId}: ${errorMsg}`,\n );\n await this._client.reportFailure(runId, runItemId, errorMsg);\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n } finally {\n span.end();\n }\n }\n }\n}\n","import { trace, Tracer as OtelTracer } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\n\nexport class Tracer {\n readonly tracer: OtelTracer;\n\n constructor(cfg: Config, effectiveProvider?: any) {\n if (effectiveProvider && typeof effectiveProvider.getTracer === \"function\") {\n this.tracer = effectiveProvider.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n } else {\n this.tracer = trace.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n }\n }\n}\n","/**\n * Decorators for easy instrumentation\n */\n\nimport { trace, Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { SessionManager } from \"./session-manager\";\nimport { SpanType, DecoratorOptions } from \"./types\";\n\ntype AnyFunction = (...args: any[]) => any;\ntype AsyncFunction = (...args: any[]) => Promise<any>;\ntype AnyClass = new (...args: any[]) => any;\ntype ClassDecoratorFn = (target: AnyClass) => void;\ntype MethodDecoratorFn = (\n target: any,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n) => void;\ntype UnifiedDecorator = ClassDecoratorFn & MethodDecoratorFn;\n\n/**\n * Circular-reference-safe JSON.stringify. Non-serializable values\n * (functions, symbols, cycles, complex class instances) become\n * descriptive placeholders instead of throwing.\n */\nfunction safeStringify(value: any, maxLen = 1000): string {\n const seen = new WeakSet<object>();\n try {\n return JSON.stringify(value, (_key, val) => {\n if (typeof val === \"function\") return `[Function: ${val.name || \"anonymous\"}]`;\n if (typeof val === \"symbol\") return val.toString();\n if (typeof val === \"bigint\") return val.toString();\n if (val !== null && typeof val === \"object\") {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n const name = val.constructor?.name;\n if (name && name !== \"Object\" && name !== \"Array\" && Object.keys(val).length > 20) {\n return `[${name}]`;\n }\n }\n return val;\n }).substring(0, maxLen);\n } catch {\n return value?.constructor?.name ? `[${value.constructor.name}]` : String(typeof value);\n }\n}\n\nfunction serializeValue(value: any): string {\n if (value === null || value === undefined) return String(value);\n const t = typeof value;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return String(value);\n return safeStringify(value);\n}\n\n/**\n * Returns true if the span already has a non-empty `output` attribute.\n * Checks both the public `attributes` property and the internal `_attributes`\n * store to handle SDK implementations that buffer attributes before export.\n */\nfunction spanHasOutput(span: Span): boolean {\n try {\n for (const field of [\"attributes\", \"_attributes\"]) {\n const attrs = (span as any)[field];\n if (attrs && typeof attrs === \"object\" && attrs[\"output\"]) return true;\n }\n } catch (e) {\n Logger.warn(\"spanHasOutput: error inspecting span attributes:\", e);\n }\n return false;\n}\n\nfunction addInputAttributes(\n span: Span,\n args: any[],\n entityType: string,\n): void {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.type`, entityType);\n if (args.length > 0) {\n span.setAttribute(\"input\", safeStringify(args));\n }\n}\n\nfunction addOutputAttributes(span: Span, result: any): void {\n // Skip if the user already set output explicitly inside the decorated function\n if (spanHasOutput(span)) return;\n try {\n span.setAttribute(\"output\", serializeValue(result));\n } catch (e) {\n span.setAttribute(\"output_error\", String(e));\n }\n}\n\nfunction isClassConstructor(value: unknown): value is AnyClass {\n if (typeof value !== \"function\") {\n return false;\n }\n\n const prototype = value.prototype;\n return (\n prototype != null &&\n typeof prototype === \"object\" &&\n prototype.constructor === value\n );\n}\n\nfunction createFunctionWrapper<T extends AnyFunction>(\n func: T,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): T {\n const moduleName = func.name || \"unknown\";\n const spanName = name || func.name || \"anonymous\";\n const isAsync = func.constructor.name === \"AsyncFunction\";\n\n const initSpan = (span: Span): void => {\n span.setAttribute(\"netra.span.type\", asType);\n SessionManager.registerSpan(spanName, span);\n };\n\n const handleError = (span: Span, e: any) => {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.error`, String(e));\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e instanceof Error ? e.message : String(e),\n });\n span.recordException(e);\n throw e;\n };\n\n const cleanup = (span: Span) => {\n span.end();\n SessionManager.unregisterSpan(spanName, span);\n SessionManager.popEntity(entityType);\n };\n\n if (isAsync) {\n const wrapper = async function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, async (span) => {\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = await (func as AsyncFunction).call(this, ...args);\n addOutputAttributes(span, result);\n return result;\n } catch (e: any) {\n handleError(span, e);\n } finally {\n cleanup(span);\n }\n });\n };\n return wrapper as T;\n } else {\n const wrapper = function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, (span) => {\n // Track whether the function returned a promise so the finally block\n // can skip its cleanup — the promise chain owns span lifecycle in that case.\n let returnedPromise = false;\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = (func as AnyFunction).call(this, ...args);\n\n // Detect promise-returning non-async functions (e.g. `function foo() { return fetch(...) }`)\n // Without this check, addOutputAttributes would capture the raw Promise object and\n // cleanup() would end the span before the async work completes.\n if (result != null && typeof (result as any).then === \"function\") {\n returnedPromise = true;\n return (result as Promise<any>)\n .then((resolved: any) => {\n addOutputAttributes(span, resolved);\n return resolved;\n })\n .catch((e: any) => handleError(span, e))\n .finally(() => cleanup(span));\n }\n\n addOutputAttributes(span, result);\n return result;\n } catch (e: any) {\n handleError(span, e);\n } finally {\n if (!returnedPromise) {\n cleanup(span);\n }\n }\n });\n };\n return wrapper as T;\n }\n}\n\nconst SKIP_STATIC_PROPS = new Set([\n \"length\",\n \"name\",\n \"prototype\",\n \"arguments\",\n \"caller\",\n]);\n\nfunction createClassWrapper(\n cls: AnyClass,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): void {\n const className = name ?? cls.name;\n\n for (const methodName of Object.getOwnPropertyNames(cls.prototype)) {\n if (methodName === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(cls.prototype, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n cls.prototype[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n\n for (const methodName of Object.getOwnPropertyNames(cls)) {\n if (SKIP_STATIC_PROPS.has(methodName)) continue;\n const desc = Object.getOwnPropertyDescriptor(cls, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n (cls as any)[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n}\n\nfunction decoratorFactory(\n entityType: string,\n spanType: SpanType,\n targetOrOptions?: AnyFunction | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): AnyFunction | AnyClass | UnifiedDecorator {\n if (isClassConstructor(targetOrOptions)) {\n createClassWrapper(targetOrOptions, entityType, options?.name, spanType);\n return targetOrOptions;\n }\n\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n entityType,\n options?.name,\n spanType,\n );\n }\n\n const opts = targetOrOptions as DecoratorOptions | undefined;\n return function (\n target: AnyFunction | AnyClass,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ): void {\n if (descriptor) {\n // Mutate descriptor in place — returning void is valid for method decorators\n descriptor.value = createFunctionWrapper(\n descriptor.value,\n entityType,\n opts?.name,\n spanType,\n );\n return;\n } else if (isClassConstructor(target)) {\n createClassWrapper(target, entityType, opts?.name, spanType);\n return;\n }\n } as UnifiedDecorator;\n}\n\nexport function workflow(target: AnyClass): void;\nexport function workflow<T extends AnyFunction>(target: T): T;\nexport function workflow(options?: DecoratorOptions): UnifiedDecorator;\nexport function workflow<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\n \"workflow\",\n SpanType.SPAN,\n targetOrOptions,\n options,\n ) as T | void | UnifiedDecorator;\n}\n\nexport function agent(target: AnyClass): void;\nexport function agent<T extends AnyFunction>(target: T): T;\nexport function agent(options?: DecoratorOptions): UnifiedDecorator;\nexport function agent<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"agent\", SpanType.AGENT, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function task(target: AnyClass): void;\nexport function task<T extends AnyFunction>(target: T): T;\nexport function task(options?: DecoratorOptions): UnifiedDecorator;\nexport function task<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"task\", SpanType.TOOL, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function span(target: AnyClass): void;\nexport function span<T extends AnyFunction>(target: T): T;\nexport function span(options?: DecoratorOptions): UnifiedDecorator;\nexport function span<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n const spanType =\n (typeof targetOrOptions !== \"function\"\n ? (targetOrOptions as DecoratorOptions)?.asType\n : options?.asType) ?? SpanType.SPAN;\n return decoratorFactory(\"span\", spanType, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n","/**\n * Netra SDK - Main entry point\n * A comprehensive TypeScript/JavaScript SDK for AI application observability\n * Built on top of OpenTelemetry and Traceloop\n */\n\nimport { context, Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { Prompts, Dashboard, Evaluation, Usage } from \"./api\";\nimport { Config, NetraConfig } from \"./config\";\nimport { initInstrumentations, instrumentationsReady, uninstrumentAll } from \"./instrumentation\";\nimport { Logger } from \"./logger\";\nimport { setSessionBaggage, withBlockedSpansLocal } from \"./processors\";\nimport { ConversationType, SessionManager } from \"./session-manager\";\nimport { Simulation } from \"./simulation\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { Tracer } from \"./tracer\";\nimport { SpanType, SpanCallback, SpanOptions, SpanAttributes } from \"./types\";\n\nexport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"./config\";\nexport { agent, span, task, workflow } from \"./decorators\";\nexport {\n InstrumentationSpanProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"./processors\";\nexport { ConversationType } from \"./session-manager\";\nexport { SpanType } from \"./types\";\nexport type { ActionModel, UsageModel, SpanOptions } from \"./types\";\n// Expose provider instrumentors for advanced usage/testing\nexport { mistralAIInstrumentor } from \"./instrumentation/mistralai\";\nexport {\n NetraOpenAIAgentsInstrumentor,\n openaiAgentsInstrumentor,\n NetraAgentsTracingProcessor,\n} from \"./instrumentation/openai-agents\";\n\n// Export API types and classes\nexport {\n Aggregation,\n ChartType,\n // Dashboard API\n Dashboard,\n DimensionField,\n EntryStatus,\n // Evaluation API\n Evaluation,\n FilterField,\n FilterType,\n GroupBy,\n Measure,\n metadataField,\n Operator,\n RunEntryContext,\n RunStatus,\n Scope,\n // Usage API\n Usage,\n // Prompts API\n Prompts,\n} from \"./api\";\n\nexport type {\n // Dashboard API\n CategoricalDataPoint,\n // Evaluation API\n CreateDatasetParams,\n DashboardData,\n Dataset,\n DatasetEntry,\n DatasetItem,\n Dimension,\n DimensionValue,\n EvaluationScore,\n EvaluatorFunction,\n Filter,\n FilterConfig,\n // Usage API\n ListSpansParams,\n ListTracesParams,\n Metrics,\n NumberResponse,\n QueryDataParams,\n QueryResponse,\n Run,\n SessionUsageData,\n SpansPage,\n TaskFunction,\n TenantUsageData,\n TestSuiteResult,\n TimeRange,\n TimeSeriesDataPoint,\n TimeSeriesResponse,\n TimeSeriesWithDimension,\n TracesPage,\n TraceSpan,\n TraceSummary,\n GetPromptParams,\n PromptResponse,\n} from \"./api\";\n\n// Export simulation types and classes\nexport { BaseTask, Simulation } from \"./simulation\";\nexport type {\n ConversationResponse,\n ConversationResult,\n CreateRunResult,\n ProcessedFile,\n SimulationItem,\n SimulationOptions,\n SimulationResult,\n TaskResult,\n} from \"./simulation\";\nexport * from \"./exporters\";\n\n// Context propagation helpers for distributed tracing\nexport {\n netraExpressMiddleware,\n runWithExtractedContext,\n} from \"./utils/context-propagation\";\n\nexport class Netra {\n private static _SDK_NAME = \"netra_sdk\";\n\n private static _initialized = false;\n private static _config: Config | undefined;\n private static _tracer: any;\n private static _rootSpan: Span | undefined;\n private static _metricsEnabled = false;\n\n static usage: Usage;\n static evaluation: Evaluation;\n static dashboard: Dashboard;\n static simulation: Simulation;\n static prompts: Prompts;\n\n static getConfig(): Config {\n if (!this._config) {\n throw new Error(\"Netra SDK not initialized. Call Netra.init() first.\");\n }\n return this._config;\n }\n\n static isInitialized(): boolean {\n return this._initialized;\n }\n\n static async init(config: NetraConfig = {}): Promise<void> {\n if (this._initialized) {\n Logger.warn(\"Netra.init() called more than once; ignoring subsequent calls.\");\n return;\n }\n\n const cfg = new Config(config);\n this._config = cfg;\n\n // Wire the logger before anything else so all modules respect debugMode.\n Logger.setDebugMode(cfg.debugMode);\n\n // Initialize instrumentations and get effective provider\n const effectiveProvider = initInstrumentations(\n cfg,\n config.instruments,\n config.blockInstruments,\n config.rootInstruments,\n );\n\n // Create the tracer\n const tracer = new Tracer(cfg, effectiveProvider);\n this._tracer = tracer.tracer;\n\n try {\n this.usage = new Usage(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize usage client:\", e);\n }\n\n try {\n this.evaluation = new Evaluation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize evaluation client:\", e);\n }\n\n try {\n this.dashboard = new Dashboard(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize dashboard client:\", e);\n }\n\n try {\n this.simulation = new Simulation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize simulation client:\", e);\n }\n\n try {\n this.prompts = new Prompts(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize prompts client:\", e);\n }\n\n this._initialized = true;\n Logger.info(\"Netra successfully initialized.\");\n\n {\n let pkgVersion = Config.LIBRARY_VERSION;\n let pkgPath = \"unknown\";\n try {\n const req = createRequire(import.meta.url);\n pkgPath = req.resolve(\"../package.json\");\n const pkg = req(\"../package.json\");\n pkgVersion = pkg?.version || pkgVersion;\n } catch {\n // keep defaults\n }\n Logger.debug(\n `SDK version=${pkgVersion} libraryVersion=${Config.LIBRARY_VERSION} build=langgraph-parenting-v3 packageJson=${pkgPath}`,\n );\n }\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n Logger.log(`\\nReceived ${signal}. Shutting down Netra SDK...`);\n await this.shutdown();\n process.exit(0);\n };\n\n const handleUncaughtException = async (error: Error) => {\n Logger.error(\"Uncaught exception:\", error);\n Logger.error(\"Shutting down Netra SDK due to crash...\");\n try {\n await this.shutdown();\n } catch (err) {\n Logger.error(\"Error during crash shutdown:\", err);\n }\n process.exit(1);\n };\n\n // Handle process running out of work\n process.once(\"beforeExit\", async () => {\n // beforeExit can be called multiple times if the loop fills up again\n // but for our purpose, we just want to ensure flush happens if the script finishes\n await this.shutdown();\n });\n\n // Handle termination signals\n process.once(\"SIGINT\", () => handleSignal(\"SIGINT\"));\n process.once(\"SIGTERM\", () => handleSignal(\"SIGTERM\"));\n\n // Handle crashes\n process.once(\"uncaughtException\", handleUncaughtException);\n\n // Create root span if enabled\n if (cfg.enableRootSpan) {\n // Use the effective tracer if available\n const tracer = this._tracer || trace.getTracer(\"netra.root.span\");\n const rootName = `${Config.LIBRARY_NAME}.root.span`;\n\n // Create the root span\n this._rootSpan = tracer.startSpan(rootName, {\n kind: SpanKind.INTERNAL,\n });\n\n if (this._rootSpan) {\n if (cfg.appName) {\n this._rootSpan.setAttribute(\"service.name\", cfg.appName);\n }\n this._rootSpan.setAttribute(\"netra.environment\", cfg.environment);\n this._rootSpan.setAttribute(\n \"netra.library.version\",\n Config.LIBRARY_VERSION,\n );\n\n Logger.info(\n \"Netra root span created. Use Netra.runWithRootSpan() to parent spans under it.\",\n );\n }\n }\n\n // Wait for all async instrumentations to be ready\n await instrumentationsReady;\n }\n\n static async shutdown(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n\n // Unpatch any monkey-patched instrumentations first\n try {\n await uninstrumentAll();\n } catch (e) {\n Logger.error(\"Error during uninstrumentAll:\", e);\n }\n\n if (this._rootSpan) {\n try {\n this._rootSpan.end();\n } catch (e) {\n } finally {\n this._rootSpan = undefined;\n }\n }\n\n const FLUSH_TIMEOUT_MS = 5000;\n\n try {\n const traceProvider = trace.getTracerProvider();\n const flushPromise = (async () => {\n if (\n \"forceFlush\" in traceProvider &&\n typeof traceProvider.forceFlush === \"function\"\n ) {\n await traceProvider.forceFlush();\n }\n if (\n \"shutdown\" in traceProvider &&\n typeof traceProvider.shutdown === \"function\"\n ) {\n await traceProvider.shutdown();\n }\n })();\n\n await Promise.race([\n flushPromise,\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n } catch (e) {\n Logger.error(\"Error during Netra trace shutdown:\", e);\n }\n\n this._initialized = false;\n this._tracer = undefined;\n }\n\n static getTraceId(): string | undefined {\n return SessionManager.getTraceId();\n }\n\n static setInput(value: any): void {\n SessionManager.setInput(value);\n }\n\n static setOutput(value: any): void {\n SessionManager.setOutput(value);\n }\n\n static setRootInput(value: any): void {\n SessionManager.setRootInput(value);\n }\n\n static setRootOutput(value: any): void {\n SessionManager.setRootOutput(value);\n }\n\n /**\n * Run a function with the root span as the active parent context.\n * All spans created within this function will be children of the root span.\n * Note: required in JS because OTel JS has no persistent context.attach()\n */\n static runWithRootSpan<T>(fn: () => T): T {\n if (!this._rootSpan) {\n Logger.warn(\n \"runWithRootSpan: No root span available. Running function without parent context.\",\n );\n return fn();\n }\n return context.with(trace.setSpan(context.active(), this._rootSpan), fn);\n }\n\n static setSessionId(sessionId: string): void {\n if (typeof sessionId !== \"string\") {\n Logger.error(`setSessionId: sessionId must be a string, got ${typeof sessionId}`);\n return;\n }\n if (sessionId) {\n setSessionBaggage(\"session_id\", sessionId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.session_id`,\n sessionId,\n );\n } else {\n Logger.warn(\"setSessionId: Session ID must be provided for setting session_id.\");\n }\n }\n\n /**\n * Set user_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setUserId(userId: string): void {\n if (typeof userId !== \"string\") {\n Logger.error(`setUserId: userId must be a string, got ${typeof userId}`);\n return;\n }\n if (userId) {\n setSessionBaggage(\"user_id\", userId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.user_id`,\n userId,\n );\n } else {\n Logger.warn(\"setUserId: User ID must be provided for setting user_id.\");\n }\n }\n\n /**\n * Set tenant_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setTenantId(tenantId: string): void {\n if (typeof tenantId !== \"string\") {\n Logger.error(`setTenantId: tenantId must be a string, got ${typeof tenantId}`);\n return;\n }\n if (tenantId) {\n setSessionBaggage(\"tenant_id\", tenantId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.tenant_id`,\n tenantId,\n );\n } else {\n Logger.warn(\"setTenantId: Tenant ID must be provided for setting tenant_id.\");\n }\n }\n\n /**\n * Set a custom attribute on the current active span\n */\n static setCustomAttributes(key: string, value: any): void {\n if (key && value !== undefined && value !== null) {\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.custom.${key}`,\n value,\n );\n } else {\n Logger.warn(\"Both key and value must be provided for custom attributes.\");\n }\n }\n\n /**\n * Set custom event in the current active span\n */\n static setCustomEvent(\n eventName: string,\n attributes: Record<string, any>,\n ): void {\n if (eventName && attributes) {\n SessionManager.setCustomEvent(eventName, attributes);\n } else {\n Logger.warn(\"Both eventName and attributes must be provided for custom events.\");\n }\n }\n\n /**\n * Append a conversation entry to the current active span\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n SessionManager.addConversation(conversationType, role, content);\n }\n\n static startSpan(name: string): SpanWrapper;\n static startSpan(name: string, options: SpanOptions): SpanWrapper;\n static startSpan(name: string, options?: SpanOptions): SpanWrapper {\n const attributes = options?.attributes ?? {};\n const moduleName = options?.moduleName ?? this._SDK_NAME;\n const spanType = options?.asType ?? SpanType.SPAN;\n\n return new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n options?.blockedSpans,\n ).start();\n }\n\n static startActiveSpan<T>(name: string, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(name: string, options: SpanOptions, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(\n name: string,\n optionsOrFn: SpanOptions | SpanCallback<T>,\n fn?: SpanCallback<T>,\n ): T {\n let attributes: SpanAttributes = {};\n let moduleName = this._SDK_NAME;\n let spanType: SpanType = SpanType.SPAN;\n let callback: SpanCallback<T>;\n\n if (typeof optionsOrFn === \"function\") {\n callback = optionsOrFn;\n } else {\n attributes = optionsOrFn.attributes ?? {};\n moduleName = optionsOrFn.moduleName ?? this._SDK_NAME;\n spanType = optionsOrFn.asType ?? SpanType.SPAN;\n callback = fn!;\n }\n\n const blockedSpans = typeof optionsOrFn === \"function\"\n ? undefined\n : optionsOrFn.blockedSpans;\n\n const spanWrapper = new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n blockedSpans,\n ).start();\n\n return spanWrapper.withActive(() => {\n let result: T;\n try {\n result = callback(spanWrapper);\n } catch (e) {\n spanWrapper.setError(e instanceof Error ? e.message : String(e));\n spanWrapper.end();\n throw e;\n }\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .catch((e) => {\n spanWrapper.setError(e instanceof Error ? e.message : String(e));\n throw e;\n })\n .finally(() => spanWrapper.end()) as T;\n }\n\n spanWrapper.end();\n return result;\n });\n }\n\n static withBlockedSpansLocal = withBlockedSpansLocal;\n}\n\nexport default Netra;\n"]}
1
+ {"version":3,"sources":["../src/logger.ts","../src/utils/context-propagation.ts","../src/api/http-client.ts","../src/api/usage/client.ts","../src/api/usage/api.ts","../src/version.ts","../src/config.ts","../src/utils/pattern-matching.ts","../src/processors/localfiltering-span-processor.ts","../src/processors/root-span-processor.ts","../src/types.ts","../src/utils/serialization.ts","../src/session-manager.ts","../src/span-wrapper.ts","../src/api/evaluation/client.ts","../src/api/evaluation/utils.ts","../src/api/evaluation/api.ts","../src/api/evaluation/models.ts","../src/api/evaluation/context.ts","../src/api/dashboard/client.ts","../src/api/dashboard/models.ts","../src/api/dashboard/api.ts","../src/api/prompts/client.ts","../src/api/prompts/api.ts","../src/processors/attribute-size-limit-processor.ts","../src/processors/instrumentation-span-processor.ts","../src/processors/llm-trace-identifier-span-processor.ts","../src/processors/scrubbing-span-processor.ts","../src/processors/session-span-processor.ts","../src/processors/root-instrument-filter-processor.ts","../src/processors/span-io-processor.ts","../src/instrumentation/anthropic/version.ts","../src/utils/response-handler.ts","../src/instrumentation/span-attributes.ts","../src/instrumentation/utils.ts","../src/instrumentation/anthropic/types.ts","../src/instrumentation/anthropic/utils.ts","../src/instrumentation/anthropic/wrappers.ts","../src/instrumentation/anthropic/index.ts","../src/instrumentation/google-genai/version.ts","../src/instrumentation/google-genai/utils.ts","../src/instrumentation/google-genai/wrappers.ts","../src/instrumentation/google-genai/index.ts","../src/instrumentation/groq/version.ts","../src/instrumentation/groq/utils.ts","../src/instrumentation/groq/wrappers.ts","../src/instrumentation/groq/index.ts","../src/instrumentation/langgraph/version.ts","../node_modules/@langchain/core/dist/_virtual/rolldown_runtime.js","../node_modules/@langchain/core/src/load/map_keys.ts","../node_modules/@langchain/core/src/load/validation.ts","../node_modules/@langchain/core/src/load/serializable.ts","../node_modules/@langchain/core/src/utils/env.ts","../node_modules/@langchain/core/src/callbacks/base.ts","../src/instrumentation/langgraph/utils.ts","../src/instrumentation/langgraph/wrappers.ts","../src/instrumentation/langgraph/index.ts","../src/instrumentation/mistralai/version.ts","../src/instrumentation/mistralai/utils.ts","../src/instrumentation/mistralai/wrappers.ts","../src/instrumentation/mistralai/index.ts","../src/instrumentation/openai/version.ts","../src/instrumentation/openai/utils.ts","../src/instrumentation/openai/wrappers.ts","../src/instrumentation/openai/index.ts","../src/instrumentation/openai-agents/constants.ts","../src/instrumentation/openai-agents/utils.ts","../src/instrumentation/openai-agents/attributes.ts","../src/instrumentation/openai-agents/processor.ts","../src/instrumentation/openai-agents/version.ts","../src/instrumentation/openai-agents/index.ts","../src/instrumentation/typeorm/utils.ts","../src/instrumentation/typeorm/wrappers.ts","../src/instrumentation/typeorm/version.ts","../src/instrumentation/typeorm/index.ts","../src/exporters/utils.ts","../src/exporters/filteringSpanExporter.ts","../src/exporters/trialAwareOtlpExporter.ts","../src/instrumentation/index.ts","../src/simulation/task.ts","../src/simulation/utils.ts","../src/simulation/client.ts","../src/simulation/api.ts","../src/tracer.ts","../src/decorators.ts","../src/index.ts"],"names":["config","trace","span","NetraInstruments","isEmpty","otelContext","propagation","SpanType","ConversationType","context","task","EntryStatus","RunStatus","SpanKind","Scope","ChartType","Measure","Aggregation","GroupBy","DimensionField","Operator","FilterType","FilterField","value","SpanAttributes","setResponseAttributes","setRequestAttributes","SpanStatusCode","__version__","safeStringify","isTraceContentEnabled","chatWrapper","chatStreamWrapper","INSTRUMENTATION_NAME","INSTRUMENTS","isInstrumented","createRequire","shimmer","CHAT_SPAN_NAME","key: string","map?: SerializedKeyAlias","snakeCase","fields: SerializedFields","mapper: typeof keyToJson","mapped: SerializedFields","obj: Record<string, unknown>","obj: unknown","id: string[]","value: unknown","pathSet: WeakSet<object>","result: Record<string, unknown>","obj: T","root: SerializedFields","secretsMap: { [key: string]: string }","current: any","serializableClass: typeof Serializable","Serializable","kwargs?: SerializedFields","aliases: { [key: string]: string }","secrets: { [key: string]: string }","read: any","write: any","escapedKwargs: SerializedFields","env: string","runtimeEnvironment: RuntimeEnvironment | undefined","name: string","x: BaseCallbackHandler","input?: BaseCallbackHandlerInput","methods: CallbackHandlerMethods","x: unknown","getContextManager","originalMethods","EMBEDDING_SPAN_NAME","endTime","AsyncStreamingWrapper","StreamingWrapper","embeddingsWrapper","SPAN_NAMES","openAIClasses","setUsageAttributes","require","ExportResultCode","BaggagePropagator","resolved","executeTask","LOG_PREFIX","axios","pLimit","Tracer","tracer","fn"],"mappings":";;;;;;;;;;;;;;;;AAOA,IAAM,MAAA,GAAS,SAAA;AAER,IAAM,SAAN,MAAa;AAAA,EAGlB,OAAO,aAAa,OAAA,EAAwB;AAC1C,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA;AAAA,EACpB;AAAA,EAEA,WAAmB,OAAA,GAAmB;AACpC,IAAA,OACE,IAAA,CAAK,UAAA,IACL,CAAC,GAAA,EAAK,MAAM,CAAA,CAAE,QAAA,CAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,WAAA,IAAe,EAAA,EAAI,WAAA,EAAa,CAAA;AAAA,EAExE;AAAA,EAEA,OAAO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,OAAO,SAAS,IAAA,EAAmB;AACjC,IAAA,IAAI,KAAK,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EACjD;AAAA,EAEA,OAAO,QAAQ,IAAA,EAAmB;AAChC,IAAA,IAAI,KAAK,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAChD;AAAA,EAEA,OAAO,QAAQ,IAAA,EAAmB;AAChC,IAAA,IAAI,KAAK,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAChD;AAAA,EAEA,OAAO,SAAS,IAAA,EAAmB;AACjC,IAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAC/B;AAAA,EAEA,OAAO,OAAO,IAAA,EAAmB;AAC/B,IAAA,IAAI,KAAK,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAC/C;AACF,CAAA;AArCa,MAAA,CACI,UAAA,GAAa,KAAA;ACmBvB,SAAS,0BACd,OAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAkC,EAAE,GAAG,OAAA,EAAQ;AACrD,EAAA,IAAI;AACF,IAAA,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAO,EAAG,OAAO,CAAA;AAAA,EAC9C,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,+CAA+C,CAAA;AAC3D,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA;AACT;AAYO,SAAS,0BACd,OAAA,EACS;AACT,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,CAAA,GAAI,KAAA;AAAA,IAC/B,WAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,CAAA,GAAI,MAAM,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,MAAA,IAAU,OAAO,CAAA;AACtD;AA0BO,SAAS,uBAAA,CACd,SACA,EAAA,EACG;AACH,EAAA,MAAM,YAAA,GAAe,0BAA0B,OAAO,CAAA;AACtD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,YAAA,EAAc,EAAE,CAAA;AACtC;AAkCO,SAAS,sBAAA,GAIN;AACR,EAAA,OAAO,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,KAAS;AAC1B,IAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,GAAA,CAAI,OAAO,CAAA;AAC1D,IAAA,OAAA,CAAQ,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACjC,CAAA;AACF;;;ACvHO,IAAM,kBAAN,MAAsB;AAAA,EAM3B,WAAA,CAAYA,OAAAA,EAAgB,aAAA,EAAuB,cAAA,EAAwB;AAF3E,IAAA,IAAA,CAAQ,WAAA,GAAuB,KAAA;AAG7B,IAAA,MAAM,QAAA,GAAWA,OAAAA,CAAO,YAAA,EAAc,IAAA,EAAK,IAAK,EAAA;AAChD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,MAAA,IAAA,CAAK,UAAU,EAAC;AAChB,MAAA,IAAA,CAAK,OAAA,GAAU,cAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,YAAA,CAAaA,OAAM,CAAA;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,aAAA,EAAe,cAAc,CAAA;AAC5D,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA,EAEQ,eAAe,QAAA,EAA0B;AAC/C,IAAA,IAAI,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG;AAClC,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,aAAa,MAAM,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,aAAaA,OAAAA,EAAwC;AAC3D,IAAA,MAAM,OAAA,GAAkC,EAAE,GAAGA,OAAAA,CAAO,OAAA,EAAQ;AAC5D,IAAA,IAAIA,QAAO,MAAA,EAAQ;AACjB,MAAA,OAAA,CAAQ,WAAW,IAAIA,OAAAA,CAAO,MAAA;AAAA,IAChC;AACA,IAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,UAAA,CAAW,QAAgB,YAAA,EAA8B;AAC/D,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,WAAW,QAAQ,CAAA;AAClC,IAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,CAAA,eAAA,EAAkB,MAAM,CAAA,QAAA,EAAW,QAAQ,oBAAoB,YAAY,CAAA;AAAA,OAC7E;AACA,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,aAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAM,GAAA,CACJ,IAAA,EACA,MAAA,EAC0B;AAC1B,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAA,CAAO,MAAM,uCAAuC,CAAA;AACpD,MAAA,OAAO,EAAE,IAAA,EAAM,IAAS,MAAA,EAAQ,CAAA,EAAG,IAAI,KAAA,EAAM;AAAA,IAC/C;AAEA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,EAAM,KAAK,OAAO,CAAA;AACtC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC/C,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,UAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC5C;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,SAAA,GAAY,UAAA;AAAA,QAChB,MAAM,WAAW,KAAA,EAAM;AAAA,QACvB,KAAK,OAAA,GAAU;AAAA,OACjB;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,CAAI,UAAS,EAAG;AAAA,QAC3C,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA,EAAS,yBAAA,CAA0B,IAAA,CAAK,OAAO,CAAA;AAAA,QAC/C,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAI,QAAA,CAAS;AAAA,OACf;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,WAAA,EAAc,IAAI,CAAA,QAAA,CAAA,EAAY,KAAK,CAAA;AAChD,MAAA,OAAO,EAAE,IAAA,EAAM,IAAS,MAAA,EAAQ,CAAA,EAAG,IAAI,KAAA,EAAM;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,IAAA,CACJ,IAAA,EACA,IAAA,EAC0B;AAC1B,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAA,CAAO,MAAM,uCAAuC,CAAA;AACpD,MAAA,OAAO,EAAE,IAAA,EAAM,IAAS,MAAA,EAAQ,CAAA,EAAG,IAAI,KAAA,EAAM;AAAA,IAC/C;AAEA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,EAAM,KAAK,OAAO,CAAA;AAEtC,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,SAAA,GAAY,UAAA;AAAA,QAChB,MAAM,WAAW,KAAA,EAAM;AAAA,QACvB,KAAK,OAAA,GAAU;AAAA,OACjB;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,CAAI,UAAS,EAAG;AAAA,QAC3C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,yBAAA,CAA0B,IAAA,CAAK,OAAO,CAAA;AAAA,QAC/C,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,QACpC,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAI,QAAA,CAAS;AAAA,OACf;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,YAAA,EAAe,IAAI,CAAA,QAAA,CAAA,EAAY,KAAK,CAAA;AACjD,MAAA,OAAO,EAAE,IAAA,EAAM,IAAS,MAAA,EAAQ,CAAA,EAAG,IAAI,KAAA,EAAM;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,CAAe,UAA6B,YAAA,EAAoB;AAC9D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,MAAA,OAAO,KAAK,IAAA,IAAQ,YAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA,IAAQ,YAAA;AAAA,EACjB;AACF,CAAA;;;AC1KO,IAAM,eAAA,GAAN,cAA8B,eAAA,CAAgB;AAAA,EACnD,YAAYA,OAAAA,EAAgB;AAC1B,IAAA,KAAA,CAAMA,OAAAA,EAAQ,uBAAuB,EAAI,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,eAAA,CACJ,SAAA,EACA,SAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,6EAA6E,SAAS,CAAA,CAAA;AAAA,OACxF;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,SAA6C,EAAC;AACpD,IAAA,IAAI,SAAA,SAAkB,SAAA,GAAY,SAAA;AAClC,IAAA,IAAI,OAAA,SAAgB,OAAA,GAAU,OAAA;AAE9B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,IAAI,CAAA,gBAAA,EAAmB,SAAS,IAAI,MAAM,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,cAAA,CACJ,QAAA,EACA,SAAA,EACA,OAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,4EAA4E,QAAQ,CAAA,CAAA;AAAA,OACtF;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,SAA6C,EAAC;AACpD,IAAA,IAAI,SAAA,SAAkB,SAAA,GAAY,SAAA;AAClC,IAAA,IAAI,OAAA,SAAgB,OAAA,GAAU,OAAA;AAE9B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,IAAI,CAAA,eAAA,EAAkB,QAAQ,IAAI,MAAM,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,WAAW,MAAA,EAYA;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,MAAM,kEAAkE,CAAA;AAC/E,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,UAA+B,EAAC;AAEtC,IAAA,IAAI,MAAA,CAAO,SAAA,EAAW,OAAA,CAAQ,SAAA,GAAY,MAAA,CAAO,SAAA;AACjD,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA;AAG7C,IAAA,MAAM,UAKD,EAAC;AAEN,IAAA,MAAM,aAAA,GAAoD;AAAA,MACxD,UAAU,MAAA,CAAO,OAAA;AAAA,MACjB,YAAY,MAAA,CAAO,SAAA;AAAA,MACnB,SAAS,MAAA,CAAO,MAAA;AAAA,MAChB,WAAW,MAAA,CAAO;AAAA,KACpB;AAEA,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC1D,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,KAAA;AAAA,UACA,QAAA,EAAU,QAAA;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,GAAU,OAAA;AAGlB,IAAA,MAAM,aAAkC,EAAC;AACzC,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,UAAA,CAAW,QAAQ,MAAA,CAAO,KAAA;AAC1D,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW,UAAA,CAAW,SAAS,MAAA,CAAO,MAAA;AAC5D,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,UAAA,CAAW,YAAY,MAAA,CAAO,SAAA;AAClE,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,EAAG;AACtC,MAAA,OAAA,CAAQ,UAAA,GAAa,UAAA;AAAA,IACvB;AAEA,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAC/D,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAE/D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,eAAe,OAAO,CAAA;AACvD,IAAA,OAAO,QAAA,CAAS,EAAA,GAAK,QAAA,CAAS,IAAA,GAAO,EAAC;AAAA,EACxC;AAAA,EAEA,MAAM,mBAAmB,MAAA,EAMR;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,CAAA,2EAAA,EAA8E,OAAO,OAAO,CAAA,CAAA;AAAA,OAC9F;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,cAA2D,EAAC;AAClE,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW,WAAA,CAAY,SAAS,MAAA,CAAO,MAAA;AAC7D,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,WAAA,CAAY,YAAY,MAAA,CAAO,SAAA;AACnE,IAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,WAAA,CAAY,QAAQ,MAAA,CAAO,KAAA;AAC3D,IAAA,IAAI,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW,WAAA,CAAY,WAAW,MAAA,CAAO,QAAA;AAEjE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA;AAAA,MAC1B,CAAA,YAAA,EAAe,OAAO,OAAO,CAAA,MAAA,CAAA;AAAA,MAC7B;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,EAAA,GAAK,QAAA,CAAS,IAAA,GAAO,EAAC;AAAA,EACxC;AACF,CAAA;;;AC/HO,IAAM,QAAN,MAAY;AAAA,EAIjB,YAAYA,OAAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,eAAA,CAAgBA,OAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAA,CACJ,SAAA,EACA,SAAA,EACA,OAAA,EACkC;AAClC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAA,CAAO,MAAM,4DAA4D,CAAA;AACzE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,eAAA,CAAgB,SAAA,EAAW,WAAW,OAAO,CAAA;AAC9E,IAAA,MAAM,sBAAsB,MAAA,CAAO,UAAA;AACnC,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,mBAAA;AAAA,MACX,UAAA,EAAY,OAAO,UAAA,IAAc,CAAA;AAAA,MACjC,YAAA,EAAc,OAAO,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,OAAO,SAAA,IAAa;AAAA,KACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAA,CACJ,QAAA,EACA,SAAA,EACA,OAAA,EACiC;AACjC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,MAAM,0DAA0D,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,cAAA,CAAe,QAAA,EAAU,WAAW,OAAO,CAAA;AAC5E,IAAA,MAAM,qBAAqB,MAAA,CAAO,SAAA;AAClC,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAgB,OAAO,eAAA,IAAmB,EAAA;AAAA,MAC1C,UAAA,EAAY,OAAO,UAAA,IAAc,CAAA;AAAA,MACjC,YAAA,EAAc,OAAO,aAAA,IAAiB,CAAA;AAAA,MACtC,YAAA,EAAc,OAAO,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,OAAO,SAAA,IAAa;AAAA,KACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,MAAA,EAAsD;AACrE,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,OAAA,EAAS;AACxC,MAAA,MAAA,CAAO,MAAM,kEAAkE,CAAA;AAC/E,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW;AAAA,MAC1C,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,WAAW,MAAA,CAAO;AAAA,KACnB,CAAA;AAED,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,IAAQ,EAAC;AAClC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,IAAQ,EAAC;AACjC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,QAAA,IAAY,EAAC;AACxC,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AAEhD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,MAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,UAAA,GAAa,QAAA,CAAS,MAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,MAAM,SAAyB,KAAA,CAC5B,MAAA,CAAO,CAAC,IAAA,KAAc,QAAQ,OAAO,IAAA,KAAS,QAAQ,CAAA,CACtD,IAAI,CAAC,IAAA,KAAc,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAElD,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAmB,MAAA,EAAoD;AAC3E,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,MAAM,iDAAiD,CAAA;AAC9D,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,kBAAA,CAAmB;AAAA,MAClD,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AAED,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,IAAQ,EAAC;AAClC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,IAAQ,EAAC;AACjC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,QAAA,IAAY,EAAC;AACxC,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AAEhD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACvC,MAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,UAAA,GAAa,QAAA,CAAS,MAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,MAAM,QAAqB,KAAA,CACxB,MAAA,CAAO,CAAC,IAAA,KAAc,QAAQ,OAAO,IAAA,KAAS,QAAQ,CAAA,CACtD,IAAI,CAAC,IAAA,KAAc,IAAA,CAAK,cAAA,CAAe,IAAI,CAAC,CAAA;AAE/C,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WACL,MAAA,EAC6C;AAC7C,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,OAAA,EAAS;AACxC,MAAA,MAAA,CAAO,MAAM,qEAAqE,CAAA;AAClF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAgB,MAAA,CAAO,MAAA;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,UAAA,CAAW;AAAA,QACjC,GAAG,MAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAWC,OAAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,QAAA,MAAMA,OAAAA;AAAA,MACR;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,CAAC,KAAK,UAAA,EAAY;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,aAAA,GAAgB,IAAA,CAAK,UAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,mBACL,MAAA,EAC0C;AAC1C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,MAAM,oDAAoD,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAgB,MAAA,CAAO,MAAA;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB;AAAA,QACzC,GAAG,MAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAWC,KAAAA,IAAQ,KAAK,KAAA,EAAO;AAC7B,QAAA,MAAMA,KAAAA;AAAA,MACR;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,CAAC,KAAK,UAAA,EAAY;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,aAAA,GAAgB,IAAA,CAAK,UAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEQ,kBAAkB,IAAA,EAAyB;AACjD,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,MACf,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,MACnB,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,MACnB,SAAA,EAAW,KAAK,UAAA,IAAc,CAAA;AAAA,MAC9B,SAAA,EAAW,KAAK,UAAA,IAAc,EAAA;AAAA,MAC9B,OAAA,EAAS,KAAK,QAAA,IAAY,EAAA;AAAA,MAC1B,MAAA,EAAQ,KAAK,MAAA,IAAU,EAAA;AAAA,MACvB,cAAA,EAAgB,KAAK,eAAA,IAAmB,EAAA;AAAA,MACxC,SAAA,EAAW,KAAK,UAAA,IAAc,EAAA;AAAA,MAC9B,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,kBAAkB,IAAA,CAAK,iBAAA;AAAA,MACvB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,kBAAkB,IAAA,CAAK,kBAAA;AAAA,MACvB,sBAAsB,IAAA,CAAK,sBAAA;AAAA,MAC3B,kBAAkB,IAAA,CAAK,kBAAA;AAAA,MACvB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA,EAEQ,eAAe,IAAA,EAAsB;AAC3C,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,MACf,OAAA,EAAS,KAAK,QAAA,IAAY,EAAA;AAAA,MAC1B,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,MACnB,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,MACnB,cAAc,IAAA,CAAK,cAAA;AAAA,MACnB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,aAAa,IAAA,CAAK,aAAA;AAAA,MAClB,WAAW,IAAA,CAAK,WAAA;AAAA,MAChB,cAAA,EAAgB,KAAK,eAAA,IAAmB,EAAA;AAAA,MACxC,SAAA,EAAW,KAAK,UAAA,IAAc,EAAA;AAAA,MAC9B,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,kBAAkB,IAAA,CAAK,iBAAA;AAAA,MACvB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,kBAAkB,IAAA,CAAK,kBAAA;AAAA,MACvB,sBAAsB,IAAA,CAAK,sBAAA;AAAA,MAC3B,kBAAkB,IAAA,CAAK,kBAAA;AAAA,MACvB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,YAAY,IAAA,CAAK,WAAA;AAAA,MACjB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,kBAAkB,IAAA,CAAK,iBAAA;AAAA,MACvB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,SAAA,EAAW,KAAK,UAAA,IAAc,EAAA;AAAA,MAC9B,MAAA,EAAQ,KAAK,MAAA,IAAU;AAAA,KACzB;AAAA,EACF;AACF;;;ACjWO,IAAM,WAAA,GAAc,OAAA;;;ACuBpB,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AAML,EAAAA,kBAAA,KAAA,CAAA,GAAM,SAAA;AAGN,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,kBAAA,sBAAA,CAAA,GAAuB,cAAA;AACvB,EAAAA,kBAAA,SAAA,CAAA,GAAU,YAAA;AACV,EAAAA,kBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,kBAAA,WAAA,CAAA,GAAY,UAAA;AACZ,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AAGZ,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,kBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,kBAAA,eAAA,CAAA,GAAgB,eAAA;AAGhB,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AAGX,EAAAA,kBAAA,MAAA,CAAA,GAAO,MAAA;AAGP,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AAGV,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AApCA,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AA2CL,IAAM,4BAAA,uBAA0D,GAAA,CAAI;AAAA;AAAA,EAEzE,QAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAEA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AACF,CAAC;AAMM,IAAM,mBAAA,uBAAiD,GAAA,CAAI;AAAA,EAChE,GAAG,4BAAA;AAAA;AAAA,EAEH,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,SAAA;AACF,CAAC;AAEM,IAAM,SAAN,MAAa;AAAA,EA4BlB,WAAA,CAAYH,OAAAA,GAAsB,EAAC,EAAG;AACpC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,WAAA,CAAYA,OAAAA,CAAO,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,gBAAA,EAAiB;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,GAAA,CAAI,aAAA;AAC1B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,aAAA,CAAcA,OAAAA,CAAO,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,cAAA;AAAA,MACvBA,OAAAA,CAAO,YAAA;AAAA,MACP,qBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,cAAA;AAAA,MACvBA,OAAAA,CAAO,YAAA;AAAA,MACP,qBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,cAAA;AAAA,MACpBA,OAAAA,CAAO,SAAA;AAAA,MACP,aAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA;AAAA,MACzBA,OAAAA,CAAO,cAAA;AAAA,MACP,wBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,cAAA;AAAA,MAC1BA,OAAAA,CAAO,eAAA;AAAA,MACP,wBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,WAAA,GAAcA,OAAAA,CAAO,WAAA,IAAe,OAAA,CAAQ,IAAI,SAAA,IAAa,OAAA;AAClE,IAAA,IAAA,CAAK,qBAAqB,IAAA,CAAK,sBAAA;AAAA,MAC7BA,OAAAA,CAAO;AAAA,KACT;AACA,IAAA,IAAA,CAAK,eAAeA,OAAAA,CAAO,YAAA;AAE3B,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAC1B,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA,EAEQ,YAAY,OAAA,EAA0B;AAC5C,IAAA,OACE,OAAA,IACA,QAAQ,GAAA,CAAI,cAAA,IACZ,QAAQ,GAAA,CAAI,iBAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,gBAAA,IACZ,qBAAA;AAAA,EAEJ;AAAA,EAEQ,gBAAA,GAAuC;AAC7C,IAAA,OACE,OAAA,CAAQ,GAAA,CAAI,mBAAA,IAAuB,OAAA,CAAQ,GAAA,CAAI,2BAAA;AAAA,EAEnD;AAAA,EAEQ,cACN,OAAA,EACwB;AACxB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,aAAA;AAC/B,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAO,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAAA,MACzC;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,iBAAiB,OAAA,EAAyC;AAChE,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,CAAC,GAAA,EAAK,GAAG,UAAU,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC3C,MAAA,IAAI,GAAA,IAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,QAAA,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,GAAI,WAAW,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AAAA,MACjD;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IACE,IAAA,CAAK,YAAA,IACL,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY,CAAE,QAAA,CAAS,UAAU,CAAA,IACnD,CAAC,IAAA,CAAK,MAAA,EACN;AACA,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,KAAK,YAAA,EAAc;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY,CAAE,SAAS,UAAU,CAAA;AACnE,IAAA,MAAM,OAAA,GAAU,UAAU,WAAA,GAAc,eAAA;AACxC,IAAA,MAAM,YAAY,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,CAAA,OAAA,EAAU,KAAK,MAAM,CAAA,CAAA;AAE/D,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,GAAI,SAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,cAAA,CACN,KAAA,EACA,MAAA,EACA,YAAA,EACS;AACT,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,OAAO,CAAC,GAAA,EAAK,MAAM,EAAE,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA;AAAA,EACtD;AAAA,EAEQ,uBACN,kBAAA,EACqB;AACrB,IAAA,IAAI,uBAAuB,MAAA,EAAW;AACpC,MAAA,OAAO,kBAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,oBAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IACzB,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,sCAAA,EAAyC,CAAC,CAAA,CAAE,CAAA;AACxD,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,mBAAA,GAA4B;AAClC,IAAA,OAAA,CAAQ,GAAA,CAAI,uBAAA,GAA0B,IAAA,CAAK,YAAA,GAAe,MAAA,GAAS,OAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,GAA0B;AAC/B,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,IAAA,EAAK;AAGnC,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,GAAA;AAGxD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,EAAG;AACpC,MAAA,OAAO,GAAG,QAAQ,CAAA,UAAA,CAAA;AAAA,IACpB;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,eAAA,GAAwB;AAE7B,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,CAAC,OAAA,CAAQ,IAAI,kBAAA,EAAoB;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,qBAAqB,IAAA,CAAK,YAAA;AAAA,IACxC;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAC,OAAA,CAAQ,IAAI,iBAAA,EAAmB;AACjD,MAAA,OAAA,CAAQ,GAAA,CAAI,oBAAoB,IAAA,CAAK,MAAA;AAAA,IACvC;AAGA,IAAA,IACE,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,IACnC,CAAC,OAAA,CAAQ,GAAA,CAAI,iBAAA,EACb;AACA,MAAA,MAAM,YAAY,MAAA,CAAO,OAAA,CAAQ,KAAK,OAAO,CAAA,CAC1C,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAC3B,KAAK,GAAG,CAAA;AACX,MAAA,OAAA,CAAQ,IAAI,iBAAA,GAAoB,SAAA;AAAA,IAClC;AAIA,IAAA,IAAA,CAAK,yBAAA,EAA0B;AAAA,EACjC;AAAA,EAEQ,yBAAA,GAAkC;AAExC,IAAA,MAAM,KAAA,GAAgC;AAAA,MACpC,0BAA0B,IAAA,CAAK,WAAA;AAAA,MAC/B,gBAAgB,IAAA,CAAK;AAAA,KACvB;AAGA,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA,EAAG;AAC5D,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAAA,IACrB;AAGA,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,wBAAA;AAC7B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AACtC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,QAAA,IAAI,SAAS,CAAA,EAAG;AAChB,QAAA,MAAM,GAAA,GAAM,mBAAmB,IAAA,CAAK,KAAA,CAAM,GAAG,KAAK,CAAA,CAAE,MAAM,CAAA;AAC1D,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,KAAA,CAAM,GAAG,IAAI,kBAAA,CAAmB,IAAA,CAAK,MAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAc,kBAAA,CAAmB,CAAC,CAAA;AAE3D,IAAA,OAAA,CAAQ,GAAA,CAAI,2BAA2B,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CACxD,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA,EAAG,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAE,CAAA,CAC7D,IAAA,CAAK,GAAG,CAAA;AAAA,EACb;AACF;AA1Qa,MAAA,CACK,QAAA,GAAW,OAAA;AADhB,MAAA,CAEK,YAAA,GAAe,OAAA;AAFpB,MAAA,CAGK,eAAA,GAAkB,WAAA;AAHvB,MAAA,CAIK,4BAAA,GAA+B,GAAA;AAAA;AAJpC,MAAA,CAKK,iBAAA,GAAoB,QAAA;AAAA,EAClC,OAAA,CAAQ,IAAI,uBAAA,IAA2B;AACzC,CAAA;AAPW,MAAA,CAQK,oBAAA,GAAuB,QAAA;AAAA,EACrC,OAAA,CAAQ,IAAI,kCAAA,IAAsC;AACpD,CAAA;AAVW,MAAA,CAWK,uBAAA,GAA0B,QAAA;AAAA,EACxC,OAAA,CAAQ,IAAI,6BAAA,IAAiC;AAC/C,CAAA;;;AC1FK,SAAS,gBAAgB,QAAA,EAAsC;AACpE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,CAAC,CAAA,EAAG;AAER,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA,MAAA,IAAW,EAAE,UAAA,CAAW,GAAG,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/C,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC3B,MAAA,IAAI,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAC9B,CAAA,MAAA,IAAW,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,MAAMI,QAAAA,GAAU,CAAC,QAAA,IAAY,KAAA,CAAM,IAAA,KAAS,CAAA,IAAK,QAAA,CAAS,MAAA,KAAW,CAAA,IACnE,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,SAAS,MAAA,KAAW,CAAA;AAE/C,EAAA,OAAO,EAAE,QAAA,EAAU,KAAA,EAAO,UAAU,QAAA,EAAU,QAAA,EAAU,SAAAA,QAAAA,EAAQ;AAClE;AAKO,SAAS,iBAAA,CACd,MACA,QAAA,EACS;AACT,EAAA,IAAI,QAAA,CAAS,UAAU,OAAO,IAAA;AAC9B,EAAA,IAAI,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,IAAI,GAAG,OAAO,IAAA;AAErC,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,QAAA,EAAU;AACpC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG,OAAO,IAAA;AAAA,EACpC;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,SAAS,QAAA,EAAU;AACnC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAAA,EACjC;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,SAAS,QAAA,EAAU;AACnC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAAA,EACjC;AAEA,EAAA,OAAO,KAAA;AACT;;;AC9DO,IAAM,+BAAA,GAAkC,2BAAA;AACxC,IAAM,4BAAA,GAA+B,2BAAA;AAE5C,SAAS,eAAe,GAAA,EAA8B;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,QAAQ,CAAA,EAAG;AACvE,MAAA,OAAO,MAAA,CAAO,OAAO,OAAO,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACT;AAUO,SAAS,qBAAA,CACd,UACA,EAAA,EACgB;AAChB,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AACxC,EAAA,MAAM,SAAA,GAAYC,QAAY,MAAA,EAAO;AAErC,EAAA,MAAM,OAAA,GACJC,WAAAA,CAAY,UAAA,CAAW,SAAS,CAAA,IAChCA,YAAY,UAAA,CAAW,YAAY,CAAA,IACnCA,WAAAA,CAAY,aAAA,EAAc;AAE5B,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,+BAA+B,CAAA,EAAG,KAAA;AACvE,EAAA,MAAM,mBAAmB,WAAA,GAAe,cAAA,CAAe,WAAW,CAAA,IAAK,KAAM,EAAC;AAC9E,EAAA,MAAM,MAAA,GAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,gBAAA,EAAkB,GAAG,QAAQ,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAErC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,+BAAA,EAAiC;AAAA,IACpE,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,OAAA,GAAUA,WAAAA,CAAY,UAAA,CAAW,SAAA,EAAW,WAAW,CAAA;AAC7D,EAAA,OAAOD,OAAA,CAAY,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AACrC;AAEO,IAAM,4BAAA,GAAN,MAAM,4BAAA,CAAqD;AAAA,EA8BhE,WAAA,CAAY,cAAA,GAA2B,EAAC,EAAG;AAZ3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAiB,iBAAA,uBAAwB,GAAA,EAAqC;AAS9E;AAAA,IAAA,IAAA,CAAiB,iBAAA,uBAAwB,GAAA,EAA8B;AAIrE,IAAA,IAAA,CAAK,cAAA,GAAiB,gBAAgB,cAAc,CAAA;AAAA,EACtD;AAAA,EAZA,IAAI,gBAAA,GAAiE;AACnE,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAYA,OAAA,CAAQH,OAAY,aAAA,EAA8B;AAChD,IAAA,IAAI;AAIF,MAAA,MAAM,OAAQA,KAAAA,CAAa,IAAA;AAC3B,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,IAAI,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,cAAc,CAAA,EAAG;AAChD,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AAEA,MAAA,MAAM,GAAA,GAAMI,WAAAA,CAAY,UAAA,CAAW,aAAa,CAAA;AAChD,MAAA,MAAM,GAAA,GAAM,GAAA,EAAK,QAAA,CAAS,+BAA+B,CAAA,EAAG,KAAA;AAE5D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,QAAA,GAAW,eAAe,GAAG,CAAA;AACnC,QAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,UAAAJ,KAAAA,CAAK,YAAA,CAAa,4BAAA,EAA8B,QAAQ,CAAA;AAExD,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,wBAAA,CAAyB,GAAA,EAAK,QAAQ,CAAA;AAC5D,UAAA,IAAI,iBAAA,CAAkB,IAAA,EAAM,QAAQ,CAAA,EAAG;AACrC,YAAAA,KAAAA,CAAK,YAAA,CAAa,qBAAA,EAAuB,IAAI,CAAA;AAC7C,YAAA,OAAA,GAAU,IAAA;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,WAAA,EAAY,CAAE,MAAA;AAClC,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA;AAC9C,QAAA,MAAM,iBAAA,GAAoB,YAAY,WAAA,EAAY;AAClD,QAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,iBAAiB,CAAA;AACpD,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,8CAA8C,CAAC,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,EAA2B;AAAA,EAIjC;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,wBAAA,CAAyB,UAAkB,QAAA,EAAsC;AACvF,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACnC,MAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAC7C,MAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,IAAA,GAAO,4BAAA,CAA4B,uBAAA,EAAyB;AACrF,QAAA,MAAM,QAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACnD,QAAA,IAAI,KAAA,EAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,IAAA,IAAQ,4BAAA,CAA4B,WAAA,EAAa;AAC1E,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,MACpB,IAAA,CAAK,iBAAA,CAAkB,IAAA,GAAO,4BAAA,CAA4B,WAAA;AAAA,MAC1D,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA4B,WAAA,GAAc,IAAI;AAAA,KAC1D;AACA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACxE,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,iBAAA,CAAkB,OAAO,GAAG,CAAA;AAAA,IACnC;AAAA,EACF;AACF,CAAA;AAvHa,4BAAA,CACa,WAAA,GAAc,GAAA;AAD3B,4BAAA,CA4Ba,uBAAA,GAA0B,EAAA;AA5B7C,IAAM,2BAAA,GAAN,4BAAA;ACpDA,IAAM,kBAAA,GAAN,MAAM,kBAAA,CAA2C;AAAA,EAGtD,OAAO,qBAAqB,OAAA,EAAmC;AAC7D,IAAA,OAAO,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAAA,EACjD;AAAA,EAEA,OAAO,YAAYA,KAAAA,EAA8B;AAC/C,IAAA,MAAM,GAAA,GAAMA,MAAK,WAAA,EAAY;AAC7B,IAAA,IAAI,CAAC,GAAA,IAAO,CAACD,MAAM,kBAAA,CAAmB,GAAG,GAAG,OAAO,MAAA;AACnD,IAAA,OAAO,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA;AAAA,EACrD;AAAA,EAEA,OAAO,kBAAA,CAAmB,OAAA,EAAiB,MAAA,EAAyB;AAClE,IAAA,MAAM,IAAA,GAAO,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AACrD,IAAA,OAAO,IAAA,EAAM,WAAA,EAAY,CAAE,MAAA,KAAW,MAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,sBAAA,CAAuB,GAAA,EAAa,KAAA,EAAqB;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAASA,MAAM,aAAA,EAAc;AACnC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,CAAO,KAAK,CAAA,sCAAA,CAAwC,CAAA;AACpD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,OAAO,WAAA,EAAY;AACnC,MAAA,IAAI,CAACA,KAAAA,CAAM,kBAAA,CAAmB,OAAO,CAAA,EAAG;AACtC,QAAA,MAAA,CAAO,KAAK,CAAA,sDAAA,CAAwD,CAAA;AACpE,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,QAAQ,OAAO,CAAA;AAC7D,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAA,CAAO,KAAK,CAAA,4DAAA,CAA8D,CAAA;AAC1E,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAC9B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,GAAG,CAAA,EAAA,CAAA,EAAM,CAAC,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,OAAA,CAAQC,OAAY,aAAA,EAA8B;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAMA,MAAK,WAAA,EAAY;AAC7B,MAAA,IAAI,CAAC,GAAA,IAAO,CAACD,KAAAA,CAAM,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAC5C,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,aAAa,CAAA,EAAG;AAEtC,MAAA,IAAI,CAAC,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA,EAAG;AAClD,QAAA,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAA,EAASC,KAAI,CAAA;AAAA,MACpD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,gDAAgD,CAAC,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAMA,KAAAA,EAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAMA,MAAK,WAAA,EAAY;AAC7B,MAAA,IAAI,CAAC,GAAA,IAAO,CAACD,KAAAA,CAAM,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAC5C,MAAA,MAAM,IAAA,GAAO,kBAAA,CAAkB,UAAA,CAAW,GAAA,CAAI,IAAI,OAAO,CAAA;AACzD,MAAA,IAAI,IAAA,EAAM,WAAA,EAAY,CAAE,MAAA,KAAW,IAAI,MAAA,EAAQ;AAC7C,QAAA,kBAAA,CAAkB,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AAAA,MACjD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,8CAA8C,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,kBAAA,CAAkB,WAAW,KAAA,EAAM;AACnC,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,YAAY,aAAA,EAA6C;AAC/D,IAAA,MAAM,UAAA,GAAa,aAAA,GAAgBA,KAAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GAAI,MAAA;AAClE,IAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AACxB,IAAA,MAAM,SAAA,GAAY,WAAW,WAAA,EAAY;AACzC,IAAA,OAAO,CAAC,SAAA,IAAa,CAACA,KAAAA,CAAM,mBAAmB,SAAS,CAAA;AAAA,EAC1D;AACF,CAAA;AAvFa,kBAAA,CACa,UAAA,uBAAiB,GAAA,EAAkB;AADtD,IAAM,iBAAA,GAAN,kBAAA;;;ACLA,IAAK,QAAA,qBAAAM,SAAAA,KAAL;AACL,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AAPF,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAUL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,kBAAA,QAAA,CAAA,GAAS,QAAA;AAFC,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;;AChBZ,IAAM,QAAA,GAAW,KAAA;AAEjB,SAAS,QAAA,CAAS,GAAW,SAAA,EAA2B;AACtD,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,SAAA,EAAW,OAAO,CAAA;AAClC,EAAA,IAAI,aAAa,QAAA,CAAS,MAAA,SAAe,CAAA,CAAE,KAAA,CAAM,GAAG,SAAS,CAAA;AAC7D,EAAA,OAAO,EAAE,KAAA,CAAM,CAAA,EAAG,SAAA,GAAY,QAAA,CAAS,MAAM,CAAA,GAAI,QAAA;AACnD;AAWO,SAAS,aAAA,CACd,OACA,SAAA,EACQ;AACR,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,SAAA,IAAa,KAAA,CAAM,MAAA,GAAS,SAAA,EAAW;AACzC,MAAA,OAAO,QAAA,CAAS,OAAO,SAAS,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,uBAAW,OAAA,EAAgB;AACjC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,MAAM,GAAA,KAAQ;AAC5C,MAAA,IAAI,OAAO,GAAA,KAAQ,UAAA;AACjB,QAAA,OAAO,CAAA,WAAA,EAAc,GAAA,CAAI,IAAA,IAAQ,WAAW,CAAA,CAAA,CAAA;AAC9C,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAI,QAAA,EAAS;AACjD,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAI,QAAA,EAAS;AACjD,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,YAAA;AAC1B,QAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,QAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAa,IAAA;AAC9B,QAAA,IACE,IAAA,IACA,IAAA,KAAS,QAAA,IACT,IAAA,KAAS,OAAA,IACT,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,EAAA,EAC1B;AACA,UAAA,OAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AAAA,QACjB;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAC,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EACpB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,GACG,KAAA,EAAe,aAAa,IAAA,GACzB,CAAA,CAAA,EAAK,MAAc,WAAA,CAAY,IAAI,CAAA,CAAA,CAAA,GACnC,MAAA,CAAO,KAAK,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,SAAA,IAAa,MAAA,CAAO,MAAA,GAAS,SAAA,EAAW;AAC1C,IAAA,OAAO,QAAA,CAAS,QAAQ,SAAS,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,cAAA,CACd,OACA,SAAA,EACQ;AACR,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAC9D,EAAA,MAAM,IAAI,OAAO,KAAA;AACjB,EAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,QAAA,IAAY,MAAM,SAAA,EAAW;AACvD,IAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,IAAA,IAAI,aAAa,CAAA,CAAE,MAAA,GAAS,WAAW,OAAO,QAAA,CAAS,GAAG,SAAS,CAAA;AACnE,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA,CAAc,OAAO,SAAS,CAAA;AACvC;;;AC7DA,IAAM,WAAA,GAAc,uBAAA;AAcpB,IAAM,aAAA,GAAgB,IAAI,iBAAA,EAAiC;AAG3D,IAAM,qBAAA,GAAuC;AAAA,EAC3C,eAAe,EAAC;AAAA,EAChB,WAAW,EAAC;AAAA,EACZ,YAAY,EAAC;AAAA,EACb,WAAW,EAAC;AAAA,EACZ,WAAA,sBAAiB,GAAA;AACnB,CAAA;AAEA,SAAS,gBAAA,GAAkC;AACzC,EAAA,OAAO,aAAA,CAAc,UAAS,IAAK,qBAAA;AACrC;AAoBO,IAAM,cAAA,GAAN,MAAM,eAAA,CAAe;AAAA;AAAA,EAI1B,OAAO,YAAA,CAAa,IAAA,EAAcN,KAAAA,EAAkB;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,MAAA,MAAM,QAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAI,KAAK,EAAC;AAC5C,MAAA,KAAA,CAAM,KAAKA,KAAI,CAAA;AACf,MAAA,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,EAAA,CAAA,EAAM,CAAC,CAAA;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,OAAO,cAAA,CAAe,IAAA,EAAcA,KAAAA,EAAkB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACtC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC1C,QAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAMA,KAAAA,EAAM;AACrB,UAAA,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACjB,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,GAAA,CAAI,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,IACrD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,IAAI,CAAA,EAAA,CAAA,EAAM,CAAC,CAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,IAAA,EAAgC;AACnD,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,OAAO,OAAO,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AAAA,EACnD;AAAA;AAAA,EAIA,OAAO,UAAA,CAAW,UAAA,EAAoB,UAAA,EAA0B;AAC9D,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,UAAA;AAAY,QAAA,GAAA,CAAI,aAAA,CAAc,KAAK,UAAU,CAAA;AAAG,QAAA;AAAA,MACrD,KAAK,MAAA;AAAY,QAAA,GAAA,CAAI,SAAA,CAAU,KAAK,UAAU,CAAA;AAAO,QAAA;AAAA,MACrD,KAAK,OAAA;AAAY,QAAA,GAAA,CAAI,UAAA,CAAW,KAAK,UAAU,CAAA;AAAM,QAAA;AAAA,MACrD,KAAK,MAAA;AAAY,QAAA,GAAA,CAAI,SAAA,CAAU,KAAK,UAAU,CAAA;AAAO,QAAA;AAAA;AACvD,EACF;AAAA,EAEA,OAAO,UAAU,UAAA,EAAwC;AACvD,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,UAAA;AAAY,QAAA,OAAO,GAAA,CAAI,cAAc,GAAA,EAAI;AAAA,MAC9C,KAAK,MAAA;AAAY,QAAA,OAAO,GAAA,CAAI,UAAU,GAAA,EAAI;AAAA,MAC1C,KAAK,OAAA;AAAY,QAAA,OAAO,GAAA,CAAI,WAAW,GAAA,EAAI;AAAA,MAC3C,KAAK,MAAA;AAAY,QAAA,OAAO,GAAA,CAAI,UAAU,GAAA,EAAI;AAAA,MAC1C;AAAiB,QAAA,OAAO,MAAA;AAAA;AAC1B,EACF;AAAA,EAEA,OAAO,0BAAA,GAAqD;AAC1D,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,MAAM,QAAgC,EAAC;AACvC,IAAA,MAAM,OAAO,CAAI,GAAA,KAAa,GAAA,CAAI,GAAA,CAAI,SAAS,CAAC,CAAA;AAChD,IAAA,IAAI,GAAA,CAAI,aAAA,CAAc,MAAA,EAAQ,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,cAAA,CAAgB,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA;AACpG,IAAA,IAAI,GAAA,CAAI,SAAA,CAAU,MAAA,EAAY,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,UAAA,CAAY,CAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAChG,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,EAAW,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,WAAA,CAAa,CAAA,GAAO,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AACjG,IAAA,IAAI,GAAA,CAAI,SAAA,CAAU,MAAA,EAAY,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,UAAA,CAAY,CAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAChG,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,OAAO,iBAAA,GAA0B;AAC/B,IAAA,MAAM,MAAM,gBAAA,EAAiB;AAC7B,IAAA,GAAA,CAAI,gBAAgB,EAAC;AACrB,IAAA,GAAA,CAAI,YAAgB,EAAC;AACrB,IAAA,GAAA,CAAI,aAAgB,EAAC;AACrB,IAAA,GAAA,CAAI,YAAgB,EAAC;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAA,GAAiC;AACtC,IAAA,MAAM,GAAA,GAAMD,KAAAA,CAAM,aAAA,EAAc,EAAG,WAAA,EAAY;AAC/C,IAAA,OAAO,OAAOA,KAAAA,CAAM,kBAAA,CAAmB,GAAG,CAAA,GAAI,IAAI,OAAA,GAAU,MAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,wBAAA,CAAyB,GAAA,EAAa,KAAA,EAAkB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAMC,KAAAA,GAAOD,MAAM,aAAA,EAAc;AACjC,MAAA,IAAIC,KAAAA,EAAM,aAAY,EAAG;AACvB,QAAAA,KAAAA,CAAK,YAAA,CAAa,GAAA,EAAK,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAClF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,qDAAA,EAAwD,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5E;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAG,CAAA,iBAAA,CAAA,EAAqB,CAAC,CAAA;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,SAAS,KAAA,EAAkB;AAChC,IAAA,IAAI;AACF,MAAA,eAAA,CAAe,wBAAA;AAAA,QACb,kBAAA;AAAA,QACA,cAAA,CAAe,KAAA,EAAO,MAAA,CAAO,iBAAiB;AAAA,OAChD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,oBAAoB,CAAC,CAAA;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,UAAU,KAAA,EAAkB;AACjC,IAAA,IAAI;AACF,MAAA,eAAA,CAAe,wBAAA;AAAA,QACb,mBAAA;AAAA,QACA,cAAA,CAAe,KAAA,EAAO,MAAA,CAAO,iBAAiB;AAAA,OAChD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,qBAAqB,CAAC,CAAA;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,aAAa,KAAA,EAAkB;AACpC,IAAA,IAAI;AACF,MAAA,iBAAA,CAAkB,sBAAA;AAAA,QAChB,kBAAA;AAAA,QACA,cAAA,CAAe,KAAA,EAAO,MAAA,CAAO,iBAAiB;AAAA,OAChD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,wBAAwB,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,KAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,iBAAA,CAAkB,sBAAA;AAAA,QAChB,mBAAA;AAAA,QACA,cAAA,CAAe,KAAA,EAAO,MAAA,CAAO,iBAAiB;AAAA,OAChD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,yBAAyB,CAAC,CAAA;AAAA,IACzC;AAAA,EACF;AAAA;AAAA,EAIA,OAAO,cAAA,CAAe,IAAA,EAAc,UAAA,EAAuC;AACzE,IAAA,IAAI;AACF,MAAA,MAAMA,KAAAA,GAAOD,MAAM,aAAA,EAAc;AACjC,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,IAAIC,KAAAA,EAAM,aAAY,EAAG;AACvB,QAAAA,KAAAA,CAAK,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,SAAS,CAAA;AAAA,MAC3C,CAAA,MAAO;AAEL,QAAAD,KAAAA,CAAM,SAAA,CAAU,WAAW,CAAA,CAAE,eAAA;AAAA,UAC3B,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,UAC9B,EAAE,UAAA,EAAW;AAAA,UACbQ,QAAQ,MAAA,EAAO;AAAA,UACf,CAAC,OAAA,KAAkB;AACjB,YAAA,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,SAAS,CAAA;AAC5C,YAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,IAAI,CAAA,SAAA,CAAA,EAAa,CAAC,CAAA;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,eAAA,CACL,gBAAA,EACA,IAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,MAAA,MAAA,CAAO,MAAM,oDAAoD,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAMP,KAAAA,GAAOD,MAAM,aAAA,EAAc;AACjC,MAAA,IAAI,CAACC,KAAAA,EAAM,WAAA,EAAY,EAAG;AACxB,QAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AACvD,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,WAKC,EAAC;AACN,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAOA,KAAAA,CAAa,WAAA,GAAc,cAAc,CAAA;AACtD,QAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,QAAA,GAAW,MAAA;AAAA,QACxC;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,2EAA2E,CAAC,CAAA;AAAA,MAC1F;AAEA,MAAA,MAAM,SAAS,MAAA,CAAO,oBAAA;AACtB,MAAA,MAAM,gBAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GAAW,QAAQ,SAAA,CAAU,CAAA,EAAG,MAAM,CAAA,GAAI,OAAA;AAE/D,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,IAAA,EAAM,gBAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAA,EAAS,gBAAA;AAAA,QACT,MAAA,EAAQ,OAAO,gBAAA,KAAqB,QAAA,GAAW,MAAA,GAAS;AAAA,OACzD,CAAA;AAED,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAGvC,MAAA,MAAM,gBAAiBA,KAAAA,CAAa,WAAA;AACpC,MAAA,IAAI,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,EAAU;AACtD,QAAA,aAAA,CAAc,cAAc,CAAA,GAAI,OAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AAAA,MAC3C;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,2BAA2B,CAAC,CAAA;AAAA,IAC3C;AAAA,EACF;AACF,CAAA;;;ACxTO,IAAM,cAAN,MAAkB;AAAA,EAavB,WAAA,CACE,MACA,UAAA,GAA6B,IAC7B,UAAA,GAAqB,WAAA,EACrB,MAAA,GAAA,MAAA,aACA,MAAA,EACA,mBAAA,EACA;AAdF,IAAA,IAAA,CAAQ,MAAA,GAAiB,SAAA;AAevB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,UAAA,EAAW;AAClC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAiB,CAAA,GAAI,MAAA;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,mBAAA,GAAsB,mBAAA;AAAA,EAC7B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAE1B,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,IAAUD,KAAAA,CAAM,SAAA,CAAU,KAAK,UAAU,CAAA;AAE7D,IAAA,IAAI,GAAA,GAAMQ,QAAQ,MAAA,EAAO;AAEzB,IAAA,IAAI,IAAA,CAAK,mBAAA,IAAuB,IAAA,CAAK,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACnE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,OAAO,CAAA;AACxD,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,MAAM,kBACJH,WAAAA,CAAY,UAAA,CAAW,GAAG,CAAA,IAAKA,YAAY,aAAA,EAAc;AAC3D,QAAA,MAAM,cAAc,eAAA,CAAgB,QAAA;AAAA,UAClC;AAAA,SACF,EAAG,KAAA;AACH,QAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,qBAAA,CAAsB,WAAW,CAAA;AAC/D,QAAA,MAAM,MAAA,GAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,gBAAA,EAAkB,GAAG,QAAQ,CAAC,CAAC,CAAA;AAC9D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACrC,QAAA,MAAM,iBAAiB,eAAA,CAAgB,QAAA;AAAA,UACrC,+BAAA;AAAA,UACA,EAAE,OAAO,OAAA;AAAQ,SACnB;AACA,QAAA,GAAA,GAAMA,WAAAA,CAAY,UAAA,CAAW,GAAA,EAAK,cAAc,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,SAAA;AAAA,MACjB,IAAA,CAAK,IAAA;AAAA,MACL;AAAA,QACE,MAAM,QAAA,CAAS,MAAA;AAAA,QACf,UAAA,EAAY;AAAA,UACV,GAAG,IAAA,CAAK,UAAA;AAAA,UACR,mBAAmB,IAAA,CAAK;AAAA;AAC1B,OACF;AAAA,MACA;AAAA,KACF;AAIA,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,aAAA,GAAgBL,KAAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,KAAK,IAAI,CAAA;AACjD,MAAA,cAAA,CAAe,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,GAAA,GAAY;AACV,IAAA,IAAA,CAAK,OAAA,GAAU,KAAK,GAAA,EAAI;AACxB,IAAA,MAAM,UAAA,GACJ,KAAK,SAAA,IAAa,IAAA,CAAK,WAClB,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,GAAA,GAClC,MAAA;AAEN,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAG,OAAO,YAAY,CAAA,YAAA,CAAA;AAAA,QACtB,UAAA,CAAW,QAAQ,CAAC;AAAA,OACtB;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,MAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MACjD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,aAAa,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,OAAA,CAAA,EAAW,KAAK,MAAM,CAAA;AAE9D,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AAC1D,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,KAAK,CAAA;AAAA,QACnC;AAAA,MACF;AAEA,MAAA,cAAA,CAAe,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AAClD,MAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,IAChB;AAGA,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAErB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CAAa,KAAa,KAAA,EAA0C;AAClE,IAAA,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA;AACvB,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,KAAK,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAc,EAAA,EAAgB;AAC5B,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,EAAA,EAAG;AAE1B,IAAA,MAAM,GAAA,GACJ,KAAK,aAAA,IAAiBA,KAAAA,CAAM,QAAQQ,OAAAA,CAAQ,MAAA,EAAO,EAAG,IAAA,CAAK,IAAI,CAAA;AACjE,IAAA,OAAOA,OAAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,EAAE,CAAA;AAAA,EAC7B;AAAA,EAEA,UAAU,MAAA,EAAsB;AAC9B,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,WAAW,MAAM,CAAA;AAAA,EAClE;AAAA,EAEA,kBAAkB,cAAA,EAA8B;AAC9C,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,MACV,CAAA,EAAG,OAAO,YAAY,CAAA,gBAAA,CAAA;AAAA,MACtB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,SAAS,KAAA,EAA2B;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACtC,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,UAAU,SAAS,CAAA;AAAA,EACpE;AAAA,EAEA,UAAU,MAAA,EAA6B;AACrC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACxC,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,WAAW,UAAU,CAAA;AAAA,EACtE;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC5B,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,UAAU,KAAK,CAAA;AAAA,EAChE;AAAA,EAEA,aAAa,MAAA,EAAsB;AACjC,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,eAAe,MAAM,CAAA;AAAA,EACtE;AAAA,EAEA,SAAS,YAAA,EAA4B;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU;AAAA,QAClB,MAAM,cAAA,CAAe,KAAA;AAAA,QACrB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,MACV,CAAA,EAAG,OAAO,YAAY,CAAA,cAAA,CAAA;AAAA,MACtB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAA,CAAS,MAAc,UAAA,EAA2C;AAChE,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEQ,sBAAsB,GAAA,EAAmC;AAC/D,IAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,OAAO,OAAO,MAAA,CAAO,CAAC,MAAe,OAAO,CAAA,KAAM,YAAY,CAAC,CAAA;AAAA,MACjE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AACF,CAAA;;;AC9NO,IAAM,oBAAA,GAAN,cAAmC,eAAA,CAAgB;AAAA,EACxD,YAAYT,OAAAA,EAAgB;AAC1B,IAAA,KAAA,CAAMA,OAAAA,EAAQ,4BAA4B,EAAI,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,SAAA,EAAmC;AAClD,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,iFAAiF,SAAS,CAAA,CAAA;AAAA,OAC5F;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,GAAA,CAAI,CAAA,qBAAA,EAAwB,SAAS,CAAA,CAAE,CAAA;AACnE,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,EAAE,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACJ,IAAA,EACA,SAAA,EACA,gBAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,0FAA0F,SAAS,CAAA,CAAA;AAAA,OACrG;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA,EAAiB;AAAA,KACnB;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,yBAAyB,OAAO,CAAA;AAEjE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,OAAO,KAAK,WAAA,CAAY,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,IAAA,EAAc,IAAA,EAA+B;AAC/D,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA;AAAA,MACA,IAAA,EAAM,QAAQ;AAAC,KACjB;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,wBAAwB,OAAO,CAAA;AAEhE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,OAAO,KAAK,WAAA,CAAY,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,SAAA,EACA,WAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,uFAAuF,SAAS,CAAA,CAAA;AAAA,OAClG;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA;AAAA,MAC1B,wBAAwB,SAAS,CAAA,MAAA,CAAA;AAAA,MACjC;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,OAAO,KAAK,WAAA,CAAY,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,KAAA,EAA6B;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,GAAA,CAAI,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE,CAAA;AAC3D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,YAAA,GACJ,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,eAAA;AACnC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,CAAA,uDAAA,EAA0D,KAAK,CAAA,GAAA,EAAM,YAAY,CAAA;AAAA,SACnF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,IAAI,CAAA;AAC5C,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAA,CAAO,KAAK,4CAA4C,CAAA;AAAA,MAC1D;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,0DAA0D,KAAK,CAAA,CAAA;AAAA,OACjE;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,KAAA,EAAe,OAAA,EAA4C;AAC3E,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,CAAA,iBAAA,EAAoB,KAAK,SAAS,OAAO,CAAA;AAE1E,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,WAAA,CAAY,UAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAC1D,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,MAAA,MAAM,UAAU,IAAA,CAAK,IAAA;AACrB,MAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,OAAA,EAAS;AAC7D,QAAA,OAAO,OAAA,CAAQ,EAAA;AAAA,MACjB;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,CACJ,KAAA,EACA,aAAA,EACA,gBAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAA,GAAU,EAAE,gBAAA,EAAiB;AACnC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA;AAAA,MAC1B,CAAA,iBAAA,EAAoB,KAAK,CAAA,MAAA,EAAS,aAAa,CAAA,kBAAA,CAAA;AAAA,MAC/C;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,OAAO,KAAK,WAAA,CAAY,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,KAAA,EAAe,MAAA,EAA8B;AAC/D,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAO;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA;AAAA,MAC1B,oBAAoB,KAAK,CAAA,OAAA,CAAA;AAAA,MACzB;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,WAAA,CAAY,UAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAC1D,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,MAAA,MAAA,CAAO,KAAK,mDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,MAAA,EAA8B;AAC9C,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAE,CAAA;AAC5D,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,IAAI,CAAA;AAAA,IACxC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBACJ,MAAA,EACA,cAAA,GAAyB,IACzB,mBAAA,GAA8B,CAAA,EAC9B,sBAA8B,GAAA,EACZ;AAClB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAA,KACjB,UAAA,CAAW,OAAA,EAAS,sBAAsB,GAAI;AAAA,KAChD;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,cAAA,GAAiB,GAAA;AAC/C,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA,EAAU;AAC5B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AAC9C,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAI,OAAA;AAAA,QAAQ,CAAC,OAAA,KACjB,UAAA,CAAW,OAAA,EAAS,sBAAsB,GAAI;AAAA,OAChD;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AC9QO,SAAS,uBAAA,GAA8C;AAC1D,EAAA,MAAM,GAAA,GAAMK,QAAY,MAAA,EAAO;AAC/B,EAAA,MAAM,UAAA,GAAaC,WAAAA,CAAY,UAAA,CAAW,GAAG,CAAA;AAC7C,EAAA,MAAM,SAAA,GAAY,UAAA,EAAY,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AACtD,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,EAAW;AAC5C,IAAA,OAAO,SAAA;AAAA,EACX;AACA,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,cAAc,OAAA,EAAyB;AAEnD,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AACnC;AAKO,SAAS,aAAa,MAAA,EAAwB;AAEjD,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAClC;AAKA,eAAsB,qBAAA,CAClB,OACG,IAAA,EACO;AACV,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,GAAG,IAAI,CAAA;AACzB,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC3B,IAAA,OAAO,MAAM,MAAA;AAAA,EACjB;AACA,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,uBAAuB,SAAA,EAAwC;AAC3E,EAAA,IACI,CAAC,SAAA,IACD,OAAO,cAAc,QAAA,IACrB,EAAE,YAAY,SAAA,CAAA,EAChB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAMN,UAAS,SAAA,CAAU,MAAA;AAEzB,EAAA,IAAI,CAACA,OAAAA,IAAU,OAAOA,OAAAA,KAAW,QAAA,EAAU;AACvC,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAOA,OAAAA;AACX;AAKA,eAAsB,WAAA,CAClBU,OACA,SAAA,EACwC;AACxC,EAAA,IAAI;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,qBAAA,CAAsBA,KAAAA,EAAM,SAAS,CAAA;AAC1D,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAY;AAAA,EACjD,SAAS,KAAA,EAAO;AACZ,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,EAAG,QAAQ,QAAA,EAAS;AAAA,EACrD;AACJ;AAKA,eAAsB,mBAAmB,MAAA,EAMD;AACpC,EAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,cAAA,EAAgB,UAAS,GAC/D,MAAA;AAEJ,EAAA,IACI,CAAC,SAAA,IACD,OAAO,cAAc,QAAA,IACrB,EAAE,cAAc,SAAA,CAAA,EAClB;AACE,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,MAAMV,OAAAA,GAAS,uBAAuB,SAAS,CAAA;AAC/C,EAAA,IAAIA,OAAAA,EAAQ;AACR,IAAA,YAAA,GAAeA,OAAAA,CAAO,IAAA;AAAA,EAC1B;AAEA,EAAA,MAAMS,SAAAA,GAAU;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,UAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,IAAI,MAAA,GAAS,SAAA,CAAU,QAAA,CAASA,SAAO,CAAA;AACvC,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC3B,IAAA,MAAA,GAAS,MAAM,MAAA;AAAA,EACnB;AAEA,EAAA,MAAM,aAAA,GAAgB;AAAA,IAClB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,QAAQ,MAAA,CAAO;AAAA,GACnB;AAEA,EAAA,IAAI,YAAA,IAAgB,aAAA,CAAc,aAAA,KAAkB,YAAA,EAAc;AAC9D,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,aAAA;AACX;AAKO,SAAS,gBAAA,CACZ,GAAA,EACA,MAAA,EACA,aAAA,GAAyB,KAAA,EACN;AACnB,EAAA,MAAM,OAAA,GAA+B;AAAA,IACjC,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,GACnB;AAEA,EAAA,IAAI,IAAI,aAAA,EAAe;AACnB,IAAA,OAAA,CAAQ,gBAAgB,GAAA,CAAI,aAAA;AAAA,EAChC,CAAA,MAAO;AACH,IAAA,OAAA,CAAQ,QAAQ,GAAA,CAAI,SAAA;AACpB,IAAA,OAAA,CAAQ,iBAAiB,GAAA,CAAI,cAAA;AAC7B,IAAA,IAAI,IAAI,QAAA,EAAU;AACd,MAAA,OAAA,CAAQ,WAAW,GAAA,CAAI,QAAA;AAAA,IAC3B;AAAA,EACJ;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,QAAA,EAAU;AACzB,IAAA,OAAA,CAAQ,MAAA,GAAS,QAAA;AACjB,IAAA,OAAO,OAAA;AAAA,EACX;AAEA,EAAA,IAAI,aAAA,EAAe;AACf,IAAA,OAAA,CAAQ,aAAa,GAAA,CAAI,UAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,OAAA;AACX;AAKO,SAAS,iBAAA,CACZ,IAAA,EACA,IAAA,EACAC,KAAAA,EACO;AACP,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,MAAA,CAAO,MAAM,wCAAwC,CAAA;AACrD,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,MAAA,CAAO,MAAM,oCAAoC,CAAA;AACjD,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAIA,SAAQ,IAAA,EAAM;AACd,IAAA,MAAA,CAAO,MAAM,6CAA6C,CAAA;AAC1D,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA;AACX;AAKO,SAAS,iBAAiB,KAAA,EAA6B;AAC1D,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,gBAAgB,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC/C,IAAA,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,SAAA;AAAA,EACpB;AACA,EAAA,OAAO,IAAA;AACX;AAKA,SAAS,gBAAgB,IAAA,EAAkC;AACvD,EAAA,OACI,IAAA,IAAQ,QACR,OAAO,IAAA,KAAS,YAChB,WAAA,IAAe,IAAA,IACf,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA;AAElC;AAKO,SAAS,sBACZ,UAAA,EACiB;AACjB,EAAA,MAAM,UAA6B,EAAC;AACpC,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AACxC,IAAA,OAAO,OAAA;AAAA,EACX;AAEA,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAChC,IAAA,MAAMV,OAAAA,GAAS,uBAAuB,SAAS,CAAA;AAC/C,IAAA,IAAI,CAACA,OAAAA,EAAQ;AACT,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI;AACA,MAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACJ,MAAA;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX;;;AClNO,IAAM,aAAN,MAAiB;AAAA,EAItB,YAAYA,OAAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,oBAAA,CAAqB,IAAA,CAAK,MAAM,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CACJ,IAAA,EACA,IAAA,EACuC;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,MAAM,IAAI,CAAA;AAE3D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,cAAA,EAAgB,SAAS,cAAA,IAAkB,EAAA;AAAA,MAC3C,IAAA,EAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,MACvB,IAAA,EAAM,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACxB,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,EAAA,EAAI,SAAS,EAAA,IAAM,EAAA;AAAA,MACnB,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa;AAAA,KACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAA,CACJ,SAAA,EACA,IAAA,EACwC;AACxC,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,WAAW,IAAI,CAAA;AAEjE,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,cAAA,EAAgB,SAAS,cAAA,IAAkB,EAAA;AAAA,MAC3C,MAAA,EAAQ,SAAS,MAAA,IAAU,EAAA;AAAA,MAC3B,KAAA,EAAO,SAAS,KAAA,IAAS,EAAA;AAAA,MACzB,cAAA,EAAgB,SAAS,cAAA,IAAkB,EAAA;AAAA,MAC3C,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACxB,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,QAAA,EAAU,SAAS,QAAA,IAAY,IAAA;AAAA,MAC/B,QAAA,EAAU,SAAS,QAAA,IAAY,IAAA;AAAA,MAC/B,EAAA,EAAI,SAAS,EAAA,IAAM,EAAA;AAAA,MACnB,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,SAAA,EAAW,SAAS,SAAA,IAAa;AAAA,KACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,SAAA,EAA4D;AAC3E,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,eAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,SAAS,IAAA,EAAM,EAAA;AACrB,MAAA,MAAM,YAAY,IAAA,EAAM,KAAA;AACxB,MAAA,MAAM,gBAAgB,IAAA,EAAM,SAAA;AAE5B,MAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,aAAA,IAAiB,IAAA,IAAQ,aAAa,IAAA,EAAM;AAChE,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,uEAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,EAAA,EAAI,MAAA;AAAA,UACJ,KAAA,EAAO,SAAA;AAAA,UACP,SAAA,EAAW,aAAA;AAAA,UACX,cAAA,EAAgB,MAAM,cAAA,IAAkB;AAAA,SACzC,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,CAAO,KAAA,CAAM,mDAAmD,GAAG,CAAA;AAAA,MACrE;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAO,YAAA,EAAa;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAA,CACJ,IAAA,EACA,SAAA,EACA,gBAAA,EACwB;AACxB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,qBAAA,GACJ,gBAAA,EAAkB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC5B,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,WAAW,CAAA,CAAE;AAAA,KACf,CAAE,CAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA;AAAA,MACjC,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,KAAA,GAAQ,UAAU,EAAA,IAAM,IAAA;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,KAAA,EAA6B;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAc,KAAK,CAAA;AACtD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aACE,IAAA,EACA,IAAA,EACAU,KAAAA,EACA,UAAA,EACA,iBAAyB,EAAA,EACY;AACrC,IAAA,OAAO,KAAK,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAMA,KAAAA,EAAM,YAAY,cAAc,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAc,iBAAA,CACZ,IAAA,EACA,IAAA,EACAA,KAAAA,EACA,YACA,cAAA,EACqC;AACrC,IAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,EAAM,IAAA,EAAMA,KAAI,CAAA,EAAG;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,KAAK,CAAA;AAC5B,IAAA,MAAM,aAAa,KAAA,CAAM,MAAA;AACzB,IAAA,MAAM,SAAA,GAAY,iBAAiB,KAAK,CAAA;AACxC,IAAA,MAAM,gBAAA,GAAmB,sBAAsB,UAAU,CAAA;AAEzD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,SAAA;AAAA,MACvB,IAAA;AAAA,MACA,SAAA,IAAa,MAAA;AAAA,MACb;AAAA,KACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAA,CAAO,MAAM,wCAAwC,CAAA;AACrD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAElD,IAAA,MAAM,YAAY,IAAI,SAAA,CAAU,KAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAC,CAAA;AAC3D,IAAA,MAAM,UAAsC,EAAC;AAC7C,IAAA,MAAM,cAA+B,EAAC;AACtC,IAAA,IAAI,cAAA,GAAiB,CAAA;AAErB,IAAA,MAAM,WAAA,GAAc,OAAO,GAAA,EAAa,IAAA,KAA6B;AACnE,MAAA,MAAM,UAAU,OAAA,EAAQ;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC5C,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,mBAAA;AAAA,UAC5B,KAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAA;AAAA,UACAA,KAAAA;AAAA,UACA,UAAA;AAAA,UACA,OAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,cAAA,IAAkB,CAAA;AAClB,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,qBAAqB,cAAc,CAAA,CAAA,EAAI,UAAU,CAAA,yBAAA,EAA4B,WAAW,MAAM,CAAA,CAAA;AAAA,SAChG;AAAA,MACF,CAAA,SAAE;AACA,QAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,MACpB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM,WAAA,CAAY,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA;AAE9D,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,OAAA,CAAQ,WAAW,WAAW,CAAA;AAAA,IACtC;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,KAAA,EAAO,WAAW,CAAA;AAC5C,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,iBAAA,CAAkB,KAAa,IAAA,EAAwB;AAE7D,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC9B,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,GAAA;AAAA,QACP,WAAW,IAAA,CAAK,KAAA;AAAA,QAChB,gBAAgB,IAAA,CAAK,cAAA;AAAA,QACrB,eAAe,IAAA,CAAK;AAAA,OACtB;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,GAAA;AAAA,MACP,WAAW,IAAA,CAAK,KAAA;AAAA,MAChB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,UAAU,IAAA,CAAK;AAAA,KACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,IAAA,EAAkC;AACxD,IAAA,OACE,IAAA,IAAQ,QACR,OAAO,IAAA,KAAS,YAChB,WAAA,IAAe,IAAA,IACf,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA;AAAA,EAE9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAc,oBACZ,KAAA,EACA,OAAA,EACA,KACAA,KAAAA,EACA,UAAA,EACA,SACA,WAAA,EAC6B;AAC7B,IAAA,MAAM,QAAA,GAAW,WAAW,OAAO,CAAA,CAAA;AAEnC,IAAA,MAAMR,QAAO,IAAI,WAAA,CAAY,QAAA,EAAU,IAAI,kBAAkB,CAAA;AAC7D,IAAAA,MAAK,KAAA,EAAM;AAEX,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAWA,MAAK,cAAA,EAAe;AACrC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,WAAA,GAAc,SAAS,WAAA,EAAY;AACzC,QAAA,GAAA,CAAI,OAAA,GAAU,aAAA,CAAc,WAAA,CAAY,OAAO,CAAA;AAC/C,QAAA,GAAA,CAAI,MAAA,GAAS,YAAA,CAAa,WAAA,CAAY,MAAM,CAAA;AAAA,MAC9C;AACA,MAAA,GAAA,CAAI,YAAY,uBAAA,EAAwB;AAExC,MAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,MAAMA,KAAAA,CAAK,UAAA;AAAA,QAAW,MAC/C,WAAA,CAAYQ,KAAAA,EAAM,GAAA,CAAI,SAAS;AAAA,OACjC;AACA,MAAA,GAAA,CAAI,UAAA,GAAa,MAAA;AACjB,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AAEb,MAAA,GAAA,CAAI,aAAA,GAAgB,MAAMR,KAAAA,CAAK,UAAA;AAAA,QAAW,MACxC,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,GAAG;AAAA,OACrC;AAEA,MAAA,IAAI,UAAA,IAAc,GAAA,CAAI,MAAA,KAAW,WAAA,EAAa;AAC5C,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,KAAK,UAAU,CAAA;AACjE,QAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA,MAC3B;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,eAAe,GAAA,CAAI;AAAA,OACpB,CAAA;AAED,MAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,SAAA,EAAU;AAAA,IAC3C,CAAA,SAAE;AACA,MAAAA,MAAK,GAAA,EAAI;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,mBAAA,CACZ,KAAA,EACA,GAAA,EACiB;AACjB,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,GAAsB,CAAA;AACvD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,OAAO,OAAO,CAAA;AAE7D,IAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,aAAA;AACvC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,OAAO,MAAM,CAAA;AAAA,MACtB;AAAA,IACF;AACA,IAAA,OAAO,CAAA,MAAA,EAAS,IAAI,KAAK,CAAA,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,mBAAA,CACZ,KAAA,EACA,GAAA,EACc;AACd,IAAA,MAAM,UAAU,gBAAA,CAAiB,GAAA,EAAK,GAAA,CAAI,MAAA,IAAU,WAAW,IAAI,CAAA;AACnE,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,OAAO,OAAO,CAAA;AAC9D,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,oBAAA,CACZ,KAAA,EACA,GAAA,EACA,UAAA,EACe;AACf,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAA,CAAqB,GAAA,CAAI,MAAM,CAAA;AAEjD,IAAA,MAAM,mBAA+C,EAAC;AACtD,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,UACtC,SAAA;AAAA,UACA,WAAW,GAAA,CAAI,SAAA;AAAA,UACf,YAAY,GAAA,CAAI,UAAA;AAAA,UAChB,gBAAgB,GAAA,CAAI,cAAA;AAAA,UACpB,UAAU,GAAA,CAAI;AAAA,SACf,CAAA;AAED,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,IAAK,GAAA,CAAI,aAAA,EAAe;AACpD,MAAA,IAAA,CAAK,MAAA,CAAO,sBAAA;AAAA,QACV,KAAA;AAAA,QACA,GAAA,CAAI,aAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,IAAM,YAAN,MAAgB;AAAA,EAId,YAAY,OAAA,EAAiB;AAF7B,IAAA,IAAA,CAAQ,UAA6B,EAAC;AAGpC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,OAAA,EAAA;AACL,MAAA;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACpC,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAM;AAChC,MAAA,IAAA,IAAO;AAAA,IACT,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,EAAA;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,IAAO,EAAA,EAAkC;AAC7C,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAAA,EACF;AACF,CAAA;;;ACveO,IAAK,WAAA,qBAAAS,YAAAA,KAAL;AACL,EAAAA,aAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,aAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AAHC,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAML,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACL,EAAAA,WAAA,WAAA,CAAA,GAAY,WAAA;AADF,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;ACrCL,IAAM,kBAAN,MAAsB;AAAA,EAS3B,WAAA,CACE,MAAA,EACAZ,OAAAA,EACA,GAAA,EACA,KAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,aAAA,GAAgB,GAAA;AACrB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,GAAA,GAAW;AACb,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAG1B,IAAA,MAAM,MAAA,GAASC,KAAAA,CAAM,SAAA,CAAU,kBAAkB,CAAA;AACjD,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,SAAA;AAAA,MACjB,kBAAkB,IAAA,CAAK,aAAA,CAAc,EAAE,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AAAA,MAC9D;AAAA,QACE,MAAMY,QAAAA,CAAS,QAAA;AAAA,QACf,UAAA,EAAY;AAAA,UACV,wBAAA,EAA0B,KAAK,aAAA,CAAc,EAAA;AAAA,UAC7C,0BAAA,EAA4B,KAAK,KAAA,CAAM,EAAA;AAAA,UACvC,4BAAA,EAA8B,KAAK,aAAA,CAAc;AAAA;AACnD;AACF,KACF;AAGA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAC1C,IAAA,IAAA,CAAK,UAAU,WAAA,CAAY,OAAA;AAG3B,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,aAAA,EAAe,KAAK,KAAA,CAAM,EAAA;AAAA,MAC1B,MAAA,EAAA,iBAAA;AAAA,KACF;AAEA,IAAA,MAAM,KAAK,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,GAAA,CACJ,OAAA,GAAmB,IAAA,EACnB,MAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,OAAA,GAAA,iBAAA,yBAAA,QAAA;AAGf,IAAA,MAAM,OAAA,GAA+B;AAAA,MACnC,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,aAAA,EAAe,KAAK,KAAA,CAAM,EAAA;AAAA,MAC1B;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,IACnB;AAEA,IAAA,MAAM,KAAK,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAE5D,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,CACJ,EAAA,EACA,MAAA,EACY;AACZ,IAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,IAAI,CAAA;AAC5B,MAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC3B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAA,CAAK,IAAI,KAAK,CAAA;AACpB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AACF;;;AC/GO,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAA,EACvD,YAAYb,OAAAA,EAAgB;AAC1B,IAAA,KAAA,CAAMA,OAAAA,EAAQ,2BAA2B,EAAI,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACJ,KAAA,EACA,SAAA,EACA,OAAA,EACA,QACA,SAAA,EACc;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAA+B;AAAA,MACnC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,aAAa,OAAA,CAAQ;AAAA;AACvB,KACF;AAGA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,aAAA,GAAqC;AAAA,QACzC,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAS,MAAA,CAAO;AAAA,OAClB;AAEA,MAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,QAAA,aAAA,CAAc,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS;AACnD,UAAA,MAAM,UAAA,GAAkC;AAAA,YACtC,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,OAAO,IAAA,CAAK;AAAA,WACd;AACA,UAAA,IAAI,KAAK,GAAA,EAAK;AACZ,YAAA,UAAA,CAAW,MAAM,IAAA,CAAK,GAAA;AAAA,UACxB;AACA,UAAA,OAAO,UAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,OAAA,CAAQ,MAAA,GAAS,aAAA;AAAA,IACnB;AAGA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAA,CAAQ,SAAA,GAAY;AAAA,QAClB,OAAO,SAAA,CAAU;AAAA,OACnB;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,gCAAgC,OAAO,CAAA;AAExE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,eAAA;AACtD,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,uDAAuD,YAAY,CAAA;AAAA,OACrE;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,gBACJ,SAAA,EACA,OAAA,EACA,SACA,KAAA,EACA,MAAA,EACA,WACA,SAAA,EACqB;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,kCAAA;AAEZ,MAAA,MAAM,OAAA,GAA+B;AAAA,QACnC,SAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,UACzC,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,OAAO,MAAA,CAAO;AAAA,SAChB,CAAE,CAAA;AAAA,MACJ;AAEA,MAAA,IAAI,KAAA,KAAU,KAAA,CAAA,IAAa,MAAA,KAAW,KAAA,CAAA,EAAW;AAC/C,QAAA,OAAA,CAAQ,aAAa,EAAC;AAEtB,QAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,UAAA,OAAA,CAAQ,WAAW,KAAA,GAAQ,KAAA;AAAA,QAC7B;AAEA,QAAA,IAAI,WAAW,KAAA,CAAA,EAAW;AACxB,UAAA,OAAA,CAAQ,WAAW,MAAA,GAAS,MAAA;AAAA,QAC9B;AAAA,MACF;AAEA,MAAA,IAAI,cAAc,KAAA,CAAA,EAAW;AAC3B,QAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAAA,MACtB;AAEA,MAAA,IAAI,cAAc,KAAA,CAAA,EAAW;AAC3B,QAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAAA,MACtB;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,OAAO,CAAA;AAE7C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,eAAA;AACtD,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,uDAAuD,YAAY,CAAA;AAAA,SACrE;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,GAAA,EAAU;AACjB,MAAA,MAAM,OAAA,GAAU,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,OAAO,OAAA,IAAW,EAAA;AAEvD,MAAA,MAAA,CAAO,KAAA,CAAM,mDAAmD,OAAO,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,iBAAA,CACJ,SAAA,EACA,OAAA,EACA,OAAA,EACqB;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,oCAAA;AAEZ,MAAA,MAAM,OAAA,GAA+B;AAAA,QACnC,MAAA,EAAQ;AAAA,UACN,SAAA;AAAA,UACA;AAAA;AACF,OACF;AAEA,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,MAAA,CAAO,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,UAChD,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,OAAO,MAAA,CAAO;AAAA,SAChB,CAAE,CAAA;AAAA,MACJ;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,OAAO,CAAA;AAE7C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,eAAA;AACtD,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,uDAAuD,YAAY,CAAA;AAAA,SACrE;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,GAAA,EAAU;AACjB,MAAA,MAAM,OAAA,GAAU,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,OAAO,OAAA,IAAW,EAAA;AAEvD,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,mDAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;AClPO,IAAK,KAAA,qBAAAc,MAAAA,KAAL;AACL,EAAAA,OAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,OAAA,QAAA,CAAA,GAAS,QAAA;AAFC,EAAA,OAAAA,MAAAA;AAAA,CAAA,EAAA,KAAA,IAAA,EAAA;AAKL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACL,EAAAA,WAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,WAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,WAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,WAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,QAAA,CAAA,GAAS,QAAA;AANC,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AASL,IAAK,OAAA,qBAAAC,QAAAA,KAAL;AACL,EAAAA,SAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,SAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,SAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,SAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,SAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,SAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,SAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,SAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,SAAA,iBAAA,CAAA,GAAkB,iBAAA;AATR,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AAYL,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,aAAA,QAAA,CAAA,GAAS,cAAA;AACT,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,aAAA,CAAA,GAAc,aAAA;AARJ,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAWL,IAAK,OAAA,qBAAAC,QAAAA,KAAL;AACL,EAAAA,SAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,SAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,SAAA,QAAA,CAAA,GAAS,QAAA;AAHC,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AAML,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,YAAA,CAAA,GAAa,YAAA;AAHH,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAML,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACL,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,UAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,UAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,UAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,UAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,UAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,UAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,UAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,UAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,UAAA,SAAA,CAAA,GAAU,SAAA;AAZA,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAeL,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACL,EAAAA,YAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,YAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,YAAA,eAAA,CAAA,GAAgB,cAAA;AAChB,EAAAA,YAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAQL,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACL,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,aAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,aAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,aAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,aAAA,UAAA,CAAA,GAAW,UAAA;AAVD,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA4CL,SAAS,cAAc,GAAA,EAAqB;AACjD,EAAA,OAAO,aAAa,GAAG,CAAA,EAAA,CAAA;AACzB;;;AClGO,IAAM,YAAN,MAAgB;AAAA,EAIrB,YAAYtB,OAAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,mBAAA,CAAoBA,OAAM,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU,MAAA,EAAwD;AAEtE,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,OAAO,MAAA,CAAO,KAAK,CAAA;AAAA,OACzD;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,SAAS,CAAA,EAAG;AAC5C,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,yCAAA,EAA4C,OAAO,MAAA,CAAO,SAAS,CAAA;AAAA,OACrE;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,OAAO,CAAA,EAAG;AACxC,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,sCAAA,EAAyC,OAAO,MAAA,CAAO,OAAO,CAAA;AAAA,OAChE;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoB,MAAA,CAAO,MAAM,CAAA,EAAG;AAC5C,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,0CAAA,EAA6C,OAAO,MAAA,CAAO,MAAM,CAAA;AAAA,OACnE;AAAA,IACF;AACA,IAAA,IACE,MAAA,CAAO,cAAc,MAAA,IACrB,CAAC,KAAK,gBAAA,CAAiB,MAAA,CAAO,SAAS,CAAA,EACvC;AACA,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,uDAAA,EAA0D,OAAO,MAAA,CAAO,SAAS,CAAA;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA;AAAA,MAC/B,MAAA,CAAO,KAAA;AAAA,MACP,MAAA,CAAO,SAAA;AAAA,MACP,MAAA,CAAO,OAAA;AAAA,MACP,MAAA,CAAO,MAAA;AAAA,MACP,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEF,MAAM,gBACF,SAAA,EACA,OAAA,EACA,QAAgB,EAAA,EAChB,OAAA,EACA,MAAA,EACA,SAAA,EACA,SAAA,EACoC;AACpC,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,eAAA;AAAA,MAC/B,SAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,EAAC;AAC7B,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,IAAY,EAAC;AACvC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AAEnC,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AAEhD,IAAA,IAAI,UAAA,GAAiC,MAAA;AACrC,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AACrD,MAAA,UAAA,GAAa,QAAA,CAAS,MAAA;AAAA,IACxB;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,OAAO,gBAAA,CACL,SAAA,EACA,OAAA,EACA,OAAA,EACA,WACA,SAAA,EACiD;AACjD,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAA6B,MAAA;AAEjC,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA;AAAA,QACxB,SAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,OAAA,IAAW,OAAO,IAAA,EAAM;AACjC,QAAA,MAAM,OAAA;AAAA,MACR;AAEA,MAAA,IAAI,CAAC,OAAO,WAAA,EAAa;AACvB,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,GAAS,MAAA,CAAO,UAAA;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,MAAA,EAAkD;AACxE,IAAA,IAAI,CAAC,IAAA,CAAK,qBAAA,CAAsB,MAAM,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AACpE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,CAAC,OAAO,OAAA,EAAS;AACxC,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,iBAAA;AAAA,MAC/B,MAAA,CAAO,SAAA;AAAA,MACP,MAAA,CAAO,OAAA;AAAA,MACP,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,QAAQ,EAAC;AAAA,EACzB;AAAA,EAEQ,aAAa,KAAA,EAA4B;AAC/C,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,SAAS,KAAK,CAAA;AAAA,EAC5C;AAAA,EAEQ,iBAAiB,SAAA,EAAwC;AAC/D,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,CAAE,SAAS,SAAS,CAAA;AAAA,EACpD;AAAA,EAEQ,eAAe,OAAA,EAAkC;AACvD,IAAA,OACE,WACA,OAAO,OAAA,KAAY,QAAA,IACnB,SAAA,IAAa,WACb,aAAA,IAAiB,OAAA;AAAA,EAErB;AAAA,EAEQ,oBAAoB,MAAA,EAAqC;AAC/D,IAAA,OACE,MAAA,IACA,OAAO,MAAA,KAAW,QAAA,IAClB,eAAe,MAAA,IACf,SAAA,IAAa,UACb,SAAA,IAAa,MAAA;AAAA,EAEjB;AAAA,EAEQ,iBAAiB,SAAA,EAAwC;AAC/D,IAAA,OAAO,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,IAAY,OAAA,IAAW,SAAA;AAAA,EAClE;AAAA,EAEQ,sBAAsB,KAAA,EAA8C;AAC1E,IAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,WAAA,IAAe,SACf,SAAA,IAAa,KAAA;AAAA,EAEjB;AACF;;;ACrOO,IAAM,iBAAA,GAAN,cAAgC,eAAA,CAAgB;AAAA,EACrD,YAAYA,OAAAA,EAAgB;AAC1B,IAAA,KAAA,CAAMA,OAAAA,EAAQ,yBAAyB,EAAI,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,IAAA,EAAc,KAAA,EAAoC;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,EAAc,EAAG;AACzB,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,UAAA,EAAY,IAAA;AAAA,QACZ;AAAA,OACF;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,wBAAwB,OAAO,CAAA;AAEhE,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,IAAW,eAAA;AAEtD,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,YAAY,CAAA,CAAE,CAAA;AAErE,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,GAAA,EAAU;AACjB,MAAA,MAAM,OAAA,GAAU,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,OAAO,OAAA,IAAW,EAAA;AAEvD,MAAA,MAAA,CAAO,KAAA,CAAM,0CAA0C,OAAO,CAAA;AAE9D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;AC5CO,IAAM,UAAN,MAAc;AAAA,EAInB,YAAYA,OAAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,iBAAA,CAAkBA,OAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,UAAU,MAAA,EAAyD;AACvE,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA,CAAO,SAAS,QAAA,IAAY,CAAC,OAAO,IAAA,EAAM;AAC9D,MAAA,MAAA,CAAO,MAAM,mDAAmD,CAAA;AAChE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,YAAA;AAC9B,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,gBAAA,CAAiB,MAAA,CAAO,MAAM,KAAK,CAAA;AAEpE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,OAAO,IAAA,IAAQ,IAAA;AAAA,EACxB;AACF;;;ACxBA,IAAM,0BAAA,GAA6B,IAAA;AAI5B,IAAM,8BAAN,MAA2D;AAAA,EAGhE,YAAY,gBAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,mBAAmB,gBAAA,IAAoB,0BAAA;AAAA,EAC9C;AAAA,EAEA,OAAA,CAAQE,OAAY,cAAA,EAA+B;AACjD,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,kBAAkBA,KAAI,CAAA;AAAA,IAC7B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,8CAA8C,CAAC,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,EAA2B;AAAA,EAAC;AAAA,EAElC,QAAA,GAA0B;AACxB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,kBAAkBA,KAAAA,EAAkB;AAC1C,IAAA,MAAM,QAAA,GAA2BA,KAAAA,CAAK,YAAA,CAAa,IAAA,CAAKA,KAAI,CAAA;AAC5D,IAAA,MAAM,SAAS,IAAA,CAAK,gBAAA;AAEpB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAgC;AAC5D,MAAA,IAAI;AACF,QAAA,OAAO,QAAA,CAAS,GAAA,EAAK,aAAA,CAAc,KAAA,EAAO,MAAM,CAAmB,CAAA;AAAA,MACrE,CAAA,CAAA,MAAQ;AACN,QAAA,IAAI;AACF,UAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,QAC5B,CAAA,CAAA,MAAQ;AACN,UAAA,OAAOA,KAAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAACA,MAAa,YAAA,GAAe,OAAA;AAAA,EAC/B;AACF;AAEA,SAAS,aAAA,CAAc,OAAgB,MAAA,EAAyB;AAC9D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAM,MAAA,GAAS,MAAA,GAAS,MAAM,SAAA,CAAU,CAAA,EAAG,MAAM,CAAA,GAAI,KAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,IAAI,UAAA,CAAW,SAAS,MAAA,EAAQ;AAC9B,MAAA,OAAO,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,MAAM,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;;;AC5DA,IAAM,6BAAA,uBAAoC,GAAA,CAAI;AAAA,EAC5C,QAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,IAAM,+BAAN,MAA4D;AAAA,EAGjE,YAAY,kBAAA,EAA6B;AACvC,IAAA,IAAA,CAAK,kBAAA,GAAqB,sBAAsB,MAAA,CAAO,iBAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKQ,6BAA6BA,KAAAA,EAA2B;AAC9D,IAAA,IAAI;AAGF,MAAA,MAAM,OAAA,GAAUA,KAAAA;AAChB,MAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,sBAAA,IAA0B,OAAA,CAAQ,oBAAA;AAE5C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,EAAM;AAEpC,UAAA,IACE,IAAA,CAAK,UAAA,CAAW,gCAAgC,CAAA,IAChD,KAAK,UAAA,CAAW,wBAAwB,CAAA,IACxC,IAAA,CAAK,WAAW,iCAAiC,CAAA,IACjD,IAAA,CAAK,UAAA,CAAW,6BAA6B,CAAA,EAC7C;AACA,YAAA,IAAI;AAEF,cAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACpC,cAAA,MAAM,OAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,IAAA,EAAK;AACjD,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,OAAO,IAAA;AAAA,cACT;AAAA,YACF,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,cAAc,KAAA,EAAyB;AAC7C,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,KAAA,CAAM,UAAU,IAAA,CAAK,kBAAA,GACxB,QACA,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,kBAAkB,CAAA;AAAA,MAChD;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,OAAO,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,MAChB,OAAO,CAAA,KAAM,WAAW,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA,GAAI;AAAA,SAClD;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,QAAA,MAAM,SAAkC,EAAC;AACzC,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,UAAA,MAAA,CAAO,CAAC,IAAI,OAAO,CAAA,KAAM,WAAW,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA,GAAI,CAAA;AAAA,QAC9D;AACA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,CAAQA,OAAY,aAAA,EAA8B;AAChD,IAAA,IAAI;AAEF,MAAA,MAAM,oBAAA,GAAuBA,KAAAA,CAAK,YAAA,CAAa,IAAA,CAAKA,KAAI,CAAA;AAExD,MAAAA,KAAAA,CAAK,YAAA,GAAe,CAAC,GAAA,EAAa,KAAA,KAAyB;AACzD,QAAA,IAAI;AACF,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AAC1C,UAAA,OAAO,oBAAA,CAAqB,KAAK,SAAgB,CAAA;AAAA,QACnD,CAAA,CAAA,MAAQ;AAEN,UAAA,IAAI;AACF,YAAA,OAAO,oBAAA,CAAqB,KAAK,KAAY,CAAA;AAAA,UAC/C,CAAA,CAAA,MAAQ;AACN,YAAA,OAAOA,KAAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAA;AAGA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,4BAAA,CAA6BA,KAAI,CAAA;AACnD,MAAA,IAAI,QAAQ,6BAAA,CAA8B,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG;AACjE,QAAAA,MAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,yBAAyB,IAAI,CAAA;AAAA,MACvE;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,oDAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAMA,KAAAA,EAA0B;AAAA,EAEhC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA0B;AACxB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AACF;ACvKO,IAAM,gCAAA,GAAN,MAAM,gCAAA,CAAyD;AAAA,EAYpE,WAAA,CACE,2BAA2B,gCAAA,CAAgC,yBAAA,EAC3D,4BAA4B,gCAAA,CAAgC,0BAAA,EAC5D,sBAAA,GAAyB,gCAAA,CAAgC,uBAAA,EACzD;AANF;AAAA,IAAA,IAAA,CAAiB,aAAA,uBAAoB,GAAA,EAAY;AAO/C,IAAA,IAAI,CAAC,wBAAA,IAA4B,CAAC,yBAAA,IAA6B,CAAC,sBAAA,EAAwB;AACtF,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,gBAAA,GAAoB,wBAAA;AACzB,IAAA,IAAA,CAAK,iBAAA,GAAoB,yBAAA;AACzB,IAAA,IAAA,CAAK,cAAA,GAAoB,sBAAA;AAAA,EAC3B;AAAA,EAEA,OAAA,CAAQ,OAAa,cAAA,EAA+B;AAAA,EAEpD;AAAA,EAEA,MAAMA,KAAAA,EAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUA,MAAK,WAAA,EAAY;AACjC,MAAA,IAAI,CAAC,OAAA,IAAW,CAACD,KAAAA,CAAM,kBAAA,CAAmB,OAAO,CAAA,EAAG;AAEpD,MAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAO,GAAI,OAAA;AAG5B,MAAA,IAAI,iBAAA,CAAkB,kBAAA,CAAmB,OAAA,EAAS,MAAM,CAAA,EAAG;AACzD,QAAA,IAAA,CAAK,aAAA,CAAc,OAAO,OAAO,CAAA;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,MAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAWC,KAAI,CAAA,EAAG;AAE5B,MAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AAAA,IAC5B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,oDAAoD,CAAC,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,WAAWA,KAAAA,EAA6B;AAC9C,IAAA,MAAM,QAAQA,KAAAA,CAAK,UAAA;AACnB,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,OACE,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,OAAO,IAAA,CAAK,gBAAgB,CAAA,IACjE,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,KAAK,iBAAiB,CAAA;AAAA,EAEtE;AAAA,EAEQ,cAAc,OAAA,EAAuB;AAC3C,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,oBAAA,CAAqB,OAAO,CAAA;AAC3D,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAY,EAAG;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,qDAAA,EAAwD,OAAO,CAAA,iBAAA,CAAmB,CAAA;AAC9F,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,cAAA,EAAgB,IAAI,CAAA;AAAA,IAC7C,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,oEAAA,EAAuE,OAAO,CAAA,CAAA,CAAA,EAAK,CAAC,CAAA;AAAA,IAClG;AAAA,EACF;AACF,CAAA;AAnFa,gCAAA,CACJ,yBAAA,GAA4B,sBAAA;AADxB,gCAAA,CAEJ,0BAAA,GAA6B,uBAAA;AAFzB,gCAAA,CAGJ,uBAAA,GAA0B,sBAAA;AAH5B,IAAM,+BAAA,GAAN,gCAAA;;;ACAP,IAAM,kBAAA,GAA6C;AAAA;AAAA,EAEjD,SAAS,IAAI,MAAA;AAAA,IACX,gDAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA;AAAA,EAEA,KAAA,EAAO,uDAAA;AAAA;AAAA,EAEP,KAAA,EAAO,+DAAA;AAAA;AAAA,EAEP,WAAA,EACE,0EAAA;AAAA;AAAA,EAEF,GAAA,EAAK,0BAAA;AAAA;AAAA,EAEL,QAAA,EAAU,qDAAA;AAAA;AAAA,EAEV,YAAA,EAAc,wDAAA;AAAA;AAAA,EAEd,aAAA,EAAe;AACjB,CAAA;AAGA,IAAM,kBAAA,GAAqB,yBAAA;AAG3B,IAAM,cAAA,uBAAqB,GAAA,CAAI;AAAA,EAC7B,UAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,iBAAA,GAAoB,YAAA;AAEnB,IAAM,yBAAN,MAAsD;AAAA;AAAA;AAAA;AAAA,EAInD,eAAe,GAAA,EAAsB;AAC3C,IAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,IAAA,KAAA,MAAW,gBAAgB,cAAA,EAAgB;AACzC,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,EAAG;AACnC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAAuB;AAC9C,IAAA,IAAI,QAAA,GAAW,KAAA;AAGf,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,kBAAA,EAAoB,iBAAiB,CAAA;AAGjE,IAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,MAAA,CAAO,kBAAkB,CAAA,EAAG;AAEvD,MAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AACpB,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC1B,QAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AACpB,QAAA,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,OAAA,EAAS,iBAAiB,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eACN,KAAA,EACyB;AACzB,IAAA,MAAM,WAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,GAAG,aAAa,IAAI,IAAA,CAAK,aAAA,CAAc,GAAG,CAAC,CAAA;AACjD,MAAA,QAAA,CAAS,CAAC,CAAA,GAAI,aAAA;AAAA,IAChB;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,KAAA,EAA6B;AAClD,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,OAAO,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,MACnC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9B,QAAA,OAAO,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA,MACjC,CAAA,MAAA,IAAW,OAAO,IAAA,KAAS,QAAA,IAAY,SAAS,IAAA,EAAM;AACpD,QAAA,OAAO,IAAA,CAAK,eAAe,IAA+B,CAAA;AAAA,MAC5D;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,KAAa,KAAA,EAAmC;AAEpE,IAAA,IACE,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,IACvB,OAAO,KAAA,KAAU,QAAA,IACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EACpB;AACA,MAAA,OAAO,CAAC,KAAK,iBAAiB,CAAA;AAAA,IAChC;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,OAAO,CAAC,GAAA,EAAK,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAC,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,MAAA,OAAO,CAAC,GAAA,EAAK,IAAA,CAAK,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,MAAA,OAAO,CAAC,GAAA,EAAK,IAAA,CAAK,cAAA,CAAe,KAAgC,CAAC,CAAA;AAAA,IACpE;AAEA,IAAA,OAAO,CAAC,KAAK,KAAK,CAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,CAAQA,OAAY,aAAA,EAA8B;AAAA,EAElD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAMA,KAAAA,EAA0B;AAC9B,IAAA,IAAI;AAEF,MAAA,MAAM,OAAA,GAAUA,KAAAA;AAChB,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,WAAA;AAEjD,MAAA,IAAI,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,EAAU;AAChD,QAAA,MAAM,qBAA8C,EAAC;AAErD,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,UAAA,MAAM,GAAG,aAAa,IAAI,IAAA,CAAK,aAAA,CAAc,KAAK,KAAK,CAAA;AACvD,UAAA,kBAAA,CAAmB,GAAG,CAAA,GAAI,aAAA;AAAA,QAC5B;AAIA,QAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,UAAA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AAAA,QACxB,CAAA,MAAA,IAAW,QAAQ,UAAA,EAAY;AAE7B,UAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,CAAE,OAAA;AAAA,YAC9B,CAAC,CAAA,KAAM,OAAO,OAAA,CAAQ,WAAW,CAAC;AAAA,WACpC;AACA,UAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,UAAA,EAAY,kBAAkB,CAAA;AAAA,QACtD;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,uDAAuD,CAAC,CAAA;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA0B;AACxB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AACF;AC7LA,SAAS,iBAAA,GAAyB;AAChC,EAAA,IAAI;AAEF,IAAA,IAAKO,QAAgB,kBAAA,EAAoB;AACvC,MAAA,MAAM,OAAA,GAAWA,QAAgB,kBAAA,EAAmB;AACpD,MAAA,IAAI,OAAA,EAAS,sBAAsB,IAAA,EAAM;AACvC,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AAKA,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,qBAAA,CAAsB,UAAU,CAAA;AAC7D,IAAA,MAAM,UAAA,GAAa,cAAc,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,QAAA,EAAS,CAAE,QAAA,CAAS,sBAAsB,CAAC,CAAA;AACxF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,QAAA,GAAY,UAAA,CAAmB,UAAU,CAAA,EAAG,OAAA,EAAS,SAAA;AAC3D,MAAA,IAAI,QAAA,EAAU,sBAAsB,IAAA,EAAM;AACxC,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,SAAS,cAAc,UAAA,EAA2B;AAChD,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,cAAA,CAAe,kBAAA,EAAoB,SAAA,KAAc,UAAA,EAAY;AACtE,IAAA,cAAA,CAAe,kBAAA,CAAmB,UAAU,UAAU,CAAA;AACtD,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,cAAA,CAAe,SAAA,KAAc,UAAA,EAAY;AAClD,IAAA,cAAA,CAAe,UAAU,UAAU,CAAA;AACnC,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,KAAK,+FAA+F,CAAA;AAC7G;AAWA,IAAM,aAAA,uBAAoB,GAAA,EAAoB;AAMvC,SAAS,iBAAA,CAAkB,KAAa,KAAA,EAAqB;AAElE,EAAA,aAAA,CAAc,GAAA,CAAI,KAAK,KAAK,CAAA;AAG5B,EAAA,IAAI;AACF,IAAA,MAAM,cAAA,GAAiBH,YAAY,UAAA,CAAWG,OAAAA,CAAQ,QAAQ,CAAA,IAAKH,YAAY,aAAA,EAAc;AAC7F,IAAA,MAAM,aAAa,cAAA,CAAe,QAAA,CAAS,GAAA,EAAK,EAAE,OAAO,CAAA;AACzD,IAAA,MAAM,aAAaA,WAAAA,CAAY,UAAA,CAAWG,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AACtE,IAAA,aAAA,CAAc,UAAU,CAAA;AAAA,EAC1B,SAAS,CAAA,EAAG;AAAA,EAEZ;AACF;AA2BO,IAAM,uBAAN,MAAoD;AAAA,EAGzD,WAAA,CAAY,cAAsB,OAAA,EAAS;AACzC,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,CAAQP,OAAY,aAAA,EAA8B;AAChD,IAAA,IAAI;AAEF,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,YAAY,CAAA;AACrD,MAAAA,KAAAA,CAAK,YAAA,CAAa,iBAAA,EAAmB,MAAA,CAAO,eAAe,CAAA;AAC3D,MAAAA,KAAAA,CAAK,YAAA,CAAa,UAAA,EAAY,MAAA,CAAO,QAAQ,CAAA;AAI7C,MAAAA,KAAAA,CAAK,YAAA,CAAa,wBAAA,EAA0B,IAAA,CAAK,WAAW,CAAA;AAG5D,MAAA,MAAM,QAAA,GAAW,aAAA,IAAiBO,OAAAA,CAAQ,MAAA,EAAO;AACjD,MAAA,MAAM,OAAA,GAAUH,WAAAA,CAAY,UAAA,CAAW,QAAQ,CAAA;AAG/C,MAAA,MAAM,SAAA,GAAY,SAAS,QAAA,CAAS,YAAY,GAAG,KAAA,IAAS,aAAA,CAAc,IAAI,YAAY,CAAA;AAC1F,MAAA,MAAM,MAAA,GAAS,SAAS,QAAA,CAAS,SAAS,GAAG,KAAA,IAAS,aAAA,CAAc,IAAI,SAAS,CAAA;AACjF,MAAA,MAAM,QAAA,GAAW,SAAS,QAAA,CAAS,WAAW,GAAG,KAAA,IAAS,aAAA,CAAc,IAAI,WAAW,CAAA;AAEvF,MAAA,IAAI,SAAA,EAAW;AACb,QAAAJ,MAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,eAAe,SAAS,CAAA;AAAA,MAClE;AACA,MAAA,IAAI,MAAA,EAAQ;AACV,QAAAA,MAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,YAAY,MAAM,CAAA;AAAA,MAC5D;AACA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAAA,MAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,cAAc,QAAQ,CAAA;AAAA,MAChE;AAGA,MAAA,MAAM,UAAA,GAAa,OAAA,EAAS,QAAA,CAAS,aAAa,CAAA,EAAG,KAAA;AACrD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,KAAA,MAAW,GAAA,IAAO,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,EAAG;AACvC,UAAA,MAAM,QAAQ,OAAA,EAAS,QAAA,CAAS,CAAA,OAAA,EAAU,GAAG,EAAE,CAAA,EAAG,KAAA;AAClD,UAAA,IAAI,KAAA,EAAO;AACT,YAAAA,KAAAA,CAAK,aAAa,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,QAAA,EAAW,GAAG,IAAI,KAAK,CAAA;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,gBAAA,GAAmB,eAAe,0BAAA,EAA2B;AACnE,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,EAAG;AACnE,QAAAA,KAAAA,CAAK,YAAA,CAAa,OAAA,EAAS,SAAS,CAAA;AAAA,MACtC;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,wDAAwD,CAAC,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,EAA2B;AAAA,EAEjC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA0B;AACxB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AACF;ACpMA,IAAM,kBAAA,GAAqB,qBAAA;AAE3B,IAAM,wBAAA,GAA2B;AAAA,EAC/B,gCAAA;AAAA,EACA,wBAAA;AAAA,EACA,iCAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,IAAA;AAC3B,IAAM,oBAAA,GAAuB,GAAA;AAMtB,IAAM,gCAAN,MAA6D;AAAA,EAIlE,YAAY,0BAAA,EAAyC;AAFrD,IAAA,IAAA,CAAiB,gBAAA,uBAAkD,GAAA,EAAI;AAGrE,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,GAAA,CAAI,0BAA0B,CAAA;AAAA,EACpD;AAAA,EAEA,OAAA,CAAQA,OAAY,aAAA,EAA8B;AAChD,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAA,CAAkBA,OAAM,aAAa,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,MAAMA,KAAAA,EAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAC5B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,iBAAA,CAAkBA,OAAY,aAAA,EAA8B;AAClE,IAAA,MAAM,eAAe,IAAA,CAAK,oBAAA,CAAqB,aAAa,CAAA,IACvD,IAAA,CAAK,yBAAyBA,KAAI,CAAA;AAEvC,IAAA,MAAM,OAAA,GAAU,YAAA,KAAiB,IAAA,IAAQ,YAAA,KAAiB,kBAAA;AAE1D,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,iBAAiBA,KAAI,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,gBAAgBA,KAAI,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,iBAAiBA,KAAAA,EAAkB;AACzC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAYA,KAAI,CAAA;AACrC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,CAAA,EAAG;AACtC,MAAA,IAAA,CAAK,aAAaA,KAAI,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,gBAAgBA,KAAAA,EAAkB;AACxC,IAAA,IAAI,CAAC,IAAA,CAAK,6BAAA,CAA8BA,KAAI,CAAA,EAAG;AAC7C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,2BAAA,CAA4BA,KAAI,CAAA;AACvD,IAAA,IAAI,cAAc,IAAA,IAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA,EAAG;AACtD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAYA,KAAI,CAAA;AACrC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,OAAA,EAAS,EAAE,WAAW,IAAA,CAAK,GAAA,IAAO,CAAA;AAC5D,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACtB;AACA,IAAA,IAAA,CAAK,aAAaA,KAAI,CAAA;AAAA,EACxB;AAAA,EAEQ,qBAAqB,aAAA,EAAuC;AAClE,IAAA,MAAM,UAAA,GAAaD,KAAAA,CAAM,OAAA,CAAQ,aAAa,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,EAAA,GAAK,WAAW,WAAA,EAAY;AAClC,IAAA,IAAI,CAAC,EAAA,IAAM,EAAA,CAAG,MAAA,KAAW,kBAAA,EAAoB;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAA,CAAG,MAAA;AAAA,EACZ;AAAA,EAEQ,yBAAyBC,KAAAA,EAA2B;AAC1D,IAAA,MAAM,OAAA,GAAUA,KAAAA;AAChB,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,QAAQ,MAAA,IAAU,IAAA;AACjE,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,kBAAA,EAAoB;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,YAAYA,KAAAA,EAA0C;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAOA,KAAAA,CAAa,WAAA,IAAc,IAAMA,KAAAA,CAAa,OAAA;AAC3D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,OAAO,IAAI,OAAA,IAAW,IAAA;AAAA,MACxB;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,aAAaA,KAAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAAA,KAAAA,CAAK,YAAA,CAAa,kBAAA,EAAoB,IAAI,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,8BAA8BA,KAAAA,EAAqB;AACzD,IAAA,MAAM,OAAA,GAAUA,KAAAA;AAChB,IAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,sBAAA,IAA0B,OAAA,CAAQ,oBAAA;AAC5C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAgB,KAAA,CAAM,IAAA;AAC5B,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,IAAA,EAAM;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,yBAAyB,IAAA,CAAK,CAAC,WAAW,IAAA,CAAK,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,EAC1E;AAAA,EAEQ,4BAA4BA,KAAAA,EAA2B;AAC7D,IAAA,MAAM,OAAA,GAAUA,KAAAA;AAChB,IAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,sBAAA,IAA0B,OAAA,CAAQ,oBAAA;AAC5C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAgB,KAAA,CAAM,IAAA;AAC5B,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,IAAA,EAAM;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,KAAA,MAAW,UAAU,wBAAA,EAA0B;AAC7C,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAC3B,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACpC,QAAA,MAAM,OAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,IAAA,EAAK;AACjD,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,oBAAA;AAC5B,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,CAAA,IAAK,KAAK,gBAAA,EAAkB;AACpD,MAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAQ;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,kBAAA,EAAoB;AACtD,MAAA,MAAM,QAAQ,IAAA,CAAK,gBAAA,CAAiB,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAClD,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;ACvMA,IAAM,UAAA,GAAa,2CAAA;AACnB,IAAM,cAAA,GAAiB,+CAAA;AAEvB,IAAM,iBAAA,GAAoB,YAAA;AAC1B,IAAM,aAAA,GAAgB,QAAA;AAEtB,IAAM,mBAAA,GAAsB,2BAAA;AAC5B,IAAM,oBAAA,GAAuB,4BAAA;AAC7B,IAAM,oBAAA,GAAuB,4BAAA;AAC7B,IAAM,wBAAA,GAA2B,gCAAA;AAEjC,IAAM,gBAAA,GAAmB,kBAAA;AACzB,IAAM,iBAAA,GAAoB,mBAAA;AAE1B,IAAM,kBAAA,GAAqB,oBAAA;AAC3B,IAAM,mBAAA,GAAsB,qBAAA;AAE5B,IAAM,aAAA,GAAgB,GAAA;AAItB,SAAS,cAAc,QAAA,EAAuD;AAC5E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC/D,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,QAAA,CAAS,GAAA,CAAI,CAAC,CAAE,CAAC,CAAA;AAC3D;AAEA,SAAS,sBAAsB,GAAA,EAA6B;AAC1D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,eAAe,OAAO,GAAA;AAClE,IAAA,MAAM,SAAS,OAAO,GAAA,KAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AAC3D,IAAA,MAAM,OAAA,GACJ,UAAU,OAAO,MAAA,KAAW,YAAY,QAAA,IAAY,MAAA,GAC/C,OAAmC,MAAA,GACpC,MAAA;AACN,IAAA,OAAO,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EACvE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACF;AAEA,SAAS,uBAAuB,GAAA,EAA6B;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAA,GAAS,eAAe,OAAO,GAAA;AAClE,IAAA,MAAM,SAAS,OAAO,GAAA,KAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AAC3D,IAAA,MAAM,OAAA,GACJ,UAAU,OAAO,MAAA,KAAW,YAAY,SAAA,IAAa,MAAA,GAChD,OAAmC,OAAA,GACpC,MAAA;AACN,IAAA,OAAO,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EACvE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACF;AAEA,SAAS,QAAQ,CAAA,EAAqB;AACpC,EAAA,OAAO,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,EAAA;AAChD;AAEO,IAAM,kBAAN,MAA+C;AAAA,EACpD,OAAA,CAAQA,OAAY,cAAA,EAA+B;AACjD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAASA,KAAAA,CAAa,UAAA,IAAc,EAAC;AAC3C,MAAA,IAAI,EAAE,WAAW,KAAA,CAAA,EAAQ;AACvB,QAAAA,KAAAA,CAAK,YAAA,CAAa,OAAA,EAAS,EAAE,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,EAAE,YAAY,KAAA,CAAA,EAAQ;AACxB,QAAAA,KAAAA,CAAK,YAAA,CAAa,QAAA,EAAU,EAAE,CAAA;AAAA,MAChC;AACA,MAAA,IAAA,CAAK,kBAAkBA,KAAI,CAAA;AAAA,IAC7B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAMA,KAAAA,EAA0B;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GACHA,KAAAA,CAAa,WAAA,IAAgBA,KAAAA,CAAa,UAAA;AAC7C,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,IAAI,oBAAoB,KAAA,EAAO;AAC7B,UAAA,MAAM,SAAA,GAAY,MAAM,gBAAgB,CAAA;AACxC,UAAA,IAAI,CAAC,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvB,YAAA,KAAA,CAAM,OAAO,CAAA,GAAI,SAAA;AAAA,UACnB;AACA,UAAA,OAAO,MAAM,gBAAgB,CAAA;AAAA,QAC/B;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,wEAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,IAAI,qBAAqB,KAAA,EAAO;AAC9B,UAAA,MAAM,UAAA,GAAa,MAAM,iBAAiB,CAAA;AAC1C,UAAA,IAAI,CAAC,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxB,YAAA,KAAA,CAAM,QAAQ,CAAA,GAAI,UAAA;AAAA,UACpB;AACA,UAAA,OAAO,MAAM,iBAAiB,CAAA;AAAA,QAChC;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,0EAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,qEAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEQ,kBAAkBA,KAAAA,EAAkB;AAC1C,IAAA,MAAM,QAAA,GAA2BA,KAAAA,CAAK,YAAA,CAAa,IAAA,CAAKA,KAAI,CAAA;AAE5D,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,IAAA,MAAM,YAAA,GAAe,MACnB,OAAA,CAAA,CAAUA,KAAAA,CAAa,cAAc,EAAC,EAAG,OAAO,CAAC,CAAA;AAEnD,IAAA,MAAM,aAAA,GAAgB,MACpB,OAAA,CAAA,CAAUA,KAAAA,CAAa,cAAc,EAAC,EAAG,QAAQ,CAAC,CAAA;AAEpD,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAgC;AAC5D,MAAA,IAAI;AAEF,QAAA,MAAM,WAAA,GAAc,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AACvC,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,UAAA,MAAM,GAAA,GAAM,QAAA,CAAS,WAAA,CAAY,CAAC,GAAG,EAAE,CAAA;AACvC,UAAA,MAAM,KAAA,GAAQ,YAAY,CAAC,CAAA;AAC3B,UAAA,IAAI,CAAC,OAAA,EAAS,OAAA,mBAAU,IAAI,GAAA,EAAI;AAChC,UAAA,IAAI,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC3B,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,KAAA,GAAQ,EAAC;AACT,YAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,UACxB;AACA,UAAA,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC3B,UAAA,IAAI,YAAA,MAAkB,cAAA,EAAgB;AACpC,YAAA,QAAA,CAAS,OAAA,EAAS,aAAA,CAAc,OAAO,CAAC,CAAA;AACxC,YAAA,cAAA,GAAiB,IAAA;AAAA,UACnB;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAC/C,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,UAAA,MAAM,GAAA,GAAM,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,EAAE,CAAA;AAC3C,UAAA,MAAM,KAAA,GAAQ,gBAAgB,CAAC,CAAA;AAC/B,UAAA,IAAI,CAAC,WAAA,EAAa,WAAA,mBAAc,IAAI,GAAA,EAAI;AACxC,UAAA,IAAI,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAC/B,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,KAAA,GAAQ,EAAC;AACT,YAAA,WAAA,CAAY,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,UAC5B;AACA,UAAA,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC3B,UAAA,IAAI,aAAA,MAAmB,eAAA,EAAiB;AACtC,YAAA,QAAA,CAAS,QAAA,EAAU,aAAA,CAAc,WAAW,CAAC,CAAA;AAC7C,YAAA,eAAA,GAAkB,IAAA;AAAA,UACpB;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,UAAA,IAAI,cAAa,EAAG;AAClB,YAAA,QAAA,CAAS,OAAA,EAAS,qBAAA,CAAsB,KAAK,CAAC,CAAA;AAAA,UAChD;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,IAAI,QAAQ,yBAAA,EAA2B;AACrC,UAAA,IAAI,eAAc,EAAG;AACnB,YAAA,QAAA,CAAS,QAAA,EAAU,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAAA,UAClD;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,UAAA,IAAI,cAAa,EAAG;AAClB,YAAA,QAAA,CAAS,OAAA,EAAS,qBAAA,CAAsB,KAAK,CAAC,CAAA;AAAA,UAChD;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,UAAA,IAAI,eAAc,EAAG;AACnB,YAAA,QAAA,CAAS,QAAA,EAAU,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAAA,UAClD;AACA,UAAA,OAAOA,KAAAA;AAAA,QACT;AAGA,QAAA,IAAI,GAAA,CAAI,UAAA,CAAW,iBAAiB,CAAA,EAAG;AACrC,UAAA,MAAM,MAAA,GAAS,aAAA,GAAgB,GAAA,CAAI,KAAA,CAAM,kBAAkB,MAAM,CAAA;AACjE,UAAA,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,QAC/B;AAGA,QAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,UAAA,OAAO,QAAA,CAAS,sBAAsB,KAAK,CAAA;AAAA,QAC7C;AACA,QAAA,IAAI,QAAQ,oBAAA,EAAsB;AAChC,UAAA,OAAO,QAAA,CAAS,0BAA0B,KAAK,CAAA;AAAA,QACjD;AAGA,QAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,MAC5B,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sCAAA,EAAyC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA;AAC9D,QAAA,IAAI;AACF,UAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,QAC5B,CAAA,CAAA,MAAQ;AACN,UAAA,OAAOA,KAAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAACA,MAAa,YAAA,GAAe,OAAA;AAAA,EAC/B;AACF;;;AC7PO,IAAM,WAAA,GAAc,OAAA;;;ACUpB,SAAS,gBACd,KAAA,EACiC;AACjC,EAAA,OACE,SAAS,IAAA,IAAQ,OAAQ,KAAA,CAAc,MAAA,CAAO,aAAa,CAAA,KAAM,UAAA;AAErE;AAEO,SAAS,UAAuB,KAAA,EAAqC;AAC1E,EAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,OAAQ,KAAA,CAAc,IAAA,KAAS,UAAA;AACzD;AAEA,IAAM,mCAAmB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA;AAWrD,SAAS,iBAAA,CACd,QACA,SAAA,EACK;AACL,EAAA,SAAS,qBAAA,GAA0C;AACjD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AAC9C,IAAA,IAAI,IAAA,GAAO,KAAA;AAEX,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAA2B;AAC/C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,SAAS,MAAM,CAAA;AAAA,MAC3B,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,MAAM,KAAK,KAAA,EAAa;AACtB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,WAAA,CAAY,MAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAC,CAAA;AACrE,UAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,YAAA,IAAI;AACF,cAAA,SAAA,CAAU,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,YAClC,SAAS,CAAA,EAAG;AACV,cAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,YACjD;AAAA,UACF,CAAA,MAAO;AACL,YAAA,YAAA,CAAa,IAAI,CAAA;AAAA,UACnB;AACA,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,CAAA,EAAQ;AACf,UAAA,IAAI;AACF,YAAA,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,UACrB,CAAA,CAAA,MAAQ;AACN,YAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,UACjD;AACA,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAA,MAAM,CAAA;AAAA,QACR;AAAA,MACF,CAAA;AAAA,MACA,MAAM,OAAO,KAAA,EAAa;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,WAAA;AAAA,YAC7B,MAAM,SAAS,MAAA,GAAS,KAAK,KAAK,EAAE,IAAA,EAAM,MAAe,KAAA;AAAM,WACjE;AACA,UAAA,YAAA,CAAa,IAAI,CAAA;AACjB,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,CAAA,EAAQ;AACf,UAAA,IAAI;AACF,YAAA,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,UACrB,CAAA,CAAA,MAAQ;AACN,YAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,UACjD;AACA,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAA,MAAM,CAAA;AAAA,QACR;AAAA,MACF,CAAA;AAAA,MACA,MAAM,MAAM,CAAA,EAAS;AACnB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,WAAA,CAAY,MAAM;AAC/C,YAAA,IAAI,QAAA,CAAS,KAAA,EAAO,OAAO,QAAA,CAAS,MAAM,CAAC,CAAA;AAC3C,YAAA,MAAM,CAAA;AAAA,UACR,CAAC,CAAA;AACD,UAAA,IAAI,MAAA,CAAO,IAAA,EAAM,YAAA,CAAa,IAAI,CAAA;AAClC,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI;AACF,YAAA,SAAA,CAAU,QAAQ,GAAG,CAAA;AAAA,UACvB,CAAA,CAAA,MAAQ;AACN,YAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,GAAG,CAAA;AAAA,UACnD;AACA,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,GAA0C,IAAA;AAE9C,EAAA,OAAO,IAAI,MAAM,MAAA,EAAQ;AAAA,IACvB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,KAAS,OAAO,aAAA,EAAe;AACjC,QAAA,OAAO,MAAM,qBAAA,EAAsB;AAAA,MACrC;AACA,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1D,QAAA,IAAI,CAAC,cAAA,EAAgB,cAAA,GAAiB,qBAAA,EAAsB;AAC5D,QAAA,OAAQ,cAAA,CAAuB,IAAI,CAAA,CAAE,IAAA,CAAK,cAAc,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,MAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AASO,SAAS,WAAA,CACd,OAAA,EACA,SAAA,EACA,OAAA,EACK;AACL,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,SAAS,aAAa,MAAA,EAAwB;AAC5C,IAAA,IAAI,SAAA,EAAW;AACf,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA,IAAI;AACF,MAAA,SAAA,CAAU,SAAS,MAAM,CAAA;AAAA,IAC3B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAM,uBAAuB,YAAY;AACvC,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,MAAM,OAAA;AACpB,MAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,QAAA,OAAO,iBAAA,CAAkB,OAAc,SAAS,CAAA;AAAA,MAClD;AACA,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AAAA,MAC7B,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,MACnD;AACA,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,MACzB,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,KAAK,CAAA;AAAA,MACrD;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA,GAAG;AAEH,EAAA,IAAI,CAAC,SAAS,gBAAA,EAAkB;AAC9B,IAAA,OAAO,mBAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAW,OAAA,CAAQ,gBAAA;AACzB,EAAA,OAAO,IAAI,MAAM,mBAAA,EAAqB;AAAA,IACpC,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAA,IAAW,SAAS,SAAA,EAAW;AAC7D,QAAA,MAAMqB,MAAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,QAAA,IAAI,OAAOA,MAAAA,KAAU,UAAA,EAAY,OAAOA,MAAAA,CAAM,KAAK,MAAM,CAAA;AACzD,QAAA,OAAOA,MAAAA;AAAA,MACT;AACA,MAAA,MAAM,aAAA,GAAiB,SAAiB,IAAI,CAAA;AAC5C,MAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,QAAA,IAAI,OAAO,aAAA,KAAkB,UAAA;AAC3B,UAAA,OAAO,aAAA,CAAc,KAAK,QAAQ,CAAA;AACpC,QAAA,OAAO,aAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,MAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;AAQO,SAAS,YAAA,CACd,QAAA,EACA,SAAA,EACA,OAAA,EACG;AACH,EAAA,IAAI,eAAA,CAAgB,QAAQ,CAAA,EAAG;AAC7B,IAAA,OAAO,iBAAA,CAAkB,UAAiB,SAAS,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,IAAA,OAAO,WAAA,CAAY,QAAA,EAAiB,SAAA,EAAW,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,YAAY,QAAQ,CAAA;AAAA,EAChC,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,IAAI;AACF,IAAA,SAAA,CAAU,SAAS,IAAI,CAAA;AAAA,EACzB,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,QAAA;AACT;;;ACtOO,IAAMC,eAAAA,GAAiB;AAAA,EAC5B,UAAA,EAAY,eAAA;AAAA,EAEZ,gBAAA,EAAkB,kBAAA;AAAA,EAClB,iBAAA,EAAmB,sBAAA;AAAA,EACnB,sBAAA,EAAwB,2BAAA;AAAA,EACxB,uBAAA,EAAyB,4BAAA;AAAA,EACzB,iBAAA,EAAmB,sBAAA;AAAA,EACnB,qBAAA,EAAuB,0BAAA;AAAA,EACvB,4BAAA,EAA8B,iCAAA;AAAA,EAC9B,qBAAA,EAAuB,0BAAA;AAAA,EACvB,mBAAA,EAAqB,wBAAA;AAAA,EAErB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,0BAAA,EAA4B,4BAAA;AAAA,EAE5B,uBAAA,EAAyB,4BAAA;AAAA,EACzB,2BAAA,EAA6B,gCAAA;AAAA,EAC7B,iCAAA,EAAmC,sCAAA;AAAA,EACnC,qCAAA,EACE,0CAAA;AAAA,EACF,0BAAA,EAA4B,+BAAA;AAAA,EAC5B,sBAAA,EAAwB,wBAAA;AAAA,EAExB,qBAAA,EAAuB,uBAAA;AAAA,EACvB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,uBAAA,EAAyB,yBAAA;AAAA,EACzB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,eAAA,EAAiB,mBAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA;ACLA,IAAM,6CAA6B,IAAI,GAAA,CAAY,CAAC,MAAA,EAAQ,OAAA,EAAS,cAAc,CAAC,CAAA;AAE7E,SAAS,sBAAsB,IAAA,EAA6C;AACjF,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC5B,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,EAAA,EAAI,OAAO,MAAA;AAC5C,EAAA,IAAI,0BAAA,CAA2B,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,GAAA;AAChD,EAAA,OAAO,MAAA;AACT;AAGA,IAAM,4BAAA,0BAAsC,gCAAgC,CAAA;AAErE,SAAS,6BAAA,GAAyC;AACvD,EAAA,MAAM,GAAA,GAAMf,QAAQ,MAAA,EAAO;AAC3B,EAAA,OAAO,GAAA,CAAI,QAAA,CAAS,4BAA4B,CAAA,KAAM,IAAA;AACxD;AAUO,SAAS,YAAA,CAAgB,MAAA,EAAgB,GAAA,EAAa,KAAA,EAAgB;AAC3E,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,GAAA,EAAK;AAAA,IACjC,KAAA;AAAA,IACA,QAAA,EAAU,IAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,YAAA,EAAc;AAAA,GACf,CAAA;AACH;AAEO,SAAS,OAAO,CAAA,EAAsC;AAC3D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChE;AAEO,SAAS,YAAY,GAAA,EAAuC;AACjE,EAAA,IAAI,OAAO,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,SAAiB,EAAC;AAEpD,EAAA,IACE,QAAA,IAAY,GAAA,IACZ,OAAQ,GAAA,CAA6B,WAAW,UAAA,EAChD;AACA,IAAA,OAAQ,IAAkC,MAAA,EAAO;AAAA,EAInD;AAEA,EAAA,IAAI,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,KAAM,OAAO,SAAA,EAAW;AACnD,IAAA,OAAO,EAAE,GAAI,GAAA,EAAgC;AAAA,EAC/C;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAYO,SAAS,qBAAA,GAAiC;AAC/C,EAAA,MAAM,MACJ,OAAA,CAAQ,GAAA,CAAI,uBAAA,IACZ,OAAA,CAAQ,IAAI,mBAAA,IACZ,EAAA;AACF,EAAA,OAAO,CAAC,KAAK,MAAM,CAAA,CAAE,SAAS,MAAA,CAAO,GAAG,CAAA,CAAE,WAAA,EAAa,CAAA;AACzD;AAMO,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,KAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAM,MAAA,GAAS,CAAA;AACrD,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,MAAM,MAAA,GAAS,CAAA;AAChD,EAAA,OAAO,IAAA;AACT;AAGA,IAAM,mBAAA,GAA8C;AAAA,EAClD,OAAOe,eAAAA,CAAe,iBAAA;AAAA,EACtB,aAAaA,eAAAA,CAAe,uBAAA;AAAA,EAC5B,YAAYA,eAAAA,CAAe,sBAAA;AAAA,EAC3B,uBAAuBA,eAAAA,CAAe,sBAAA;AAAA,EACtC,mBAAmBA,eAAAA,CAAe,sBAAA;AAAA,EAClC,sBAAsBA,eAAAA,CAAe,sBAAA;AAAA,EACrC,mBAAmBA,eAAAA,CAAe,qBAAA;AAAA,EAClC,kBAAkBA,eAAAA,CAAe,oBAAA;AAAA,EACjC,kBAAkBA,eAAAA,CAAe,4BAAA;AAAA,EACjC,MAAMA,eAAAA,CAAe,uBAAA;AAAA,EACrB,QAAQA,eAAAA,CAAe,gBAAA;AAAA,EACvB,OAAOA,eAAAA,CAAe;AACxB,CAAA;AAEA,SAAS,cAAA,CAAetB,OAAY,MAAA,EAAuC;AACzE,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC7D,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAAA,KAAAA,CAAK,YAAA,CAAa,IAAA,EAAM,KAAY,CAAA;AAAA,IACtC;AAAA,EACF;AACF;AAWO,SAAS,kBAAA,CACd,QACA,WAAA,EACiB;AACjB,EAAA,MAAM,WAA4B,EAAC;AAEnC,EAAA,IAAI,WAAA,KAAgB,MAAA,IAAU,WAAA,KAAgB,MAAA,EAAQ;AACpD,IAAA,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,EAAG;AAC7B,MAAA,MAAM,aAAA,GACJ,OAAO,MAAA,CAAO,MAAA,KAAW,WACrB,MAAA,CAAO,MAAA,GACP,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AACjC,MAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,eAAe,CAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,cAAc,MAAA,CAAO,QAAA;AAC3B,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,QAAA;AACxC,IAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,MAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,IAAK,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,IAAK,CAAC,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AACrE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACtD,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,OAAA,EAAS,aAAA,CAAc,GAAA,CAAI,OAAO;AAAA,SACnC,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,eAAe,CAAC,CAAA,KACpB,OAAO,CAAC,CAAA,IAAK,EAAE,IAAA,KAAS,aAAA;AAE1B,MAAA,MAAM,UAAA,GAAa,IAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,YAAA,CAAa,CAAC,CAAC,CAAA;AAE7D,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,cAAc,UAAU;AAAA,SAClC,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,MAAW,KAAA,IAAS,IAAI,OAAA,EAAS;AAC/B,QAAA,IAAI,CAAC,YAAA,CAAa,KAAK,CAAA,EAAG;AAE1B,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,MAAA;AAAA,UACN,SAAS,aAAA,CAAc;AAAA,YACrB,aAAa,KAAA,CAAM,WAAA;AAAA,YACnB,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,QAAA,EAAU,MAAM,QAAA,IAAY;AAAA,WAC9B,EAAG,OAAO,oBAAoB;AAAA,SAC/B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,gBAAgB,UAAA,EAAY;AACrC,IAAA,IAAI,UAAA,CAAW,MAAA,CAAO,YAAY,CAAA,EAAG;AACnC,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,EAAG,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,MAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,IAChD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG;AAClB,QAAA,IAAI,WAAW,GAAA,CAAI,IAAI,KAAK,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AACnD,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,YACZ,MAAM,GAAA,CAAI,IAAA;AAAA,YACV,OAAA,EAAS,aAAA,CAAc,GAAA,CAAI,OAAO;AAAA,WACnC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW;AAEtC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AACpC,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,IACzC;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,MAAA;AACrC,IAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,KAAA,EAAO,MAAA,CAAO,oBAAoB,CAAA;AAChE,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAWO,SAAS,oBACd,QAAA,EACiB;AACjB,EAAA,MAAM,WAA4B,EAAC;AAInC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,IAAA,KAAA,MAAW,MAAA,IAAU,SAAS,OAAA,EAAuC;AACnE,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,KAAA;AACrC,MAAA,IAAI,CAAC,GAAA,EAAK;AAEV,MAAA,IAAI,WAAW,GAAA,CAAI,IAAI,KAAK,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AACnD,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,SAAS,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG,CAAA;AAAA,MAChE;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,EAAG;AACjC,QAAA,KAAA,MAAW,EAAA,IAAM,IAAI,UAAA,EAA8C;AACjE,UAAA,MAAM,KAAK,EAAA,CAAG,QAAA;AACd,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,YACZ,IAAA,EAAM,MAAA;AAAA,YACN,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,cACtB,IAAA,EAAM,IAAI,IAAA,IAAQ,EAAA;AAAA,cAClB,SAAA,EAAW,IAAI,SAAA,IAAa;AAAA,aAC7B;AAAA,WACF,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAMA,EAAA,MAAM,gBACJ,OAAO,QAAA,CAAS,gBAAgB,QAAA,IAAY,QAAA,CAAS,YAAY,MAAA,GAAS,CAAA;AAC5E,EAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AAEpD,EAAA,IAAI,iBAAiB,cAAA,EAAgB;AACnC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,IAAA,EAAM,WAAA;AAAA,QACN,SAAS,QAAA,CAAS;AAAA,OACnB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,KAAA,MAAW,OAAA,IAAW,SAAS,MAAA,EAA0C;AACvE,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrC,QAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,OAAA,EAA2C;AAErE,UAAA,IAAI,CAAC,aAAA,IAAiB,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,EAAG;AAC5C,YAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA;AAAA,UAClE;AAEA,UAAA,IACG,KAAA,CAAc,IAAA,KAAS,UAAA,IACvB,KAAA,CAAc,IAAA,EACf;AACA,YAAA,QAAA,CAAS,IAAA,CAAK;AAAA,cACZ,IAAA,EAAM,MAAA;AAAA,cACN,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,gBACtB,MAAO,KAAA,CAAc,IAAA;AAAA,gBACrB,OAAQ,KAAA,CAAc;AAAA,eACvB;AAAA,aACF,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAIA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,IAAA,KAAA,MAAW,KAAA,IAAS,SAAS,OAAA,EAAuB;AAClD,MAAA,IAAI,MAAM,IAAA,KAAS,MAAA,IAAU,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,EAAG;AACnD,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,MAAM,IAAA,EAAM;AAClD,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,EAAE,EAAA,EAAI,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,OAAO;AAAA,SAC/E,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAOO,SAAS,qBAAA,CACdA,OACA,QAAA,EACM;AACN,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAE3B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,CAAC,CAAA,KAAA,CAAA;AAAA,MAClC,GAAA,CAAI;AAAA,KACN;AACA,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,CAAC,CAAA,QAAA,CAAA;AAAA,MAClC,GAAA,CAAI;AAAA,KACN;AAAA,EACF;AAEA,EAAAtB,MAAK,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA;AACrD;AASO,SAAS,yBAAA,CACdA,OACA,QAAA,EACM;AACN,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAE3B,EAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAQ;AAEvB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,IAAI,MAAA,CAAO,EAAA;AAAA,UACX,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,WAAW,MAAA,CAAO;AAAA,SACpB;AACA,QAAAA,KAAAA,CAAK,YAAA;AAAA,UACH,8BAA8B,aAAa,CAAA,KAAA,CAAA;AAAA,UAC3C;AAAA,SACF;AACA,QAAAA,KAAAA,CAAK,YAAA;AAAA,UACH,8BAA8B,aAAa,CAAA,QAAA,CAAA;AAAA,UAC3C,IAAA,CAAK,UAAU,QAAQ;AAAA,SACzB;AACA,QAAA,aAAA,EAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAAA,MACnD;AAAA,IACF,CAAA,MAAO;AACL,MAAAA,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,aAAa,CAAA,KAAA,CAAA;AAAA,QAClD,GAAA,CAAI;AAAA,OACN;AACA,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,aAAa,CAAA,QAAA,CAAA;AAAA,QAClD,GAAA,CAAI;AAAA,OACN;AACA,MAAA,aAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAAtB,MAAK,YAAA,CAAa,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA;AACtD;AAGO,SAAS,oBAAA,CACdA,KAAAA,EACA,MAAA,EACA,WAAA,EACA,MAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AAGzB,EAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,gBAAA,EAAkB,WAAW,CAAA;AAC9D,EAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,UAAA,EAAY,MAAM,CAAA;AAEnD,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,mBAAmB,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC1E;AAGA,EAAA,cAAA,CAAetB,OAAM,MAAM,CAAA;AAG3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAC/B,IAAAA,KAAAA,CAAK,aAAa,OAAA,EAAS,aAAA,CAAc,OAAO,KAAA,EAAO,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,EAClF;AAGA,EAAA,IAAI,MAAA,CAAO,cAAc,MAAA,EAAW;AAClC,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,qBAAA;AAAA,MACf,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,SAAS;AAAA,KACjC;AAAA,EACF;AAGA,EAAA,IAAI,uBAAsB,EAAG;AAC3B,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,EAAQ,WAAW,CAAA;AACvD,IAAA,qBAAA,CAAsBtB,OAAM,QAAQ,CAAA;AAGpC,IAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW;AAC/B,MAAAA,KAAAA,CAAK,YAAA;AAAA,QACH,oBAAA;AAAA,QACA,aAAA,CAAc,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,oBAAoB;AAAA,OAC1D;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,qBAAA,CACdA,OACA,QAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AAGzB,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAAA,MAAK,YAAA,CAAa,iBAAA,EAAmB,MAAA,CAAO,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,EAC1D;AAGA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,IAAU,QAAA,CAAS,iBAAA,EAA2B,KAAA;AACrE,EAAA,IAAI,KAAA,EAAO;AACT,IAAAA,MAAK,YAAA,CAAasB,eAAAA,CAAe,kBAAA,EAAoB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACpE;AAGA,EAAA,kBAAA,CAAmBtB,OAAM,QAAQ,CAAA;AAGjC,EAAA,eAAA,CAAgBA,OAAM,QAAQ,CAAA;AAG9B,EAAA,wBAAA,CAAyBA,OAAM,QAAQ,CAAA;AAGvC,EAAA,IAAI,uBAAsB,EAAG;AAC3B,IAAA,MAAM,QAAA,GAAW,oBAAoB,QAAQ,CAAA;AAC7C,IAAA,yBAAA,CAA0BA,OAAM,QAAQ,CAAA;AAAA,EAC1C;AACF;AAGA,SAAS,eAAA,CAAgBA,OAAY,QAAA,EAAyC;AAC5E,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,0BAAA;AAAA,MACf,MAAA,CAAO,SAAS,WAAW;AAAA,KAC7B;AACA,IAAAtB,MAAK,YAAA,CAAa,+BAAA,EAAiC,MAAA,CAAO,QAAA,CAAS,WAAW,CAAC,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AAGzB,EAAA,IAAI,MAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChD,IAAA,MAAM,SAAS,OAAA,CAAQ,CAAC,EAAE,aAAA,IAAiB,OAAA,CAAQ,CAAC,CAAA,CAAE,YAAA;AACtD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAAA,MAAK,YAAA,CAAasB,eAAAA,CAAe,0BAAA,EAA4B,MAAA,CAAO,MAAM,CAAC,CAAA;AAC3E,MAAAtB,KAAAA,CAAK,YAAA,CAAa,+BAAA,EAAiC,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACnE;AAAA,EACF;AACF;AAEA,SAAS,kBAAA,CACPA,OACA,QAAA,EACM;AACN,EAAA,MAAM,KAAA,GAAS,QAAA,CAAS,KAAA,IAAS,QAAA,CAAS,cAAA;AAG1C,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,aAAA,IAAiB,KAAA,CAAM,YAAA;AAClD,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,uBAAA;AAAA,MACf,OAAO,YAAY;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,iBAAA,IAAqB,KAAA,CAAM,aAAA;AAC1D,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAClC,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,2BAAA;AAAA,MACf,OAAO,gBAAgB;AAAA,KACzB;AAAA,EACF;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,YAAA;AAC1B,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,sBAAA;AAAA,MACf,OAAO,WAAW;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,MAAM,kBACJ,KAAA,CAAM,uBAAA,IAAA,CAEH,KAAA,CAAM,qBAAA,IAAyB,MAAM,oBAAA,GAGrC,aAAA;AACL,EAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,iCAAA;AAAA,MACf,OAAO,eAAe;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,MAAM,sBAAsB,KAAA,CAAM,2BAAA;AAClC,EAAA,IAAI,wBAAwB,MAAA,EAAW;AACrC,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,qCAAA;AAAA,MACf,OAAO,mBAAmB;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAA,CACH,KAAA,CAAM,yBAAA,IAA6B,KAAA,CAAM,qBAAA,GAGzC,gBAAA;AACH,EAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,0BAAA;AAAA,MACf,OAAO,eAAe;AAAA,KACxB;AAAA,EACF;AACF;AAEA,SAAS,wBAAA,CACPtB,OACA,QAAA,EACM;AACN,EAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA,CAAK,WAAW,CAAA,EAAG;AAE/C,EAAAA,KAAAA,CAAK,YAAA,CAAa,8BAAA,EAAgC,IAAA,CAAK,MAAM,CAAA;AAE7D,EAAA,MAAM,SAAA,GAAY,KAAK,CAAC,CAAA;AACxB,EAAA,MAAM,YAAY,SAAA,EAAW,SAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,IAAAA,KAAAA,CAAK,YAAA,CAAa,mCAAA,EAAqC,SAAA,CAAU,MAAM,CAAA;AAAA,EACzE;AACF;;;AChmBO,IAAM,UAAA,GAAa;AAAA,EACxB,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ,kBAAA;AAAA,EACR,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAa,uBAAA;AAAA,EACb,gBAAA,EAAkB;AACpB,CAAA;;;ACAO,SAAS,kBAAA,CACd,gBAAA,EACA,KAAA,EACAA,KAAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,eAAA,EAAiB;AACpB,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,UAAA,gBAAA,CAAiB,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA;AAAA,QACzC;AACA,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,UAAA,gBAAA,CAAiB,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA;AAAA,QACzC;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,qBAAA,EAAuB;AAC1B,QAAA,IAAI,CAAC,iBAAiB,OAAA,EAAS;AAC7B,UAAA,gBAAA,CAAiB,UAAU,EAAC;AAAA,QAC9B;AACA,QAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,QAAA,IAAI,CAAC,KAAA,EAAO;AACZ,QAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7B,UAAA,gBAAA,CAAiB,QAAQ,IAAA,CAAK;AAAA,YAC5B,IAAA,EAAM,UAAA;AAAA,YACN,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,QAAQ,IAAA,CAAK;AAAA,YAC5B,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,IAAA,EAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,qBAAA,EAAuB;AAC1B,QAAA,IACE,CAAC,gBAAA,CAAiB,OAAA,IAClB,gBAAA,CAAiB,OAAA,CAAQ,WAAW,CAAA,EACpC;AACA,UAAA,gBAAA,CAAiB,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,QACxD;AACA,QAAA,MAAM,WAAA,GACJ,KAAA,CAAM,KAAA,IAAS,gBAAA,CAAiB,QAAQ,MAAA,GAAS,CAAA;AACnD,QAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,OAAA,CAAQ,WAAW,CAAA;AACxD,QAAA,IAAI,CAAC,WAAA,EAAa;AAElB,QAAA,IACE,MAAM,KAAA,EAAO,IAAA,KAAS,kBAAA,IACtB,WAAA,CAAY,SAAS,UAAA,EACrB;AACA,UAAA,WAAA,CAAY,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB,EAAA;AAAA,QACnD,CAAA,MAAA,IAAW,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM;AAC5B,UAAA,WAAA,CAAY,IAAA,IAAQ,MAAM,KAAA,CAAM,IAAA;AAAA,QAClC;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,oBAAA,EAAsB;AACzB,QAAA,MAAM,SAAS,gBAAA,CAAiB,OAAA;AAChC,QAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC/B,UAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC9C,UAAA,IACE,eAAe,IAAA,KAAS,UAAA,IACxB,OAAO,aAAA,CAAc,UAAU,QAAA,EAC/B;AACA,YAAA,IAAI;AACF,cAAA,aAAA,CAAc,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,KAAK,CAAA;AAAA,YACtD,CAAA,CAAA,MAAQ;AACN,cAAA,MAAA,CAAO,IAAA;AAAA,gBACL;AAAA,eACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,eAAA,EAAiB;AACpB,QAAA,IAAI,KAAA,CAAM,OAAO,WAAA,EAAa;AAC5B,UAAA,gBAAA,CAAiB,WAAA,GAAc,MAAM,KAAA,CAAM,WAAA;AAAA,QAC7C;AACA,QAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,EAAO,KAAA;AAC9C,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,gBAAA,CAAiB,KAAA,GAAQ;AAAA,YACvB,GAAI,gBAAA,CAAiB,KAAA,IAAS,EAAC;AAAA,YAC/B,GAAG;AAAA,WACL;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,cAAA,EAAgB;AACnB,QAAA,IAAI,MAAM,KAAA,EAAO;AACf,UAAA,gBAAA,CAAiB,KAAA,GAAQ;AAAA,YACvB,GAAI,gBAAA,CAAiB,KAAA,IAAS,EAAC;AAAA,YAC/B,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA;AAGF,IAAA,IAAI,MAAA,CAAO,aAAY,EAAG;AACxB,MAAAA,KAAAA,CAAK,SAAS,8BAAA,EAAgC;AAAA,QAC5C,cAAc,KAAA,CAAM;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,2DAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAKO,SAAS,kBAAA,CACdA,KAAAA,EACA,gBAAA,EACA,SAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAEzB,IAAAuB,uBAAsBvB,KAAAA,EAAM;AAAA,MAC1B,OAAO,gBAAA,CAAiB,KAAA;AAAA,MACxB,SAAS,gBAAA,CAAiB,OAAA;AAAA,MAC1B,OAAO,gBAAA,CAAiB,KAAA;AAAA,MACxB,aAAa,gBAAA,CAAiB;AAAA,KAC/B,CAAA;AAED,IAAAA,KAAAA,CAAK,YAAA,CAAa,uBAAA,EAAA,CAA0B,OAAA,GAAU,aAAa,GAAI,CAAA;AACvE,IAAAA,KAAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAAA,EACzB,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,2DAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,SAAE;AACA,IAAAA,MAAK,GAAA,EAAI;AAAA,EACX;AACF;AAEO,SAASwB,qBAAAA,CACdxB,KAAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,MAAA,MAAA,CAAO,IAAI,uBAAuB,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,oBAAA,CAAyBA,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,WAAW,CAAA;AAAA,EACjE,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,6DAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAASuB,sBAAAA,CACdvB,OACA,QAAA,EACM;AACN,EAAA,IAAI;AACF,IAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,MAAA,MAAA,CAAO,IAAI,uBAAuB,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU,SAAS,eAAA,EAAiB;AACtC,MAAAA,KAAAA,CAAK,YAAA,CAAa,QAAA,EAAU,QAAA,EAAU,iBAA2B,CAAA;AAAA,IACnE;AACA,IAAA,qBAAA,CAA0BA,OAAM,QAAQ,CAAA;AAAA,EAC1C,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,8DAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;;;AC7KA,IAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,MAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,yBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,qBAAA,uBAA4B,GAAA,CAAI;AAAA,EACpC,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,oBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,gDAAgC,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC3E,IAAM,2CAA2B,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,gBAAgB,CAAC,CAAA;AAClE,IAAM,qCAAqB,IAAI,GAAA,CAAI,CAAC,cAAA,EAAgB,MAAA,EAAQ,WAAW,CAAC,CAAA;AAExE,IAAM,qBAAA,uBAA4B,GAAA,CAAI;AAAA,EACpC,SAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,oBAAA,GAAuB,IAAA;AAOtB,SAAS,iBAAA,CACd,KAAA,EACA,MAAA,EACA,aAAA,EACO;AACP,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,OAAO,IAAA,CAAK,GAAA,KAAQ,UAAA,EAAY,OAAO,IAAA;AAE3C,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AACzB,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,IAAQ,cAAA;AAE9B,IAAA,MAAM,UAAA,GAAa,eAEjB,KAAA,EACA,UAAA,EACA;AACA,MAAA,MAAM,SAAA,GAAY,UAAA,EAAY,OAAA,EAAS,EAAA,IAAM,YAAY,YAAA,EAAc,EAAA;AACvE,MAAA,MAAM,eAAe,qBAAA,EAAsB;AAC3C,MAAA,MAAM,KAAA,GAAgC;AAAA,QACpC,iBAAA,EAAmB,MAAA;AAAA,QACnB,CAACsB,eAAAA,CAAe,qBAAqB,GAAG;AAAA,OAC1C;AACA,MAAA,IAAI,SAAA,EAAW,KAAA,CAAMA,eAAAA,CAAe,mBAAmB,CAAA,GAAI,SAAA;AAC3D,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,KAAA,CAAM,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,oBAAoB,CAAA;AAAA,MACzD;AAEA,MAAA,MAAMtB,QAAO,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA;AAAA,QACA,EAAE,IAAA,EAAMW,QAAAA,CAAS,QAAA,EAAU,YAAY,KAAA,EAAM;AAAA,QAC7C;AAAA,OACF;AAEA,MAAA,MAAM,OAAA,GAAUZ,KAAAA,CAAM,OAAA,CAAQ,aAAA,EAAeC,KAAI,CAAA;AACjD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAMO,OAAAA,CAAQ,IAAA;AAAA,UAAK,OAAA;AAAA,UAAS,MACzC,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,OAAO,UAAU;AAAA,SAC1C;AACA,QAAA,IAAI,YAAA,EAAc;AAChB,UAAAP,KAAAA,CAAK,YAAA;AAAA,YACH,QAAA;AAAA,YACA,aAAA,CAAc,QAAQ,oBAAoB;AAAA,WAC5C;AAAA,QACF;AACA,QAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAAzB,MAAK,SAAA,CAAU;AAAA,UACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,UACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC/D,CAAA;AACD,QAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,QAAA,MAAM,KAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAAA,MAAK,GAAA,EAAI;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,MACrB,MAAA,CAAO,eAAe,IAAI,CAAA;AAAA,MAC1B,MAAA,CAAO,0BAA0B,IAAI;AAAA,KACvC;AACA,IAAA,OAAA,CAAQ,GAAA,GAAM,UAAA;AACd,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AACH;AAOA,IAAM,uBAAN,MAA2B;AAAA,EAgBzB,YACEA,KAAAA,EACA,aAAA,EACA,SAAA,EACA,aAAA,EACA,aACA,aAAA,EACA;AAtBF,IAAA,IAAA,CAAQ,gBAAA,GAAwC;AAAA,MAC9C,SAAS,EAAC;AAAA,MACV,KAAA,EAAO,EAAA;AAAA,MACP,OAAO;AAAC,KACV;AAOA,IAAA,IAAA,CAAQ,aAAA,GAAgB,KAAA;AACxB,IAAA,IAAA,CAAQ,iBAAA,GAAoB,KAAA;AAC5B,IAAA,IAAA,CAAQ,WAAA,uBAAkB,OAAA,EAA2C;AAUnE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AACjD,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AACjD,IAAA,YAAA;AAAA,MACE,IAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAeD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAUP,KAAI;AAAA,KACrD;AACA,IAAA,YAAA,CAAa,IAAA,EAAM,eAAA,EAAiB,aAAA,IAAiBO,OAAAA,CAAQ,QAAQ,CAAA;AAErE,IAAA,IAAA,CAAK,0BAAA,EAA2B;AAEhC,IAAA,OAAO,IAAI,MAAM,IAAA,EAAM;AAAA,MACrB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,OAAO,MAAM,MAAA,CAAO,gBAAA;AAAA,QACtB;AAEA,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC3D,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,QAC3C;AAEA,QAAA,IAAI,IAAA,KAAS,OAAO,aAAA,EAAe;AACjC,UAAA,OAAO,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,QACjD;AAEA,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/D,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA;AACxC,UAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA;AAEzC,UAAA,IAAI,6BAAA,CAA8B,GAAA,CAAI,IAAI,CAAA,EAAG;AAC3C,YAAA,OAAO,SAAU,OAAe,QAAA,EAAoB;AAClD,cAAA,MAAM,eAAA,GAAkB,IAAI,IAAA,KAAgB;AAC1C,gBAAA,IAAI;AACF,kBAAA,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,CAAA,oBAAA,EAAuB,KAAK,CAAA,CAAA,EAAI;AAAA,oBACnD,YAAA,EAAc;AAAA,mBACf,CAAA;AACD,kBAAA,IAAI,sBAAsB,GAAA,CAAI,KAAK,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AAC/C,oBAAA,MAAA,CAAO,gBAAA,CAAiB,KAAA,EAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,kBACxC;AAAA,gBACF,SAAS,CAAA,EAAG;AACV,kBAAA,MAAA,CAAO,KAAA;AAAA,oBACL,uDAAA;AAAA,oBACA;AAAA,mBACF;AAAA,gBACF;AACA,gBAAA,OAAO,QAAA,CAAS,GAAG,IAAI,CAAA;AAAA,cACzB,CAAA;AAEA,cAAA,IAAI,QAAA,GAAW,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAC9C,cAAA,IAAI,CAAC,QAAA,EAAU;AACb,gBAAA,QAAA,uBAAe,GAAA,EAAI;AACnB,gBAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,QAAQ,CAAA;AAAA,cAC3C;AACA,cAAA,IAAI,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACjC,cAAA,IAAI,CAAC,QAAA,EAAU;AACb,gBAAA,QAAA,GAAW,EAAC;AACZ,gBAAA,QAAA,CAAS,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,cAC9B;AACA,cAAA,QAAA,CAAS,KAAK,eAAe,CAAA;AAE7B,cAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,aAAA,EAAe,OAAO,eAAe,CAAA;AAAA,YACjE,CAAA;AAAA,UACF;AACA,UAAA,IAAI,wBAAA,CAAyB,GAAA,CAAI,IAAI,CAAA,EAAG;AACtC,YAAA,OAAO,SAAU,OAAe,QAAA,EAAoB;AAClD,cAAA,MAAM,QAAA,GAAW,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AAChD,cAAA,MAAM,QAAA,GAAW,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AACpC,cAAA,MAAM,OAAA,GAAU,QAAA,EAAU,KAAA,EAAM,IAAK,QAAA;AACrC,cAAA,IAAI,YAAY,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,QAAA,EAAU,OAAO,KAAK,CAAA;AAC7D,cAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,aAAA,EAAe,OAAO,OAAO,CAAA;AAAA,YACzD,CAAA;AAAA,UACF;AACA,UAAA,IAAI,SAAS,oBAAA,EAAsB;AACjC,YAAA,OAAO,SAAU,KAAA,EAAgB;AAC/B,cAAA,MAAA,CAAO,WAAA,uBAAkB,OAAA,EAAQ;AACjC,cAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,aAAA,EAAe,KAAK,CAAA;AAAA,YAChD,CAAA;AAAA,UACF;AACA,UAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAAA,QACzC;AAEA,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC5D,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA;AACxC,UAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA;AAEzC,UAAA,OAAO,kBAAmB,IAAA,EAAa;AACrC,YAAA,MAAA,CAAO,iBAAA,GAAoB,IAAA;AAC3B,YAAA,IAAI;AACF,cAAA,MAAM,SAAS,MAAM,MAAA,CAAO,KAAK,MAAA,CAAO,aAAA,EAAe,GAAG,IAAI,CAAA;AAE9D,cAAA,IAAI,IAAA,KAAS,cAAA,IAAkB,IAAA,KAAS,MAAA,EAAQ;AAC9C,gBAAA,MAAA,CAAO,wBAAwB,MAAM,CAAA;AAAA,cACvC,CAAA,MAAA,IAAW,SAAS,WAAA,EAAa;AAC/B,gBAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,SAAS,CAAA,EAAG;AACnD,kBAAA,MAAA,CAAO,iBAAiB,OAAA,GAAU;AAAA,oBAChC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA;AAAO,mBAC/B;AAAA,gBACF,CAAA,MAAO;AACL,kBAAA,MAAA,CAAO,gBAAA,EAAiB;AAAA,gBAC1B;AACA,gBAAA,MAAA,CAAO,gBAAA,CAAiBkB,eAAe,EAAE,CAAA;AAAA,cAC3C;AAEA,cAAA,OAAO,MAAA;AAAA,YACT,SAAS,KAAA,EAAO;AACd,cAAA,MAAA,CAAO,gBAAA,CAAiBA,eAAe,KAAK,CAAA;AAC5C,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF,CAAA;AAAA,QACF;AAEA,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA;AACvC,QAAA,IAAI,OAAO,KAAA,KAAU,UAAA;AACnB,UAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AACxC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,0BAAA,GAAmC;AACzC,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,IAAA,CAAK,aAAA,EAAe,EAAA,KAAO,UAAA,EAAY;AAElD,MAAA,IAAA,CAAK,aAAA,CAAc,EAAA,CAAG,KAAA,EAAO,MAAM;AACjC,QAAA,IAAI,CAAC,KAAK,iBAAA,EAAmB;AAC3B,UAAA,IAAA,CAAK,gBAAA,CAAiBA,eAAe,EAAE,CAAA;AAAA,QACzC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,aAAA,CAAc,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAa;AAC3C,QAAA,IAAI,GAAA,IAAO,CAAC,IAAA,CAAK,aAAA,EAAe;AAC9B,UAAA,IAAA,CAAK,KAAK,SAAA,CAAU;AAAA,YAClB,MAAMA,cAAAA,CAAe,KAAA;AAAA,YACrB,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,WACzD,CAAA;AACD,UAAA,IAAA,CAAK,IAAA,CAAK,eAAA;AAAA,YACR,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC;AAAA,WACpD;AAAA,QACF;AACA,QAAA,IAAA,CAAK,gBAAA,CAAiBA,eAAe,KAAK,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACH,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,0EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,QAAQ,MAAA,CAAO,aAAa,CAAA,GAA4B;AACtD,IAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,IAAA,IAAI;AACF,MAAA,WAAA,MAAiB,KAAA,IAAS,KAAK,aAAA,EAAe;AAC5C,QAAA,kBAAA,CAAmB,IAAA,CAAK,gBAAA,EAAkB,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAC1D,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAA,MAAA,CAAO,KAAA,CAAM,iDAAiD,GAAG,CAAA;AACjE,MAAA,IAAA,CAAK,gBAAA,CAAiBA,eAAe,KAAK,CAAA;AAC1C,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,IAAA,CAAK,gBAAA,CAAiBA,eAAe,EAAE,CAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEQ,gBAAA,CAAiB,WAAmB,IAAA,EAAiB;AAC3D,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,SAAA;AACH,QAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AACnD,QAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AACnD,QAAA;AAAA,MAEF,KAAK,MAAA;AACH,QAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa;AACtC,UAAA,IAAA,CAAK,iBAAiB,WAAA,GAAc,EAAA;AAAA,QACtC;AACA,QAAA,IAAA,CAAK,iBAAiB,WAAA,IAAe,IAAA;AACrC,QAAA;AAAA,MAEF,KAAK,cAAA;AACH,QAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS;AAClC,UAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,EAAC;AAAA,QACnC;AACA,QAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACvC,QAAA;AAAA,MAEF,KAAK,cAAA;AACH,QAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AACnD,QAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,UAAU,IAAA,CAAK,OAAA;AACvD,QAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AACnD,QAAA;AAAA;AACJ,EACF;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IACE,IAAA,CAAK,gBAAA,CAAiB,WAAA,KACrB,CAAC,IAAA,CAAK,gBAAA,CAAiB,OAAA,IACtB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,MAAA,KAAW,CAAA,CAAA,EAC3C;AACA,MAAA,IAAA,CAAK,iBAAiB,OAAA,GAAU;AAAA,QAC9B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,iBAAiB,WAAA;AAAY,OAC1D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBAAwB,OAAA,EAAoB;AAClD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAA,CAAQ,KAAA;AACzD,MAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,UAAU,OAAA,CAAQ,OAAA;AAC7D,MAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,OAAA,CAAQ,KAAA;AACzD,MAAA,IAAI,OAAA,CAAQ,WAAA;AACV,QAAA,IAAA,CAAK,gBAAA,CAAiB,cAAc,OAAA,CAAQ,WAAA;AAAA,IAChD;AACA,IAAA,IAAA,CAAK,gBAAA,CAAiBA,eAAe,EAAE,CAAA;AAAA,EACzC;AAAA,EAEQ,iBAAiB,IAAA,EAA4B;AACnD,IAAA,IAAI,KAAK,aAAA,EAAe;AACxB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,kBAAA,CAAmB,KAAK,IAAA,EAAM,IAAA,CAAK,gBAAA,EAAkB,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC3E;AACF,CAAA;AAMA,SAAS,gBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAAa;AAC9C,MAAA,IAAI,+BAA8B,EAAG;AACnC,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,UAAA,GAAc,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAChC,MAAA,MAAM,cAAA,GAAiBlB,QAAQ,MAAA,EAAO;AACtC,MAAA,MAAM,WAAA,GAAc,WAAW,MAAA,KAAW,IAAA;AAE1C,MAAA,MAAM,UAAA,GAAaR,KAAAA,CAAM,OAAA,CAAQ,cAAc,CAAA;AAC/C,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,CAAA,kBAAA,EAAqB,WAAW,CAAA,mBAAA,EAAsB,UAAA,EAAY,WAAA,EAAY,CAAE,OAAO,CAAA,UAAA,EAAa,UAAA,EAAY,WAAA,EAAY,CAAE,MAAM,CAAA;AAAA,OACtI;AAEA,MAAA,OAAO,MAAA,CAAO,eAAA;AAAA,QACZ,QAAA;AAAA,QACA;AAAA,UACE,MAAMY,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,SAChD;AAAA,QACA,CAACX,KAAAA,KAAe;AACd,UAAA,IAAI;AACF,YAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,UAAA,EAAY,WAAW,CAAA;AAClD,YAAA,IAAI,WAAA,EAAa;AACf,cAAAA,KAAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAI,CAAA;AAAA,YACzC;AACA,YAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,YAAA,MAAM,WAAA,GAAcD,KAAAA,CAAM,OAAA,CAAQ,cAAA,EAAgBC,KAAI,CAAA;AACtD,YAAA,MAAM,WAAWO,OAAAA,CAAQ,IAAA;AAAA,cAAK,WAAA;AAAA,cAAa,MACzC,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI;AAAA,aAC3B;AAEA,YAAA,MAAM,gBAAA,GAAwC;AAAA,cAC5C,SAAS,EAAC;AAAA,cACV,KAAA,EAAO,EAAA;AAAA,cACP,OAAO;AAAC,aACV;AAEA,YAAA,OAAO,YAAA;AAAA,cACL,QAAA;AAAA,cACA;AAAA,gBACE,aAAa,CAAC,EAAA,KAAOA,OAAAA,CAAQ,IAAA,CAAK,aAAa,EAAE,CAAA;AAAA,gBACjD,SAAS,CAAC,KAAA,KACR,kBAAA,CAAmB,gBAAA,EAAkB,OAAOP,KAAI,CAAA;AAAA,gBAClD,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,kBAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,kBAAAA,MAAK,SAAA,CAAU;AAAA,oBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,oBACrB,SACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,mBACxD,CAAA;AACD,kBAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AAAA,gBACrC,CAAA;AAAA,gBACA,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,kBAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,kBAAA,MAAM,YAAA,GAAe,YAAY,KAAK,CAAA;AACtC,kBAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,kBAAAA,KAAAA,CAAK,YAAA;AAAA,oBACH,uBAAA;AAAA,oBAAA,CACC,UAAU,SAAA,IAAa;AAAA,mBAC1B;AAAA,gBACF,CAAA;AAAA,gBACA,QAAA,EAAU,CAAC,MAAA,KAAW;AACpB,kBAAA,MAAM,aAAA,GACJ,gBAAA,CAAiB,OAAA,EAAS,MAAA,IAC1B,gBAAA,CAAiB,KAAA,IACjB,gBAAA,CAAiB,KAAA,EAAO,YAAA,KAAiB,KAAA,CAAA,IACzC,gBAAA,CAAiB,KAAA,EAAO,aAAA,KAAkB,KAAA,CAAA;AAC5C,kBAAA,IAAI,MAAA,KAAW,QAAQ,aAAA,EAAe;AACpC,oBAAA,kBAAA;AAAA,sBACEA,KAAAA;AAAA,sBACA,gBAAA;AAAA,sBACA,SAAA;AAAA,sBACAyB,cAAAA,CAAe;AAAA,qBACjB;AAAA,kBACF,CAAA,MAAO;AACL,oBAAA,IAAI,WAAW,IAAA,EAAM;AACnB,sBAAAzB,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAAA,oBAC5C;AACA,oBAAAzB,MAAK,GAAA,EAAI;AAAA,kBACX;AAAA,gBACF;AAAA,eACF;AAAA,cACA,EAAE,kBAAkB,QAAA;AAAS,aAC/B;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,YAAAA,MAAK,SAAA,CAAU;AAAA,cACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,cACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AACD,YAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,YAAAA,MAAK,GAAA,EAAI;AACT,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAQA,SAAS,aAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA,cAAA,EACA;AACA,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAAa;AAC9C,MAAA,IAAI,+BAA8B,EAAG;AACnC,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,UAAA,GAAc,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAChC,MAAA,MAAM,cAAA,GAAiBO,QAAQ,MAAA,EAAO;AAEtC,MAAA,MAAMP,QAAO,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA;AAAA,QACA;AAAA,UACE,MAAMW,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY;AAAA,YACV,kBAAA,EAAoB,WAAA;AAAA,YACpB,eAAA,EAAiB,IAAA;AAAA,YACjB,eAAA,EAAiB;AAAA;AACnB,SACF;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAM,WAAA,GAAcZ,KAAAA,CAAM,OAAA,CAAQ,cAAA,EAAgBC,KAAI,CAAA;AACtD,MAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,UAAA,EAAY,WAAW,CAAA;AAClD,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,MAAA,MAAM,UAAA,GAAa,cAAA,GACf,IAAI,KAAA,CAAM,IAAA,EAAa;AAAA,QACrB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAEhB,UAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,cAAA,CAAe,KAAK,MAAM,CAAA;AAExD,UAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,UAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AACzD,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,OACD,CAAA,GACD,IAAA;AAEJ,MAAA,IAAI;AACF,QAAA,MAAM,gBAAgBO,OAAAA,CAAQ,IAAA;AAAA,UAAK,WAAA;AAAA,UAAa,MAC9C,QAAA,CAAS,IAAA,CAAK,UAAA,EAAY,GAAG,IAAI;AAAA,SACnC;AACA,QAAA,OAAO,IAAI,oBAAA;AAAA,UACTP,KAAAA;AAAA,UACA,aAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAAA,MAAK,SAAA,CAAU;AAAA,UACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,UACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC/D,CAAA;AACD,QAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,QAAAA,MAAK,GAAA,EAAI;AACT,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAOA,SAAS,iBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAAa;AAC9C,MAAA,IAAI,+BAA8B,EAAG;AACnC,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MAClC;AAEA,MAAA,MAAM,UAAA,GAAc,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAChC,MAAA,MAAM,cAAA,GAAiBO,QAAQ,MAAA,EAAO;AACtC,MAAA,MAAMP,QAAO,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA;AAAA,QACA;AAAA,UACE,MAAMW,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY;AAAA,YACV,kBAAA,EAAoB,WAAA;AAAA,YACpB,iBAAA,EAAmB,OAAA;AAAA,YACnB,eAAA,EAAiB;AAAA;AACnB,SACF;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAsB,KAAA,KAAkB;AAC3D,QAAA,IAAI,SAAA,EAAW;AACf,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA,IAAI,KAAA,EAAO;AACT,UAAAX,MAAK,SAAA,CAAU,EAAE,MAAM,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAC/C,UAAAA,KAAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,QAC5B,CAAA,MAAO;AACL,UAAAA,KAAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAAA,QACzB;AACA,QAAAA,MAAK,GAAA,EAAI;AAAA,MACX,CAAA;AAEA,MAAA,IAAI;AACF,QAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAC7C,QAAA,MAAM,WAAA,GAAcD,KAAAA,CAAM,OAAA,CAAQ,cAAA,EAAgBC,KAAI,CAAA;AAEtD,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,GAC/C,iBAAA,CAAkB,UAAA,CAAW,KAAA,EAAgB,MAAA,EAAQ,WAAW,CAAA,GAChE,UAAA,CAAW,KAAA;AAEf,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,YAAA,EAAa;AAAA,UACrC,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC;AAAA,SACjB;AACA,QAAA,MAAM,SAASO,OAAAA,CAAQ,IAAA;AAAA,UAAK,WAAA;AAAA,UAAa,MACvC,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,WAAW;AAAA,SAClC;AAEA,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,WAAA,CAAYkB,eAAe,EAAE,CAAA;AAC7B,UAAA,OAAO,MAAA;AAAA,QACT;AAEA,QAAA,OAAO,IAAI,MAAM,MAAA,EAAQ;AAAA,UACvB,GAAA,CAAI,MAAA,EAAa,IAAA,EAAuB,QAAA,EAAe;AACrD,YAAA,IAAI,IAAA,KAAS,OAAO,aAAA,EAAe;AACjC,cAAA,OAAO,WAAY;AACjB,gBAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAE;AACtD,gBAAA,OAAO;AAAA,kBACL,CAAC,MAAA,CAAO,aAAa,CAAA,GAAI;AACvB,oBAAA,OAAO,IAAA;AAAA,kBACT,CAAA;AAAA,kBACA,MAAM,IAAA,GAAO;AACX,oBAAA,IAAI;AACF,sBAAA,MAAM,MAAA,GAAS,MAAMlB,OAAAA,CAAQ,IAAA;AAAA,wBAAK,WAAA;AAAA,wBAAa,MAC7C,iBAAiB,IAAA;AAAK,uBACxB;AACA,sBAAA,IAAI,MAAA,CAAO,IAAA,EAAM,WAAA,CAAYkB,cAAAA,CAAe,EAAE,CAAA;AAC9C,sBAAA,OAAO,MAAA;AAAA,oBACT,SAAS,KAAA,EAAO;AACd,sBAAA,WAAA,CAAYA,cAAAA,CAAe,OAAO,KAAc,CAAA;AAChD,sBAAA,MAAM,KAAA;AAAA,oBACR;AAAA,kBACF,CAAA;AAAA,kBACA,MAAM,OAAOJ,MAAAA,EAAa;AACxB,oBAAA,IAAI;AACF,sBAAA,MAAM,MAAA,GAAS,OAAO,gBAAA,CAAiB,MAAA;AAAA,wBACrCA;AAAA,uBACF,IAAK;AAAA,wBACH,IAAA,EAAM,IAAA;AAAA,wBACN,KAAA,EAAAA;AAAA,uBACF,CAAA;AACA,sBAAA,OAAO,MAAA;AAAA,oBACT,CAAA,SAAE;AACA,sBAAA,WAAA,CAAYI,eAAe,EAAE,CAAA;AAAA,oBAC/B;AAAA,kBACF,CAAA;AAAA,kBACA,MAAM,MAAM,KAAA,EAAa;AACvB,oBAAA,MAAM,GAAA,GACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1D,oBAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,sBAAA,IAAI;AACF,wBAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,KAAA,CAAM,KAAK,CAAA;AACjD,wBAAA,IAAI,OAAO,IAAA,EAAM;AACf,0BAAA,WAAA,CAAYA,cAAAA,CAAe,OAAO,GAAG,CAAA;AAAA,wBACvC;AACA,wBAAA,OAAO,MAAA;AAAA,sBACT,SAAS,CAAA,EAAG;AACV,wBAAA,WAAA;AAAA,0BACEA,cAAAA,CAAe,KAAA;AAAA,0BACf,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,yBAC9C;AACA,wBAAA,MAAM,CAAA;AAAA,sBACR;AAAA,oBACF;AACA,oBAAA,WAAA,CAAYA,cAAAA,CAAe,OAAO,GAAG,CAAA;AACrC,oBAAA,MAAM,KAAA;AAAA,kBACR;AAAA,iBACF;AAAA,cACF,CAAA;AAAA,YACF;AAEA,YAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,OAAA,IAAW,SAAS,SAAA,EAAW;AAC7D,cAAA,MAAM,cAAA,GAAiB,OAAO,IAAI,CAAA;AAClC,cAAA,IAAI,OAAO,cAAA,KAAmB,UAAA,EAAY,OAAO,cAAA;AAEjD,cAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,gBAAA,OAAO,SACL,aACA,UAAA,EACA;AACA,kBAAA,OAAO,cAAA,CAAe,IAAA;AAAA,oBACpB,MAAA;AAAA,oBACA,CAAC,CAAA,KAAW;AACV,sBAAA,WAAA,CAAYA,eAAe,EAAE,CAAA;AAC7B,sBAAA,OAAO,WAAA,GAAc,WAAA,CAAY,CAAC,CAAA,GAAI,CAAA;AAAA,oBACxC,CAAA;AAAA,oBACA,CAAC,CAAA,KAAW;AACV,sBAAA,WAAA;AAAA,wBACEA,cAAAA,CAAe,KAAA;AAAA,wBACf,aAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,CAAM,MAAA,CAAO,CAAC,CAAC;AAAA,uBAC9C;AACA,sBAAA,IAAI,UAAA,EAAY,OAAO,UAAA,CAAW,CAAC,CAAA;AACnC,sBAAA,MAAM,CAAA;AAAA,oBACR;AAAA,mBACF;AAAA,gBACF,CAAA;AAAA,cACF;AACA,cAAA,IAAI,SAAS,OAAA,EAAS;AACpB,gBAAA,OAAO,SAAU,UAAA,EAAuB;AACtC,kBAAA,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAA,EAAW,UAAU,CAAA;AAAA,gBAC5C,CAAA;AAAA,cACF;AACA,cAAA,IAAI,SAAS,SAAA,EAAW;AACtB,gBAAA,OAAO,SAAU,SAAA,EAAsB;AACrC,kBAAA,OAAO,QAAA,CAAS,IAAA;AAAA,oBACd,CAAC,CAAA,KAAW;AACV,sBAAA,SAAA,IAAY;AACZ,sBAAA,OAAO,CAAA;AAAA,oBACT,CAAA;AAAA,oBACA,CAAC,CAAA,KAAW;AACV,sBAAA,SAAA,IAAY;AACZ,sBAAA,MAAM,CAAA;AAAA,oBACR;AAAA,mBACF;AAAA,gBACF,CAAA;AAAA,cACF;AAAA,YACF;AAEA,YAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,YAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AACzD,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,SACD,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,WAAA;AAAA,UACEA,cAAAA,CAAe,KAAA;AAAA,UACf,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,SAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAEO,IAAM,cAAc,CAAC,MAAA,KAC1B,iBAAiB,MAAA,EAAQ,UAAA,CAAW,MAAM,MAAM,CAAA;AAE3C,IAAM,cAAc,CAAC,MAAA,KAC1B,iBAAiB,MAAA,EAAQ,UAAA,CAAW,MAAM,MAAM,CAAA;AAE3C,IAAM,iBAAiB,CAAC,MAAA,KAC7B,iBAAiB,MAAA,EAAQ,UAAA,CAAW,SAAS,SAAS,CAAA;AAEjD,IAAM,iBAAA,GAAoB,CAAC,MAAA,EAAgB,cAAA,KAChD,cAAc,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,cAAc,CAAA;AAE1D,IAAM,iBAAA,GAAoB,CAAC,MAAA,EAAgB,cAAA,KAChD,cAAc,MAAA,EAAQ,UAAA,CAAW,WAAA,EAAa,MAAA,EAAQ,cAAc,CAAA;AAE/D,IAAM,wBAAwB,CAAC,MAAA,KACpC,kBAAkB,MAAA,EAAQ,UAAA,CAAW,kBAAkB,MAAM,CAAA;;;AC3wB/D,IAAM,oBAAA,GAAuB,iCAAA;AAC7B,IAAM,WAAA,GAAc,CAAC,qBAAqB,CAAA;AAE1C,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAI,mBAA0B,EAAC;AAO/B,eAAe,gBAAA,GAAmC;AAChD,EAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG,OAAO,gBAAA;AAExC,EAAA,IAAI;AAEF,IAAA,MAAM,eAAA,GAAkB,MAAM,OAAO,mBAAmB,CAAA;AACxD,IAAA,gBAAA,CAAiB,IAAA;AAAA,MACf,eAAA,CAAgB,SAAA,IAAa,eAAA,CAAgB,OAAA,IAAW;AAAA,KAC1D;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,mBAAmB,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,OAAA,IAAW,GAAA;AACjD,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,QAAQ,CAAA,EAAG;AACxC,MAAA,gBAAA,CAAiB,KAAK,QAAQ,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,gBAAA;AACT;AAEO,IAAM,6BAAN,MAAiC;AAAA,EAItC,WAAA,GAAc;AAHd,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAAA,EAGjB;AAAA,EAEf,2BAAA,GAAwC;AACtC,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,GAA+B,EAAC,EACK;AACrC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,EAAiB;AACvC,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEjC,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,CAAe,SAAA;AAAA,UAChC,oBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS1B,KAAAA,CAAM,SAAA,CAAU,oBAAA,EAAsB,WAAW,CAAA;AAAA,MACjE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,YAAA,KAAiB;AAChC,MAAA,IAAA,CAAK,oBAAoB,YAAY,CAAA;AACrC,MAAA,IAAA,CAAK,wBAAwB,YAAY,CAAA;AACzC,MAAA,IAAA,CAAK,yBAAyB,YAAY,CAAA;AAAA,IAC5C,CAAC,CAAA;AAED,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,+BAA+B,CAAA;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,YAAA,KAAiB;AACzC,MAAA,IAAA,CAAK,sBAAsB,YAAY,CAAA;AACvC,MAAA,IAAA,CAAK,0BAA0B,YAAY,CAAA;AAC3C,MAAA,IAAA,CAAK,2BAA2B,YAAY,CAAA;AAAA,IAC9C,CAAC,CAAA;AAED,IAAA,gBAAA,GAAmB,EAAC;AACpB,IAAA,cAAA,GAAiB,KAAA;AAAA,EACnB;AAAA,EAEA,cAAA,GAA0B;AACxB,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEQ,oBAAoB,YAAA,EAAyB;AACnD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,KAAK,gDAAgD,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,gBAAgB,YAAA,CAAa,QAAA;AACnC,MAAA,IAAI,CAAC,eAAe,SAAA,EAAW;AAC7B,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiB,cAAc,SAAA,CAAU,MAAA;AAE/C,MAAA,IAAI,OAAO,aAAA,CAAc,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AACxD,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,aAAA,CAAc,SAAA;AAAA,UACd,QAAA;AAAA,UACA,WAAA,CAAY,KAAK,MAAM;AAAA,SACzB;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,aAAA,CAAc,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AACxD,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,aAAA,CAAc,SAAA;AAAA,UACd,QAAA;AAAA,UACA,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ,cAAc;AAAA,SAC/C;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEQ,wBAAwB,YAAA,EAAyB;AACvD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,KAAK,gDAAgD,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,iBAAA,GAAoB,aAAa,IAAA,EAAM,QAAA;AAC7C,MAAA,IAAI,CAAC,mBAAmB,SAAA,EAAW;AACjC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiB,kBAAkB,SAAA,CAAU,MAAA;AAEnD,MAAA,IAAI,OAAO,iBAAA,CAAkB,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AAC5D,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,iBAAA,CAAkB,SAAA;AAAA,UAClB,QAAA;AAAA,UACA,WAAA,CAAY,KAAK,MAAM;AAAA,SACzB;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,iBAAA,CAAkB,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AAC5D,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,iBAAA,CAAkB,SAAA;AAAA,UAClB,QAAA;AAAA,UACA,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ,cAAc;AAAA,SAC/C;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,iBAAA,CAAkB,SAAA,CAAU,UAAA,KAAe,UAAA,EAAY;AAChE,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,iBAAA,CAAkB,SAAA;AAAA,UAClB,YAAA;AAAA,UACA,qBAAA,CAAsB,KAAK,MAAM;AAAA,SACnC;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAE,CAAA;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,yBAAyB,YAAA,EAAyB;AACxD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,KAAK,gDAAgD,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,iBAAA,GAAoB,aAAa,QAAA,EAAU,OAAA;AACjD,MAAA,IAAI,CAAC,mBAAmB,SAAA,EAAW;AACjC,QAAA,MAAA,CAAO,MAAM,yDAAyD,CAAA;AACtE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,iBAAA,CAAkB,SAAA,CAAU,MAAA,KAAW,UAAA,EAAY;AAC5D,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,iBAAA,CAAkB,SAAA;AAAA,UAClB,QAAA;AAAA,UACA,cAAA,CAAe,KAAK,MAAM;AAAA,SAC5B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,8BAAA,EAAiC,KAAK,CAAA,CAAE,CAAA;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,sBAAsB,YAAA,EAAyB;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,aAAa,QAAA,EAAU,SAAA;AACrC,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAO,QAAQ,CAAA;AACtE,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,IACxE,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,0BAA0B,YAAA,EAAyB;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAM,QAAA,EAAU,SAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAO,QAAQ,CAAA;AACtE,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAO,QAAQ,CAAA;AACtE,MAAA,IAAI,OAAO,MAAM,UAAA,KAAe,UAAA;AAC9B,QAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,YAAY,CAAA;AAAA,IACtC,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AAAA,IACtD;AAAA,EACF;AAAA,EAEQ,2BAA2B,YAAA,EAAyB;AAC1D,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAU,OAAA,EAAS,SAAA;AAC9C,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,KAAW,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAO,QAAQ,CAAA;AAAA,IACxE,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,KAAK,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAA;AAEO,IAAM,qBAAA,GAAwB,IAAI,0BAAA,EAA2B;;;ACjQ7D,IAAM2B,YAAAA,GAAc,OAAA;ACSpB,MAAA,CAAA,MAAA,EAAO;AAEd,SAASC,eAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAOO,SAAS,iBAAiB,KAAA,EAAuB;AACtD,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AACxC,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,KAAA;AACT;AAQA,SAAS,mBAAmB,GAAA,EAAqB;AAC/C,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,EAAA,OAAO,QAAA,KAAa,UAAU,WAAA,GAAc,QAAA;AAC9C;AAEO,SAASH,qBAAAA,CACdxB,KAAAA,EACA,MAAA,EACA,WAAA,EACA,IAAA,EACM;AAEN,EAACA,MAAa,aAAA,GAAgB,MAAA;AAC9B,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,IAAA;AAAA,EACF;AAEA,EAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,gBAAA,EAAkB,WAAW,CAAA;AAC9D,EAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,UAAA,EAAY,cAAc,CAAA;AAK3D,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,mBAAmB,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,gBAAA,GACH,OAAO,gBAAA,IAAgD,MAAA;AAE1D,EAAA,IAAI,gBAAA,CAAiB,gBAAgB,MAAA,EAAW;AAC9C,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,uBAAA;AAAA,MACf,MAAA,CAAO,iBAAiB,WAAW;AAAA,KACrC;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,SAAS,MAAA,EAAW;AACvC,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,iBAAA;AAAA,MACf,MAAA,CAAO,iBAAiB,IAAI;AAAA,KAC9B;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,SAAS,MAAA,EAAW;AACvC,IAAAtB,MAAK,YAAA,CAAa,sBAAA,EAAwB,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,EACzE;AAEA,EAAA,IAAI,gBAAA,CAAiB,oBAAoB,MAAA,EAAW;AAClD,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,sBAAA;AAAA,MACf,MAAA,CAAO,iBAAiB,eAAe;AAAA,KACzC;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,CAAiB,kBAAkB,MAAA,EAAW;AAChD,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,uBAAA;AAAA,MACfK,cAAAA,CAAc,iBAAiB,aAAa;AAAA,KAC9C;AAAA,EACF;AAGA,EAAA,IAAI,gBAAA,CAAiB,mBAAmB,MAAA,EAAW;AACjD,IAAA3B,KAAAA,CAAK,YAAA;AAAA,MACH,gCAAA;AAAA,MACA,MAAA,CAAO,iBAAiB,cAAc;AAAA,KACxC;AAAA,EACF;AAGA,EAAA,IAAI,gBAAA,CAAiB,oBAAoB,MAAA,EAAW;AAClD,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,oBAAA;AAAA,MACf,MAAA,CAAO,iBAAiB,eAAe;AAAA,KACzC;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,CAAiB,qBAAqB,MAAA,EAAW;AACnD,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,qBAAA;AAAA,MACf,MAAA,CAAO,iBAAiB,gBAAgB;AAAA,KAC1C;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,IAAAtB,MAAK,YAAA,CAAa,2BAAA,EAA6B,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAC1E;AAGA,EAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,CAAO,KAAK,KAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC1D,IAAAA,KAAAA,CAAK,YAAA,CAAa,4BAAA,EAA8B,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,EACrE;AAGA,EAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,4BAAA;AAAA,MACA2B,cAAAA,CAAc,OAAO,UAAU;AAAA,KACjC;AAAA,EACF;AAGA,EAAA,IACE,KAAA,CAAM,QAAQ,MAAA,CAAO,cAAc,KACnC,MAAA,CAAO,cAAA,CAAe,SAAS,CAAA,EAC/B;AACA,IAAA3B,KAAAA,CAAK,YAAA;AAAA,MACH,sCAAA;AAAA,MACA,OAAO,cAAA,CAAe;AAAA,KACxB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,sBAAsB,MAAA,EAAW;AAC1C,IAAA,IAAI4B,wBAAsB,EAAG;AAC3B,MAAA5B,KAAAA,CAAK,YAAA;AAAA,QACH,mCAAA;AAAA,QACA2B,cAAAA,CAAc,OAAO,iBAAiB;AAAA,OACxC;AAAA,IACF;AACA,IAAA3B,KAAAA,CAAK,YAAA,CAAa,uCAAA,EAAyC,IAAI,CAAA;AAAA,EACjE;AAGA,EAAA,IAAI4B,wBAAsB,EAAG;AAC3B,IAAA,oBAAA,CAAqB5B,KAAAA,EAAM,QAAQ,IAAI,CAAA;AAAA,EACzC;AACF;AAEA,SAAS4B,sBAAAA,GAAiC;AACxC,EAAA,MAAM,MACJ,OAAA,CAAQ,GAAA,CAAI,uBAAA,IACZ,OAAA,CAAQ,IAAI,mBAAA,IACZ,EAAA;AACF,EAAA,OAAO,CAAC,KAAK,MAAM,CAAA,CAAE,SAAS,MAAA,CAAO,GAAG,CAAA,CAAE,WAAA,EAAa,CAAA;AACzD;AAKA,SAAS,oBAAA,CACP5B,KAAAA,EACA,MAAA,EACA,IAAA,EACM;AAMN,EAAA,IAAI,WAAA,GAAc,CAAA;AAGlB,EAAA,IAAI,MAAA,CAAO,sBAAsB,MAAA,EAAW;AAC1C,IAAA,MAAM,oBAAoB,MAAA,CAAO,iBAAA;AACjC,IAAA,IAAI,aAAA,GAAgB,EAAA;AAEpB,IAAA,IAAI,OAAO,sBAAsB,QAAA,EAAU;AACzC,MAAA,aAAA,GAAgB,iBAAA;AAAA,IAClB,WACE,iBAAA,CAAkB,KAAA,IAClB,MAAM,OAAA,CAAQ,iBAAA,CAAkB,KAAK,CAAA,EACrC;AACA,MAAA,aAAA,GAAgB,kBAAkB,KAAA,CAC/B,MAAA,CAAO,CAAC,CAAA,KAAW,CAAA,CAAE,SAAS,MAAS,CAAA,CACvC,GAAA,CAAI,CAAC,MAAW,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CAC9B,KAAK,EAAE,CAAA;AAAA,IACZ,CAAA,MAAA,IAAW,kBAAkB,IAAA,EAAM;AACjC,MAAA,aAAA,GAAgB,MAAA,CAAO,kBAAkB,IAAI,CAAA;AAAA,IAC/C,CAAA,MAAO;AACL,MAAA,aAAA,GAAgB,IAAA,CAAK,UAAU,iBAAiB,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAAA,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,KAAA,CAAA;AAAA,QAC5C;AAAA,OACF;AACA,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,QAC5C;AAAA,OACF;AACA,MAAA,WAAA,EAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,EAAG;AACnD,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,OAAA,EAA2C;AACnE,MAAA,MAAM,OAAO,kBAAA,CAAmB,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,MAAM,CAAC,CAAA;AAC3D,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,MAAM,cAAc,KAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAS,CAAA,CAClC,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CACzB,KAAK,EAAE,CAAA;AACV,QAAA,IAAI,WAAA,EAAa;AACf,UAAAtB,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,KAAA,CAAA;AAAA,YAC5C;AAAA,WACF;AACA,UAAAtB,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,YAC5C;AAAA,WACF;AACA,UAAA,WAAA,EAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,IAAA,EAAM;AAGX,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,KAAA,CAAA;AAAA,MAC5C;AAAA,KACF;AACA,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,MAC5C;AAAA,KACF;AACA,IAAA,WAAA,EAAA;AACA,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,SAAA,GAAY,IAAA,CACf,GAAA,CAAI,CAAC,CAAA,KAAW;AACf,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,MAAA,IAAI,KAAK,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,SAAiB,CAAA,CAAE,IAAA;AAC9C,MAAA,OAAO,EAAA;AAAA,IACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,IAAA,IAAI,SAAA,EAAW;AACb,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,KAAA,CAAA;AAAA,QAC5C;AAAA,OACF;AACA,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,QAC5C;AAAA,OACF;AACA,MAAA,WAAA,EAAA;AAAA,IACF;AACA,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,IAAQ,MAAM,CAAA;AAC1C,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AAEtB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,MAAM,YAAY,KAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAS,CAAA,CAClC,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CACzB,KAAK,EAAE,CAAA;AAEV,QAAA,IAAI,SAAA,EAAW;AACb,UAAAtB,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,KAAA,CAAA;AAAA,YAC5C;AAAA,WACF;AACA,UAAAtB,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,YAC5C;AAAA,WACF;AACA,UAAA,WAAA,EAAA;AAAA,QACF;AAGA,QAAA,MAAM,kBAAkB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,MAAS,CAAA;AACtE,QAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,UAAAtB,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,cAAA,EAAiB,cAAc,CAAC,CAAA,gBAAA,CAAA;AAAA,YAChC;AAAA,WACF;AACA,UAAAA,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,cAAA,EAAiB,cAAc,CAAC,CAAA,kBAAA,CAAA;AAAA,YAChC,eAAA,CAAgB;AAAA,WAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAW;AAC9B,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAAA,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,QAC5C;AAAA,OACF;AACA,MAAA,WAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,MAAA,EAAW;AACtC,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,MAAA,MAAM,cAAc,KAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAS,CAAA,CAClC,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CACzB,KAAK,EAAE,CAAA;AACV,MAAA,IAAI,WAAA,EAAa;AACf,QAAAtB,KAAAA,CAAK,YAAA;AAAA,UACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,QAAA,CAAA;AAAA,UAC5C;AAAA,SACF;AACA,QAAA,WAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAASC,sBAAAA,CACdvB,OACA,QAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,IAAA;AAAA,EACF;AAIA,EAAA,MAAM,cAAA,GACH,SAAS,QAAA,IAAwC,QAAA;AAGpD,EAAA,mBAAA,CAAoBA,OAAM,cAAc,CAAA;AAGxC,EAAA,uBAAA,CAAwBA,OAAM,cAAc,CAAA;AAG5C,EAAA,4BAAA,CAA6BA,OAAM,cAAc,CAAA;AAGjD,EAAA,IAAI4B,wBAAsB,EAAG;AAC3B,IAAA,wBAAA,CAAyB5B,OAAM,cAAc,CAAA;AAAA,EAC/C;AAGA,EAAA,+BAAA,CAAgCA,OAAM,cAAc,CAAA;AACtD;AAKA,SAAS,mBAAA,CACPA,OACA,QAAA,EACM;AACN,EAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA;AAG/B,EAAA,IAAI,CAAC,aAAA,EAAe;AAGpB,EAAA,IAAI,aAAA,CAAc,qBAAqB,MAAA,EAAW;AAChD,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,uBAAA;AAAA,MACf,MAAA,CAAO,cAAc,gBAAgB;AAAA,KACvC;AAAA,EACF;AAGA,EAAA,IAAI,aAAA,CAAc,yBAAyB,MAAA,EAAW;AACpD,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,2BAAA;AAAA,MACf,MAAA,CAAO,cAAc,oBAAoB;AAAA,KAC3C;AAAA,EACF;AAGA,EAAA,IAAI,aAAA,CAAc,oBAAoB,MAAA,EAAW;AAC/C,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,sBAAA;AAAA,MACf,MAAA,CAAO,cAAc,eAAe;AAAA,KACtC;AAAA,EACF;AAGA,EAAA,IAAI,aAAA,CAAc,4BAA4B,MAAA,EAAW;AACvD,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,iCAAA;AAAA,MACf,MAAA,CAAO,cAAc,uBAAuB;AAAA,KAC9C;AAAA,EACF;AACF;AAKA,SAAS,uBAAA,CACPtB,OACA,QAAA,EACM;AACN,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAG5B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAE3D,EAAAA,KAAAA,CAAK,YAAA,CAAa,iCAAA,EAAmC,UAAA,CAAW,MAAM,CAAA;AAEtE,EAAA,MAAM,cAAA,GAAiB,WAAW,CAAC,CAAA;AAGnC,EAAA,IAAI,cAAA,CAAe,iBAAiB,MAAA,EAAW;AAC7C,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,+BAAA;AAAA,MACA,MAAA,CAAO,eAAe,YAAY;AAAA,KACpC;AAAA,EACF;AAGA,EAAA,IAAI,cAAA,CAAe,gBAAgB,MAAA,EAAW;AAC5C,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,8BAAA;AAAA,MACA,MAAA,CAAO,eAAe,WAAW;AAAA,KACnC;AAAA,EACF;AAGA,EAAA,MAAM,gBAAgB,cAAA,CAAe,aAAA;AAGrC,EAAA,IAAI,MAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5D,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,sCAAA;AAAA,MACA,aAAA,CAAc;AAAA,KAChB;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,MAAM,MAAA,GAAS,cAAc,CAAC,CAAA;AAC9B,MAAA,IAAI,MAAA,CAAO,aAAa,MAAA,EAAW;AACjC,QAAAA,KAAAA,CAAK,YAAA;AAAA,UACH,iCAAiC,CAAC,CAAA,SAAA,CAAA;AAAA,UAClC,MAAA,CAAO,OAAO,QAAQ;AAAA,SACxB;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,gBAAgB,MAAA,EAAW;AACpC,QAAAA,KAAAA,CAAK,YAAA;AAAA,UACH,iCAAiC,CAAC,CAAA,YAAA,CAAA;AAAA,UAClC,MAAA,CAAO,OAAO,WAAW;AAAA,SAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,mBAAmB,cAAA,CAAe,gBAAA;AAGxC,EAAA,IAAI,gBAAA,EAAkB,oBAAoB,MAAA,EAAW;AACnD,IAAA,MAAM,UAAU,gBAAA,CAAiB,eAAA;AACjC,IAAAA,KAAAA,CAAK,YAAA,CAAa,gCAAA,EAAkC,OAAA,CAAQ,MAAM,CAAA;AAAA,EACpE;AAGA,EAAA,IAAI,cAAA,CAAe,sBAAsB,MAAA,EAAW;AAClD,IAAAA,KAAAA,CAAK,YAAA,CAAa,+BAAA,EAAiC,IAAI,CAAA;AAAA,EACzD;AACF;AAKA,SAAS,4BAAA,CACPA,OACA,QAAA,EACM;AACN,EAAA,MAAM,iBAAiB,QAAA,CAAS,cAAA;AAGhC,EAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,EAAA,IAAI,cAAA,CAAe,gBAAgB,MAAA,EAAW;AAC5C,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,qCAAA;AAAA,MACA,MAAA,CAAO,eAAe,WAAW;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,uBAAuB,MAAA,EAAW;AACnD,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,sCAAA;AAAA,MACA,MAAA,CAAO,eAAe,kBAAkB;AAAA,KAC1C;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,cAAA,CAAe,aAAA;AAGrC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AAChC,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,6CAAA;AAAA,MACA,aAAA,CAAc;AAAA,KAChB;AAAA,EACF;AACF;AAKA,SAAS,wBAAA,CACPA,OACA,QAAA,EACM;AACN,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAG5B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAEhC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,IAAA,MAAM,SAAA,GAAY,WAAW,CAAC,CAAA;AAC9B,IAAA,MAAM,UAAU,SAAA,CAAU,OAAA;AAE1B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,OAAO,kBAAA,CAAmB,MAAA,CAAO,OAAA,CAAQ,IAAA,IAAQ,OAAO,CAAC,CAAA;AAC/D,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AAEtB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAG3B,IAAA,MAAM,cAAc,KAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAS,CAAA,CAClC,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAA,CACzB,KAAK,EAAE,CAAA;AAEV,IAAA,IAAI,WAAA,EAAa;AACf,MAAAA,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,CAAC,SAAS,IAAI,CAAA;AACrE,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,CAAC,CAAA,QAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAiB,MAAS,CAAA;AACtE,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,qBAAqB,CAAC,CAAA,oBAAA,CAAA;AAAA,QACtB,aAAA,CAAc;AAAA,OAChB;AAEA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,CAAc,QAAQ,CAAA,EAAA,EAAK;AAC7C,QAAA,MAAM,EAAA,GAAK,aAAA,CAAc,CAAC,CAAA,CAAE,YAAA;AAC5B,QAAA,IAAI,EAAA,CAAG,SAAS,MAAA,EAAW;AACzB,UAAAA,KAAAA,CAAK,YAAA;AAAA,YACH,CAAA,kBAAA,EAAqB,CAAC,CAAA,eAAA,EAAkB,CAAC,CAAA,KAAA,CAAA;AAAA,YACzC,MAAA,CAAO,GAAG,IAAI;AAAA,WAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,SAAS,+BAAA,CACPA,OACA,QAAA,EACM;AAEN,EAAA,MAAM,YAAY,QAAA,CAAS,SAAA;AAC3B,EAAA,IAAI,SAAA,EAAW,WAAW,MAAA,EAAW;AACnC,IAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,IAAAA,KAAAA,CAAK,YAAA,CAAa,sCAAA,EAAwC,MAAA,CAAO,MAAM,CAAA;AAAA,EACzE;AAGA,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAG5B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAAA,KAAAA,CAAK,YAAA,CAAa,iCAAA,EAAmC,UAAA,CAAW,MAAM,CAAA;AACtE,IAAA,IAAI,WAAW,MAAA,GAAS,CAAA,IAAK,WAAW,CAAC,CAAA,CAAE,WAAW,MAAA,EAAW;AAC/D,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,CAAC,CAAA,CAAE,MAAA;AAC7B,MAAAA,KAAAA,CAAK,YAAA,CAAa,sCAAA,EAAwC,MAAA,CAAO,MAAM,CAAA;AAAA,IACzE;AAAA,EACF;AACF;;;AC9mBA,IAAM,cAAA,GAAiB,mBAAA;AACvB,IAAM,mBAAA,GAAsB,wBAAA;AAE5B,SAAS,kBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAA0B;AAC3D,MAAA,IAAI,+BAA8B,EAAG;AACnC,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MAClC;AACA,MAAA,IAAI,SAAkC,EAAC;AAEvC,MAAA,MAAM,aAAA,GAAgB,IAAA;AACtB,MAAA,MAAM,YAAY,aAAA,CAAc,KAAA;AAChC,MAAA,MAAM,oBAAoB,aAAA,CAAc,iBAAA;AAGxC,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA;AAE9B,MAAA,IAAG,SAAA,EAAW;AACZ,QAAA,MAAA,CAAO,KAAA,GAAQ,iBAAiB,SAAS,CAAA;AAAA,MAC3C;AACA,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,MAAA,CAAO,iBAAA,GAAoB,iBAAA;AAAA,MAC7B;AACA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAAA,MACnB;AAEA,MAAA,MAAM,cAAA,GAAiBO,QAAQ,MAAA,EAAO;AACtC,MAAA,OAAO,MAAA,CAAO,eAAA;AAAA,QACZ,QAAA;AAAA,QACA;AAAA,UACE,MAAMI,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,SAChD;AAAA,QACA,cAAA;AAAA,QACA,CAACX,KAAAA,KAAe;AACd,UAAA,IAAI;AACF,YAAAwB,sBAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,IAAA,CAAK,CAAC,CAAC,CAAA;AACvD,YAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,YAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAE1C,YAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,cAAA,OAAA,CAAQ,YAAY;AAClB,gBAAA,IAAI;AACF,kBAAA,MAAM,QAAQ,MAAM,QAAA;AACpB,kBAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,kBAAA,MAAM,YAAA,GAAe,YAAY,KAAK,CAAA;AACtC,kBAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,kBAAA,MAAM,QAAA,GAAA,CAAY,UAAU,SAAA,IAAa,GAAA;AACzC,kBAAAA,KAAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACnD,kBAAAA,KAAAA,CAAK,YAAA;AAAA,oBACH,wCAAA;AAAA,oBACA;AAAA,mBACF;AACA,kBAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,kBAAAzB,MAAK,GAAA,EAAI;AACT,kBAAA,OAAO,KAAA;AAAA,gBACT,SAAS,KAAA,EAAO;AACd,kBAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,KAAK,CAAA;AACzD,kBAAAA,MAAK,SAAA,CAAU;AAAA,oBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,oBACrB,SACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,mBACxD,CAAA;AACD,kBAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,kBAAAA,MAAK,GAAA,EAAI;AACT,kBAAA,MAAM,KAAA;AAAA,gBACR;AAAA,cACF,CAAA,GAAG;AAAA,YACL,CAAA,MAAO;AACL,cAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,cAAA,MAAM,YAAA,GAAe,YAAY,QAAQ,CAAA;AACzC,cAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,cAAAA,KAAAA,CAAK,YAAA;AAAA,gBACH,uBAAA;AAAA,gBAAA,CACC,UAAU,SAAA,IAAa;AAAA,eAC1B;AACA,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAAzB,MAAK,GAAA,EAAI;AACT,cAAA,OAAO,QAAA;AAAA,YACT;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,KAAK,CAAA;AACzD,YAAAA,MAAK,SAAA,CAAU;AAAA,cACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,cACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AACD,YAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,YAAAA,MAAK,GAAA,EAAI;AACT,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAEA,SAAS,wBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAA0B;AAC3D,MAAA,IAAI,+BAA8B,EAAG;AACnC,QAAA,OAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MAClC;AAEA,MAAA,IAAI,SAAkC,EAAC;AAEvC,MAAA,MAAM,aAAA,GAAgB,IAAA;AACtB,MAAA,MAAM,YAAY,aAAA,CAAc,KAAA;AAChC,MAAA,MAAM,oBAAoB,aAAA,CAAc,iBAAA;AAGxC,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA;AAE9B,MAAA,IAAI,SAAA,EAAW,MAAA,CAAO,KAAA,GAAQ,gBAAA,CAAiB,SAAS,CAAA;AACxD,MAAA,IAAI,iBAAA,SAA0B,iBAAA,GAAoB,iBAAA;AAClD,MAAA,IAAI,OAAA,SAAgB,OAAA,GAAU,OAAA;AAE9B,MAAA,MAAM,cAAA,GAAiBO,QAAQ,MAAA,EAAO;AAEtC,MAAA,OAAO,MAAA,CAAO,eAAA;AAAA,QACZ,QAAA;AAAA,QACA;AAAA,UACE,MAAMI,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,SAChD;AAAA,QACA,cAAA;AAAA,QACA,CAACX,KAAAA,KAAe;AACd,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,UAAA,IAAI;AACF,YAAAwB,sBAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,IAAA,CAAK,CAAC,CAAC,CAAA;AAEvD,YAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAG1C,YAAA,IAAI,CAAC,SAAA,CAAU,QAAQ,CAAA,EAAG;AAExB,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAAzB,MAAK,GAAA,EAAI;AACT,cAAA,OAAO,QAAA;AAAA,YACT;AAEA,YAAA,OAAA,CAAQ,YAAY;AAClB,cAAA,IAAI;AACF,gBAAA,MAAM,eAAoB,MAAM,QAAA;AAKhC,gBAAA,MAAM,iBAAqC,YAAA,CAAa,MAAA;AAExD,gBAAA,IACE,CAAC,cAAA,IACD,OAAO,eAAe,MAAA,CAAO,aAAa,MAAM,UAAA,EAChD;AAEA,kBAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,kBAAA,MAAM,YAAA,GAAe,YAAY,YAAY,CAAA;AAC7C,kBAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,kBAAA,MAAM,QAAA,GAAA,CAAY,UAAU,SAAA,IAAa,GAAA;AACzC,kBAAAA,KAAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACnD,kBAAAA,KAAAA,CAAK,YAAA;AAAA,oBACH,wCAAA;AAAA,oBACA;AAAA,mBACF;AACA,kBAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,kBAAAzB,MAAK,GAAA,EAAI;AACT,kBAAA,OAAO,YAAA;AAAA,gBACT;AAEA,gBAAA,IAAI,UAAA,GAAa,CAAA;AACjB,gBAAA,IAAI,SAAA,GAAY,EAAA;AAChB,gBAAA,IAAI,kBAAA,GAAqB,KAAA;AAEzB,gBAAA,MAAM,aAAA,GAAoC;AAAA,kBACxC,CAAC,MAAA,CAAO,aAAa,CAAA,GAAI;AACvB,oBAAA,MAAM,QAAA,GAAW,cAAA,CAAe,MAAA,CAAO,aAAa,CAAA,EAAE;AACtD,oBAAA,OAAO;AAAA,sBACL,MAAM,IAAA,GAAO;AACX,wBAAA,IAAI;AACF,0BAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,IAAA,EAAK;AAGhC,0BAAA,IAAI,KAAK,IAAA,EAAM;AACb,4BAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAGzB,4BAAA,IACE,YAAA,CAAa,QAAA,IACb,SAAA,CAAU,YAAA,CAAa,QAAQ,CAAA,EAC/B;AACA,8BAAA,IAAI;AACF,gCAAA,MAAM,aAAA,GACJ,MAAM,YAAA,CAAa,QAAA;AACrB,gCAAA,MAAM,YAAA,GAAe,YAAY,aAAa,CAAA;AAC9C,gCAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AAAA,8BAC1C,CAAA,CAAA,MAAQ;AAEN,gCAAA,MAAM,YAAA,GAAe,YAAY,YAAY,CAAA;AAC7C,gCAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AAAA,8BAC1C;AAAA,4BACF,CAAA,MAAO;AAEL,8BAAA,MAAM,YAAA,GAAe,YAAY,YAAY,CAAA;AAC7C,8BAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AAAA,4BAC1C;AAEA,4BAAA,MAAM,QAAA,GAAA,CAAY,UAAU,SAAA,IAAa,GAAA;AACzC,4BAAAA,KAAAA,CAAK,YAAA;AAAA,8BACH,uBAAA;AAAA,8BACA;AAAA,6BACF;AACA,4BAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,4BAAAzB,MAAK,GAAA,EAAI;AACT,4BAAA,OAAO,GAAA;AAAA,0BACT;AAEA,0BAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAKlB,0BAAA,IAAI;AACF,4BAAA,MAAM,CAAA,GACJ,OAAO,KAAA,EAAO,IAAA,KAAS,aACnB,KAAA,CAAM,IAAA,KACN,KAAA,EAAO,IAAA;AACb,4BAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,8BAAA,IAAI,CAAA,IAAK,CAAC,kBAAA,EAAoB;AAC5B,gCAAAA,KAAAA,CAAK,YAAA;AAAA,kCACH,wCAAA;AAAA,kCAAA,CACC,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa;AAAA,iCAC7B;AACA,gCAAA,kBAAA,GAAqB,IAAA;AAAA,8BACvB;AACA,8BAAA,SAAA,IAAa,CAAA;AAAA,4BACf;AAAA,0BACF,CAAA,CAAA,MAAQ;AAAA,0BAER;AAEA,0BAAA,UAAA,IAAc,CAAA;AACd,0BAAA,OAAO,GAAA;AAAA,wBACT,SAAS,KAAA,EAAO;AAEd,0BAAAA,MAAK,SAAA,CAAU;AAAA,4BACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,4BACrB,SACE,KAAA,YAAiB,KAAA,GACb,KAAA,CAAM,OAAA,GACN,OAAO,KAAK;AAAA,2BACnB,CAAA;AACD,0BAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,0BAAAA,MAAK,GAAA,EAAI;AACT,0BAAA,MAAM,KAAA;AAAA,wBACR;AAAA,sBACF,CAAA;AAAA,sBACA,MAAM,MAAA,GAAS;AAEb,wBAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,wBAAA,MAAM,QAAA,GAAA,CAAY,UAAU,SAAA,IAAa,GAAA;AACzC,wBAAAA,KAAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACnD,wBAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,wBAAAzB,MAAK,GAAA,EAAI;AACT,wBAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,sBACxC;AAAA,qBACF;AAAA,kBACF;AAAA,iBACF;AAGA,gBAAA,OAAO;AAAA,kBACL,GAAG,YAAA;AAAA,kBACH,MAAA,EAAQ;AAAA,iBACV;AAAA,cACF,SAAS,KAAA,EAAO;AACd,gBAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,KAAK,CAAA;AACzD,gBAAAA,MAAK,SAAA,CAAU;AAAA,kBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,kBACrB,SACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,iBACxD,CAAA;AACD,gBAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,gBAAAA,MAAK,GAAA,EAAI;AACT,gBAAA,MAAM,KAAA;AAAA,cACR;AAAA,YACF,CAAA,GAAG;AAAA,UACL,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,KAAK,CAAA;AACzD,YAAAA,MAAK,SAAA,CAAU;AAAA,cACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,cACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AACD,YAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,YAAAA,MAAK,GAAA,EAAI;AACT,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAMA,SAAS,2BAAA,CAA4B,MAAA,EAAgB,QAAA,EAAkB,WAAA,EAAqC;AAC1G,EAAA,MAAM,oBAAA,GAAuB,kBAAA,CAAmB,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA;AAC7E,EAAA,MAAM,0BAAA,GAA6B,wBAAA,CAAyB,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA;AAEzF,EAAA,OAAO,SAAS,QAA2C,QAAA,EAAgB;AACzE,IAAA,OAAO,YAA4B,IAAA,EAA0B;AAC3D,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAC7C,MAAA,IAAI,CAAC,aAAa,OAAO,WAAA;AAEzB,MAAA,MAAM,aAAA,GAAgB,IAAA;AACtB,MAAA,MAAM,YAAY,aAAA,CAAc,KAAA;AAChC,MAAA,MAAM,oBAAoB,aAAA,CAAc,iBAAA;AACxC,MAAA,MAAM,WAAA,GAAe,IAAA,CAAK,CAAC,CAAA,EAA2C,OAAA;AAEtE,MAAA,IAAI,OAAO,WAAA,CAAY,WAAA,KAAgB,UAAA,IAAc,CAAC,YAAY,eAAA,EAAiB;AACjF,QAAA,MAAM,mBAAA,GAAsB,WAAA,CAAY,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA;AACpE,QAAA,MAAM,kBAAA,GAAqB,qBAAqB,mBAAmB,CAAA;AAEnE,QAAA,WAAA,CAAY,WAAA,GAAc,YAA4B,QAAA,EAAiB;AACrE,UAAA,MAAM,GAAA,GAAM,IAAA;AACZ,UAAA,IAAI,SAAA,MAAe,KAAA,GAAQ,SAAA;AAC3B,UAAA,IAAI,iBAAA,MAAuB,iBAAA,GAAoB,iBAAA;AAC/C,UAAA,IAAI,WAAA,MAAiB,OAAA,GAAU,WAAA;AAC/B,UAAA,OAAO,kBAAA,CAAmB,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,QAChD,CAAA;AAEA,QAAA,IAAI,OAAO,WAAA,CAAY,iBAAA,KAAsB,UAAA,EAAY;AACvD,UAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,iBAAA,CAAkB,IAAA,CAAK,WAAW,CAAA;AACzE,UAAA,MAAM,iBAAA,GAAoB,2BAA2B,kBAAkB,CAAA;AAEvE,UAAA,WAAA,CAAY,iBAAA,GAAoB,YAA4B,QAAA,EAAiB;AAC3E,YAAA,MAAM,GAAA,GAAM,IAAA;AACZ,YAAA,IAAI,SAAA,MAAe,KAAA,GAAQ,SAAA;AAC3B,YAAA,IAAI,iBAAA,MAAuB,iBAAA,GAAoB,iBAAA;AAC/C,YAAA,IAAI,WAAA,MAAiB,OAAA,GAAU,WAAA;AAC/B,YAAA,OAAO,iBAAA,CAAkB,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,UAC/C,CAAA;AAAA,QACF;AAEA,QAAA,WAAA,CAAY,eAAA,GAAkB,IAAA;AAAA,MAChC;AAEA,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AAAA,EACF,CAAA;AACF;AAGO,IAAM6B,eAAc,CAAC,MAAA,KAC1B,kBAAA,CAAmB,MAAA,EAAQ,gBAAgB,MAAM,CAAA;AAE5C,IAAM,oBAAoB,CAAC,MAAA,KAChC,kBAAA,CAAmB,MAAA,EAAQ,qBAAqB,WAAW,CAAA;AAEtD,IAAMC,qBAAoB,CAAC,MAAA,KAChC,wBAAA,CAAyB,MAAA,EAAQ,gBAAgB,MAAM,CAAA;AAElD,IAAM,mBAAmB,CAAC,MAAA,KAC/B,2BAAA,CAA4B,MAAA,EAAQ,gBAAgB,MAAM,CAAA;AC5X5D,IAAMC,qBAAAA,GAAuB,oCAAA;AAC7B,IAAMC,YAAAA,GAAc,CAAC,yBAAyB,CAAA;AAG9C,IAAIC,eAAAA,GAAiB,KAAA;AACrB,IAAI,yBAAgC,EAAC;AAWrC,eAAe,8BAAA,GAAiD;AAC9D,EAAA,IAAI,sBAAA,CAAuB,MAAA,GAAS,CAAA,EAAG,OAAO,sBAAA;AAE9C,EAAA,IAAI;AAEF,IAAA,MAAM,iBAAA,GAAoB,MAAM,OAAO,uBAAuB,CAAA;AAC9D,IAAA,MAAM,WACJ,iBAAA,CAAkB,eAAA,IAClB,kBAAkB,OAAA,EAAS,eAAA,IAC3B,kBAAkB,OAAA,IAClB,iBAAA;AACF,IAAA,sBAAA,CAAuB,KAAK,QAAQ,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,uBAAuB,CAAA;AACvC,IAAA,MAAM,WACJ,GAAA,CAAI,eAAA,IACJ,IAAI,OAAA,EAAS,eAAA,IACb,IAAI,OAAA,IACJ,GAAA;AACF,IAAA,IAAI,CAAC,sBAAA,CAAuB,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC9C,MAAA,sBAAA,CAAuB,KAAK,QAAQ,CAAA;AAAA,IACtC;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO,sBAAA;AACT;AAMA,SAAS,yBAAA,GAAmC;AAC1C,EAAA,OAAO,sBAAA;AACT;AAKO,IAAM,sCAAN,MAA0C;AAAA,EAI/C,WAAA,GAAc;AAHd,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAAA,EAKhC;AAAA;AAAA;AAAA;AAAA,EAKA,2BAAA,GAAwC;AACtC,IAAA,OAAO,CAAC,GAAGF,YAAW,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,OAAA,GAA+B,EAAC,EACc;AAC9C,IAAA,IAAIC,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,8BAAA,EAA+B;AACrD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,cAAA,GACf,IAAA,CAAK,cAAA,CAAe,SAAA,CAAUF,qBAAAA,EAAsBL,YAAW,CAAA,GAC/D3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,QAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,0BAAA,CAA2B,KAAK,CAAC,CAAA;AAEjE,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,CACE,OAAA,GAA+B,EAAC,EACK;AACrC,IAAA,IAAIA,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAClD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,yBAAA,EAA0B;AAC1C,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM;AACzC,QAAA,MAAA,CAAO,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,MACtD,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,cAAA,GACf,IAAA,CAAK,cAAA,CAAe,SAAA,CAAUF,qBAAAA,EAAsBL,YAAW,CAAA,GAC/D3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,QAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,0BAAA,CAA2B,KAAK,CAAC,CAAA;AAEjE,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,yBAAA,EAA0B;AAC1C,IAAA,OAAA,CAAQ,QAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,4BAAA,CAA6B,KAAK,CAAC,CAAA;AAEnE,IAAA,sBAAA,GAAyB,EAAC;AAC1B,IAAAA,eAAAA,GAAiB,KAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAA0B;AACxB,IAAA,OAAOA,eAAAA;AAAA,EACT;AAAA,EAEQ,2BAA2B,eAAA,EAA4B;AAC7D,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,iBAAiB,SAAA,EAAW;AAC/B,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AAEpB,MAAAE,OAAAA,CAAQ,IAAA;AAAA,QACN,eAAA,CAAgB,SAAA;AAAA,QAChB,iBAAA;AAAA,QACAN,aAAY,MAAM;AAAA,OACpB;AAEA,MAAAM,OAAAA,CAAQ,IAAA;AAAA,QACN,eAAA,CAAgB,SAAA;AAAA,QAChB,uBAAA;AAAA,QACAL,mBAAkB,MAAM;AAAA,OAC1B;AAEA,MAAAK,OAAAA,CAAQ,IAAA;AAAA,QACN,eAAA,CAAgB,SAAA;AAAA,QAChB,cAAA;AAAA,QACA,kBAAkB,MAAM;AAAA,OAC1B;AAEA,MAAA,IAAI,OAAO,eAAA,CAAgB,SAAA,CAAU,SAAA,KAAc,UAAA,EAAY;AAC7D,QAAAA,OAAAA,CAAQ,IAAA;AAAA,UACN,eAAA,CAAgB,SAAA;AAAA,UAChB,WAAA;AAAA,UACA,iBAAiB,MAAM;AAAA,SACzB;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,uDAAuD,KAAK,CAAA;AAAA,OAC9D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,6BAA6B,eAAA,EAA4B;AAC/D,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,iBAAiB,SAAA,EAAW;AAEjC,MAAA,IAAI,OAAO,eAAA,CAAgB,SAAA,CAAU,eAAA,KAAoB,UAAA,EAAY;AACnE,QAAAA,OAAAA,CAAQ,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,iBAAiB,CAAA;AAAA,MAC7D;AACA,MAAA,IACE,OAAO,eAAA,CAAgB,SAAA,CAAU,qBAAA,KAA0B,UAAA,EAC3D;AACA,QAAAA,OAAAA,CAAQ,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,uBAAuB,CAAA;AAAA,MACnE;AACA,MAAA,IAAI,OAAO,eAAA,CAAgB,SAAA,CAAU,YAAA,KAAiB,UAAA,EAAY;AAChE,QAAAA,OAAAA,CAAQ,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,cAAc,CAAA;AAAA,MAC1D;AACA,MAAA,IAAI,OAAO,eAAA,CAAgB,SAAA,CAAU,SAAA,KAAc,UAAA,EAAY;AAC7D,QAAAA,OAAAA,CAAQ,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,WAAW,CAAA;AAAA,MACvD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,qCAAA,EAAwC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AACF,CAAA;AAGO,IAAM,8BAAA,GACX,IAAI,mCAAA,EAAoC;;;ACzPnC,IAAMT,YAAAA,GAAc,OAAA;;;ACOpB,SAASF,qBAAAA,CACdxB,KAAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,IAAA,MAAA,CAAO,IAAI,uBAAuB,CAAA;AAClC,IAAA;AAAA,EACF;AACA,EAAA,oBAAA,CAAyBA,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,MAAM,CAAA;AAC5D;AAEO,SAASuB,sBAAAA,CACdvB,OACA,QAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACvB,IAAA,MAAA,CAAO,IAAI,uBAAuB,CAAA;AAClC,IAAA;AAAA,EACF;AACA,EAAA,qBAAA,CAA0BA,OAAM,QAAQ,CAAA;AAC1C;;;AChBA,IAAMoC,eAAAA,GAAiB,WAAA;AACvB,IAAM,uBAAA,GAA6C,CAAC,MAAM,CAAA;AAE1D,SAAS,WAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,MACA,MAAA,EACS;AACT,IAAA,IAAI,+BAA8B,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,MAAA,OAAO,SAAA,CAAU,MAAM,CAAA,GAAI,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,KAAK,CAAA,GAAI,MAAA;AAAA,IAC7D;AAEA,IAAA,MAAM,WAAA,GAAc,OAAO,MAAA,KAAW,IAAA;AACtC,IAAA,IAAI,WAAA,IAAe,uBAAA,CAAwB,QAAA,CAAS,WAAW,CAAA,EAAG;AAEhE,MAAA,MAAM,cAAA,GAAiB7B,QAAQ,MAAA,EAAO;AACtC,MAAA,MAAMP,QAAO,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA;AAAA,QACA;AAAA,UACE,MAAMW,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,SAChD;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI;AACF,QAAAa,qBAAAA,CAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAC9C,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC/C,QAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,UAAA,OAAA,CAAQ,YAAY;AAClB,YAAA,IAAI;AACF,cAAA,MAAM,SAAc,MAAM,QAAA;AAC1B,cAAA,OAAO,IAAI,qBAAA,CAAsBA,KAAAA,EAAM,MAAA,EAAQ,WAAW,MAAM,CAAA;AAAA,YAClE,SAAS,KAAA,EAAO;AACd,cAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AACjD,cAAAA,MAAK,SAAA,CAAU;AAAA,gBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,gBACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,eAC/D,CAAA;AACD,cAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,cAAAA,MAAK,GAAA,EAAI;AACT,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF,CAAA,GAAG;AAAA,QACL,CAAA,MAAO;AACL,UAAA,OAAO,IAAI,gBAAA,CAAiBA,KAAAA,EAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,QAC/D;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AACjD,QAAAA,MAAK,SAAA,CAAU;AAAA,UACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,UACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC/D,CAAA;AACD,QAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,QAAAA,MAAK,GAAA,EAAI;AACT,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAA,CAAO,eAAA;AAAA,QACZ,QAAA;AAAA,QACA;AAAA,UACE,MAAMW,QAAAA,CAAS,MAAA;AAAA,UACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,SAChD;AAAA,QACA,CAACX,KAAAA,KAAe;AACd,UAAA,IAAI;AACF,YAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAC9C,YAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,YAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC/C,YAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,cAAA,OAAA,CAAQ,YAAY;AAClB,gBAAA,IAAI;AACF,kBAAA,MAAM,QAAQ,MAAM,QAAA;AACpB,kBAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,kBAAA,MAAM,YAAA,GAAe,YAAY,KAAK,CAAA;AACtC,kBAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,kBAAAA,KAAAA,CAAK,YAAA;AAAA,oBACH,uBAAA;AAAA,oBAAA,CACC,UAAU,SAAA,IAAa;AAAA,mBAC1B;AACA,kBAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,kBAAAzB,MAAK,GAAA,EAAI;AACT,kBAAA,OAAO,KAAA;AAAA,gBACT,SAAS,KAAA,EAAO;AACd,kBAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AACjD,kBAAAA,MAAK,SAAA,CAAU;AAAA,oBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,oBACrB,SACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,mBACxD,CAAA;AACD,kBAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,kBAAAA,MAAK,GAAA,EAAI;AACT,kBAAA,MAAM,KAAA;AAAA,gBACR;AAAA,cACF,CAAA,GAAG;AAAA,YACL,CAAA,MAAO;AACL,cAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,cAAA,MAAM,YAAA,GAAe,YAAY,QAAQ,CAAA;AACzC,cAAAuB,sBAAAA,CAAsBvB,OAAM,YAAY,CAAA;AACxC,cAAAA,KAAAA,CAAK,YAAA;AAAA,gBACH,uBAAA;AAAA,gBAAA,CACC,UAAU,SAAA,IAAa;AAAA,eAC1B;AACA,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAAzB,MAAK,GAAA,EAAI;AACT,cAAA,OAAO,QAAA;AAAA,YACT;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,+BAA+B,KAAK,CAAA;AACjD,YAAAA,MAAK,SAAA,CAAU;AAAA,cACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,cACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AACD,YAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,YAAAA,MAAK,GAAA,EAAI;AACT,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAEO,IAAM6B,eAAc,CAAC,MAAA,KAC1B,WAAA,CAAY,MAAA,EAAQO,iBAAgB,MAAM,CAAA;AAErC,IAAM,mBAAN,MAAuE;AAAA,EAS5E,WAAA,CAAYpC,KAAAA,EAAY,QAAA,EAAe,SAAA,EAAmB,aAAA,EAAoC;AAR9F,IAAA,IAAA,CAAQ,QAAA,GAAqC,IAAA;AAC7C,IAAA,IAAA,CAAQ,mBAAwC,EAAE,OAAA,EAAS,EAAC,EAAG,OAAO,EAAA,EAAG;AAQvE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AAAA,EACnD;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAuB;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAgC;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,OAAO,KAAK,QAAA,KAAa,QAAA;AAC3D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,IAAI,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,QAAQ,MAAM,UAAA,EAAY;AACxD,UAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,QACjD,CAAA,MAAA,IACE,OAAQ,IAAA,CAAK,QAAA,CAA+B,SAAS,UAAA,EACrD;AACA,UAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,QAC/C;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,MAC5C;AAEA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,CAAayB,eAAe,EAAE,CAAA;AACnC,QAAA,OAAO,MAAA;AAAA,MACT;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,YAAA,CAAaA,eAAe,KAAK,CAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,aAAa,KAAA,EAAkB;AACrC,IAAA,MAAM,YACJ,OAAO,KAAA,EAAO,WAAW,UAAA,GAAa,KAAA,CAAM,QAAO,GAAI,KAAA;AACzD,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAEtC,IAAA,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAE7D,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,OAAA,IAAW,EAAC;AAC3C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC/B,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,MAAA,KAAgB;AACpC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,EAAC;AAC/B,QAAA,IAAI,OAAO,OAAA,EAAS;AAClB,UAAA,IAAI,CAAC,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,EAAS;AAC3B,YAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,UAC5D;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,CAAQ,OAAA,IAAW,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,QACxD;AAEA,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,aAAA,GAAgB,MAAA,CAAO,aAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAE7D,IAAA,IAAI,SAAA,CAAU,QAAA,EAAU,MAAA,KAAW,WAAA,EAAa;AAC9C,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,QAAA,CAAS,MAAA,IAAU,EAAC;AAC9C,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAgB;AAC/B,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAc;AAC7B,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,SAAS,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,IAAA,CAAK,QAAQ,EAAA;AAAG,WACxD,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,GAAQ,SAAA,CAAU,QAAA,CAAS,SAAS,EAAC;AAAA,IAC7D;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,8BAA8B,CAAA;AAAA,EACnD;AAAA,EAEQ,aAAa,KAAA,EAAqB;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AACtC,IAAA,MAAM,MAAA,GAAS,CAAC,CAAC,IAAA,CAAK,aAAA,EAAe,QAAA;AACrC,IAAA,OAAO,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC9B,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,MAAA,GAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,EAAA,EAAG,EAAE,GAAI,EAAE,IAAA,EAAM,EAAA;AAAG,OACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,IAAA,EAA4B;AAC/C,IAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAK,SAAA,IAAa,GAAA;AACjD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACxD,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EAChB;AACF,CAAA;AAEO,IAAM,wBAAN,MAEP;AAAA,EAYE,WAAA,CAAYzB,KAAAA,EAAY,QAAA,EAAe,SAAA,EAAmB,aAAA,EAAoC;AAX9F,IAAA,IAAA,CAAQ,QAAA,GAA0C,IAAA;AAClD,IAAA,IAAA,CAAQ,gBAAA,GAA4C;AAAA,MAClD,SAAS,EAAC;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAQE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AAAA,EACnD;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,CAAC,MAAA,CAAO,aAAa,CAAA,GAA4B;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAyC;AAC7C,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,OAAO,KAAK,QAAA,KAAa,QAAA;AAC3D,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,QAC/C;AAEA,QAAA,IAAI,MAAA,CAAO,aAAA,IAAiB,IAAA,CAAK,QAAA,EAAU;AACzC,UAAA,IAAA,CAAK,QAAA,GAAY,IAAA,CAAK,QAAA,CACpB,MAAA,CAAO,aACT,CAAA,EAAE;AAAA,QACJ,CAAA,MAAA,IAAW,MAAA,CAAO,QAAA,IAAa,IAAA,CAAK,QAAA,EAAkB;AACpD,UAAA,MAAM,YAAA,GAAgB,IAAA,CAAK,QAAA,CACzB,MAAA,CAAO,QACT,CAAA,EAAE;AACF,UAAA,IAAA,CAAK,QAAA,GAAW;AAAA,YACd,MAAM,IAAA,GAAO;AACX,cAAA,OAAO,aAAa,IAAA,EAAK;AAAA,YAC3B;AAAA,WACF;AAAA,QACF,CAAA,MAAA,IACE,OAAQ,IAAA,CAAK,QAAA,CAAoC,SAAS,UAAA,EAC1D;AACA,UAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,QAC5C;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AACxC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,CAAayB,eAAe,EAAE,CAAA;AACnC,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,YAAA,CAAaA,eAAe,KAAK,CAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,aAAa,KAAA,EAAkB;AACrC,IAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAGtC,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,YAAA,GAAgB,SAAA,CAAU,OAAA,IAAW,EAAC;AAK5C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC/B,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,MAAA,KAAgB;AACpC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AACvB,QAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,UAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAC/C,UAAA,MAAM,WAAA,GAAc,QAAQ,KAAK,CAAA;AACjC,UAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,YAAA,WAAA,CAAY,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,UACzD;AACA,UAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,UAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,GAAI,YAAA;AAAA,QACpD;AAEA,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,aAAA,GAAgB,MAAA,CAAO,aAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,SAAA,CAAU,KAAA,EAAO,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAG7D,IAAA,IAAK,SAAA,CAAU,QAAA,EAAkB,MAAA,KAAW,WAAA,EAAa;AACvD,MAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,MAAA,MAAM,cAAA,GAAkB,QAAA,CAAS,MAAA,IAAU,EAAC;AAG5C,MAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,MAAA,KAAgB;AACtC,QAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,KAAA,MAAW,eAAe,OAAA,EAAS;AACjC,YAAA,MAAM,aAAA,GAAgB,YAAY,IAAA,IAAQ,EAAA;AAE1C,YACE,IAAA,CAAK,gBAAA,CAAiB,OAAA,CACtB,IAAA,CAAK;AAAA,cACL,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,aAAA;AAAc,aACtD,CAAA;AAAA,UACH;AAAA,QACF;AACA,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,IAAS,EAAC;AACjC,QAAA,IAAA,CAAK,iBAAiB,KAAA,GAAQ,KAAA;AAAA,MAChC,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,8BAA8B,CAAA;AAAA,EACnD;AAAA,EAEQ,aAAa,KAAA,EAAqB;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AACtC,IAAA,MAAM,MAAA,GAAS,CAAC,CAAC,IAAA,CAAK,aAAA,EAAe,QAAA;AACrC,IAAA,OAAO,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC9B,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,MAAA,GAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,EAAA,EAAG,EAAE,GAAI,EAAE,IAAA,EAAM,EAAA;AAAG,OACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,IAAA,EAA4B;AAC/C,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,MAAM,QAAA,GAAA,CAAY,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,GAAA;AAC9C,IAAAF,sBAAAA,CAAsB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACxD,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAC5B,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EAChB;AACF,CAAA;;;AC1ZA,IAAMQ,qBAAAA,GAAuB,4BAAA;AAC7B,IAAMC,YAAAA,GAAc,CAAC,mBAAmB,CAAA;AACxC,IAAM,eAAA,uBAA6C,GAAA,EAAI;AACvD,IAAIC,eAAAA,GAAiB,KAAA;AAGrB,IAAI,cAAqB,EAAC;AAW1B,eAAe,gBAAA,GAAmC;AAChD,EAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,OAAO,WAAA;AAEnC,EAAA,IAAI;AAEF,IAAA,MAAM,UAAA,GAAa,MAAM,OAAO,UAAU,CAAA;AAC1C,IAAA,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,IAAA,IAAQ,UAAA,CAAW,WAAW,UAAU,CAAA;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,UAAU,CAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,OAAA,IAAW,GAAA;AAC5C,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnC,MAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,WAAA;AACT;AAMA,SAAS,WAAA,GAAqB;AAC5B,EAAA,OAAO,WAAA;AACT;AAEO,IAAM,wBAAN,MAA4B;AAAA,EAIjC,WAAA,GAAc;AAHd,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAAA,EAGjB;AAAA,EACf,2BAAA,GAAwC;AACtC,IAAA,OAAOF,YAAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,OAAA,GAA+B,EAAC,EACA;AAChC,IAAA,IAAIC,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,EAAiB;AACvC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,CAAe,SAAA;AAAA,UAChCF,qBAAAA;AAAA,UACAL;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,MACjE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC/B,MAAA,IAAA,CAAK,0BAAA,CAA2B,MAAM,KAAK,CAAA;AAAA,IAC7C,CAAC,CAAA;AAED,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA,CAAW,OAAA,GAA+B,EAAC,EAA0B;AACnE,IAAA,IAAIA,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM;AACzC,QAAA,MAAA,CAAO,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,MAC9C,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,CAAe,SAAA;AAAA,UAChCF,qBAAAA;AAAA,UACAL;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,MACjE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC/B,MAAA,IAAA,CAAK,0BAAA,CAA2B,MAAM,KAAK,CAAA;AAAA,IAC7C,CAAC,CAAA;AAED,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC/B,MAAA,IAAA,CAAK,4BAAA,CAA6B,MAAM,KAAK,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,eAAA,CAAgB,KAAA,EAAM;AACtB,IAAA,WAAA,GAAc,EAAC;AACf,IAAAA,eAAAA,GAAiB,KAAA;AAAA,EACnB;AAAA,EAEA,cAAA,GAA0B;AACxB,IAAA,OAAOA,eAAAA;AAAA,EACT;AAAA,EAEQ,0BAAA,CAA2B,MAAW,KAAA,EAAqB;AACjE,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AACvD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,KAAK,IAAA,EAAM,WAAA;AAEpC,MAAA,IAAI,CAAC,gBAAA,EAAkB,SAAA,EAAW,MAAA,EAAQ;AACxC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,cAAA,GAAiB,iBAAiB,SAAA,CAAU,MAAA;AAClD,MAAA,eAAA,CAAgB,GAAA,CAAI,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAA,EAAI,cAAc,CAAA;AAEtE,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAM,OAAA,GAAUJ,aAAY,MAAM,CAAA;AAElC,MAAA,gBAAA,CAAiB,SAAA,CAAU,MAAA,GAAS,SAAA,GAE/B,IAAA,EACM;AACT,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,QAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,QAAA,MAAM,SAAA,GAAY,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AACpD,QAAA,OAAO,OAAA,CAAQ,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAAA,MAC9C,CAAA;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,gEAAgE,KAAK,CAAA;AAAA,OACvE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,4BAAA,CAA6B,MAAW,KAAA,EAAqB;AACnE,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,KAAK,IAAA,EAAM,WAAA;AAEpC,MAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,GAAA,CAAI,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAC7E,MAAA,IAAI,cAAA,IAAkB,kBAAkB,SAAA,EAAW;AACjD,QAAA,gBAAA,CAAiB,UAAU,MAAA,GACzB,cAAA;AAAA,MACJ;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yCAAA,EAA4C,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AACF,CAAA;AAEO,IAAM,gBAAA,GAAmB,IAAI,qBAAA,EAAsB;;;ACjOnD,IAAMH,YAAAA,GAAc,OAAA;;;ACC3B,IAAI,YAAY,MAAA,CAAO,cAAA;AACvB,IAAI,QAAA,GAAW,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC/B,EAAA,KAAA,IAAS,IAAA,IAAQ,GAAA,EAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM;AAAA,IAC7C,GAAA,EAAK,IAAI,IAAI,CAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACZ,CAAA;AACF,CAAA;;;;;ACKA,SAAgB,SAAA,CAAUW,KAAaC,GAAAA,EAAkC;AACvE,EAAA,OAAO,GAAA,GAAM,GAAA,CAAA,IAAA,IAAQ,iBAAA,CAAAC,SAAU,GAAA,CAAA;AAChC;AAMD,SAAgB,OAAA,CACdC,MAAAA,EACAC,MAAAA,EACAH,GAAAA,EACkB;AAClB,EAAA,MAAMI,SAA2B,EAAE;AAEnC,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,EAChB,IAAI,MAAA,CAAO,OAAO,MAAA,EAAQ,GAAA,CAAA,EACxB,MAAA,CAAO,OAAO,GAAA,EAAK,GAAA,CAAI,CAAA,GAAI,OAAO,GAAA,CAAA;AAItC,EAAA,OAAO,MAAA;AACR;;;AC5BD,IAAa,cAAA,GAAiB,gBAAA;AAS9B,SAAgB,cAAcC,GAAAA,EAAuC;AACnE,EAAA,OACE,IAAA,IAAQ,OAAQ,MAAA,CAAO,IAAA,CAAK,GAAA,CAAA,CAAK,MAAA,KAAW,KAAK,cAAA,IAAkB,GAAA;AAEtE;AAUD,SAAgB,aACdA,GAAAA,EACyB;AACzB,EAAA,OAAO,EAAA,CAAG,cAAA,GAAiB,GAAA,EAAK;AACjC;AAgCD,SAAS,mBAAmBC,GAAAA,EAAuC;AACjE,EAAA,OACE,GAAA,KAAQ,QACR,OAAO,GAAA,KAAQ,YACf,iBAAA,IAAqB,GAAA,IACrB,OAAQ,GAAA,CAAyB,MAAA,KAAW,UAAA;AAE/C;AAKD,SAAS,qBAAqBA,GAAAA,EAI5B;AACA,EAAA,IAAIC,EAAAA;AACJ,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,UACjC,IAAI,OAAA,IAAW,GAAA,IAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAA,OACjC,GAAA,CAAI,KAAA;AAET,OAAA,EAAA,GAAK,CAAC,GAAA,CAAI,WAAA,EAAa,IAAA,IAAQ,QAAS,CAAA;OAG1C,EAAA,GAAK,CAAC,OAAO,GAAI,CAAA;AAEnB,EAAA,OAAO;IACL,EAAA,EAAI,CAAA;IACJ,IAAA,EAAM,iBAAA;AACN,IAAA;AACD,GAAA;AACF;AAoID,SAAgB,cAAA,CACdC,KAAAA,EACAC,OAAAA,mBAA2B,IAAI,SAAA,EACtB;AACT,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAA,EAAQ;AAExE,IAAA,IAAI,QAAQ,GAAA,CAAI,KAAA,CAAA,EAEd,OAAO,qBAAqB,KAAA,CAAA;AAK9B,IAAA,IAAI,kBAAA,CAAmB,KAAA,CAAA,EACrB,OAAO,KAAA;AAIT,IAAA,OAAA,CAAQ,IAAI,KAAA,CAAA;AAEZ,IAAA,MAAM,MAAA,GAAS,KAAA;AAIf,IAAA,IAAI,aAAA,CAAc,MAAA,CAAA,EAAS;AAEzB,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAA;AACf,MAAA,OAAO,aAAa,MAAA,CAAA;AACrB,IAAA;AAED,IAAA,MAAMC,SAAkC,EAAE;AAC1C,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAA,CAAA,IAAQ,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAA,EACtC,MAAA,CAAO,GAAA,CAAA,GAAO,cAAA,CAAe,KAAK,OAAA,CAAA;AAGpC,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAA;AACf,IAAA,OAAO,MAAA;AACR,EAAA;AAED,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAA,EAChB,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,cAAA,CAAe,IAAA,EAAM,OAAA,CAAQ,CAAA;AAG1D,EAAA,OAAO,KAAA;AACR;;;;;;;;ACvPD,SAAS,YAA8BC,GAAAA,EAAW;AAChD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAA,GAAQ,CAAC,GAAG,GAAI,CAAA,GAAU,EAAE,GAAG,GAAA,EAAK;AAC1D;AAED,SAAS,cAAA,CACPC,MACAC,UAAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAA;AAC3B,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAA,KAAa,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAA,EAAa;AACzD,IAAA,MAAM,CAAC,MAAM,GAAG,YAAA,IAAgB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAA,CAAK,OAAA,EAAA;AAEhD,IAAA,IAAIC,OAAAA,GAAe,MAAA;AACnB,IAAA,KAAA,MAAW,IAAA,IAAQ,YAAA,CAAa,OAAA,EAAA,EAAW;AACzC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAA,KAAU,MAAA,EACpB;AAEF,MAAA,OAAA,CAAQ,IAAA,CAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAA,CAAA;AACpC,MAAA,OAAA,GAAU,QAAQ,IAAA,CAAA;AACnB,IAAA;AACD,IAAA,IAAI,QAAQ,IAAA,CAAA,KAAU,MAAA,EACpB,OAAA,CAAQ,IAAA,CAAA,GAAQ;MACd,EAAA,EAAI,CAAA;MACJ,IAAA,EAAM,QAAA;AACN,MAAA,EAAA,EAAI,CAAC,QAAS;AACf,KAAA;AAEJ,EAAA;AACD,EAAA,OAAO,MAAA;AACR;AAMD,SAAgB,mBACdC,iBAAAA,EACQ;AAGR,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,cAAA,CAAe,iBAAA,CAAA;AAC1C,EAAA,MAAM,kBAAA,GACJ,OAAO,iBAAA,CAAkB,OAAA,KAAY,UAAA,KACpC,OAAO,WAAA,CAAY,OAAA,KAAY,UAAA,IAC9B,iBAAA,CAAkB,OAAA,EAAA,KAAc,YAAY,OAAA,EAAA,CAAA;AAChD,EAAA,IAAI,kBAAA,EACF,OAAO,iBAAA,CAAkB,OAAA,EAAA;AAEzB,OAAA,OAAO,iBAAA,CAAkB,IAAA;AAE5B;AAqBD,IAAsB,YAAA,GAAtB,MAAsBC,aAAAA,CAA8C;AAoElE,EAAA,WAAA,CAAYC,WAA8B,KAAA,EAAgB;AAnE1D,IAAA,aAAA,CAAA,IAAA,EAAA,iBAAA,EAAkB,KAAA,CAAA;AAElB,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAkEE,IAAA,IAAI,IAAA,CAAK,yBAAyB,MAAA,EAChC,IAAA,CAAK,YAAY,MAAA,CAAO,WAAA,CACtB,MAAA,CAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,GAAA,CAAA,KACpC,KAAK,oBAAA,EAAsB,QAAA,CAAS,GAAA,CAAI,CACzC,CAAA;SAGH,IAAA,CAAK,SAAA,GAAY,UAAU,EAAE;AAEhC,EAAA;;;;;;;AA7DD,EAAA,OAAO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AACb,EAAA;;;;AAKD,EAAA,IAAI,KAAA,GAAkB;AACpB,IAAA,OAAO,CACL,GAAG,IAAA,CAAK,cACR,kBAAA,CAAmB,IAAA,CAAK,WAAA,CACzB,CAAA;AACF,EAAA;;;;;;AAOD,EAAA,IAAI,UAAA,GAAoD;AACtD,IAAA,OAAO,MAAA;AACR,EAAA;;;;;;;AAQD,EAAA,IAAI,aAAA,GAA8C;AAChD,IAAA,OAAO,MAAA;AACR,EAAA;;;;;;;AAQD,EAAA,IAAI,UAAA,GAAoD;AACtD,IAAA,OAAO,MAAA;AACR,EAAA;;;;;AAMD,EAAA,IAAI,oBAAA,GAA6C;AAC/C,IAAA,OAAO,MAAA;AACR,EAAA;EAcD,MAAA,GAAqB;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,EACR,OAAO,KAAK,oBAAA,EAAA;AAEd,IAAA,IAEE,IAAA,CAAK,SAAA,YAAqBD,aAAAA,IAC1B,OAAO,KAAK,SAAA,KAAc,QAAA,IAC1B,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAA,EAInB,OAAO,KAAK,oBAAA,EAAA;AAGd,IAAA,MAAME,UAAqC,EAAE;AAC7C,IAAA,MAAMC,UAAqC,EAAE;AAC7C,IAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAA,CAAW,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ;AAC9D,MAAA,GAAA,CAAI,GAAA,IAAO,GAAA,IAAO,IAAA,GAAO,KAAK,GAAA,CAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAA;AAClE,MAAA,OAAO,GAAA;AACR,IAAA,CAAA,EAAE,EAAE,CAAA;AAEL,IAAA,KAAA,IACM,OAAA,GAAU,MAAA,CAAO,cAAA,CAAe,IAAA,CAAA,EACpC,SACA,OAAA,GAAU,MAAA,CAAO,cAAA,CAAe,OAAA,CAAA,EAChC;AACA,MAAA,MAAA,CAAO,OAAO,OAAA,EAAS,OAAA,CAAQ,IAAI,OAAA,EAAS,YAAA,EAAc,IAAA,CAAK,CAAA;AAC/D,MAAA,MAAA,CAAO,OAAO,OAAA,EAAS,OAAA,CAAQ,IAAI,OAAA,EAAS,YAAA,EAAc,IAAA,CAAK,CAAA;AAC/D,MAAA,MAAA,CAAO,OAAO,MAAA,EAAQ,OAAA,CAAQ,IAAI,OAAA,EAAS,eAAA,EAAiB,IAAA,CAAK,CAAA;AAClE,IAAA;AAID,IAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AAExC,MAAA,IAAIC,IAAAA,GAAY,IAAA;AAGhB,MAAA,IAAIC,KAAAA,GAAa,MAAA;AAEjB,MAAA,MAAM,CAAC,MAAM,GAAG,YAAA,IAAgB,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAA,CAAK,OAAA,EAAA;AACnD,MAAA,KAAA,MAAW,GAAA,IAAO,YAAA,CAAa,OAAA,EAAA,EAAW;AACxC,QAAA,IAAI,EAAE,GAAA,IAAO,IAAA,CAAA,IAAS,IAAA,CAAK,GAAA,MAAS,MAAA,EAAW;AAC/C,QAAA,IAAI,EAAE,GAAA,IAAO,KAAA,CAAA,IAAU,KAAA,CAAM,GAAA,MAAS,MAAA,EACpC;cAAI,OAAO,IAAA,CAAK,GAAA,CAAA,KAAS,QAAA,IAAY,IAAA,CAAK,GAAA,CAAA,IAAQ,IAAA,EAChD,KAAA,CAAM,GAAA,CAAA,GAAO,EAAE;mBACN,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAA,CAAA,GAC5B,KAAA,CAAM,GAAA,IAAO,EAAE;AAChB,QAAA;AAGH,QAAA,IAAA,GAAO,KAAK,GAAA,CAAA;AACZ,QAAA,KAAA,GAAQ,MAAM,GAAA,CAAA;AACf,MAAA;AAED,MAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAA,KAAU,MAAA,EACjC,KAAA,CAAM,IAAA,CAAA,GAAQ,KAAA,CAAM,IAAA,CAAA,IAAS,KAAK,IAAA,CAAA;IAErC,CAAA,CAAA;AAED,IAAA,MAAMC,gBAAkC,EAAE;AAG1C,IAAA,MAAM,OAAA,uBAAc,OAAA,EAAA;AACpB,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAA;AACZ,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAA,CAAA,IAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAA,EACxC,aAAA,CAAc,GAAA,CAAA,GAAO,cAAA,CAAe,OAAO,OAAA,CAAA;AAI7C,IAAA,MAAM,iBAAA,GAAoB,OAAO,IAAA,CAAK,OAAA,EAAS,MAAA,GAC3C,cAAA,CAAe,aAAA,EAAe,OAAA,CAAA,GAC9B,aAAA;AAGJ,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,iBAAA,EAAmB,SAAA,EAAW,OAAA,CAAA;AAE9D,IAAA,OAAO;MACL,EAAA,EAAI,CAAA;MACJ,IAAA,EAAM,aAAA;AACN,MAAA,EAAA,EAAI,IAAA,CAAK,KAAA;MACT,MAAA,EAAQ;AACT,KAAA;AACF,EAAA;EAED,oBAAA,GAAiD;AAC/C,IAAA,OAAO;MACL,EAAA,EAAI,CAAA;MACJ,IAAA,EAAM,iBAAA;AACN,MAAA,EAAA,EAAI,IAAA,CAAK;AACV,KAAA;AACF,EAAA;AACF,CAAA;;;;;;;;;;;;;;AChQD,IAAa,YAAY,MACvB,OAAO,WAAW,WAAA,IAAe,OAAO,OAAO,QAAA,KAAa,WAAA;AAE9D,IAAa,WAAA,GAAc,MACzB,OAAO,UAAA,KAAe,YACtB,UAAA,CAAW,WAAA,IACX,UAAA,CAAW,WAAA,CAAY,IAAA,KAAS,4BAAA;AAElC,IAAa,OAAA,GAAU,MACpB,OAAO,MAAA,KAAW,eAAe,MAAA,CAAO,IAAA,KAAS,QAAA,IACjD,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,CAAU,SAAA,CAAU,SAAS,OAAA,CAAA;AAIpE,IAAa,MAAA,GAAS,MAAM,OAAO,IAAA,KAAS,WAAA;AAG5C,IAAa,MAAA,GAAS,MACpB,OAAO,OAAA,KAAY,eACnB,OAAO,OAAA,CAAQ,QAAA,KAAa,WAAA,IAC5B,OAAO,OAAA,CAAQ,QAAA,CAAS,IAAA,KAAS,WAAA,IACjC,CAAC,MAAA,EAAA;AAEH,IAAa,SAAS,MAAM;AAC1B,EAAA,IAAIC,GAAAA;AACJ,EAAA,IAAI,SAAA,IACF,GAAA,GAAM,SAAA;AACG,OAAA,IAAA,MAAA,IACT,GAAA,GAAM,MAAA;AACG,OAAA,IAAA,WAAA,IACT,GAAA,GAAM,WAAA;AACG,OAAA,IAAA,OAAA,IACT,GAAA,GAAM,OAAA;AACG,OAAA,IAAA,MAAA,IACT,GAAA,GAAM,MAAA;OAEN,GAAA,GAAM,OAAA;AAGR,EAAA,OAAO,GAAA;AACR,CAAA;AASD,IAAIC,kBAAAA;AAEJ,SAAgB,qBAAA,GAA4C;AAC1D,EAAA,IAAI,uBAAuB,MAAA,EAAW;AACpC,IAAA,MAAM,MAAM,MAAA,EAAA;AAEZ,IAAA,kBAAA,GAAqB;MACnB,OAAA,EAAS,cAAA;MACT,OAAA,EAAS;AACV,KAAA;AACF,EAAA;AACD,EAAA,OAAO,kBAAA;AACR;AAED,SAAgB,uBAAuBC,IAAAA,EAAkC;AAGvE,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,EAErB,OAAO,OAAA,CAAQ,MAAM,IAAA,CAAA;AACZ,SAAA,IAAA,MAAA,EAAA,EACT,OAAO,IAAA,EAAM,GAAA,CAAI,IAAI,IAAA,CAAA;SAErB,OAAO,KAAA,CAAA;EAEV,CAAA,CAAA,MAAO;AACN,IAAA,OAAO,MAAA;AACR,EAAA;AACF;;;;;;;;;;ACpCD,IAAe,kCAAf,MAA+C;AA6N9C,CAAA;AAsBD,SAAgB,gCAAgCC,CAAAA,EAAwB;AACtE,EAAA,OAAO,qBAAA,IAAyB,KAAK,CAAA,CAAE,mBAAA;AACxC;AAQD,IAAsB,mBAAA,GAAtB,cACU,+BAAA,CAEV;AA8DE,EAAA,WAAA,CAAYC,KAAAA,EAAkC;AAC5C,IAAA,KAAA,EAAA;AA9DF,IAAA,aAAA,CAAA,IAAA,EAAA,iBAAA,EAAkB,KAAA,CAAA;AA0ClB,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAIA,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,EAAY,KAAA,CAAA;AAEZ,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,KAAA,CAAA;AAEd,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,KAAA,CAAA;AAEd,IAAA,aAAA,CAAA,IAAA,EAAA,iBAAA,EAAkB,KAAA,CAAA;AAElB,IAAA,aAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,KAAA,CAAA;AAEpB,IAAA,aAAA,CAAA,IAAA,EAAA,YAAA,EAAa,KAAA,CAAA;AAEb,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,EACE,sBAAA,CAAuB,gCAAA,CAAA,KAAsC,OAAA,CAAA;AAI7D,IAAA,IAAA,CAAK,SAAA,GAAY,SAAS,EAAE;AAC5B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,SAAA;AACzC,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,IAAA,CAAK,WAAA;AAC7C,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,IAAA,CAAK,WAAA;AAC7C,MAAA,IAAA,CAAK,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,IAAA,CAAK,eAAA;AACrD,MAAA,IAAA,CAAK,iBAAA,GACH,KAAA,CAAM,iBAAA,IAAqB,IAAA,CAAK,iBAAA;AAClC,MAAA,IAAA,CAAK,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,IAAA,CAAK,UAAA;AAC3C,MAAA,IAAA,CAAK,aAAA,GACH,IAAA,CAAK,UAAA,KAAe,KAAA,CAAM,iBAAiB,IAAA,CAAK,aAAA,CAAA;AACnD,IAAA;AACF,EAAA;AAzED,EAAA,IAAI,YAAA,GAAwD;AAC1D,IAAA,OAAO;AAAC,MAAA,gBAAA;AAAkB,MAAA,WAAA;MAAa,IAAA,CAAK;AAAK,KAAA;AAClD,EAAA;AAED,EAAA,IAAI,UAAA,GAAoD;AACtD,IAAA,OAAO,MAAA;AACR,EAAA;AAED,EAAA,IAAI,aAAA,GAAuD;AACzD,IAAA,OAAO,MAAA;AACR,EAAA;AAED,EAAA,IAAI,UAAA,GAAoD;AACtD,IAAA,OAAO,MAAA;AACR,EAAA;AAED,EAAA,IAAI,oBAAA,GAA6C;AAC/C,IAAA,OAAO,MAAA;AACR,EAAA;;;;;;;AAQD,EAAA,OAAO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AACb,EAAA;;;;AAKD,EAAA,IAAI,KAAA,GAAkB;AACpB,IAAA,OAAO,CACL,GAAG,IAAA,CAAK,cACR,kBAAA,CAAmB,IAAA,CAAK,WAAA,CACzB,CAAA;AACF,EAAA;EAqCD,IAAA,GAA4B;AAC1B,IAAA,OAAO,IAAK,IAAA,CAAK,WAAA,CAES,IAAA,CAAA;AAC3B,EAAA;EAED,MAAA,GAAqB;AACnB,IAAA,OAAO,YAAA,CAAa,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,IAAA,CAAA;AAC3C,EAAA;EAED,oBAAA,GAAiD;AAC/C,IAAA,OAAO,YAAA,CAAa,SAAA,CAAU,oBAAA,CAAqB,IAAA,CAAK,IAAA,CAAA;AACzD,EAAA;AAED,EAAA,OAAO,YAAYC,OAAAA,EAAiC;AAClD,IAAA,MAAM,gBAAgB,mBAAA,CAAoB;MAGxC,WAAA,GAAc;AACZ,QAAA,KAAA,EAAA;AAHF,QAAA,aAAA,CAAA,IAAA,EAAA,MAAA,EAAY,UAAA,EAAA,CAAA;AAIV,QAAA,MAAA,CAAO,MAAA,CAAO,MAAM,OAAA,CAAA;AACrB,MAAA;AACF;AACD,IAAA,OAAO,IAAI,OAAA,EAAA;AACZ,EAAA;AACF,CAAA;AAED,IAAa,qBAAA,GAAwB,CAACC,CAAAA,KAAe;AACnD,EAAA,MAAM,eAAA,GAAkB,CAAA;AACxB,EAAA,OACE,eAAA,KAAoB,MAAA,IACpB,OAAO,eAAA,CAAgB,IAAA,KAAS,UAAA,IAChC,OAAO,eAAA,CAAgB,IAAA,KAAS,QAAA,IAChC,OAAO,eAAA,CAAgB,aAAA,KAAkB,SAAA;AAE5C,CAAA;;;ACraM,IAAM,wBAAA,GAA2B;AAAA,EACtC,QAAA,EAAU,iBAAA;AAAA,EACV,WAAA,EAAa,oBAAA;AAAA,EACb,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,GAAA,KAAgB;AACjC,EAAA,MAAM,cAAA,GAAiB,CAAC,kBAAkB,CAAA;AAC1C,EAAA,OAAO,CAAC,cAAA,CAAe,QAAA,CAAS,GAAG,CAAA;AACrC,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,GAAA,KAAgB;AACtC,EAAA,OAAO,CAAC,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA;AAC7B,CAAA;AAEO,SAAS,uBAAA,CACdnE,OACA,MAAA,EACM;AACN,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,WAAA;AAAA,IACzB,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ;AAAA,GAC3B;AACF;AAEO,SAAS,wBAAA,CACdA,OACA,OAAA,EACM;AACN,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,YAAA;AAAA,IACzB,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS;AAAA,GAC5B;AACF;AAEO,SAAS,uBAAA,CACdA,KAAAA,EACA,QAAA,EACA,OAAA,EACA,WAAA,EACM;AACN,EAAA,aAAA,CAAcA,OAAM,OAAO,CAAA;AAC3B,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,QAAA,EAAU,WAAW,CAAA;AAChE,EAAA,KAAA,IAAS,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AAC1D,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAAA,KAAAA,CAAK,YAAA,CAAa,GAAA,EAAK,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACF;AAEO,SAAS,uBAAA,CACdA,KAAAA,EACA,MAAA,EACA,IAAA,EACA,QAAA,EACM;AACN,EAAA,MAAM,YAAA,GAAoC,EAAE,MAAA,EAAO;AAEnD,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAC1C,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,YAAA,CAAa,MAAM,CAAA,GAAI,YAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,mBAAwC,EAAC;AAC/C,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,MAAA,IAAI,cAAA,CAAe,GAAG,CAAA,EAAG,gBAAA,CAAiB,GAAG,CAAA,GAAI,KAAA;AACjD,MAAA,IAAI,GAAA,KAAQ,gBAAA,EAAkB,MAAA,CAAO,IAAA,GAAO,KAAA;AAAA,IAC9C;AAEA,IAAA,YAAA,CAAa,UAAU,CAAA,GAAI,gBAAA;AAC3B,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,CAAA,EAAG;AAClC,MAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,MAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,WAAA;AAAA,IACzB,IAAA,CAAK,UAAU,YAAY;AAAA,GAC7B;AACF;AAEO,SAAS,wBAAA,CACdA,KAAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,aAAA,GAAqC,EAAE,OAAA,EAAQ;AACrD,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAC1C,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,aAAA,CAAc,QAAQ,CAAA,GAAI,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,IACjD;AAAA,EACF;AACA,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,YAAA;AAAA,IACzB,IAAA,CAAK,UAAU,aAAa;AAAA,GAC9B;AACF;AAEO,SAAS,kBACdA,KAAAA,EACA,QAAA,EACA,KAAA,EACA,MAAA,EACA,UACA,IAAA,EACM;AACN,EAAAA,KAAAA,CAAK,YAAA,CAAa,wBAAA,CAAyB,QAAA,EAAU,MAAM,CAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,IAAA,EAAM,MAAA,CAAO,SAAS,KAAK,EAAC;AACjD,EAAA,MAAM,mBAAwC,EAAC;AAE/C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,MAAA,IAAI,cAAA,CAAe,GAAG,CAAA,EAAG,gBAAA,CAAiB,GAAG,CAAA,GAAI,KAAA;AAAA,IACnD;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAAA,IAC/B,QAAA,EAAU,gBAAA;AAAA,IACV,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,MAAM,aAAA,GAAqC;AAAA,IACzC,MAAA;AAAA,IACA,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,YAAA;AAAa,GAC/C;AAEA,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,WAAA;AAAA,IACzB,IAAA,CAAK,UAAU,YAAY;AAAA,GAC7B;AACA,EAAAA,KAAAA,CAAK,YAAA;AAAA,IACH,wBAAA,CAAyB,YAAA;AAAA,IACzB,IAAA,CAAK,UAAU,aAAa;AAAA,GAC9B;AACF;AAEA,SAAS,gBAAA,CACP,UACA,WAAA,EACqB;AACrB,EAAA,MAAM,OAAA,GAAU,WAAA,EAAa,iBAAA,EAAmB,OAAA,IAAW,EAAC;AAE5D,EAAA,OAAO;AAAA,IACL,CAACsB,eAAAA,CAAe,iBAAiB,GAAG,OAAA,CAAQ,SAAS,QAAA,CAAS,aAAA;AAAA,IAC9D,CAACA,eAAAA,CAAe,uBAAuB,GACrC,OAAA,CAAQ,eAAe,QAAA,CAAS,cAAA;AAAA,IAClC,CAACA,eAAAA,CAAe,sBAAsB,GACpC,OAAA,CAAQ,eAAe,QAAA,CAAS,aAAA;AAAA,IAClC,CAACA,eAAAA,CAAe,qBAAqB,GAAG,OAAA,CAAQ,iBAAA;AAAA,IAChD,CAACA,eAAAA,CAAe,oBAAoB,GAAG,OAAA,CAAQ,gBAAA;AAAA,IAC/C,CAACA,eAAAA,CAAe,uBAAuB,GAAG,OAAA,CAAQ,QAAQ,QAAA,CAAS,OAAA;AAAA,IACnE,CAACA,eAAAA,CAAe,iBAAiB,GAAG,OAAA,CAAQ;AAAA,GAC9C;AACF;AAEA,SAAS,aAAA,CAActB,OAAY,OAAA,EAAyB;AAC1D,EAAA,MAAM,SAAA,GAAY,GAAA;AAClB,EAAA,MAAM,OAAA,GAAkC,EAAE,KAAA,EAAO,MAAA,EAAO;AAExD,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AACjC,IAAA,MAAM,CAAC,IAAA,EAAM,GAAG,IAAI,CAAA,GAAI,MAAA,CAAO,MAAM,SAAS,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAEnC,IAAAA,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,CAAA,KAAA,CAAA;AAAA,MACtC,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,CAAA,IAAK;AAAA,KACjC;AACA,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA;AAAA,MACtC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;;;AC9JA,IAAM,gCAAA,GAAmC,iBAAiB,wBAAwB,CAAA;AAElF,SAAS8C,kBAAAA,GAAyB;AAChC,EAAA,IAAI;AACF,IAAA,IAAK7D,QAAgB,kBAAA,EAAoB;AACvC,MAAA,OAAQA,QAAgB,kBAAA,EAAmB;AAAA,IAC7C;AAEA,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,qBAAA,CAAsB,MAAM,CAAA;AACzD,IAAA,MAAM,aAAa,aAAA,CAAc,IAAA;AAAA,MAAK,CAAA,CAAA,KACpC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,sBAAsB;AAAA,KAC9C;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,WAAA,GAAe,OAAe,UAAU,CAAA;AAC9C,MAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,QAAA,OAAO,WAAA,CAAY,cAAA;AAAA,MACrB;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,UAAA,EAA2B;AACnD,EAAA,MAAM,iBAAiB6D,kBAAAA,EAAkB;AACzC,EAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,EAAA,IAAI,OAAO,cAAA,CAAe,SAAA,KAAc,UAAA,EAAY;AAClD,IAAA,cAAA,CAAe,UAAU,UAAU,CAAA;AACnC,IAAA;AAAA,EACF;AAEA,EAAA,IACE,eAAe,kBAAA,IACf,OAAO,cAAA,CAAe,kBAAA,CAAmB,cAAc,UAAA,EACvD;AACA,IAAA,cAAA,CAAe,kBAAA,CAAmB,UAAU,UAAU,CAAA;AAAA,EACxD;AACF;AAcA,IAAM,6BAAA,GAAN,cAA4C,mBAAA,CAAoB;AAAA,EAQ9D,WAAA,CACU,QACA,QAAA,EACR;AACA,IAAA,KAAA,EAAM;AAHE,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AATV,IAAA,IAAA,CAAA,IAAA,GAAO,kCAAA;AAEP;AAAA,IAAA,IAAA,CAAQ,KAAA,uBAA+B,GAAA,EAAI;AAC3C,IAAA,IAAA,CAAQ,cAAA,uBAAuD,GAAA,EAAI;AACnE,IAAA,IAAA,CAAQ,WAAqB,EAAC;AAC9B,IAAA,IAAA,CAAQ,eAAA,uBAA2C,GAAA,EAAI;AAAA,EAOvD;AAAA,EAEQ,cAAc,WAAA,EAA4B;AAChD,IAAA,IAAI,WAAA,IAAe,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA,EAAG;AAC9C,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEQ,iBAAA,CAAkB,OAAe,UAAA,EAAiC;AACxE,IAAA,MAAM,UAAU,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,KAAK,EAAC;AACnD,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,GAAG,YAAY,CAAA;AAAA,EAC9D;AAAA,EAEQ,iBAAiB,WAAA,EAA0C;AACjE,IAAA,IAAI,aAAa,OAAO,WAAA;AACxB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,GAC1B,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GACtC,MAAA;AAAA,EACN;AAAA,EAEQ,QAAQ,KAAA,EAAqB;AACnC,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEQ,OAAO,KAAA,EAAqB;AAClC,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AACnD,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,IAAA,CAAK,SAAS,GAAA,EAAI;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAK,CAAA;AAC3C,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ,KAAA,EACA,MAAA,EACA,OACA,WAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,mBACJ,OAAO,QAAA,EAAU,cAAA,KAAmB,QAAA,GAC/B,SAAS,cAAA,GACV,EAAA;AACN,IAAA,MAAM,YAAA,GAAe,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,GAAU,EAAA;AAC7D,IAAA,MAAM,cACJ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,EAAE,KAAK,KAAA,CAAM,EAAA,CAAG,MAAA,GAAS,CAAA,GACzC,MAAM,EAAA,CAAG,KAAA,CAAM,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA,GAC5B,EAAA;AACN,IAAA,MAAM,QAAA,GAAW,gBAAA,IAAoB,YAAA,IAAgB,WAAA,IAAe,OAAA;AACpE,IAAA,MAAM,WAAW,WAAA,IAAe,SAAA;AAEhC,IAAA,MAAM,YAAA,GACJ,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,GAC5B,MAAA,CAAO,IAAA,CAAK,QAAmC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GACzD,KAAA;AACN,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,CAAA,uCAAA,EAA0C,KAAK,CAAA,aAAA,EAAgB,WAAW,CAAA,UAAA,EAAa,QAAQ,CAAA,UAAA,EAAa,QAAQ,CAAA,SAAA,EAAY,YAAA,IAAgB,KAAK,CAAA,cAAA,EAAiB,YAAY,CAAA;AAAA,KACpL;AAEA,IAAA,IAEE,CAAC,WAAW,EAAE,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,CAAA,EAC7C;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA;AAC9D,IAAA,IACE,CAAC,WAAA,IACD,oBAAA,IACA,oBAAA,KAAyB,KAAA,EACzB;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,oBAAoB,CAAA;AACpD,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sCAAA,EAAyC,KAAK,CAAA,aAAA,EAAgB,oBAAoB,CAAA,CAAE,CAAA;AAAA,IACnG;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA;AAG1D,IAAA,MAAM,MAAMrE,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AACtD,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,QAAQ,CAAA,KAAA,CAAA,EAAS,QAAW,GAAG,CAAA;AAErE,IAAA,uBAAA,CAAwBA,KAAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAEpD,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,EAAOA,KAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EACpB;AAAA,EAEA,MAAM,cAAA,CACJ,OAAA,EACA,KAAA,EACA,WAAA,EACA,MACA,MAAA,EACA;AACA,IAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,IAAI,CAACA,KAAAA,EAAM;AAEX,IAAA,wBAAA,CAAyBA,KAAAA,EAAM,SAAS,IAAI,CAAA;AAC5C,IAAAA,MAAK,GAAA,EAAI;AACT,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACnB;AAAA,EAEA,MAAM,gBAAA,CACJ,GAAA,EACA,KAAA,EACA,WAAA,EACA,MACA,MAAA,EACA;AACA,IAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,IAAI,CAACA,KAAAA,EAAM;AACX,IAAAA,KAAAA,CAAK,gBAAgB,GAAG,CAAA;AACxB,IAAAA,MAAK,GAAA,EAAI;AACT,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AACvB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,IAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACnB;AAAA,EAEA,MAAM,eACJ,GAAA,EACA,OAAA,EACA,OACA,WAAA,EACA,WAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,oBAAA,GACJ,WAAA,IAAe,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA;AAClD,IAAA;AACE,MAAA,MAAM,QAAQ,GAAA,CAAI,EAAA,GAAK,IAAI,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA,IAAK,KAAA;AAC7C,MAAA,MAAA,CAAO,MAAM,CAAA,qCAAA,EAAwC,KAAK,gBAAgB,oBAAoB,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,IACjH;AACA,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAO;AAAA,MAC5B,QAAQ,GAAA,CAAI,EAAA;AAAA,MACZ,QAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA,EAAa;AAAA;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAA,CACJ,MAAA,EACA,KAAA,EACA,WAAA,EACe;AACf,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,WAAY,MAAA,EAAQ,WAAA,GAAc,CAAC,CAAA,GAAI,CAAC,CAAA,EAAW,OAAA;AACzD,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,IAAU,EAAC;AACrC,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAAS,CAAA,GAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA;AAE/D,IAAA,MAAM,uBACJ,WAAA,IACA,UAAA,CAAW,eACX,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA;AAC1D,IAAA,MAAM,MAAMD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AAEtD,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,KAAK,CAAA,KAAA,CAAA,EAAS,QAAW,GAAG,CAAA;AAClE,IAAA,uBAAA;AAAA,MACEA,KAAAA;AAAA,MACA,UAAA,CAAW,QAAA;AAAA,MACX,UAAA,CAAW,OAAA;AAAA,MACX,UAAA,CAAW;AAAA,KACb;AACA,IAAA,qBAAA,CAA0BA,OAAM,QAAQ,CAAA;AACxC,IAAAA,MAAK,GAAA,EAAI;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,cAAA,CACJ,GAAA,EACA,KAAA,EACA,WAAA,EACA,MACA,WAAA,EACA;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,IAAU,EAAC;AACrC,IAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,GAAS,CAAA,GAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA;AAE/D,IAAA,MAAM,uBACJ,WAAA,IACA,UAAA,CAAW,eACX,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA;AAC1D,IAAA,MAAM,MAAMD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AAEtD,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,KAAK,CAAA,KAAA,CAAA,EAAS,QAAW,GAAG,CAAA;AAClE,IAAAA,KAAAA,CAAK,gBAAgB,GAAG,CAAA;AACxB,IAAAA,MAAK,GAAA,EAAI;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,gBACJ,IAAA,EACA,KAAA,EACA,OACA,WAAA,EACA,IAAA,EACA,UACA,OAAA,EACA;AACA,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AACF,MAAA,WAAA,GAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,WAAA,GAAc,EAAC;AAAA,IACjB;AAEA,IAAA,MAAM,oBAAA,GACJ,WAAA,IAAe,IAAA,CAAK,gBAAA,CAAiB,WAAW,CAAA;AAClD,IAAA;AACE,MAAA,MAAM,WAAW,IAAA,CAAK,EAAA,GAAK,KAAK,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA,IAAK,MAAA;AAClD,MAAA,MAAA,CAAO,MAAM,CAAA,sCAAA,EAAyC,KAAK,gBAAgB,oBAAoB,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAE,CAAA;AAAA,IACpH;AACA,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAO;AAAA,MAC5B,KAAA,EAAO,WAAA;AAAA,MACP,QAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAA,CACJ,MAAA,EACA,KAAA,EACA,aACA,IAAA,EACA;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,QAAA,GAAW,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,QAAA;AAC5C,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,UAAA;AAE5B,IAAA,MAAM,uBACJ,WAAA,IACA,UAAA,CAAW,eACX,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA;AAC1D,IAAA,MAAM,MAAMD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AAEtD,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,QAAQ,CAAA,KAAA,CAAA,EAAS,QAAW,GAAG,CAAA;AACrE,IAAA,iBAAA,CAAkBA,OAAM,QAAA,EAAU,KAAA,IAAS,EAAC,EAAG,MAAA,EAAQ,UAAU,IAAI,CAAA;AACrE,IAAAA,MAAK,GAAA,EAAI;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,eAAA,CACJ,GAAA,EACA,KAAA,EACA,aACA,IAAA,EACA;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,MAAM,QAAA,GAAW,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,QAAA;AAC5C,IAAA,MAAM,uBACJ,WAAA,IACA,UAAA,CAAW,eACX,IAAA,CAAK,eAAA,CAAgB,IAAI,KAAK,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,oBAAoB,CAAA;AAC1D,IAAA,MAAM,MAAMD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAU,UAAU,CAAA;AACtD,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,QAAQ,CAAA,KAAA,CAAA,EAAS,QAAW,GAAG,CAAA;AACrE,IAAAA,KAAAA,CAAK,gBAAgB,GAAG,CAAA;AACxB,IAAAA,MAAK,GAAA,EAAI;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,EAClC;AACF,CAAA;AAEA,IAAM,4BAAN,MAAkE;AAAA,EAOhE,WAAA,CAAY,UAAgB,WAAA,EAAsB;AALlD,IAAA,IAAA,CAAQ,SAA8B,EAAC;AAMrC,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,eAAe,WAAW,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CACJ,YAAA,EACA,QAAA,EACA,KAAA,EACAF,YACG,IAAA,EACH;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,MAAM,YAAA,CAAa,IAAA,CAAK,UAAU,KAAA,EAAOA,OAAAA,EAAQ,GAAG,IAAI,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,MAAA,CAAO,aAAa,CAAA,GAAI;AAC9B,IAAA,MAAM,cAAcC,KAAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,KAAK,QAAQ,CAAA;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,aAAa,CAAA,EAAE;AAC3D,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,MAAA;AACJ,QAAA,MAAMQ,OAAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,YAAY;AAC1C,UAAA,MAAA,GAAS,MAAM,SAAS,IAAA,EAAK;AAAA,QAC/B,CAAC,CAAA;AACD,QAAA,IAAI,OAAO,IAAA,EAAM;AACjB,QAAA,MAAM,KAAA,GAAQ,MAAA,EAAQ,KAAA,IAAS,EAAC;AAChC,QAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,KAAA,EAAM;AACzC,QAAA,MAAM,MAAA;AAAA,MACR;AACA,MAAA,IAAA,CAAK,QAAA,CAAS,YAAA;AAAA,QACZ,wBAAA,CAAyB,YAAA;AAAA,QACzB,KAAK,SAAA,CAAU,EAAE,OAAA,EAAS,IAAA,CAAK,QAAQ;AAAA,OACzC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,QAAA,CAAS,gBAAgB,KAAc,CAAA;AAC5C,MAAA,MAAM,KAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,SAAS,GAAA,EAAI;AAAA,IACpB;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YAAoB,MAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,oBAAA;AAAA,EAClB;AAAA,EAEQ,gBAAA,CACNT,SACA,QAAA,EACgB;AAChB,IAAA,IAAI,CAAC,QAAA,EAAU,OAAOA,OAAAA,IAAU,EAAC;AAEjC,IAAA,MAAM,kBAAkB,IAAI,6BAAA;AAAA,MAC1B,IAAA,CAAK,MAAA;AAAA,MACL;AAAA,KACF;AACA,IAAA,MAAM,YAAYA,OAAAA,EAAQ,SAAA;AAC1B,IAAA,MAAM,mBAAA,GAAsB,SAAA,GACxB,KAAA,CAAM,OAAA,CAAQ,SAAS,IACrB,SAAA,GACA,CAAC,SAAS,CAAA,GACZ,EAAC;AACL,IAAA,MAAM,aAAA,GAAgC;AAAA,MACpC,GAAGA,OAAAA;AAAA,MACH,SAAA,EAAW,CAAC,GAAG,mBAAA,EAAqB,eAAe;AAAA,KACrD;AACA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA,EAEA,MAAM,MAAA,CACJ,YAAA,EACA,QAAA,EACA,KAAA,EACAA,YACG,IAAA,EACe;AAElB,IAAA,IAAI,+BAA8B,IAAKS,OAAAA,CAAQ,QAAO,CAAE,QAAA,CAAS,gCAAgC,CAAA,EAAG;AAClG,MAAA,OAAO,MAAM,YAAA,CAAa,IAAA,CAAK,UAAU,KAAA,EAAOT,OAAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,IACjE;AAEA,IAAA,MAAM,UAAA,GAAaC,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,QAAQ,CAAA;AACjD,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,wCAAA,EAA2C,UAAA,EAAY,WAAA,EAAY,CAAE,OAAO,CAAA,UAAA,EAAa,UAAA,EAAY,WAAA,EAAY,CAAE,MAAM,CAAA,CAAE,CAAA;AAIxI,IAAA,MAAMP,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA;AAAA,MACvB,IAAA,CAAK,QAAA;AAAA,MACL;AAAA,QACE,MAAMW,QAAAA,CAAS;AAAA,OACjB;AAAA,MACAJ,QAAQ,MAAA;AAAO,KACjB;AAEA,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,qCAAA,EAAwCP,KAAAA,CAAK,WAAA,EAAY,CAAE,OAAO,CAAA,UAAA,EAAaA,KAAAA,CAAK,WAAA,EAAY,CAAE,MAAM,CAAA,CAAE,CAAA;AAGvH,IAAA,MAAM,cAAcD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAUP,KAAI,CAAA;AACxD,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,QAAA,CAAS,gCAAA,EAAkC,IAAI,CAAA;AAC/E,IAAA,gBAAA,CAAiB,WAAW,CAAA;AAE5B,IAAA,OAAOO,OAAAA,CAAQ,IAAA,CAAK,WAAA,EAAa,YAAY;AAC3C,MAAA;AACE,QAAA,MAAM,SAAA,GAAYR,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,QAAQ,CAAA;AAChD,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,0CAAA,EAA6C,SAAA,EAAW,WAAA,EAAY,CAAE,OAAO,CAAA,UAAA,EAAa,SAAA,EAAW,WAAA,EAAY,CAAE,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1I;AACA,MAAA,IAAI;AACF,QAAA,uBAAA,CAAwBP,OAAM,KAAK,CAAA;AAGnC,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiBF,OAAAA,EAAQE,KAAI,CAAA;AAExD,QAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,IAAA;AAAA,UAChC,QAAA;AAAA,UACA,KAAA;AAAA,UACA,aAAA;AAAA,UACA,GAAG;AAAA,SACL;AAEA,QAAA,wBAAA,CAAyBA,OAAM,MAAM,CAAA;AAErC,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,CAAA,EAAG;AACV,QAAAA,KAAAA,CAAK,gBAAgB,CAAU,CAAA;AAC/B,QAAA,MAAM,CAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAAA,MAAK,GAAA,EAAI;AAAA,MACX;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,MAAA,CACJ,YAAA,EACA,QAAA,EACA,KAAA,EACAF,YACG,IAAA,EACe;AAElB,IAAA,IAAI,+BAA8B,IAAKS,OAAAA,CAAQ,QAAO,CAAE,QAAA,CAAS,gCAAgC,CAAA,EAAG;AAClG,MAAA,MAAA,CAAO,MAAM,qDAAqD,CAAA;AAClE,MAAA,OAAO,MAAM,YAAA,CAAa,IAAA,CAAK,UAAU,KAAA,EAAOT,OAAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,IACjE;AAEA,IAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAExD,IAAA,MAAME,KAAAA,GAAO,KAAK,MAAA,CAAO,SAAA;AAAA,MACvB,IAAA,CAAK,QAAA;AAAA,MACL;AAAA,QACE,MAAMW,QAAAA,CAAS;AAAA,OACjB;AAAA,MACAJ,QAAQ,MAAA;AAAO,KACjB;AACA,IAAA,uBAAA,CAAwBP,OAAM,KAAK,CAAA;AACnC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiBF,OAAAA,EAAQE,KAAI,CAAA;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,cAAcD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAUP,KAAI,CAAA;AACxD,MAAA,MAAM,WAAA,GAAc,WAAA,CAAY,QAAA,CAAS,gCAAA,EAAkC,IAAI,CAAA;AAC/E,MAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,MAAA,MAAM,gBAAA,GAAmB,IAAI,yBAAA,CAA0BA,KAAAA,EAAM,WAAW,CAAA;AACxE,MAAA,OAAO,gBAAA,CAAiB,WAAA;AAAA,QACtB,YAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA;AAAA,QACA,aAAA;AAAA,QACA,GAAG;AAAA,OACL;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAAA,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,MAAAA,MAAK,GAAA,EAAI;AAAA,IACX;AAAA,EACF;AACF,CAAA;;;AC3jBA,IAAM+B,qBAAAA,GAAuB,iCAAA;AAC7B,IAAMC,YAAAA,GAAc,CAAC,oBAAoB,CAAA;AAEzC,IAAIC,eAAAA,GAAiB,KAAA;AACrB,IAAI,cAAA,GAAsB,IAAA;AAC1B,IAAMoC,gBAAAA,uBAAsD,GAAA,EAAI;AAUhE,SAAS,kBAAkB,UAAA,EAAyB;AAEhD,EAAA,IAAI,OAAO,SAAA,KAAY,WAAA,IAAe,SAAA,CAAQ,KAAA,EAAO;AACrD,IAAA,MAAM,QAAQ,SAAA,CAAQ,KAAA;AACtB,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAEpC,MAAA,IAAI,GAAA,CAAI,QAAA,CAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9E,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,+BAAA,EAAkC,GAAG,CAAA,CAAE,CAAA;AACpD,QAAA,OAAO,KAAA,CAAM,GAAG,CAAA,EAAG,OAAA;AAAA,MACrB;AAAA,IACF;AACA,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,UAAU,UAAU,CAAA,+DAAA,CAAA;AAAA,MACpB,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,CAAS,WAAW,CAAC;AAAA,KACxD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,gBAAA,GAAiC;AAC9C,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAC3B,EAAA,IAAI;AAGF,IAAA,IAAI,eAAA,GAAkB,kBAAkB,sBAAsB,CAAA;AAE9D,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAA,CAAO,MAAM,2EAA2E,CAAA;AAAA,IAC1F,CAAA,MAAO;AAEL,MAAA,eAAA,GAAkB,MAAM,OAAO,sBAAsB,CAAA;AACrD,MAAA,MAAA,CAAO,MAAM,gDAAgD,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAA,CAAO,KAAA,CAAM,2BAAA,EAA6B,MAAA,CAAO,IAAA,CAAK,eAAe,CAAC,CAAA;AACtE,IAAA,cAAA,GAAiB,eAAA,CAAgB,sBAAsB,eAAA,CAAgB,UAAA;AACvE,IAAA,MAAA,CAAO,KAAA,CAAM,0BAAA,EAA4B,CAAC,CAAC,cAAc,CAAA;AACzD,IAAA,MAAA,CAAO,KAAA,CAAM,sBAAA,EAAwB,cAAA,EAAgB,IAAI,CAAA;AACzD,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,gCAAA;AAAA,MACA,gBAAgB,SAAA,GAAY,MAAA,CAAO,mBAAA,CAAoB,cAAA,CAAe,SAAS,CAAA,GAAI;AAAA,KACrF;AACA,IAAA,MAAA,CAAO,MAAM,0BAAA,EAA4B,CAAC,CAAC,cAAA,EAAgB,WAAW,MAAM,CAAA;AAC5E,IAAA,MAAA,CAAO,MAAM,0BAAA,EAA4B,CAAC,CAAC,cAAA,EAAgB,WAAW,MAAM,CAAA;AAG5E,IAAA,MAAA,CAAO,MAAM,+CAA+C,CAAA;AAC5D,IAAA,IAAI,QAAQ,cAAA,EAAgB,SAAA;AAC5B,IAAA,OAAO,KAAA,EAAO;AACZ,MAAA,MAAM,SAAS,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAClE,MAAA,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,KAAA,CAAM,aAAa,IAAI,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAE,CAAA;AAC/E,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAA,CAAM,WAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AACpE,QAAA;AAAA,MACF;AACA,MAAA,KAAA,GAAQ,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,cAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,IAAM,6BAAN,MAAiC;AAAA,EAItC,WAAA,GAAc;AAHd,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAAA,EAGjB;AAAA,EAEf,cAAA,GAA0B;AACxB,IAAA,OAAOpC,eAAAA;AAAA,EACT;AAAA,EAEA,2BAAA,GAAwC;AACtC,IAAA,OAAO,CAAC,GAAGD,YAAW,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,GAA+B,EAAC,EACK;AACrC,IAAA,IAAIC,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,EAAiB;AACzC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAA,CAAO,KAAK,qDAAqD,CAAA;AACjE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,cAAA,GACf,IAAA,CAAK,cAAA,CAAe,SAAA,CAAUF,qBAAAA,EAAsBL,YAAW,CAAA,GAC/D3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAChC,IAAA,IAAA,CAAK,kBAAkB,SAAS,CAAA;AAChC,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,+BAA+B,CAAA;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,EAAiB;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,oBAAoB,SAAS,CAAA;AAClC,MAAA,IAAA,CAAK,oBAAoB,SAAS,CAAA;AAAA,IACpC;AAEA,IAAAoC,iBAAgB,KAAA,EAAM;AACtB,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAApC,eAAAA,GAAiB,KAAA;AAAA,EACnB;AAAA,EAEQ,kBAAkB,SAAA,EAAsB;AAC9C,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AAEF,MAAA,IAAI,cAAc,SAAA,EAAW,SAAA;AAC7B,MAAA,OAAO,WAAA,IAAe,CAAC,MAAA,CAAO,mBAAA,CAAoB,WAAW,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AACjF,QAAA,WAAA,GAAc,MAAA,CAAO,eAAe,WAAW,CAAA;AAAA,MACjD;AAEA,MAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,QAAA,MAAA,CAAO,MAAM,wDAAwD,CAAA;AACrE,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AAE1E,MAAA,MAAM,iBAAiB,WAAA,CAAY,MAAA;AACnC,MAAAoC,gBAAAA,CAAgB,GAAA,CAAI,wBAAA,EAA0B,cAAc,CAAA;AAE5D,MAAAA,gBAAAA,CAAgB,GAAA,CAAI,8BAAA,EAAgC,WAAW,CAAA;AAE/D,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,CAAiB,MAAM,CAAA;AAE3C,MAAA,MAAM,aAAA,GAAgB,eAEpB,KAAA,EACAvE,OAAAA,EAAAA,GACG,IAAA,EACW;AACd,QAAA,MAAA,CAAO,MAAM,+BAA+B,CAAA;AAC5C,QAAA,OAAO,MAAM,OAAA,CAAQ,MAAA;AAAA,UACnB,cAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA;AAAA,UACAA,OAAAA;AAAA,UACA,GAAG;AAAA,SACL;AAAA,MACF,CAAA;AAEA,MAAC,cAAsB,eAAA,GAAkB,IAAA;AACzC,MAAA,WAAA,CAAY,MAAA,GAAS,aAAA;AAErB,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,qDAAA,EAAwD,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AACpG,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,8BAAA,CAAA,EAAkC,WAAA,CAAY,WAAW,CAAA;AAAA,IACxE,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA,EAEQ,kBAAkB,SAAA,EAAsB;AAC9C,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AAEF,MAAA,IAAI,cAAc,SAAA,EAAW,SAAA;AAC7B,MAAA,OAAO,WAAA,IAAe,CAAC,MAAA,CAAO,mBAAA,CAAoB,WAAW,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AACjF,QAAA,WAAA,GAAc,MAAA,CAAO,eAAe,WAAW,CAAA;AAAA,MACjD;AAEA,MAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,QAAA,MAAA,CAAO,MAAM,wDAAwD,CAAA;AACrE,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AAE1E,MAAA,MAAM,iBAAiB,WAAA,CAAY,MAAA;AACnC,MAAAuE,gBAAAA,CAAgB,GAAA,CAAI,wBAAA,EAA0B,cAAc,CAAA;AAE5D,MAAAA,gBAAAA,CAAgB,GAAA,CAAI,8BAAA,EAAgC,WAAW,CAAA;AAE/D,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,CAAiB,MAAM,CAAA;AAE3C,MAAA,WAAA,CAAY,MAAA,GAAS,eAEnB,KAAA,EACAvE,OAAAA,EAAAA,GACG,IAAA,EACW;AACd,QAAA,MAAA,CAAO,MAAM,+BAA+B,CAAA;AAC5C,QAAA,OAAO,MAAM,OAAA,CAAQ,MAAA;AAAA,UACnB,cAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA;AAAA,UACAA,OAAAA;AAAA,UACA,GAAG;AAAA,SACL;AAAA,MACF,CAAA;AAEA,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,qDAAA,EAAwD,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA,CAAE,CAAA;AAAA,IACtG,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA,EAEQ,oBAAoB,SAAA,EAAsB;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiBuE,gBAAAA,CAAgB,GAAA,CAAI,wBAAwB,CAAA;AACnE,MAAA,MAAM,WAAA,GAAcA,gBAAAA,CAAgB,GAAA,CAAI,8BAA8B,KAAK,SAAA,EAAW,SAAA;AACtF,MAAA,IAAI,cAAA,IAAkB,aAAa,MAAA,EAAQ;AACzC,QAAA,WAAA,CAAY,MAAA,GAAS,cAAA;AAAA,MACvB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yCAAA,EAA4C,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA;AAAA,EACF;AAAA,EAEQ,oBAAoB,SAAA,EAAsB;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiBA,gBAAAA,CAAgB,GAAA,CAAI,wBAAwB,CAAA;AACnE,MAAA,MAAM,WAAA,GAAcA,gBAAAA,CAAgB,GAAA,CAAI,8BAA8B,KAAK,SAAA,EAAW,SAAA;AACtF,MAAA,IAAI,cAAA,IAAkB,aAAa,MAAA,EAAQ;AACzC,QAAA,WAAA,CAAY,MAAA,GAAS,cAAA;AAAA,MACvB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yCAAA,EAA4C,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA;AAAA,EACF;AACF,CAAA;AAEO,IAAM,qBAAA,GAAwB,IAAI,0BAAA,EAA2B;;;AC5Q7D,IAAM3C,YAAAA,GAAc,OAAA;;;ACkBpB,SAASF,qBAAAA,CACdxB,KAAAA,EACA,MAAA,EACA,WAAA,EACM;AAEN,EAAA,oBAAA,CAAyBA,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,WAAW,CAAA;AAG/D,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAAA,MAAK,YAAA,CAAa,iBAAA,EAAmB,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAC3D,IAAAA,MAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,EAC1D;AAGA,EAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,IAAAA,MAAK,YAAA,CAAa,4BAAA,EAA8B,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAC5E;AAGA,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,IAAa,MAAA,CAAO,eAAe,IAAA,EAAM;AACjE,IAAAA,MAAK,YAAA,CAAa,4BAAA,EAA8B,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAC3E;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW;AAC/B,IAAAA,KAAAA,CAAK,YAAA,CAAa,wBAAA,EAA0B,IAAI,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,MAAA,CAAO,WAAW,IAAA,EAAM;AACzD,IAAAA,KAAAA,CAAK,YAAA,CAAa,wBAAA,EAA0B,IAAI,CAAA;AAAA,EAClD;AACF;AAMO,SAASuB,sBAAAA,CACdvB,OACA,QAAA,EACM;AAEN,EAAA,qBAAA,CAA0BA,OAAM,QAAQ,CAAA;AAC1C;;;AC5CA,IAAMoC,eAAAA,GAAiB,gBAAA;AACvB,IAAMkC,oBAAAA,GAAsB,qBAAA;AAC5B,IAAM,aAAA,GAAgB,eAAA;AACtB,IAAM,gBAAA,GAAmB,kBAAA;AAEzB,IAAM,qBAAA,GAAwBlC,eAAAA;AAC9B,IAAM,oBAAA,GAAuB,aAAA;AAC7B,IAAM,uBAAA,GAA0B,gBAAA;AAIhC,SAAS,cAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,MACA,MAAA,EACS;AACT,IAAA,IAAI,+BAA8B,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,MAAA,OAAO,SAAA,CAAU,MAAM,CAAA,GAAI,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,KAAK,CAAA,GAAI,MAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,MACZ,QAAA;AAAA,MACA;AAAA,QACE,MAAMzB,QAAAA,CAAS,MAAA;AAAA,QACf,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA;AAAY,OAChD;AAAA,MACA,CAACX,KAAAA,KAAe;AACd,QAAA,IAAI;AACF,UAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAC9C,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,UAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC/C,UAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,YAAA,OAAA,CAAQ,YAAY;AAClB,cAAA,IAAI;AACF,gBAAA,MAAM,QAAQ,MAAM,QAAA;AACpB,gBAAA,MAAMuE,QAAAA,GAAU,KAAK,GAAA,EAAI;AACzB,gBAAAhD,sBAAAA,CAAsBvB,KAAAA,EAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AAC9C,gBAAAA,KAAAA,CAAK,YAAA;AAAA,kBACH,uBAAA;AAAA,kBAAA,CACCuE,WAAU,SAAA,IAAa;AAAA,iBAC1B;AACA,gBAAAvE,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,gBAAAzB,MAAK,GAAA,EAAI;AACT,gBAAA,OAAO,KAAA;AAAA,cACT,SAAS,KAAA,EAAO;AACd,gBAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,gBAAAA,MAAK,SAAA,CAAU;AAAA,kBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,kBACrB,SACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,iBACxD,CAAA;AACD,gBAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,gBAAAA,MAAK,GAAA,EAAI;AACT,gBAAA,MAAM,KAAA;AAAA,cACR;AAAA,YACF,CAAA,GAAG;AAAA,UACL;AAEA,UAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,UAAAuB,sBAAAA,CAAsBvB,KAAAA,EAAM,WAAA,CAAY,QAAQ,CAAC,CAAA;AACjD,UAAAA,KAAAA,CAAK,YAAA;AAAA,YACH,uBAAA;AAAA,YAAA,CACC,UAAU,SAAA,IAAa;AAAA,WAC1B;AACA,UAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,UAAAzB,MAAK,GAAA,EAAI;AACT,UAAA,OAAO,QAAA;AAAA,QACT,SAAS,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,UAAAA,MAAK,SAAA,CAAU;AAAA,YACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,YACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC/D,CAAA;AACD,UAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,UAAAA,MAAK,GAAA,EAAI;AACT,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,MACA,MAAA,EACS;AACT,IAAA,IAAI,+BAA8B,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,MAAA,OAAO,SAAA,CAAU,MAAM,CAAA,GAAI,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,KAAK,CAAA,GAAI,MAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,cAAA,GAAiBO,QAAQ,MAAA,EAAO;AACtC,IAAA,MAAMP,QAAO,MAAA,CAAO,SAAA;AAAA,MAClB,QAAA;AAAA,MACA;AAAA,QACE,MAAMW,QAAAA,CAAS,MAAA;AAAA,QACf,UAAA,EAAY;AAAA,UACV,kBAAA,EAAoB,WAAA;AAAA,UACpB,oBAAA,EAAsB;AAAA;AACxB,OACF;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI;AAEF,MAAAa,qBAAAA,CAAqBxB,OAAM,EAAE,GAAG,QAAQ,MAAA,EAAQ,IAAA,IAAQ,WAAW,CAAA;AACnE,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC/C,MAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,QAAA,OAAA,CAAQ,YAAY;AAClB,UAAA,IAAI;AACF,YAAA,MAAM,SAAS,MAAM,QAAA;AACrB,YAAA,IACE,UACA,OAAO,MAAA,KAAW,QAAA,IAClB,MAAA,CAAO,iBAAkB,MAAA,EACzB;AACA,cAAA,OAAO,IAAIwE,sBAAAA,CAAsBxE,KAAAA,EAAM,MAAA,EAAQ,WAAW,MAAM,CAAA;AAAA,YAClE;AACA,YAAA,OAAO,IAAIyE,iBAAAA,CAAiBzE,KAAAA,EAAM,MAAA,EAAQ,WAAW,MAAM,CAAA;AAAA,UAC7D,SAAS,KAAA,EAAO;AACd,YAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,YAAAA,MAAK,SAAA,CAAU;AAAA,cACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,cACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AACD,YAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,YAAAA,MAAK,GAAA,EAAI;AACT,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QACF,CAAA,GAAG;AAAA,MACL;AACA,MAAA,IACE,YACA,OAAO,QAAA,KAAa,QAAA,IACpB,MAAA,CAAO,iBAAkB,QAAA,EACzB;AACA,QAAA,OAAO,IAAIwE,sBAAAA,CAAsBxE,KAAAA,EAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,IAAIyE,iBAAAA,CAAiBzE,KAAAA,EAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,IAC/D,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,oCAAoC,KAAK,CAAA;AACtD,MAAAA,MAAK,SAAA,CAAU;AAAA,QACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,QACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC/D,CAAA;AACD,MAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,MAAAA,MAAK,GAAA,EAAI;AACT,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA;AACF;AAKO,IAAM6B,eAAc,CAAC,MAAA,KAC1B,cAAA,CAAe,MAAA,EAAQO,iBAAgB,MAAM,CAAA;AAKxC,IAAMN,qBAAoB,CAAC,MAAA,KAChC,oBAAA,CAAqB,MAAA,EAAQ,uBAAuB,MAAM,CAAA;AAKrD,IAAM4C,qBAAoB,CAAC,MAAA,KAChC,cAAA,CAAe,MAAA,EAAQJ,sBAAqB,WAAW,CAAA;AAKlD,IAAM,aAAa,CAAC,MAAA,KACzB,cAAA,CAAe,MAAA,EAAQ,eAAe,KAAK,CAAA;AAKtC,IAAM,mBAAmB,CAAC,MAAA,KAC/B,oBAAA,CAAqB,MAAA,EAAQ,sBAAsB,KAAK,CAAA;AAKnD,IAAM,gBAAgB,CAAC,MAAA,KAC5B,cAAA,CAAe,MAAA,EAAQ,kBAAkB,OAAO,CAAA;AAK3C,IAAM,sBAAsB,CAAC,MAAA,KAClC,oBAAA,CAAqB,MAAA,EAAQ,yBAAyB,OAAO,CAAA;AAMxD,IAAMG,oBAAN,MAAuE;AAAA,EAY5E,WAAA,CAAYzE,KAAAA,EAAY,QAAA,EAAmB,SAAA,EAAmB,aAAA,EAAwC;AAXtG,IAAA,IAAA,CAAQ,QAAA,GAAqC,IAAA;AAC7C,IAAA,IAAA,CAAQ,gBAAA,GAA4C;AAAA,MAClD,SAAS,EAAC;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAQE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AAAA,EACnD;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEQ,MAAA,GAAkB;AACxB,IAAA,OACE,OAAO,KAAK,aAAA,KAAkB,QAAA,IAC9B,KAAK,aAAA,KAAkB,IAAA,IACvB,cAAc,IAAA,CAAK,aAAA;AAAA,EAEvB;AAAA,EAEQ,aAAa,KAAA,EAAqB;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAGtC,IAAA,OAAO,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC9B,MAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,OAAA,EAAS,EAAE,MAAM,WAAA,EAAa,OAAA,EAAS,EAAA,EAAG,EAAG,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAuB;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAgC;AAC9B,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,OAAO,KAAK,QAAA,KAAa,QAAA;AAC3D,QAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAE5D,QAAA,IAAI,OAAQ,IAAA,CAAK,QAAA,CAAiB,MAAA,CAAO,QAAQ,MAAM,UAAA,EAAY;AACjE,UAAA,IAAA,CAAK,QAAA,GAAY,IAAA,CAAK,QAAA,CACpB,MAAA,CAAO,QACT,CAAA,EAAE;AAAA,QACJ,CAAA,MAAA,IACE,OAAQ,IAAA,CAAK,QAAA,CAA+B,SAAS,UAAA,EACrD;AACA,UAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,QAC/C;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAE9D,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,EAAa;AAClB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AACvB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,aAAa,KAAA,EAAsB;AACzC,IAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAItC,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,OAAO,SAAA,CAAU,IAAA;AACvB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AAAA,MACrC;AAEA,MAAA,MAAM,WAAA,GAAe,IAAA,CAAK,OAAA,IAAW,EAAC;AAGtC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9B,QAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,UAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,UAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,UAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,YAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAC/C,YAAA,MAAM,WAAA,GAAc,QAAQ,KAAK,CAAA;AACjC,YAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,cAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,gBAAA,WAAA,CAAY,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,cACzD;AACA,cAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,cAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,GAAI,YAAA;AAAA,YACpD,CAAA,MAAO;AACL,cAAA,WAAA,CAAY,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAA,IAAQ,EAAE,CAAA,GAAI,YAAA;AAAA,YACtD;AAAA,UACF;AAEA,UAAA,IAAI,OAAO,YAAA,EAAc;AACvB,YAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAA,GAAe,MAAA,CAAO,YAAA;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AAChD,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AAAA,MACrC;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAgB,SAAA,CAAU,OAAA,IAAW,EAAC;AAG5C,IAAA,IAAI,MAAM,OAAA,CAAQ,YAAY,CAAA,IAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AAC1D,MAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,QAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,UAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAC/C,UAAA,MAAM,WAAA,GAAc,QAAQ,KAAK,CAAA;AACjC,UAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,YAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,cAAA,WAAA,CAAY,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,YACzD;AACA,YAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,YAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,GAAI,YAAA;AAAA,UACpD,CAAA,MAAO;AACL,YAAA,WAAA,CAAY,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAA,IAAQ,EAAE,CAAA,GAAI,YAAA;AAAA,UACtD;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,YAAA,EAAc;AACvB,UAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAA,GAAe,MAAA,CAAO,YAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,KAAA,IAAS,OAAO,SAAA,CAAU,UAAU,QAAA,EAAU;AAC1D,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,8BAA8B,CAAA;AAAA,EACnD;AAAA,EAEQ,aAAa,KAAA,EAAuB;AAC1C,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,MAAM,QAAA,GAAA,CAAY,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,GAAA;AAC9C,IAAAuB,sBAAAA,CAAsB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACxD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU;AAAA,QAClB,MAAME,cAAAA,CAAe,KAAA;AAAA,QACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC/D,CAAA;AACD,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,KAAc,CAAA;AAAA,MAC1C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,IAAA,EAAMA,cAAAA,CAAe,IAAI,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EAChB;AACF,CAAA;AAKO,IAAM+C,yBAAN,MAEP;AAAA,EASE,WAAA,CACExE,KAAAA,EACA,QAAA,EACA,SAAA,EACA,aAAA,EACA;AAVF,IAAA,IAAA,CAAQ,QAAA,GAA0C,IAAA;AAWhD,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AACvC,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AACjD,IAAA,IAAA,CAAK,mBAAmB,EAAE,OAAA,EAAS,EAAC,EAAG,OAAO,EAAA,EAAG;AAAA,EACnD;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEQ,MAAA,GAAkB;AACxB,IAAA,OACE,OAAO,KAAK,aAAA,KAAkB,QAAA,IAC9B,KAAK,aAAA,KAAkB,IAAA,IACvB,cAAc,IAAA,CAAK,aAAA;AAAA,EAEvB;AAAA,EAEQ,aAAa,KAAA,EAAqB;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAGtC,IAAA,OAAO,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC9B,MAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,OAAA,EAAS,EAAE,MAAM,WAAA,EAAa,OAAA,EAAS,EAAA,EAAG,EAAG,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,CAAC,MAAA,CAAO,aAAa,CAAA,GAA4B;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAyC;AAC7C,IAAA,IAAI;AAEF,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAElB,QAAA,IACE,IAAA,CAAK,YACL,OAAO,IAAA,CAAK,aAAa,QAAA,IACzB,MAAA,CAAO,aAAA,IAAiB,IAAA,CAAK,QAAA,EAC7B;AACA,UAAA,IAAA,CAAK,QAAA,GAAY,IAAA,CAAK,QAAA,CACpB,MAAA,CAAO,aACT,CAAA,EAAE;AAAA,QACJ,CAAA,MAAA,IACE,IAAA,CAAK,QAAA,IACL,OAAO,IAAA,CAAK,aAAa,QAAA,IACzB,MAAA,CAAO,QAAA,IAAa,IAAA,CAAK,QAAA,EACzB;AAEA,UAAA,MAAM,YAAA,GAAgB,IAAA,CAAK,QAAA,CACzB,MAAA,CAAO,QACT,CAAA,EAAE;AACF,UAAA,IAAA,CAAK,QAAA,GAAW;AAAA,YACd,MAAM,IAAA,GAAO;AACX,cAAA,OAAO,aAAa,IAAA,EAAK;AAAA,YAC3B;AAAA,WACF;AAAA,QACF,CAAA,MAAA,IACE,IAAA,CAAK,QAAA,IACL,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,IACzB,OAAQ,IAAA,CAAK,QAAA,CAAoC,IAAA,KAAS,UAAA,EAC1D;AAEA,UAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,QAC5C;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AACxC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,EAAa;AAClB,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AACvB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,aAAa,KAAA,EAAsB;AACzC,IAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AACnC,IAAA,MAAM,OAAA,GAAU,KAAK,gBAAA,CAAiB,OAAA;AAItC,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,OAAO,SAAA,CAAU,IAAA;AACvB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AAAA,MACrC;AAEA,MAAA,MAAM,WAAA,GAAe,IAAA,CAAK,OAAA,IAAW,EAAC;AAGtC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9B,QAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,UAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,UAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,UAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,YAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAC/C,YAAA,MAAM,WAAA,GAAc,QAAQ,KAAK,CAAA;AACjC,YAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,cAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,gBAAA,WAAA,CAAY,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,cACzD;AACA,cAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,cAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,GAAI,YAAA;AAAA,YACpD,CAAA,MAAO;AACL,cAAA,WAAA,CAAY,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAA,IAAQ,EAAE,CAAA,GAAI,YAAA;AAAA,YACtD;AAAA,UACF;AAEA,UAAA,IAAI,OAAO,YAAA,EAAc;AACvB,YAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAA,GAAe,MAAA,CAAO,YAAA;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AAChD,QAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK,KAAA;AAAA,MACrC;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAgB,SAAA,CAAU,OAAA,IAAW,EAAC;AAG5C,IAAA,IAAI,MAAM,OAAA,CAAQ,YAAY,CAAA,IAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AAC1D,MAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,QAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,UAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAC/C,UAAA,MAAM,WAAA,GAAc,QAAQ,KAAK,CAAA;AACjC,UAAA,IAAI,IAAA,CAAK,QAAO,EAAG;AACjB,YAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,cAAA,WAAA,CAAY,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,YACzD;AACA,YAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,YAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,GAAI,YAAA;AAAA,UACpD,CAAA,MAAO;AACL,YAAA,WAAA,CAAY,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAA,IAAQ,EAAE,CAAA,GAAI,YAAA;AAAA,UACtD;AAAA,QACF;AAEA,QAAA,IAAI,OAAO,YAAA,EAAc;AACvB,UAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,YAAA,GAAe,MAAA,CAAO,YAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,KAAA,IAAS,OAAO,SAAA,CAAU,UAAU,QAAA,EAAU;AAC1D,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,8BAA8B,CAAA;AAAA,EACnD;AAAA,EAEQ,aAAa,KAAA,EAAuB;AAC1C,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,IAAA,MAAM,QAAA,GAAA,CAAY,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,GAAA;AAC9C,IAAAuB,sBAAAA,CAAsB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,QAAQ,CAAA;AACxD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU;AAAA,QAClB,MAAME,cAAAA,CAAe,KAAA;AAAA,QACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC/D,CAAA;AACD,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,KAAc,CAAA;AAAA,MAC1C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,IAAA,EAAMA,cAAAA,CAAe,IAAI,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EAChB;AACF,CAAA;;;AC/mBA,IAAMM,qBAAAA,GAAuB,kCAAA;AAC7B,IAAMC,YAAAA,GAAc,CAAC,+BAA+B,CAAA;AAGpD,IAAMqC,gBAAAA,uBAA6C,GAAA,EAAI;AAGvD,IAAIpC,eAAAA,GAAiB,KAAA;AAGrB,IAAI,iBAAwB,EAAC;AAa7B,eAAe,mBAAA,GAAsC;AACnD,EAAA,IAAI,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG,OAAO,cAAA;AAEtC,EAAA,IAAI;AAEF,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAO,sBAAsB,CAAA;AACzD,IAAA,cAAA,CAAe,IAAA;AAAA,MACb,aAAA,CAAc,OAAA,IAAW,aAAA,CAAc,OAAA,IAAW;AAAA,KACpD;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,sBAAsB,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,OAAA,IAAW,GAAA;AAC/C,IAAA,IAAI,CAAC,cAAA,CAAe,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtC,MAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,cAAA;AACT;AAMA,SAAS,cAAA,GAAwB;AAC/B,EAAA,OAAO,cAAA;AACT;AAKO,IAAM,6BAAN,MAAiC;AAAA,EAKtC,WAAA,GAAc;AAJd,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAEhC,IAAA,IAAA,CAAQ,gBAA2D,EAAC;AAAA,EAIpE;AAAA;AAAA;AAAA;AAAA,EAKA,2BAAA,GAAwC;AACtC,IAAA,OAAOF,YAAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,OAAA,GAA+B,EAAC,EACK;AACrC,IAAA,IAAIC,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,mBAAA,EAAoB;AAC1C,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,CAAe,SAAA;AAAA,UAChCF,qBAAAA;AAAA,UACAL;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,MACjE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAA,KAAU;AAClC,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,KAAK,CAAA;AACvD,MAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,KAAK,CAAA;AACnE,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA;AACrD,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,KAAK,CAAA;AAC3D,MAAA,IAAI,WAAA,IAAe,iBAAA,IAAqB,UAAA,IAAc,aAAA,EAAe;AACnE,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA,CAAW,OAAA,GAA+B,EAAC,EAA+B;AACxE,IAAA,IAAIA,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAC/C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAM;AACzC,QAAA,MAAA,CAAO,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,MACnD,CAAC,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,CAAe,SAAA;AAAA,UAChCF,qBAAAA;AAAA,UACAL;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,MACjE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAA,KAAU;AAClC,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,KAAK,CAAA;AACvD,MAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,qBAAA,CAAsB,OAAA,EAAS,KAAK,CAAA;AACnE,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA;AACrD,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,KAAK,CAAA;AAC3D,MAAA,IAAI,WAAA,IAAe,iBAAA,IAAqB,UAAA,IAAc,aAAA,EAAe;AACnE,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,+BAA+B,CAAA;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAA,KAAU;AAClC,MAAA,IAAA,CAAK,iBAAA,CAAkB,SAAS,KAAK,CAAA;AACrC,MAAA,IAAA,CAAK,uBAAA,CAAwB,SAAS,KAAK,CAAA;AAC3C,MAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,KAAK,CAAA;AACpC,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAAA,IACzC,CAAC,CAAA;AAED,IAAAoC,iBAAgB,KAAA,EAAM;AACtB,IAAA,cAAA,GAAiB,EAAC;AAClB,IAAApC,eAAAA,GAAiB,KAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAA0B;AACxB,IAAA,OAAOA,eAAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,qBAAqB,OAAA,EAAoB;AAC/C,IAAA,IACE,IAAA,CAAK,aAAA,CAAc,IAAA,IACnB,IAAA,CAAK,aAAA,CAAc,UAAA,IACnB,IAAA,CAAK,aAAA,CAAc,GAAA,IACnB,IAAA,CAAK,aAAA,CAAc,MAAA,EACnB;AACA,MAAA;AAAA,IACF;AAIA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,qBAAA;AAE9C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,OAAA,CAAQ,EAAE,MAAA,EAAQ,CAAA;AAAA,IACjC,CAAA,CAAA,MAAQ;AAEN,MAAA,MAAA,GAAS,IAAI,QAAQ,MAAM,CAAA;AAAA,IAC7B;AAEA,IAAA,KAAA,MAAW,QAAQ,CAAC,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,QAAQ,CAAA,EAAY;AACnE,MAAA,MAAM,GAAA,GAAM,SAAS,IAAI,CAAA;AACzB,MAAA,IAAI,GAAA,IAAO,IAAI,WAAA,EAAa;AAC1B,QAAA,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,GAAI,GAAA,CAAI,WAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,QAAA,CAAS,SAAc,IAAA,EAAuC;AACpE,IAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,IAAK,IAAA;AAAA,EACrC;AAAA,EAEQ,eAAA,CAAgB,SAAc,KAAA,EAAwB;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AAC/C,MAAA,IAAI,QAAA,GAAW,KAAA;AAEf,MAAA,IAAI,SAAA,EAAW,WAAW,QAAA,EAAU;AAClC,QAAA,MAAM,gBAAA,GAAmB,UAAU,SAAA,CAAU,QAAA;AAC7C,QAAAoC,gBAAAA,CAAgB,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,IAAI,gBAAgB,CAAA;AAE9D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAUxC,aAAY,MAAM,CAAA;AAElC,QAAA,SAAA,CAAU,SAAA,CAAU,QAAA,GAAW,SAAA,GAE1B,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC3C,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,IAAI,SAAA,EAAW,WAAW,MAAA,EAAQ;AAChC,QAAA,MAAM,cAAA,GAAiB,UAAU,SAAA,CAAU,MAAA;AAC3C,QAAAwC,gBAAAA,CAAgB,GAAA,CAAI,CAAA,YAAA,EAAe,KAAK,IAAI,cAAc,CAAA;AAE1D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAUvC,mBAAkB,MAAM,CAAA;AAExC,QAAA,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,SAAA,GAExB,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC1D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,qBAAA,CAAsB,SAAc,KAAA,EAAwB;AAClE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,YAAY,CAAA;AAC3D,MAAA,IAAI,QAAA,GAAW,KAAA;AAEf,MAAA,IAAI,eAAA,EAAiB,WAAW,MAAA,EAAQ;AACtC,QAAA,MAAM,cAAA,GAAiB,gBAAgB,SAAA,CAAU,MAAA;AACjD,QAAAuC,gBAAAA,CAAgB,GAAA,CAAI,CAAA,kBAAA,EAAqB,KAAK,IAAI,cAAc,CAAA;AAEhE,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAUK,mBAAkB,MAAM,CAAA;AAExC,QAAA,eAAA,CAAgB,SAAA,CAAU,MAAA,GAAS,SAAA,GAE9B,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,8CAA8C,KAAK,CAAA;AAChE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,cAAA,CAAe,SAAc,KAAA,EAAwB;AAC3D,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AAC7C,MAAA,IAAI,QAAA,GAAW,KAAA;AAEf,MAAA,IAAI,QAAA,EAAU,WAAW,QAAA,EAAU;AACjC,QAAA,MAAM,gBAAA,GAAmB,SAAS,SAAA,CAAU,QAAA;AAC5C,QAAAL,gBAAAA,CAAgB,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAK,IAAI,gBAAgB,CAAA;AAE7D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AAEjC,QAAA,QAAA,CAAS,SAAA,CAAU,QAAA,GAAW,SAAA,GAEzB,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC3C,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,IAAI,QAAA,EAAU,WAAW,MAAA,EAAQ;AAC/B,QAAA,MAAM,cAAA,GAAiB,SAAS,SAAA,CAAU,MAAA;AAC1C,QAAAA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,WAAA,EAAc,KAAK,IAAI,cAAc,CAAA;AAEzD,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,iBAAiB,MAAM,CAAA;AAEvC,QAAA,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,SAAA,GAEvB,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,KAAK,CAAA;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,iBAAA,CAAkB,SAAc,KAAA,EAAwB;AAC9D,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,KAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,QAAA,GAAW,KAAA;AAEf,MAAA,IAAI,WAAA,EAAa,WAAW,QAAA,EAAU;AACpC,QAAA,MAAM,gBAAA,GAAmB,YAAY,SAAA,CAAU,QAAA;AAC/C,QAAAA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,gBAAA,EAAmB,KAAK,IAAI,gBAAgB,CAAA;AAEhE,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,cAAc,MAAM,CAAA;AAEpC,QAAA,WAAA,CAAY,SAAA,CAAU,QAAA,GAAW,SAAA,GAE5B,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC3C,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,IAAI,WAAA,EAAa,WAAW,MAAA,EAAQ;AAClC,QAAA,MAAM,cAAA,GAAiB,YAAY,SAAA,CAAU,MAAA;AAC7C,QAAAA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,IAAI,cAAc,CAAA;AAE5D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,oBAAoB,MAAM,CAAA;AAE1C,QAAA,WAAA,CAAY,SAAA,CAAU,MAAA,GAAS,SAAA,GAE1B,IAAA,EACM;AACT,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACzC,UAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,UAAA,OAAO,OAAA;AAAA,YACL,CAAA,GAAI,CAAA,KAAiB,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,YAClC,IAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AACA,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC5D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,iBAAA,CAAkB,SAAc,KAAA,EAAqB;AAC3D,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,MAAM,CAAA;AAE/C,MAAA,MAAM,gBAAA,GAAmBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA;AACrE,MAAA,IAAI,gBAAA,IAAoB,WAAW,SAAA,EAAW;AAC5C,QAAA,SAAA,CAAU,UAAU,QAAA,GAAW,gBAAA;AAAA,MACjC;AAEA,MAAA,MAAM,cAAA,GAAiBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AACjE,MAAA,IAAI,cAAA,IAAkB,WAAW,SAAA,EAAW;AAC1C,QAAA,SAAA,CAAU,UAAU,MAAA,GAAS,cAAA;AAAA,MAC/B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA,EAEQ,uBAAA,CAAwB,SAAc,KAAA,EAAqB;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,YAAY,CAAA;AAE3D,MAAA,MAAM,cAAA,GAAiBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAE,CAAA;AACvE,MAAA,IAAI,cAAA,IAAkB,iBAAiB,SAAA,EAAW;AAChD,QAAA,eAAA,CAAgB,UAAU,MAAA,GAAS,cAAA;AAAA,MACrC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6CAAA,EAAgD,KAAK,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,SAAc,KAAA,EAAqB;AAC1D,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AAE7C,MAAA,MAAM,gBAAA,GAAmBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AACpE,MAAA,IAAI,gBAAA,IAAoB,UAAU,SAAA,EAAW;AAC3C,QAAA,QAAA,CAAS,UAAU,QAAA,GAAW,gBAAA;AAAA,MAChC;AAEA,MAAA,MAAM,cAAA,GAAiBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA;AAChE,MAAA,IAAI,cAAA,IAAkB,UAAU,SAAA,EAAW;AACzC,QAAA,QAAA,CAAS,UAAU,MAAA,GAAS,cAAA;AAAA,MAC9B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sCAAA,EAAyC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEQ,mBAAA,CAAoB,SAAc,KAAA,EAAqB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,QAAQ,CAAA;AAEnD,MAAA,MAAM,gBAAA,GAAmBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAE,CAAA;AACvE,MAAA,IAAI,gBAAA,IAAoB,aAAa,SAAA,EAAW;AAC9C,QAAA,WAAA,CAAY,UAAU,QAAA,GAAW,gBAAA;AAAA,MACnC;AAEA,MAAA,MAAM,cAAA,GAAiBA,gBAAAA,CAAgB,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA;AACnE,MAAA,IAAI,cAAA,IAAkB,aAAa,SAAA,EAAW;AAC5C,QAAA,WAAA,CAAY,UAAU,MAAA,GAAS,cAAA;AAAA,MACjC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,yCAAA,EAA4C,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AACF,CAAA;AAGO,IAAM,qBAAA,GAAwB,IAAI,0BAAA;;;AChjBlC,IAAM3C,YAAAA,GAAc,OAAA;;;ACOpB,SAASF,qBAAAA,CACdxB,KAAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACzB,EAAA,oBAAA,CAAyBA,KAAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,QAAQ,CAAA;AAG5D,EAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,IAAAA,MAAK,YAAA,CAAa,2BAAA,EAA6B,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAC1E;AACF;AAMO,SAASuB,sBAAAA,CACdvB,OACA,QAAA,EACM;AACN,EAAA,IAAI,CAACA,KAAAA,CAAK,WAAA,EAAY,EAAG;AACzB,EAAA,qBAAA,CAA0BA,OAAM,QAAQ,CAAA;AAC1C;;;ACjBA,IAAM2E,WAAAA,GAAgD;AAAA,EACpD,IAAA,EAAM,aAAA;AAAA,EACN,SAAA,EAAW,kBAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,kCAAkB,IAAI,GAAA,CAAuB,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAEvE,SAAS,eAAA,CAAgB3E,OAAY,KAAA,EAAsB;AACzD,EAAAA,MAAK,SAAA,CAAU;AAAA,IACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,IACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,GAC/D,CAAA;AACD,EAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,EAAAA,MAAK,GAAA,EAAI;AACX;AAEA,SAAS,qBAAA,CACPA,KAAAA,EACA,MAAA,EACA,WAAA,EACM;AACN,EAAAwB,qBAAAA,CAAqBxB,KAAAA,EAAM,MAAA,EAAQ,WAAW,CAAA;AAChD;AAEA,SAAS,mBAAA,CACPA,KAAAA,EACA,QAAA,EACA,SAAA,EACM;AACN,EAAAuB,sBAAAA,CAAsBvB,OAAM,QAAQ,CAAA;AACpC,EAAAA,MAAK,YAAA,CAAa,uBAAA,EAAA,CAA0B,KAAK,GAAA,EAAI,GAAI,aAAa,GAAI,CAAA;AAC1E,EAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,EAAAzB,MAAK,GAAA,EAAI;AACX;AAEA,IAAe,oBAAf,MAAiC;AAAA,EAO/B,WAAA,CACEA,KAAAA,EACA,SAAA,EACA,aAAA,EACA;AAVF,IAAA,IAAA,CAAU,mBAAmC,EAAE,OAAA,EAAS,EAAC,EAAG,OAAO,EAAA,EAAG;AAWpE,IAAA,YAAA,CAAa,IAAA,EAAM,QAAQA,KAAI,CAAA;AAC/B,IAAA,YAAA,CAAa,IAAA,EAAM,aAAa,SAAS,CAAA;AACzC,IAAA,YAAA,CAAa,IAAA,EAAM,iBAAiB,aAAa,CAAA;AAAA,EACnD;AAAA,EAEA,MAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEU,aAAa,KAAA,EAAsB;AAC3C,IAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AAEnC,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,eAAe,SAAA,CAAU,OAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC/B,MAAA,KAAA,MAAW,UAAU,YAAA,EAAgD;AACnE,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AACtC,QAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AACvB,QAAA,MAAM,KAAA,GAAS,MAAA,CAAO,KAAA,IAAS,EAAC;AAChC,QAAA,IAAI,MAAM,OAAA,EAAS;AACjB,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,KAAK,CAAA;AACjD,UAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,YAAA,KAAA,CAAM,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,EAAA,EAAG;AAAA,UACnD;AACA,UAAA,MAAM,MAAM,KAAA,CAAM,OAAA;AAClB,UAAA,GAAA,CAAI,OAAA,GAAU,OAAO,GAAA,CAAI,OAAA,IAAW,EAAE,CAAA,GAAI,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,QAChE;AACA,QAAA,IAAI,OAAO,aAAA,EAAe;AACxB,UAAA,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,KAAK,CAAA,CAAE,gBACnC,MAAA,CAAO,aAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,SAAA,CAAU,KAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,gBAAgB,SAAA,CAAU,QAAA;AAGhC,IAAA,IAAI,aAAA,EAAe,WAAW,WAAA,EAAa;AACzC,MAAA,MAAM,OAAA,GAAW,aAAA,CAAc,MAAA,IAAU,EAAC;AAG1C,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AAGpB,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,UAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,YAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,IAAA,CAAK;AAAA,cACjC,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA;AAAE,aAChE,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,GAAQ,aAAA,CAAc,KAAA,IAAS,EAAC;AAAA,IACxD;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAS,8BAA8B,CAAA;AAAA,EACnD;AAAA,EAEU,aAAa,KAAA,EAAqB;AAC1C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,cAAc,QAAQ,CAAA;AACxD,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,MAAA,IAAU,KAAA,EAAO;AACpD,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,IAAA;AAAA,QAC5B,MAAA,GAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,EAAA,EAAG,EAAE,GAAI,EAAE,IAAA,EAAM,EAAA;AAAG,OACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEU,aAAa,IAAA,EAA4B;AACjD,IAAA,IAAI,IAAA,KAASyB,eAAe,EAAA,EAAI;AAC9B,MAAA,mBAAA;AAAA,QACE,IAAA,CAAK,IAAA;AAAA,QACL,IAAA,CAAK,gBAAA;AAAA,QACL,IAAA,CAAK;AAAA,OACP;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA;AAAA,QACR,uBAAA;AAAA,QAAA,CACC,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,SAAA,IAAa;AAAA,OAClC;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,CAAA;AAC5B,MAAA,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,IAChB;AAAA,EACF;AACF,CAAA;AAEO,IAAMgD,iBAAAA,GAAN,cACG,iBAAA,CAEV;AAAA,EAIE,WAAA,CACEzE,KAAAA,EACA,QAAA,EACA,SAAA,EACA,aAAA,EACA;AACA,IAAA,KAAA,CAAMA,KAAAA,EAAM,WAAW,aAAa,CAAA;AATtC,IAAA,IAAA,CAAQ,QAAA,GAAqC,IAAA;AAU3C,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAuB;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAgC;AAC9B,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,IAAA,CAAK,QAAA,GAAW,KAAK,eAAA,EAAgB;AAAA,MACvC;AACA,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,CAAayB,eAAe,EAAE,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAAA,MAChC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,YAAA,CAAaA,eAAe,KAAK,CAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,eAAA,GAAqC;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,OAAO,IAAA,CAAK,aAAa,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,IAAa,IAAA,CAAK,QAAA,EAAqB;AAChD,MAAA,OAAQ,IAAA,CAAK,QAAA,CAA+B,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IAC/D;AACA,IAAA,IAAI,OAAQ,IAAA,CAAK,QAAA,CAA+B,IAAA,KAAS,UAAA,EAAY;AACnE,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd;AACA,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AACF,CAAA;AAEO,IAAM+C,sBAAAA,GAAN,cACG,iBAAA,CAEV;AAAA,EAIE,WAAA,CACExE,KAAAA,EACA,QAAA,EACA,SAAA,EACA,aAAA,EACA;AACA,IAAA,KAAA,CAAMA,KAAAA,EAAM,WAAW,aAAa,CAAA;AATtC,IAAA,IAAA,CAAQ,QAAA,GAA0C,IAAA;AAUhD,IAAA,YAAA,CAAa,IAAA,EAAM,YAAY,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,CAAC,MAAA,CAAO,aAAa,CAAA,GAA4B;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAyC;AAC7C,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,QAAA,IAAA,CAAK,QAAA,GAAW,KAAK,eAAA,EAAgB;AAAA,MACvC;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AACxC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,YAAA,CAAayB,eAAe,EAAE,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,YAAA,CAAa,OAAO,KAAK,CAAA;AAAA,MAChC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,YAAA,CAAaA,eAAe,KAAK,CAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,eAAA,GAA0C;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,OAAO,IAAA,CAAK,aAAa,QAAA,EAAU;AACvD,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,MAAA,CAAO,aAAA,IAAkB,IAAA,CAAK,QAAA,EAAqB;AACrD,MAAA,OAAQ,IAAA,CAAK,QAAA,CAAoC,MAAA,CAAO,aAAa,CAAA,EAAE;AAAA,IACzE;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,IAAa,IAAA,CAAK,QAAA,EAAqB;AAChD,MAAA,MAAM,QAAA,GAAY,IAAA,CAAK,QAAA,CAA+B,MAAA,CAAO,QAAQ,CAAA,EAAE;AACvE,MAAA,OAAO;AAAA,QACL,MAAM,IAAA,GAAO;AACX,UAAA,OAAO,SAAS,IAAA,EAAK;AAAA,QACvB;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAQ,IAAA,CAAK,QAAA,CAAoC,IAAA,KAAS,UAAA,EAAY;AACxE,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd;AACA,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AACF,CAAA;AAEA,SAAS,gBAAA,CACPzB,KAAAA,EACA,GAAA,EACA,MAAA,EACA,aACA,IAAA,EACS;AACT,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,IAAI;AACF,IAAA,qBAAA,CAAsBA,KAAAA,EAAM,QAAQ,WAAW,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAWO,QAAQ,IAAA,CAAKR,KAAAA,CAAM,QAAQ,GAAA,EAAKC,KAAI,GAAG,IAAI,CAAA;AAE5D,IAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACvB,MAAA,OAAA,CAAQ,YAAY;AAClB,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,QAAA;AACrB,UAAA,OAAO,IAAIwE,sBAAAA,CAAsBxE,KAAAA,EAAM,MAAA,EAAQ,WAAW,MAAM,CAAA;AAAA,QAClE,SAAS,KAAA,EAAO;AACd,UAAA,eAAA,CAAgBA,OAAM,KAAK,CAAA;AAC3B,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF,CAAA,GAAG;AAAA,IACL;AAEA,IAAA,OAAO,IAAIyE,iBAAAA,CAAiBzE,KAAAA,EAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,EAC/D,SAAS,KAAA,EAAO;AACd,IAAA,eAAA,CAAgBA,OAAM,KAAK,CAAA;AAC3B,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,mBAAA,CACPA,KAAAA,EACA,MAAA,EACA,WAAA,EACA,IAAA,EACS;AACT,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,IAAI;AACF,IAAA,qBAAA,CAAsBA,KAAAA,EAAM,QAAQ,WAAW,CAAA;AAC/C,IAAA,MAAM,SAAS,IAAA,EAAK;AAEpB,IAAA,IAAI,SAAA,CAAU,MAAM,CAAA,EAAG;AACrB,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,QACZ,CAAC,KAAA,KAAU;AACT,UAAA,mBAAA,CAAoBA,KAAAA,EAAM,WAAA,CAAY,KAAK,CAAA,EAAG,SAAS,CAAA;AACvD,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAAA,QACA,CAAC,KAAA,KAAU;AACT,UAAA,eAAA,CAAgBA,OAAM,KAAK,CAAA;AAC3B,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,mBAAA,CAAoBA,KAAAA,EAAM,WAAA,CAAY,MAAM,CAAA,EAAG,SAAS,CAAA;AACxD,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,eAAA,CAAgBA,OAAM,KAAK,CAAA;AAC3B,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,SAAS,aAAA,CACP,QACA,WAAA,EACW;AACX,EAAA,MAAM,QAAA,GAAW2E,YAAW,WAAW,CAAA;AACvC,EAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAMhE,QAAAA,CAAS,QAAQ,UAAA,EAAY,EAAE,kBAAA,EAAoB,WAAA,EAAY,EAAE;AAE1F,EAAA,OAAO,CAAC,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,MAAA,KAAW;AAC1C,IAAA,IAAI,+BAA8B,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,MAAA,OAAO,SAAA,CAAU,MAAM,CAAA,GAAI,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,CAAC,CAAA,GAAI,MAAA;AAAA,IACrD;AAEA,IAAA,MAAM,cAAA,GAAiBJ,QAAQ,MAAA,EAAO;AACtC,IAAA,MAAM,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AACjD,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,KAAW,IAAA,IAAQ,eAAA,CAAgB,IAAI,WAAW,CAAA;AAE7E,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAMP,KAAAA,GAAO,MAAA,CAAO,SAAA,CAAU,QAAA,EAAU,UAAU,cAAc,CAAA;AAChE,MAAA,OAAO,gBAAA,CAAiBA,KAAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,aAAa,IAAI,CAAA;AAAA,IACzE;AAEA,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,MAAgB,QAAA;AAAA,MAAU,QAAA;AAAA,MAAU,CAACA,KAAAA,KACjD,mBAAA,CAAoBA,KAAAA,EAAM,MAAA,EAAQ,aAAa,IAAI;AAAA,KACrD;AAAA,EACF,CAAA;AACF;AAEO,IAAM6B,YAAAA,GAAc,CAAC,MAAA,KAC1B,aAAA,CAAc,QAAQ,MAAM,CAAA;AAEvB,IAAM6C,kBAAAA,GAAoB,CAAC,MAAA,KAChC,aAAA,CAAc,QAAQ,WAAW,CAAA;AAE5B,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAC/B,aAAA,CAAc,QAAQ,UAAU,CAAA;;;AC7WlC,IAAM3C,qBAAAA,GAAuB,8BAAA;AAC7B,IAAM,kBAAA,GAAqB,CAAC,iBAAiB,CAAA;AAE7C,IAAI,gBAAuB,EAAC;AAO5B,eAAe,aAAA,GAAgC;AAC7C,EAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG,OAAO,aAAA;AAErC,EAAA,IAAI;AAEF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,QAAQ,CAAA;AACjC,IAAA,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,WAAW,GAAG,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,qCAAqC,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMG,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,QAAQ,CAAA;AACxB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,OAAA,IAAW,GAAA;AAI9C,IAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA,EAAG;AACrC,MAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,qCAAqC,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,aAAA;AACT;AAEA,IAAM,aAAA,GAA+B;AAAA,EACnC;AAAA,IACE,GAAA,EAAK,yBAAA;AAAA,IACL,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,WAAA,EAAa,SAAA;AAAA,IAC1C,cAAA,EAAgBL;AAAA,GAClB;AAAA,EACA;AAAA,IACE,GAAA,EAAK,mBAAA;AAAA,IACL,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,EAAY,SAAA;AAAA,IACnC,cAAA,EAAgB6C;AAAA,GAClB;AAAA,EACA;AAAA,IACE,GAAA,EAAK,kBAAA;AAAA,IACL,YAAA,EAAc,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,EAAW,SAAA;AAAA,IAClC,cAAA,EAAgB,gBAAA;AAAA,IAChB,QAAA,EAAU;AAAA;AAEd,CAAA;AAEO,IAAM,wBAAA,GAAN,MAAM,wBAAA,CAAwB;AAAA,EAA9B,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,MAAA,GAAwB,IAAA;AAEhC,IAAA,IAAA,CAAiB,eAAA,uBAAsB,GAAA,EAAsB;AAAA,EAAA;AAAA,EAE7D,2BAAA,GAAwC;AACtC,IAAA,OAAO,CAAC,GAAG,kBAAkB,CAAA;AAAA,EAC/B;AAAA,EAEA,cAAA,GAA0B;AACxB,IAAA,OAAO,wBAAA,CAAwB,eAAA;AAAA,EACjC;AAAA,EAEA,MAAM,UAAA,CACJ,OAAA,GAA+B,EAAC,EACE;AAClC,IAAA,IAAI,IAAA,CAAK,gBAAe,EAAG;AACzB,MAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,OAAA,CAAQ,cAAA;AACzB,MAAA,IAAA,CAAK,MAAA,GAAS,QAAA,GACV,QAAA,CAAS,SAAA,CAAU3C,qBAAAA,EAAsBL,YAAW,CAAA,GACpD3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAMkD,cAAAA,GAAgB,MAAM,aAAA,EAAc;AAC1C,IAAAA,cAAAA,CAAc,OAAA,CAAQ,CAAC,WAAA,EAAa,KAAA,KAAU;AAC5C,MAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,MAAA,KAAW;AAChC,QAAA,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,MACvC,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,wBAAA,CAAwB,eAAA,GAAkB,IAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,EAAe,EAAG;AAC1B,MAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAMA,cAAAA,GAAgB,MAAM,aAAA,EAAc;AAC1C,IAAAA,cAAAA,CAAc,OAAA,CAAQ,CAAC,WAAA,EAAa,KAAA,KAAU;AAC5C,MAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,MAAA,KAAW;AAChC,QAAA,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,MAAA,EAAQ,KAAK,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAAA,eAAc,MAAA,GAAS,CAAA;AACvB,IAAA,wBAAA,CAAwB,eAAA,GAAkB,KAAA;AAAA,EAC5C;AAAA,EAEQ,KAAA,CAAM,WAAA,EAAkB,MAAA,EAAqB,KAAA,EAAqB;AACxE,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,WAAW,CAAA;AAC7C,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,MAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,uCAAA,EAA0C,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAAA,MACrE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,KAAA,CAAM,MAAA;AACvB,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,QAAQ,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAEjD,MAAA,KAAA,CAAM,MAAA,GAAS,YAA4B,IAAA,EAA0B;AACnE,QAAA,MAAM,MAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAC5B,QAAA,OAAO,OAAA;AAAA,UACL,IAAI,CAAA,KAAkB,QAAA,CAAiB,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,UACtD,IAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAM,CAAA,gBAAA,EAAmB,MAAA,CAAO,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEQ,OAAA,CAAQ,WAAA,EAAkB,MAAA,EAAqB,KAAA,EAAqB;AAC1E,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,WAAW,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,KAAK,eAAA,CAAgB,GAAA,CAAI,GAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAClE,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,KAAA,CAAM,MAAA,GAAS,QAAA;AAAA,MACjB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AACF,CAAA;AArGa,wBAAA,CAEI,eAAA,GAAkB,KAAA;AAF5B,IAAM,uBAAA,GAAN,wBAAA;AAuGA,IAAM,kBAAA,GAAqB,IAAI,uBAAA,EAAwB;;;ACvKvD,IAAM7C,qBAAAA,GAAuB,qCAAA;AAC7B,IAAM,kBAAA,GAAqB,QAAA;AAC3B,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,oBAAA,GAAuB,KAAA;AAE7B,IAAM,oBAAA,GAAuB,iBAAA;AAG7B,IAAM,mBAAA,GAAsB,qBAAA;AAG5B,IAAM,gBAAA,GAAmB,kBAAA;AACzB,IAAM,oBAAA,GAAuB,sBAAA;AAC7B,IAAM,iBAAA,GAAoB,mBAAA;AAC1B,IAAM,uBAAA,GAA0B,yBAAA;AAGhC,IAAM,qBAAA,GAAwB,uBAAA;AAC9B,IAAM,qBAAA,GAAwB,uBAAA;AAC9B,IAAM,sBAAA,GAAyB,wBAAA;AAC/B,IAAM,yBAAA,GAA4B,2BAAA;AAGlC,IAAM,0BAAA,GAA6B,4BAAA;AACnC,IAAM,0BAAA,GAA6B,4BAAA;AAGnC,IAAM,oBAAA,GAAuB,sBAAA;AAC7B,IAAM,yBAAA,GAA4B,2BAAA;AAGlC,IAAM,cAAA,GAAiB,gBAAA;AACvB,IAAM,gBAAA,GAAmB,kBAAA;AAGzB,IAAM,eAAA,GAAkB,iBAAA;AACxB,IAAM,iBAAA,GAAoB,mBAAA;AAG1B,IAAM,iBAAA,GAAoB,mBAAA;AAC1B,IAAM,gBAAA,GAAmB,kBAAA;AACzB,IAAM,kBAAA,GAAqB,oBAAA;;;ACrC3B,SAAS,iBAAA,CAAkB,GAAA,EAAc,SAAA,GAAoB,oBAAA,EAA8B;AAChG,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAO,SAAA,GAAY,KAAK,GAAA,CAAI,MAAA,GAAS,YAAY,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,GAAA;AAAA,IAC7E;AACA,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAC5B,IAAA,OAAO,SAAA,GAAY,KAAK,CAAA,CAAE,MAAA,GAAS,YAAY,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,CAAA;AAAA,EACzE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACF;AAEO,SAAS,iBAAiB,IAAA,EAA0B;AACzD,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,OAAA;AACH,MAAA,OAAA,OAAA;AAAA,IACF,KAAK,YAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAA,YAAA;AAAA,IACF,KAAK,UAAA;AAAA,IACL,KAAK,gBAAA;AACH,MAAA,OAAA,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,OAAA,SAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,OAAA,WAAA;AAAA,IACF;AACE,MAAA,OAAA,MAAA;AAAA;AAEN;AAEO,SAAS,YAAY,SAAA,EAA8B;AACxD,EAAA,MAAM,OAAO,SAAA,CAAU,QAAA;AACvB,EAAA,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA;AAC3B,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,IAAa,IAAA,CAAK,UAAU,OAAO,CAAA,WAAA,EAAc,KAAK,QAAQ,CAAA,CAAA;AAChF,EAAA,OAAO,CAAA,cAAA,EAAiB,KAAK,IAAI,CAAA,CAAA;AACnC;AAEO,SAAS,qBAAqB,OAAA,EAA0B;AAC7D,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,EAAM,OAAO,EAAA;AACtD,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,QAAA,MAAM,IAAA,GAAO,IAAA;AACb,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,UAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,KAAA,CAAM,SAAS,CAAA,GAAI,KAAA,CAAM,KAAK,GAAG,CAAA,GAAI,kBAAkB,OAAO,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAO,OAAO,CAAA;AACvB;AAEO,SAAS,oBAAoB,QAAA,EAAuC;AACzE,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,UAAU,OAAO,MAAA;AACtD,EAAA,MAAM,IAAA,GAAO,QAAA;AACb,EAAA,IAAI,OAAO,IAAA,CAAK,YAAA,KAAiB,YAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AACzE,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AACA,EAAA,OAAO,MAAA;AACT;;;AC1CO,SAAS,qBAAA,CACd,QAAA,EACA,SAAA,EACA,UAAA,GAAqB,kBAAA,EACf;AACN,EAAA,MAAM,OAAO,SAAA,CAAU,QAAA;AAEvB,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,OAAA;AACH,MAAA,kBAAA,CAAmB,UAAU,IAAI,CAAA;AACjC,MAAA;AAAA,IACF,KAAK,YAAA;AACH,MAAA,uBAAA,CAAwB,QAAA,EAAU,MAAM,UAAU,CAAA;AAClD,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAAR,sBAAAA,CAAsB,QAAA,EAAU,SAAA,EAAW,UAAU,CAAA;AACrD,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,qBAAA,CAAsB,UAAU,IAAI,CAAA;AACpC,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,oBAAA,CAAqB,UAAU,IAAI,CAAA;AACnC,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,sBAAA,CAAuB,UAAU,IAAI,CAAA;AACrC,MAAA;AAAA,IACF,KAAK,gBAAA;AACH,MAAA,yBAAA,CAA0B,UAAU,IAAI,CAAA;AACxC,MAAA;AAAA,IACF;AACE,MAAA,mBAAA,CAAoB,UAAU,IAAI,CAAA;AAClC,MAAA;AAAA;AAEN;AAEA,SAAS,kBAAA,CAAmBvB,OAAgB,IAAA,EAAsB;AAChE,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAAA,KAAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAAA,KAAAA,CAAK,YAAA,CAAa,iBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,IAAAA,MAAK,YAAA,CAAa,oBAAA,EAAsB,KAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AACvC,IAAAA,MAAK,YAAA,CAAa,iBAAA,EAAmB,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,IAAI,KAAK,WAAA,EAAa;AACpB,IAAAA,KAAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,IAAA,CAAK,WAAW,CAAA;AAAA,EAC7D;AACF;AAEA,SAAS,uBAAA,CAAwBA,KAAAA,EAAgB,IAAA,EAAgB,UAAA,EAA0B;AACzF,EAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,UAAA,EAAY,UAAU,CAAA;AACvD,EAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,gBAAA,EAAkB,MAAM,CAAA;AAEzD,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,iBAAA,EAAmB,KAAK,KAAK,CAAA;AAC9D,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,kBAAA,EAAoB,KAAK,KAAK,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,MAAMxB,UAAS,IAAA,CAAK,YAAA;AACpB,IAAA,IAAIA,OAAAA,CAAO,gBAAgB,MAAA,EAAW;AACpC,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,yBAAyB,MAAA,CAAOxB,OAAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IACtF;AACA,IAAA,IAAIA,OAAAA,CAAO,eAAe,MAAA,EAAW;AACnC,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,wBAAwB,MAAA,CAAOxB,OAAAA,CAAO,UAAU,CAAC,CAAA;AAAA,IACpF;AACA,IAAA,IAAIA,OAAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,mBAAmB,MAAA,CAAOxB,OAAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,IAAIA,OAAAA,CAAO,sBAAsB,MAAA,EAAW;AAC1C,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,uBAAuB,MAAA,CAAOxB,OAAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,IAC1F;AACA,IAAA,IAAIA,OAAAA,CAAO,qBAAqB,MAAA,EAAW;AACzC,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,sBAAsB,MAAA,CAAOxB,OAAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,IACxF;AACA,IAAA,IAAIA,OAAAA,CAAO,SAAS,MAAA,EAAW;AAC7B,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,yBAAyB,iBAAA,CAAkBxB,OAAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAC1F;AACA,IAAA,IAAIA,OAAAA,CAAO,qBAAqB,MAAA,EAAW;AACzC,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,8BAA8B,MAAA,CAAOxB,OAAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,IAChG,CAAA,MAAA,IAAWA,OAAAA,CAAO,SAAA,KAAc,MAAA,EAAW;AACzC,MAAAE,MAAK,YAAA,CAAasB,eAAAA,CAAe,8BAA8B,iBAAA,CAAkBxB,OAAAA,CAAO,SAAS,CAAC,CAAA;AAAA,IACpG;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA+E,mBAAAA,CAAmB7E,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,IAAA,0BAAA,CAA2BA,KAAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,IAAA,8BAAA,CAA+BA,KAAAA,EAAM,KAAK,MAAM,CAAA;AAAA,EAClD;AACF;AAEA,SAASuB,sBAAAA,CAAsBvB,KAAAA,EAAgB,SAAA,EAAsB,UAAA,EAA0B;AAC7F,EAAA,MAAM,OAAO,SAAA,CAAU,QAAA;AACvB,EAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,UAAA,EAAY,UAAU,CAAA;AACvD,EAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,gBAAA,EAAkB,UAAU,CAAA;AAE7D,EAAA,IAAI,KAAK,WAAA,EAAa;AACpB,IAAAtB,KAAAA,CAAK,YAAA,CAAa,kBAAA,EAAoB,IAAA,CAAK,WAAW,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,KAAK,MAAA,EAAQ;AACnC,IAAA,MAAA,CAAO,KAAA;AAAA,MACL,0EAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA,GAAmB,CAAA;AAEvB,EAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,IAAA,CAAK,SAAS,CAAA;AACvD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAAA,MAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,WAAW,QAAQ,CAAA;AAClE,IAAAtB,MAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,cAAc,YAAY,CAAA;AACzE,IAAA,gBAAA,GAAmB,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,IAAA,0BAAA,CAA2BtB,KAAAA,EAAM,IAAA,CAAK,MAAA,EAAQ,gBAAgB,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,2BAAA,CAA4BA,KAAAA,EAAM,KAAK,SAAS,CAAA;AAChD,IAAA,8BAAA,CAA+BA,KAAAA,EAAM,KAAK,SAAS,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,EAAA,IAAI,IAAA,CAAK,SAAS,EAAE,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,KAAA,CAAA,EAAQ;AACnE,IAAA6E,mBAAAA,CAAmB7E,KAAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,qBAAA,CAAsBA,OAAgB,IAAA,EAAsB;AACnE,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAAA,KAAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,IAAA,CAAK,QAAQ,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,IAAAA,MAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,WAAW,MAAM,CAAA;AAChE,IAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,UAAA,CAAA,EAAc,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,IAAAtB,MAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,WAAW,MAAM,CAAA;AACpE,IAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,UAAA,CAAA,EAAc,iBAAA,CAAkB,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACjG;AACF;AAEA,SAAS,oBAAA,CAAqBtB,OAAgB,IAAA,EAAsB;AAClE,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAAA,KAAAA,CAAK,YAAA,CAAa,0BAAA,EAA4B,IAAA,CAAK,UAAU,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAAA,KAAAA,CAAK,YAAA,CAAa,0BAAA,EAA4B,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC7D;AACF;AAEA,SAAS,sBAAA,CAAuBA,OAAgB,IAAA,EAAsB;AACpE,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAAA,KAAAA,CAAK,YAAA,CAAa,oBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,IAAAA,KAAAA,CAAK,YAAA,CAAa,yBAAA,EAA2B,IAAA,CAAK,SAAS,CAAA;AAAA,EAC7D;AACF;AAEA,SAAS,yBAAA,CAA0BA,OAAgB,IAAA,EAAsB;AACvE,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAAA,KAAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,IAAA,CAAK,MAAM,CAAA;AAC/C,IAAAA,KAAAA,CAAK,YAAA,CAAa,gBAAA,EAAkB,IAAA,CAAK,MAAM,CAAA;AAAA,EACjD;AACF;AAEA,SAAS,mBAAA,CAAoBA,OAAgB,IAAA,EAAsB;AACjE,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAAA,KAAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,IAAAA,MAAK,YAAA,CAAa,iBAAA,EAAmB,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACnE;AACF;AAEA,SAAS6E,mBAAAA,CACP7E,OACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,IAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,uBAAA,EAAyB,MAAM,YAAY,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,KAAA,CAAM,kBAAkB,MAAA,EAAW;AACrC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,2BAAA,EAA6B,MAAM,aAAa,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAa,KAAA,CAAM,kBAAkB,MAAA,EAAW;AACzE,IAAAtB,KAAAA,CAAK,YAAA;AAAA,MACHsB,eAAAA,CAAe,sBAAA;AAAA,MACf,KAAA,CAAM,eAAe,KAAA,CAAM;AAAA,KAC7B;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,IAAI,OAAA,CAAQ,kBAAkB,MAAA,EAAW;AACvC,MAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,mCAAmC,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,IACnG;AACA,IAAA,IAAI,OAAA,CAAQ,qBAAqB,MAAA,EAAW;AAC1C,MAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,4BAA4B,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAAA,IAC/F;AAAA,EACF;AACF;AA2BA,SAAS,2BAAA,CAA4BtB,OAAgB,QAAA,EAAyB;AAC5E,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC/C,EAAA,MAAM,IAAA,GAAO,QAAA;AAEb,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,iBAAA,EAAmB,KAAK,KAAK,CAAA;AAC9D,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,kBAAA,EAAoB,KAAK,KAAK,CAAA;AAAA,EACjE;AAEA,EAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAClC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,uBAAA,EAAyB,KAAK,WAAW,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,iBAAA,EAAmB,KAAK,KAAK,CAAA;AAAA,EAChE;AACA,EAAA,IAAI,IAAA,CAAK,sBAAsB,MAAA,EAAW;AACxC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,qBAAA,EAAuB,KAAK,iBAAiB,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,IAAA,CAAK,qBAAqB,MAAA,EAAW;AACvC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,oBAAA,EAAsB,KAAK,gBAAgB,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,8BAA8B,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClG;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,gCAAA,CAAiCtB,KAAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EACnD;AACF;AAEA,SAAS,gCAAA,CACPA,OACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,IAAAA,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,uBAAA,EAAyB,MAAM,YAAY,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,KAAA,CAAM,kBAAkB,MAAA,EAAW;AACrC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,2BAAA,EAA6B,MAAM,aAAa,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,IAAAtB,KAAAA,CAAK,YAAA,CAAasB,eAAAA,CAAe,sBAAA,EAAwB,MAAM,YAAY,CAAA;AAAA,EAC7E,WAAW,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAa,KAAA,CAAM,kBAAkB,MAAA,EAAW;AAChF,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,wBAAwB,KAAA,CAAM,YAAA,GAAe,MAAM,aAAa,CAAA;AAAA,EACnG;AACA,EAAA,IAAI,KAAA,CAAM,oBAAA,EAAsB,aAAA,KAAkB,MAAA,EAAW;AAC3D,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,iCAAA,EAAmC,KAAA,CAAM,qBAAqB,aAAa,CAAA;AAAA,EAC9G;AACA,EAAA,IAAI,KAAA,CAAM,qBAAA,EAAuB,gBAAA,KAAqB,MAAA,EAAW;AAC/D,IAAAtB,MAAK,YAAA,CAAasB,eAAAA,CAAe,0BAAA,EAA4B,KAAA,CAAM,sBAAsB,gBAAgB,CAAA;AAAA,EAC3G;AACF;AAEA,SAAS,0BAAA,CAA2BtB,KAAAA,EAAgB,KAAA,EAAgB,UAAA,GAAa,CAAA,EAAS;AACxF,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAAA,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,UAAU,SAAS,MAAM,CAAA;AAC5E,IAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,UAAU,YAAY,KAAK,CAAA;AAC9E,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAE3B,EAAA,IAAI,KAAA,GAAQ,UAAA;AACZ,EAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,IAAA,IAAI,KAAA,GAAQ,cAAc,oBAAA,EAAsB;AAChD,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAA;AACZ,IAAA,MAAM,UAAU,GAAA,CAAI,IAAA;AAEpB,IAAA,IAAI,YAAY,eAAA,EAAiB;AAC/B,MAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,SAAS,WAAW,CAAA;AAC5E,MAAAtB,KAAAA,CAAK,YAAA;AAAA,QACH,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA;AAAA,QACtC,iBAAA,CAAkB,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,SAAA,EAAW,GAAA,CAAI,WAAW;AAAA,OAChE;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,KAAY,sBAAA,IAA0B,OAAA,KAAY,sBAAA,EAAwB;AACnF,MAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,SAAS,MAAM,CAAA;AACvE,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,UAAA,GAAa,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAa,MAAA,CAAmC,IAAA,GAC3F,MAAA,CAAQ,MAAA,CAAmC,IAAI,CAAA,GAC/C,MAAA,CAAO,UAAU,EAAE,CAAA;AACvB,MAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,YAAY,UAAU,CAAA;AAAA,IAChF,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAQ,IAAI,IAAA,IAAmB,MAAA;AACrC,MAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,GAAA,CAAI,OAAO,CAAA;AAChD,MAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,SAAS,IAAI,CAAA;AACrE,MAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,WAAW,CAAA,CAAA,EAAI,KAAK,YAAY,OAAO,CAAA;AAAA,IAC7E;AACA,IAAA,KAAA,EAAA;AAAA,EACF;AACF;AAEA,SAAS,8BAAA,CAA+BtB,OAAgB,YAAA,EAA6B;AACnF,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,YAAA,KAAiB,QAAA,EAAU;AACvD,EAAA,MAAM,IAAA,GAAO,YAAA;AAEb,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AAC9B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,MAAA,EAAQ;AAC9B,MAAA,IAAI,SAAS,oBAAA,EAAsB;AACnC,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,MAAA,MAAM,OAAA,GAAU,IAAA;AAEhB,MAAA,IAAI,QAAQ,IAAA,KAAS,SAAA,IAAa,MAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AAChE,QAAA,KAAA,MAAW,WAAA,IAAe,QAAQ,OAAA,EAA2C;AAC3E,UAAA,IAAI,SAAS,oBAAA,EAAsB;AACnC,UAAA,IAAI,WAAA,CAAY,IAAA,KAAS,aAAA,IAAiB,WAAA,CAAY,IAAA,EAAM;AAC1D,YAAAA,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,SAAS,WAAW,CAAA;AAChF,YAAAtB,KAAAA,CAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA,EAAY,MAAA,CAAO,WAAA,CAAY,IAAI,CAAC,CAAA;AAChG,YAAA,KAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,eAAA,EAAiB;AAC3C,QAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,SAAS,WAAW,CAAA;AAChF,QAAAtB,KAAAA,CAAK,YAAA;AAAA,UACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA;AAAA,UAC1C,iBAAA,CAAkB,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,SAAA,EAAW,OAAA,CAAQ,WAAW;AAAA,SACxE;AACA,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,EAAA;AAC9C,QAAA,IAAI,UAAA,EAAY;AACd,UAAAtB,KAAAA,CAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,IAAI,KAAK,CAAA,aAAA,CAAA,EAAiB,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,QACjG;AACA,QAAA,KAAA,EAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC/B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,IAAI,SAAS,oBAAA,EAAsB;AACnC,MAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AAC3C,MAAA,MAAM,CAAA,GAAI,MAAA;AACV,MAAA,MAAM,OAAA,GAAW,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,KAAA;AAChC,MAAA,MAAM,gBAAA,GAAmB,KAAA;AAEzB,MAAA,IAAI,OAAA,EAAS;AACX,QAAAtB,KAAAA,CAAK,YAAA;AAAA,UACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,KAAA,CAAA;AAAA,UAC1C,MAAA,CAAO,OAAA,CAAQ,IAAA,IAAQ,WAAW;AAAA,SACpC;AACA,QAAAtB,KAAAA,CAAK,YAAA;AAAA,UACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA;AAAA,UAC1C,MAAA,CAAO,OAAA,CAAQ,OAAA,IAAW,EAAE;AAAA,SAC9B;AACA,QAAA,KAAA,EAAA;AAEA,QAAA,MAAM,YAAY,OAAA,CAAQ,UAAA;AAC1B,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,UAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,YAAA,IAAI,SAAS,oBAAA,EAAsB;AACnC,YAAA,MAAM,IAAA,GAAQ,EAAA,CAAG,QAAA,IAAY,EAAC;AAC9B,YAAAtB,KAAAA,CAAK,aAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,SAAS,WAAW,CAAA;AAChF,YAAAtB,KAAAA,CAAK,YAAA;AAAA,cACH,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,QAAA,CAAA;AAAA,cAC1C,iBAAA,CAAkB,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAI,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,EAAA,EAAI;AAAA,aAC9E;AACA,YAAA,IAAI,GAAG,EAAA,EAAI;AACT,cAAAtB,KAAAA,CAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,KAAK,CAAA,aAAA,CAAA,EAAiB,MAAA,CAAO,EAAA,CAAG,EAAE,CAAC,CAAA;AAAA,YAC5F;AACA,YAAA,KAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,EAAE,aAAA,EAAe;AACnB,QAAAtB,KAAAA,CAAK,YAAA,CAAa,CAAA,EAAGsB,eAAAA,CAAe,eAAe,CAAA,CAAA,EAAI,gBAAgB,CAAA,cAAA,CAAA,EAAkB,MAAA,CAAO,CAAA,CAAE,aAAa,CAAC,CAAA;AAAA,MAClH;AAAA,IACF;AAAA,EACF;AACF;;;ACjaO,IAAM,4BAAA,GAAN,MAAM,4BAAA,CAAwD;AAAA,EAanE,WAAA,CAAY,MAAA,EAAgB,UAAA,GAAqB,kBAAA,EAAoB;AAPrE,IAAA,IAAA,CAAQ,WAAA,GAAc,KAAA;AACtB,IAAA,IAAA,CAAQ,UAAA,uBAAiB,GAAA,EAAsB;AAC/C,IAAA,IAAA,CAAQ,UAAA,uBAAiB,GAAA,EAAsB;AAC/C,IAAA,IAAA,CAAQ,SAAA,uBAAgB,GAAA,EAAiC;AACzD,IAAA,IAAA,CAAQ,YAAA,uBAAmB,GAAA,EAAY;AACvC,IAAA,IAAA,CAAQ,WAAA,uBAAkB,GAAA,EAAyB;AAGjD,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AAAA,EACrB;AAAA,EAEQ,gBAAgB,GAAA,EAAkD;AACxE,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,GAAG,CAAA;AACvB,IAAA,OAAO,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,IAAI,MAAA,GAAY,EAAA;AAAA,EAC3C;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,MAAM,SAAS,IAAA,CAAK,UAAA,CAAW,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACxC,MAAA,IAAI;AACF,QAAA,KAAA,EAAO,YAAA,CAAa,wBAAwB,IAAI,CAAA;AAChD,QAAA,KAAA,EAAO,GAAA,EAAI;AAAA,MACb,CAAA,CAAA,MAAQ;AAAA,MAAsB;AAC9B,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,MAAM,CAAA;AAC7B,MAAA,MAAA,CAAO,MAAM,0EAA0E,CAAA;AAAA,IACzF;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,SAAS,IAAA,CAAK,UAAA,CAAW,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACxC,MAAA,IAAI;AACF,QAAA,KAAA,EAAO,YAAA,CAAa,wBAAwB,IAAI,CAAA;AAChD,QAAA,KAAA,EAAO,UAAU,EAAE,IAAA,EAAMG,eAAe,KAAA,EAAO,OAAA,EAAS,8BAA8B,CAAA;AACtF,QAAA,KAAA,EAAO,GAAA,EAAI;AAAA,MACb,CAAA,CAAA,MAAQ;AAAA,MAAsB;AAC9B,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,MAAM,CAAA;AAC7B,MAAA,IAAA,CAAK,YAAA,CAAa,OAAO,MAAM,CAAA;AAC/B,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,MAAM,CAAA;AAE5B,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACnD,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,KAAA,MAAW,UAAU,eAAA,EAAiB;AACpC,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACzC,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,IAAI;AACF,cAAA,MAAA,CAAO,YAAA,CAAa,wBAAwB,IAAI,CAAA;AAChD,cAAA,MAAA,CAAO,GAAA,EAAI;AAAA,YACb,CAAA,CAAA,MAAQ;AAAA,YAAsB;AAC9B,YAAA,IAAA,CAAK,UAAA,CAAW,OAAO,MAAM,CAAA;AAAA,UAC/B;AAAA,QACF;AACA,QAAA,IAAA,CAAK,WAAA,CAAY,OAAO,MAAM,CAAA;AAAA,MAChC;AAEA,MAAA,MAAA,CAAO,MAAM,iFAAiF,CAAA;AAAA,IAChG;AAAA,EACF;AAAA,EAEA,aAAa,UAAA,EAA8B;AACzC,IAAA,IAAI,KAAK,WAAA,EAAa;AACtB,IAAA,IAAI,WAAW,QAAA,EAAU;AAEzB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,WAAW,OAAO,CAAA;AAC3D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI;AAAE,QAAA,YAAA,CAAa,GAAA,EAAI;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAsB;AACxD,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,IAAQ,4BAAA,CAA4B,kBAAA,EAAoB;AAC1E,MAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,IACzB;AAEA,IAAA,MAAMzB,QAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,UAAA,CAAW,QAAQ,gBAAA,EAAkB;AAAA,MACvE,MAAMW,QAAAA,CAAS,QAAA;AAAA,MACf,UAAA,EAAY;AAAA,QACV,CAAC,oBAAoB,GAAA,OAAA;AAAA,QACrB,CAAC,mBAAmB,GAAG,UAAA,CAAW,IAAA,IAAQ,gBAAA;AAAA,QAC1C,CAACW,eAAAA,CAAe,UAAU,GAAG,IAAA,CAAK;AAAA;AACpC,KACD,CAAA;AAED,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAAtB,KAAAA,CAAK,YAAA,CAAa,qBAAA,EAAuB,UAAA,CAAW,OAAO,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAAA,MAAK,YAAA,CAAa,qBAAA,EAAuB,iBAAA,CAAkB,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,IACjF;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAA,CAAW,OAAA,EAASA,KAAI,CAAA;AAAA,EAC9C;AAAA,EAEA,WAAW,UAAA,EAA8B;AACvC,IAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,WAAW,OAAO,CAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,OAAO,CAAA;AAC1D,IAAA,QAAA,CAAS,SAAA;AAAA,MAAU,SAAA,GACf,EAAE,IAAA,EAAMyB,cAAAA,CAAe,KAAA,EAAO,OAAA,EAAS,gCAAA,EAAiC,GACxE,EAAE,IAAA,EAAMA,cAAAA,CAAe,EAAA;AAAG,KAC9B;AACA,IAAA,QAAA,CAAS,GAAA,EAAI;AAEb,IAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AACzC,IAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAC3C,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AACxC,IAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA,EAC5C;AAAA,EAEA,YAAY,SAAA,EAA4B;AACtC,IAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,MAAM,CAAA;AACzD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI;AAAE,QAAA,YAAA,CAAa,GAAA,EAAI;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAsB;AACxD,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,IAAQ,4BAAA,CAA4B,iBAAA,EAAmB;AACzE,MAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,IACxB;AAEA,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,QAAA,GACzB,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,GACtC,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,OAAO,CAAA;AAEzC,IAAA,MAAM,aAAA,GAAgB,aAClB1B,KAAAA,CAAM,OAAA,CAAQQ,QAAQ,MAAA,EAAO,EAAG,UAAU,CAAA,GAC1C,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,YAAY,SAAS,CAAA;AACtC,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,eAAA,CAAgB,SAAA,CAAU,SAAS,CAAA;AAE1D,IAAA,MAAMP,KAAAA,GAAO,KAAK,OAAA,CAAQ,SAAA;AAAA,MACxB,QAAA;AAAA,MACA;AAAA,QACE,MAAMW,QAAAA,CAAS,QAAA;AAAA,QACf,SAAA;AAAA,QACA,UAAA,EAAY;AAAA,UACV,CAAC,oBAAoB,GAAG,SAAA;AAAA,UACxB,CAACW,eAAAA,CAAe,UAAU,GAAG,IAAA,CAAK,WAAA;AAAA,UAClC,CAAC,sBAAsB,GAAG,SAAA,CAAU,QAAA,CAAS;AAAA;AAC/C,OACF;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQtB,KAAI,CAAA;AAE1C,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAU,OAAO,CAAA;AACpD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,uBAAc,GAAA,EAAI;AAClB,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAAA,IACjD;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,EAC9B;AAAA,EAEA,UAAU,SAAA,EAA4B;AACpC,IAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,IAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAU,MAAM,CAAA;AACjD,IAAA,IAAI,CAACA,KAAAA,EAAM;AAEX,IAAAA,KAAAA,CAAK,UAAA,CAAW,WAAA,CAAY,SAAS,CAAC,CAAA;AACtC,IAAA,qBAAA,CAAsBA,KAAAA,EAAM,SAAA,EAAW,IAAA,CAAK,WAAW,CAAA;AAEvD,IAAA,MAAM,OAAO,SAAA,CAAU,QAAA;AAEvB,IAAA,IAAI,KAAK,IAAA,KAAS,SAAA,IAAa,IAAA,CAAK,QAAA,IAAY,KAAK,UAAA,EAAY;AAC/D,MAAA,IAAI,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,aAAA,uBAAoB,GAAA,EAAI;AACxB,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,OAAA,EAAS,aAAa,CAAA;AAAA,MACrD;AACA,MAAA,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,IAAW,IAAA,CAAK,IAAA,EAAM;AACtC,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,OAAO,CAAA;AAC1D,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC9C,QAAA,IAAI,UAAA,EAAY;AACd,UAAAA,KAAAA,CAAK,YAAA,CAAa,yBAAA,EAA2B,UAAU,CAAA;AACvD,UAAA,aAAA,CAAc,MAAA,CAAO,KAAK,IAAI,CAAA;AAC9B,UAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,YAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,MAAM,WAAW,SAAA,CAAU,KAAA,CAAM,IAAA,GAC7B,CAAA,EAAG,UAAU,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,iBAAA,CAAkB,UAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,GACtE,UAAU,KAAA,CAAM,OAAA;AACpB,MAAAA,KAAAA,CAAK,UAAU,EAAE,IAAA,EAAMyB,eAAe,KAAA,EAAO,OAAA,EAAS,UAAU,CAAA;AAChE,MAAAzB,MAAK,eAAA,CAAgB,IAAI,MAAM,SAAA,CAAU,KAAA,CAAM,OAAO,CAAC,CAAA;AACvD,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,SAAA,CAAU,OAAO,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,CAAgB,SAAA,CAAU,OAAO,CAAA;AACtD,IAAAzB,KAAAA,CAAK,IAAI,OAAO,CAAA;AAChB,IAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAEvC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,UAAU,OAAO,CAAA;AACtD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,MAAA,CAAO,UAAU,MAAM,CAAA;AAC/B,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAA,GAAmB;AAAA,EAKnB;AAAA,EAEA,QAAA,GAAiB;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,KAAA,MAAWA,KAAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC3C,MAAA,IAAI;AACF,QAAAA,KAAAA,CAAK,YAAA,CAAa,0BAAA,EAA4B,IAAI,CAAA;AAClD,QAAAA,MAAK,SAAA,CAAU;AAAA,UACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAAzB,MAAK,GAAA,EAAI;AAAA,MACX,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,KAAA,MAAWA,KAAAA,IAAQ,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,EAAG;AAC3C,MAAA,IAAI;AACF,QAAAA,KAAAA,CAAK,YAAA,CAAa,0BAAA,EAA4B,IAAI,CAAA;AAClD,QAAAA,MAAK,SAAA,CAAU;AAAA,UACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAAzB,MAAK,GAAA,EAAI;AAAA,MACX,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,WAAW,KAAA,EAAM;AACtB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AACxB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AAAA,EACzB;AACF,CAAA;AA7Qa,4BAAA,CACa,iBAAA,GAAoB,GAAA;AADjC,4BAAA,CAEa,kBAAA,GAAqB,GAAA;AAFxC,IAAM,2BAAA,GAAN;ACtBP,IAAI,QAAA,GAAW,OAAA;AACf,IAAI;AACF,EAAA,MAAM,GAAA,GAAMkC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,IAAI,uBAAuB,CAAA;AACvC,EAAA,IAAI,GAAA,EAAK,OAAA,EAAS,QAAA,GAAW,GAAA,CAAI,OAAA;AACnC,CAAA,CAAA,MAAQ;AAER;AAEO,IAAMR,YAAAA,GAAc,QAAA;;;ACD3B,IAAI,kBAAA,GAA0B,IAAA;AAC9B,IAAIO,eAAAA,GAAiB,KAAA;AACrB,IAAI,YAAA,GAA8B,IAAA;AAClC,IAAI,eAAA,GAAsD,IAAA;AAC1D,IAAI,kBAAA,GAAgD,IAAA;AACpD,IAAI,oBAAA,GAAuB,KAAA;AAO3B,eAAe,mBAAA,GAAoC;AACjD,EAAA,IAAI,oBAAoB,OAAO,kBAAA;AAE/B,EAAA,IAAI;AAEF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,gBAAgB,CAAA;AACzC,IAAA,kBAAA,GAAqB,GAAA;AACrB,IAAA,OAAO,kBAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,MAAM,8DAA8D,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAI,gBAAgB,CAAA;AAChC,IAAA,kBAAA,GAAqB,GAAA;AACrB,IAAA,OAAO,kBAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,MAAM,8CAA8C,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,gCAAN,MAAoC;AAAA,EACzC,cAAA,GAA0B;AACxB,IAAA,OAAOD,eAAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,UAAA,CACJ,OAAA,GAA+B,EAAC,EACQ;AACxC,IAAA,IAAIA,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AACvD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,OAAA,CAAQ,cAAA;AACzB,MAAA,YAAA,GAAe,QAAA,GACX,SAAS,SAAA,CAAUF,qBAAAA,EAAsBL,YAAW,CAAA,GACpD3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,+CAAA,EAAkD,KAAK,CAAA,CAAE,CAAA;AACtE,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,mBAAA,EAAoB;AAC/C,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,+CAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,kBAAA;AACzC,IAAA,eAAA,GAAkB,IAAI,2BAAA,CAA4B,YAAA,EAAe,UAAU,CAAA;AAE3E,IAAA,MAAM,IAAA,GAA0B,OAAA,CAAQ,aAAA,IACnC,qBAAA,CAAsB,qBAAqB,CAAA,IAC3C,cAAA;AAEL,IAAA,MAAM,MAAA,GAAS,OAAO,YAAA,CAAa,kBAAA,KAAuB,UAAA;AAC1D,IAAA,MAAM,MAAA,GAAS,OAAO,YAAA,CAAa,iBAAA,KAAsB,UAAA;AAEzD,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,IAAA,KAAS,MAAA,IAAW,IAAA,KAAS,OAAA,IAAW,CAAC,MAAA,EAAS;AACpD,MAAA,QAAA,GAAW,QAAA;AAAA,IACb,WAAW,MAAA,EAAQ;AACjB,MAAA,QAAA,GAAW,SAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,MAAA;AAAA,IACb;AAEA,IAAA,IAAI;AACF,MAAA,QAAQ,QAAA;AAAU,QAChB,KAAK,SAAA;AACH,UAAA,IAAI,OAAO,YAAA,CAAa,kBAAA,KAAuB,UAAA,EAAY;AACzD,YAAA,kBAAA,GAAqB,aAAa,kBAAA,EAAmB;AAAA,UACvD;AACA,UAAA,YAAA,CAAa,kBAAA,CAAmB,CAAC,eAAe,CAAC,CAAA;AACjD,UAAA,oBAAA,GAAuB,IAAA;AACvB,UAAA,MAAA,CAAO,MAAM,iFAA4E,CAAA;AACzF,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,YAAA,CAAa,kBAAkB,eAAe,CAAA;AAAA,UAChD,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,KAAK,4EAA4E,CAAA;AACxF,YAAA,eAAA,GAAkB,IAAA;AAClB,YAAA,YAAA,GAAe,IAAA;AACf,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,IAAI,SAAS,OAAA,EAAS;AACpB,YAAA,MAAA,CAAO,IAAA;AAAA,cACL,oFAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAK,MAAA;AACH,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,0EAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,eAAA,GAAkB,IAAA;AAClB,UAAA,YAAA,GAAe,IAAA;AACf,UAAA,OAAO,IAAA;AAAA;AACX,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,IAAA,CAAK,2DAA2D,KAAK,CAAA;AAC5E,MAAA,eAAA,GAAkB,IAAA;AAClB,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,uCAAuC,CAAA;AACnD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,eAAA,CAAgB,QAAA,EAAS;AACzB,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AAEA,IAAA,IAAI,wBAAwB,kBAAA,EAAoB;AAC9C,MAAA,IAAI;AACF,QAAA,IAAI,kBAAA,IAAsB,OAAO,kBAAA,CAAmB,kBAAA,KAAuB,UAAA,EAAY;AACrF,UAAA,kBAAA,CAAmB,mBAAmB,kBAAkB,CAAA;AACxD,UAAA,MAAA,CAAO,MAAM,kDAAkD,CAAA;AAAA,QACjE,CAAA,MAAA,IAAW,OAAO,kBAAA,CAAmB,+BAAA,KAAoC,UAAA,EAAY;AACnF,UAAA,kBAAA,CAAmB,+BAAA,EAAgC;AACnD,UAAA,MAAA,CAAO,MAAM,iDAAiD,CAAA;AAAA,QAChE;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,KAAA,CAAM,gDAAgD,KAAK,CAAA;AAAA,MACpE;AAAA,IACF;AAEA,IAAA,kBAAA,GAAqB,IAAA;AACrB,IAAA,oBAAA,GAAuB,KAAA;AACvB,IAAA,YAAA,GAAe,IAAA;AACf,IAAA,kBAAA,GAAqB,IAAA;AACrB,IAAAA,eAAAA,GAAiB,KAAA;AAAA,EACnB;AACF;AAEO,IAAM,wBAAA,GAA2B,IAAI,6BAAA;;;ACtLrC,SAAS,aAAa,KAAA,EAG3B;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,KAAK,KAAA,EAAM;AAAA,EACtB;AACA,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,WAAW,KAAA,EAAO;AAC1D,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MACvB,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,UAAU,CAAA,GAAI,MAAM,UAAA,GAAa;AAAA,KACnE;AAAA,EACF;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA,EAAE;AAC9B;AACO,SAAS,aAAA,CAAc,GAAA,EAAa,SAAA,GAAoB,GAAA,EAAc;AAC3E,EAAA,IAAI,GAAA,CAAI,UAAU,SAAA,EAAW;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,SAAS,CAAA,GAAI,KAAA;AACvC;AAEO,SAAS,kBAAA,CACdjC,KAAAA,EACA,GAAA,EACA,UAAA,EACA,SAAA,EACM;AACN,EAAAA,KAAAA,CAAK,YAAA,CAAa,WAAA,EAAa,SAAS,CAAA;AACxC,EAAAA,KAAAA,CAAK,YAAA,CAAa,SAAA,EAAW,KAAK,CAAA;AAMlC,EAAgB;AACd,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACjC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,QAAQ,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AACtC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAM,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAAG;AACvC,MAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,aAAA,CAAc,GAAG,CAAC,CAAA;AAEpD,EAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,IAAA,IAAI;AACF,MAAAA,MAAK,YAAA,CAAa,yBAAA,EAA2B,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA,IACzE,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IACd;AAAA,EACF;AACF;AAEO,SAAS,mBAAA,CACdA,KAAAA,EACA,MAAA,EACA,QAAA,EACM;AACN,EAEA,IAAW,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,IAAA,EAAM;AAClD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,MAAAA,KAAAA,CAAK,YAAA,CAAa,kBAAA,EAAoB,MAAA,CAAO,MAAM,CAAA;AAAA,IACrD,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,QAAA,IAAY,cAAc,MAAA,EAAQ;AAC7D,MAAAA,MAAK,YAAA,CAAa,kBAAA,EAAoB,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAC,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAAA,KAAAA,CAAK,YAAA,CAAa,kBAAA,EAAoB,MAAM,CAAA;AAAA,IAC9C;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,UAAA,EAAqC;AACvE,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AAExB,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,IAAW,UAAA,CAAW,iBAAA;AACjD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,OAAO,MAAA,CAAO,QAAQ,QAAQ,CAAA;AACpD,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC/B,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,QAAA,EAAU,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9C,QAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,MACrB,SAAQ,CAAA,EAAG;AACT,QAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;AC3FA,IAAM,eAAA,GAAkB,eAAA;AACxB,IAAM,uBAAA,GAA0B,uBAAA;AAChC,IAAM,0BAAA,GAA6B,0BAAA;AAI5B,SAAS,aAAa,MAAA,EAAgB;AAC3C,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,IAAA,EACS;AACT,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,CAAC,CAAmD,CAAA;AACxF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,IAA0B,SAAA,CAAU,UAAA;AAE7D,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,MACZ,eAAA;AAAA,MACA,EAAE,IAAA,EAAMW,QAAAA,CAAS,MAAA,EAAO;AAAA,MACxB,CAACX,KAAAA,KAAe;AACd,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,oBAAoB,QAAQ,CAAA;AAC3C,UAAA,IAAI,MAAA,EAAQ;AACV,YAAAA,KAAAA,CAAK,YAAA,CAAa,SAAA,EAAW,MAAM,CAAA;AAAA,UACrC;AAEA,UAAA,kBAAA,CAAmBA,KAAAA,EAAM,SAAA,CAAU,GAAA,EAAK,UAAU,CAAA;AAElD,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,UAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAEzB,UAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAA4B,IAAA,KAAS,UAAA,EAAY;AACrE,YAAA,OAAQ,MAAA,CACL,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,cAAA,mBAAA,CAAoBA,OAAM,GAAG,CAAA;AAC7B,cAAAA,MAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,KAAK,GAAA,EAAI,GAAI,aAAa,GAAI,CAAA;AAChE,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAA,OAAO,GAAA;AAAA,YACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,cAAAzB,MAAK,SAAA,CAAU;AAAA,gBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,gBACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,eAC/D,CAAA;AACD,cAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,cAAA,MAAM,KAAA;AAAA,YACR,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,cAAAA,MAAK,GAAA,EAAI;AAAA,YACX,CAAC,CAAA;AAAA,UACL,CAAA,MAAO;AACL,YAAA,mBAAA,CAAoBA,OAAM,MAAM,CAAA;AAChC,YAAAA,KAAAA,CAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,OAAA,GAAU,aAAa,GAAI,CAAA;AAC7D,YAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,YAAAzB,MAAK,GAAA,EAAI;AACT,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAAA,MAAK,SAAA,CAAU;AAAA,YACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,YACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC/D,CAAA;AACD,UAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,UAAAA,MAAK,GAAA,EAAI;AACT,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEO,SAAS,oBAAoB,MAAA,EAAgB;AAClD,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,IAAA,EACS;AACT,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,CAAC,CAAmD,CAAA;AACxF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,IAA0B,SAAA,CAAU,UAAA;AAE7D,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,MACZ,uBAAA;AAAA,MACA,EAAE,IAAA,EAAMW,QAAAA,CAAS,MAAA,EAAO;AAAA,MACxB,CAACX,KAAAA,KAAe;AACd,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,QAAA;AAChB,UAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA;AACjD,UAAA,MAAM,MAAA,GAAS,oBAAoB,UAAU,CAAA;AAC7C,UAAA,IAAI,MAAA,EAAQ;AACV,YAAAA,KAAAA,CAAK,YAAA,CAAa,SAAA,EAAW,MAAM,CAAA;AAAA,UACrC;AAEA,UAAA,kBAAA,CAAmBA,KAAAA,EAAM,SAAA,CAAU,GAAA,EAAK,UAAU,CAAA;AAElD,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,UAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAEzB,UAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAA4B,IAAA,KAAS,UAAA,EAAY;AACrE,YAAA,OAAQ,MAAA,CACL,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,cAAA,mBAAA,CAAoBA,OAAM,GAAG,CAAA;AAC7B,cAAAA,MAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,KAAK,GAAA,EAAI,GAAI,aAAa,GAAI,CAAA;AAChE,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAA,OAAO,GAAA;AAAA,YACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,cAAAzB,MAAK,SAAA,CAAU;AAAA,gBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,gBACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,eAC/D,CAAA;AACD,cAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,cAAA,MAAM,KAAA;AAAA,YACR,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,cAAAA,MAAK,GAAA,EAAI;AAAA,YACX,CAAC,CAAA;AAAA,UACL,CAAA,MAAO;AACL,YAAA,mBAAA,CAAoBA,OAAM,MAAM,CAAA;AAChC,YAAAA,KAAAA,CAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,OAAA,GAAU,aAAa,GAAI,CAAA;AAC7D,YAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,YAAAzB,MAAK,GAAA,EAAI;AACT,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAAA,MAAK,SAAA,CAAU;AAAA,YACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,YACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC/D,CAAA;AACD,UAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,UAAAA,MAAK,GAAA,EAAI;AACT,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEO,SAAS,uBAAuB,MAAA,EAAgB;AACrD,EAAA,OAAO,SAAS,OAAA,CACd,OAAA,EACA,QAAA,EACA,IAAA,EACS;AACT,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,CAAK,CAAC,CAAmD,CAAA;AACxF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,IAA0B,SAAA,CAAU,UAAA;AAE7D,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,MACZ,0BAAA;AAAA,MACA,EAAE,IAAA,EAAMW,QAAAA,CAAS,MAAA,EAAO;AAAA,MACxB,CAACX,KAAAA,KAAe;AACd,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAa,QAAA;AACnB,UAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,UAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,OAAA,EAAS,UAAA;AACnD,UAAA,MAAM,MAAA,GAAS,oBAAoB,UAAU,CAAA;AAC7C,UAAA,IAAI,MAAA,EAAQ;AACV,YAAAA,KAAAA,CAAK,YAAA,CAAa,SAAA,EAAW,MAAM,CAAA;AAAA,UACrC;AAEA,UAAA,IAAI,WAAW,QAAA,EAAU;AACvB,YAAAA,KAAAA,CAAK,YAAA,CAAa,mBAAA,EAAqB,UAAA,CAAW,SAAS,IAAI,CAAA;AAC/D,YAAA,IAAI,UAAA,CAAW,SAAS,SAAA,EAAW;AACjC,cAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,UAAA,CAAW,SAAS,SAAS,CAAA;AAAA,YACjE;AAAA,UACF;AAEA,UAAA,kBAAA,CAAmBA,KAAAA,EAAM,SAAA,CAAU,GAAA,EAAK,UAAU,CAAA;AAElD,UAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,GAAG,IAAI,CAAA;AAC7C,UAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAEzB,UAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAA4B,IAAA,KAAS,UAAA,EAAY;AACrE,YAAA,OAAQ,MAAA,CACL,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,cAAA,mBAAA,CAAoBA,OAAM,GAAG,CAAA;AAC7B,cAAAA,MAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,KAAK,GAAA,EAAI,GAAI,aAAa,GAAI,CAAA;AAChE,cAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,cAAA,OAAO,GAAA;AAAA,YACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,cAAAzB,MAAK,SAAA,CAAU;AAAA,gBACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,gBACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,eAC/D,CAAA;AACD,cAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,cAAA,MAAM,KAAA;AAAA,YACR,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,cAAAA,MAAK,GAAA,EAAI;AAAA,YACX,CAAC,CAAA;AAAA,UACL,CAAA,MAAO;AACL,YAAA,mBAAA,CAAoBA,OAAM,MAAM,CAAA;AAChC,YAAAA,KAAAA,CAAK,YAAA,CAAa,aAAA,EAAA,CAAgB,OAAA,GAAU,aAAa,GAAI,CAAA;AAC7D,YAAAA,MAAK,SAAA,CAAU,EAAE,IAAA,EAAMyB,cAAAA,CAAe,IAAI,CAAA;AAC1C,YAAAzB,MAAK,GAAA,EAAI;AACT,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAAA,MAAK,SAAA,CAAU;AAAA,YACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,YACrB,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC/D,CAAA;AACD,UAAAzB,KAAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,UAAAA,MAAK,GAAA,EAAI;AACT,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;AChOO,IAAM0B,YAAAA,GAAc,OAAA;ACU3B,IAAMoD,QAAAA,GAAU5C,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAE7C,IAAMH,qBAAAA,GAAuB,+BAAA;AAC7B,IAAMsC,gBAAAA,uBAA6C,GAAA,EAAI;AACvD,IAAIpC,eAAAA,GAAiB,KAAA;AAMd,IAAM,2BAAN,MAA+B;AAAA,EAIpC,WAAA,GAAc;AAAA,EACd;AAAA,EAEA,MAAM,UAAA,CAAW,OAAA,GAA+B,EAAC,EAAsC;AACrF,IAAA,IAAIA,eAAAA,EAAgB;AAClB,MAAA,MAAA,CAAO,KAAK,iCAAiC,CAAA;AAC7C,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,SAAA,CAAUF,qBAAAA,EAAsBL,YAAW,CAAA,GAAI3B,KAAAA,CAAM,SAAA,CAAUgC,qBAAAA,EAAsBL,YAAW,CAAA;AAAA,IAC1J,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAK,qBAAA,EAAsB;AACjC,IAAA,MAAM,KAAK,wBAAA,EAAyB;AACpC,IAAA,MAAM,KAAK,qBAAA,EAAsB;AACjC,IAAAO,eAAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,GAAqB;AACnB,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAA,CAAO,KAAK,6BAA6B,CAAA;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,uBAAA,EAAwB,CAAE,KAAA,CAAM,MAAM;AAAA,IAC3C,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,0BAAA,EAA2B,CAAE,KAAA,CAAM,MAAM;AAAA,IAC9C,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,uBAAA,EAAwB,CAAE,KAAA,CAAM,MAAM;AAAA,IAC3C,CAAC,CAAA;AAED,IAAAoC,iBAAgB,KAAA,EAAM;AACtB,IAAApC,eAAAA,GAAiB,KAAA;AAAA,EACnB;AAAA,EAEA,cAAA,GAA0B;AACxB,IAAA,OAAOA,eAAAA;AAAA,EACT;AAAA,EAEA,MAAc,qBAAA,GAAuC;AACnD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU6C,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAe,OAAA,CAAgB,OAAA,EAAS,UAAA;AACnE,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,MAAA,CAAO,MAAM,wDAAwD,CAAA;AAAA,QACvE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,WAAW,KAAA,EAAO;AAC/B,QAAA,MAAM,aAAA,GAAgB,WAAW,SAAA,CAAU,KAAA;AAC3C,QAAAT,gBAAAA,CAAgB,GAAA,CAAI,4BAAA,EAA8B,aAAa,CAAA;AAC/D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,aAAa,MAAM,CAAA;AACnC,QAAA,UAAA,CAAW,SAAA,CAAU,KAAA,GAAQ,SAAA,GAExB,IAAA,EACE;AACL,UAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACxC,UAAA,OAAO,OAAA,CAAQ,QAAA,EAAiB,IAAA,EAAM,IAAI,CAAA;AAAA,QAC5C,CAAA;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAc,wBAAA,GAA0C;AACtD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUS,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,IAAkB,OAAA,CAAgB,OAAA,EAAS,aAAA;AACzE,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,MAAA,CAAO,MAAM,2DAA2D,CAAA;AAAA,QAC1E;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAA,CAAc,WAAW,KAAA,EAAO;AAClC,QAAA,MAAM,aAAA,GAAgB,cAAc,SAAA,CAAU,KAAA;AAC9C,QAAAT,gBAAAA,CAAgB,GAAA,CAAI,+BAAA,EAAiC,aAAa,CAAA;AAElE,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,oBAAoB,MAAM,CAAA;AAE1C,QAAA,aAAA,CAAc,SAAA,CAAU,KAAA,GAAQ,SAAA,GAE3B,IAAA,EACE;AACL,UAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACxC,UAAA,OAAO,OAAA,CAAQ,QAAA,EAAiB,IAAA,EAAM,IAAI,CAAA;AAAA,QAC5C,CAAA;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAc,qBAAA,GAAuC;AACnD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAElB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUS,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAe,OAAA,CAAgB,OAAA,EAAS,UAAA;AAEnE,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,UAAA,MAAA,CAAO,MAAM,wDAAwD,CAAA;AAAA,QACvE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,WAAW,KAAA,EAAO;AAC/B,QAAA,MAAM,aAAA,GAAgB,WAAW,SAAA,CAAU,KAAA;AAC3C,QAAAT,gBAAAA,CAAgB,GAAA,CAAI,4BAAA,EAA8B,aAAa,CAAA;AAE/D,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,MAAM,OAAA,GAAU,uBAAuB,MAAM,CAAA;AAE7C,QAAA,UAAA,CAAW,SAAA,CAAU,KAAA,GAAQ,SAAA,GAExB,IAAA,EACE;AACL,UAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACxC,UAAA,OAAO,OAAA,CAAQ,QAAA,EAAiB,IAAA,EAAM,IAAI,CAAA;AAAA,QAC5C,CAAA;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAc,uBAAA,GAAyC;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUS,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAe,OAAA,CAAgB,OAAA,EAAS,UAAA;AAEnE,MAAA,MAAM,aAAA,GAAgBT,gBAAAA,CAAgB,GAAA,CAAI,4BAA4B,CAAA;AACtE,MAAA,IAAI,aAAA,IAAiB,YAAY,SAAA,EAAW;AAC1C,QAAA,UAAA,CAAW,UAAU,KAAA,GAAQ,aAAA;AAAA,MAC/B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mCAAA,EAAsC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAc,0BAAA,GAA4C;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUS,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,IAAkB,OAAA,CAAgB,OAAA,EAAS,aAAA;AACzE,MAAA,MAAM,aAAA,GAAgBT,gBAAAA,CAAgB,GAAA,CAAI,+BAA+B,CAAA;AACzE,MAAA,IAAI,aAAA,IAAiB,eAAe,SAAA,EAAW;AAC7C,QAAA,aAAA,CAAc,UAAU,KAAA,GAAQ,aAAA;AAAA,MAClC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sCAAA,EAAyC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAc,uBAAA,GAAyC;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUS,SAAQ,SAAS,CAAA;AACjC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAe,OAAA,CAAgB,OAAA,EAAS,UAAA;AACnE,MAAA,MAAM,aAAA,GAAgBT,gBAAAA,CAAgB,GAAA,CAAI,4BAA4B,CAAA;AACtE,MAAA,IAAI,aAAA,IAAiB,YAAY,SAAA,EAAW;AAC1C,QAAA,UAAA,CAAW,UAAU,KAAA,GAAQ,aAAA;AAAA,MAC/B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mCAAA,EAAsC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAA;AAEO,IAAM,mBAAA,GAAsB,IAAI,wBAAA,EAAyB;;;ACxMhE,IAAI,cAAA,GAAgC,IAAA;AACpC,IAAM,eAAA,uBAAsB,GAAA,EAAY;AAEjC,SAAS,gBAAgB,OAAA,EAAkB;AAChD,EAAa;AACX,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,cAAA,GAAiB,KAAK,GAAA,EAAI;AAC1B,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,CAAA,gDAAA,EAAmD,OAAO,4BAA4B,CAAA,CAAA;AAAA,OACxF;AAAA,IACF;AAAA,EACF;AAGF;AAEO,SAAS,cAAA,GAA0B;AACxC,EAAA,IAAI,cAAA,KAAmB,MAAM,OAAO,KAAA;AAEpC,EAAA,MAAM,OAAA,GAAA,CAAW,IAAA,CAAK,GAAA,EAAI,GAAI,cAAA,IAAkB,GAAA;AAEhD,EAAA,IAAI,OAAA,IAAW,OAAO,4BAAA,EAA8B;AAClD,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,kBAAkB,OAAA,EAAiB;AACjD,EAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAC7B;AAEO,SAAS,iBAAiB,OAAA,EAA0B;AACzD,EAAA,OAAO,eAAA,CAAgB,IAAI,OAAO,CAAA;AACpC;AAEO,SAAS,WAAWrE,KAAAA,EAA4B;AACrD,EAAA,IAAI;AACF,IAAA,OAAOA,KAAAA,CAAK,aAAY,CAAE,OAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;;;ACxBA,IAAM,iBAAN,MAA6C;AAAA,EAC3C,WAAA,CACmB,UACA,SAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAChB;AAAA,EAEH,IAAI,iBAAA,GAA6C;AAC/C,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,IAAI,IAAA,GAAO;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EAAM;AAAA,EACxC,IAAI,IAAA,GAAO;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EAAM;AAAA,EACxC,WAAA,GAAc;AAAE,IAAA,OAAO,IAAA,CAAK,SAAS,WAAA,EAAY;AAAA,EAAG;AAAA,EACpD,IAAI,SAAA,GAAY;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,SAAA;AAAA,EAAW;AAAA,EAClD,IAAI,OAAA,GAAU;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,OAAA;AAAA,EAAS;AAAA,EAC9C,IAAI,MAAA,GAAS;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA;AAAA,EAAQ;AAAA,EAC5C,IAAI,UAAA,GAAa;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,UAAA;AAAA,EAAY;AAAA,EACpD,IAAI,KAAA,GAAQ;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EAAO;AAAA,EAC1C,IAAI,MAAA,GAAS;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA;AAAA,EAAQ;AAAA,EAC5C,IAAI,QAAA,GAAW;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EAAU;AAAA,EAChD,IAAI,KAAA,GAAQ;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EAAO;AAAA,EAC1C,IAAI,QAAA,GAAW;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,QAAA;AAAA,EAAU;AAAA,EAChD,IAAI,oBAAA,GAAuB;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,oBAAA;AAAA,EAAsB;AAAA,EACxE,IAAI,sBAAA,GAAyB;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,sBAAA;AAAA,EAAwB;AAAA,EAC5E,IAAI,kBAAA,GAAqB;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,kBAAA;AAAA,EAAoB;AAAA,EACpE,IAAI,iBAAA,GAAoB;AAAE,IAAA,OAAO,KAAK,QAAA,CAAS,iBAAA;AAAA,EAAmB;AACpE,CAAA;AAEO,IAAM,sBAAA,GAAN,MAAM,sBAAA,CAA8C;AAAA,EAmBzD,WAAA,CACmB,QAAA,EACjB,cAAA,EACiB,eAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAEA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAZnB;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAiB,0BAAA,uBAAiC,GAAA,EAGhD;AAGF;AAAA,IAAA,IAAA,CAAiB,iBAAA,uBAAwB,GAAA,EAA8B;AAQrE,IAAA,IAAA,CAAK,QAAA,GAAW,gBAAgB,cAAc,CAAA;AAAA,EAChD;AAAA,EAEA,MAAA,CACE,OACA,cAAA,EACM;AACN,IAAA,IAAI,gBAAe,EAAG;AACpB,MAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAA,GAAU,WAAWA,KAAI,CAAA;AAC/B,QAAA,IAAI,OAAA,oBAA2B,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,cAAA,CAAe,EAAE,IAAA,EAAM,gBAAA,CAAiB,OAAA,EAAS,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAA2B,EAAC;AAClC,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAqC;AAIjE,IAAA,MAAM,uBAAuB,IAAA,CAAK,eAAA,GAC9B,IAAI,GAAA,CAAI,IAAA,CAAK,eAAe,CAAA,GAC5B,MAAA;AAEJ,IAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,WAAWA,KAAI,CAAA;AAC/B,MAAA,IAAI,OAAA,IAAW,gBAAA,CAAiB,OAAO,CAAA,EAAG;AAE1C,MAAA,MAAM,OAAOA,KAAAA,CAAK,IAAA;AAElB,MAAA,MAAM,eAAA,GAAkB,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,QAAQ,CAAA;AAE7D,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiBA,KAAI,CAAA;AAChD,MAAA,MAAM,cAAA,GACH,aAAA,CAAc,MAAA,GAAS,CAAA,IACtB,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,wBAAA,CAAyB,aAAa,CAAC,CAAA,IACtE,IAAA,CAAK,kBAAkBA,KAAI,CAAA;AAE7B,MAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,cAAA,EAAgB;AACvC,QAAA,QAAA,CAAS,KAAKA,KAAI,CAAA;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,WAAA,EAAY,CAAE,MAAA;AAClC,MAAA,MAAM,YAAYA,KAAAA,CAAK,iBAAA;AACvB,MAAA,eAAA,CAAgB,GAAA,CAAI,QAAQ,SAAS,CAAA;AACrC,MAAA,IAAA,CAAK,0BAAA,CAA2B,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAqC;AAExD,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,KAAK,0BAAA,EAA4B;AACpD,MAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IACjB;AACA,IAAA,IAAI,oBAAA,EAAsB;AACxB,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,oBAAA,EAAsB;AACzC,QAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACjB;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,eAAA,EAAiB;AACpC,MAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IACjB;AAEA,IAAA,IAAI,MAAA,CAAO,OAAO,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,uBAAA,CAAwB,UAAU,MAAM,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAA,CAAK,uBAAA,EAAwB;AAE7B,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,cAAA,CAAe,EAAE,IAAA,EAAM,gBAAA,CAAiB,OAAA,EAAS,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,QAAA,EAAU,cAAc,CAAA;AAAA,EAC/C;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,2BAA2B,KAAA,EAAM;AACtC,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,OAAO,IAAA,CAAK,SAAS,QAAA,EAAS;AAAA,EAChC;AAAA,EAEA,UAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,UAAA,IAAa,IAAK,QAAQ,OAAA,EAAQ;AAAA,EACzD;AAAA,EAEQ,yBAAyB,QAAA,EAAsC;AACrE,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACnC,MAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AACxC,MAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,IAAA,GAAO,sBAAA,CAAsB,uBAAA,EAAyB;AAC/E,QAAA,MAAM,QAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACnD,QAAA,IAAI,KAAA,EAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,KAAK,CAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,uBAAA,GAAgC;AACtC,IAAA,IAAI,IAAA,CAAK,0BAAA,CAA2B,IAAA,IAAQ,sBAAA,CAAsB,sBAAA,EAAwB;AACxF,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,MACpB,IAAA,CAAK,0BAAA,CAA2B,IAAA,GAAO,sBAAA,CAAsB,sBAAA;AAAA,MAC7D,IAAA,CAAK,IAAA,CAAK,sBAAA,CAAsB,sBAAA,GAAyB,IAAI;AAAA,KAC/D;AACA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,0BAAA,CAA2B,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACjF,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,0BAAA,CAA2B,OAAO,GAAG,CAAA;AAAA,IAC5C;AAAA,EACF;AAAA,EAEQ,iBAAiBA,KAAAA,EAA8B;AACrD,IAAA,MAAM,KAAA,GAAQA,KAAAA,CAAK,UAAA,GAAa,2BAA2B,CAAA;AAC3D,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,QAAQ,CAAA,EAAG;AACrE,MAAA,OAAQ,KAAA,CAAmB,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,EAAE,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEQ,kBAAkBA,KAAAA,EAA6B;AACrD,IAAA,OAAOA,KAAAA,CAAK,UAAA,GAAa,qBAAqB,CAAA,KAAM,IAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,uBAAA,CACN,OACA,UAAA,EACM;AACN,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAMA,KAAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,SAASA,KAAAA,CAAK,iBAAA;AAClB,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,MAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,OAAO,MAAA,IAAU,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,EAAG;AAC9C,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,EAAG;AAChC,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAM,CAAA;AACzB,QAAA,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AACrC,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AAEA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAI,cAAA,CAAeA,OAAM,MAAM,CAAA;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAvLa,sBAAA,CACa,sBAAA,GAAyB,GAAA;AADtC,sBAAA,CAiBa,uBAAA,GAA0B,GAAA;AAjB7C,IAAM,qBAAA,GAAN;ACvCA,IAAM,yBAAN,MAAqD;AAAA,EAK1D,YAAYF,OAAAA,EAAwB;AAFpC,IAAA,IAAA,CAAQ,WAAA,GAAc,KAAA;AAGpB,IAAA,IAAA,CAAK,OAAOA,OAAAA,CAAO,GAAA;AACnB,IAAA,IAAA,CAAK,QAAA,GAAWA,OAAAA,CAAO,OAAA,IAAW,EAAC;AAAA,EACrC;AAAA,EAEA,MAAA,CACE,OACA,cAAA,EACM;AACN,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,cAAA,EAAe,EAAG;AACxC,MAAA,OAAO,cAAA,CAAe,EAAE,IAAA,EAAMiF,gBAAAA,CAAiB,SAAS,CAAA;AAAA,IAC1D;AAEA,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,gBAAA,CAAiB,KAAK,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACvD,MAAA,IAAA,GAAO,UAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,OAAO,cAAA,CAAe;AAAA,QACpB,MAAMA,gBAAAA,CAAiB,MAAA;AAAA,QACvB,OAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,sBAAsB;AAAA,OACrE,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAgC;AAAA,MACpC,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,QAAA;AAAA,MACV,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,GAAG,IAAA,CAAK,QAAA;AAAA,QACR,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,cAAA,EAAgB,kBAAA;AAAA,QAChB,gBAAA,EACE,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,UAAA,CAAW,IAAI,IAAI,IAAA,CAAK;AAAA;AAC9D,KACF;AAEA,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,QAAA,KAAa,QAAA,GAAW,KAAA,GAAQ,IAAA;AAEhD,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,CAAC,GAAA,KAAQ;AACxC,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAW,QAAQ,KAAM,CAAA;AACzC,MAAA,GAAA,CAAI,EAAA,CAAG,OAAO,MAAM;AAClB,QAAA,IAAI,IAAI,UAAA,IAAc,GAAA,CAAI,cAAc,GAAA,IAAO,GAAA,CAAI,aAAa,GAAA,EAAK;AACnE,UAAA,cAAA,CAAe,EAAE,IAAA,EAAMA,gBAAAA,CAAiB,OAAA,EAAS,CAAA;AAAA,QACnD,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,GAAA,CAAI,UAAU,CAAA;AACxC,UAAA,cAAA,CAAe;AAAA,YACb,MAAMA,gBAAAA,CAAiB,MAAA;AAAA,YACvB,OAAO,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,GAAA,CAAI,UAAU,CAAA,CAAE;AAAA,WAC5C,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,GAAA,CAAI,EAAA;AAAA,MAAG,OAAA;AAAA,MAAS,CAAC,QACf,cAAA,CAAe,EAAE,MAAMA,gBAAAA,CAAiB,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK;AAAA,KAC9D;AACA,IAAA,GAAA,CAAI,MAAM,IAAI,CAAA;AACd,IAAA,GAAA,CAAI,GAAA,EAAI;AAAA,EACV;AAAA,EAEQ,cAAA,CAAe,YAAoB,UAAA,EAAqB;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACtC,MAAA,MAAM,SAAA,GAAY,QAAA,EAAU,KAAA,EAAO,IAAA,IAAQ,UAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,QAAA,EAAU,KAAA,EAAO,OAAA,IAAW,EAAA;AAEjD,MAAA,IAAI,SAAA,KAAc,GAAA,IAAO,YAAA,CAAa,QAAA,CAAS,sBAAsB,CAAA,EAAG;AACtE,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,UAAA,KAAe,GAAA,IAAO,UAAA,CAAW,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAC/D,QAAA,eAAA,CAAoB,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,GAA4B;AAChC,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AACF;AC9CA,IAAMD,QAAAA,GAAU5C,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAE7C,IAAI,oBAAA,GAA4B,IAAA;AAChC,IAAI,sBAAA,GAA8B,IAAA;AAMlC,SAAS,mBAAmB,WAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA4C,QAAAA,CAAQ,QAAQ,WAAW,CAAA;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAOO,IAAI,qBAAA,GAAuC,QAAQ,OAAA,EAAQ;AAElE1E,WAAAA,CAAY,mBAAA;AAAA,EACV,IAAI,mBAAA,CAAoB;AAAA,IACtB,aAAa,CAAC,IAAI,2BAA0B,EAAG,IAAI4E,sBAAmB;AAAA,GACvE;AACH,CAAA;AAEA,SAAS,sCAAA,GAA+C;AACtD,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,EAAU,WAAA,KAAwB;AACpD,IAAA,MAAM,UAAU,GAAA,EAAK,wBAAA;AACrB,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,eAAA,EAAiB;AAEzC,IAAA,MAAM,qBAAA,GAAwB,CAAC,UAAA,KAAuB;AACpD,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,UAAU,CAAA;AAC7C,MAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AACpC,MAAA,OAAA,CAAQ,SAAA,CAAU,UAAU,CAAA,GAAI,SAAA,GAAa,IAAA,EAAa;AACxD,QAAA,MAAM,WAAA,GAAc,KAAK,CAAC,CAAA;AAC1B,QAAA,MAAM,aAAa,WAAA,GACf,IAAA,EAAM,OAAO,GAAA,CAAI,WAAW,GAAG,IAAA,GAC/B,MAAA;AACJ,QAAA,MAAM,MAAA,GAASjF,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,QAAQ,CAAA;AACnD,QAAA,MAAA,CAAO,KAAA;AAAA,UACC,aAAa,UAAU,CAAA,QAAA,EAAW,IAAA,CAAK,CAAC,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,YAAA,EAAe,UAAA,GAAa,QAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,EAAQ,WAAA,GAAc,MAAM,CAAA;AAAA,SAC3J;AAEA,QAAA,MAAM,GAAA,GAAM,UAAA,GACRR,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,QAAO,EAAG,UAAU,CAAA,GAC1CA,OAAAA,CAAQ,MAAA,EAAO;AACnB,QAAA,OAAOA,OAAAA,CAAQ,KAAK,GAAA,EAAK,MAAM,SAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAC3D,CAAA;AAAA,IACF,CAAA;AAEA,IAAA,qBAAA,CAAsB,kBAAkB,CAAA;AACxC,IAAA,qBAAA,CAAsB,gBAAgB,CAAA;AACtC,IAAA,qBAAA,CAAsB,sBAAsB,CAAA;AAC5C,IAAA,qBAAA,CAAsB,iBAAiB,CAAA;AAEvC,IAAA,OAAA,CAAQ,eAAA,GAAkB,IAAA;AAC1B,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,qDAAA,EAAwD,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,EACtF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAMuE,SAAQ,sCAAsC,CAAA;AAC1D,IAAA,MAAA,CAAO,MAAM,CAAA,6DAAA,EAAgEA,QAAAA,CAAQ,OAAA,CAAQ,sCAAsC,CAAC,CAAA,CAAE,CAAA;AACtI,IAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,IAAA;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,MAAM,qEAAqE,CAAA;AAAA,EACpF;AAEA,EAAA,OAAO,oBAAsC,CAAA,CAC1C,IAAA,CAAK,CAAC,GAAA,KAAa;AAClB,IAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,EAC1B,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,EAEb,CAAC,CAAA;AACL;AAEA,SAAS,wCAAA,GAAiD;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,qBAAA,GAAwBA,SAAQ,mCAAmC,CAAA;AACzE,IAAA,MAAM,kBAAkB,qBAAA,EAAuB,eAAA;AAC/C,IAAA,IAAI,CAAC,eAAA,IAAoB,eAAA,CAAwB,yBAAA,EAA2B;AAC1E,MAAA;AAAA,IACF;AACA,IAAA,MAAM,wBAAyB,eAAA,CAAwB,cAAA;AACvD,IAAA,IAAI,OAAO,0BAA0B,UAAA,EAAY;AAEjD,IAAC,eAAA,CAAwB,iBAAiB,SACxC,mBAAA,EACA,eACA,eAAA,EACA,SAAA,EACA,mBAAA,EACA,aAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KAAkB;AACxC,QAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AACtB,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,UAAA,OAAO,QAAA,CAAS,MAAA;AAAA,YACd,CAAC,CAAA,KAAM,CAAA,EAAG,IAAA,KAAS;AAAA,WACrB;AAAA,QACF;AACA,QAAA,OAAO,QAAA;AAAA,MACT,CAAA;AACA,MAAA,MAAM,mBAAA,GAAsB,eAAe,mBAAmB,CAAA;AAC9D,MAAA,MAAM,aAAA,GAAgB,eAAe,aAAa,CAAA;AAClD,MAAA,OAAO,qBAAA,CAAsB,IAAA;AAAA,QAC3B,IAAA;AAAA,QACA,mBAAA;AAAA,QACA,aAAA;AAAA,QACA,eAAA;AAAA,QACA,SAAA;AAAA,QACA,mBAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AACA,IAAC,gBAAwB,yBAAA,GAA4B,IAAA;AACrD,IAAA,MAAA,CAAO,MAAM,kDAAkD,CAAA;AAAA,EACjE,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAeA,SAAS,0BAAA,CACP,iBACA,gBAAA,EACoB;AACpB,EAAA,MAAM,WAAA,GAAA,SAAA;AACN,EAAA,MAAM,UAAA,GAAa,eAAA,IAAmB,IAAA,IAAQ,eAAA,CAAgB,IAAI,WAAW,CAAA;AAC7E,EAAA,MAAM,WAAA,GAAc,gBAAA,IAAoB,IAAA,IAAQ,gBAAA,CAAiB,IAAI,WAAW,CAAA;AAEhF,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OAEF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,sBAAsB,IAAI,GAAA;AAAA,IAC9B,MAAA,CAAO,OAAO,gBAAgB,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,MAAM,WAAW;AAAA,GACjE;AAGA,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,aAAA,GAAgB,IAAI,IAAI,mBAAmB,CAAA;AAAA,EAC7C,CAAA,MAAA,IAAW,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG;AACxD,IAAA,aAAA,GAAgB,IAAI,GAAA;AAAA,MAClB,CAAC,GAAG,gBAAgB,CAAA,CACjB,OAAO,CAAC,CAAA,KAAM,CAAA,KAAM,WAAW,EAC/B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS;AAAA,KAC3B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,aAAA,uBAAoB,GAAA,EAAI;AAAA,EAC1B;AAGA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAMG,SAAAA,uBAAe,GAAA,EAAY;AACjC,MAAA,KAAA,MAAW,KAAK,mBAAA,EAAqB;AACnC,QAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,EAAG;AACzB,UAAAA,SAAAA,CAAS,IAAI,CAAC,CAAA;AAAA,QAChB;AAAA,MACF;AACA,MAAA,OAAOA,SAAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,aAAA,GACJ,eAAA,IAAmB,eAAA,CAAgB,IAAA,GAAO,IACtC,eAAA,GACA,4BAAA;AAEN,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,IAAA,IAAI,MAAM,WAAA,EAAa;AACvB,IAAA,MAAM,GAAA,GAAM,EAAE,OAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,MAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAA,CACdnF,OAAAA,EACA,WAAA,EACA,gBAAA,EACA,eAAA,EACqC;AAErC,EAAA,MAAM,SAAA,GAAY,WAAA,IAAe,IAAA,IAAQ,WAAA,CAAY,GAAA,CAAA,SAAA,WAAwB;AAI7E,EAAA,MAAM,iBAAA,GAAwC,0BAAA;AAAA,IAC5C,eAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,oBAA4D,EAAC;AAGnE,EAAA,MAAM,uBAAA,GAAmD;AAAA,IACvD,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,KAAA;AAAA,IACX,YAAA,EAAc;AAAA,GAChB;AAIA,EAAA,MAAM,WAAkC,SAAA,GACpC,IAAI,IAAI,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,0BAAiD,CAAA,GACtG,eAAe,WAAA,CAAY,IAAA,GAAO,IAAK,WAAA,GAAc,mBAAA;AAG1D,EAAA,iBAAA,CAAkB,eAAA,GAAkB,KAAA;AACpC,EAAA,iBAAA,CAAkB,SAAA,GAAY,KAAA;AAC9B,EAAA,iBAAA,CAAkB,UAAA,GAAa,KAAA;AAC/B,EAAA,iBAAA,CAAkB,QAAA,GAAW,KAAA;AAC7B,EAAA,iBAAA,CAAkB,MAAA,GAAS,KAAA;AAC3B,EAAA,iBAAA,CAAkB,QAAA,GAAW,KAAA;AAC7B,EAAA,iBAAA,CAAkB,QAAA,GAAW,KAAA;AAE7B,EAAA,IAAI,QAAA,CAAS,0BAA2B,EAAG;AACzC,IAAA,uBAAA,CAAwB,MAAA,GAAS,IAAA;AAAA,EACnC;AACA,EAAA,IAAI,QAAA,CAAS,+BAA4B,EAAG;AAC1C,IAAA,uBAAA,CAAwB,OAAA,GAAU,IAAA;AAAA,EACpC;AACA,EAAA,IAAI,QAAA,CAAS,sBAAyB,EAAG;AACvC,IAAA,uBAAA,CAAwB,IAAA,GAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,QAAA,CAAS,8CAAyC,EAAG;AACvD,IAAA,uBAAA,CAAwB,WAAA,GAAc,IAAA;AAAA,EACxC;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,UAAA,iBAA8B,IAAK,kBAAA,CAAmB,wBAAwB,CAAA,EAAG;AAC5F,IAAA,iBAAA,CAAkB,eAAA,GAAkBgF,SAAQ,wBAAwB,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,QAAA,CAAS,gCAA8B,EAAG;AAC5C,IAAA,iBAAA,CAAkB,SAAA,GAAY,IAAA;AAAA,EAChC;AACA,EAAA,IAAI,QAAA,CAAS,gCAA8B,EAAG;AAC5C,IAAA,uBAAA,CAAwB,SAAA,GAAY,IAAA;AAAA,EACtC;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,aAAA,mBAAgC,IAAK,kBAAA,CAAmB,YAAY,CAAA,EAAG;AAClF,IAAA,iBAAA,CAAkB,UAAA,GAAaA,SAAQ,YAAY,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,UAAA,gBAA6B,IAAK,kBAAA,CAAmB,6BAA6B,CAAA,EAAG;AAChG,IAAA,iBAAA,CAAkB,QAAA,GAAWA,SAAQ,6BAA6B,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,QAAA,cAA2B,IAAK,kBAAA,CAAmB,wBAAwB,CAAA,EAAG;AACzF,IAAA,iBAAA,CAAkB,MAAA,GAASA,SAAQ,wBAAwB,CAAA;AAAA,EAC7D;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,UAAA,gBAA6B,IAAK,kBAAA,CAAmB,UAAU,CAAA,EAAG;AAC7E,IAAA,iBAAA,CAAkB,QAAA,GAAWA,SAAQ,UAAU,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAA,UAAA,gBAA6B,IAAK,kBAAA,CAAmB,aAAa,CAAA,EAAG;AAChF,IAAA,iBAAA,CAAkB,QAAA,GAAWA,SAAQ,aAAa,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,QAAA,CAAS,gCAA8B,EAAG;AAC5C,IAAA,uBAAA,CAAwB,SAAA,GAAY,IAAA;AAAA,EACtC;AACA,EAAA,IAAI,QAAA,CAAS,wCAAkC,EAAG;AAChD,IAAA,uBAAA,CAAwB,YAAA,GAAe,IAAA;AAAA,EACzC;AAGA,EAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG;AACjD,IAAA,MAAM,QAAA,GAAW,iBAAiB,GAAA,CAAA,SAAA,WAAwB;AAC1D,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,QAAA,cAA2B,0BAA2B,MAAA,GAAS,KAAA;AAChG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,MAAA,YAAyB,0BAA2B,IAAA,GAAO,KAAA;AAC5F,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,YAAA,eAA4B,0BAA2B,OAAA,GAAU,KAAA;AAClG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,WAAA,iBAA8B,0BAA2B,SAAA,GAAY,KAAA;AACtG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,cAAA,4BAAyC,0BAA2B,WAAA,GAAc,KAAA;AACnH,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,WAAA,iBAA8B,0BAA2B,SAAA,GAAY,KAAA;AACtG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,eAAA,qBAAkC,0BAA2B,YAAA,GAAe,KAAA;AAC7G,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,UAAA,iBAA8B,oBAAqB,eAAA,GAAkB,KAAA;AACtG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,WAAA,iBAA8B,oBAAqB,SAAA,GAAY,KAAA;AAChG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,aAAA,mBAAgC,oBAAqB,UAAA,GAAa,KAAA;AACnG,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,UAAA,gBAA6B,oBAAqB,QAAA,GAAW,KAAA;AAC9F,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,QAAA,cAA2B,oBAAqB,MAAA,GAAS,KAAA;AAC1F,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,UAAA,gBAA6B,oBAAqB,QAAA,GAAW,KAAA;AAC9F,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,GAAA,CAAA,UAAA,gBAA6B,oBAAqB,QAAA,GAAW,KAAA;AAAA,EAChG;AAIA,EAAAhF,QAAO,eAAA,EAAgB;AAGvB,EAAA,MAAA,CAAO,MAAM,0BAA0B,CAAA;AACvC,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,YAAA,EAAeA,OAAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAC5C,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iBAAA,EAAoBA,OAAAA,CAAO,YAAA,IAAgB,4BAA4B,CAAA,CAAE,CAAA;AACtF,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,WAAA,EAAcA,OAAAA,CAAO,MAAA,GAAS,KAAA,GAAQA,OAAAA,CAAO,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,GAAI,WAAW,CAAA,CAAE,CAAA;AAC1F,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iBAAA,EAAoBA,OAAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AACtD,EAAA,MAAA,CAAO,KAAA,CAAM,CAAA,oBAAA,EAAuBA,OAAAA,CAAO,eAAe,CAAA,CAAE,CAAA;AAG5D,EAAA,MAAM,gBAAA,GAAsC;AAAA,IAC1C,SAASA,OAAAA,CAAO,OAAA;AAAA,IAChB,QAAQA,OAAAA,CAAO,MAAA;AAAA,IACf,SAASA,OAAAA,CAAO,YAAA;AAAA,IAChB,cAAcA,OAAAA,CAAO,YAAA;AAAA,IACrB,cAAcA,OAAAA,CAAO,YAAA;AAAA,IACrB,SAASA,OAAAA,CAAO,OAAA;AAAA,IAChB,iBAAA;AAAA,IACA,4BAAA,EAA8B,CAACA,OAAAA,CAAO;AAAA,GACxC;AAIA,EAAA,IAAI,QAAA;AAEJ,EAAA,IAAI,CAAC,gBAAA,CAAiB,OAAA,IAAW,gBAAA,CAAiB,WAAW,MAAA,EAAW;AACtE,IAAA,QAAA,GAAW,IAAI,mBAAA,EAAoB;AAAA,EACrC,CAAA,MAAO;AACL,IAAA,MAAM,iBAAA,GAAoBA,QAAO,kBAAA,EAAmB;AAIpD,IAAA,QAAA,GAAW,IAAI,sBAAA,CAAuB;AAAA,MACpC,GAAA,EAAK,iBAAA;AAAA,MACL,SAASA,OAAAA,CAAO;AAAA,KACjB,CAAA;AAAA,EACH;AAMA,EAAA,MAAM,qBAAA,GAAwBA,OAAAA,CAAO,YAAA,IAAgB,EAAC;AACtD,EAAA,MAAM,2BAAA,GAA8B,IAAI,2BAAA,CAA4B,qBAAqB,CAAA;AACzF,EAAA,MAAM,gBAAA,GAAmB,QAAA;AAEzB,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,IAAI,qBAAA;AAAA,MACb,QAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA,CAA4B;AAAA,KAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,QAAA,GAAW,gBAAA;AAAA,EACb;AAEA,EAAA,gBAAA,CAAiB,QAAA,GAAW,QAAA;AAE5B,EAAA,UAAA,CAAW,gBAAgB,CAAA;AAE3B,EAAA,IAAI,kBAAkB,SAAA,EAAW;AAC/B,IAAA,sCAAA,EAAuC;AAAA,EACzC,CAAA,MAAO;AACL,IAAA,wCAAA,EAAyC;AAAA,EAC3C;AAGA,EAAA,MAAM,cAAA,GAAiBC,MAAM,iBAAA,EAAkB;AAI/C,EAAA,MAAM,iBAAA,GAAoB,uBAAA;AAAA,IACxB,cAAA;AAAA,IACAD,OAAAA;AAAA,IACA;AAAA,GACF;AAKA,EAAA,qBAAA,GAAwB,+BAAA;AAAA,IACtBA,OAAAA;AAAA,IACA,cAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,iCAAA,CAAkCA,OAAAA,EAAQ,UAAU,gBAAgB,CAAA;AAEpE,EAAA,OAAO,iBAAA;AACT;AAMA,SAAS,SAAA,CACP,YACA,gBAAA,EACS;AACT,EAAA,IAAI,CAAC,gBAAA,IAAoB,gBAAA,CAAiB,IAAA,KAAS,GAAG,OAAO,KAAA;AAC7D,EAAA,OACE,gBAAA,CAAiB,GAAA,CAAA,SAAA,WAAwB,IACzC,gBAAA,CAAiB,IAAI,UAAU,CAAA;AAEnC;AAOA,eAAe,+BAAA,CACbA,OAAAA,EACA,cAAA,EACA,uBAAA,EACA,gBAAA,EACe;AACf,EAAA,IAAI,wBAAwB,OAAA,EAAS;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,CAAsB,eAAA,CAAgB,EAAE,cAAA,EAAgB,CAAA;AAC9D,MAAA,MAAA,CAAO,MAAM,0CAA0C,CAAA;AAAA,IACzD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,0DAA0D,CAAC,CAAA;AAAA,IAC1E;AAAA,EACF;AAEA,EAAA,IAAI,wBAAwB,MAAA,EAAQ;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,kBAAA,CAAmB,UAAA,CAAW,EAAE,cAAA,EAAgB,CAAA;AACtD,MAAA,MAAA,CAAO,MAAM,uCAAuC,CAAA;AAAA,IACtD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,uDAAuD,CAAC,CAAA;AAAA,IACvE;AAAA,EACF;AAEA,EAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,CAAiB,eAAA,CAAgB,EAAE,cAAA,EAAgB,CAAA;AACzD,MAAA,MAAA,CAAO,MAAM,qCAAqC,CAAA;AAAA,IACpD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,qDAAqD,CAAC,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,IAAI,wBAAwB,WAAA,EAAa;AACvC,IAAA,IAAI;AACF,MAAA,MAAM,8BAAA,CAA+B,eAAA,CAAgB,EAAE,cAAA,EAAgB,CAAA;AACvE,MAAA,MAAA,CAAO,MAAM,6CAA6C,CAAA;AAAA,IAC5D,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,6DAA6D,CAAC,CAAA;AAAA,IAC7E;AAAA,EACF;AAEA,EAAA,IAAI,wBAAwB,SAAA,EAAW;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,CAAsB,UAAA,CAAW,EAAE,cAAA,EAAgB,CAAA;AACzD,MAAA,MAAA,CAAO,MAAM,0CAA0C,CAAA;AAAA,IACzD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,0DAA0D,CAAC,CAAA;AAAA,IAC1E;AAAA,EACF;AAEA,EAAA,IAAI,wBAAwB,SAAA,EAAW;AACrC,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,CAAsB,UAAA,CAAW,EAAE,cAAA,EAAgB,CAAA;AACzD,MAAA,MAAA,CAAO,MAAM,0CAA0C,CAAA;AAAA,IACzD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,0DAA0D,CAAC,CAAA;AAAA,IAC1E;AAAA,EACF;AAGA,EAAA,IACE,uBAAA,CAAwB,YAAA,IACxB,CAAC,gBAAA,EAAkB,wCAAkC,EACrD;AACA,IAAA,IAAI;AACF,MAAA,MAAM,wBAAA,CAAyB,UAAA,CAAW,EAAE,cAAA,EAAgB,CAAA;AAC5D,MAAA,MAAA,CAAO,MAAM,kDAAkD,CAAA;AAAA,IACjE,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,kEAAkE,CAAC,CAAA;AAAA,IAClF;AAAA,EACF;AACF;AAEA,SAAS,iCAAA,CACPA,OAAAA,EACA,QAAA,EACA,gBAAA,EACM;AAKN,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI;AACF,IAAA,IAAIA,QAAO,YAAA,EAAc;AACvB,MAAA,SAAA,GAAY,IAAI,GAAA,CAAIA,OAAAA,CAAO,YAAY,CAAA,CAAE,IAAA;AAAA,IAC3C;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,iDAAA,EAAoDA,OAAAA,CAAO,YAAY,CAAA,gCAAA,CAAkC,CAAA;AAAA,EACxH;AAIA,EAAA,MAAM,cAAA,GAAA,CAAkB,QAAQ,GAAA,CAAI,uBAAA,IAA2B,IAC5D,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,IAAI;AACF,MAAA,OAAO,IAAI,OAAO,OAAO,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,IAAIA,QAAO,SAAA,EAAW;AACpB,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,oDAAoD,OAAO,CAAA;AAAA,SAC7D;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,EAAA,KAAqB,OAAO,IAAI,CAAA;AAE3C,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAyB;AAC9C,IAAA,IAAI,SAAA,IAAa,GAAA,CAAI,QAAA,CAAS,SAAS,GAAG,OAAO,IAAA;AACjD,IAAA,OAAO,eAAe,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,IACE,CAAC,6BAAiC,gBAAgB,CAAA,KACjD,SAAS,GAAA,CAAA,MAAA,YAAyB,IAAK,QAAA,CAAS,GAAA,CAAA,SAAA,eAA4B,CAAA,EAC7E;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,mBAAA,EAAoB,GAAIgF,QAAAA,CAAQ,qCAAqC,CAAA;AAC7E,MAAA,MAAM,EAAE,wBAAA,EAAyB,GAAIA,QAAAA,CAAQ,gCAAgC,CAAA;AAC7E,MAAA,oBAAA,GAAuB,IAAI,mBAAA,CAAoB;AAAA,QAC7C,yBAAA,EAA2B,CAAC,OAAA,KAAiE;AAC3F,UAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,YAAY,EAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA,CAAA;AAC1E,UAAA,OAAO,cAAc,GAAG,CAAA;AAAA,QAC1B;AAAA,OACD,CAAA;AACD,MAAA,wBAAA,CAAyB,EAAE,gBAAA,EAAkB,CAAC,oBAAoB,GAAG,CAAA;AACrE,MAAA,IAAIhF,QAAO,SAAA,EAAW;AACpB,QAAA,MAAA,CAAO,MAAM,8BAA8B,CAAA;AAAA,MAC7C;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,uCAAuC,CAAC,CAAA;AAAA,IACvD;AAAA,EACF;AAKA,EAAA,MAAM,eACJ,CAAC,SAAA,CAAA,MAAA,aAAiC,gBAAgB,CAAA,IAClD,SAAS,GAAA,CAAA,MAAA,YAAyB;AAEpC,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,qBAAA,EAAsB,GAAIgF,QAAAA,CAAQ,uCAAuC,CAAA;AACjF,MAAA,MAAM,EAAE,wBAAA,EAAyB,GAAIA,QAAAA,CAAQ,gCAAgC,CAAA;AAE7E,MAAA,sBAAA,GAAyB,IAAI,qBAAA,CAAsB;AAAA,QACjD,iBAAA,EAAmB,CAAC,OAAA,KAAgD;AAClE,UAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,EAAG,OAAA,CAAQ,QAAQ,EAAE,CAAA,CAAA;AACxD,UAAA,OAAO,cAAc,GAAG,CAAA;AAAA,QAC1B;AAAA,OACD,CAAA;AACD,MAAA,wBAAA,CAAyB,EAAE,gBAAA,EAAkB,CAAC,sBAAsB,GAAG,CAAA;AACvE,MAAA,IAAIhF,QAAO,SAAA,EAAW;AACpB,QAAA,MAAA,CAAO,MAAM,sCAAsC,CAAA;AAAA,MACrD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,IAAIA,QAAO,SAAA,EAAW;AACpB,QAAA,MAAA,CAAO,KAAA,CAAM,+CAA+C,CAAC,CAAA;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IACE,CAAC,iCAAmC,gBAAgB,CAAA,IACpD,SAAS,GAAA,CAAA,QAAA,cAA2B,IACpC,kBAAA,CAAmB,yBAAyB,CAAA,EAC5C;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,qBAAA,EAAsB,GAAIgF,QAAAA,CAAQ,yBAAyB,CAAA;AAAA,IAErE,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,yCAAyC,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,IACE,CAAC,mCAAoC,gBAAgB,CAAA,IACrD,SAAS,GAAA,CAAA,SAAA,eAA4B,IACrC,kBAAA,CAAmB,SAAS,CAAA,EAC5B;AACA,IAAA,mBAAA,CACG,UAAA,EAAW,CACX,IAAA,CAAK,MAAM;AACV,MAAA,MAAA,CAAO,MAAM,kDAAkD,CAAA;AAAA,IACjE,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,CAAA,KAAM;AACZ,MAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,IAClD,CAAC,CAAA;AAAA,EACL;AAGA,EAAA,IACE,CAAC,SAAA,CAAA,SAAA,gBAAoC,gBAAgB,CAAA,IACrD,QAAA,CAAS,4BAA4B,EACrC;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAIA,QAAAA,CAAQ,wCAAwC,CAAA;AACnF,MAAA,MAAM,EAAE,wBAAA,EAAyB,GAAIA,QAAAA,CAAQ,gCAAgC,CAAA;AAC7E,MAAA,wBAAA,CAAyB,EAAE,gBAAA,EAAkB,CAAC,IAAI,sBAAA,EAAwB,GAAG,CAAA;AAC7E,MAAA,IAAIhF,QAAO,SAAA,EAAW;AACpB,QAAA,MAAA,CAAO,MAAM,iCAAiC,CAAA;AAAA,MAChD;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,0CAA0C,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF;AACF;AAQA,SAAS,uBAAA,CACP,cAAA,EACAA,OAAAA,EACA,mBAAA,EACqC;AACrC,EAAA,IAAI;AAGF,IAAA,IAAI,QAAA,GAAgD,IAAA;AAGpD,IAAA,MAAM,WAAA,GAAc,cAAA;AAGpB,IAAA,IACE,YAAY,SAAA,IACZ,OAAO,WAAA,CAAY,SAAA,CAAU,qBAAqB,UAAA,EAClD;AACA,MAAA,QAAA,GAAW,WAAA,CAAY,SAAA;AAAA,IACzB,CAAA,MAAA,IAES,OAAO,WAAA,CAAY,WAAA,KAAgB,UAAA,EAAY;AACtD,MAAA,MAAM,QAAA,GAAW,YAAY,WAAA,EAAY;AACzC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,OAAO,QAAA,CAAS,gBAAA,KAAqB,UAAA,EAAY;AACnD,UAAA,QAAA,GAAW,QAAA;AAAA,QACb,CAAA,MAAA,IACE,QAAA,CAAS,oBAAA,IACT,QAAA,CAAS,oBAAA,CAAqB,WAAA,CAAY,IAAA,KACxC,oBAAA,IACF,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,oBAAA,CAAqB,eAAe,CAAA,EAC3D;AAGA,UAAA,QAAA,GAAW;AAAA,YACT,gBAAA,EAAkB,CAAC,SAAA,KAA6B;AAC9C,cAAA,QAAA,CAAS,oBAAA,CAAqB,eAAA,CAAgB,IAAA,CAAK,SAAS,CAAA;AAAA,YAC9D,CAAA;AAAA,YACA,SAAA,EAAW,CAAC,IAAA,EAAc,OAAA,KAAqB;AAC7C,cAAA,OAAO,QAAA,CAAS,SAAA,CAAU,IAAA,EAAM,OAAO,CAAA;AAAA,YACzC;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAES,OAAO,WAAA,CAAY,gBAAA,KAAqB,UAAA,EAAY;AAC3D,MAAA,QAAA,GAAW,WAAA;AAAA,IACb,CAAA,MAEK;AACH,MAAA,IAAI;AAEF,QAAA,MAAM,EAAE,kBAAA,EAAmB,GAAIgF,QAAAA,CAAQ,+BAA+B,CAAA;AAAA,MAExE,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,KAAA;AAAA,QACL;AAAA,OAEF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAaA,IAAA,MAAM,2BAAA,GAA8B,IAAI,2BAAA,EAA4B;AACpE,IAAA,QAAA,CAAS,iBAAiB,2BAA2B,CAAA;AAIrD,IAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,MAAA,MAAM,sBAAsB,IAAI,6BAAA;AAAA,QAC9B;AAAA,OACF;AACA,MAAA,QAAA,CAAS,iBAAiB,mBAAmB,CAAA;AAAA,IAC/C;AAKA,IAAA,MAAM,wBAAA,GAA2B,IAAI,4BAAA,EAA6B;AAClE,IAAA,QAAA,CAAS,iBAAiB,wBAAwB,CAAA;AAGlD,IAAA,MAAM,gBAAA,GAAmB,IAAI,oBAAA,CAAqBhF,OAAAA,CAAO,WAAW,CAAA;AACpE,IAAA,QAAA,CAAS,iBAAiB,gBAAgB,CAAA;AAM1C,IAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAC5C,IAAA,QAAA,CAAS,iBAAiB,eAAe,CAAA;AAGzC,IAAA,MAAM,iBAAA,GAAoB,IAAI,+BAAA,EAAgC;AAC9D,IAAA,QAAA,CAAS,iBAAiB,iBAAiB,CAAA;AAO3C,IAAA,MAAM,iBAAA,GAAoB,IAAI,iBAAA,EAAkB;AAChD,IAAA,QAAA,CAAS,iBAAiB,iBAAiB,CAAA;AAG3C,IAAA,IAAIA,QAAO,eAAA,EAAiB;AAC1B,MAAA,MAAM,kBAAA,GAAqB,IAAI,sBAAA,EAAuB;AACtD,MAAA,QAAA,CAAS,iBAAiB,kBAAkB,CAAA;AAAA,IAC9C;AAKA,IAAA,MAAM,qBAAqB,IAAI,2BAAA;AAAA,MAC7B,MAAA,CAAO;AAAA,KACT;AACA,IAAA,QAAA,CAAS,iBAAiB,kBAAkB,CAAA;AAE5C,IAAA,MAAA,CAAO,MAAM,gDAAgD,CAAA;AAE7D,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,yCAAyC,CAAC,CAAA;AACvD,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,eAAsB,eAAA,GAAiC;AAErD,EAAA,IAAI;AACF,IAAA,IAAI,kBAAA,CAAmB,gBAAe,EAAG;AACvC,MAAA,MAAM,mBAAmB,YAAA,EAAa;AACtC,MAAA,MAAA,CAAO,MAAM,wCAAwC,CAAA;AAAA,IACvD;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,EAClD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,qBAAA,CAAsB,gBAAe,EAAG;AAC1C,MAAA,qBAAA,CAAsB,YAAA,EAAa;AACnC,MAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAAA,IAC1D;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,qCAAqC,CAAC,CAAA;AAAA,EACrD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,gBAAA,CAAiB,gBAAe,EAAG;AACrC,MAAA,gBAAA,CAAiB,YAAA,EAAa;AAC9B,MAAA,MAAA,CAAO,MAAM,sCAAsC,CAAA;AAAA,IACrD;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAAA,EAChD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,qBAAA,CAAsB,gBAAe,EAAG;AAC1C,MAAA,qBAAA,CAAsB,YAAA,EAAa;AACnC,MAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAAA,IAC1D;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,qCAAqC,CAAC,CAAA;AAAA,EACrD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,8BAAA,CAA+B,gBAAe,EAAG;AACnD,MAAA,8BAAA,CAA+B,YAAA,EAAa;AAC5C,MAAA,MAAA,CAAO,MAAM,8CAA8C,CAAA;AAAA,IAC7D;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,wCAAwC,CAAC,CAAA;AAAA,EACxD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,qBAAA,CAAsB,gBAAe,EAAG;AAC1C,MAAA,MAAM,sBAAsB,YAAA,EAAa;AACzC,MAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAAA,IAC1D;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,qCAAqC,CAAC,CAAA;AAAA,EACrD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,mBAAA,CAAoB,gBAAe,EAAG;AACxC,MAAA,mBAAA,CAAoB,YAAA,EAAa;AACjC,MAAA,MAAA,CAAO,MAAM,yCAAyC,CAAA;AAAA,IACxD;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,EACnD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,wBAAA,CAAyB,gBAAe,EAAG;AAC7C,MAAA,wBAAA,CAAyB,YAAA,EAAa;AACtC,MAAA,MAAA,CAAO,MAAM,mDAAmD,CAAA;AAAA,IAClE;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,6CAA6C,CAAC,CAAA;AAAA,EAC7D;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,oBAAA,EAAsB;AACxB,MAAA,oBAAA,CAAqB,OAAA,EAAQ;AAC7B,MAAA,oBAAA,GAAuB,IAAA;AACvB,MAAA,MAAA,CAAO,MAAM,+BAA+B,CAAA;AAAA,IAC9C;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAAA,EAChD;AAGA,EAAA,IAAI;AACF,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,sBAAA,CAAuB,OAAA,EAAQ;AAC/B,MAAA,sBAAA,GAAyB,IAAA;AACzB,MAAA,MAAA,CAAO,MAAM,uCAAuC,CAAA;AAAA,IACtD;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,CAAC,CAAA;AAAA,EAClD;AACF;;;ACt8BO,IAAe,WAAf,MAAwB;AAiB/B;;;ACZA,IAAM,UAAA,GAAa,kBAAA;AACnB,IAAM,+BAAA,GAAkC,EAAA;AACxC,IAAM,yBAAA,GAA4B,CAAA;AAElC,IAAI,4BAAA,GAA8C,IAAA;AAmB3C,SAAS,wBAAA,CACZ,WACAU,KAAAA,EACO;AACP,EAAA,IAAI,CAAC,SAAA,EAAW;AACZ,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,wBAAA,CAA0B,CAAA;AACpD,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,IAAI,EAAEA,iBAAgB,QAAA,CAAA,EAAW;AAC7B,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,kCAAA,CAAoC,CAAA;AAC9D,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA;AACX;AAWA,SAAS,uBAAA,GAAkC;AACvC,EAAA,IAAI,iCAAiC,IAAA,EAAM;AACvC,IAAA,OAAO,4BAAA;AAAA,EACX;AAEA,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,sCAAA;AAC3B,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,MAAM,MAAA,GAAS,WAAW,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,KAAA,CAAM,MAAM,CAAA,IAAK,SAAS,CAAA,EAAG;AAC9B,MAAA,4BAAA,GAA+B,MAAA,GAAS,GAAA;AACxC,MAAA,OAAO,4BAAA;AAAA,IACX;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACH,CAAA,EAAG,UAAU,CAAA,iCAAA,EAAoC,MAAM,oBAAoB,+BAA+B,CAAA,CAAA;AAAA,KAC9G;AAAA,EACJ;AACA,EAAA,4BAAA,GAA+B,+BAAA,GAAkC,GAAA;AACjE,EAAA,OAAO,4BAAA;AACX;AAaA,eAAe,mBAAA,CACX,QAAA,EACA,SAAA,EACA,MAAA,EACsB;AACtB,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,CAAI,SAAS,WAAA,EAAa;AAAA,MACnD,YAAA,EAAc,aAAA;AAAA,MACd,OAAA,EAAS,SAAA;AAAA,MACT;AAAA,KACH,CAAA;AAED,IAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,SAAS,IAAI,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC5D,IAAA,OAAO;AAAA,MACH,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,IAAA,EAAM;AAAA,KACV;AAAA,EACJ,SAAS,KAAA,EAAO;AACZ,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN,CAAA,aAAA,EAAgB,SAAS,QAAQ,CAAA,eAAA;AAAA,OACrC;AAAA,IACJ;AAEA,IAAA,MAAM,SAAS,KAAA,CAAM,YAAA,CAAa,KAAK,CAAA,GAAI,KAAA,CAAM,UAAU,MAAA,GAAS,MAAA;AACpE,IAAA,MAAM,MAAA,GAAS,MAAA,GACT,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA,GACb,iBAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAE5D,IAAA,MAAA,CAAO,KAAA;AAAA,MACH,GAAG,UAAU,CAAA,2BAAA,EAA8B,QAAA,CAAS,QAAQ,MAAM,MAAM,CAAA;AAAA,KAC5E;AAEA,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,yBAAA,EAA4B,QAAA,CAAS,QAAQ,CAAA,GAAA,EAAM,MAAM,CAAA;AAAA,KAC7D;AAAA,EACJ;AACJ;AAUO,SAAS,WACZ,QAAA,EACU;AACV,EAAA,IAAI,CAAC,QAAA,EAAU;AACX,IAAA,OAAO,EAAC;AAAA,EACZ;AAEA,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,IAAA,MAAM,WAAA,GAAc,MAAM,WAAA,IAAe,EAAA;AAEzC,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,WAAA,EAAa;AAC3B,MAAA,MAAA,CAAO,IAAA;AAAA,QACH,GAAG,UAAU,CAAA,sEAAA;AAAA,OACjB;AACA,MAAA;AAAA,IACJ;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACR,QAAA;AAAA,MACA,WAAA,EAAa,MAAM,WAAA,IAAe,EAAA;AAAA,MAClC,WAAA,EAAa,MAAM,WAAA,IAAe,MAAA;AAAA,MAClC;AAAA,KACH,CAAA;AAAA,EACL;AAEA,EAAA,OAAO,MAAA;AACX;AAcA,eAAsB,aAClB,KAAA,EAC+B;AAC/B,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,YAAY,uBAAA,EAAwB;AAC1C,EAAA,MAAM,KAAA,GAAuB,OAAO,yBAAyB,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AAEvC,EAAA,MAAM,mBAAmB,KAAA,CAAM,GAAA;AAAA,IAAI,CAAC,SAChC,KAAA,CAAM,MAAM,oBAAoB,IAAA,EAAM,SAAA,EAAW,UAAA,CAAW,MAAM,CAAC;AAAA,GACvE;AAEA,EAAA,IAAI;AACA,IAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAAA,EAC7C,SAAS,KAAA,EAAO;AACZ,IAAA,UAAA,CAAW,KAAA,EAAM;AACjB,IAAA,KAAA,CAAM,UAAA,EAAW;AACjB,IAAA,MAAM,KAAA;AAAA,EACV;AACJ;AAeA,eAAsB0E,YAAAA,CAClB1E,KAAAA,EACA,OAAA,EACA,SAAA,EACA,QAAA,EACgC;AAChC,EAAA,MAAM,cAAA,GAAiB,YAAY,QAAA,CAAS,MAAA,GAAS,IAC/C,MAAM,YAAA,CAAa,QAAQ,CAAA,GAC3B,IAAA;AAEN,EAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,GAAA,CAAI,OAAA,EAAS,WAAW,cAAc,CAAA;AAE1D,EAAA,MAAM,cAAA,GAAiB,MAAA,YAAkB,OAAA,GAAU,MAAM,MAAA,GAAS,MAAA;AAElE,EAAA,IACI,OAAO,mBAAmB,QAAA,IAC1B,cAAA,KAAmB,QACnB,SAAA,IAAa,cAAA,IACb,eAAe,cAAA,EACjB;AACE,IAAA,OAAO,CAAC,cAAA,CAAe,OAAA,EAAS,cAAA,CAAe,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACN,CAAA,iCAAA,EAAoC,OAAO,cAAc,CAAA;AAAA,GAC7D;AACJ;;;ACzOA,IAAM2E,WAAAA,GAAa,kBAAA;AACnB,IAAM,eAAA,GAAkB,GAAA;AAajB,IAAM,uBAAN,MAA2B;AAAA,EAG9B,YAAYrF,OAAAA,EAAgB;AAF5B,IAAA,IAAA,CAAQ,MAAA,GAA+B,IAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,aAAA,CAAcA,OAAM,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAcA,OAAAA,EAAsC;AACxD,IAAA,MAAM,QAAA,GAAA,CAAYA,OAAAA,CAAO,YAAA,IAAgB,EAAA,EAAI,IAAA,EAAK;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGqF,WAAU,CAAA,iCAAA,CAAmC,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAcrF,OAAM,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,KAAK,WAAA,EAAY;AAEjC,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAAWsF,MAAM,MAAA,CAAO;AAAA,QAC1B,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACH,CAAA;AAID,MAAA,QAAA,CAAS,aAAa,OAAA,CAAQ,GAAA;AAAA,QAC1B,CAACtF,OAAAA,KAAW;AACR,UAAA,MAAM,YAAA,GAAe,yBAAA,CAA0B,EAAE,CAAA;AACjD,UAAA,MAAA,CAAO,MAAA,CAAOA,OAAAA,CAAO,OAAA,EAAS,YAAY,CAAA;AAC1C,UAAA,OAAOA,OAAAA;AAAA,QACX,CAAA;AAAA,QACA,CAAC,KAAA,KAAU,OAAA,CAAQ,MAAA,CAAO,KAAK;AAAA,OACnC;AAEA,MAAA,OAAO,QAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGqF,WAAU,CAAA,+BAAA,CAAA,EAAmC,KAAK,CAAA;AAClE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,QAAA,EAA0B;AAC9C,IAAA,IAAI,OAAA,GAAU,SAAS,QAAA,CAAS,GAAG,IAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,QAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG;AAChC,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,aAAa,MAAM,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAcrF,OAAAA,EAAwC;AAC1D,IAAA,MAAM,OAAA,GAAkC,EAAE,GAAGA,OAAAA,CAAO,OAAA,EAAQ;AAC5D,IAAA,IAAIA,QAAO,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,WAAW,IAAIA,OAAAA,CAAO,MAAA;AAAA,IAClC;AACA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAsB;AAC1B,IAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,wBAAA;AAC/B,IAAA,IAAI,CAAC,UAAA,EAAY;AACb,MAAA,OAAO,eAAA;AAAA,IACX;AAEA,IAAA,MAAM,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,IAAA,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAChB,MAAA,MAAA,CAAO,IAAA;AAAA,QACH,CAAA,EAAGqF,WAAU,CAAA,mBAAA,EAAsB,UAAU,oBAAoB,eAAe,CAAA,EAAA;AAAA,OACpF;AACA,MAAA,OAAO,eAAA;AAAA,IACX;AAEA,IAAA,OAAO,OAAA,GAAU,GAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACF,IAAA,EACA,SAAA,EACA5E,SAAAA,EAC+B;AAC/B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG4E,WAAU,CAAA,wBAAA,CAA0B,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,kCAAA;AACZ,MAAA,MAAM,OAAA,GAAU;AAAA,QACZ,IAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,EAAS5E,aAAW;AAAC,OACzB;AAEA,MAAA,MAAM,WAA0B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AACnE,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAEtB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,IAAQ,EAAC;AACnC,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,YAAA,IAAgB,EAAC;AAEnD,MAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG4E,WAAU,CAAA,2CAAA,CAA6C,CAAA;AACtE,QAAA,OAAO,IAAA;AAAA,MACX;AAEA,MAAA,MAAM,KAAA,GAAQ,aAAa,EAAA,IAAM,EAAA;AACjC,MAAA,MAAM,kBAAoC,YAAA,CAAa,GAAA;AAAA,QACnD,CAAC,GAAA,MAAc;AAAA,UACX,SAAA,EAAW,IAAI,aAAA,IAAiB,EAAA;AAAA,UAChC,OAAA,EAAS,IAAI,WAAA,IAAe,EAAA;AAAA,UAC5B,MAAA,EAAQ,IAAI,MAAA,IAAU,EAAA;AAAA,UACtB,KAAA,EAAO,UAAA,CAAW,GAAA,CAAI,WAAW;AAAA,SACrC;AAAA,OACJ;AAEA,MAAA,OAAO;AAAA,QACH,KAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAChD,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,kCAAA,CAAA,EAAsC,QAAQ,CAAA;AACxE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACF,OAAA,EACA,MAAA,EACA,WACA,OAAA,EACoC;AACpC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,wBAAA,CAA0B,CAAA;AACpD,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,kCAAA;AACZ,MAAA,MAAM,OAAA,GAAU;AAAA,QACZ,MAAA;AAAA,QACA,aAAA,EAAe,EAAE,OAAA,EAAQ;AAAA,QACzB,SAAA;AAAA,QACA;AAAA,OACJ;AAEA,MAAA,MAAM,WAA0B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AACnE,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAEtB,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,IAAQ,EAAC;AACnC,MAAA,MAAM,QAAA,GAAW,aAAa,QAAA,IAAY,UAAA;AAE1C,MAAA,IAAI,aAAa,MAAA,EAAQ;AACrB,QAAA,OAAO;AAAA,UACH,QAAA;AAAA,UACA,MAAA,EAAQ,aAAa,MAAA,IAAU;AAAA,SACnC;AAAA,MACJ;AAEA,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,YAAA,IAAgB,EAAC;AACnD,MAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGA,WAAU,CAAA,uCAAA,CAAyC,CAAA;AAClE,QAAA,OAAO,IAAA;AAAA,MACX;AAEA,MAAA,MAAM,OAAA,GAAU,aAAa,CAAC,CAAA;AAC9B,MAAA,OAAO;AAAA,QACH,QAAA;AAAA,QACA,UAAA,EAAY,QAAQ,MAAA,IAAU,EAAA;AAAA,QAC9B,eAAA,EAAiB,QAAQ,WAAA,IAAe,EAAA;AAAA,QACxC,aAAA,EAAe,QAAQ,aAAA,IAAiB,EAAA;AAAA,QACxC,SAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,WAAW;AAAA,OAC7C;AAAA,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAChD,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,iCAAA,CAAA,EAAqC,QAAQ,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,KAAA,EAAe,SAAA,EAAmB,KAAA,EAA8B;AAChF,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,wBAAA,CAA0B,CAAA;AACpD,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,CAAA,iBAAA,EAAoB,KAAK,CAAA,MAAA,EAAS,SAAS,CAAA,OAAA,CAAA;AACvD,MAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAQ,QAAA,EAAU,eAAe,KAAA,EAAM;AACzD,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK,OAAO,CAAA;AACpC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGA,WAAU,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5D,SAAS,GAAA,EAAK;AACV,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,GAAG,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,2BAAA,CAAA,EAA+B,QAAQ,CAAA;AAAA,IACrE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,KAAA,EAAe,MAAA,EAA8B;AAC7D,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AACd,MAAA,MAAA,CAAO,KAAA;AAAA,QACH,GAAGA,WAAU,CAAA,gDAAA;AAAA,OACjB;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC5B;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,oBAAoB,KAAK,CAAA,OAAA,CAAA;AACrC,MAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAO;AACzB,MAAA,MAAM,WAA0B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AACnE,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AAEtB,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,EAAM;AACpD,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGA,WAAU,CAAA,iCAAA,CAAmC,CAAA;AAC5D,QAAA,OAAO,IAAA,CAAK,QAAQ,EAAC;AAAA,MACzB;AACA,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAChD,MAAA,MAAA,CAAO,KAAA;AAAA,QACH,CAAA,EAAGA,WAAU,CAAA,qCAAA,EAAwC,KAAK,CAAA,EAAA,CAAA;AAAA,QAC1D;AAAA,OACJ;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC5B;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,KAAA,EAAoB;AAC7C,IAAA,IAAIC,KAAAA,CAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAC3B,MAAA,MAAM,UAAA,GAAa,KAAA;AACnB,MAAA,IAAI,UAAA,CAAW,UAAU,IAAA,EAAM;AAC3B,QAAA,MAAM,YAAA,GAAe,WAAW,QAAA,CAAS,IAAA;AACzC,QAAA,IACI,OAAO,iBAAiB,QAAA,IACxB,YAAA,CAAa,SACb,OAAO,YAAA,CAAa,UAAU,QAAA,EAChC;AACE,UAAA,OAAO,YAAA,CAAa,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA;AAAA,QAC/C;AAAA,MACJ;AACA,MAAA,OAAO,UAAA,CAAW,OAAA;AAAA,IACtB;AACA,IAAA,OAAO,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAAA,EACzC;AACJ,CAAA;;;ACjRA,IAAMD,WAAAA,GAAa,kBAAA;AACnB,IAAM,SAAA,GAAY,0BAAA;AAcX,IAAM,aAAN,MAAiB;AAAA,EAIpB,YAAYrF,OAAAA,EAAgB;AACxB,IAAA,IAAA,CAAK,OAAA,GAAUA,OAAAA;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,oBAAA,CAAqBA,OAAM,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACF,OAAA,EACgC;AAChC,IAAA,MAAM;AAAA,MACF,IAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAAU,KAAAA;AAAA,MACA,OAAA,EAAAD,SAAAA;AAAA,MACA,cAAA,GAAiB;AAAA,KACrB,GAAI,OAAA;AAEJ,IAAA,IAAI,CAAC,wBAAA,CAAyB,SAAA,EAAWC,KAAI,CAAA,EAAG;AAC5C,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA,EAAM,WAAWD,SAAO,CAAA;AACvE,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,GAAI,SAAA;AACnC,IAAA,IAAI,CAAC,eAAA,IAAmB,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG4E,WAAU,CAAA,mCAAA,CAAqC,CAAA;AAC/D,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,WAAA,GAAc,KAAA;AAClB,IAAA,MAAM,IAAA,GAAO,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,GAAU,MAAA;AACxD,IAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,KAA4B;AACjD,MAAA,IAAI,WAAA,EAAa;AACb,QAAA;AAAA,MACJ;AACA,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,IAAA,EAAM,cAAA,CAAe,UAAU,YAAY,CAAA;AAC3C,MAAA,IAAA,EAAM,cAAA,CAAe,WAAW,YAAY,CAAA;AAC5C,MAAA,IAAA,EAAM,cAAA,CAAe,qBAAqB,eAAe,CAAA;AACzD,MAAA,IAAA,EAAM,cAAA,CAAe,sBAAsB,eAAe,CAAA;AAC1D,MAAA,KAAK,KAAK,OAAA,CAAQ,aAAA,CAAc,OAAO,QAAQ,CAAA,CAAE,QAAQ,MAAM;AAC3D,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAAA,QAC/B;AAAA,MACJ,CAAC,CAAA;AAAA,IACL,CAAA;AACA,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAiC;AACnD,MAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IAC1B,CAAA;AACA,IAAA,MAAM,kBAAkB,MAAM;AAC1B,MAAA,eAAA,EAAgB;AAAA,IACpB,CAAA;AACA,IAAA,MAAM,kBAAkB,MAAM;AAC1B,MAAA,eAAA,EAAgB;AAAA,IACpB,CAAA;AACA,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,CAAK,IAAA,KAAS,UAAA,EAAY;AACzC,MAAA,IAAA,CAAK,IAAA,CAAK,UAAU,YAAY,CAAA;AAChC,MAAA,IAAA,CAAK,IAAA,CAAK,WAAW,YAAY,CAAA;AACjC,MAAA,IAAA,CAAK,IAAA,CAAK,qBAAqB,eAAe,CAAA;AAC9C,MAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,eAAe,CAAA;AAAA,IACnD;AAEA,IAAA,MAAA,CAAO,IAAA;AAAA,MACH,CAAA,EAAGA,WAAU,CAAA,2BAAA,EAA8B,eAAA,CAAgB,MAAM,CAAA,MAAA;AAAA,KACrE;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,mBAAA;AAAA,QACtB,KAAA;AAAA,QACA,eAAA;AAAA,QACA3E,KAAAA;AAAA,QACA;AAAA,OACJ;AAEA,MAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,KAAQ,SAAA,IAAa,GAAA,EAAM,QAAQ,CAAC,CAAA;AAC/D,MAAA,MAAA,CAAO,IAAA;AAAA,QACH,CAAA,EAAG2E,WAAU,CAAA,0BAAA,EAA6B,WAAW,CAAA,QAAA;AAAA,OACzD;AAEA,MAAA,OAAO,MAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,WAAU,CAAA,uBAAA,CAAyB,CAAA;AACnD,MAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAA;AAChD,MAAA,MAAM,KAAA;AAAA,IACV,CAAA,SAAE;AACE,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,CAAK,cAAA,KAAmB,UAAA,EAAY;AACnD,QAAA,IAAA,CAAK,cAAA,CAAe,UAAU,YAAY,CAAA;AAC1C,QAAA,IAAA,CAAK,cAAA,CAAe,WAAW,YAAY,CAAA;AAC3C,QAAA,IAAA,CAAK,cAAA,CAAe,qBAAqB,eAAe,CAAA;AACxD,QAAA,IAAA,CAAK,cAAA,CAAe,sBAAsB,eAAe,CAAA;AAAA,MAC7D;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,CACV,KAAA,EACA,QAAA,EACA3E,OACA,cAAA,EACyB;AACzB,IAAA,MAAM,OAAA,GAA4B;AAAA,MAC9B,OAAA,EAAS,IAAA;AAAA,MACT,WAAW,EAAC;AAAA,MACZ,QAAQ,EAAC;AAAA,MACT,YAAY,QAAA,CAAS;AAAA,KACzB;AAEA,IAAA,IAAI,cAAA,GAAiB,CAAA;AAGrB,IAAA,MAAM,QAAQ6E,MAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAC,CAAA;AAGhD,IAAA,MAAM,WAAW,QAAA,CAAS,GAAA;AAAA,MAAI,CAAC,OAAA,KAC3B,KAAA,CAAM,YAAY;AACd,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,oBAAA,CAAqB,KAAA,EAAO,SAAS7E,KAAI,CAAA;AAEnE,QAAA,IAAI,OAAO,OAAA,EAAS;AAChB,UAAA,OAAA,CAAQ,SAAA,CAAU,KAAK,MAAM,CAAA;AAAA,QACjC,CAAA,MAAO;AACH,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,QAC9B;AAEA,QAAA,cAAA,EAAA;AACA,QAAA,MAAA,CAAO,IAAA;AAAA,UACH,CAAA,EAAG2E,WAAU,CAAA,EAAA,EAAK,cAAc,IAAI,QAAA,CAAS,MAAM,CAAA,wBAAA,EAA2B,OAAA,CAAQ,SAAS,CAAA,CAAA;AAAA,SACnG;AAEA,QAAA,OAAO,MAAA;AAAA,MACX,CAAC;AAAA,KACL;AAEA,IAAA,MAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAE1B,IAAA,MAAA,CAAO,IAAA;AAAA,MACH,CAAA,EAAGA,WAAU,CAAA,YAAA,EAAe,OAAA,CAAQ,UAAU,MAAM,CAAA,SAAA,EAAY,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAAA,KACzF;AAEA,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,WAAW,CAAA;AAEnD,IAAA,OAAO,OAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAA,CACV,KAAA,EACA,OAAA,EACA3E,KAAAA,EAC2B;AAC3B,IAAA,MAAM,EAAE,WAAW,OAAA,EAAS,cAAA,EAAgB,QAAQ,aAAA,EAAe,KAAA,EAAO,cAAa,GAAI,OAAA;AAC3F,IAAA,IAAI,OAAA,GAAU,cAAA;AACd,IAAA,IAAI,MAAA,GAAS,aAAA;AACb,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,IAAI,QAAA,GAAuB,gBAAgB,EAAC;AAE5C,IAAA,OAAO,IAAA,EAAM;AACT,MAAA,MAAMR,QAAO,IAAI,WAAA,CAAY,SAAA,EAAW,IAAImF,WAAU,CAAA;AACtD,MAAAnF,MAAK,KAAA,EAAM;AAEX,MAAA,IAAI;AACA,QAAA,MAAM,UAAUA,KAAAA,CAAK,cAAA,EAAe,EAAG,WAAA,GAAc,OAAA,IAAW,EAAA;AAEhE,QAAA,MAAM,CAAC,eAAA,EAAiB,aAAa,CAAA,GAAI,MAAMA,KAAAA,CAAK,UAAA;AAAA,UAChD,MAAMkF,YAAAA,CAAY1E,KAAAA,EAAM,OAAA,EAAS,WAAW,QAAQ;AAAA,SACxD;AAEA,QAAA,IAAI,aAAA,EAAe;AACf,UAAA,SAAA,GAAY,aAAA;AAAA,QAChB;AAIA,QAAA,MAAM,QAAA,GAAW,MAAMR,KAAAA,CAAK,UAAA;AAAA,UAAW,MACnC,KAAK,OAAA,CAAQ,mBAAA;AAAA,YACT,eAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA,IAAa,EAAA;AAAA,YACb;AAAA;AACJ,SACJ;AAEA,QAAA,IAAI,aAAa,IAAA,EAAM;AACnB,UAAA,MAAM,QAAA,GAAW,qCAAA;AACjB,UAAA,OAAO;AAAA,YACH,SAAA;AAAA,YACA,OAAA,EAAS,KAAA;AAAA,YACT,KAAA,EAAO,QAAA;AAAA,YACP;AAAA,WACJ;AAAA,QACJ;AAEA,QAAA,IAAI,QAAA,CAAS,aAAa,MAAA,EAAQ;AAC9B,UAAA,MAAA,CAAO,IAAA;AAAA,YACH,GAAGmF,WAAU,CAAA,wBAAA,EAA2B,SAAS,CAAA,QAAA,EAAW,SAAS,MAAM,CAAA;AAAA,WAC/E;AACA,UAAA,OAAO;AAAA,YACH,SAAA;AAAA,YACA,OAAA,EAAS,IAAA;AAAA,YACT,WAAA,EAAa;AAAA,WACjB;AAAA,QACJ;AAEA,QAAA,OAAA,GAAU,QAAA,CAAS,eAAA;AACnB,QAAA,MAAA,GAAS,QAAA,CAAS,UAAA;AAClB,QAAA,QAAA,GAAW,QAAA,CAAS,aAAa,EAAC;AAAA,MACtC,SAAS,KAAA,EAAO;AACZ,QAAA,MAAM,WAAW,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACtE,QAAA,MAAA,CAAO,KAAA;AAAA,UACH,GAAGA,WAAU,CAAA,0BAAA,EAA6B,SAAS,CAAA,UAAA,EAAa,MAAM,KAAK,QAAQ,CAAA;AAAA,SACvF;AACA,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,WAAW,QAAQ,CAAA;AAC3D,QAAA,OAAO;AAAA,UACH,SAAA;AAAA,UACA,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO,QAAA;AAAA,UACP;AAAA,SACJ;AAAA,MACJ,CAAA,SAAE;AACE,QAAAnF,MAAK,GAAA,EAAI;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AACJ;AC9QO,IAAMsF,WAAN,MAAa;AAAA,EAGlB,WAAA,CAAY,KAAa,iBAAA,EAAyB;AAChD,IAAA,IAAI,iBAAA,IAAqB,OAAO,iBAAA,CAAkB,SAAA,KAAc,UAAA,EAAY;AAC1E,MAAA,IAAA,CAAK,SAAS,iBAAA,CAAkB,SAAA,CAAU,MAAA,CAAO,YAAA,EAAc,OAAO,eAAe,CAAA;AAAA,IACvF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAASvF,KAAAA,CAAM,SAAA,CAAU,MAAA,CAAO,YAAA,EAAc,OAAO,eAAe,CAAA;AAAA,IAC3E;AAAA,EACF;AACF,CAAA;ACeA,SAAS,cAAcC,KAAAA,EAAqB;AAC1C,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,KAAA,IAAS,CAAC,YAAA,EAAc,aAAa,CAAA,EAAG;AACjD,MAAA,MAAM,KAAA,GAASA,MAAa,KAAK,CAAA;AACjC,MAAA,IAAI,SAAS,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,QAAQ,GAAG,OAAO,IAAA;AAAA,IACpE;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,MAAA,CAAO,IAAA,CAAK,oDAAoD,CAAC,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CAAmBA,KAAAA,EAAY,IAAA,EAAa,UAAA,EAA0B;AAC7E,EAAAA,MAAK,YAAA,CAAa,CAAA,EAAG,MAAA,CAAO,YAAY,gBAAgB,UAAU,CAAA;AAClE,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAAA,MAAK,YAAA,CAAa,OAAA,EAAS,cAAc,IAAA,EAAM,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,EAC1E;AACF;AAEA,SAAS,mBAAA,CAAoBA,OAAY,MAAA,EAAmB;AAE1D,EAAA,IAAI,aAAA,CAAcA,KAAI,CAAA,EAAG;AACzB,EAAA,IAAI;AACF,IAAAA,MAAK,YAAA,CAAa,QAAA,EAAU,eAAe,MAAA,EAAQ,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,EAC9E,SAAS,CAAA,EAAG;AACV,IAAAA,KAAAA,CAAK,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EAC7C;AACF;AAEA,SAAS,mBAAmB,KAAA,EAAmC;AAC7D,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,EAAA,OACE,aAAa,IAAA,IACb,OAAO,SAAA,KAAc,QAAA,IACrB,UAAU,WAAA,KAAgB,KAAA;AAE9B;AAEA,SAAS,qBAAA,CACP,IAAA,EACA,UAAA,EACA,IAAA,EACA,MAAA,GAAA,MAAA,aACG;AACH,EAAA,MAAM,UAAA,GAAa,KAAK,IAAA,IAAQ,SAAA;AAChC,EAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,WAAA;AACtC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,KAAS,eAAA;AAE1C,EAAA,MAAM,QAAA,GAAW,CAACA,KAAAA,KAAqB;AACrC,IAAAA,KAAAA,CAAK,YAAA,CAAa,iBAAA,EAAmB,MAAM,CAAA;AAC3C,IAAA,cAAA,CAAe,YAAA,CAAa,UAAUA,KAAI,CAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAACA,KAAAA,EAAY,CAAA,KAAW;AAC1C,IAAAA,KAAAA,CAAK,aAAa,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,aAAA,CAAA,EAAiB,MAAA,CAAO,CAAC,CAAC,CAAA;AAClE,IAAAA,MAAK,SAAA,CAAU;AAAA,MACb,MAAMyB,cAAAA,CAAe,KAAA;AAAA,MACrB,SAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC;AAAA,KACnD,CAAA;AACD,IAAAzB,KAAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAACA,KAAAA,KAAe;AAC9B,IAAAA,MAAK,GAAA,EAAI;AACT,IAAA,cAAA,CAAe,cAAA,CAAe,UAAUA,KAAI,CAAA;AAC5C,IAAA,cAAA,CAAe,UAAU,UAAU,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,GACd,eAAA,GAA8B,IAAA,EAAa;AACzC,IAAA,cAAA,CAAe,UAAA,CAAW,YAAY,QAAQ,CAAA;AAC9C,IAAA,MAAM,MAAA,GAASD,KAAAA,CAAM,SAAA,CAAU,UAAU,CAAA;AACzC,IAAA,OAAO,MAAA,CAAO,eAAA,CAAgB,QAAA,EAAU,OAAOC,KAAAA,KAAS;AACtD,MAAA,IAAI;AACF,QAAA,QAAA,CAASA,KAAI,CAAA;AACb,QAAA,kBAAA,CAAmBA,KAAAA,EAAM,MAAM,UAAU,CAAA;AACzC,QAAA,MAAM,SAAS,MAAO,IAAA,CAAuB,IAAA,CAAK,IAAA,EAAM,GAAG,IAAI,CAAA;AAC/D,QAAA,MAAM,UAAUD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAUP,KAAI,CAAA;AACpD,QAAA,OAAO,aAAa,MAAA,EAAQ;AAAA,UAC1B,aAAa,CAAC,EAAA,KAAOO,OAAAA,CAAQ,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,UAC7C,OAAA,EAAS,CAAC,CAAA,KAAM,WAAA,CAAYP,OAAM,CAAC,CAAA;AAAA,UACnC,SAAA,EAAW,CAAC,KAAA,KAAU,mBAAA,CAAoBA,OAAM,KAAK,CAAA;AAAA,UACrD,QAAA,EAAU,MAAM,OAAA,CAAQA,KAAI;AAAA,SAC7B,CAAA;AAAA,MACH,SAAS,CAAA,EAAQ;AACf,QAAA,WAAA,CAAYA,OAAM,CAAC,CAAA;AACnB,QAAA,OAAA,CAAQA,KAAI,CAAA;AACZ,QAAA,MAAM,CAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,GACA,YAAwB,IAAA,EAAa;AACnC,IAAA,cAAA,CAAe,UAAA,CAAW,YAAY,QAAQ,CAAA;AAC9C,IAAA,MAAM,MAAA,GAASD,KAAAA,CAAM,SAAA,CAAU,UAAU,CAAA;AACzC,IAAA,OAAO,MAAA,CAAO,eAAA,CAAgB,QAAA,EAAU,CAACC,KAAAA,KAAS;AAChD,MAAA,IAAI;AACF,QAAA,QAAA,CAASA,KAAI,CAAA;AACb,QAAA,kBAAA,CAAmBA,KAAAA,EAAM,MAAM,UAAU,CAAA;AACzC,QAAA,MAAM,MAAA,GAAU,IAAA,CAAqB,IAAA,CAAK,IAAA,EAAM,GAAG,IAAI,CAAA;AACvD,QAAA,MAAM,UAAUD,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,MAAA,IAAUP,KAAI,CAAA;AACpD,QAAA,OAAO,aAAa,MAAA,EAAQ;AAAA,UAC1B,aAAa,CAAC,EAAA,KAAOO,OAAAA,CAAQ,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,UAC7C,OAAA,EAAS,CAAC,CAAA,KAAM,WAAA,CAAYP,OAAM,CAAC,CAAA;AAAA,UACnC,SAAA,EAAW,CAAC,KAAA,KAAU,mBAAA,CAAoBA,OAAM,KAAK,CAAA;AAAA,UACrD,QAAA,EAAU,MAAM,OAAA,CAAQA,KAAI;AAAA,SAC7B,CAAA;AAAA,MACH,SAAS,CAAA,EAAQ;AACf,QAAA,WAAA,CAAYA,OAAM,CAAC,CAAA;AACnB,QAAA,OAAA,CAAQA,KAAI,CAAA;AACZ,QAAA,MAAM,CAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACJ,EAAA,OAAO,SAAA;AACT;AAEA,IAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,kBAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACA,MAAA,GAAA,MAAA,aACM;AACN,EAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,IAAA;AAE9B,EAAA,KAAA,MAAW,UAAA,IAAc,MAAA,CAAO,mBAAA,CAAoB,GAAA,CAAI,SAAS,CAAA,EAAG;AAClE,IAAA,IAAI,eAAe,aAAA,EAAe;AAClC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,wBAAA,CAAyB,GAAA,CAAI,WAAW,UAAU,CAAA;AACtE,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAU,UAAA,EAAY;AAC/C,IAAA,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,GAAI,qBAAA;AAAA,MAC1B,IAAA,CAAK,KAAA;AAAA,MACL,UAAA;AAAA,MACA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,MAC1B;AAAA,KACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,UAAA,IAAc,MAAA,CAAO,mBAAA,CAAoB,GAAG,CAAA,EAAG;AACxD,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,UAAU,CAAA,EAAG;AACvC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,wBAAA,CAAyB,GAAA,EAAK,UAAU,CAAA;AAC5D,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAU,UAAA,EAAY;AAC/C,IAAC,GAAA,CAAY,UAAU,CAAA,GAAI,qBAAA;AAAA,MACzB,IAAA,CAAK,KAAA;AAAA,MACL,UAAA;AAAA,MACA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,MAC1B;AAAA,KACF;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,CACP,UAAA,EACA,QAAA,EACA,eAAA,EACA,OAAA,EAC2C;AAC3C,EAAA,IAAI,kBAAA,CAAmB,eAAe,CAAA,EAAG;AACvC,IAAA,kBAAA,CAAmB,eAAA,EAAiB,UAAA,EAAY,OAAA,EAAS,IAAA,EAAM,QAAQ,CAAA;AACvE,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,IAAA,OAAO,qBAAA;AAAA,MACL,eAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,eAAA;AACb,EAAA,OAAO,SACL,MAAA,EACA,IAAA,EACA,UAAA,EACM;AACN,IAAA,IAAI,UAAA,EAAY;AAEd,MAAA,UAAA,CAAW,KAAA,GAAQ,qBAAA;AAAA,QACjB,UAAA,CAAW,KAAA;AAAA,QACX,UAAA;AAAA,QACA,IAAA,EAAM,IAAA;AAAA,QACN;AAAA,OACF;AACA,MAAA;AAAA,IACF,CAAA,MAAA,IAAW,kBAAA,CAAmB,MAAM,CAAA,EAAG;AACrC,MAAA,kBAAA,CAAmB,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAC3D,MAAA;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAKO,SAAS,QAAA,CACd,iBACA,OAAA,EAC6B;AAC7B,EAAA,OAAO,gBAAA;AAAA,IACL,UAAA;AAAA,IAAA,MAAA;AAAA,IAEA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,KAAA,CACd,iBACA,OAAA,EAC6B;AAC7B,EAAA,OAAO,gBAAA,CAAiB,OAAA,EAAA,OAAA,cAAyB,eAAA,EAAiB,OAAO,CAAA;AAI3E;AAKO,SAAS,IAAA,CACd,iBACA,OAAA,EAC6B;AAC7B,EAAA,OAAO,gBAAA,CAAiB,MAAA,EAAA,MAAA,aAAuB,eAAA,EAAiB,OAAO,CAAA;AAIzE;AAKO,SAAS,IAAA,CACd,iBACA,OAAA,EAC6B;AAC7B,EAAA,MAAM,YACH,OAAO,eAAA,KAAoB,UAAA,GACvB,eAAA,EAAsC,SACvC,OAAA,EAAS,MAAA,KAAA,MAAA;AACf,EAAA,OAAO,gBAAA,CAAiB,MAAA,EAAQ,QAAA,EAAU,eAAA,EAAiB,OAAO,CAAA;AAIpE;;;AC9JO,IAAM,QAAN,MAAY;AAAA,EAejB,OAAO,SAAA,GAAoB;AACzB,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AACA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,OAAO,aAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,aAAa,IAAA,CAAKF,OAAAA,GAAsB,EAAC,EAAkB;AACzD,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,MAAA,CAAO,KAAK,gEAAgE,CAAA;AAC5E,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,IAAI,MAAA,CAAOA,OAAM,CAAA;AAC7B,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AAGf,IAAA,MAAA,CAAO,YAAA,CAAa,IAAI,SAAS,CAAA;AAGjC,IAAA,MAAM,iBAAA,GAAoB,oBAAA;AAAA,MACxB,GAAA;AAAA,MACAA,OAAAA,CAAO,WAAA;AAAA,MACPA,OAAAA,CAAO,gBAAA;AAAA,MACPA,OAAAA,CAAO;AAAA,KACT;AAGA,IAAA,MAAM,MAAA,GAAS,IAAIwF,QAAAA,CAAO,GAAA,EAAK,iBAAiB,CAAA;AAChD,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AAEtB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,KAAA,CAAM,GAAG,CAAA;AAAA,IAC5B,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,6CAA6C,CAAC,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,GAAG,CAAA;AAAA,IACtC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,kDAAkD,CAAC,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,SAAA,CAAU,GAAG,CAAA;AAAA,IACpC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,iDAAiD,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,GAAG,CAAA;AAAA,IACtC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,kDAAkD,CAAC,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,OAAA,GAAU,IAAI,OAAA,CAAQ,GAAG,CAAA;AAAA,IAChC,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,IAAA,CAAK,+CAA+C,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,MAAA,CAAO,KAAK,iCAAiC,CAAA;AAE7C,IAAA;AACE,MAAA,IAAI,aAAa,MAAA,CAAO,eAAA;AACxB,MAAA,IAAI,OAAA,GAAU,SAAA;AACd,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAMpD,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,QAAA,OAAA,GAAU,GAAA,CAAI,QAAQ,iBAAiB,CAAA;AACvC,QAAA,MAAM,GAAA,GAAM,IAAI,iBAAiB,CAAA;AACjC,QAAA,UAAA,GAAa,KAAK,OAAA,IAAW,UAAA;AAAA,MAC/B,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAA,CAAO,KAAA;AAAA,QACL,eAAe,UAAU,CAAA,gBAAA,EAAmB,MAAA,CAAO,eAAe,6CAA6C,OAAO,CAAA;AAAA,OACxH;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,OAAO,MAAA,KAAmB;AAC7C,MAAA,MAAA,CAAO,GAAA,CAAI;AAAA,SAAA,EAAc,MAAM,CAAA,4BAAA,CAA8B,CAAA;AAC7D,MAAA,MAAM,KAAK,QAAA,EAAS;AACpB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA;AAEA,IAAA,MAAM,uBAAA,GAA0B,OAAO,KAAA,KAAiB;AACtD,MAAA,MAAA,CAAO,KAAA,CAAM,uBAAuB,KAAK,CAAA;AACzC,MAAA,MAAA,CAAO,MAAM,yCAAyC,CAAA;AACtD,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,QAAA,EAAS;AAAA,MACtB,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,CAAO,KAAA,CAAM,gCAAgC,GAAG,CAAA;AAAA,MAClD;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA;AAGA,IAAA,OAAA,CAAQ,IAAA,CAAK,cAAc,YAAY;AAGrC,MAAA,MAAM,KAAK,QAAA,EAAS;AAAA,IACtB,CAAC,CAAA;AAGD,IAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,YAAA,CAAa,QAAQ,CAAC,CAAA;AACnD,IAAA,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,MAAM,YAAA,CAAa,SAAS,CAAC,CAAA;AAGrD,IAAA,OAAA,CAAQ,IAAA,CAAK,qBAAqB,uBAAuB,CAAA;AAGzD,IAAA,IAAI,IAAI,cAAA,EAAgB;AAEtB,MAAA,MAAMqD,OAAAA,GAAS,IAAA,CAAK,OAAA,IAAWxF,KAAAA,CAAM,UAAU,iBAAiB,CAAA;AAChE,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,UAAA,CAAA;AAGvC,MAAA,IAAA,CAAK,SAAA,GAAYwF,OAAAA,CAAO,SAAA,CAAU,QAAA,EAAU;AAAA,QAC1C,MAAM5E,QAAAA,CAAS;AAAA,OAChB,CAAA;AAED,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,IAAI,IAAI,OAAA,EAAS;AACf,UAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,cAAA,EAAgB,GAAA,CAAI,OAAO,CAAA;AAAA,QACzD;AACA,QAAA,IAAA,CAAK,SAAA,CAAU,YAAA,CAAa,mBAAA,EAAqB,GAAA,CAAI,WAAW,CAAA;AAChE,QAAA,IAAA,CAAK,SAAA,CAAU,YAAA;AAAA,UACb,uBAAA;AAAA,UACA,MAAA,CAAO;AAAA,SACT;AAEA,QAAA,MAAA,CAAO,IAAA;AAAA,UACL;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,qBAAA;AAAA,EACR;AAAA,EAEA,aAAa,QAAA,GAA0B;AACrC,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,eAAA,EAAgB;AAAA,IACxB,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,UAAU,GAAA,EAAI;AAAA,MACrB,SAAS,CAAA,EAAG;AAAA,MACZ,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,MAAM,gBAAA,GAAmB,GAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgBZ,MAAM,iBAAA,EAAkB;AAC9C,MAAA,MAAM,gBAAgB,YAAY;AAChC,QAAA,IACE,YAAA,IAAgB,aAAA,IAChB,OAAO,aAAA,CAAc,eAAe,UAAA,EACpC;AACA,UAAA,MAAM,cAAc,UAAA,EAAW;AAAA,QACjC;AACA,QAAA,IACE,UAAA,IAAc,aAAA,IACd,OAAO,aAAA,CAAc,aAAa,UAAA,EAClC;AACA,UAAA,MAAM,cAAc,QAAA,EAAS;AAAA,QAC/B;AAAA,MACF,CAAA,GAAG;AAEH,MAAA,MAAM,QAAQ,IAAA,CAAK;AAAA,QACjB,YAAA;AAAA,QACA,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,gBAAgB,CAAC;AAAA,OAC/D,CAAA;AAAA,IACH,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,IACtD;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA,EAEA,OAAO,UAAA,GAAiC;AACtC,IAAA,OAAO,eAAe,UAAA,EAAW;AAAA,EACnC;AAAA,EAEA,OAAO,SAAS,KAAA,EAAkB;AAChC,IAAA,cAAA,CAAe,SAAS,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,OAAO,UAAU,KAAA,EAAkB;AACjC,IAAA,cAAA,CAAe,UAAU,KAAK,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,aAAa,KAAA,EAAkB;AACpC,IAAA,cAAA,CAAe,aAAa,KAAK,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,cAAc,KAAA,EAAkB;AACrC,IAAA,cAAA,CAAe,cAAc,KAAK,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,gBAAmB,EAAA,EAAgB;AACxC,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL;AAAA,OACF;AACA,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AACA,IAAA,OAAOQ,OAAAA,CAAQ,IAAA,CAAKR,KAAAA,CAAM,OAAA,CAAQQ,OAAAA,CAAQ,QAAO,EAAG,IAAA,CAAK,SAAS,CAAA,EAAG,EAAE,CAAA;AAAA,EACzE;AAAA,EAEA,OAAO,aAAa,SAAA,EAAyB;AAC3C,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,8CAAA,EAAiD,OAAO,SAAS,CAAA,CAAE,CAAA;AAChF,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,iBAAA,CAAkB,cAAc,SAAS,CAAA;AACzC,MAAA,cAAA,CAAe,wBAAA;AAAA,QACb,CAAA,EAAG,OAAO,YAAY,CAAA,WAAA,CAAA;AAAA,QACtB;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,mEAAmE,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,UAAU,MAAA,EAAsB;AACrC,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,wCAAA,EAA2C,OAAO,MAAM,CAAA,CAAE,CAAA;AACvE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,iBAAA,CAAkB,WAAW,MAAM,CAAA;AACnC,MAAA,cAAA,CAAe,wBAAA;AAAA,QACb,CAAA,EAAG,OAAO,YAAY,CAAA,QAAA,CAAA;AAAA,QACtB;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,0DAA0D,CAAA;AAAA,IACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,YAAY,QAAA,EAAwB;AACzC,IAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,4CAAA,EAA+C,OAAO,QAAQ,CAAA,CAAE,CAAA;AAC7E,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,iBAAA,CAAkB,aAAa,QAAQ,CAAA;AACvC,MAAA,cAAA,CAAe,wBAAA;AAAA,QACb,CAAA,EAAG,OAAO,YAAY,CAAA,UAAA,CAAA;AAAA,QACtB;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,gEAAgE,CAAA;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAA,CAAoB,GAAA,EAAa,KAAA,EAAkB;AACxD,IAAA,IAAI,GAAA,IAAO,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAChD,MAAA,cAAA,CAAe,wBAAA;AAAA,QACb,CAAA,EAAG,MAAA,CAAO,YAAY,CAAA,QAAA,EAAW,GAAG,CAAA,CAAA;AAAA,QACpC;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,4DAA4D,CAAA;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAA,CACL,SAAA,EACA,UAAA,EACM;AACN,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,cAAA,CAAe,cAAA,CAAe,WAAW,UAAU,CAAA;AAAA,IACrD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,mEAAmE,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAA,CACL,gBAAA,EACA,IAAA,EACA,OAAA,EACM;AACN,IAAA,cAAA,CAAe,eAAA,CAAgB,gBAAA,EAAkB,IAAA,EAAM,OAAO,CAAA;AAAA,EAChE;AAAA,EAIA,OAAO,SAAA,CAAU,IAAA,EAAc,OAAA,EAAoC;AACjE,IAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,EAAC;AAC3C,IAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,IAAA,CAAK,SAAA;AAC/C,IAAA,MAAM,WAAW,OAAA,EAAS,MAAA,IAAA,MAAA;AAE1B,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,IAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,OAAA;AAAA,MACL,OAAA,EAAS;AAAA,MACT,KAAA,EAAM;AAAA,EACV;AAAA,EAIA,OAAO,eAAA,CACL,IAAA,EACA,WAAA,EACA,EAAA,EACG;AACH,IAAA,IAAI,aAA6B,EAAC;AAClC,IAAA,IAAI,aAAa,IAAA,CAAK,SAAA;AACtB,IAAA,IAAI,QAAA,GAAA,MAAA;AACJ,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,OAAO,gBAAgB,UAAA,EAAY;AACrC,MAAA,QAAA,GAAW,WAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,UAAA,GAAa,WAAA,CAAY,cAAc,EAAC;AACxC,MAAA,UAAA,GAAa,WAAA,CAAY,cAAc,IAAA,CAAK,SAAA;AAC5C,MAAA,QAAA,GAAW,WAAA,CAAY,MAAA,IAAA,MAAA;AACvB,MAAA,QAAA,GAAW,EAAA;AAAA,IACb;AAEA,IAAA,MAAM,YAAA,GAAe,OAAO,WAAA,KAAgB,UAAA,GACxC,SACA,WAAA,CAAY,YAAA;AAEhB,IAAA,MAAM,cAAc,IAAI,WAAA;AAAA,MACtB,IAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,OAAA;AAAA,MACL;AAAA,MACA,KAAA,EAAM;AAER,IAAA,OAAO,WAAA,CAAY,WAAW,MAAM;AAClC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,SAAS,WAAW,CAAA;AAAA,MAC/B,SAAS,CAAA,EAAG;AACV,QAAA,WAAA,CAAY,SAAS,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAC/D,QAAA,WAAA,CAAY,GAAA,EAAI;AAChB,QAAA,MAAM,CAAA;AAAA,MACR;AAEA,MAAA,OAAO,aAAa,MAAA,EAAQ;AAAA,QAC1B,WAAA,EAAa,CAACiF,GAAAA,KAAO,WAAA,CAAY,WAAWA,GAAE,CAAA;AAAA,QAC9C,OAAA,EAAS,CAAC,CAAA,KACR,WAAA,CAAY,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,QACjE,QAAA,EAAU,MAAM,WAAA,CAAY,GAAA;AAAI,OACjC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAGF;AA/Za,KAAA,CACI,SAAA,GAAY,WAAA;AADhB,KAAA,CAGI,YAAA,GAAe,KAAA;AAHnB,KAAA,CAOI,eAAA,GAAkB,KAAA;AAPtB,KAAA,CA8ZJ,qBAAA,GAAwB,qBAAA;AAGjC,IAAO,aAAA,GAAQ","file":"index.js","sourcesContent":["/**\n * Centralized logger for the Netra SDK.\n *\n * Call Logger.setDebugMode(true) once during Netra.init() so all modules\n * automatically respect the configured debug flag without passing Config around.\n */\n\nconst PREFIX = \"[Netra]\";\n\nexport class Logger {\n private static _debugMode = false;\n\n static setDebugMode(enabled: boolean): void {\n this._debugMode = enabled;\n }\n\n private static get isDebug(): boolean {\n return (\n this._debugMode ||\n [\"1\", \"true\"].includes((process.env.NETRA_DEBUG ?? \"\").toLowerCase())\n );\n }\n\n static isDebugMode(): boolean {\n return this.isDebug;\n }\n\n static debug(...args: any[]): void {\n if (this.isDebug) console.debug(PREFIX, ...args);\n }\n\n static info(...args: any[]): void {\n if (this.isDebug) console.info(PREFIX, ...args);\n }\n\n static warn(...args: any[]): void {\n if (this.isDebug) console.warn(PREFIX, ...args);\n }\n\n static error(...args: any[]): void {\n console.error(PREFIX, ...args);\n }\n\n static log(...args: any[]): void {\n if (this.isDebug) console.log(PREFIX, ...args);\n }\n}\n","/**\n * Public helpers for distributed tracing context propagation.\n *\n * These utilities let users extract incoming W3C Trace Context from HTTP\n * headers and run code within that context so that all child spans (LLM\n * calls, database queries, outgoing HTTP, etc.) are linked to the upstream\n * trace.\n *\n * When `@opentelemetry/instrumentation-http` + `@opentelemetry/instrumentation-express`\n * are installed and working, incoming context extraction happens automatically.\n * These helpers cover cases where auto-instrumentation is unavailable (e.g.\n * ESM module loading order issues, missing peer dependencies, or non-Express\n * frameworks).\n */\n\nimport { context, propagation, Context } from \"@opentelemetry/api\";\nimport { Logger } from \"../logger\";\n\n/**\n * Inject W3C trace context (traceparent/tracestate) from the currently active\n * span into a copy of the provided headers object.\n *\n * This is used internally by HTTP clients to propagate distributed trace\n * context on outgoing requests. The injection is best-effort — if propagation\n * fails for any reason, the original headers are returned unmodified.\n *\n * @param headers - Base headers to merge trace context into.\n * @returns A new headers object containing the original headers plus trace context.\n */\nexport function injectTraceContextHeaders(\n headers: Record<string, string>,\n): Record<string, string> {\n const carrier: Record<string, string> = { ...headers };\n try {\n propagation.inject(context.active(), carrier);\n } catch {\n Logger.warn(\"netra: Failed to inject trace context headers\");\n return headers;\n }\n return carrier;\n}\n\n/**\n * Extract an OpenTelemetry context from HTTP request headers.\n *\n * Handles the common Node.js header shapes -- plain strings, string arrays,\n * and `undefined` values -- and normalises keys to lower-case before passing\n * them to the global W3C propagator.\n *\n * @param headers - Incoming HTTP request headers (e.g. `req.headers`).\n * @returns An OTel `Context` carrying the extracted span context and baggage.\n */\nexport function extractContextFromHeaders(\n headers: Record<string, string | string[] | undefined>,\n): Context {\n const carrier: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n carrier[key.toLowerCase()] = value;\n } else if (Array.isArray(value) && value.length > 0) {\n carrier[key.toLowerCase()] = value[0];\n }\n }\n return propagation.extract(context.active(), carrier);\n}\n\n/**\n * Run a function within a context extracted from HTTP headers.\n *\n * All spans created inside `fn` will be children of the trace described by the\n * incoming `traceparent` / `tracestate` headers, enabling end-to-end\n * distributed tracing across service boundaries.\n *\n * @param headers - Incoming HTTP request headers (e.g. `req.headers`).\n * @param fn - The function to execute within the extracted context.\n * May be sync or async -- the return value is forwarded as-is.\n * @returns The return value of `fn`.\n *\n * @example\n * ```ts\n * import { runWithExtractedContext } from \"netra\";\n *\n * app.post(\"/api/chat\", async (req, res) => {\n * await runWithExtractedContext(req.headers, async () => {\n * const result = await myAgent(req.body.message);\n * res.json(result);\n * });\n * });\n * ```\n */\nexport function runWithExtractedContext<T>(\n headers: Record<string, string | string[] | undefined>,\n fn: () => T,\n): T {\n const extractedCtx = extractContextFromHeaders(headers);\n return context.with(extractedCtx, fn);\n}\n\n/**\n * Express/Connect-compatible middleware that extracts W3C Trace Context from\n * incoming request headers and runs all downstream handlers within the\n * extracted context.\n *\n * This is the recommended way to enable distributed tracing for Express\n * servers when `@opentelemetry/instrumentation-http` is not available or not\n * working (e.g. due to ESM module loading order with `tsx`). It is the\n * TypeScript equivalent of the Python SDK's `NetraFastAPIMiddleware`.\n *\n * **Note:** In Express 4.x, async errors thrown inside downstream handlers are\n * not automatically caught by the Express error handler. Wrap async route\n * handlers with your own try/catch or use Express 5 which supports async\n * error propagation natively.\n *\n * @returns An Express middleware function.\n *\n * @example\n * ```ts\n * import express from \"express\";\n * import { netraExpressMiddleware } from \"netra-sdk\";\n *\n * const app = express();\n * app.use(netraExpressMiddleware());\n *\n * app.post(\"/api/chat\", async (req, res) => {\n * // Spans created here are children of the upstream trace\n * const result = await myAgent(req.body.message);\n * res.json(result);\n * });\n * ```\n */\nexport function netraExpressMiddleware(): (\n req: { headers: Record<string, string | string[] | undefined> },\n res: unknown,\n next: () => void,\n) => void {\n return (req, _res, next) => {\n const extractedCtx = extractContextFromHeaders(req.headers);\n context.with(extractedCtx, next);\n };\n}\n","/**\n * Base HTTP client for Netra API calls\n */\n\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { injectTraceContextHeaders } from \"../utils/context-propagation\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n headers: Record<string, string>;\n timeout: number;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n ok: boolean;\n}\n\nexport class NetraHttpClient {\n private baseUrl: string;\n private headers: Record<string, string>;\n private timeout: number;\n private initialized: boolean = false;\n\n constructor(config: Config, timeoutEnvVar: string, defaultTimeout: number) {\n const endpoint = config.otlpEndpoint?.trim() || \"\";\n if (!endpoint) {\n Logger.error(\n \"netra: NETRA_OTLP_ENDPOINT is required for API calls\"\n );\n this.baseUrl = \"\";\n this.headers = {};\n this.timeout = defaultTimeout;\n return;\n }\n\n this.baseUrl = this.resolveBaseUrl(endpoint);\n this.headers = this.buildHeaders(config);\n this.timeout = this.getTimeout(timeoutEnvVar, defaultTimeout);\n this.initialized = true;\n }\n\n private resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.replace(/\\/+$/, \"\");\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n private buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n headers[\"Content-Type\"] = \"application/json\";\n return headers;\n }\n\n private getTimeout(envVar: string, defaultValue: number): number {\n const envValue = process.env[envVar];\n if (!envValue) {\n return defaultValue;\n }\n const parsed = parseFloat(envValue);\n if (isNaN(parsed)) {\n Logger.warn(\n `netra: Invalid ${envVar} value '${envValue}', using default ${defaultValue}`\n );\n return defaultValue;\n }\n return parsed;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n async get<T = any>(\n path: string,\n params?: Record<string, string | number | undefined>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: injectTraceContextHeaders(this.headers),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: GET ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n async post<T = any>(\n path: string,\n body?: Record<string, any>\n ): Promise<HttpResponse<T>> {\n if (!this.initialized) {\n Logger.error(\"netra: HTTP client is not initialized\");\n return { data: {} as T, status: 0, ok: false };\n }\n\n const url = new URL(path, this.baseUrl);\n\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.timeout * 1000\n );\n\n const response = await fetch(url.toString(), {\n method: \"POST\",\n headers: injectTraceContextHeaders(this.headers),\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const data = await response.json();\n return {\n data,\n status: response.status,\n ok: response.ok,\n };\n } catch (error) {\n Logger.error(`netra: POST ${path} failed:`, error);\n return { data: {} as T, status: 0, ok: false };\n }\n }\n\n /**\n * Extract data from nested response format\n * Netra API typically returns { data: { data: actualData } }\n */\n extractData<T>(response: HttpResponse<any>, defaultValue: T): T {\n if (!response.ok) {\n return defaultValue;\n }\n const data = response.data;\n if (data && typeof data === \"object\" && \"data\" in data) {\n return data.data ?? defaultValue;\n }\n return data ?? defaultValue;\n }\n}\n","/**\n * Internal HTTP client for Usage APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class UsageHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_USAGE_TIMEOUT\", 10.0);\n }\n\n async getSessionUsage(\n sessionId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch session usage '${sessionId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/sessions/${sessionId}`, params);\n return this.extractData(response, {});\n }\n\n async getTenantUsage(\n tenantId: string,\n startTime?: string,\n endTime?: string\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot fetch tenant usage '${tenantId}'`\n );\n return {};\n }\n\n const params: Record<string, string | undefined> = {};\n if (startTime) params.startTime = startTime;\n if (endTime) params.endTime = endTime;\n\n const response = await this.get(`/usage/tenants/${tenantId}`, params);\n return this.extractData(response, {});\n }\n\n async listTraces(params: {\n startTime?: string;\n endTime?: string;\n traceId?: string;\n sessionId?: string;\n userId?: string;\n tenantId?: string;\n limit?: number;\n cursor?: string;\n direction?: string;\n sortField?: string;\n sortOrder?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\"netra.usage: Usage client is not initialized; cannot list traces\");\n return {};\n }\n\n const payload: Record<string, any> = {};\n\n if (params.startTime) payload.startTime = params.startTime;\n if (params.endTime) payload.endTime = params.endTime;\n\n // Build filters array\n const filters: Array<{\n field: string;\n operator: string;\n type: string;\n value: string;\n }> = [];\n\n const filterMapping: Record<string, string | undefined> = {\n trace_id: params.traceId,\n session_id: params.sessionId,\n user_id: params.userId,\n tenant_id: params.tenantId,\n };\n\n for (const [field, value] of Object.entries(filterMapping)) {\n if (value !== undefined) {\n filters.push({\n field,\n operator: \"equals\",\n type: \"string\",\n value,\n });\n }\n }\n\n payload.filters = filters;\n\n // Build pagination object\n const pagination: Record<string, any> = {};\n if (params.limit !== undefined) pagination.limit = params.limit;\n if (params.cursor !== undefined) pagination.cursor = params.cursor;\n if (params.direction !== undefined) pagination.direction = params.direction;\n if (Object.keys(pagination).length > 0) {\n payload.pagination = pagination;\n }\n\n if (params.sortField !== undefined) payload.sortField = params.sortField;\n if (params.sortOrder !== undefined) payload.sortOrder = params.sortOrder;\n\n const response = await this.post(\"/sdk/traces\", payload);\n return response.ok ? response.data : {};\n }\n\n async listSpansByTraceId(params: {\n traceId: string;\n cursor?: string;\n direction?: string;\n limit?: number;\n spanName?: string;\n }): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.usage: Usage client is not initialized; cannot list spans for trace '${params.traceId}'`\n );\n return {};\n }\n\n const queryParams: Record<string, string | number | undefined> = {};\n if (params.cursor !== undefined) queryParams.cursor = params.cursor;\n if (params.direction !== undefined) queryParams.direction = params.direction;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.spanName !== undefined) queryParams.spanName = params.spanName;\n\n const response = await this.get(\n `/sdk/traces/${params.traceId}/spans`,\n queryParams\n );\n return response.ok ? response.data : {};\n }\n}\n","/**\n * Public Usage API\n * Exposed as Netra.usage\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { UsageHttpClient } from \"./client\";\nimport {\n ListSpansParams,\n ListTracesParams,\n SessionUsageData,\n SpansPage,\n TenantUsageData,\n TraceSpan,\n TracesPage,\n TraceSummary,\n} from \"./models\";\n\nexport class Usage {\n private config: Config;\n private client: UsageHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new UsageHttpClient(config);\n }\n\n /**\n * Get session usage data\n * @param sessionId Session identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Session usage data or null on error\n */\n async getSessionUsage(\n sessionId: string,\n startTime: string,\n endTime: string\n ): Promise<SessionUsageData | null> {\n if (!sessionId) {\n Logger.error(\"netra.usage: session_id is required to fetch session usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch session usage\"\n );\n return null;\n }\n\n const result = await this.client.getSessionUsage(sessionId, startTime, endTime);\n const sessionIdFromResult = result.session_id;\n if (!sessionIdFromResult) {\n return null;\n }\n\n return {\n sessionId: sessionIdFromResult,\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * Get tenant usage data\n * @param tenantId Tenant identifier\n * @param startTime Start time for the usage data (in ISO 8601 UTC format)\n * @param endTime End time for the usage data (in ISO 8601 UTC format)\n * @returns Tenant usage data or null on error\n */\n async getTenantUsage(\n tenantId: string,\n startTime: string,\n endTime: string\n ): Promise<TenantUsageData | null> {\n if (!tenantId) {\n Logger.error(\"netra.usage: tenant_id is required to fetch tenant usage\");\n return null;\n }\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.usage: start_time and end_time are required to fetch tenant usage\"\n );\n return null;\n }\n\n const result = await this.client.getTenantUsage(tenantId, startTime, endTime);\n const tenantIdFromResult = result.tenant_id;\n if (!tenantIdFromResult) {\n return null;\n }\n\n return {\n tenantId: tenantIdFromResult,\n organisationId: result.organisation_id ?? \"\",\n tokenCount: result.tokenCount ?? 0,\n requestCount: result.requestsCount ?? 0,\n sessionCount: result.sessionsCount ?? 0,\n totalCost: result.totalCost ?? 0.0,\n };\n }\n\n /**\n * List all traces\n * @param params List traces parameters\n * @returns Traces page or null on error\n */\n async listTraces(params: ListTracesParams): Promise<TracesPage | null> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to list traces\");\n return null;\n }\n\n const result = await this.client.listTraces({\n startTime: params.startTime,\n endTime: params.endTime,\n traceId: params.traceId,\n sessionId: params.sessionId,\n userId: params.userId,\n tenantId: params.tenantId,\n limit: params.limit,\n cursor: params.cursor,\n direction: params.direction,\n sortField: params.sortField,\n sortOrder: params.sortOrder,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const traces: TraceSummary[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSummary(item));\n\n return {\n traces,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * List all spans for a given trace\n * @param params List spans parameters\n * @returns Spans page or null on error\n */\n async listSpansByTraceId(params: ListSpansParams): Promise<SpansPage | null> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to list spans\");\n return null;\n }\n\n const result = await this.client.listSpansByTraceId({\n traceId: params.traceId,\n cursor: params.cursor,\n direction: params.direction,\n limit: params.limit,\n spanName: params.spanName,\n });\n\n if (!result || typeof result !== \"object\") {\n return null;\n }\n\n const dataBlock = result.data ?? {};\n const items = dataBlock.data ?? [];\n const pageInfo = dataBlock.pageInfo ?? {};\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n\n let nextCursor: string | undefined;\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem && typeof lastItem === \"object\") {\n nextCursor = lastItem.cursor;\n }\n }\n\n const spans: TraceSpan[] = items\n .filter((item: any) => item && typeof item === \"object\")\n .map((item: any) => this.mapToTraceSpan(item));\n\n return {\n spans,\n hasNextPage,\n nextCursor,\n };\n }\n\n /**\n * Iterate over traces using cursor-based pagination\n * @param params List traces parameters\n * @returns Async generator yielding TraceSummary items\n */\n async *iterTraces(\n params: ListTracesParams\n ): AsyncGenerator<TraceSummary, void, unknown> {\n if (!params.startTime || !params.endTime) {\n Logger.error(\"netra.usage: start_time and end_time are required to iterate traces\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listTraces({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const trace of page.traces) {\n yield trace;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n /**\n * Iterate over spans for a given trace using cursor-based pagination\n * @param params List spans parameters\n * @returns Async generator yielding TraceSpan items\n */\n async *iterSpansByTraceId(\n params: ListSpansParams\n ): AsyncGenerator<TraceSpan, void, unknown> {\n if (!params.traceId) {\n Logger.error(\"netra.usage: trace_id is required to iterate spans\");\n return;\n }\n\n let currentCursor = params.cursor;\n\n while (true) {\n const page = await this.listSpansByTraceId({\n ...params,\n cursor: currentCursor,\n });\n\n if (!page) {\n break;\n }\n\n for (const span of page.spans) {\n yield span;\n }\n\n if (!page.hasNextPage || !page.nextCursor) {\n break;\n }\n\n currentCursor = page.nextCursor;\n }\n }\n\n private mapToTraceSummary(item: any): TraceSummary {\n return {\n id: item.id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n latencyMs: item.latency_ms ?? 0,\n startTime: item.start_time ?? \"\",\n endTime: item.end_time ?? \"\",\n cursor: item.cursor ?? \"\",\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n models: item.models,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n hasViolation: item.has_violation,\n violations: item.violations,\n hasError: item.has_error,\n service: item.service,\n };\n }\n\n private mapToTraceSpan(item: any): TraceSpan {\n return {\n id: item.id ?? \"\",\n traceId: item.trace_id ?? \"\",\n name: item.name ?? \"\",\n kind: item.kind ?? \"\",\n parentSpanId: item.parent_span_id,\n latencyMs: item.latency_ms,\n startTimeMs: item.start_time_ms,\n endTimeMs: item.end_time_ms,\n organisationId: item.organisation_id ?? \"\",\n projectId: item.project_id ?? \"\",\n sessionId: item.session_id,\n tenantId: item.tenant_id,\n userId: item.user_id,\n environment: item.environment,\n modelName: item.model_name,\n promptTokens: item.prompt_tokens,\n completionTokens: item.completion_tokens,\n cachedTokens: item.cached_tokens,\n totalTokens: item.total_tokens,\n promptTokensCost: item.prompt_tokens_cost,\n completionTokensCost: item.completion_tokens_cost,\n cachedTokensCost: item.cached_tokens_cost,\n totalCost: item.total_cost,\n hasPii: item.has_pii,\n piiEntities: item.pii_entities,\n piiActions: item.pii_actions,\n hasViolation: item.has_violation,\n violations: item.violations,\n violationActions: item.violation_actions,\n status: item.status,\n attributes: item.attributes,\n events: item.events,\n links: item.links,\n resources: item.resources,\n metadata: item.metadata,\n hasError: item.has_error,\n createdAt: item.created_at ?? \"\",\n cursor: item.cursor ?? \"\",\n };\n }\n}\n","export const SDK_VERSION = \"1.4.0\";\n","/**\n * Configuration management for Netra SDK\n */\n\nimport { Logger } from \"./logger\";\nimport { SDK_VERSION } from \"./version\";\n\nexport interface NetraConfig {\n appName?: string;\n headers?: string | Record<string, string>;\n disableBatch?: boolean;\n traceContent?: boolean;\n debugMode?: boolean;\n enableRootSpan?: boolean;\n resourceAttributes?: Record<string, any>;\n environment?: string;\n enableScrubbing?: boolean;\n blockedSpans?: string[];\n instruments?: Set<NetraInstruments>;\n blockInstruments?: Set<NetraInstruments>;\n rootInstruments?: Set<NetraInstruments>;\n}\n\nexport enum NetraInstruments {\n /**\n * Sentinel value: when included in `instruments` or `rootInstruments`,\n * restores the legacy behaviour where every available instrumentation is\n * enabled automatically (no curated default list is applied).\n */\n ALL = \"__all__\",\n\n // LLM Providers\n OPENAI = \"openai\",\n GOOGLE_GENERATIVE_AI = \"google_genai\",\n MISTRAL = \"mistral_ai\",\n GROQ = \"groq\",\n VERTEX_AI = \"vertexai\",\n TOGETHER = \"together\",\n ANTHROPIC = \"anthropic\",\n\n // AI Frameworks\n LANGCHAIN = \"langchain\",\n LANGGRAPH = \"langgraph\",\n LLAMA_INDEX = \"llama_index\",\n OPENAI_AGENTS = \"openai_agents\",\n\n // Vector DBs\n PINECONE = \"pinecone\",\n QDRANT = \"qdrant\",\n CHROMADB = \"chromadb\",\n\n // HTTP Clients\n HTTP = \"http\",\n\n // Databases\n PRISMA = \"prisma\",\n TYPEORM = \"typeorm\",\n\n // Web Frameworks\n EXPRESS = \"express\",\n}\n\n/**\n * Subset of DEFAULT_INSTRUMENTS allowed to produce root-level spans.\n * Covers core LLM/AI providers and agent frameworks.\n */\nexport const DEFAULT_INSTRUMENTS_FOR_ROOT: Set<NetraInstruments> = new Set([\n // LLM / AI providers\n NetraInstruments.OPENAI,\n NetraInstruments.ANTHROPIC,\n NetraInstruments.GROQ,\n NetraInstruments.MISTRAL,\n NetraInstruments.GOOGLE_GENERATIVE_AI,\n NetraInstruments.VERTEX_AI,\n NetraInstruments.TOGETHER,\n // AI frameworks\n NetraInstruments.LANGCHAIN,\n NetraInstruments.LANGGRAPH,\n NetraInstruments.LLAMA_INDEX,\n NetraInstruments.OPENAI_AGENTS,\n]);\n\n/**\n * Full set of instrumentations installed by default. Includes the root\n * defaults plus common vector DBs, HTTP clients, and database libraries.\n */\nexport const DEFAULT_INSTRUMENTS: Set<NetraInstruments> = new Set([\n ...DEFAULT_INSTRUMENTS_FOR_ROOT,\n // Vector DBs\n NetraInstruments.PINECONE,\n NetraInstruments.QDRANT,\n NetraInstruments.CHROMADB,\n // HTTP\n NetraInstruments.HTTP,\n // Databases\n NetraInstruments.PRISMA,\n NetraInstruments.TYPEORM,\n // Web Frameworks\n NetraInstruments.EXPRESS,\n]);\n\nexport class Config {\n static readonly SDK_NAME = \"netra\";\n static readonly LIBRARY_NAME = \"netra\";\n static readonly LIBRARY_VERSION = SDK_VERSION;\n static readonly TRIAL_BLOCK_DURATION_SECONDS = 900; // 15 minutes\n static readonly ATTRIBUTE_MAX_LEN = parseInt(\n process.env.NETRA_ATTRIBUTE_MAX_LEN || \"50000\",\n );\n static readonly CONVERSATION_MAX_LEN = parseInt(\n process.env.NETRA_CONVERSATION_CONTENT_MAX_LEN || \"50000\",\n );\n static readonly SPAN_ATTRIBUTE_MAX_SIZE = parseInt(\n process.env.NETRA_SPAN_ATTRIBUTE_MAX_SIZE || \"30000\",\n );\n\n appName: string;\n otlpEndpoint?: string;\n apiKey?: string;\n headers: Record<string, string>;\n disableBatch: boolean;\n traceContent: boolean;\n debugMode: boolean;\n enableRootSpan: boolean;\n enableScrubbing: boolean;\n environment: string;\n resourceAttributes: Record<string, any>;\n blockedSpans?: string[];\n\n constructor(config: NetraConfig = {}) {\n this.appName = this._getAppName(config.appName);\n this.otlpEndpoint = this._getOtlpEndpoint();\n this.apiKey = process.env.NETRA_API_KEY;\n this.headers = this._parseHeaders(config.headers);\n this.disableBatch = this._getBoolConfig(\n config.disableBatch,\n \"NETRA_DISABLE_BATCH\",\n false,\n );\n this.traceContent = this._getBoolConfig(\n config.traceContent,\n \"NETRA_TRACE_CONTENT\",\n true,\n );\n this.debugMode = this._getBoolConfig(\n config.debugMode,\n \"NETRA_DEBUG\",\n false,\n );\n this.enableRootSpan = this._getBoolConfig(\n config.enableRootSpan,\n \"NETRA_ENABLE_ROOT_SPAN\",\n false,\n );\n this.enableScrubbing = this._getBoolConfig(\n config.enableScrubbing,\n \"NETRA_ENABLE_SCRUBBING\",\n false,\n );\n this.environment = config.environment || process.env.NETRA_ENV || \"local\";\n this.resourceAttributes = this._getResourceAttributes(\n config.resourceAttributes,\n );\n this.blockedSpans = config.blockedSpans;\n\n this._validateApiKey();\n this._setupAuthentication();\n this._setTraceContentEnv();\n }\n\n private _getAppName(appName?: string): string {\n return (\n appName ||\n process.env.NETRA_APP_NAME ||\n process.env.OTEL_SERVICE_NAME ||\n process.env.npm_package_name ||\n \"llm_tracing_service\"\n );\n }\n\n private _getOtlpEndpoint(): string | undefined {\n return (\n process.env.NETRA_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT\n );\n }\n\n private _parseHeaders(\n headers?: string | Record<string, string>,\n ): Record<string, string> {\n if (!headers) {\n const envHeaders = process.env.NETRA_HEADERS;\n if (envHeaders) {\n return this._parseEnvHeaders(envHeaders);\n }\n return {};\n }\n\n if (typeof headers === \"string\") {\n return this._parseEnvHeaders(headers);\n }\n\n return headers;\n }\n\n private _parseEnvHeaders(headers: string): Record<string, string> {\n const result: Record<string, string> = {};\n const pairs = headers.split(\",\");\n for (const pair of pairs) {\n const [key, ...valueParts] = pair.split(\"=\");\n if (key && valueParts.length > 0) {\n result[key.trim()] = valueParts.join(\"=\").trim();\n }\n }\n return result;\n }\n\n private _validateApiKey(): void {\n if (\n this.otlpEndpoint &&\n this.otlpEndpoint.toLowerCase().includes(\"getnetra\") &&\n !this.apiKey\n ) {\n Logger.error(\n \"Error: Missing Netra API key, go to netra dashboard to create one\",\n );\n Logger.error(\"Set the NETRA_API_KEY environment variable to the key\");\n }\n }\n\n private _setupAuthentication(): void {\n if (!this.apiKey || !this.otlpEndpoint) {\n return;\n }\n\n const isNetra = this.otlpEndpoint.toLowerCase().includes(\"getnetra\");\n const authKey = isNetra ? \"x-api-key\" : \"Authorization\";\n const authValue = isNetra ? this.apiKey : `Bearer ${this.apiKey}`;\n\n if (!this.headers[authKey]) {\n this.headers[authKey] = authValue;\n }\n }\n\n private _getBoolConfig(\n param: boolean | undefined,\n envVar: string,\n defaultValue: boolean,\n ): boolean {\n if (param !== undefined) {\n return param;\n }\n\n const envValue = process.env[envVar];\n if (envValue === undefined) {\n return defaultValue;\n }\n\n return [\"1\", \"true\"].includes(envValue.toLowerCase());\n }\n\n private _getResourceAttributes(\n resourceAttributes?: Record<string, any>,\n ): Record<string, any> {\n if (resourceAttributes !== undefined) {\n return resourceAttributes;\n }\n\n const envRa = process.env.NETRA_RESOURCE_ATTRS;\n if (!envRa) {\n return {};\n }\n\n try {\n return JSON.parse(envRa);\n } catch (e) {\n Logger.warn(`Failed to parse NETRA_RESOURCE_ATTRS: ${e}`);\n return {};\n }\n }\n\n private _setTraceContentEnv(): void {\n process.env.TRACELOOP_TRACE_CONTENT = this.traceContent ? \"true\" : \"false\";\n }\n\n /**\n * Format the OTLP endpoint URL by appending /v1/traces if not already present\n */\n public formatOtlpEndpoint(): any {\n if (!this.otlpEndpoint) {\n return undefined;\n }\n\n const url = this.otlpEndpoint.trim();\n\n // Remove trailing slash if present\n const cleanUrl = url.endsWith(\"/\") ? url.slice(0, -1) : url;\n\n // Append /v1/traces if not already present\n if (!cleanUrl.endsWith(\"/v1/traces\")) {\n return `${cleanUrl}/v1/traces`;\n }\n\n return cleanUrl;\n }\n\n /**\n * Set Traceloop environment variables based on Netra config.\n * This ensures the Traceloop SDK picks up our configuration.\n */\n public setTraceloopEnv(): void {\n // Set TRACELOOP_BASE_URL so Traceloop SDK uses our endpoint\n if (this.otlpEndpoint && !process.env.TRACELOOP_BASE_URL) {\n process.env.TRACELOOP_BASE_URL = this.otlpEndpoint;\n }\n\n // Set TRACELOOP_API_KEY if we have one\n if (this.apiKey && !process.env.TRACELOOP_API_KEY) {\n process.env.TRACELOOP_API_KEY = this.apiKey;\n }\n\n // Set headers for Traceloop\n if (\n Object.keys(this.headers).length > 0 &&\n !process.env.TRACELOOP_HEADERS\n ) {\n const headerStr = Object.entries(this.headers)\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n process.env.TRACELOOP_HEADERS = headerStr;\n }\n\n // Set OTEL_RESOURCE_ATTRIBUTES so the TracerProvider Resource carries\n // service.name and deployment.environment attributes.\n this._setResourceAttributesEnv();\n }\n\n private _setResourceAttributesEnv(): void {\n // Start with Netra defaults (lowest priority)\n const attrs: Record<string, string> = {\n \"deployment.environment\": this.environment,\n \"service.name\": this.appName,\n };\n\n // Config-level resourceAttributes override defaults\n for (const [k, v] of Object.entries(this.resourceAttributes)) {\n attrs[k] = String(v);\n }\n\n // Pre-existing OTEL_RESOURCE_ATTRIBUTES win (highest priority)\n const existing = process.env.OTEL_RESOURCE_ATTRIBUTES;\n if (existing) {\n for (const pair of existing.split(\",\")) {\n const eqIdx = pair.indexOf(\"=\");\n if (eqIdx <= 0) continue;\n const key = decodeURIComponent(pair.slice(0, eqIdx).trim());\n if (key) {\n attrs[key] = decodeURIComponent(pair.slice(eqIdx + 1).trim());\n }\n }\n }\n\n const encodeAttrValue = (s: string) => encodeURIComponent(s);\n\n process.env.OTEL_RESOURCE_ATTRIBUTES = Object.entries(attrs)\n .map(([k, v]) => `${encodeAttrValue(k)}=${encodeAttrValue(v)}`)\n .join(\",\");\n }\n}\n","/**\n * Shared span-name pattern matching utilities for span blocking.\n *\n * Pattern forms, determined by the position of `*`:\n * - Exact: \"openai.chat\" → name === \"openai.chat\"\n * - Prefix: \"openai.*\" → name.startsWith(\"openai.\")\n * - Suffix: \"*.chat\" → name.endsWith(\".chat\")\n * - Contains: \"*openai*\" → name.includes(\"openai\")\n * - Wildcard: \"*\" → matches everything\n */\n\nexport interface CompiledPatterns {\n matchAll: boolean;\n exact: Set<string>;\n prefixes: string[];\n suffixes: string[];\n contains: string[];\n isEmpty: boolean;\n}\n\n/**\n * Compile a list of raw pattern strings into a CompiledPatterns object.\n * Empty strings are skipped.\n */\nexport function compilePatterns(patterns: string[]): CompiledPatterns {\n const exact = new Set<string>();\n const prefixes: string[] = [];\n const suffixes: string[] = [];\n const contains: string[] = [];\n let matchAll = false;\n\n for (const p of patterns) {\n if (!p) continue;\n\n if (p === \"*\") {\n matchAll = true;\n } else if (p.startsWith(\"*\") && p.endsWith(\"*\")) {\n const inner = p.slice(1, -1);\n if (inner) contains.push(inner);\n } else if (p.endsWith(\"*\")) {\n prefixes.push(p.slice(0, -1));\n } else if (p.startsWith(\"*\")) {\n suffixes.push(p.slice(1));\n } else {\n exact.add(p);\n }\n }\n\n const isEmpty = !matchAll && exact.size === 0 && prefixes.length === 0 &&\n suffixes.length === 0 && contains.length === 0;\n\n return { matchAll, exact, prefixes, suffixes, contains, isEmpty };\n}\n\n/**\n * Test whether `name` matches any pattern in a compiled set.\n */\nexport function matchesAnyPattern(\n name: string,\n compiled: CompiledPatterns,\n): boolean {\n if (compiled.matchAll) return true;\n if (compiled.exact.has(name)) return true;\n\n for (const pref of compiled.prefixes) {\n if (name.startsWith(pref)) return true;\n }\n\n for (const suf of compiled.suffixes) {\n if (name.endsWith(suf)) return true;\n }\n\n for (const sub of compiled.contains) {\n if (name.includes(sub)) return true;\n }\n\n return false;\n}\n","import {\n context as otelContext,\n propagation,\n ROOT_CONTEXT,\n SpanContext,\n trace,\n} from \"@opentelemetry/api\";\nimport type { Baggage, Context, Span } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { compilePatterns, matchesAnyPattern, CompiledPatterns } from \"../utils/pattern-matching\";\n\nexport const LOCAL_BLOCKED_SPANS_BAGGAGE_KEY = \"netra.local_blocked_spans\";\nexport const LOCAL_BLOCKED_SPANS_ATTR_KEY = \"netra.local_blocked_spans\";\n\nfunction decodePatterns(raw: string): string[] | null {\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed) && parsed.every((p) => typeof p === \"string\")) {\n return parsed.filter(Boolean);\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T>,\n): Promise<T>;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => T,\n): T;\nexport function withBlockedSpansLocal<T>(\n patterns: readonly string[],\n fn: () => Promise<T> | T,\n): Promise<T> | T {\n const incoming = patterns.filter(Boolean);\n const activeCtx = otelContext.active();\n\n const baggage: Baggage =\n propagation.getBaggage(activeCtx) ??\n propagation.getBaggage(ROOT_CONTEXT) ??\n propagation.createBaggage();\n\n const existingRaw = baggage.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n const existingPatterns = existingRaw ? (decodePatterns(existingRaw) ?? []) : [];\n const merged = [...new Set([...existingPatterns, ...incoming])];\n const payload = JSON.stringify(merged);\n\n const nextBaggage = baggage.setEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY, {\n value: payload,\n });\n\n const nextCtx = propagation.setBaggage(activeCtx, nextBaggage);\n return otelContext.with(nextCtx, fn);\n}\n\nexport class LocalFilteringSpanProcessor implements SpanProcessor {\n private static readonly MAX_ENTRIES = 10_000;\n\n /**\n * Instance-scoped registry: spanId → parent SpanContext.\n *\n * Populated in onStart when a span's name matches blocking patterns\n * (both global and local). Shared with FilteringSpanExporter via\n * constructor injection (as a ReadonlyMap) for reparenting.\n *\n * Eviction is size-based (FIFO) rather than per-span onEnd deletion to\n * avoid a race condition: with SimpleSpanProcessor, onEnd fires before\n * export(), so deleting here would remove entries the exporter still needs.\n *\n * This map solves a timing problem with SimpleSpanProcessor: a child span may\n * be exported (and need reparenting) before its blocked parent is exported.\n * Pre-registering the blocked parent here lets the exporter find it immediately.\n */\n private readonly _blockedParentMap = new Map<string, SpanContext | undefined>();\n\n get blockedParentMap(): ReadonlyMap<string, SpanContext | undefined> {\n return this._blockedParentMap;\n }\n\n private readonly globalCompiled: CompiledPatterns;\n\n /** Cache for compiled local pattern sets from baggage. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 50;\n\n constructor(globalPatterns: string[] = []) {\n this.globalCompiled = compilePatterns(globalPatterns);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n // The OTel API `Span` interface does not expose `.name`, but the SDK's\n // concrete Span class (sdk-trace-base >=1.x) stores it as a public field.\n // This cast relies on that implementation detail.\n const name = (span as any).name as string | undefined;\n if (!name) return;\n\n let blocked = false;\n\n if (matchesAnyPattern(name, this.globalCompiled)) {\n blocked = true;\n }\n\n const bag = propagation.getBaggage(parentContext);\n const raw = bag?.getEntry(LOCAL_BLOCKED_SPANS_BAGGAGE_KEY)?.value;\n\n if (raw) {\n const patterns = decodePatterns(raw);\n if (patterns && patterns.length > 0) {\n span.setAttribute(LOCAL_BLOCKED_SPANS_ATTR_KEY, patterns);\n\n const compiled = this.getCompiledLocalPatterns(raw, patterns);\n if (matchesAnyPattern(name, compiled)) {\n span.setAttribute(\"netra.local_blocked\", true);\n blocked = true;\n }\n }\n }\n\n if (blocked) {\n const spanId = span.spanContext().spanId;\n const parentSpan = trace.getSpan(parentContext);\n const parentSpanContext = parentSpan?.spanContext();\n this._blockedParentMap.set(spanId, parentSpanContext);\n this.evictIfNeeded();\n }\n } catch (e) {\n Logger.debug(\"LocalFilteringSpanProcessor.onStart error:\", e);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n // No-op: cleanup is handled by size-based eviction in onStart and by\n // FilteringSpanExporter.evictRememberedIfNeeded() to avoid race\n // conditions with out-of-order export batches.\n }\n\n shutdown(): Promise<void> {\n this._blockedParentMap.clear();\n this.localPatternCache.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private getCompiledLocalPatterns(cacheKey: string, patterns: string[]): CompiledPatterns {\n let compiled = this.localPatternCache.get(cacheKey);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(cacheKey, compiled);\n if (this.localPatternCache.size > LocalFilteringSpanProcessor.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictIfNeeded(): void {\n if (this._blockedParentMap.size <= LocalFilteringSpanProcessor.MAX_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-insertion eviction\n const toRemove = Math.max(\n this._blockedParentMap.size - LocalFilteringSpanProcessor.MAX_ENTRIES,\n Math.ceil(LocalFilteringSpanProcessor.MAX_ENTRIES * 0.25),\n );\n const keys = Array.from(this._blockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this._blockedParentMap.delete(key);\n }\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n/**\n * Tracks the root span for each trace keyed by traceId.\n * Exposes static helpers so other processors and session utilities\n * Register this processor AFTER LlmTraceIdentifierSpanProcessor so that\n * on_end cleanup happens after the LLM processor has finished marking the\n * root span.\n */\nexport class RootSpanProcessor implements SpanProcessor {\n private static readonly _rootSpans = new Map<string, Span>();\n\n static getRootSpanByTraceId(traceId: string): Span | undefined {\n return RootSpanProcessor._rootSpans.get(traceId);\n }\n\n static getRootSpan(span: Span): Span | undefined {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return undefined;\n return RootSpanProcessor._rootSpans.get(ctx.traceId);\n }\n\n static isRootSpanForTrace(traceId: string, spanId: string): boolean {\n const root = RootSpanProcessor._rootSpans.get(traceId);\n return root?.spanContext().spanId === spanId;\n }\n\n /**\n * Set an attribute on the root span of the currently active trace.\n * Resolves the root span via the active OTel context\n */\n static setAttributeOnRootSpan(key: string, value: string): void {\n try {\n const active = trace.getActiveSpan();\n if (!active) {\n Logger.warn(`setAttributeOnRootSpan: no active span`);\n return;\n }\n const spanCtx = active.spanContext();\n if (!trace.isSpanContextValid(spanCtx)) {\n Logger.warn(`setAttributeOnRootSpan: active span context is invalid`);\n return;\n }\n const root = RootSpanProcessor._rootSpans.get(spanCtx.traceId);\n if (!root) {\n Logger.warn(`setAttributeOnRootSpan: no root span found for current trace`);\n return;\n }\n root.setAttribute(key, value);\n } catch (e) {\n Logger.error(`setAttributeOnRootSpan: failed to set '${key}':`, e);\n }\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n if (!this._isRootSpan(parentContext)) return;\n // setdefault: first span with no valid parent wins\n if (!RootSpanProcessor._rootSpans.has(ctx.traceId)) {\n RootSpanProcessor._rootSpans.set(ctx.traceId, span);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onStart: unexpected error:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const ctx = span.spanContext();\n if (!ctx || !trace.isSpanContextValid(ctx)) return;\n const root = RootSpanProcessor._rootSpans.get(ctx.traceId);\n if (root?.spanContext().spanId === ctx.spanId) {\n RootSpanProcessor._rootSpans.delete(ctx.traceId);\n }\n } catch (e) {\n Logger.warn(\"RootSpanProcessor.onEnd: unexpected error:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n RootSpanProcessor._rootSpans.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isRootSpan(parentContext: Context | undefined): boolean {\n const parentSpan = parentContext ? trace.getSpan(parentContext) : undefined;\n if (!parentSpan) return true;\n const parentCtx = parentSpan.spanContext();\n return !parentCtx || !trace.isSpanContextValid(parentCtx);\n }\n}\n","/**\n * Type definitions for Netra SDK\n */\n\nimport { SpanWrapper } from \"./span-wrapper\";\n\nexport enum SpanType {\n SPAN = \"SPAN\",\n GENERATION = \"GENERATION\",\n TOOL = \"TOOL\",\n EMBEDDING = \"EMBEDDING\",\n AGENT = \"AGENT\",\n HANDOFF = \"HANDOFF\",\n GUARDRAIL = \"GUARDRAIL\",\n}\n\nexport enum ConversationType {\n INPUT = \"input\",\n OUTPUT = \"output\",\n}\n\nexport interface UsageModel {\n model: string;\n usage_type: string;\n units_used?: number;\n cost_in_usd?: number;\n}\n\nexport interface ActionModel {\n start_time: string;\n action: string;\n action_type: string;\n success: boolean;\n affected_records?: Array<{ record_id: string; record_type: string }>;\n metadata?: Record<string, string>;\n}\n\nexport type SpanAttributes = Record<string, string | string[] | boolean>;\n\nexport interface SpanOptions {\n attributes?: SpanAttributes;\n moduleName?: string;\n asType?: SpanType;\n /** Patterns for blocking descendant spans (e.g. [\"http.*\", \"*.resolve\"]) */\n blockedSpans?: string[];\n}\n\nexport interface DecoratorOptions {\n name?: string;\n asType?: SpanType;\n}\n\nexport type SpanCallback<T> = (span: SpanWrapper) => T;\n","const ELLIPSIS = \"...\";\n\nfunction truncate(s: string, maxLength: number): string {\n if (s.length <= maxLength) return s;\n if (maxLength <= ELLIPSIS.length) return s.slice(0, maxLength);\n return s.slice(0, maxLength - ELLIPSIS.length) + ELLIPSIS;\n}\n\n/**\n * Circular-reference-safe JSON.stringify with optional length truncation.\n *\n * - Strings pass through as-is (only truncated if over maxLength)\n * - Functions, symbols, bigints get descriptive placeholders\n * - Circular references become \"[Circular]\"\n * - Large class instances (>20 keys) become \"[ClassName]\"\n * - Result is truncated to `maxLength` when provided\n */\nexport function safeStringify(\n value: unknown,\n maxLength?: number,\n): string {\n if (typeof value === \"string\") {\n if (maxLength && value.length > maxLength) {\n return truncate(value, maxLength);\n }\n return value;\n }\n\n const seen = new WeakSet<object>();\n let result: string;\n try {\n result = JSON.stringify(value, (_key, val) => {\n if (typeof val === \"function\")\n return `[Function: ${val.name || \"anonymous\"}]`;\n if (typeof val === \"symbol\") return val.toString();\n if (typeof val === \"bigint\") return val.toString();\n if (val !== null && typeof val === \"object\") {\n if (seen.has(val)) return \"[Circular]\";\n seen.add(val);\n const name = val.constructor?.name;\n if (\n name &&\n name !== \"Object\" &&\n name !== \"Array\" &&\n Object.keys(val).length > 20\n ) {\n return `[${name}]`;\n }\n }\n return val;\n }) ?? String(value);\n } catch {\n result =\n (value as any)?.constructor?.name\n ? `[${(value as any).constructor.name}]`\n : String(value);\n }\n\n if (maxLength && result.length > maxLength) {\n return truncate(result, maxLength);\n }\n return result;\n}\n\n/**\n * Convert any value to a string suitable for span attributes.\n * Primitives use `String()`, objects use `safeStringify`.\n */\nexport function serializeValue(\n value: unknown,\n maxLength?: number,\n): string {\n if (value === null || value === undefined) return String(value);\n const t = typeof value;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") {\n const s = String(value);\n if (maxLength && s.length > maxLength) return truncate(s, maxLength);\n return s;\n }\n return safeStringify(value, maxLength);\n}\n","/**\n * Session Manager — entity stack tracking and span annotation utilities.\n *\n * Uses AsyncLocalStorage for per-async-scope entity stacks (workflow, task,\n * agent, span) so concurrent requests stay isolated. All span resolution and\n * attribute writes delegate to OpenTelemetry's native APIs; no shadow copies\n * of spans are kept here.\n */\n\nimport { Span, context, trace } from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { RootSpanProcessor } from \"./processors/root-span-processor\";\nimport { ConversationType } from \"./types\";\nimport { serializeValue } from \"./utils/serialization\";\n\nexport { ConversationType };\n\nconst MODULE_NAME = \"netra.session-manager\";\n\n/**\n * Per-async-scope state: entity name stacks and a name→span registry.\n * Deliberately minimal — live span references belong to OTel's context, not here.\n */\ninterface EntityContext {\n workflowStack: string[];\n taskStack: string[];\n agentStack: string[];\n spanStack: string[];\n spansByName: Map<string, Span[]>;\n}\n\nconst entityStorage = new AsyncLocalStorage<EntityContext>();\n\n// Global fallback for single-threaded / non-async entry points\nconst globalFallbackContext: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n};\n\nfunction getEntityContext(): EntityContext {\n return entityStorage.getStore() ?? globalFallbackContext;\n}\n\n/**\n * Run `fn` with a fresh, isolated entity context.\n * Use this when spawning concurrent async operations that should have\n * independent entity stacks.\n */\nexport function runWithEntityContext<T>(fn: () => T): T {\n const ctx: EntityContext = {\n workflowStack: [],\n taskStack: [],\n agentStack: [],\n spanStack: [],\n spansByName: new Map(),\n };\n return entityStorage.run(ctx, fn);\n}\n\n// SessionManager\n\nexport class SessionManager {\n\n // Span registry (name → stack)\n\n static registerSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name) ?? [];\n stack.push(span);\n ctx.spansByName.set(name, stack);\n } catch (e) {\n Logger.error(`Failed to register span '${name}':`, e);\n }\n }\n\n static unregisterSpan(name: string, span: Span): void {\n try {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n if (!stack) return;\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i] === span) {\n stack.splice(i, 1);\n break;\n }\n }\n if (stack.length === 0) ctx.spansByName.delete(name);\n } catch (e) {\n Logger.error(`Failed to unregister span '${name}':`, e);\n }\n }\n\n static getSpanByName(name: string): Span | undefined {\n const ctx = getEntityContext();\n const stack = ctx.spansByName.get(name);\n return stack?.length ? stack[stack.length - 1] : undefined;\n }\n\n // Entity stacks (workflow / task / agent / span)\n\n static pushEntity(entityType: string, entityName: string): void {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": ctx.workflowStack.push(entityName); break;\n case \"task\": ctx.taskStack.push(entityName); break;\n case \"agent\": ctx.agentStack.push(entityName); break;\n case \"span\": ctx.spanStack.push(entityName); break;\n }\n }\n\n static popEntity(entityType: string): string | undefined {\n const ctx = getEntityContext();\n switch (entityType) {\n case \"workflow\": return ctx.workflowStack.pop();\n case \"task\": return ctx.taskStack.pop();\n case \"agent\": return ctx.agentStack.pop();\n case \"span\": return ctx.spanStack.pop();\n default: return undefined;\n }\n }\n\n static getCurrentEntityAttributes(): Record<string, string> {\n const ctx = getEntityContext();\n const attrs: Record<string, string> = {};\n const last = <T>(arr: T[]) => arr[arr.length - 1];\n if (ctx.workflowStack.length) attrs[`${Config.LIBRARY_NAME}.workflow.name`] = last(ctx.workflowStack)!;\n if (ctx.taskStack.length) attrs[`${Config.LIBRARY_NAME}.task.name`] = last(ctx.taskStack)!;\n if (ctx.agentStack.length) attrs[`${Config.LIBRARY_NAME}.agent.name`] = last(ctx.agentStack)!;\n if (ctx.spanStack.length) attrs[`${Config.LIBRARY_NAME}.span.name`] = last(ctx.spanStack)!;\n return attrs;\n }\n\n static clearEntityStacks(): void {\n const ctx = getEntityContext();\n ctx.workflowStack = [];\n ctx.taskStack = [];\n ctx.agentStack = [];\n ctx.spanStack = [];\n }\n\n // OTel context helpers\n\n /**\n * Returns the trace ID of the currently active span, or undefined if none.\n */\n static getTraceId(): string | undefined {\n const ctx = trace.getActiveSpan()?.spanContext();\n return ctx && trace.isSpanContextValid(ctx) ? ctx.traceId : undefined;\n }\n\n // Span attribute writers\n\n /**\n * Set an attribute on the currently active OTel span.\n */\n static setAttributeOnActiveSpan(key: string, value: any): void {\n try {\n const span = trace.getActiveSpan();\n if (span?.isRecording()) {\n span.setAttribute(key, typeof value === \"string\" ? value : JSON.stringify(value));\n } else {\n Logger.warn(`setAttributeOnActiveSpan: no recording span for key '${key}'`);\n }\n } catch (e) {\n Logger.error(`Failed to set attribute '${key}' on active span:`, e);\n }\n }\n\n /**\n * Set input on the currently active span.\n * Writes to `netra.user.input` so that SpanIOProcessor can promote it\n * to `input` at span end, giving user-supplied values the highest priority.\n */\n static setInput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\n \"netra.user.input\",\n serializeValue(value, Config.ATTRIBUTE_MAX_LEN),\n );\n } catch (e) {\n Logger.error(\"setInput failed:\", e);\n }\n }\n\n /**\n * Set output on the currently active span.\n * Writes to `netra.user.output` so that SpanIOProcessor can promote it\n * to `output` at span end, giving user-supplied values the highest priority.\n */\n static setOutput(value: any): void {\n try {\n SessionManager.setAttributeOnActiveSpan(\n \"netra.user.output\",\n serializeValue(value, Config.ATTRIBUTE_MAX_LEN),\n );\n } catch (e) {\n Logger.error(\"setOutput failed:\", e);\n }\n }\n\n /**\n * Set input on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.input` so SpanIOProcessor promotes it at span end.\n */\n static setRootInput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\n \"netra.user.input\",\n serializeValue(value, Config.ATTRIBUTE_MAX_LEN),\n );\n } catch (e) {\n Logger.error(\"setRootInput failed:\", e);\n }\n }\n\n /**\n * Set output on the root span of the current trace.\n * Delegates to RootSpanProcessor which owns root span bookkeeping.\n * Writes to `netra.user.output` so SpanIOProcessor promotes it at span end.\n */\n static setRootOutput(value: any): void {\n try {\n RootSpanProcessor.setAttributeOnRootSpan(\n \"netra.user.output\",\n serializeValue(value, Config.ATTRIBUTE_MAX_LEN),\n );\n } catch (e) {\n Logger.error(\"setRootOutput failed:\", e);\n }\n }\n\n // Events and conversations\n\n static setCustomEvent(name: string, attributes: Record<string, any>): void {\n try {\n const span = trace.getActiveSpan();\n const timestamp = Date.now();\n if (span?.isRecording()) {\n span.addEvent(name, attributes, timestamp);\n } else {\n // Fallback: create a short-lived span to carry the event\n trace.getTracer(MODULE_NAME).startActiveSpan(\n `${Config.LIBRARY_NAME}.${name}`,\n { attributes },\n context.active(),\n (newSpan: Span) => {\n newSpan.addEvent(name, attributes, timestamp);\n newSpan.end();\n },\n );\n }\n } catch (e) {\n Logger.error(`setCustomEvent '${name}' failed:`, e);\n }\n }\n\n /**\n * Append a conversation entry to the active span's `conversation` attribute.\n *\n * Reads and re-serialises the existing JSON array so entries accumulate\n * rather than overwrite — matching the Python SDK's behaviour.\n * Writes directly to the span's internal attribute store to bypass OTel's\n * per-attribute length truncation on the final payload.\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n if (!role || !content) {\n Logger.error(\"addConversation: role and content must be provided\");\n return;\n }\n\n try {\n const span = trace.getActiveSpan();\n if (!span?.isRecording()) {\n Logger.warn(\"addConversation: no active recording span\");\n return;\n }\n\n // Read existing entries from the span's internal attribute store\n let existing: Array<{\n type: string;\n role: string;\n content: string | Record<string, any>;\n format: string;\n }> = [];\n try {\n const raw = (span as any)._attributes?.[\"conversation\"];\n if (typeof raw === \"string\") {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) existing = parsed;\n }\n } catch (e) {\n Logger.warn(\"addConversation: failed to parse existing conversation, starting fresh:\", e);\n }\n\n const maxLen = Config.CONVERSATION_MAX_LEN;\n const processedContent =\n typeof content === \"string\" ? content.substring(0, maxLen) : content;\n\n existing.push({\n type: conversationType,\n role,\n content: processedContent,\n format: typeof processedContent === \"string\" ? \"text\" : \"json\",\n });\n\n const payload = JSON.stringify(existing);\n\n // Bypass per-attribute truncation by writing to the internal store directly\n const internalAttrs = (span as any)._attributes;\n if (internalAttrs && typeof internalAttrs === \"object\") {\n internalAttrs[\"conversation\"] = payload;\n } else {\n span.setAttribute(\"conversation\", payload);\n }\n } catch (e) {\n Logger.error(\"addConversation failed:\", e);\n }\n }\n}\n","/**\n * Span Wrapper for custom span tracking\n */\n\nimport {\n context,\n propagation,\n Span,\n SpanKind,\n SpanStatusCode,\n trace,\n} from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { LOCAL_BLOCKED_SPANS_BAGGAGE_KEY } from \"./processors/localfiltering-span-processor\";\nimport { SessionManager } from \"./session-manager\";\nimport { ActionModel, SpanAttributes, SpanType, UsageModel } from \"./types\";\n\nexport class SpanWrapper {\n private name: string;\n private attributes: SpanAttributes;\n private moduleName: string;\n private startTime?: number;\n private endTime?: number;\n private status: string = \"pending\";\n private errorMessage?: string;\n private span?: Span;\n private activeContext?: ReturnType<typeof context.active>;\n private tracer?: any;\n private blockedSpanPatterns?: string[];\n\n constructor(\n name: string,\n attributes: SpanAttributes = {},\n moduleName: string = \"netra_sdk\",\n asType: SpanType = SpanType.SPAN,\n tracer?: any,\n blockedSpanPatterns?: string[],\n ) {\n this.name = name;\n this.attributes = { ...attributes };\n this.moduleName = moduleName;\n this.attributes[\"netra.span.type\"] = asType;\n this.tracer = tracer;\n this.blockedSpanPatterns = blockedSpanPatterns;\n }\n\n start(): this {\n this.startTime = Date.now();\n\n const tracer = this.tracer || trace.getTracer(this.moduleName);\n\n let ctx = context.active();\n\n if (this.blockedSpanPatterns && this.blockedSpanPatterns.length > 0) {\n const patterns = this.blockedSpanPatterns.filter(Boolean);\n if (patterns.length > 0) {\n const existingBaggage =\n propagation.getBaggage(ctx) ?? propagation.createBaggage();\n const existingRaw = existingBaggage.getEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n )?.value;\n const existingPatterns = this.decodeBaggagePatterns(existingRaw);\n const merged = [...new Set([...existingPatterns, ...patterns])];\n const payload = JSON.stringify(merged);\n const updatedBaggage = existingBaggage.setEntry(\n LOCAL_BLOCKED_SPANS_BAGGAGE_KEY,\n { value: payload },\n );\n ctx = propagation.setBaggage(ctx, updatedBaggage);\n }\n }\n\n this.span = tracer.startSpan(\n this.name,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n ...this.attributes,\n \"netra.span.name\": this.name,\n },\n },\n ctx,\n );\n\n // Store the context with this span (and any baggage) so withActive()\n // propagates both parent-span and blocking baggage to child spans.\n if (this.span) {\n this.activeContext = trace.setSpan(ctx, this.span);\n SessionManager.registerSpan(this.name, this.span);\n }\n\n return this;\n }\n\n end(): this {\n this.endTime = Date.now();\n const durationMs =\n this.startTime && this.endTime\n ? (this.endTime - this.startTime) / 1000\n : undefined;\n\n if (durationMs !== undefined) {\n this.setAttribute(\n `${Config.LIBRARY_NAME}.duration_ms`,\n durationMs.toFixed(2),\n );\n }\n\n if (this.status === \"pending\") {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n this.setAttribute(`${Config.LIBRARY_NAME}.status`, this.status);\n\n if (this.span) {\n for (const [key, value] of Object.entries(this.attributes)) {\n if (value !== undefined) {\n this.span.setAttribute(key, value);\n }\n }\n\n SessionManager.unregisterSpan(this.name, this.span);\n this.span.end();\n }\n\n // Release the stored context so it can be GC'd\n this.activeContext = undefined;\n\n return this;\n }\n\n setAttribute(key: string, value: string | string[] | boolean): this {\n this.attributes[key] = value;\n if (this.span) {\n this.span.setAttribute(key, value);\n }\n return this;\n }\n\n /**\n * Run a function with this span set as the active span in the OTel context.\n * Child spans created inside `fn` will have this span as their parent and will\n * also inherit any blocking baggage set via `blockedSpans`. Works for both\n * sync and async functions — context.with() passes through the return value as-is.\n */\n withActive<T>(fn: () => T): T {\n if (!this.span) return fn();\n\n const ctx =\n this.activeContext ?? trace.setSpan(context.active(), this.span);\n return context.with(ctx, fn);\n }\n\n setPrompt(prompt: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.prompt`, prompt);\n }\n\n setNegativePrompt(negativePrompt: string): this {\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.negative_prompt`,\n negativePrompt,\n );\n }\n\n setUsage(usage: UsageModel[]): this {\n const usageJson = JSON.stringify(usage);\n return this.setAttribute(`${Config.LIBRARY_NAME}.usage`, usageJson);\n }\n\n setAction(action: ActionModel[]): this {\n const actionJson = JSON.stringify(action);\n return this.setAttribute(`${Config.LIBRARY_NAME}.action`, actionJson);\n }\n\n setModel(model: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.model`, model);\n }\n\n setLlmSystem(system: string): this {\n return this.setAttribute(`${Config.LIBRARY_NAME}.llm_system`, system);\n }\n\n setError(errorMessage: string): this {\n this.status = \"error\";\n this.errorMessage = errorMessage;\n if (this.span) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: errorMessage,\n });\n }\n return this.setAttribute(\n `${Config.LIBRARY_NAME}.error_message`,\n errorMessage,\n );\n }\n\n setSuccess(): this {\n this.status = \"success\";\n if (this.span) {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n return this;\n }\n\n addEvent(name: string, attributes?: Record<string, string>): this {\n if (this.span) {\n this.span.addEvent(name, attributes);\n }\n return this;\n }\n\n getCurrentSpan(): Span | undefined {\n return this.span;\n }\n\n private decodeBaggagePatterns(raw: string | undefined): string[] {\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.filter((v: unknown) => typeof v === \"string\" && v);\n }\n } catch {\n // ignore malformed baggage\n }\n return [];\n }\n}\n","/**\n * Internal HTTP client for Evaluation APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport { EntryStatus, EvaluationScore, RunStatus } from \"./models\";\n\nexport class EvaluationHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_EVALUATION_TIMEOUT\", 10.0);\n }\n\n /**\n * Fetch dataset items for a dataset id\n */\n async getDataset(datasetId: string): Promise<any[]> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot fetch dataset '${datasetId}'`,\n );\n return [];\n }\n\n const response = await this.get(`/evaluations/dataset/${datasetId}`);\n return this.extractData(response, []);\n }\n\n /**\n * Create a run for a dataset\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: Record<string, any>[],\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot create run for dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const payload = {\n name,\n datasetId,\n localEvaluators: evaluatorsConfig,\n };\n const response = await this.post(\"/evaluations/test_run\", payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Create an empty dataset and return backend data\n */\n async createDataset(name: string, tags?: string[]): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot create dataset\",\n );\n return { success: false };\n }\n\n const payload = {\n name,\n tags: tags ?? [],\n };\n\n const response = await this.post(\"/evaluations/dataset\", payload);\n \n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Add a single item to an existing dataset\n */\n async addDatasetItem(\n datasetId: string,\n itemPayload: Record<string, any>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n `netra.evaluation: Evaluation client is not initialized; cannot add item to dataset '${datasetId}'`,\n );\n return { success: false };\n }\n\n const response = await this.post(\n `/evaluations/dataset/${datasetId}/items`,\n itemPayload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Fetch test run results by run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot fetch run\",\n );\n return { success: false };\n }\n\n try {\n const response = await this.get(`/evaluations/run/${runId}`);\n if (!response.ok) {\n const errorMessage =\n response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}': ${errorMessage}`,\n );\n return null;\n }\n const data = this.extractData(response, null);\n if (data !== null) {\n Logger.info(\"netra.evaluation: Run fetched successfully\");\n }\n return data;\n } catch {\n Logger.error(\n `netra.evaluation: Failed to fetch run results for run '${runId}'`,\n );\n return null;\n }\n }\n\n /**\n * Submit a new run item to the backend\n */\n async postRunItem(runId: string, payload: Record<string, any>): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run item\",\n );\n return { success: false };\n }\n\n const response = await this.post(`/evaluations/run/${runId}/item`, payload);\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\" && \"item\" in data) {\n const runItem = data.item;\n if (runItem && typeof runItem === \"object\" && \"id\" in runItem) {\n return runItem.id;\n }\n }\n return data;\n }\n\n /**\n * Submit local evaluations result\n */\n async submitLocalEvaluations(\n runId: string,\n testRunItemId: string,\n evaluatorResults: Array<Record<string, any>>,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot submit local evaluations\",\n );\n return { success: false };\n }\n\n const payload = { evaluatorResults };\n const response = await this.post(\n `/evaluations/run/${runId}/item/${testRunItemId}/local-evaluations`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n return this.extractData(response, { success: false });\n }\n\n /**\n * Submit the run status\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot post run status\",\n );\n return { success: false };\n }\n\n const payload = { status };\n const response = await this.post(\n `/evaluations/run/${runId}/status`,\n payload,\n );\n\n if (!response.ok) {\n return { success: false };\n }\n\n const data = this.extractData(response, { success: false });\n if (data && typeof data === \"object\") {\n Logger.info(\"netra.evaluation: Completed test run successfully\");\n }\n return data;\n }\n\n /**\n * Check if a span exists in the backend\n */\n async getSpanById(spanId: string): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.evaluation: Evaluation client is not initialized; cannot get span\",\n );\n return null;\n }\n\n try {\n const response = await this.get(`sdk/traces/spans/${spanId}`);\n if (!response.ok) {\n return null;\n }\n return this.extractData(response, null);\n } catch {\n return null;\n }\n }\n\n /**\n * Wait until a span is available in the backend\n * Polls the GET /spans/:id endpoint to verify span availability before running evaluators\n */\n async waitForSpanIngestion(\n spanId?: string,\n timeoutSeconds: number = 60.0,\n pollIntervalSeconds: number = 1.0,\n initialDelaySeconds: number = 0.5,\n ): Promise<boolean> {\n if (!spanId) {\n return false;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelaySeconds * 1000),\n );\n\n const deadline = Date.now() + timeoutSeconds * 1000;\n while (Date.now() < deadline) {\n const spanData = await this.getSpanById(spanId);\n if (spanData !== null) {\n return true;\n }\n await new Promise((resolve) =>\n setTimeout(resolve, pollIntervalSeconds * 1000),\n );\n }\n\n return false;\n }\n}\n","/**\n * Evaluation Utility Functions\n */\n\nimport { propagation, context as otelContext } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { DatasetRecord, EvaluatorConfig, ItemContext } from \"./models\";\n\n/**\n * Get the session ID from the OpenTelemetry baggage\n */\nexport function getSessionIdFromBaggage(): string | undefined {\n const ctx = otelContext.active();\n const baggageObj = propagation.getBaggage(ctx);\n const sessionId = baggageObj?.getEntry(\"session_id\")?.value;\n if (typeof sessionId === \"string\" && sessionId) {\n return sessionId;\n }\n return undefined;\n}\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string\n */\nexport function formatTraceId(traceId: string): string {\n // Ensure it's 32 characters long, pad with zeros if needed\n return traceId.padStart(32, \"0\");\n}\n\n/**\n * Format the span ID as a 16-digit hexadecimal string\n */\nexport function formatSpanId(spanId: string): string {\n // Ensure it's 16 characters long, pad with zeros if needed\n return spanId.padStart(16, \"0\");\n}\n\n/**\n * Run a callable function that may be sync or async\n */\nexport async function runCallableMaybeAsync<T>(\n fn: (...args: any[]) => T | Promise<T>,\n ...args: any[]\n): Promise<T> {\n const result = fn(...args);\n if (result instanceof Promise) {\n return await result;\n }\n return result;\n}\n\n/**\n * Extract evaluator configuration from an evaluator object\n */\nexport function extractEvaluatorConfig(evaluator: any): EvaluatorConfig | null {\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"config\" in evaluator)\n ) {\n return null;\n }\n\n const config = evaluator.config;\n\n if (!config || typeof config !== \"object\") {\n return null;\n }\n\n return config as EvaluatorConfig;\n}\n\n/**\n * Execute a task function (sync or async) and return (output, status)\n */\nexport async function executeTask(\n task: (input: any) => any | Promise<any>,\n itemInput: any,\n): Promise<{ output: any; status: string }> {\n try {\n const result = await runCallableMaybeAsync(task, itemInput);\n return { output: result, status: \"completed\" };\n } catch (error) {\n return { output: String(error), status: \"failed\" };\n }\n}\n\n/**\n * Run a single evaluator and return normalized result\n */\nexport async function runSingleEvaluator(params: {\n evaluator: any;\n itemInput: any;\n taskOutput: any;\n expectedOutput: any;\n metadata?: Record<string, any>;\n}): Promise<Record<string, any> | null> {\n const { evaluator, itemInput, taskOutput, expectedOutput, metadata } =\n params;\n\n if (\n !evaluator ||\n typeof evaluator !== \"object\" ||\n !(\"evaluate\" in evaluator)\n ) {\n return null;\n }\n\n let expectedName: string | null = null;\n const config = extractEvaluatorConfig(evaluator);\n if (config) {\n expectedName = config.name;\n }\n\n const context = {\n input: itemInput,\n taskOutput: taskOutput,\n expectedOutput: expectedOutput,\n metadata: metadata,\n };\n\n let result = evaluator.evaluate(context);\n if (result instanceof Promise) {\n result = await result;\n }\n\n const resultPayload = {\n evaluatorName: result.evaluatorName,\n result: result.result,\n isPassed: result.isPassed,\n reason: result.reason,\n };\n\n if (expectedName && resultPayload.evaluatorName !== expectedName) {\n return null;\n }\n\n return resultPayload;\n}\n\n/**\n * Build a payload dict for posting item status\n */\nexport function buildItemPayload(\n ctx: ItemContext,\n status: string,\n includeOutput: boolean = false,\n): Record<string, any> {\n const payload: Record<string, any> = {\n traceId: ctx.traceId,\n sessionId: ctx.sessionId,\n };\n\n if (ctx.datasetItemId) {\n payload.datasetItemId = ctx.datasetItemId;\n } else {\n payload.input = ctx.itemInput;\n payload.expectedOutput = ctx.expectedOutput;\n if (ctx.metadata) {\n payload.metadata = ctx.metadata;\n }\n }\n\n if (ctx.status === \"failed\") {\n payload.status = \"failed\";\n return payload;\n }\n\n if (includeOutput) {\n payload.taskOutput = ctx.taskOutput;\n }\n\n return payload;\n}\n\n/**\n * Validate required inputs for runTestSuite\n */\nexport function validateRunInputs(\n name: string,\n data: any,\n task: ((arg: any) => any) | null | undefined,\n): boolean {\n if (!name) {\n Logger.error(\"netra.evaluation: run name is required\");\n return false;\n }\n if (!data) {\n Logger.error(\"netra.evaluation: data is required\");\n return false;\n }\n if (task == null) {\n Logger.error(\"netra.evaluation: task function is required\");\n return false;\n }\n return true;\n}\n\n/**\n * Extract datasetId from items if they are DatasetRecords\n */\nexport function extractDatasetId(items: any[]): string | null {\n if (items.length > 0 && isDatasetRecord(items[0])) {\n return items[0].datasetId;\n }\n return null;\n}\n\n/**\n * Type guard for DatasetRecord\n */\nfunction isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n}\n\n/**\n * Build evaluator configurations from evaluator objects\n */\nexport function buildEvaluatorsConfig(\n evaluators?: any[] | null,\n): EvaluatorConfig[] {\n const configs: EvaluatorConfig[] = [];\n if (!evaluators || evaluators.length === 0) {\n return configs;\n }\n\n for (const evaluator of evaluators) {\n const config = extractEvaluatorConfig(evaluator);\n if (!config) {\n continue;\n }\n\n try {\n configs.push(config);\n } catch {\n continue;\n }\n }\n\n return configs;\n}\n","/**\n * Public Evaluation API\n * Exposed as Netra.evaluation\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { SpanWrapper } from \"../../span-wrapper\";\nimport { EvaluationHttpClient } from \"./client\";\nimport {\n AddDatasetItemResponse,\n CreateDatasetResponse,\n Dataset,\n DatasetEntry,\n DatasetRecord,\n EvaluatorConfig,\n GetDatasetItemsResponse,\n ItemContext,\n TaskFunction,\n} from \"./models\";\nimport {\n buildEvaluatorsConfig,\n buildItemPayload,\n executeTask,\n extractDatasetId,\n formatSpanId,\n formatTraceId,\n getSessionIdFromBaggage,\n runSingleEvaluator,\n validateRunInputs,\n} from \"./utils\";\n\n/**\n * Public entry-point exposed as Netra.evaluation\n */\nexport class Evaluation {\n private config: Config;\n private client: EvaluationHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new EvaluationHttpClient(this.config);\n }\n\n /**\n * Create an empty dataset and return its id on success, else null\n * @param name The name of the dataset\n * @param tags Optional list of tags to associate with the dataset\n * @returns A backend JSON response containing dataset info (id, name, tags, etc.) on success\n */\n async createDataset(\n name: string,\n tags?: string[],\n ): Promise<CreateDatasetResponse | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create dataset: dataset name is required\",\n );\n return null;\n }\n\n const response = await this.client.createDataset(name, tags);\n\n if (!response) {\n return null;\n }\n\n return {\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n name: response.name ?? \"\",\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Add a single item to an existing dataset\n * @param datasetId The id of the dataset to which the item will be added\n * @param item The dataset item to add\n * @returns A backend JSON response containing dataset item info (id, input, expectedOutput, etc.) on success\n */\n async addDatasetItem(\n datasetId: string,\n item: DatasetEntry,\n ): Promise<AddDatasetItemResponse | null> {\n if (!item.input) {\n Logger.error(\n \"netra.evaluation: Skipping dataset item without required 'input'\",\n );\n return null;\n }\n\n const response = await this.client.addDatasetItem(datasetId, item);\n\n return {\n datasetId: response.datasetId ?? \"\",\n projectId: response.projectId ?? \"\",\n organizationId: response.organizationId ?? \"\",\n source: response.source ?? \"\",\n input: response.input ?? \"\",\n expectedOutput: response.expectedOutput ?? \"\",\n isActive: true,\n tags: response.tags ?? [],\n createdBy: response.createdBy ?? \"\",\n updatedBy: response.updatedBy ?? \"\",\n updatedAt: response.updatedAt ?? \"\",\n sourceId: response.sourceId ?? null,\n metadata: response.metadata ?? null,\n id: response.id ?? \"\",\n createdAt: response.createdAt ?? \"\",\n deletedAt: response.deletedAt ?? null,\n };\n }\n\n /**\n * Get a dataset by ID\n * @param datasetId The id of the dataset to retrieve\n * @returns A backend JSON response containing dataset info (id, input, expectedOutput etc.) on success\n */\n async getDataset(datasetId: string): Promise<GetDatasetItemsResponse | null> {\n if (!datasetId) {\n Logger.error(\n \"netra.evaluation: Failed to get dataset: dataset id is required\",\n );\n return null;\n }\n\n const response = await this.client.getDataset(datasetId);\n if (!response) {\n return null;\n }\n\n const datasetItems: DatasetRecord[] = [];\n for (const item of response) {\n const itemId = item?.id;\n const itemInput = item?.input;\n const itemDatasetId = item?.datasetId;\n\n if (itemId == null || itemDatasetId == null || itemInput == null) {\n Logger.warn(\n \"netra.evaluation: Skipping dataset item with missing required fields:\",\n item,\n );\n continue;\n }\n\n try {\n datasetItems.push({\n id: itemId,\n input: itemInput,\n datasetId: itemDatasetId,\n expectedOutput: item?.expectedOutput ?? \"\",\n });\n } catch (exc) {\n Logger.error(\"netra.evaluation: Failed to parse dataset item:\", exc);\n }\n }\n\n return { items: datasetItems };\n }\n\n /**\n * Create a new run for the given dataset and evaluators\n * @param name The name of the run\n * @param datasetId The id of the dataset to which the run will be associated\n * @param evaluatorsConfig Optional list of evaluators to be used for the run\n * @returns runId: The id of the created run\n */\n async createRun(\n name: string,\n datasetId?: string,\n evaluatorsConfig?: EvaluatorConfig[],\n ): Promise<string | null> {\n if (!name) {\n Logger.error(\n \"netra.evaluation: Failed to create run: run name is required\",\n );\n return null;\n }\n\n const evaluatorsConfigDicts: Array<Record<string, any>> | undefined =\n evaluatorsConfig?.map((e) => ({\n name: e.name,\n label: e.label,\n scoreType: e.scoreType,\n }));\n\n const response = await this.client.createRun(\n name,\n datasetId,\n evaluatorsConfigDicts,\n );\n const runId = response?.id ?? null;\n return runId;\n }\n\n /**\n * Fetch test run results based on run ID\n * @param runId The id of the run to fetch\n * @returns The run results data\n */\n async getRunResults(runId: string): Promise<any> {\n if (!runId) {\n Logger.error(\n \"netra.evaluation: Failed to get run: run_id is required\",\n );\n return null;\n }\n\n const response = await this.client.getRunResults(runId);\n return response;\n }\n\n /**\n * Netra evaluation function to initiate a test suite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns A dictionary containing the run id and the results of the test suite\n */\n runTestSuite(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators?: any[],\n maxConcurrency: number = 50,\n ): Promise<Record<string, any> | null> {\n return this.runTestSuiteAsync(name, data, task, evaluators, maxConcurrency);\n }\n\n /**\n * Async implementation of runTestSuite\n * @param name The name of the run\n * @param data The dataset to be used for the test suite\n * @param task The task to be executed for each item in the dataset\n * @param evaluators Optional list of evaluators to be used for the test suite\n * @param maxConcurrency The maximum number of concurrent tasks to be executed\n * @returns items: The results of the test suite\n */\n private async runTestSuiteAsync(\n name: string,\n data: Dataset,\n task: TaskFunction,\n evaluators: any[] | undefined,\n maxConcurrency: number,\n ): Promise<Record<string, any> | null> {\n if (!validateRunInputs(name, data, task)) {\n return null;\n }\n\n const items = [...data.items];\n const totalItems = items.length;\n const datasetId = extractDatasetId(items);\n const evaluatorsConfig = buildEvaluatorsConfig(evaluators);\n\n const runId = await this.createRun(\n name,\n datasetId ?? undefined,\n evaluatorsConfig,\n );\n if (!runId) {\n Logger.error(\"netra.evaluation: Failed to create run\");\n return null;\n }\n Logger.info(\"netra.evaluation: Initiated test run\");\n\n const semaphore = new Semaphore(Math.max(1, maxConcurrency));\n const results: Array<Record<string, any>> = [];\n const bgEvalTasks: Promise<void>[] = [];\n let completedItems = 0;\n\n const processItem = async (idx: number, item: any): Promise<void> => {\n await semaphore.acquire();\n try {\n const ctx = this.createItemContext(idx, item);\n const itemResult = await this.executeItemPipeline(\n runId,\n name,\n ctx,\n task,\n evaluators,\n results,\n bgEvalTasks,\n );\n\n completedItems += 1;\n Logger.info(\n `netra.evaluation: ${completedItems}/${totalItems} items processed (status=${itemResult.status})`,\n );\n } finally {\n semaphore.release();\n }\n };\n\n await Promise.all(items.map((item, i) => processItem(i, item)));\n\n if (bgEvalTasks.length > 0) {\n await Promise.allSettled(bgEvalTasks);\n }\n\n this.client.postRunStatus(runId, \"completed\");\n return { runId, items: results };\n }\n\n /**\n * Create an ItemContext from a dataset item\n * @param idx The index of the item\n * @param item The dataset item\n * @returns ItemContext: The created ItemContext\n */\n private createItemContext(idx: number, item: any): ItemContext {\n // Check if item is a DatasetRecord (has datasetId property)\n if (this.isDatasetRecord(item)) {\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n datasetItemId: item.id,\n };\n }\n\n return {\n index: idx,\n itemInput: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n };\n }\n\n /**\n * Type guard for DatasetRecord\n */\n private isDatasetRecord(item: any): item is DatasetRecord {\n return (\n item != null &&\n typeof item === \"object\" &&\n \"datasetId\" in item &&\n typeof item.datasetId === \"string\"\n );\n }\n\n /**\n * Execute the full pipeline for a single item\n * @param runId The run ID\n * @param runName The name of the run\n * @param ctx The item context\n * @param task The task function to execute\n * @param evaluators Optional list of evaluators\n * @param results List to append results to\n * @param bgEvalTasks List to append background evaluation tasks to\n */\n private async executeItemPipeline(\n runId: string,\n runName: string,\n ctx: ItemContext,\n task: TaskFunction,\n evaluators: any[] | undefined,\n results: Array<Record<string, any>>,\n bgEvalTasks: Promise<void>[],\n ): Promise<{ status: string }> {\n const spanName = `TestRun.${runName}`;\n\n const span = new SpanWrapper(spanName, {}, \"netra.evaluation\");\n span.start();\n\n try {\n const otelSpan = span.getCurrentSpan();\n if (otelSpan) {\n const spanContext = otelSpan.spanContext();\n ctx.traceId = formatTraceId(spanContext.traceId);\n ctx.spanId = formatSpanId(spanContext.spanId);\n }\n ctx.sessionId = getSessionIdFromBaggage();\n\n const { output, status } = await span.withActive(() =>\n executeTask(task, ctx.itemInput),\n );\n ctx.taskOutput = output;\n ctx.status = status;\n\n ctx.testRunItemId = await span.withActive(() =>\n this.postCompletedStatus(runId, ctx),\n );\n\n if (evaluators && ctx.status === \"completed\") {\n const evalTask = this.runEvaluatorsForItem(runId, ctx, evaluators);\n bgEvalTasks.push(evalTask);\n }\n\n results.push({\n index: ctx.index,\n status: ctx.status,\n traceId: ctx.traceId,\n spanId: ctx.spanId,\n testRunItemId: ctx.testRunItemId,\n });\n\n return { status: ctx.status ?? \"pending\" };\n } finally {\n span.end();\n }\n }\n\n /**\n * Post agent_triggered status and return testRunItemId\n * @param runId The run ID\n * @param ctx The item context\n * @returns str: The testRunItemId\n */\n private async postTriggeredStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<string> {\n const payload = buildItemPayload(ctx, \"agent_triggered\");\n const response = await this.client.postRunItem(runId, payload);\n\n if (response && typeof response === \"object\") {\n const itemId = response.id ?? response.testRunItemId;\n if (itemId) {\n return String(itemId);\n }\n }\n return `local-${ctx.index}`;\n }\n\n /**\n * Post completed/failed status with task output\n * @param runId The run ID\n * @param ctx The item context\n */\n private async postCompletedStatus(\n runId: string,\n ctx: ItemContext,\n ): Promise<any> {\n const payload = buildItemPayload(ctx, ctx.status ?? \"pending\", true);\n const runItemId = await this.client.postRunItem(runId, payload);\n return runItemId;\n }\n\n /**\n * Run all evaluators for a single item after span ingestion\n * @param runId The run ID\n * @param ctx The item context\n * @param evaluators List of evaluators\n */\n private async runEvaluatorsForItem(\n runId: string,\n ctx: ItemContext,\n evaluators: any[],\n ): Promise<void> {\n await this.client.waitForSpanIngestion(ctx.spanId);\n\n const evaluatorResults: Array<Record<string, any>> = [];\n for (const evaluator of evaluators) {\n try {\n const result = await runSingleEvaluator({\n evaluator,\n itemInput: ctx.itemInput,\n taskOutput: ctx.taskOutput,\n expectedOutput: ctx.expectedOutput,\n metadata: ctx.metadata,\n });\n\n if (result) {\n evaluatorResults.push(result);\n }\n } catch {\n continue;\n }\n }\n\n if (evaluatorResults.length > 0 && ctx.testRunItemId) {\n this.client.submitLocalEvaluations(\n runId,\n ctx.testRunItemId,\n evaluatorResults,\n );\n }\n }\n}\n\n/**\n * Simple semaphore for concurrency control\n */\nclass Semaphore {\n private permits: number;\n private waiting: Array<() => void> = [];\n\n constructor(permits: number) {\n this.permits = permits;\n }\n\n async acquire(): Promise<void> {\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.waiting.push(resolve);\n });\n }\n\n release(): void {\n if (this.waiting.length > 0) {\n const next = this.waiting.shift();\n next?.();\n } else {\n this.permits++;\n }\n }\n\n async run<T>(fn: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n}\n","/**\n * Evaluation API Models\n */\n\nexport interface DatasetEntry {\n id: string;\n input: string;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface DatasetItem {\n input: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n tags?: string[];\n}\n\nexport interface DatasetRecord {\n id: string;\n input: any;\n datasetId: string;\n expectedOutput?: any;\n}\n\nexport interface Dataset {\n items: DatasetItem[] | DatasetRecord[];\n}\n\nexport interface Run {\n id: string;\n datasetId: string;\n name?: string;\n testEntries: DatasetItem[];\n}\n\nexport interface EvaluationScore {\n metricType: string;\n score: number;\n}\n\nexport enum EntryStatus {\n AGENT_TRIGGERED = \"agent_triggered\",\n AGENT_COMPLETED = \"agent_completed\",\n FAILED = \"failed\",\n}\n\nexport enum RunStatus {\n COMPLETED = \"completed\",\n}\n\nexport interface CreateDatasetParams {\n name: string;\n tags?: string[];\n}\n\nexport interface TestSuiteResult {\n success: boolean;\n runId?: string;\n error?: string;\n results?: Array<{\n id: string;\n input: string;\n output: any;\n status: string;\n error?: string;\n }>;\n}\n\nexport enum ScoreType {\n BOOLEAN = \"boolean\",\n NUMERICAL = \"numerical\",\n CATEGORICAL = \"categorical\",\n}\n\nexport interface EvaluatorConfig {\n name: string;\n label: string;\n scoreType: ScoreType;\n}\n\nexport interface AddDatasetItemResponse {\n datasetId: string;\n projectId: string;\n organizationId: string;\n source: string;\n input: any;\n expectedOutput?: any;\n isActive: boolean;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n sourceId?: string;\n metadata?: Record<string, any>;\n id: string;\n createdAt?: string;\n deletedAt?: string;\n}\n\nexport interface ItemContext {\n index: number;\n itemInput: any;\n expectedOutput?: any;\n metadata?: any;\n datasetItemId?: string;\n traceId?: string;\n spanId?: string;\n sessionId?: string;\n taskOutput?: any;\n status?: string;\n testRunItemId?: string;\n}\n\nexport interface CreateDatasetResponse {\n projectId: string;\n organizationId: string;\n name: string;\n tags?: string[];\n createdBy: string;\n updatedBy: string;\n updatedAt: string;\n id: string;\n createdAt: string;\n deletedAt?: string | null;\n}\n\nexport interface GetDatasetItemsResponse {\n items: DatasetRecord[];\n}\n\nexport interface LocalDataset {\n items: DatasetEntry[];\n}\n\nexport interface EvaluatorContext {\n input: any;\n taskOutput: any;\n expectedOutput?: any;\n metadata?: Record<string, any>;\n}\n\nexport interface EvaluatorOutput {\n evaluatorName: string;\n result: any;\n isPassed: boolean;\n reason?: string;\n}\n\nexport type EvaluatorFunction = (params: {\n input: string;\n output: any;\n expectedOutput?: any;\n}) =>\n | EvaluationScore\n | EvaluationScore[]\n | Promise<EvaluationScore | EvaluationScore[]>;\n\nexport type TaskFunction = (input: any) => any | Promise<any>;\n","/**\n * Run Entry Context for Evaluation\n * Provides context management for evaluation run entries\n */\n\nimport { Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { Config } from \"../../config\";\nimport { EvaluationHttpClient } from \"./client\";\nimport { DatasetEntry, EntryStatus, EvaluationScore, Run } from \"./models\";\n\nexport class RunEntryContext {\n private client: EvaluationHttpClient;\n private config: Config;\n readonly evaluationRun: Run;\n readonly entry: DatasetEntry;\n traceId?: string;\n private span?: Span;\n private startTime?: Date;\n\n constructor(\n client: EvaluationHttpClient,\n config: Config,\n run: Run,\n entry: DatasetEntry,\n ) {\n this.client = client;\n this.config = config;\n this.evaluationRun = run;\n this.entry = entry;\n }\n\n /**\n * Get the run associated with this context\n * Alias for evaluationRun for backwards compatibility\n */\n get run(): Run {\n return this.evaluationRun;\n }\n\n /**\n * Start the run entry context\n * Creates a span and posts agent_triggered status\n */\n async start(): Promise<void> {\n this.startTime = new Date();\n\n // Create a span for this entry\n const tracer = trace.getTracer(\"netra.evaluation\");\n this.span = tracer.startSpan(\n `evaluation.run.${this.evaluationRun.id}.entry.${this.entry.id}`,\n {\n kind: SpanKind.INTERNAL,\n attributes: {\n \"netra.evaluation.runId\": this.evaluationRun.id,\n \"netra.evaluation.entryId\": this.entry.id,\n \"netra.evaluation.datasetId\": this.evaluationRun.datasetId,\n },\n },\n );\n\n // Get trace ID from the span\n const spanContext = this.span.spanContext();\n this.traceId = spanContext.traceId;\n\n // Post agent_triggered status using postRunItem\n const payload = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: EntryStatus.AGENT_TRIGGERED,\n };\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n }\n\n /**\n * End the run entry context\n * @param success Whether the entry completed successfully\n * @param scores Optional scores to record\n */\n async end(\n success: boolean = true,\n scores?: EvaluationScore[],\n ): Promise<void> {\n const status = success ? EntryStatus.AGENT_COMPLETED : EntryStatus.FAILED;\n\n // Post completed/failed status using postRunItem\n const payload: Record<string, any> = {\n traceId: this.traceId,\n datasetItemId: this.entry.id,\n status: status,\n };\n\n if (scores) {\n payload.scores = scores;\n }\n\n await this.client.postRunItem(this.evaluationRun.id, payload);\n\n if (this.span) {\n this.span.end();\n }\n }\n\n /**\n * Get the current span\n */\n getSpan(): Span | undefined {\n return this.span;\n }\n\n /**\n * Execute a function within this context\n * Automatically handles start/end and error handling\n */\n async execute<T>(\n fn: (ctx: RunEntryContext) => Promise<T>,\n scores?: EvaluationScore[],\n ): Promise<T> {\n await this.start();\n\n try {\n const result = await fn(this);\n await this.end(true, scores);\n return result;\n } catch (error) {\n await this.end(false);\n throw error;\n }\n }\n}\n","/**\n * Internal HTTP client for Dashboard APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n Scope,\n SessionFilter,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class DashboardHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_DASHBOARD_TIMEOUT\", 30.0);\n }\n\n /**\n * Execute a dynamic query for dashboards\n */\n async queryData(\n scope: Scope,\n chartType: ChartType,\n metrics: Metrics,\n filter: FilterConfig,\n dimension?: Dimension,\n ): Promise<any> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n const payload: Record<string, any> = {\n scope: scope,\n chartType: chartType,\n metrics: {\n measure: metrics.measure,\n aggregation: metrics.aggregation,\n },\n };\n\n // Build filter object\n if (filter) {\n const filterPayload: Record<string, any> = {\n startTime: filter.startTime,\n endTime: filter.endTime,\n groupBy: filter.groupBy,\n };\n\n if (filter.filters && filter.filters.length > 0) {\n filterPayload.filters = filter.filters.map((item) => {\n const filterItem: Record<string, any> = {\n field: item.field,\n operator: item.operator,\n type: item.type,\n value: item.value,\n };\n if (item.key) {\n filterItem.key = item.key;\n }\n return filterItem;\n });\n }\n\n payload.filter = filterPayload;\n }\n\n // Add dimension if provided\n if (dimension) {\n payload.dimension = {\n field: dimension.field,\n };\n }\n\n const response = await this.post(\"/public/dashboard/query-data\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n }\n\n /**\n * Get session statistics with pagination.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n * limit: Maximum number of results per page.\n * page: Page number for pagination.\n * sortField: Field to sort by.\n * sortOrder: Sort order (asc/desc).\n *\n * Returns:\n * The session stats response data or null on error.\n */\n async getSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n limit?: number,\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot get session stats\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/stats\";\n\n const payload: Record<string, any> = {\n startTime,\n endTime,\n };\n\n if (filters && filters.length > 0) {\n payload.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n if (limit !== undefined || cursor !== undefined) {\n payload.pagination = {};\n\n if (limit !== undefined) {\n payload.pagination.limit = limit;\n }\n\n if (cursor !== undefined) {\n payload.pagination.cursor = cursor;\n }\n }\n\n if (sortField !== undefined) {\n payload.sortField = sortField;\n }\n\n if (sortOrder !== undefined) {\n payload.sortOrder = sortOrder;\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.dashboard: Failed to fetch session stats:\", message);\n return null;\n }\n }\n\n /**\n * Get aggregated session metrics including total sessions, costs, latency,\n * and cost breakdown by model.\n *\n * Args:\n * startTime: Start time in ISO 8601 UTC format.\n * endTime: End time in ISO 8601 UTC format.\n * filters: Optional list of session filters.\n *\n * Returns:\n * The session summary response data or null on error.\n */\n async getSessionSummary(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n ): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.dashboard: Dashboard client is not initialized; cannot execute query\",\n );\n return null;\n }\n\n try {\n const url = \"/public/dashboard/sessions/summary\";\n\n const payload: Record<string, any> = {\n filter: {\n startTime,\n endTime,\n },\n };\n\n if (filters && filters.length > 0) {\n payload.filter.filters = filters.map((filter) => ({\n field: filter.field,\n operator: filter.operator,\n type: filter.type,\n value: filter.value,\n }));\n }\n\n const response = await this.post(url, payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n Logger.error(\n `netra.dashboard: Failed to execute dashboard query: ${errorMessage}`,\n );\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\n \"netra.dashboard: Failed to fetch session summary:\",\n message,\n );\n return null;\n }\n }\n}\n","/**\n * Dashboard API Models\n */\n\nexport enum Scope {\n SPANS = \"Spans\",\n TRACES = \"Traces\",\n}\n\nexport enum ChartType {\n LINE_TIME_SERIES = \"Line Time Series\",\n BAR_TIME_SERIES = \"Bar Time Series\",\n HORIZONTAL_BAR = \"Horizontal Bar\",\n VERTICAL_BAR = \"Vertical Bar\",\n PIE = \"Pie\",\n NUMBER = \"Number\",\n}\n\nexport enum Measure {\n LATENCY = \"Latency\",\n ERROR_RATE = \"Error Rate\",\n PII_COUNT = \"PII Count\",\n REQUEST_COUNT = \"Request Count\",\n TOTAL_COST = \"Total Cost\",\n VIOLATIONS = \"Violations\",\n TOTAL_TOKENS = \"Total Tokens\",\n AUDIO_DURATION = \"Audio Duration\",\n CHARACTER_COUNT = \"Character Count\",\n}\n\nexport enum Aggregation {\n AVERAGE = \"Average\",\n P50 = \"p50\",\n P90 = \"p90\",\n P95 = \"p95\",\n P99 = \"p99\",\n MEDIAN = \"Median (p50)\",\n PERCENTAGE = \"Percentage\",\n TOTAL_COUNT = \"Total Count\",\n}\n\nexport enum GroupBy {\n DAY = \"day\",\n HOUR = \"hour\",\n MINUTE = \"minute\",\n}\n\nexport enum DimensionField {\n ENVIRONMENT = \"environment\",\n SERVICE = \"service\",\n MODEL_NAME = \"model_name\",\n}\n\nexport enum Operator {\n EQUALS = \"equals\",\n NOT_EQUALS = \"not_equals\",\n CONTAINS = \"contains\",\n NOT_CONTAINS = \"not_contains\",\n STARTS_WITH = \"starts_with\",\n ENDS_WITH = \"ends_with\",\n GREATER_THAN = \"greater_than\",\n LESS_THAN = \"less_than\",\n GREATER_EQUAL_TO = \"greater_equal_to\",\n LESS_EQUAL_TO = \"less_equal_to\",\n ANY_OF = \"any_of\",\n NONE_OF = \"none_of\",\n}\n\nexport enum FilterType {\n STRING = \"string\",\n NUMBER = \"number\",\n BOOLEAN = \"boolean\",\n ARRAY_OPTIONS = \"arrayOptions\",\n OBJECT = \"object\",\n}\n\nexport enum FilterField {\n TOTAL_COST = \"total_cost\",\n SERVICE = \"service\",\n TENANT_ID = \"tenant_id\",\n USER_ID = \"user_id\",\n SESSION_ID = \"session_id\",\n ENVIRONMENT = \"environment\",\n LATENCY = \"latency\",\n MODEL_NAME = \"model_name\",\n MODELS = \"models\",\n METADATA = \"metadata\",\n}\n\nexport enum SessionFilterField {\n TENANT_ID = \"tenant_id\",\n}\n\nexport enum SessionOperator {\n ANY_OF = \"any_of\",\n}\n\nexport enum SessionFilterType {\n ARRAY = \"arrayOptions\",\n}\n\nexport enum SortField {\n SESSION_ID = \"session_id\",\n START_TIME = \"start_time\",\n TOTAL_REQUESTS = \"totalRequests\",\n TOTAL_COST = \"totalCost\",\n}\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n}\n\n/**\n * Create a metadata filter field\n * @param key The metadata key to filter on\n * @returns The formatted metadata field string\n * @example\n * metadataField(\"customer_tier\") // returns \"metadata['customer_tier']\"\n */\nexport function metadataField(key: string): string {\n return `metadata['${key}']`;\n}\n\nexport interface Filter {\n field: FilterField | string;\n operator: Operator;\n type: FilterType;\n value: any;\n key?: string;\n}\n\nexport interface Metrics {\n measure: Measure;\n aggregation: Aggregation;\n}\n\nexport interface Dimension {\n field: DimensionField;\n}\n\nexport interface FilterConfig {\n startTime: string;\n endTime: string;\n groupBy: GroupBy;\n filters?: Filter[];\n}\n\nexport interface TimeRange {\n startTime: string;\n endTime: string;\n}\n\nexport interface TimeSeriesDataPoint {\n date: string;\n value: number;\n}\n\nexport interface DimensionValue {\n dimension: string;\n value: number;\n}\n\nexport interface TimeSeriesWithDimension {\n date: string;\n values: DimensionValue[];\n}\n\nexport interface TimeSeriesResponse {\n timeSeries: TimeSeriesWithDimension[];\n dimensions: string[];\n}\n\nexport interface CategoricalDataPoint {\n dimension: string;\n value: number;\n}\n\nexport interface NumberResponse {\n value: number;\n}\n\nexport type DashboardData =\n | TimeSeriesDataPoint[]\n | TimeSeriesResponse\n | CategoricalDataPoint[]\n | NumberResponse\n | Record<string, any>;\n\nexport interface QueryResponse {\n timeRange: TimeRange;\n data: DashboardData;\n}\n\nexport interface QueryDataParams {\n scope: Scope;\n chartType: ChartType;\n metrics: Metrics;\n filter: FilterConfig;\n dimension?: Dimension;\n}\n\n//Sessions\nexport interface SessionFilter {\n field: SessionFilterField;\n operator: SessionOperator;\n type: SessionFilterType;\n value: string[];\n}\n\nexport interface SessionStatsResult {\n data: SessionStatsData[];\n hasNextPage: boolean;\n nextCursor?: string;\n}\n\nexport interface SessionFilterConfig {\n startTime: string;\n endTime: string;\n filters?: SessionFilter[];\n}\n\nexport interface SessionStatsData {\n session_id: string;\n session_start_time: string;\n totalRequests: number;\n totalCost: number;\n session_duration: string;\n cursor: string;\n}\n","/**\n * Public Dashboard API\n * Exposed as Netra.dashboard\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { DashboardHttpClient } from \"./client\";\nimport {\n ChartType,\n Dimension,\n FilterConfig,\n Metrics,\n QueryDataParams,\n QueryResponse,\n Scope,\n SessionFilter,\n SessionFilterConfig,\n SessionStatsData,\n SessionStatsResult,\n SortField,\n SortOrder,\n} from \"./models\";\n\nexport class Dashboard {\n private config: Config;\n private client: DashboardHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new DashboardHttpClient(config);\n }\n\n /**\n * Execute a dynamic query for dashboards to retrieve metrics and time-series data\n * @param params Query parameters\n * @returns Query response containing timeRange and data, or null on error\n */\n async queryData(params: QueryDataParams): Promise<QueryResponse | null> {\n // Validate parameters\n if (!this.isValidScope(params.scope)) {\n throw new TypeError(\n `scope must be a Scope value, got ${typeof params.scope}`,\n );\n }\n if (!this.isValidChartType(params.chartType)) {\n throw new TypeError(\n `chartType must be a ChartType value, got ${typeof params.chartType}`,\n );\n }\n if (!this.isValidMetrics(params.metrics)) {\n throw new TypeError(\n `metrics must be a Metrics object, got ${typeof params.metrics}`,\n );\n }\n if (!this.isValidFilterConfig(params.filter)) {\n throw new TypeError(\n `filter must be a FilterConfig object, got ${typeof params.filter}`,\n );\n }\n if (\n params.dimension !== undefined &&\n !this.isValidDimension(params.dimension)\n ) {\n throw new TypeError(\n `dimension must be a Dimension object or undefined, got ${typeof params.dimension}`,\n );\n }\n\n const result = await this.client.queryData(\n params.scope,\n params.chartType,\n params.metrics,\n params.filter,\n params.dimension,\n );\n\n return result;\n }\n \nasync getSessionStats(\n startTime: string,\n endTime: string,\n limit: number = 10,\n filters?: SessionFilter[],\n cursor?: string,\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): Promise<SessionStatsResult | null> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session stats\",\n );\n return null;\n }\n\n const result = await this.client.getSessionStats(\n startTime,\n endTime,\n filters,\n limit,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return null;\n }\n\n const data = result.data ?? {};\n const sessionStats = data.sessions ?? [];\n const pageInfo = data.pageInfo ?? {};\n\n const hasNextPage = Boolean(pageInfo.hasNextPage);\n \n let nextCursor: string | undefined = undefined;\n if (sessionStats.length > 0) {\n const lastItem = sessionStats[sessionStats.length - 1];\n nextCursor = lastItem.cursor;\n }\n\n return {\n data: sessionStats,\n hasNextPage,\n nextCursor,\n };\n }\n\n async *iterSessionStats(\n startTime: string,\n endTime: string,\n filters?: SessionFilter[],\n sortField?: SortField,\n sortOrder?: SortOrder,\n ): AsyncGenerator<SessionStatsData, void, unknown> {\n if (!startTime || !endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to iterate session stats\",\n );\n return;\n }\n\n let cursor: string | undefined = undefined;\n\n while (true) {\n const result = await this.getSessionStats(\n startTime,\n endTime,\n undefined,\n filters,\n cursor,\n sortField,\n sortOrder,\n );\n\n if (!result) {\n return;\n }\n\n for (const session of result.data) {\n yield session;\n }\n\n if (!result.hasNextPage) {\n break;\n }\n\n cursor = result.nextCursor;\n }\n }\n\n async getSessionSummary(filter: SessionFilterConfig): Promise<any | null> {\n if (!this.isSessionFilterConfig(filter)) {\n Logger.error(\"netra.dashboard: filter must be a SessionFilterConfig\");\n return null;\n }\n\n if (!filter.startTime || !filter.endTime) {\n Logger.error(\n \"netra.dashboard: start_time and end_time are required to fetch session summary\",\n );\n return null;\n }\n\n const result = await this.client.getSessionSummary(\n filter.startTime,\n filter.endTime,\n filter.filters,\n );\n\n if (!result) {\n return null;\n }\n\n return result.data ?? {};\n }\n\n private isValidScope(scope: any): scope is Scope {\n return Object.values(Scope).includes(scope);\n }\n\n private isValidChartType(chartType: any): chartType is ChartType {\n return Object.values(ChartType).includes(chartType);\n }\n\n private isValidMetrics(metrics: any): metrics is Metrics {\n return (\n metrics &&\n typeof metrics === \"object\" &&\n \"measure\" in metrics &&\n \"aggregation\" in metrics\n );\n }\n\n private isValidFilterConfig(filter: any): filter is FilterConfig {\n return (\n filter &&\n typeof filter === \"object\" &&\n \"startTime\" in filter &&\n \"endTime\" in filter &&\n \"groupBy\" in filter\n );\n }\n\n private isValidDimension(dimension: any): dimension is Dimension {\n return dimension && typeof dimension === \"object\" && \"field\" in dimension;\n }\n\n private isSessionFilterConfig(value: unknown): value is SessionFilterConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"startTime\" in value &&\n \"endTime\" in value\n );\n }\n}\n","/**\n * Internal HTTP client for Prompts APIs\n */\n\nimport { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { NetraHttpClient } from \"../http-client\";\n\nexport class PromptsHttpClient extends NetraHttpClient {\n constructor(config: Config) {\n super(config, \"NETRA_PROMPTS_TIMEOUT\", 30.0);\n }\n\n /**\n * Fetch prompt version from backend\n */\n async getPromptVersion(name: string, label: string): Promise<any | null> {\n if (!this.isInitialized()) {\n Logger.error(\n \"netra.prompts: Prompts client is not initialized; cannot fetch prompt\",\n );\n return null;\n }\n\n try {\n const payload = {\n promptName: name,\n label: label,\n };\n\n const response = await this.post(\"/sdk/prompts/version\", payload);\n\n if (!response.ok) {\n const errorMessage = response.data?.error?.message ?? \"Unknown error\";\n\n Logger.error(`netra.prompts: Failed to fetch prompt: ${errorMessage}`);\n\n return null;\n }\n\n return response.data;\n } catch (err: any) {\n const message = err?.response?.data?.error?.message ?? \"\";\n\n Logger.error(\"netra.prompts: Failed to fetch prompt:\", message);\n\n return null;\n }\n }\n}\n","import { Config } from \"../../config\";\nimport { Logger } from \"../../logger\";\nimport { PromptsHttpClient } from \"./client\";\nimport { GetPromptParams, PromptResponse } from \"./models\";\n\nexport class Prompts {\n private config: Config;\n private client: PromptsHttpClient;\n\n constructor(config: Config) {\n this.config = config;\n this.client = new PromptsHttpClient(config);\n }\n\n /**\n * Fetch prompt version by name and label.\n *\n * @param params.name - Name of the prompt (required)\n * @param params.label - Label of the prompt version (default: \"production\")\n */\n async getPrompt(params: GetPromptParams): Promise<PromptResponse | null> {\n if (!params || typeof params.name !== \"string\" || !params.name) {\n Logger.error(\"netra.prompts: name is required to fetch a prompt\");\n return null;\n }\n\n const label = params.label ?? \"production\";\n const result = await this.client.getPromptVersion(params.name, label);\n\n if (!result) {\n return null;\n }\n\n return result.data ?? null;\n }\n}\n","/**\n * Attribute Size Limit Span Processor\n *\n * Enforces a hard max length on every span attribute value via setAttribute\n * wrapping in onStart. Prevents \"entity too large\" errors during export.\n */\n\nimport { AttributeValue, Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\nconst DEFAULT_MAX_ATTRIBUTE_SIZE = 32_000; // 32KB per attribute\n\ntype SetAttributeFn = (key: string, value: AttributeValue) => Span;\n\nexport class AttributeSizeLimitProcessor implements SpanProcessor {\n private maxAttributeSize: number;\n\n constructor(maxAttributeSize?: number) {\n this.maxAttributeSize = maxAttributeSize ?? DEFAULT_MAX_ATTRIBUTE_SIZE;\n }\n\n onStart(span: Span, _parentContext: Context): void {\n try {\n this._wrapSetAttribute(span);\n } catch (e) {\n Logger.debug(\"AttributeSizeLimitProcessor.onStart error:\", e);\n }\n }\n\n onEnd(_span: ReadableSpan): void {}\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _wrapSetAttribute(span: Span): void {\n const original: SetAttributeFn = span.setAttribute.bind(span);\n const maxLen = this.maxAttributeSize;\n\n const patched = (key: string, value: AttributeValue): Span => {\n try {\n return original(key, truncateValue(value, maxLen) as AttributeValue);\n } catch {\n try {\n return original(key, value);\n } catch {\n return span;\n }\n }\n };\n\n (span as any).setAttribute = patched;\n }\n}\n\nfunction truncateValue(value: unknown, maxLen: number): unknown {\n if (typeof value === \"string\") {\n return value.length > maxLen ? value.substring(0, maxLen) : value;\n }\n\n if (Array.isArray(value)) {\n const serialized = JSON.stringify(value);\n if (serialized.length > maxLen) {\n return serialized.substring(0, maxLen);\n }\n return value;\n }\n\n return value;\n}\n","/**\n * Instrumentation Span Processor\n * \n * OpenTelemetry span processor that:\n * 1. Records the raw instrumentation scope name for each span\n * 2. Truncates attribute values to prevent oversized payloads\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\n// Allowed instrumentation names that we recognize and tag\nconst ALLOWED_INSTRUMENTATION_NAMES = new Set([\n \"openai\",\n \"openai_agents\",\n \"groq\",\n \"mistral_ai\",\n \"mistralai\",\n \"google_genai\",\n \"langchain\",\n \"llama_index\",\n \"pinecone\",\n \"qdrant\",\n \"chromadb\",\n \"together\",\n \"vertexai\",\n \"cohere_ai\",\n \"litellm\",\n \"dspy\",\n \"pydantic_ai\",\n \"weaviate_db\",\n \"fastapi\",\n \"adk\",\n \"httpx\",\n \"aiohttp\",\n \"undici\",\n \"fetch\",\n \"cerebras\",\n \"deepgram\",\n \"cartesia\",\n \"elevenlabs\",\n]);\n\nexport class InstrumentationSpanProcessor implements SpanProcessor {\n private maxAttributeLength: number;\n\n constructor(maxAttributeLength?: number) {\n this.maxAttributeLength = maxAttributeLength ?? Config.ATTRIBUTE_MAX_LEN;\n }\n\n /**\n * Detect the raw instrumentation name from the span's instrumentation scope.\n */\n private detectRawInstrumentationName(span: Span): string | null {\n try {\n // Access the instrumentation scope from the span\n // In JS SDK, this is typically available via the span's internal properties\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n\n if (scope) {\n const name = scope.name;\n if (typeof name === \"string\" && name) {\n // Extract the base name from fully qualified names\n if (\n name.startsWith(\"opentelemetry.instrumentation.\") ||\n name.startsWith(\"netra.instrumentation.\") ||\n name.startsWith(\"@opentelemetry/instrumentation-\") ||\n name.startsWith(\"@traceloop/instrumentation-\")\n ) {\n try {\n // Get the last segment\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n } catch {\n // Fall through to return the full name\n }\n }\n return name;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n }\n\n /**\n * Truncate a value to the maximum allowed length.\n * Handles strings, bytes, and recursively handles lists and objects.\n */\n private truncateValue(value: unknown): unknown {\n try {\n if (typeof value === \"string\") {\n return value.length <= this.maxAttributeLength\n ? value\n : value.substring(0, this.maxAttributeLength);\n }\n\n if (Array.isArray(value)) {\n return value.map((v) =>\n typeof v === \"string\" ? this.truncateValue(v) : v\n );\n }\n\n if (typeof value === \"object\" && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = typeof v === \"string\" ? this.truncateValue(v) : v;\n }\n return result;\n }\n } catch {\n return value;\n }\n return value;\n }\n\n /**\n * Called when a span starts. Wraps setAttribute to truncate values\n * and records the instrumentation name.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Wrap setAttribute to truncate values\n const originalSetAttribute = span.setAttribute.bind(span);\n\n span.setAttribute = (key: string, value: unknown): Span => {\n try {\n const truncated = this.truncateValue(value);\n return originalSetAttribute(key, truncated as any);\n } catch {\n // Best-effort; never break span\n try {\n return originalSetAttribute(key, value as any);\n } catch {\n return span;\n }\n }\n };\n\n // Set instrumentation name attribute\n const name = this.detectRawInstrumentationName(span);\n if (name && ALLOWED_INSTRUMENTATION_NAMES.has(name.toLowerCase())) {\n span.setAttribute(`${Config.LIBRARY_NAME}.instrumentation.name`, name);\n }\n } catch (e) {\n Logger.error(\n \"InstrumentationSpanProcessor: Error on span start:\",\n e\n );\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","import { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\nimport { RootSpanProcessor } from \"./root-span-processor\";\n\n/**\n * Marks the root span of any trace that contains at least one LLM call with\n * `netra.trace.llm.call = true`.\n *\n * Root span resolution is delegated to RootSpanProcessor, which must be\n * registered AFTER this processor in the chain so that its on_end cleanup\n * runs after this processor has finished annotating the root span.\n */\nexport class LlmTraceIdentifierSpanProcessor implements SpanProcessor {\n static DEFAULT_REQUEST_MODEL_KEY = \"gen_ai.request.model\";\n static DEFAULT_RESPONSE_MODEL_KEY = \"gen_ai.response.model\";\n static DEFAULT_ROOT_MARKER_KEY = \"netra.trace.llm.call\";\n\n private readonly _requestModelKey: string;\n private readonly _responseModelKey: string;\n private readonly _rootMarkerKey: string;\n\n // Tracks which traces have already been marked to avoid redundant writes\n private readonly _markedTraces = new Set<string>();\n\n constructor(\n requestModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_REQUEST_MODEL_KEY,\n responseModelAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_RESPONSE_MODEL_KEY,\n rootMarkerAttributeKey = LlmTraceIdentifierSpanProcessor.DEFAULT_ROOT_MARKER_KEY,\n ) {\n if (!requestModelAttributeKey || !responseModelAttributeKey || !rootMarkerAttributeKey) {\n throw new Error(\"Attribute keys cannot be empty\");\n }\n this._requestModelKey = requestModelAttributeKey;\n this._responseModelKey = responseModelAttributeKey;\n this._rootMarkerKey = rootMarkerAttributeKey;\n }\n\n onStart(_span: Span, _parentContext: Context): void {\n // Root span tracking is owned by RootSpanProcessor\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const spanCtx = span.spanContext();\n if (!spanCtx || !trace.isSpanContextValid(spanCtx)) return;\n\n const { traceId, spanId } = spanCtx;\n\n // When the root span ends, clean up local state and stop processing\n if (RootSpanProcessor.isRootSpanForTrace(traceId, spanId)) {\n this._markedTraces.delete(traceId);\n return;\n }\n\n if (this._markedTraces.has(traceId)) return;\n if (!this._isLlmSpan(span)) return;\n\n this._markRootSpan(traceId);\n } catch (e) {\n Logger.warn(\"LlmTraceIdentifierSpanProcessor: error in onEnd:\", e);\n }\n }\n\n shutdown(): Promise<void> {\n this._markedTraces.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _isLlmSpan(span: ReadableSpan): boolean {\n const attrs = span.attributes;\n if (!attrs) return false;\n return (\n Object.prototype.hasOwnProperty.call(attrs, this._requestModelKey) ||\n Object.prototype.hasOwnProperty.call(attrs, this._responseModelKey)\n );\n }\n\n private _markRootSpan(traceId: string): void {\n const root = RootSpanProcessor.getRootSpanByTraceId(traceId);\n this._markedTraces.add(traceId);\n if (!root) return;\n if (!root.isRecording()) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: root span for trace ${traceId} is not recording`);\n return;\n }\n try {\n root.setAttribute(this._rootMarkerKey, true);\n } catch (e) {\n Logger.warn(`LlmTraceIdentifierSpanProcessor: failed to mark root span for trace ${traceId}:`, e);\n }\n }\n}\n","/**\n * Scrubbing Span Processor\n *\n * OpenTelemetry span processor that scrubs sensitive data from span attributes.\n * This includes API keys, emails, phone numbers, SSNs, credit cards, passwords,\n * bearer tokens, and other sensitive information.\n */\n\nimport { Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\n// Sensitive patterns for data detection (based on pydantic logfire scrubbing)\nconst SENSITIVE_PATTERNS: Record<string, RegExp> = {\n // API keys - scrub \"Token: <value>\" or sk-... tokens\n api_key: new RegExp(\n \"(?:Token:\\\\s*\\\\S{32,})\" + // Token: <32+ chars>\n \"|(?:sk-[A-Za-z0-9]{16,})\", // sk-... tokens\n \"g\",\n ),\n // Email addresses\n email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/gi,\n // Phone numbers (US format)\n phone: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}/g,\n // Credit cards (Visa, Mastercard, Amex, Discover)\n credit_card:\n /(?<!\\d)(?:4\\d{15}|5[1-5]\\d{14}|3[47]\\d{13}|6(?:011|5\\d{2})\\d{12})(?!\\d)/g,\n // Social Security Numbers\n ssn: /\\b\\d{3}-?\\d{2}-?\\d{4}\\b/g,\n // Password patterns\n password: /(?:password|passwd|pwd|secret|token)\\s*[:=]\\s*\\S+/gi,\n // Bearer tokens\n bearer_token: /(?:authorization:\\s*)?bearer\\s+[A-Za-z0-9\\-._~+/]+=*/gi,\n // Authorization headers\n authorization: /authorization\\s*:\\s*\\S+/gi,\n};\n\n// Generic pattern for long digit sequences (credit/debit cards)\nconst LONG_DIGIT_PATTERN = /(?<!\\d)\\d{13,19}(?!\\d)/g;\n\n// Sensitive attribute keys that should have their values scrubbed\nconst SENSITIVE_KEYS = new Set([\n \"password\",\n \"passwd\",\n \"pwd\",\n \"secret\",\n \"key\",\n \"api_key\",\n \"auth\",\n \"authorization\",\n \"bearer\",\n \"credential\",\n \"private_key\",\n \"access_token\",\n \"refresh_token\",\n \"session_token\",\n \"x-api-key\",\n \"x-auth-token\",\n \"cookie\",\n \"set-cookie\",\n \"span\",\n]);\n\nconst SCRUB_REPLACEMENT = \"[SCRUBBED]\";\n\nexport class ScrubbingSpanProcessor implements SpanProcessor {\n /**\n * Check if a key is considered sensitive.\n */\n private isSensitiveKey(key: string): boolean {\n const keyLower = key.toLowerCase();\n for (const sensitiveKey of SENSITIVE_KEYS) {\n if (keyLower.includes(sensitiveKey)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrub sensitive patterns from a string value.\n */\n private scrubStringValue(value: string): string {\n let scrubbed = value;\n\n // Early catch-all for contiguous 13-19 digit sequences (credit/debit cards)\n scrubbed = scrubbed.replace(LONG_DIGIT_PATTERN, SCRUB_REPLACEMENT);\n\n // Apply all sensitive patterns\n for (const pattern of Object.values(SENSITIVE_PATTERNS)) {\n // Reset lastIndex for global patterns\n pattern.lastIndex = 0;\n if (pattern.test(scrubbed)) {\n pattern.lastIndex = 0;\n scrubbed = scrubbed.replace(pattern, SCRUB_REPLACEMENT);\n }\n }\n\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a dictionary value.\n */\n private scrubDictValue(\n value: Record<string, unknown>,\n ): Record<string, unknown> {\n const scrubbed: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const [, scrubbedValue] = this.scrubKeyValue(k, v);\n scrubbed[k] = scrubbedValue;\n }\n return scrubbed;\n }\n\n /**\n * Recursively scrub sensitive data from a list value.\n */\n private scrubListValue(value: unknown[]): unknown[] {\n return value.map((item) => {\n if (typeof item === \"string\") {\n return this.scrubStringValue(item);\n } else if (Array.isArray(item)) {\n return this.scrubListValue(item);\n } else if (typeof item === \"object\" && item !== null) {\n return this.scrubDictValue(item as Record<string, unknown>);\n }\n return item;\n });\n }\n\n /**\n * Scrub sensitive data from a key-value pair.\n */\n private scrubKeyValue(key: string, value: unknown): [string, unknown] {\n // Check if key itself is sensitive and value is a simple type\n if (\n this.isSensitiveKey(key) &&\n typeof value !== \"object\" &&\n !Array.isArray(value)\n ) {\n return [key, SCRUB_REPLACEMENT];\n }\n\n // Scrub value based on its type\n if (typeof value === \"string\") {\n return [key, this.scrubStringValue(value)];\n } else if (Array.isArray(value)) {\n return [key, this.scrubListValue(value)];\n } else if (typeof value === \"object\" && value !== null) {\n return [key, this.scrubDictValue(value as Record<string, unknown>)];\n }\n\n return [key, value];\n }\n\n /**\n * Called when a span starts. No-op for this processor.\n */\n onStart(span: Span, parentContext: Context): void {\n // No-op - scrubbing happens on span end\n }\n\n /**\n * Called when a span ends. Scrubs sensitive data from span attributes.\n */\n onEnd(span: ReadableSpan): void {\n try {\n // Get span attributes - we need to access the internal attributes\n const spanAny = span as any;\n const attributes = spanAny.attributes || spanAny._attributes;\n\n if (attributes && typeof attributes === \"object\") {\n const scrubbedAttributes: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(attributes)) {\n const [, scrubbedValue] = this.scrubKeyValue(key, value);\n scrubbedAttributes[key] = scrubbedValue;\n }\n\n // Replace attributes with scrubbed versions\n // This works because ReadableSpan is actually a reference to the span object\n if (spanAny._attributes) {\n spanAny._attributes = scrubbedAttributes;\n } else if (spanAny.attributes) {\n // Some implementations use different property names\n Object.keys(spanAny.attributes).forEach(\n (k) => delete spanAny.attributes[k],\n );\n Object.assign(spanAny.attributes, scrubbedAttributes);\n }\n }\n } catch (e) {\n Logger.error(\"ScrubbingSpanProcessor: Error scrubbing attributes:\", e);\n }\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Session Span Processor\n *\n * OpenTelemetry span processor that automatically adds session attributes to spans.\n * This includes session_id, user_id, tenant_id from OpenTelemetry baggage, and entity context\n * (workflow, task, agent names) from SessionManager.\n *\n * Uses OpenTelemetry's baggage API for automatic context propagation across async boundaries.\n */\n\nimport { context, Context, propagation, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SessionManager } from \"../session-manager\";\n\n/**\n * Get the registered OTel context manager.\n * Skips NOOP_CONTEXT_MANAGER (returned when nothing is registered) and falls back\n * to inspecting the OTel global state to handle multiple @opentelemetry/api instances.\n */\nfunction getContextManager(): any {\n try {\n // 1. Try the ContextAPI's delegate — but only if it's a real manager (has _asyncLocalStorage)\n if ((context as any)._getContextManager) {\n const manager = (context as any)._getContextManager();\n if (manager?._asyncLocalStorage != null) {\n return manager;\n }\n }\n\n // 2. Fallback: read from OTel's globalThis symbol — handles multiple @opentelemetry/api copies.\n // OTel stores { context: ContextAPI, ... } keyed by Symbol('opentelemetry.js.api.<version>').\n // The registered context manager lives at ContextAPI._delegate.\n const globalSymbols = Object.getOwnPropertySymbols(globalThis);\n const otelSymbol = globalSymbols.find(s => s.toString().includes('opentelemetry.js.api'));\n if (otelSymbol) {\n const delegate = (globalThis as any)[otelSymbol]?.context?._delegate;\n if (delegate?._asyncLocalStorage != null) {\n return delegate;\n }\n }\n\n return null;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Binds newContext as the active context for the current async resource,\n * equivalent to Python's otel_context.attach(ctx).\n */\nfunction safeEnterWith(newContext: Context): void {\n const contextManager = getContextManager();\n\n if (!contextManager) {\n return;\n }\n\n // AsyncLocalStorageContextManager v2.x has no direct enterWith — go through _asyncLocalStorage\n if (typeof contextManager._asyncLocalStorage?.enterWith === 'function') {\n contextManager._asyncLocalStorage.enterWith(newContext);\n return;\n }\n\n // Future-proof: some managers may expose enterWith directly\n if (typeof contextManager.enterWith === 'function') {\n contextManager.enterWith(newContext);\n return;\n }\n\n Logger.warn(\"SessionSpanProcessor: enterWith not available on context manager; baggage will not propagate.\");\n}\n\n/**\n * Persistent store for session values (session_id, user_id, tenant_id, etc.).\n *\n * OTel's context.with() / asyncLocalStorage.run() creates isolated scopes — enterWith()\n * inside a span's callback does not propagate to sibling spans started after it. This map\n * lives outside any async scope so values set anywhere (pre-init, inside a span, etc.)\n * are visible to all subsequent spans. OTel baggage from parentContext still takes\n * precedence in onStart to honour cross-process propagated values.\n */\nconst sessionValues = new Map<string, string>();\n\n/**\n * Set a session baggage value using OpenTelemetry's baggage API\n * This automatically propagates across async boundaries via AsyncLocalStorage\n */\nexport function setSessionBaggage(key: string, value: string): void {\n // Always persist in the module-level store — survives run() scope boundaries\n sessionValues.set(key, value);\n\n // Best-effort: also push into OTel baggage for cross-process propagation\n try {\n const currentBaggage = propagation.getBaggage(context.active()) || propagation.createBaggage();\n const newBaggage = currentBaggage.setEntry(key, { value });\n const newContext = propagation.setBaggage(context.active(), newBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n // non-fatal — sessionValues is the primary in-process store\n }\n}\n\n/**\n * Get a session baggage value — checks OTel baggage first, then the persistent store.\n */\nexport function getSessionBaggage(key: string): string | undefined {\n try {\n return propagation.getBaggage(context.active())?.getEntry(key)?.value ?? sessionValues.get(key);\n } catch (e) {\n return sessionValues.get(key);\n }\n}\n\n/**\n * Clear all session baggage from the current context\n */\nexport function clearSessionBaggage(): void {\n sessionValues.clear();\n try {\n const emptyBaggage = propagation.createBaggage();\n const newContext = propagation.setBaggage(context.active(), emptyBaggage);\n safeEnterWith(newContext);\n } catch (e) {\n Logger.warn(\"SessionSpanProcessor: Failed to clear baggage:\", e);\n }\n}\n\nexport class SessionSpanProcessor implements SpanProcessor {\n private readonly environment: string;\n\n constructor(environment: string = \"local\") {\n this.environment = environment;\n }\n\n /**\n * Called when a span starts. Adds session and entity context attributes.\n */\n onStart(span: Span, parentContext: Context): void {\n try {\n // Add library metadata\n span.setAttribute(\"library.name\", Config.LIBRARY_NAME);\n span.setAttribute(\"library.version\", Config.LIBRARY_VERSION);\n span.setAttribute(\"sdk.name\", Config.SDK_NAME);\n // Intentional: set per-span in addition to OTEL_RESOURCE_ATTRIBUTES\n // because this processor may be added to a pre-existing TracerProvider\n // whose Resource was already frozen without these attributes.\n span.setAttribute(\"deployment.environment\", this.environment);\n\n // Get baggage from the parent context (or current if not provided)\n const ctxToUse = parentContext || context.active();\n const baggage = propagation.getBaggage(ctxToUse);\n\n // Add session context — OTel baggage (cross-process) takes precedence, then persistent store\n const sessionId = baggage?.getEntry(\"session_id\")?.value ?? sessionValues.get(\"session_id\");\n const userId = baggage?.getEntry(\"user_id\")?.value ?? sessionValues.get(\"user_id\");\n const tenantId = baggage?.getEntry(\"tenant_id\")?.value ?? sessionValues.get(\"tenant_id\");\n\n if (sessionId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.session_id`, sessionId);\n }\n if (userId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.user_id`, userId);\n }\n if (tenantId) {\n span.setAttribute(`${Config.LIBRARY_NAME}.tenant_id`, tenantId);\n }\n\n // Add custom attributes from baggage\n const customKeys = baggage?.getEntry(\"custom_keys\")?.value;\n if (customKeys) {\n for (const key of customKeys.split(\",\")) {\n const value = baggage?.getEntry(`custom.${key}`)?.value;\n if (value) {\n span.setAttribute(`${Config.LIBRARY_NAME}.custom.${key}`, value);\n }\n }\n }\n\n // Add entity attributes from SessionManager (workflow, task, agent context)\n const entityAttributes = SessionManager.getCurrentEntityAttributes();\n for (const [attrKey, attrValue] of Object.entries(entityAttributes)) {\n span.setAttribute(attrKey, attrValue);\n }\n } catch (e) {\n Logger.error(\"SessionSpanProcessor: Error setting span attributes:\", e);\n }\n }\n\n /**\n * Called when a span ends. No-op for this processor.\n */\n onEnd(_span: ReadableSpan): void {\n // No-op\n }\n\n /**\n * Shuts down the processor.\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Forces a flush of any pending spans.\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n","/**\n * Root Instrument Filter Processor\n *\n * Blocks root spans (and their entire subtree) from instrumentations not in\n * the allowed root_instruments set. Tracking is trace-ID-based: when a root\n * span is blocked, its trace_id is recorded and all subsequent spans sharing\n * that trace_id are blocked as well.\n *\n * This guarantees correct propagation even in async frameworks where a parent\n * span may end before all children have started.\n */\n\nimport { Context, Span, trace } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\nconst LOCAL_BLOCKED_ATTR = \"netra.local_blocked\";\n\nconst INSTRUMENTATION_PREFIXES = [\n \"opentelemetry.instrumentation.\",\n \"netra.instrumentation.\",\n \"@opentelemetry/instrumentation-\",\n \"@traceloop/instrumentation-\",\n];\n\nconst MAX_BLOCKED_TRACES = 4096;\nconst BLOCKED_TRACE_TTL_MS = 600_000; // 600 seconds\n\ninterface BlockedEntry {\n timestamp: number;\n}\n\nexport class RootInstrumentFilterProcessor implements SpanProcessor {\n private readonly _allowed: Set<string>;\n private readonly _blockedTraceIds: Map<string, BlockedEntry> = new Map();\n\n constructor(allowedRootInstrumentNames: Set<string>) {\n this._allowed = new Set(allowedRootInstrumentNames);\n }\n\n onStart(span: Span, parentContext: Context): void {\n try {\n this._processSpanStart(span, parentContext);\n } catch {\n // Best-effort; never break span pipeline\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n this._evictStaleTraces();\n } catch {\n // no-op\n }\n }\n\n shutdown(): Promise<void> {\n this._blockedTraceIds.clear();\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _processSpanStart(span: Span, parentContext: Context): void {\n const parentSpanId = this._resolveParentSpanId(parentContext)\n ?? this._getParentSpanIdFromSpan(span);\n\n const isChild = parentSpanId !== null && parentSpanId !== \"0000000000000000\";\n\n if (isChild) {\n this._maybeBlockChild(span);\n } else {\n this._maybeBlockRoot(span);\n }\n }\n\n private _maybeBlockChild(span: Span): void {\n const traceId = this._getTraceId(span);\n if (!traceId) {\n return;\n }\n if (this._blockedTraceIds.has(traceId)) {\n this._markBlocked(span);\n }\n }\n\n private _maybeBlockRoot(span: Span): void {\n if (!this._isFromInstrumentationLibrary(span)) {\n return;\n }\n\n const instrName = this._extractInstrumentationName(span);\n if (instrName === null || this._allowed.has(instrName)) {\n return;\n }\n\n const traceId = this._getTraceId(span);\n if (traceId) {\n this._blockedTraceIds.set(traceId, { timestamp: Date.now() });\n this._evictOverflow();\n }\n this._markBlocked(span);\n }\n\n private _resolveParentSpanId(parentContext: Context): string | null {\n const parentSpan = trace.getSpan(parentContext);\n if (!parentSpan) {\n return null;\n }\n const sc = parentSpan.spanContext();\n if (!sc || sc.spanId === \"0000000000000000\") {\n return null;\n }\n return sc.spanId;\n }\n\n private _getParentSpanIdFromSpan(span: Span): string | null {\n const spanAny = span as any;\n const parent = spanAny.parentSpanId ?? spanAny.parent?.spanId ?? null;\n if (!parent || parent === \"0000000000000000\") {\n return null;\n }\n return parent;\n }\n\n private _getTraceId(span: Span | ReadableSpan): string | null {\n try {\n const ctx = (span as any).spanContext?.() ?? (span as any).context;\n if (ctx) {\n return ctx.traceId ?? null;\n }\n } catch {\n // no-op\n }\n return null;\n }\n\n private _markBlocked(span: Span): void {\n try {\n span.setAttribute(LOCAL_BLOCKED_ATTR, true);\n } catch {\n // no-op\n }\n }\n\n private _isFromInstrumentationLibrary(span: Span): boolean {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return false;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return false;\n }\n return INSTRUMENTATION_PREFIXES.some((prefix) => name.startsWith(prefix));\n }\n\n private _extractInstrumentationName(span: Span): string | null {\n const spanAny = span as any;\n const scope =\n spanAny.instrumentationLibrary || spanAny.instrumentationScope;\n if (!scope) {\n return null;\n }\n const name: unknown = scope.name;\n if (typeof name !== \"string\" || !name) {\n return null;\n }\n for (const prefix of INSTRUMENTATION_PREFIXES) {\n if (name.startsWith(prefix)) {\n const segments = name.split(/[./\\-]/);\n const base = segments[segments.length - 1]?.trim();\n if (base) {\n return base;\n }\n }\n }\n return name;\n }\n\n private _evictStaleTraces(): void {\n const cutoff = Date.now() - BLOCKED_TRACE_TTL_MS;\n for (const [traceId, entry] of this._blockedTraceIds) {\n if (entry.timestamp > cutoff) {\n break;\n }\n this._blockedTraceIds.delete(traceId);\n }\n }\n\n private _evictOverflow(): void {\n while (this._blockedTraceIds.size > MAX_BLOCKED_TRACES) {\n const first = this._blockedTraceIds.keys().next().value;\n if (first !== undefined) {\n this._blockedTraceIds.delete(first);\n } else {\n break;\n }\n }\n }\n}\n","import { AttributeValue, Context, Span } from \"@opentelemetry/api\";\nimport { ReadableSpan, SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../logger\";\n\nconst _PROMPT_RE = /^gen_ai\\.prompts?\\.(\\d+)\\.(role|content)$/;\nconst _COMPLETION_RE = /^gen_ai\\.completions?\\.(\\d+)\\.(role|content)$/;\n\nconst _TRACELOOP_PREFIX = \"traceloop.\";\nconst _NETRA_PREFIX = \"netra.\";\n\nconst _USAGE_INPUT_TOKENS = \"gen_ai.usage.input_tokens\";\nconst _USAGE_PROMPT_TOKENS = \"gen_ai.usage.prompt_tokens\";\nconst _USAGE_OUTPUT_TOKENS = \"gen_ai.usage.output_tokens\";\nconst _USAGE_COMPLETION_TOKENS = \"gen_ai.usage.completion_tokens\";\n\nconst NETRA_USER_INPUT = \"netra.user.input\";\nconst NETRA_USER_OUTPUT = \"netra.user.output\";\n\nconst NETRA_ENTITY_INPUT = \"netra.entity.input\";\nconst NETRA_ENTITY_OUTPUT = \"netra.entity.output\";\n\nconst MAX_PARSE_LEN = 1_000_000;\n\ntype SetAttributeFn = (key: string, value: AttributeValue) => Span;\n\nfunction buildMessages(indexMap: Map<number, Record<string, string>>): string {\n const sorted = Array.from(indexMap.keys()).sort((a, b) => a - b);\n return JSON.stringify(sorted.map((i) => indexMap.get(i)!));\n}\n\nfunction extractTraceloopInput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"inputs\" in parsed\n ? (parsed as Record<string, unknown>).inputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction extractTraceloopOutput(raw: AttributeValue): string {\n try {\n const str = String(raw);\n if (typeof raw === \"string\" && str.length > MAX_PARSE_LEN) return str;\n const parsed = typeof raw === \"string\" ? JSON.parse(raw) : raw;\n const payload =\n parsed && typeof parsed === \"object\" && \"outputs\" in parsed\n ? (parsed as Record<string, unknown>).outputs\n : parsed;\n return typeof payload === \"string\" ? payload : JSON.stringify(payload);\n } catch {\n return String(raw);\n }\n}\n\nfunction isEmpty(v: unknown): boolean {\n return v === undefined || v === null || v === \"\";\n}\n\nexport class SpanIOProcessor implements SpanProcessor {\n onStart(span: Span, _parentContext: Context): void {\n try {\n const attrs = (span as any).attributes ?? {};\n if (!(\"input\" in attrs)) {\n span.setAttribute(\"input\", \"\");\n }\n if (!(\"output\" in attrs)) {\n span.setAttribute(\"output\", \"\");\n }\n this._wrapSetAttribute(span);\n } catch (e) {\n Logger.error(\"SpanIOProcessor.onStart failed:\", e);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n try {\n const attrs =\n (span as any)._attributes ?? (span as any).attributes;\n if (!attrs || typeof attrs !== \"object\") {\n Logger.debug(\n \"SpanIOProcessor.onEnd: could not access span attributes — OTel SDK internal API may have changed\",\n );\n return;\n }\n\n try {\n if (NETRA_USER_INPUT in attrs) {\n const userInput = attrs[NETRA_USER_INPUT];\n if (!isEmpty(userInput)) {\n attrs[\"input\"] = userInput;\n }\n delete attrs[NETRA_USER_INPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.input → input\",\n e,\n );\n }\n\n try {\n if (NETRA_USER_OUTPUT in attrs) {\n const userOutput = attrs[NETRA_USER_OUTPUT];\n if (!isEmpty(userOutput)) {\n attrs[\"output\"] = userOutput;\n }\n delete attrs[NETRA_USER_OUTPUT];\n }\n } catch (e) {\n Logger.warn(\n \"SpanIOProcessor.onEnd: could not promote netra.user.output → output\",\n e,\n );\n }\n } catch (e) {\n Logger.error(\n \"SpanIOProcessor.onEnd: unexpected error during netra.user promotion\",\n e,\n );\n }\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n private _wrapSetAttribute(span: Span): void {\n const original: SetAttributeFn = span.setAttribute.bind(span);\n\n let prompts: Map<number, Record<string, string>> | undefined;\n let completions: Map<number, Record<string, string>> | undefined;\n\n let genAiOwnsInput = false;\n let genAiOwnsOutput = false;\n\n const inputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"input\"]);\n\n const outputIsEmpty = (): boolean =>\n isEmpty(((span as any).attributes ?? {})[\"output\"]);\n\n const patched = (key: string, value: AttributeValue): Span => {\n try {\n // 1. gen_ai.prompt(s).N.{role,content} → accumulate into input\n const promptMatch = _PROMPT_RE.exec(key);\n if (promptMatch) {\n original(key, value);\n const idx = parseInt(promptMatch[1], 10);\n const field = promptMatch[2];\n if (!prompts) prompts = new Map();\n let entry = prompts.get(idx);\n if (!entry) {\n entry = {};\n prompts.set(idx, entry);\n }\n entry[field] = String(value);\n if (inputIsEmpty() || genAiOwnsInput) {\n original(\"input\", buildMessages(prompts));\n genAiOwnsInput = true;\n }\n return span;\n }\n\n // 2. gen_ai.completion(s).N.{role,content} → accumulate into output\n const completionMatch = _COMPLETION_RE.exec(key);\n if (completionMatch) {\n original(key, value);\n const idx = parseInt(completionMatch[1], 10);\n const field = completionMatch[2];\n if (!completions) completions = new Map();\n let entry = completions.get(idx);\n if (!entry) {\n entry = {};\n completions.set(idx, entry);\n }\n entry[field] = String(value);\n if (outputIsEmpty() || genAiOwnsOutput) {\n original(\"output\", buildMessages(completions));\n genAiOwnsOutput = true;\n }\n return span;\n }\n\n // 3. traceloop.entity.input → extract inputs → set input\n if (key === \"traceloop.entity.input\") {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 4. traceloop.entity.output → extract outputs → set output\n if (key === \"traceloop.entity.output\") {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 5. netra.entity.input → extract inputs → set input (LangGraph)\n if (key === NETRA_ENTITY_INPUT) {\n if (inputIsEmpty()) {\n original(\"input\", extractTraceloopInput(value));\n }\n return span;\n }\n\n // 6. netra.entity.output → extract outputs → set output (LangGraph)\n if (key === NETRA_ENTITY_OUTPUT) {\n if (outputIsEmpty()) {\n original(\"output\", extractTraceloopOutput(value));\n }\n return span;\n }\n\n // 7. Other traceloop.* → remap to netra.*\n if (key.startsWith(_TRACELOOP_PREFIX)) {\n const newKey = _NETRA_PREFIX + key.slice(_TRACELOOP_PREFIX.length);\n return original(newKey, value);\n }\n\n // 8. gen_ai.usage token aliasing\n if (key === _USAGE_INPUT_TOKENS) {\n return original(_USAGE_PROMPT_TOKENS, value);\n }\n if (key === _USAGE_OUTPUT_TOKENS) {\n return original(_USAGE_COMPLETION_TOKENS, value);\n }\n\n // 9. Pass through\n return original(key, value);\n } catch (e) {\n Logger.debug(`SpanIOProcessor: error processing key=${key}`, e);\n try {\n return original(key, value);\n } catch {\n return span;\n }\n }\n };\n\n (span as any).setAttribute = patched;\n }\n}\n","export const __version__ = \"1.0.0\";","import { Logger } from \"../logger\";\n\nexport interface ResponseCallbacks<TChunk = unknown> {\n withContext<T>(fn: () => T): T;\n onChunk?(chunk: TChunk): void;\n onError(error: unknown): void;\n onSuccess?(value: unknown): void;\n finalize(status: \"ok\" | \"error\"): void;\n}\n\nexport function isAsyncIterable(\n value: unknown,\n): value is AsyncIterable<unknown> {\n return (\n value != null && typeof (value as any)[Symbol.asyncIterator] === \"function\"\n );\n}\n\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return value != null && typeof (value as any).then === \"function\";\n}\n\nconst ITERATOR_METHODS = new Set([\"next\", \"return\", \"throw\"]);\n\n/**\n * Wrap an async iterable with lifecycle callbacks.\n * Returns a Proxy that preserves the original object's full interface\n * while intercepting iteration methods.\n *\n * When `onChunk` is provided, each yielded value is passed to it\n * (enabling LLM response accumulation). When omitted, chunks pass through\n * untouched (lifecycle-only mode).\n */\nexport function wrapAsyncIterable<T>(\n source: AsyncIterable<T>,\n callbacks: ResponseCallbacks<T>,\n): any {\n function createWrappedIterator(): AsyncIterator<T> {\n const iterator = source[Symbol.asyncIterator]();\n let done = false;\n\n const safeFinalize = (status: \"ok\" | \"error\") => {\n if (done) return;\n done = true;\n try {\n callbacks.finalize(status);\n } catch (e) {\n Logger.error(\"netra: finalize callback error\", e);\n }\n };\n\n return {\n async next(value?: any) {\n try {\n const result = await callbacks.withContext(() => iterator.next(value));\n if (!result.done) {\n try {\n callbacks.onChunk?.(result.value);\n } catch (e) {\n Logger.error(\"netra: onChunk callback error\", e);\n }\n } else {\n safeFinalize(\"ok\");\n }\n return result;\n } catch (e: any) {\n try {\n callbacks.onError(e);\n } catch {\n Logger.error(\"netra: onError callback error\", e);\n }\n safeFinalize(\"error\");\n throw e;\n }\n },\n async return(value?: any) {\n try {\n const result = await callbacks.withContext(\n () => iterator.return?.(value) ?? { done: true as const, value },\n );\n safeFinalize(\"ok\");\n return result;\n } catch (e: any) {\n try {\n callbacks.onError(e);\n } catch {\n Logger.error(\"netra: onError callback error\", e);\n }\n safeFinalize(\"error\");\n throw e;\n }\n },\n async throw(e?: any) {\n try {\n const result = await callbacks.withContext(() => {\n if (iterator.throw) return iterator.throw(e);\n throw e;\n });\n if (result.done) safeFinalize(\"ok\");\n return result;\n } catch (err) {\n try {\n callbacks.onError(err);\n } catch {\n Logger.error(\"netra: onError callback error\", err);\n }\n safeFinalize(\"error\");\n throw err;\n }\n },\n };\n }\n\n let directIterator: AsyncIterator<T> | null = null;\n\n return new Proxy(source, {\n get(target, prop) {\n if (prop === Symbol.asyncIterator) {\n return () => createWrappedIterator();\n }\n if (typeof prop === \"string\" && ITERATOR_METHODS.has(prop)) {\n if (!directIterator) directIterator = createWrappedIterator();\n return (directIterator as any)[prop].bind(directIterator);\n }\n const value = (target as any)[prop];\n if (typeof value === \"function\") return value.bind(target);\n return value;\n },\n });\n}\n\n/**\n * Wrap a promise with lifecycle callbacks.\n * If the resolved value is async-iterable, wraps it with `wrapAsyncIterable`.\n * When `preserveOriginal` is set, returns a Proxy that routes\n * then/catch/finally to the instrumented promise and other properties\n * to the original object (preserving SDK methods like `.withResponse()`).\n */\nexport function wrapPromise<T>(\n promise: Promise<T>,\n callbacks: ResponseCallbacks,\n options?: { preserveOriginal?: object },\n): any {\n let finalized = false;\n function safeFinalize(status: \"ok\" | \"error\") {\n if (finalized) return;\n finalized = true;\n try {\n callbacks.finalize(status);\n } catch (e) {\n Logger.error(\"netra: finalize callback error\", e);\n }\n }\n\n const instrumentedPromise = (async () => {\n try {\n const value = await promise;\n if (isAsyncIterable(value)) {\n return wrapAsyncIterable(value as any, callbacks);\n }\n try {\n callbacks.onSuccess?.(value);\n } catch (e) {\n Logger.error(\"netra: onSuccess callback error\", e);\n }\n safeFinalize(\"ok\");\n return value;\n } catch (error) {\n try {\n callbacks.onError(error);\n } catch {\n Logger.error(\"netra: onError callback error\", error);\n }\n safeFinalize(\"error\");\n throw error;\n }\n })();\n\n if (!options?.preserveOriginal) {\n return instrumentedPromise;\n }\n\n const original = options.preserveOriginal;\n return new Proxy(instrumentedPromise, {\n get(target, prop, receiver) {\n if (prop === \"then\" || prop === \"catch\" || prop === \"finally\") {\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") return value.bind(target);\n return value;\n }\n const originalValue = (original as any)[prop];\n if (originalValue !== undefined) {\n if (typeof originalValue === \"function\")\n return originalValue.bind(original);\n return originalValue;\n }\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") return value.bind(target);\n return value;\n },\n });\n}\n\n/**\n * Unified response dispatcher. Detects response type and delegates:\n * - AsyncIterable -> wrapAsyncIterable\n * - Promise -> wrapPromise (which handles Promise<AsyncIterable> internally)\n * - Sync value -> onSuccess + finalize immediately\n */\nexport function wrapResponse<T>(\n response: T,\n callbacks: ResponseCallbacks,\n options?: { preserveOriginal?: object },\n): T {\n if (isAsyncIterable(response)) {\n return wrapAsyncIterable(response as any, callbacks) as T;\n }\n\n if (isPromise(response)) {\n return wrapPromise(response as any, callbacks, options) as T;\n }\n\n try {\n callbacks.onSuccess?.(response);\n } catch (e) {\n Logger.error(\"netra: onSuccess callback error\", e);\n }\n try {\n callbacks.finalize(\"ok\");\n } catch (e) {\n Logger.error(\"netra: finalize callback error\", e);\n }\n return response;\n}\n","// TODO: Replace this temporary implementation with the official OpenTelemetry GenAI semantic conventions\n// when they are published for the JavaScript SDK.\n\nexport const SpanAttributes = {\n LLM_SYSTEM: \"gen_ai.system\",\n\n LLM_REQUEST_TYPE: \"llm.request.type\",\n LLM_REQUEST_MODEL: \"gen_ai.request.model\",\n LLM_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n LLM_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n LLM_REQUEST_TOP_P: \"gen_ai.request.top_p\",\n LLM_REQUEST_REASONING: \"gen_ai.request.reasoning\",\n LLM_REQUEST_REASONING_EFFORT: \"gen_ai.request.reasoning_effort\",\n LLM_REQUEST_TOOL_NAME: \"gen_ai.request.tool.name\",\n LLM_REQUEST_TOOL_ID: \"gen_ai.request.tool.id\",\n\n LLM_RESPONSE_MODEL: \"gen_ai.response.model\",\n LLM_RESPONSE_FINISH_REASON: \"llm.response.finish_reason\",\n\n LLM_USAGE_PROMPT_TOKENS: \"gen_ai.usage.prompt_tokens\",\n LLM_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n LLM_USAGE_CACHE_READ_INPUT_TOKENS: \"gen_ai.usage.cache_read_input_tokens\",\n LLM_USAGE_CACHE_CREATION_INPUT_TOKENS:\n \"gen_ai.usage.cache_creation_input_tokens\",\n LLM_USAGE_REASONING_TOKENS: \"gen_ai.usage.reasoning_tokens\",\n LLM_USAGE_TOTAL_TOKENS: \"llm.usage.total_tokens\",\n\n LLM_FREQUENCY_PENALTY: \"llm.frequency_penalty\",\n LLM_PRESENCE_PENALTY: \"llm.presence_penalty\",\n LLM_CHAT_STOP_SEQUENCES: \"llm.chat.stop_sequences\",\n LLM_IS_STREAMING: \"llm.is_streaming\",\n LLM_COMPLETIONS: \"gen_ai.completion\",\n LLM_PROMPTS: \"gen_ai.prompt\",\n} as const;\n","/**\n * Shared utility functions for instrumentation.\n * Handles setting OTel span attributes for LLM request/response tracing.\n */\n\nimport { Span, context } from \"@opentelemetry/api\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { safeStringify } from \"../utils/serialization\";\nimport { SpanAttributes } from \"./span-attributes\";\n\n/**\n * Controls where native traces are sent.\n *\n * - `\"netra\"` -- Replace the SDK's default processors so traces go\n * only to Netra. If the SDK does not expose the required APIs, falls back\n * to additive mode (both Netra and native) and logs a warning.\n * - `\"netra-strict\"` (default) -- Same replacement as `\"netra\"`, but if the SDK APIs\n * are unavailable the processor is **not** registered at all, ensuring\n * traces never reach native even at the cost of no tracing.\n * - `\"both\"` -- The Netra processor is added alongside the native defaults;\n * traces go to both Netra and native.\n *\n * Can also be set via the `NATIVE_TRACING_MODE` environment\n * variable using the same string values.\n */\nexport type NativeTracingMode = \"both\" | \"netra\" | \"netra-strict\";\n\nconst VALID_NATIVE_TRACING_MODES = new Set<string>([\"both\", \"netra\", \"netra-strict\"]);\n\nexport function parseNativeTracingEnv(name: string): NativeTracingMode | undefined {\n const val = process.env[name];\n if (val === undefined || val === \"\") return undefined;\n if (VALID_NATIVE_TRACING_MODES.has(val)) return val as NativeTracingMode;\n return undefined;\n}\n\n// Suppression\nconst SUPPRESS_INSTRUMENTATION_KEY = Symbol(\"netra.suppress_instrumentation\");\n\nexport function shouldSuppressInstrumentation(): boolean {\n const ctx = context.active();\n return ctx.getValue(SUPPRESS_INSTRUMENTATION_KEY) === true;\n}\n\n// Type Utilities — re-export from canonical location to avoid duplication\nexport { isPromise } from \"../utils/response-handler\";\n\n/**\n * Define a non-enumerable, writable, configurable property on `target`.\n * Used to hide OTel internals (spans, contexts) from JSON.stringify\n * while keeping them accessible to instance methods.\n */\nexport function defineHidden<T>(target: object, key: string, value: T): void {\n Object.defineProperty(target, key, {\n value,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n}\n\nexport function isDict(v: unknown): v is Record<string, any> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nexport function modelAsDict(obj: unknown): Record<string, unknown> {\n if (obj == null || typeof obj !== \"object\") return {};\n\n if (\n \"toJSON\" in obj &&\n typeof (obj as { toJSON?: unknown }).toJSON === \"function\"\n ) {\n return (obj as { toJSON: () => unknown }).toJSON() as Record<\n string,\n unknown\n >;\n }\n\n if (Object.getPrototypeOf(obj) === Object.prototype) {\n return { ...(obj as Record<string, unknown>) };\n }\n\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch {\n return {};\n }\n}\n\n/**\n * A normalized input or output message used for span attribute recording.\n * Providers can build TracedMessage[] using their own extraction logic and\n * pass it directly to writePromptAttributes / writeCompletionAttributes.\n */\nexport interface TracedMessage {\n role: string;\n content: string;\n}\n\nexport function isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\n/**\n * Returns true if `value` represents meaningful content worth recording.\n * Guards against setting empty-string attributes on spans.\n */\nexport function hasContent(value: unknown): boolean {\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\") return value.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return true;\n}\n\n// Attribute Mapping (model params → span attributes)\nconst PARAM_ATTRIBUTE_MAP: Record<string, string> = {\n model: SpanAttributes.LLM_REQUEST_MODEL,\n temperature: SpanAttributes.LLM_REQUEST_TEMPERATURE,\n max_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_completion_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_output_tokens: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n max_tokens_to_sample: SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n frequency_penalty: SpanAttributes.LLM_FREQUENCY_PENALTY,\n presence_penalty: SpanAttributes.LLM_PRESENCE_PENALTY,\n reasoning_effort: SpanAttributes.LLM_REQUEST_REASONING_EFFORT,\n stop: SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n stream: SpanAttributes.LLM_IS_STREAMING,\n top_p: SpanAttributes.LLM_REQUEST_TOP_P,\n};\n\nfunction setModelParams(span: Span, kwargs: Record<string, unknown>): void {\n for (const [key, attr] of Object.entries(PARAM_ATTRIBUTE_MAP)) {\n const value = kwargs[key];\n if (value !== undefined) {\n span.setAttribute(attr, value as any);\n }\n }\n}\n\n/**\n * Extracts input messages for OpenAI-compatible request shapes:\n * - \"chat\": messages[] (standard Chat Completions API)\n * - \"response\": instructions + input (Responses API)\n * - everything else: prompt string or embedding input\n *\n * Google GenAI and other providers with different shapes should build their\n * own TracedMessage[] and call writePromptAttributes directly.\n */\nexport function buildInputMessages(\n kwargs: Record<string, unknown>,\n requestType: string,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n if (requestType === \"chat\" || requestType === \"beta\") {\n if (hasContent(kwargs.system)) {\n const systemContent =\n typeof kwargs.system === \"string\"\n ? kwargs.system\n : safeStringify(kwargs.system);\n messages.push({ role: \"system\", content: systemContent });\n }\n\n const rawMessages = kwargs.messages;\n if (!Array.isArray(rawMessages)) return messages;\n for (const msg of rawMessages) {\n if (!isDict(msg) || !hasContent(msg.role) || !hasContent(msg.content)) {\n continue;\n }\n\n if (msg.role !== \"user\" || !Array.isArray(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n continue;\n }\n\n const isToolResult = (b: unknown): b is Record<string, unknown> =>\n isDict(b) && b.type === \"tool_result\";\n\n const userBlocks = msg.content.filter((b) => !isToolResult(b));\n\n if (userBlocks.length) {\n messages.push({\n role: \"user\",\n content: safeStringify(userBlocks),\n });\n }\n\n for (const block of msg.content) {\n if (!isToolResult(block)) continue;\n\n messages.push({\n role: \"tool\",\n content: safeStringify({\n tool_use_id: block.tool_use_id,\n content: block.content,\n is_error: block.is_error ?? false,\n }, Config.CONVERSATION_MAX_LEN),\n });\n }\n }\n } else if (requestType === \"response\") {\n if (hasContent(kwargs.instructions)) {\n messages.push({ role: \"system\", content: String(kwargs.instructions) });\n }\n const input = kwargs.input;\n if (typeof input === \"string\" && input.length > 0) {\n messages.push({ role: \"user\", content: input });\n } else if (Array.isArray(input)) {\n for (const msg of input) {\n if (!isDict(msg)) continue;\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({\n role: msg.role,\n content: safeStringify(msg.content),\n });\n }\n }\n }\n } else if (kwargs.prompt !== undefined) {\n // Legacy single-prompt (e.g.,completions)\n const content = String(kwargs.prompt);\n if (content.length > 0) {\n messages.push({ role: \"user\", content });\n }\n } else {\n // Embeddings / genericinput\n const input = kwargs.input ?? kwargs.inputs;\n if (hasContent(input)) {\n const content = safeStringify(input, Config.CONVERSATION_MAX_LEN);\n messages.push({ role: \"user\", content });\n }\n }\n\n return messages;\n}\n\n/**\n * Extracts output messages for OpenAI-compatible response shapes:\n * - choices[].message (Chat Completions API) — with optional tool_calls\n * - output[].content[].text (Responses API)\n * - content[] text/tool_use blocks (Anthropic-style)\n * - scalar output_text shorthand\n *\n * Skips messages with empty content to avoid polluting traces.\n */\nexport function buildOutputMessages(\n response: Record<string, unknown>,\n): TracedMessage[] {\n const messages: TracedMessage[] = [];\n\n // Priority 1: Chat Completions API (choices[]) — mutually exclusive with all others.\n // A response carrying choices[] is definitively a Chat Completions response; stop here.\n if (Array.isArray(response.choices)) {\n for (const choice of response.choices as Array<Record<string, any>>) {\n const msg = choice.message ?? choice.delta;\n if (!msg) continue;\n\n if (hasContent(msg.role) && hasContent(msg.content)) {\n messages.push({ role: msg.role, content: String(msg.content) });\n }\n\n if (Array.isArray(msg.tool_calls)) {\n for (const tc of msg.tool_calls as Array<Record<string, unknown>>) {\n const fn = tc.function as Record<string, unknown> | undefined;\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: fn?.name ?? \"\",\n arguments: fn?.arguments ?? \"\",\n }),\n });\n }\n }\n }\n return messages;\n }\n\n // Priority 2: Responses API — output_text and/or output[].\n // output_text is a scalar shorthand that mirrors the text portions of output[].\n // When both are present, use output_text for text and output[] only for tool calls\n // to avoid duplicating the same text content.\n const hasOutputText =\n typeof response.output_text === \"string\" && response.output_text.length > 0;\n const hasOutputArray = Array.isArray(response.output);\n\n if (hasOutputText || hasOutputArray) {\n if (hasOutputText) {\n messages.push({\n role: \"assistant\",\n content: response.output_text as string,\n });\n }\n\n if (hasOutputArray) {\n for (const element of response.output as Array<Record<string, unknown>>) {\n if (!Array.isArray(element.content)) continue;\n for (const chunk of element.content as Array<Record<string, unknown>>) {\n // Only include text from output[] when output_text has not already covered it\n if (!hasOutputText && hasContent(chunk.text)) {\n messages.push({ role: \"assistant\", content: String(chunk.text) });\n }\n // Always capture tool_use blocks — output_text never contains these\n if (\n (chunk as any).type === \"tool_use\" &&\n (chunk as any).name\n ) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({\n name: (chunk as any).name,\n input: (chunk as any).input,\n }),\n });\n }\n }\n }\n }\n return messages;\n }\n\n // Priority 3: Anthropic-style content[] blocks — only reached when neither\n // Chat Completions nor Responses API fields are present.\n if (Array.isArray(response.content)) {\n for (const block of response.content as Array<any>) {\n if (block.type === \"text\" && hasContent(block.text)) {\n messages.push({ role: \"assistant\", content: String(block.text) });\n } else if (block.type === \"tool_use\" && block.name) {\n messages.push({\n role: \"tool\",\n content: JSON.stringify({ id: block.id, name: block.name, input: block.input }),\n });\n }\n }\n }\n\n return messages;\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.prompt.{i}.role / gen_ai.prompt.{i}.content (OTel GenAI conventions)\n * 2. \"input\" JSON blob (Netra dashboard attribute)\n */\nexport function writePromptAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.role`,\n msg.role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${i}.content`,\n msg.content,\n );\n }\n\n span.setAttribute(\"input\", JSON.stringify(messages));\n}\n\n/**\n * Writes a TracedMessage[] in two formats:\n * 1. gen_ai.completion.{i}.role / gen_ai.completion.{i}.content (OTel GenAI conventions)\n * 2. \"output\" JSON blob (Netra dashboard attribute)\n *\n * Tool-call blocks in the messages are also written to gen_ai.response.tool_calls.*.\n */\nexport function writeCompletionAttributes(\n span: Span,\n messages: TracedMessage[],\n): void {\n if (messages.length === 0) return;\n\n let completionIdx = 0;\n\n for (const msg of messages) {\n if (msg.role === \"tool\") {\n // Tool entries are emitted as tool_call attributes, not completion entries\n try {\n const parsed = JSON.parse(msg.content) as Record<string, unknown>;\n const toolData = {\n name: parsed.name,\n id: parsed.id,\n input: parsed.input,\n arguments: parsed.arguments,\n };\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.role`,\n \"tool\",\n );\n span.setAttribute(\n `gen_ai.response.completion.${completionIdx}.content`,\n JSON.stringify(toolData),\n );\n completionIdx++;\n } catch (error) {\n Logger.error(\"Error parsing tool content:\", error);\n }\n } else {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.role`,\n msg.role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${completionIdx}.content`,\n msg.content,\n );\n completionIdx++;\n }\n }\n\n span.setAttribute(\"output\", JSON.stringify(messages));\n}\n\n// Request Attributes\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n system: string,\n): void {\n if (!span.isRecording()) return;\n\n // Core identifiers\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, system);\n\n if (kwargs.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Standard model parameters\n setModelParams(span, kwargs);\n\n // Tool definitions\n if (Array.isArray(kwargs.tools)) {\n span.setAttribute(\"tools\", safeStringify(kwargs.tools, Config.ATTRIBUTE_MAX_LEN));\n }\n\n // Reasoning config\n if (kwargs.reasoning !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_REASONING,\n JSON.stringify(kwargs.reasoning),\n );\n }\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildInputMessages(kwargs, requestType);\n writePromptAttributes(span, messages);\n\n // Legacy: FIMsuffix\n if (kwargs.suffix !== undefined) {\n span.setAttribute(\n \"llm.request.suffix\",\n safeStringify(kwargs.suffix, Config.CONVERSATION_MAX_LEN),\n );\n }\n }\n}\n\n// Response Attributes\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n\n // ResponseID\n if (response.id) {\n span.setAttribute(\"llm.response.id\", String(response.id));\n }\n\n // Model\n const model = response.model || (response.response_metadata as any)?.model;\n if (model) {\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, String(model));\n }\n\n // Tokenusage\n setUsageAttributes(span, response);\n\n // Finish reason (from firstchoice)\n setFinishReason(span, response);\n\n // Embeddingmetadata\n setEmbeddingResponseMeta(span, response);\n\n // Content tracing — extract once, write in bothformats\n if (isTraceContentEnabled()) {\n const messages = buildOutputMessages(response);\n writeCompletionAttributes(span, messages);\n }\n}\n\n// Response Sub-helpers\nfunction setFinishReason(span: Span, response: Record<string, unknown>): void {\n if (response.stop_reason) {\n span.setAttribute(\n SpanAttributes.LLM_RESPONSE_FINISH_REASON,\n String(response.stop_reason),\n );\n span.setAttribute(\"gen_ai.response.finish_reason\", String(response.stop_reason));\n }\n\n const choices = response.choices as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(choices) && choices.length > 0) {\n const reason = choices[0].finish_reason ?? choices[0].finishReason;\n if (reason) {\n span.setAttribute(SpanAttributes.LLM_RESPONSE_FINISH_REASON, String(reason));\n span.setAttribute(\"gen_ai.response.finish_reason\", String(reason));\n }\n }\n}\n\nfunction setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usage = (response.usage ?? response.usage_metadata) as\n | Record<string, unknown>\n | undefined;\n if (!usage) return;\n\n const promptTokens = usage.prompt_tokens ?? usage.input_tokens;\n if (promptTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(promptTokens),\n );\n }\n\n const completionTokens = usage.completion_tokens ?? usage.output_tokens;\n if (completionTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(completionTokens),\n );\n }\n\n const totalTokens = usage.total_tokens;\n if (totalTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(totalTokens),\n );\n }\n\n const cacheReadTokens =\n usage.cache_read_input_tokens ??\n (\n (usage.prompt_tokens_details ?? usage.input_tokens_details) as\n | { cached_tokens?: unknown }\n | undefined\n )?.cached_tokens;\n if (cacheReadTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(cacheReadTokens),\n );\n }\n\n const cacheCreationTokens = usage.cache_creation_input_tokens;\n if (cacheCreationTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_CREATION_INPUT_TOKENS,\n Number(cacheCreationTokens),\n );\n }\n\n const reasoningTokens = (\n (usage.completion_tokens_details ?? usage.output_tokens_details) as\n | { reasoning_tokens?: unknown }\n | undefined\n )?.reasoning_tokens;\n if (reasoningTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_REASONING_TOKENS,\n Number(reasoningTokens),\n );\n }\n}\n\nfunction setEmbeddingResponseMeta(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const data = response.data as Array<unknown> | undefined;\n if (!Array.isArray(data) || data.length === 0) return;\n\n span.setAttribute(\"llm.response.embedding_count\", data.length);\n\n const firstItem = data[0] as Record<string, unknown>;\n const embedding = firstItem?.embedding as number[] | undefined;\n if (Array.isArray(embedding)) {\n span.setAttribute(\"llm.response.embedding_dimensions\", embedding.length);\n }\n}\n","import { TracerProvider } from \"@opentelemetry/api\";\n\nexport type AnthropicRequestType = \"chat\" | \"beta\" | \"batches\";\n\nexport const SPAN_NAMES = {\n CHAT: \"anthropic.chat\",\n STREAM: \"anthropic.stream\",\n BATCHES: \"anthropic.batches\",\n BETA: \"anthropic.beta\",\n BETA_STREAM: \"anthropic.beta.stream\",\n BETA_TOOL_RUNNER: \"anthropic.beta.tool.runner\",\n} as const;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n","import { Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\n/**\n * Accumulate a single Anthropic SSE chunk into `completeResponse`.\n * Safe against malformed events — all field access is guarded.\n */\nexport function processStreamChunk(\n completeResponse: Record<string, any>,\n chunk: any,\n span: Span,\n): void {\n try {\n switch (chunk.type) {\n case \"message_start\": {\n if (chunk.message?.model) {\n completeResponse.model = chunk.message.model;\n }\n if (chunk.message?.usage) {\n completeResponse.usage = chunk.message.usage;\n }\n break;\n }\n\n case \"content_block_start\": {\n if (!completeResponse.content) {\n completeResponse.content = [];\n }\n const block = chunk.content_block;\n if (!block) break;\n if (block.type === \"tool_use\") {\n completeResponse.content.push({\n type: \"tool_use\",\n id: block.id,\n name: block.name,\n input: \"\",\n });\n } else {\n completeResponse.content.push({\n type: block.type,\n text: \"\",\n });\n }\n break;\n }\n\n case \"content_block_delta\": {\n if (\n !completeResponse.content ||\n completeResponse.content.length === 0\n ) {\n completeResponse.content = [{ type: \"text\", text: \"\" }];\n }\n const targetIndex =\n chunk.index ?? completeResponse.content.length - 1;\n const targetBlock = completeResponse.content[targetIndex];\n if (!targetBlock) break;\n\n if (\n chunk.delta?.type === \"input_json_delta\" &&\n targetBlock.type === \"tool_use\"\n ) {\n targetBlock.input += chunk.delta.partial_json ?? \"\";\n } else if (chunk.delta?.text) {\n targetBlock.text += chunk.delta.text;\n }\n break;\n }\n\n case \"content_block_stop\": {\n const blocks = completeResponse.content;\n if (blocks && blocks.length > 0) {\n const finishedBlock = blocks[blocks.length - 1];\n if (\n finishedBlock?.type === \"tool_use\" &&\n typeof finishedBlock.input === \"string\"\n ) {\n try {\n finishedBlock.input = JSON.parse(finishedBlock.input);\n } catch {\n Logger.warn(\n \"netra.instrumentation.anthropic: Failed to parse tool use input\",\n );\n }\n }\n }\n break;\n }\n\n case \"message_delta\": {\n if (chunk.delta?.stop_reason) {\n completeResponse.stop_reason = chunk.delta.stop_reason;\n }\n const usageData = chunk.usage ?? chunk.delta?.usage;\n if (usageData) {\n completeResponse.usage = {\n ...(completeResponse.usage ?? {}),\n ...usageData,\n };\n }\n break;\n }\n\n case \"message_stop\": {\n if (chunk.usage) {\n completeResponse.usage = {\n ...(completeResponse.usage ?? {}),\n ...chunk.usage,\n };\n }\n break;\n }\n }\n\n if (Logger.isDebugMode()) {\n span.addEvent(\"llm.content.completion.chunk\", {\n \"chunk.type\": chunk.type,\n });\n }\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: processStreamChunk error\",\n e,\n );\n }\n}\n\n/**\n * Close out a streaming span: set response attributes, record duration, and end.\n */\nexport function finalizeStreamSpan(\n span: Span,\n completeResponse: Record<string, any>,\n startTime: number,\n code: SpanStatusCode,\n): void {\n try {\n const endTime = Date.now();\n\n setResponseAttributes(span, {\n model: completeResponse.model,\n content: completeResponse.content,\n usage: completeResponse.usage,\n stop_reason: completeResponse.stop_reason,\n });\n\n span.setAttribute(\"llm.response.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code });\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: finalizeStreamSpan error\",\n e,\n );\n } finally {\n span.end();\n }\n}\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n): void {\n try {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"anthropic\");\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: setRequestAttributes error\",\n e,\n );\n }\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n try {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n if (response?.type === \"message_batch\") {\n span.setAttribute(\"status\", response?.processing_status as string);\n }\n setBaseResponseAttributes(span, response);\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: setResponseAttributes error\",\n e,\n );\n }\n}\n","import {\n context,\n Context,\n Span,\n SpanKind,\n SpanStatusCode,\n trace,\n Tracer,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { wrapResponse } from \"../../utils/response-handler\";\nimport { safeStringify } from \"../../utils/serialization\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n defineHidden,\n isTraceContentEnabled,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { AnthropicRequestType, SPAN_NAMES } from \"./types\";\nimport {\n finalizeStreamSpan,\n processStreamChunk,\n setRequestAttributes,\n setResponseAttributes,\n} from \"./utils\";\n\nconst WRAPPER_OWN_PROPS = new Set([\n \"span\",\n \"messageStream\",\n \"startTime\",\n \"requestKwargs\",\n \"completeResponse\",\n \"finalizeSpanOnce\",\n \"processEventData\",\n \"finalizeSpanFromMessage\",\n \"parentContext\",\n \"spanFinalized\",\n \"completionPending\",\n \"listenerMap\",\n]);\n\nconst EVENT_EMITTER_METHODS = new Set([\n \"on\",\n \"once\",\n \"off\",\n \"removeListener\",\n \"addListener\",\n \"emit\",\n \"removeAllListeners\",\n \"listeners\",\n \"listenerCount\",\n]);\n\nconst LISTENER_REGISTRATION_METHODS = new Set([\"on\", \"once\", \"addListener\"]);\nconst LISTENER_REMOVAL_METHODS = new Set([\"off\", \"removeListener\"]);\nconst COMPLETION_METHODS = new Set([\"finalMessage\", \"done\", \"finalText\"]);\n\nconst TRACKED_STREAM_EVENTS = new Set([\n \"message\",\n \"contentBlock\",\n \"text\",\n \"finalMessage\",\n]);\n\nconst MAX_TOOL_ATTR_LENGTH = 4096;\n\n/**\n * Wrap each tool's `run()` method so every invocation produces a TOOL span.\n * Preserves the tool's prototype chain — only `run` is replaced.\n * User tool errors are recorded on the span and re-thrown.\n */\nexport function wrapRunnableTools(\n tools: any[],\n tracer: Tracer,\n parentContext: Context,\n): any[] {\n return tools.map((tool) => {\n if (typeof tool.run !== \"function\") return tool;\n\n const originalRun = tool.run;\n const toolName = tool.name ?? \"unknown_tool\";\n\n const wrappedRun = async function (\n this: any,\n input: any,\n runContext?: any,\n ) {\n const toolUseId = runContext?.toolUse?.id ?? runContext?.toolUseBlock?.id;\n const traceContent = isTraceContentEnabled();\n const attrs: Record<string, string> = {\n \"netra.span.type\": \"TOOL\",\n [SpanAttributes.LLM_REQUEST_TOOL_NAME]: toolName,\n };\n if (toolUseId) attrs[SpanAttributes.LLM_REQUEST_TOOL_ID] = toolUseId;\n if (traceContent) {\n attrs.input = safeStringify(input, MAX_TOOL_ATTR_LENGTH);\n }\n\n const span = tracer.startSpan(\n toolName,\n { kind: SpanKind.INTERNAL, attributes: attrs },\n parentContext,\n );\n\n const spanCtx = trace.setSpan(parentContext, span);\n try {\n const result = await context.with(spanCtx, () =>\n originalRun.call(this, input, runContext),\n );\n if (traceContent) {\n span.setAttribute(\n \"output\",\n safeStringify(result, MAX_TOOL_ATTR_LENGTH),\n );\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n } finally {\n span.end();\n }\n };\n\n const wrapped = Object.create(\n Object.getPrototypeOf(tool),\n Object.getOwnPropertyDescriptors(tool),\n );\n wrapped.run = wrappedRun;\n return wrapped;\n });\n}\n\n/**\n * Proxy wrapper for Anthropic MessageStream objects returned by `.stream()`.\n * Preserves the full MessageStream interface (events, completion methods,\n * async iteration) while tracking span lifecycle.\n */\nclass MessageStreamWrapper {\n private completeResponse: Record<string, any> = {\n content: [],\n model: \"\",\n usage: {},\n };\n private span!: Span;\n private messageStream!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n private spanContext!: any;\n private parentContext!: any;\n private spanFinalized = false;\n private completionPending = false;\n private listenerMap = new WeakMap<Function, Map<string, Function[]>>();\n\n constructor(\n span: Span,\n messageStream: any,\n startTime: number,\n requestKwargs: Record<string, any>,\n spanContext?: any,\n parentContext?: any,\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"messageStream\", messageStream);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n defineHidden(\n this,\n \"spanContext\",\n spanContext || trace.setSpan(context.active(), span),\n );\n defineHidden(this, \"parentContext\", parentContext || context.active());\n\n this.registerSafetyNetListeners();\n\n return new Proxy(this, {\n get(target, prop, receiver) {\n if (prop === \"toJSON\") {\n return () => target.completeResponse;\n }\n\n if (typeof prop === \"string\" && WRAPPER_OWN_PROPS.has(prop)) {\n return Reflect.get(target, prop, receiver);\n }\n\n if (prop === Symbol.asyncIterator) {\n return target[Symbol.asyncIterator].bind(target);\n }\n\n if (typeof prop === \"string\" && EVENT_EMITTER_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method !== \"function\") return method;\n\n if (LISTENER_REGISTRATION_METHODS.has(prop)) {\n return function (event: string, listener: Function) {\n const wrappedListener = (...args: any[]) => {\n try {\n target.span.addEvent(`messagestream.event.${event}`, {\n \"event.type\": event,\n });\n if (TRACKED_STREAM_EVENTS.has(event) && args[0]) {\n target.processEventData(event, args[0]);\n }\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: event tracking error\",\n e,\n );\n }\n return listener(...args);\n };\n\n let eventMap = target.listenerMap.get(listener);\n if (!eventMap) {\n eventMap = new Map();\n target.listenerMap.set(listener, eventMap);\n }\n let wrappers = eventMap.get(event);\n if (!wrappers) {\n wrappers = [];\n eventMap.set(event, wrappers);\n }\n wrappers.push(wrappedListener);\n\n return method.call(target.messageStream, event, wrappedListener);\n };\n }\n if (LISTENER_REMOVAL_METHODS.has(prop)) {\n return function (event: string, listener: Function) {\n const eventMap = target.listenerMap.get(listener);\n const wrappers = eventMap?.get(event);\n const wrapped = wrappers?.shift() ?? listener;\n if (wrappers && wrappers.length === 0) eventMap?.delete(event);\n return method.call(target.messageStream, event, wrapped);\n };\n }\n if (prop === \"removeAllListeners\") {\n return function (event?: string) {\n target.listenerMap = new WeakMap();\n return method.call(target.messageStream, event);\n };\n }\n return method.bind(target.messageStream);\n }\n\n if (typeof prop === \"string\" && COMPLETION_METHODS.has(prop)) {\n const method = target.messageStream[prop];\n if (typeof method !== \"function\") return method;\n\n return async function (...args: any[]) {\n target.completionPending = true;\n try {\n const result = await method.call(target.messageStream, ...args);\n\n if (prop === \"finalMessage\" || prop === \"done\") {\n target.finalizeSpanFromMessage(result);\n } else if (prop === \"finalText\") {\n if (typeof result === \"string\" && result.length > 0) {\n target.completeResponse.content = [\n { type: \"text\", text: result },\n ];\n } else {\n target.flushCurrentText();\n }\n target.finalizeSpanOnce(SpanStatusCode.OK);\n }\n\n return result;\n } catch (error) {\n target.finalizeSpanOnce(SpanStatusCode.ERROR);\n throw error;\n }\n };\n }\n\n const value = target.messageStream[prop];\n if (typeof value === \"function\")\n return value.bind(target.messageStream);\n return value;\n },\n });\n }\n\n private registerSafetyNetListeners(): void {\n try {\n if (typeof this.messageStream?.on !== \"function\") return;\n\n this.messageStream.on(\"end\", () => {\n if (!this.completionPending) {\n this.finalizeSpanOnce(SpanStatusCode.OK);\n }\n });\n this.messageStream.on(\"error\", (err: any) => {\n if (err && !this.spanFinalized) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err instanceof Error ? err.message : String(err),\n });\n this.span.recordException(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n this.finalizeSpanOnce(SpanStatusCode.ERROR);\n });\n } catch (e) {\n Logger.error(\n \"netra.instrumentation.anthropic: safety net listener registration failed\",\n e,\n );\n }\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<unknown> {\n let errorOccurred = false;\n try {\n for await (const chunk of this.messageStream) {\n processStreamChunk(this.completeResponse, chunk, this.span);\n yield chunk;\n }\n } catch (err) {\n errorOccurred = true;\n Logger.error(\"netra.instrumentation.anthropic: Stream error\", err);\n this.finalizeSpanOnce(SpanStatusCode.ERROR);\n throw err;\n } finally {\n if (!errorOccurred) {\n this.finalizeSpanOnce(SpanStatusCode.OK);\n }\n }\n }\n\n getSpanContext(): any {\n return this.spanContext;\n }\n\n private processEventData(eventType: string, data: any): void {\n switch (eventType) {\n case \"message\":\n if (data.model) this.completeResponse.model = data.model;\n if (data.usage) this.completeResponse.usage = data.usage;\n break;\n\n case \"text\":\n if (!this.completeResponse.currentText) {\n this.completeResponse.currentText = \"\";\n }\n this.completeResponse.currentText += data;\n break;\n\n case \"contentBlock\":\n if (!this.completeResponse.content) {\n this.completeResponse.content = [];\n }\n this.completeResponse.content.push(data);\n break;\n\n case \"finalMessage\":\n if (data.model) this.completeResponse.model = data.model;\n if (data.content) this.completeResponse.content = data.content;\n if (data.usage) this.completeResponse.usage = data.usage;\n break;\n }\n }\n\n private flushCurrentText(): void {\n if (\n this.completeResponse.currentText &&\n (!this.completeResponse.content ||\n this.completeResponse.content.length === 0)\n ) {\n this.completeResponse.content = [\n { type: \"text\", text: this.completeResponse.currentText },\n ];\n }\n }\n\n private finalizeSpanFromMessage(message: any): void {\n if (message) {\n if (message.model) this.completeResponse.model = message.model;\n if (message.content) this.completeResponse.content = message.content;\n if (message.usage) this.completeResponse.usage = message.usage;\n if (message.stop_reason)\n this.completeResponse.stop_reason = message.stop_reason;\n }\n this.finalizeSpanOnce(SpanStatusCode.OK);\n }\n\n private finalizeSpanOnce(code: SpanStatusCode): void {\n if (this.spanFinalized) return;\n this.spanFinalized = true;\n finalizeStreamSpan(this.span, this.completeResponse, this.startTime, code);\n }\n}\n\n/**\n * Shimmer-compatible wrapper factory for `.create()` methods.\n * Returns `(original) => replacement` as expected by `shimmer.wrap()`.\n */\nfunction anthropicWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: any[]) {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n const attributes = (args[0] || {}) as Record<string, unknown>;\n const currentContext = context.active();\n const isStreaming = attributes.stream === true;\n\n const activeSpan = trace.getSpan(currentContext);\n Logger.debug(\n `Anthropic invoke (${requestType}). Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`,\n );\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, attributes, requestType);\n if (isStreaming) {\n span.setAttribute(\"llm.streaming\", true);\n }\n const startTime = Date.now();\n const spanContext = trace.setSpan(currentContext, span);\n const response = context.with(spanContext, () =>\n original.apply(this, args),\n );\n\n const completeResponse: Record<string, any> = {\n content: [],\n model: \"\",\n usage: {},\n };\n\n return wrapResponse(\n response,\n {\n withContext: (fn) => context.with(spanContext, fn),\n onChunk: (chunk) =>\n processStreamChunk(completeResponse, chunk, span),\n onError: (error) => {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n },\n onSuccess: (value) => {\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000,\n );\n },\n finalize: (status) => {\n const hasStreamData =\n completeResponse.content?.length ||\n completeResponse.model ||\n completeResponse.usage?.input_tokens !== undefined ||\n completeResponse.usage?.output_tokens !== undefined;\n if (status === \"ok\" && hasStreamData) {\n finalizeStreamSpan(\n span,\n completeResponse,\n startTime,\n SpanStatusCode.OK,\n );\n } else {\n if (status === \"ok\") {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n span.end();\n }\n },\n },\n { preserveOriginal: response },\n );\n } catch (error) {\n Logger.error(\"netra.instrumentation.anthropic:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\n/**\n * Shimmer-compatible wrapper factory for `.stream()` methods.\n * `originalCreate` is the unpatched `create` method captured before patching,\n * used to build a per-call Proxy so `.stream()` calls the uninstrumented\n * `create` internally (avoids double-spanning).\n */\nfunction streamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType,\n originalCreate?: Function,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: any[]) {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n const attributes = (args[0] || {}) as Record<string, unknown>;\n const currentContext = context.active();\n\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.streaming\": true,\n \"llm.operation\": \"stream\",\n },\n },\n currentContext,\n );\n\n const spanContext = trace.setSpan(currentContext, span);\n setRequestAttributes(span, attributes, requestType);\n const startTime = Date.now();\n\n const callTarget = originalCreate\n ? new Proxy(this as any, {\n get(target, prop) {\n // Using the uninstrumented create method to avoid double-spanning, since `.stream()` calls `.create()` internally.\n if (prop === \"create\") return originalCreate.bind(target);\n // All other methods bound to the target object.\n const value = target[prop];\n if (typeof value === \"function\") return value.bind(target);\n return value;\n },\n })\n : this;\n\n try {\n const messageStream = context.with(spanContext, () =>\n original.call(callTarget, ...args),\n );\n return new MessageStreamWrapper(\n span,\n messageStream,\n startTime,\n attributes,\n spanContext,\n currentContext,\n );\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } as unknown as F;\n };\n}\n\n/**\n * Shimmer-compatible wrapper factory for `.toolRunner()`.\n * Wraps the returned ToolRunner with a Proxy that manages\n * span lifecycle across async iteration and thenable resolution.\n */\nfunction toolRunnerWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: AnthropicRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: any[]) {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n const attributes = (args[0] || {}) as Record<string, unknown>;\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"netra.span.type\": \"AGENT\",\n \"llm.operation\": \"tool.runner\",\n },\n },\n currentContext,\n );\n\n let spanEnded = false;\n const endSpanOnce = (code: SpanStatusCode, error?: Error) => {\n if (spanEnded) return;\n spanEnded = true;\n if (error) {\n span.setStatus({ code, message: error.message });\n span.recordException(error);\n } else {\n span.setStatus({ code });\n }\n span.end();\n };\n\n try {\n setRequestAttributes(span, attributes, \"beta\");\n const spanContext = trace.setSpan(currentContext, span);\n\n const wrappedTools = Array.isArray(attributes.tools)\n ? wrapRunnableTools(attributes.tools as any[], tracer, spanContext)\n : attributes.tools;\n\n const wrappedArgs = [\n { ...attributes, tools: wrappedTools },\n ...args.slice(1),\n ];\n const runner = context.with(spanContext, () =>\n original.apply(this, wrappedArgs),\n );\n\n if (runner == null) {\n endSpanOnce(SpanStatusCode.OK);\n return runner;\n }\n\n return new Proxy(runner, {\n get(target: any, prop: string | symbol, receiver: any) {\n if (prop === Symbol.asyncIterator) {\n return function () {\n const originalIterator = target[Symbol.asyncIterator]();\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n async next() {\n try {\n const result = await context.with(spanContext, () =>\n originalIterator.next(),\n );\n if (result.done) endSpanOnce(SpanStatusCode.OK);\n return result;\n } catch (error) {\n endSpanOnce(SpanStatusCode.ERROR, error as Error);\n throw error;\n }\n },\n async return(value?: any) {\n try {\n const result = await (originalIterator.return?.(\n value,\n ) ?? {\n done: true,\n value,\n });\n return result;\n } finally {\n endSpanOnce(SpanStatusCode.OK);\n }\n },\n async throw(error?: any) {\n const err =\n error instanceof Error ? error : new Error(String(error));\n if (originalIterator.throw) {\n try {\n const result = await originalIterator.throw(error);\n if (result.done) {\n endSpanOnce(SpanStatusCode.ERROR, err);\n }\n return result;\n } catch (e) {\n endSpanOnce(\n SpanStatusCode.ERROR,\n e instanceof Error ? e : new Error(String(e)),\n );\n throw e;\n }\n }\n endSpanOnce(SpanStatusCode.ERROR, err);\n throw error;\n },\n };\n };\n }\n\n if (prop === \"then\" || prop === \"catch\" || prop === \"finally\") {\n const originalMethod = target[prop];\n if (typeof originalMethod !== \"function\") return originalMethod;\n\n if (prop === \"then\") {\n return function (\n onFulfilled?: Function,\n onRejected?: Function,\n ) {\n return originalMethod.call(\n target,\n (v: any) => {\n endSpanOnce(SpanStatusCode.OK);\n return onFulfilled ? onFulfilled(v) : v;\n },\n (e: any) => {\n endSpanOnce(\n SpanStatusCode.ERROR,\n e instanceof Error ? e : new Error(String(e)),\n );\n if (onRejected) return onRejected(e);\n throw e;\n },\n );\n };\n }\n if (prop === \"catch\") {\n return function (onRejected?: Function) {\n return receiver.then(undefined, onRejected);\n };\n }\n if (prop === \"finally\") {\n return function (onFinally?: Function) {\n return receiver.then(\n (v: any) => {\n onFinally?.();\n return v;\n },\n (e: any) => {\n onFinally?.();\n throw e;\n },\n );\n };\n }\n }\n\n const value = target[prop];\n if (typeof value === \"function\") return value.bind(target);\n return value;\n },\n });\n } catch (error) {\n endSpanOnce(\n SpanStatusCode.ERROR,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n } as unknown as F;\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, SPAN_NAMES.CHAT, \"chat\");\n\nexport const betaWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, SPAN_NAMES.BETA, \"beta\");\n\nexport const batchesWrapper = (tracer: Tracer) =>\n anthropicWrapper(tracer, SPAN_NAMES.BATCHES, \"batches\");\n\nexport const chatStreamWrapper = (tracer: Tracer, originalCreate?: Function) =>\n streamWrapper(tracer, SPAN_NAMES.STREAM, \"chat\", originalCreate);\n\nexport const betaStreamWrapper = (tracer: Tracer, originalCreate?: Function) =>\n streamWrapper(tracer, SPAN_NAMES.BETA_STREAM, \"beta\", originalCreate);\n\nexport const betaToolRunnerWrapper = (tracer: Tracer) =>\n toolRunnerWrapper(tracer, SPAN_NAMES.BETA_TOOL_RUNNER, \"beta\");\n","import { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport shimmer from \"shimmer\";\nimport { Logger } from \"../../logger\";\nimport { SPAN_NAMES, InstrumentorOptions } from \"./types\";\nimport { __version__ } from \"./version\";\nimport {\n batchesWrapper,\n betaStreamWrapper,\n betaWrapper,\n betaToolRunnerWrapper,\n chatStreamWrapper,\n chatWrapper,\n} from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.anthropic\";\nconst INSTRUMENTS = [\"anthropic >= 0.71.2\"];\n\nlet isInstrumented = false;\nlet anthropicClasses: any[] = [];\n\n/**\n * Resolve the Anthropic module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require.\n * Returns cached classes on subsequent calls.\n */\nasync function resolveAnthropic(): Promise<any[]> {\n if (anthropicClasses.length > 0) return anthropicClasses;\n\n try {\n // @ts-ignore - @anthropic-ai/sdk is an optional peer dependency\n const anthropicModule = await import(\"@anthropic-ai/sdk\");\n anthropicClasses.push(\n anthropicModule.Anthropic || anthropicModule.default || anthropicModule,\n );\n } catch {\n Logger.warn(\"Failed to resolve Anthropic ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@anthropic-ai/sdk\");\n const cjsClass = mod.Anthropic || mod.default || mod;\n if (!anthropicClasses.includes(cjsClass)) {\n anthropicClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Anthropic CJS module\");\n }\n\n return anthropicClasses;\n}\n\nexport class NetraAnthropicInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraAnthropicInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Anthropic is already instrumented\");\n return this;\n }\n\n const classes = await resolveAnthropic();\n if (classes.length === 0) return this;\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__,\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((AnthropicSDK) => {\n this._instrumentMessages(AnthropicSDK);\n this._instrumentBetaMessages(AnthropicSDK);\n this._instrumentBatchMessages(AnthropicSDK);\n });\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Anthropic is not instrumented\");\n return;\n }\n\n anthropicClasses.forEach((AnthropicSDK) => {\n this._uninstrumentMessages(AnthropicSDK);\n this._uninstrumentBetaMessages(AnthropicSDK);\n this._uninstrumentBatchMessages(AnthropicSDK);\n });\n\n anthropicClasses = [];\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentMessages(AnthropicSDK: any): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const MessagesClass = AnthropicSDK.Messages;\n if (!MessagesClass?.prototype) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Messages class\",\n );\n return;\n }\n\n const originalCreate = MessagesClass.prototype.create;\n\n if (typeof MessagesClass.prototype.create === \"function\") {\n shimmer.wrap(\n MessagesClass.prototype,\n \"create\",\n chatWrapper(this.tracer),\n );\n }\n\n if (typeof MessagesClass.prototype.stream === \"function\") {\n shimmer.wrap(\n MessagesClass.prototype,\n \"stream\",\n chatStreamWrapper(this.tracer, originalCreate),\n );\n }\n } catch (error) {\n Logger.error(`Failed to instrument messages: ${error}`);\n }\n }\n\n private _instrumentBetaMessages(AnthropicSDK: any): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const BetaMessagesClass = AnthropicSDK.Beta?.Messages;\n if (!BetaMessagesClass?.prototype) {\n Logger.error(\n \"Anthropic instrumentation: Could not find Beta Messages class\",\n );\n return;\n }\n\n const originalCreate = BetaMessagesClass.prototype.create;\n\n if (typeof BetaMessagesClass.prototype.create === \"function\") {\n shimmer.wrap(\n BetaMessagesClass.prototype,\n \"create\",\n betaWrapper(this.tracer),\n );\n }\n\n if (typeof BetaMessagesClass.prototype.stream === \"function\") {\n shimmer.wrap(\n BetaMessagesClass.prototype,\n \"stream\",\n betaStreamWrapper(this.tracer, originalCreate),\n );\n }\n\n if (typeof BetaMessagesClass.prototype.toolRunner === \"function\") {\n shimmer.wrap(\n BetaMessagesClass.prototype,\n \"toolRunner\",\n betaToolRunnerWrapper(this.tracer),\n );\n }\n } catch (error) {\n Logger.error(`Failed to instrument beta: ${error}`);\n }\n }\n\n private _instrumentBatchMessages(AnthropicSDK: any): void {\n if (!this.tracer) {\n Logger.warn(\"Anthropic instrumentation: No tracer available\");\n return;\n }\n try {\n const BatchMessageClass = AnthropicSDK.Messages?.Batches;\n if (!BatchMessageClass?.prototype) {\n Logger.error(\"Anthropic instrumentation: Could not find Batches class\");\n return;\n }\n\n if (typeof BatchMessageClass.prototype.create === \"function\") {\n shimmer.wrap(\n BatchMessageClass.prototype,\n \"create\",\n batchesWrapper(this.tracer),\n );\n }\n } catch (error) {\n Logger.error(`Failed to instrument batches: ${error}`);\n }\n }\n\n private _uninstrumentMessages(AnthropicSDK: any): void {\n try {\n const proto = AnthropicSDK.Messages?.prototype;\n if (!proto) return;\n\n if (typeof proto.create === \"function\") shimmer.unwrap(proto, \"create\");\n if (typeof proto.stream === \"function\") shimmer.unwrap(proto, \"stream\");\n } catch (error) {\n Logger.error(`Failed to uninstrument messages: ${error}`);\n }\n }\n\n private _uninstrumentBetaMessages(AnthropicSDK: any): void {\n try {\n const proto = AnthropicSDK.Beta?.Messages?.prototype;\n if (!proto) return;\n\n if (typeof proto.create === \"function\") shimmer.unwrap(proto, \"create\");\n if (typeof proto.stream === \"function\") shimmer.unwrap(proto, \"stream\");\n if (typeof proto.toolRunner === \"function\")\n shimmer.unwrap(proto, \"toolRunner\");\n } catch (error) {\n Logger.error(`Failed to uninstrument beta: ${error}`);\n }\n }\n\n private _uninstrumentBatchMessages(AnthropicSDK: any): void {\n try {\n const proto = AnthropicSDK.Messages?.Batches?.prototype;\n if (!proto) return;\n\n if (typeof proto.create === \"function\") shimmer.unwrap(proto, \"create\");\n } catch (error) {\n Logger.error(`Failed to uninstrument batches: ${error}`);\n }\n }\n}\n\nexport const anthropicInstrumentor = new NetraAnthropicInstrumentor();\n","/**\n * Version information for Google GenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n","/**\n * Utility functions for Google GenAI instrumentation\n *\n * Google GenAI has a different response format than OpenAI:\n * - Response: { response: EnhancedGenerateContentResponse }\n * - EnhancedGenerateContentResponse: { candidates, usageMetadata, promptFeedback }\n * - UsageMetadata: { promptTokenCount, candidatesTokenCount, totalTokenCount, cachedContentTokenCount }\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nfunction safeStringify(value: unknown): string {\n try {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * Extract the model name from the model string.\n * @param model - The model string.\n * @returns The model name without the \"models/\" prefix if it exists.\n */\nexport function extractModelName(model: string): string {\n if (model && model.startsWith(\"models/\")) {\n return model.replace(/^models\\//, \"\");\n }\n return model;\n}\n\n/**\n * Normalize role values from Google GenAI.\n *\n * Google GenAI uses \"model\" to indicate the assistant role.\n * This function maps \"model\" → \"assistant\" and returns any other role unchanged in lowercase.\n */\nfunction normalizeGenAIRole(raw: string): string {\n const rawLower = raw.toLowerCase();\n return rawLower === \"model\" ? \"assistant\" : rawLower;\n}\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n args: Record<string, unknown>,\n): void {\n // Use a private property on the span to store kwargs temporarily for setResponseAttributes\n (span as any)._netra_kwargs = kwargs;\n if (!span.isRecording()) {\n return;\n }\n\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, requestType);\n span.setAttribute(SpanAttributes.LLM_SYSTEM, \"google_genai\");\n\n // Model is set on the GenerativeModel instance, not in the request kwargs\n // We need to access it from `this.model` in the wrapper if available\n // For now, set from kwargs if provided\n if (kwargs.model !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, String(kwargs.model));\n }\n\n // Generation config parameters (from generationConfig object or direct kwargs)\n const generationConfig =\n (kwargs.generationConfig as Record<string, unknown>) ?? kwargs;\n\n if (generationConfig.temperature !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TEMPERATURE,\n Number(generationConfig.temperature),\n );\n }\n\n if (generationConfig.topP !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_TOP_P,\n Number(generationConfig.topP),\n );\n }\n\n if (generationConfig.topK !== undefined) {\n span.setAttribute(\"gen_ai.request.top_k\", Number(generationConfig.topK));\n }\n\n if (generationConfig.maxOutputTokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_REQUEST_MAX_TOKENS,\n Number(generationConfig.maxOutputTokens),\n );\n }\n\n if (generationConfig.stopSequences !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_CHAT_STOP_SEQUENCES,\n safeStringify(generationConfig.stopSequences),\n );\n }\n\n // Candidate count\n if (generationConfig.candidateCount !== undefined) {\n span.setAttribute(\n \"gen_ai.request.candidate_count\",\n Number(generationConfig.candidateCount),\n );\n }\n\n // Presence/frequency penalty\n if (generationConfig.presencePenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_PRESENCE_PENALTY,\n Number(generationConfig.presencePenalty),\n );\n }\n if (generationConfig.frequencyPenalty !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_FREQUENCY_PENALTY,\n Number(generationConfig.frequencyPenalty),\n );\n }\n\n // Embedding dimensions\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n\n // Tools\n if (Array.isArray(kwargs.tools) && kwargs.tools.length > 0) {\n span.setAttribute(\"gen_ai.request.tools_count\", kwargs.tools.length);\n }\n\n // Tool config\n if (kwargs.toolConfig !== undefined) {\n span.setAttribute(\n \"gen_ai.request.tool_config\",\n safeStringify(kwargs.toolConfig),\n );\n }\n\n // Safety settings\n if (\n Array.isArray(kwargs.safetySettings) &&\n kwargs.safetySettings.length > 0\n ) {\n span.setAttribute(\n \"gen_ai.request.safety_settings_count\",\n kwargs.safetySettings.length,\n );\n }\n\n // System instruction\n if (kwargs.systemInstruction !== undefined) {\n if (isTraceContentEnabled()) {\n span.setAttribute(\n \"gen_ai.request.system_instruction\",\n safeStringify(kwargs.systemInstruction),\n );\n }\n span.setAttribute(\"gen_ai.request.has_system_instruction\", true);\n }\n\n // Content tracing - prompts\n if (isTraceContentEnabled()) {\n _setPromptAttributes(span, kwargs, args);\n }\n}\n\nfunction isTraceContentEnabled(): boolean {\n const raw =\n process.env.TRACELOOP_TRACE_CONTENT ??\n process.env.NETRA_TRACE_CONTENT ??\n \"\";\n return [\"1\", \"true\"].includes(String(raw).toLowerCase());\n}\n\n/**\n * Extract and set prompt content from Google GenAI request\n */\nfunction _setPromptAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n args: any,\n): void {\n // For generateContent, the prompt can be:\n // 1. A string (simple prompt)\n // 2. An array of Parts (Array<string | Part>)\n // 3. A GenerateContentRequest object with contents array\n\n let promptIndex = 0;\n\n // 1. Add system instruction if present (from getGenerativeModel)\n if (kwargs.systemInstruction !== undefined) {\n const systemInstruction = kwargs.systemInstruction as any;\n let systemContent = \"\";\n\n if (typeof systemInstruction === \"string\") {\n systemContent = systemInstruction;\n } else if (\n systemInstruction.parts &&\n Array.isArray(systemInstruction.parts)\n ) {\n systemContent = systemInstruction.parts\n .filter((p: any) => p.text !== undefined)\n .map((p: any) => String(p.text))\n .join(\"\");\n } else if (systemInstruction.text) {\n systemContent = String(systemInstruction.text);\n } else {\n systemContent = JSON.stringify(systemInstruction);\n }\n\n if (systemContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"system\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n systemContent,\n );\n promptIndex++;\n }\n }\n\n // 2. Chat history from startChat (multiturn context)\n if (kwargs.history && Array.isArray(kwargs.history)) {\n for (const turn of kwargs.history as Array<Record<string, unknown>>) {\n const role = normalizeGenAIRole(String(turn.role ?? \"user\"));\n const parts = turn.parts as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(parts)) {\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n }\n\n // 3. Add prompts from args (generateContent/embedContent call)\n if (!args) return;\n\n // Handle string prompt\n if (typeof args === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n args,\n );\n promptIndex++;\n return;\n }\n\n // Handle Array<string | Part>\n if (Array.isArray(args)) {\n const textParts = args\n .map((p: any) => {\n if (typeof p === \"string\") return p;\n if (p && typeof p.text === \"string\") return p.text;\n return \"\";\n })\n .filter(Boolean)\n .join(\" \");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n \"user\",\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n return;\n }\n\n // Handle GenerateContentRequest object { contents: [...] }\n const contents = args.contents as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(contents)) {\n for (const content of contents) {\n const role = String(content.role ?? \"user\");\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (Array.isArray(parts)) {\n const textParts = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textParts) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.role`,\n role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textParts,\n );\n promptIndex++;\n }\n\n // Track non-text parts\n const inlineDataParts = parts.filter((p) => p.inlineData !== undefined);\n if (inlineDataParts.length > 0) {\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.has_inline_data`,\n true,\n );\n span.setAttribute(\n `gen_ai.prompt.${promptIndex - 1}.inline_data_count`,\n inlineDataParts.length,\n );\n }\n }\n }\n }\n\n // For embedContent, handle content object { parts: [...] } or string\n if (args.content !== undefined) {\n const content = args.content as Record<string, unknown> | string;\n if (typeof content === \"string\") {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n content,\n );\n promptIndex++;\n } else if (content.parts !== undefined) {\n const parts = content.parts as Array<Record<string, unknown>>;\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n if (textContent) {\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${promptIndex}.content`,\n textContent,\n );\n promptIndex++;\n }\n }\n }\n}\n\n/**\n * Set response attributes for Google GenAI responses\n * Handles the specific structure of GenerateContentResult\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) {\n return;\n }\n\n // Google GenAI returns { response: EnhancedGenerateContentResponse }\n // The response object itself is what we need to parse\n const actualResponse =\n (response.response as Record<string, unknown>) ?? response;\n\n // Set usage metadata\n _setUsageAttributes(span, actualResponse);\n\n // Set candidate attributes\n _setCandidateAttributes(span, actualResponse);\n\n // Set prompt feedback if present (content filtering)\n _setPromptFeedbackAttributes(span, actualResponse);\n\n // Set completion content if tracing is enabled\n if (isTraceContentEnabled()) {\n _setCompletionAttributes(span, actualResponse);\n }\n\n // Handle embedding response\n _setEmbeddingResponseAttributes(span, actualResponse);\n}\n\n/**\n * Extract and set token usage from usageMetadata\n */\nfunction _setUsageAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const usageMetadata = response.usageMetadata as\n | Record<string, unknown>\n | undefined;\n if (!usageMetadata) return;\n\n // Prompt tokens\n if (usageMetadata.promptTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_PROMPT_TOKENS,\n Number(usageMetadata.promptTokenCount),\n );\n }\n\n // Completion/candidates tokens\n if (usageMetadata.candidatesTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_COMPLETION_TOKENS,\n Number(usageMetadata.candidatesTokenCount),\n );\n }\n\n // Total tokens\n if (usageMetadata.totalTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n Number(usageMetadata.totalTokenCount),\n );\n }\n\n // Cached content tokens\n if (usageMetadata.cachedContentTokenCount !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS,\n Number(usageMetadata.cachedContentTokenCount),\n );\n }\n}\n\n/**\n * Extract and set attributes from candidates\n */\nfunction _setCandidateAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates) || candidates.length === 0) return;\n\n span.setAttribute(\"gen_ai.response.candidate_count\", candidates.length);\n\n const firstCandidate = candidates[0];\n\n // Finish reason\n if (firstCandidate.finishReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.finish_reason\",\n String(firstCandidate.finishReason),\n );\n }\n\n // Average log probs (if present)\n if (firstCandidate.avgLogprobs !== undefined) {\n span.setAttribute(\n \"gen_ai.response.avg_logprobs\",\n Number(firstCandidate.avgLogprobs),\n );\n }\n\n // Safety ratings\n const safetyRatings = firstCandidate.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings) && safetyRatings.length > 0) {\n span.setAttribute(\n \"gen_ai.response.safety_ratings_count\",\n safetyRatings.length,\n );\n\n // Set individual safety ratings\n for (let i = 0; i < safetyRatings.length; i++) {\n const rating = safetyRatings[i];\n if (rating.category !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.category`,\n String(rating.category),\n );\n }\n if (rating.probability !== undefined) {\n span.setAttribute(\n `gen_ai.response.safety_rating.${i}.probability`,\n String(rating.probability),\n );\n }\n }\n }\n\n // Citation metadata\n const citationMetadata = firstCandidate.citationMetadata as\n | Record<string, unknown>\n | undefined;\n if (citationMetadata?.citationSources !== undefined) {\n const sources = citationMetadata.citationSources as Array<unknown>;\n span.setAttribute(\"gen_ai.response.citation_count\", sources.length);\n }\n\n // Grounding metadata\n if (firstCandidate.groundingMetadata !== undefined) {\n span.setAttribute(\"gen_ai.response.has_grounding\", true);\n }\n}\n\n/**\n * Set prompt feedback attributes (content filtering info)\n */\nfunction _setPromptFeedbackAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const promptFeedback = response.promptFeedback as\n | Record<string, unknown>\n | undefined;\n if (!promptFeedback) return;\n\n if (promptFeedback.blockReason !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_reason\",\n String(promptFeedback.blockReason),\n );\n }\n\n if (promptFeedback.blockReasonMessage !== undefined) {\n span.setAttribute(\n \"gen_ai.response.prompt_block_message\",\n String(promptFeedback.blockReasonMessage),\n );\n }\n\n const safetyRatings = promptFeedback.safetyRatings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(safetyRatings)) {\n span.setAttribute(\n \"gen_ai.response.prompt_safety_ratings_count\",\n safetyRatings.length,\n );\n }\n}\n\n/**\n * Extract and set completion content from candidates\n */\nfunction _setCompletionAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n const candidates = response.candidates as\n | Array<Record<string, unknown>>\n | undefined;\n if (!Array.isArray(candidates)) return;\n\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n const content = candidate.content as Record<string, unknown> | undefined;\n\n if (!content) continue;\n\n const role = normalizeGenAIRole(String(content.role ?? \"model\"));\n const parts = content.parts as Array<Record<string, unknown>> | undefined;\n\n if (!Array.isArray(parts)) continue;\n\n // Extract text from parts\n const textContent = parts\n .filter((p) => p.text !== undefined)\n .map((p) => String(p.text))\n .join(\"\");\n\n if (textContent) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${i}.role`, role);\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${i}.content`,\n textContent,\n );\n }\n\n // Track function calls\n const functionCalls = parts.filter((p) => p.functionCall !== undefined);\n if (functionCalls.length > 0) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call_count`,\n functionCalls.length,\n );\n\n for (let j = 0; j < functionCalls.length; j++) {\n const fc = functionCalls[j].functionCall as Record<string, unknown>;\n if (fc.name !== undefined) {\n span.setAttribute(\n `gen_ai.completion.${i}.function_call.${j}.name`,\n String(fc.name),\n );\n }\n }\n }\n }\n}\n\n/**\n * Set attributes for embedding responses\n */\nfunction _setEmbeddingResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n // Single embedding response\n const embedding = response.embedding as Record<string, unknown> | undefined;\n if (embedding?.values !== undefined) {\n const values = embedding.values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n\n // Batch embedding response\n const embeddings = response.embeddings as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(embeddings)) {\n span.setAttribute(\"gen_ai.response.embedding_count\", embeddings.length);\n if (embeddings.length > 0 && embeddings[0].values !== undefined) {\n const values = embeddings[0].values as number[];\n span.setAttribute(\"gen_ai.response.embedding_dimensions\", values.length);\n }\n }\n}\n","import {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { extractModelName, setRequestAttributes, setResponseAttributes } from \"./utils\";\n\ntype GoogleGenAIRequestType = \"chat\" | \"embedding\";\n\nconst CHAT_SPAN_NAME = \"google_genai.chat\";\nconst EMBEDDING_SPAN_NAME = \"google_genai.embedding\";\n\nfunction googleGenAIWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n const history = modelInstance.history as unknown | undefined;\n\n if(modelName) {\n kwargs.model = extractModelName(modelName);\n }\n if (systemInstruction) {\n kwargs.systemInstruction = systemInstruction;\n }\n if (history) {\n kwargs.history = history;\n }\n\n const currentContext = context.active();\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n const startTime = Date.now();\n const response = original.apply(this, args);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\nfunction googleGenAIStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GoogleGenAIRequestType,\n) {\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n if (shouldSuppressInstrumentation()) {\n return original.apply(this, args);\n }\n\n let kwargs: Record<string, unknown> = {};\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as\n | unknown\n | undefined;\n const history = modelInstance.history as unknown | undefined;\n\n if (modelName) kwargs.model = extractModelName(modelName);\n if (systemInstruction) kwargs.systemInstruction = systemInstruction;\n if (history) kwargs.history = history;\n\n const currentContext = context.active();\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext,\n (span: Span) => {\n const startTime = Date.now();\n\n try {\n setRequestAttributes(span, kwargs, requestType, args[0]);\n\n const response = original.apply(this, args);\n\n // generateContentStream() is async -> Promise<StreamResult>\n if (!isPromise(response)) {\n // If SDK changes to sync stream, still handle it safely\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n\n return (async () => {\n try {\n const streamResult: any = await response;\n\n // Google GenAI stream result typically looks like:\n // { stream: AsyncIterable<Chunk>, response?: Promise<FinalResponse> }\n // We will wrap streamResult.stream so we can end span at completion.\n const originalStream: AsyncIterable<any> = streamResult.stream;\n\n if (\n !originalStream ||\n typeof originalStream[Symbol.asyncIterator] !== \"function\"\n ) {\n // Not a real stream, treat like non-stream\n const endTime = Date.now();\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return streamResult;\n }\n\n let chunkIndex = 0;\n let finalText = \"\";\n let firstTokenRecorded = false;\n\n const wrappedStream: AsyncIterable<any> = {\n [Symbol.asyncIterator]() {\n const iterator = originalStream[Symbol.asyncIterator]();\n return {\n async next() {\n try {\n const res = await iterator.next();\n\n // res = { value, done }\n if (res?.done) {\n const endTime = Date.now();\n\n // Await the response promise if available to get full metadata (token counts, etc.)\n if (\n streamResult.response &&\n isPromise(streamResult.response)\n ) {\n try {\n const finalResponse =\n await streamResult.response;\n const responseDict = modelAsDict(finalResponse);\n setResponseAttributes(span, responseDict);\n } catch {\n // If response promise fails, still set what we have from stream\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n } else {\n // Fallback: set attributes from streamResult\n const responseDict = modelAsDict(streamResult);\n setResponseAttributes(span, responseDict);\n }\n\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\n \"llm.response.duration\",\n duration,\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return res;\n }\n\n const chunk = res.value;\n\n // Optional: store chunk-by-chunk attributes if you want\n // span.setAttribute(`llm.stream.chunk.${chunkIndex}`, ...)\n // Best-effort: accumulate chunk.text() if available\n try {\n const t =\n typeof chunk?.text === \"function\"\n ? chunk.text()\n : chunk?.text;\n if (typeof t === \"string\") {\n if (t && !firstTokenRecorded) {\n span.setAttribute(\n \"gen_ai.performance.time_to_first_token\",\n (Date.now() - startTime) / 1000,\n );\n firstTokenRecorded = true;\n }\n finalText += t;\n }\n } catch {\n // ignore chunk parsing issues\n }\n\n chunkIndex += 1;\n return res;\n } catch (error) {\n // End span on streaming error\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error\n ? error.message\n : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n async return() {\n // Called if consumer stops early (break)\n const endTime = Date.now();\n const duration = (endTime - startTime) / 1000;\n span.setAttribute(\"llm.response.duration\", duration);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return { value: undefined, done: true };\n },\n };\n },\n };\n\n // Return same object but with wrapped stream\n return {\n ...streamResult,\n stream: wrappedStream,\n };\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } catch (error) {\n Logger.error(\"netra.instrumentation.google-genai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n },\n );\n } as unknown as F;\n };\n}\n\n/**\n * Wraps startChat to instrument the returned ChatSession's sendMessage\n * and sendMessageStream methods with proper tracing.\n */\nfunction googleGenAIStartChatWrapper(tracer: Tracer, spanName: string, requestType: GoogleGenAIRequestType) {\n const sendMessageWrapperFn = googleGenAIWrapper(tracer, spanName, requestType);\n const sendMessageStreamWrapperFn = googleGenAIStreamWrapper(tracer, spanName, requestType);\n\n return function wrapper<F extends (...args: any[]) => any>(original: F): F {\n return function (this: unknown, ...args: Parameters<F>): any {\n const chatSession = original.apply(this, args);\n if (!chatSession) return chatSession;\n\n const modelInstance = this as Record<string, unknown>;\n const modelName = modelInstance.model as string | undefined;\n const systemInstruction = modelInstance.systemInstruction as unknown | undefined;\n const chatHistory = (args[0] as Record<string, unknown> | undefined)?.history;\n\n if (typeof chatSession.sendMessage === \"function\" && !chatSession.__netra_patched) {\n const originalSendMessage = chatSession.sendMessage.bind(chatSession);\n const wrappedSendMessage = sendMessageWrapperFn(originalSendMessage);\n\n chatSession.sendMessage = function (this: unknown, ...sendArgs: any[]) {\n const ctx = this as Record<string, unknown>;\n if (modelName) ctx.model = modelName;\n if (systemInstruction) ctx.systemInstruction = systemInstruction;\n if (chatHistory) ctx.history = chatHistory;\n return wrappedSendMessage.apply(this, sendArgs);\n };\n\n if (typeof chatSession.sendMessageStream === \"function\") {\n const originalSendStream = chatSession.sendMessageStream.bind(chatSession);\n const wrappedSendStream = sendMessageStreamWrapperFn(originalSendStream);\n\n chatSession.sendMessageStream = function (this: unknown, ...sendArgs: any[]) {\n const ctx = this as Record<string, unknown>;\n if (modelName) ctx.model = modelName;\n if (systemInstruction) ctx.systemInstruction = systemInstruction;\n if (chatHistory) ctx.history = chatHistory;\n return wrappedSendStream.apply(this, sendArgs);\n };\n }\n\n chatSession.__netra_patched = true;\n }\n\n return chatSession;\n } as unknown as F;\n };\n}\n\n/* Specific wrappers for different requests */\nexport const chatWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer) =>\n googleGenAIWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\nexport const chatStreamWrapper = (tracer: Tracer) =>\n googleGenAIStreamWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport const startChatWrapper = (tracer: Tracer) =>\n googleGenAIStartChatWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n","/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatStreamWrapper, chatWrapper, embeddingsWrapper, startChatWrapper } from \"./wrappers\";\n\nimport shimmer from \"shimmer\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.google_genai\";\nconst INSTRUMENTS = [\"@google/genai >= 0.24.1\"];\n\n// Track instrumentation state\nlet isInstrumented = false;\nlet generativeModelClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Resolve the Google GenAI module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveGoogleGenerativeAIAsync(): Promise<any[]> {\n if (generativeModelClasses.length > 0) return generativeModelClasses;\n\n try {\n // @ts-ignore - @google/generative-ai is an optional peer dependency\n const googleGenAIModule = await import(\"@google/generative-ai\");\n const esmClass =\n googleGenAIModule.GenerativeModel ||\n googleGenAIModule.default?.GenerativeModel ||\n googleGenAIModule.default ||\n googleGenAIModule;\n generativeModelClasses.push(esmClass);\n } catch {\n Logger.warn(\"Failed to resolve Google GenAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@google/generative-ai\");\n const cjsClass =\n mod.GenerativeModel ||\n mod.default?.GenerativeModel ||\n mod.default ||\n mod;\n if (!generativeModelClasses.includes(cjsClass)) {\n generativeModelClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Google GenAI CJS module\");\n }\n\n return generativeModelClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveGoogleGenerativeAIAsync() first to populate cache.\n */\nfunction resolveGoogleGenerativeAI(): any[] {\n return generativeModelClasses;\n}\n\n/**\n * Custom Google GenAI instrumentor for Netra SDK\n */\nexport class NetraGoogleGenerativeAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n // Tracer is initialized lazily during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n /**\n * Instrument Google GenAI client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {},\n ): Promise<NetraGoogleGenerativeAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n const classes = await resolveGoogleGenerativeAIAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((model) => this._instrumentGenerativeModel(model));\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Google GenAI client methods (sync version)\n */\n instrument(\n options: InstrumentorOptions = {},\n ): NetraGoogleGenerativeAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Google GenAI is already instrumented\");\n return this;\n }\n\n const classes = resolveGoogleGenerativeAI();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Google GenAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((model) => this._instrumentGenerativeModel(model));\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument Google GenAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Google GenAI is not instrumented\");\n return;\n }\n\n const classes = resolveGoogleGenerativeAI();\n classes.forEach((model) => this._uninstrumentGenerativeModel(model));\n\n generativeModelClasses = [];\n isInstrumented = false;\n }\n\n /**\n * Check if Google GenAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentGenerativeModel(GenerativeModel: any): void {\n if (!this.tracer) return;\n\n try {\n if (!GenerativeModel?.prototype) {\n Logger.error(\n \"Failed to find Google GenAI GenerativeModel to instrument\",\n );\n return;\n }\n\n const tracer = this.tracer;\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContent\",\n chatWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"generateContentStream\",\n chatStreamWrapper(tracer),\n );\n\n shimmer.wrap(\n GenerativeModel.prototype,\n \"embedContent\",\n embeddingsWrapper(tracer),\n );\n\n if (typeof GenerativeModel.prototype.startChat === \"function\") {\n shimmer.wrap(\n GenerativeModel.prototype,\n \"startChat\",\n startChatWrapper(tracer),\n );\n }\n } catch (error) {\n Logger.debug(\n `Google GenAI instrumentation: failed to instrument: ${error}`,\n );\n }\n }\n\n private _uninstrumentGenerativeModel(GenerativeModel: any): void {\n try {\n if (!GenerativeModel?.prototype) return;\n\n if (typeof GenerativeModel.prototype.generateContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContent\");\n }\n if (\n typeof GenerativeModel.prototype.generateContentStream === \"function\"\n ) {\n shimmer.unwrap(GenerativeModel.prototype, \"generateContentStream\");\n }\n if (typeof GenerativeModel.prototype.embedContent === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"embedContent\");\n }\n if (typeof GenerativeModel.prototype.startChat === \"function\") {\n shimmer.unwrap(GenerativeModel.prototype, \"startChat\");\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Google GenAI: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const googleGenerativeAIInstrumentor =\n new NetraGoogleGenerativeAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport { chatWrapper, chatStreamWrapper, embeddingsWrapper, startChatWrapper } from \"./wrappers\";\n\n// Re-export utilities\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseRequestAttributes(span, kwargs, requestType, \"groq\");\n}\n\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n if (!span.isRecording()) {\n Logger.log(\"Span is not recording\");\n return;\n }\n setBaseResponseAttributes(span, response);\n}\n","import { Tracer, Span, SpanKind, SpanStatusCode, context } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport {\n defineHidden,\n modelAsDict,\n isPromise,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\ntype GroqRequestType = \"chat\";\n\nconst CHAT_SPAN_NAME = \"groq.chat\";\nconst STREAM_ENABLED_REQUESTS: GroqRequestType[] = [\"chat\"];\n\nfunction groqWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: GroqRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown> & { stream?: boolean }\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n const isStreaming = kwargs.stream === true;\n if (isStreaming && STREAM_ENABLED_REQUESTS.includes(requestType)) {\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n currentContext\n );\n\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream: any = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n return new StreamingWrapper(span, response, startTime, kwargs);\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n } else {\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n const responseDict = modelAsDict(value);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n } else {\n const endTime = Date.now();\n const responseDict = modelAsDict(response);\n setResponseAttributes(span, responseDict);\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n }\n } catch (error) {\n Logger.error(\"netra.instrumentation.groq:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n }\n };\n}\n\nexport const chatWrapper = (tracer: Tracer) =>\n groqWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, any> = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (!this.iterator) {\n if (typeof this.response[Symbol.iterator] === \"function\") {\n this.iterator = this.response[Symbol.iterator]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) {\n throw new Error(\"Iterator not initialized\");\n }\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict =\n typeof chunk?.toDict === \"function\" ? chunk.toDict() : chunk;\n const choices = this.completeResponse.choices as any[];\n\n if (chunkDict.model) this.completeResponse.model = chunkDict.model;\n\n const chunkChoices = chunkDict.choices || [];\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = choice.delta || {};\n if (delta?.content) {\n if (!choices[index].message) {\n choices[index].message = { role: \"assistant\", content: \"\" };\n }\n choices[index].message.content += String(delta.content);\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n if (chunkDict.response?.status === \"completed\") {\n const outputs = chunkDict.response.output || [];\n outputs.forEach((output: any) => {\n const content = output.content || [];\n content.forEach((item: any) => {\n choices.push({\n message: { role: \"assistant\", content: item.text || \"\" },\n });\n });\n });\n this.completeResponse.usage = chunkDict.response.usage || {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const duration = (Date.now() - this.startTime) / 1000;\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: any;\n private startTime!: number;\n private requestKwargs!: Record<string, any>;\n\n constructor(span: Span, response: any, startTime: number, requestKwargs: Record<string, any>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) {\n throw new Error(\"Response is not an iterable\");\n }\n\n if (Symbol.asyncIterator in this.response) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (Symbol.iterator in (this.response as any)) {\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private processChunk(chunk: any): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n\n // Completion API\n if (Array.isArray(chunkChoices)) {\n chunkChoices.forEach((choice: any) => {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n }\n\n if (choice.finish_reason) {\n choices[index].finish_reason = choice.finish_reason;\n }\n });\n }\n\n if (chunkDict.usage) this.completeResponse.usage = chunkDict.usage;\n\n // Response API\n if ((chunkDict.response as any)?.status === \"completed\") {\n const response = chunkDict.response as Record<string, unknown>;\n const responseOutput = (response.output || []) as Array<\n Record<string, unknown>\n >;\n responseOutput.forEach((output: any) => {\n const content = output.content as Array<Record<string, unknown>>;\n if (content) {\n for (const contentItem of content) {\n const assistantText = contentItem.text || \"\";\n // Append to choices array instead of replacing\n (\n this.completeResponse.choices as Array<Record<string, unknown>>\n ).push({\n message: { role: \"assistant\", content: assistantText },\n });\n }\n }\n const usage = response.usage || {};\n this.completeResponse.usage = usage;\n });\n }\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as any[];\n const isChat = !!this.requestKwargs?.messages;\n while (choices.length <= index) {\n choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" }\n );\n }\n }\n\n private finalizeSpan(code: SpanStatusCode): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n this.span.setStatus({ code });\n this.span.end();\n }\n}\n","/**\n * Custom Groq instrumentor for Netra SDK\n *\n * Note: 'groq-sdk' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.groq\";\nconst INSTRUMENTS = [\"groq-sdk >= 0.3.0\"];\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\n// Cache all resolved Groq classes (ESM + CJS)\nlet groqClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Resolve the Groq module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveGroqAsync(): Promise<any[]> {\n if (groqClasses.length > 0) return groqClasses;\n\n try {\n // @ts-ignore - groq-sdk is an optional peer dependency\n const groqModule = await import(\"groq-sdk\");\n groqClasses.push(groqModule.Groq || groqModule.default || groqModule);\n } catch {\n Logger.warn(\"Failed to resolve Groq ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"groq-sdk\");\n const cjsClass = mod.Groq || mod.default || mod;\n if (!groqClasses.includes(cjsClass)) {\n groqClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve Groq CJS module\");\n }\n\n return groqClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveGroqAsync() first to populate cache.\n */\nfunction resolveGroq(): any[] {\n return groqClasses;\n}\n\nexport class NetraGroqInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument Groq client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraGroqInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n const classes = await resolveGroqAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((Groq, index) => {\n this._instrumentChatCompletions(Groq, index);\n });\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument Groq client methods (sync version - for backwards compatibility)\n * Note: This uses cached Groq classes. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraGroqInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"Groq is already instrumented\");\n return this;\n }\n\n const classes = resolveGroq();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument Groq:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n classes.forEach((Groq, index) => {\n this._instrumentChatCompletions(Groq, index);\n });\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"Groq is not instrumented\");\n return;\n }\n\n const classes = resolveGroq();\n classes.forEach((Groq, index) => {\n this._uninstrumentChatCompletions(Groq, index);\n });\n\n originalMethods.clear();\n groqClasses = [];\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private _instrumentChatCompletions(Groq: any, index: number): void {\n if (!this.tracer) {\n Logger.warn(\"Groq instrumentation: No tracer available\");\n return;\n }\n\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n if (!CompletionsClass?.prototype?.create) {\n Logger.error(\n \"Groq instrumentation: Could not find Groq chat completions class to instrument\"\n );\n return;\n }\n const originalCreate = CompletionsClass.prototype.create as Function;\n originalMethods.set(`chat.completions.create-${index}`, originalCreate);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n CompletionsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n const wrappedFn = (...a: unknown[]) => original(...a);\n return wrapper(wrappedFn, this, args, kwargs);\n } as typeof CompletionsClass.prototype.create;\n } catch (error) {\n Logger.error(\n `Groq instrumentation: Failed to instrument chat completions: ${error}`\n );\n }\n }\n\n private _uninstrumentChatCompletions(Groq: any, index: number): void {\n try {\n const CompletionsClass = Groq.Chat?.Completions;\n\n const originalCreate = originalMethods.get(`chat.completions.create-${index}`);\n if (originalCreate && CompletionsClass?.prototype) {\n CompletionsClass.prototype.create =\n originalCreate as typeof CompletionsClass.prototype.create;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument chat completions: ${error}`);\n }\n }\n}\n\nexport const groqInstrumentor = new NetraGroqInstrumentor();\n\nexport { chatWrapper } from \"./wrappers\";\n\nexport { setRequestAttributes, setResponseAttributes } from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const __version__ = \"1.0.0\";\n","//#region rolldown:runtime\nvar __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n};\n\n//#endregion\nexport { __export };","import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n","/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n","import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented\n extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n","// Inlined from https://github.com/flexdinesh/browser-or-node\ndeclare global {\n const Deno:\n | {\n version: {\n deno: string;\n };\n env: {\n get: (name: string) => string | undefined;\n };\n }\n | undefined;\n}\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nexport const isWebWorker = () =>\n typeof globalThis === \"object\" &&\n globalThis.constructor &&\n globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const isJsDom = () =>\n (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n (typeof navigator !== \"undefined\" && navigator.userAgent.includes(\"jsdom\"));\n\n// Supabase Edge Function provides a `Deno` global object\n// without `version` property\nexport const isDeno = () => typeof Deno !== \"undefined\";\n\n// Mark not-as-node if in Supabase Edge Function\nexport const isNode = () =>\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\" &&\n !isDeno();\n\nexport const getEnv = () => {\n let env: string;\n if (isBrowser()) {\n env = \"browser\";\n } else if (isNode()) {\n env = \"node\";\n } else if (isWebWorker()) {\n env = \"webworker\";\n } else if (isJsDom()) {\n env = \"jsdom\";\n } else if (isDeno()) {\n env = \"deno\";\n } else {\n env = \"other\";\n }\n\n return env;\n};\n\nexport type RuntimeEnvironment = {\n library: string;\n libraryVersion?: string;\n runtime: string;\n runtimeVersion?: string;\n};\n\nlet runtimeEnvironment: RuntimeEnvironment | undefined;\n\nexport function getRuntimeEnvironment(): RuntimeEnvironment {\n if (runtimeEnvironment === undefined) {\n const env = getEnv();\n\n runtimeEnvironment = {\n library: \"langchain-js\",\n runtime: env,\n };\n }\n return runtimeEnvironment;\n}\n\nexport function getEnvironmentVariable(name: string): string | undefined {\n // Certain Deno setups will throw an error if you try to access environment variables\n // https://github.com/langchain-ai/langchainjs/issues/1412\n try {\n if (typeof process !== \"undefined\") {\n // eslint-disable-next-line no-process-env\n return process.env?.[name];\n } else if (isDeno()) {\n return Deno?.env.get(name);\n } else {\n return undefined;\n }\n } catch {\n return undefined;\n }\n}\n","import * as uuid from \"uuid\";\nimport type { ChainValues } from \"../utils/types/index.js\";\nimport type { BaseMessage } from \"../messages/base.js\";\nimport type { AgentAction, AgentFinish } from \"../agents.js\";\nimport type {\n ChatGenerationChunk,\n GenerationChunk,\n LLMResult,\n} from \"../outputs.js\";\nimport {\n Serializable,\n Serialized,\n SerializedNotImplemented,\n get_lc_unique_name,\n} from \"../load/serializable.js\";\nimport type { SerializedFields } from \"../load/map_keys.js\";\nimport type { DocumentInterface } from \"../documents/document.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Error = any;\n\n/**\n * Interface for the input parameters of the BaseCallbackHandler class. It\n * allows to specify which types of events should be ignored by the\n * callback handler.\n */\nexport interface BaseCallbackHandlerInput {\n ignoreLLM?: boolean;\n ignoreChain?: boolean;\n ignoreAgent?: boolean;\n ignoreRetriever?: boolean;\n ignoreCustomEvent?: boolean;\n _awaitHandler?: boolean;\n raiseError?: boolean;\n}\n\n/**\n * Interface for the indices of a new token produced by an LLM or Chat\n * Model in streaming mode.\n */\nexport interface NewTokenIndices {\n prompt: number;\n completion: number;\n}\n\n// TODO: Add all additional callback fields here\nexport type HandleLLMNewTokenCallbackFields = {\n chunk?: GenerationChunk | ChatGenerationChunk;\n};\n\n/**\n * Abstract class that provides a set of optional methods that can be\n * overridden in derived classes to handle various events during the\n * execution of a LangChain application.\n */\nabstract class BaseCallbackHandlerMethodsClass {\n /**\n * Called at the start of an LLM or Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleLLMStart?(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called when an LLM/ChatModel in `streaming` mode produces a new token\n */\n handleLLMNewToken?(\n token: string,\n /**\n * idx.prompt is the index of the prompt that produced the token\n * (if there are multiple prompts)\n * idx.completion is the index of the completion that produced the token\n * (if multiple completions per prompt are requested)\n */\n idx: NewTokenIndices,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if an LLM/ChatModel run encounters an error\n */\n handleLLMError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of an LLM/ChatModel run, with the output and the run ID.\n */\n handleLLMEnd?(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chat Model run, with the prompt(s)\n * and the run ID.\n */\n handleChatModelStart?(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Chain run, with the chain name and inputs\n * and the run ID.\n */\n handleChainStart?(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n runType?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n parentRunId?: string,\n extra?: Record<string, unknown>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Chain run encounters an error\n */\n handleChainError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Chain run, with the outputs and the run ID.\n */\n handleChainEnd?(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> }\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the start of a Tool run, with the tool name and input\n * and the run ID.\n */\n handleToolStart?(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called if a Tool run encounters an error\n */\n handleToolError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n /**\n * Called at the end of a Tool run, with the tool output and the run ID.\n */\n handleToolEnd?(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleText?(\n text: string,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent is about to execute an action,\n * with the action and the run ID.\n */\n handleAgentAction?(\n action: AgentAction,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n /**\n * Called when an agent finishes execution, before it exits.\n * with the final output and the run ID.\n */\n handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): Promise<void> | void;\n\n handleRetrieverStart?(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverEnd?(\n documents: DocumentInterface[],\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleRetrieverError?(\n err: Error,\n runId: string,\n parentRunId?: string,\n tags?: string[]\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n\n handleCustomEvent?(\n eventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any,\n runId: string,\n tags?: string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata?: Record<string, any>\n ): // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Promise<any> | any;\n}\n\n/**\n * Base interface for callbacks. All methods are optional. If a method is not\n * implemented, it will be ignored. If a method is implemented, it will be\n * called at the appropriate time. All methods are called with the run ID of\n * the LLM/ChatModel/Chain that is running, which is generated by the\n * CallbackManager.\n *\n * @interface\n */\nexport type CallbackHandlerMethods = BaseCallbackHandlerMethodsClass;\n\n/**\n * Interface for handlers that can indicate a preference for streaming responses.\n * When implemented, this allows the handler to signal whether it prefers to receive\n * streaming responses from language models rather than complete responses.\n */\nexport interface CallbackHandlerPrefersStreaming {\n readonly lc_prefer_streaming: boolean;\n}\n\nexport function callbackHandlerPrefersStreaming(x: BaseCallbackHandler) {\n return \"lc_prefer_streaming\" in x && x.lc_prefer_streaming;\n}\n\n/**\n * Abstract base class for creating callback handlers in the LangChain\n * framework. It provides a set of optional methods that can be overridden\n * in derived classes to handle various events during the execution of a\n * LangChain application.\n */\nexport abstract class BaseCallbackHandler\n extends BaseCallbackHandlerMethodsClass\n implements BaseCallbackHandlerInput, Serializable\n{\n lc_serializable = false;\n\n get lc_namespace(): [\"langchain_core\", \"callbacks\", string] {\n return [\"langchain_core\", \"callbacks\", this.name];\n }\n\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_attributes(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof BaseCallbackHandler),\n ];\n }\n\n lc_kwargs: SerializedFields;\n\n abstract name: string;\n\n ignoreLLM = false;\n\n ignoreChain = false;\n\n ignoreAgent = false;\n\n ignoreRetriever = false;\n\n ignoreCustomEvent = false;\n\n raiseError = false;\n\n awaitHandlers =\n getEnvironmentVariable(\"LANGCHAIN_CALLBACKS_BACKGROUND\") === \"false\";\n\n constructor(input?: BaseCallbackHandlerInput) {\n super();\n this.lc_kwargs = input || {};\n if (input) {\n this.ignoreLLM = input.ignoreLLM ?? this.ignoreLLM;\n this.ignoreChain = input.ignoreChain ?? this.ignoreChain;\n this.ignoreAgent = input.ignoreAgent ?? this.ignoreAgent;\n this.ignoreRetriever = input.ignoreRetriever ?? this.ignoreRetriever;\n this.ignoreCustomEvent =\n input.ignoreCustomEvent ?? this.ignoreCustomEvent;\n this.raiseError = input.raiseError ?? this.raiseError;\n this.awaitHandlers =\n this.raiseError || (input._awaitHandler ?? this.awaitHandlers);\n }\n }\n\n copy(): BaseCallbackHandler {\n return new (this.constructor as new (\n input?: BaseCallbackHandlerInput\n ) => BaseCallbackHandler)(this);\n }\n\n toJSON(): Serialized {\n return Serializable.prototype.toJSON.call(this);\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return Serializable.prototype.toJSONNotImplemented.call(this);\n }\n\n static fromMethods(methods: CallbackHandlerMethods) {\n class Handler extends BaseCallbackHandler {\n name = uuid.v7();\n\n constructor() {\n super();\n Object.assign(this, methods);\n }\n }\n return new Handler();\n }\n}\n\nexport const isBaseCallbackHandler = (x: unknown) => {\n const callbackHandler = x as BaseCallbackHandler;\n return (\n callbackHandler !== undefined &&\n typeof callbackHandler.copy === \"function\" &&\n typeof callbackHandler.name === \"string\" &&\n typeof callbackHandler.awaitHandlers === \"boolean\"\n );\n};\n","import { Span } from \"@opentelemetry/api\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { SpanAttributes } from \"../span-attributes\";\n\nexport const NetraLanggraphAttributes = {\n spanType: \"netra.span.type\",\n entityInput: \"netra.entity.input\",\n entityOutput: \"netra.entity.output\",\n} as const;\n\nconst tagFilter = (tag: string) => {\n const filterableTags = [\"langsmith:hidden\"];\n return !filterableTags.includes(tag);\n};\n\nconst metadataFilter = (key: string) => {\n return !key.startsWith(\"__\");\n};\n\nexport function setGraphInputAttributes(\n span: Span,\n inputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify({ inputs }),\n );\n}\n\nexport function setGraphOutputAttributes(\n span: Span,\n outputs: Record<string, any>,\n): void {\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs }),\n );\n}\n\nexport function setLlmRequestAttributes(\n span: Span,\n metadata: Record<string, any>,\n prompts: string[],\n extraParams: Record<string, any>,\n): void {\n setLlmPrompts(span, prompts);\n const attributeMappings = mapLlmAttributes(metadata, extraParams);\n for (let [key, value] of Object.entries(attributeMappings)) {\n if (value !== undefined) {\n span.setAttribute(key, value);\n }\n }\n}\n\nexport function setChainInputAttributes(\n span: Span,\n inputs: ChainValues,\n tags?: string[],\n metadata?: Record<string, unknown>,\n): void {\n const entityInputs: Record<string, any> = { inputs };\n\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityInputs[\"tags\"] = filteredTags;\n }\n }\n\n if (metadata) {\n const filteredMetadata: Record<string, any> = {};\n const kwargs: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n if (key === \"langgraph_node\") kwargs.name = value;\n }\n\n entityInputs[\"metadata\"] = filteredMetadata;\n if (Object.keys(kwargs).length > 0) {\n entityInputs[\"kwargs\"] = kwargs;\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n}\n\nexport function setChainOutputAttributes(\n span: Span,\n outputs: ChainValues,\n tags?: string[],\n): void {\n const entityOutputs: Record<string, any> = { outputs };\n if (tags) {\n const filteredTags = tags.filter(tagFilter);\n if (filteredTags.length > 0) {\n entityOutputs[\"kwargs\"] = { tags: filteredTags };\n }\n }\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nexport function setToolAttributes(\n span: Span,\n toolName: string,\n input: Record<string, any>,\n output: string,\n metadata?: Record<string, any>,\n tags?: string[],\n): void {\n span.setAttribute(NetraLanggraphAttributes.spanType, \"TOOL\");\n const filteredTags = tags?.filter(tagFilter) ?? [];\n const filteredMetadata: Record<string, any> = {};\n\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n if (metadataFilter(key)) filteredMetadata[key] = value;\n }\n }\n\n const entityInputs: Record<string, any> = {\n input_str: JSON.stringify(input),\n metadata: filteredMetadata,\n tags: filteredTags,\n };\n\n const entityOutputs: Record<string, any> = {\n output,\n kwargs: { name: toolName, tags: filteredTags },\n };\n\n span.setAttribute(\n NetraLanggraphAttributes.entityInput,\n JSON.stringify(entityInputs),\n );\n span.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify(entityOutputs),\n );\n}\n\nfunction mapLlmAttributes(\n metadata: Record<string, any>,\n extraParams: Record<string, any>,\n): Record<string, any> {\n const options = extraParams?.invocation_params?.options || {};\n\n return {\n [SpanAttributes.LLM_REQUEST_MODEL]: options.model || metadata.ls_model_name,\n [SpanAttributes.LLM_REQUEST_TEMPERATURE]:\n options.temperature ?? metadata.ls_temperature,\n [SpanAttributes.LLM_REQUEST_MAX_TOKENS]:\n options.num_predict ?? metadata.ls_max_tokens,\n [SpanAttributes.LLM_FREQUENCY_PENALTY]: options.frequency_penalty,\n [SpanAttributes.LLM_PRESENCE_PENALTY]: options.presence_penalty,\n [SpanAttributes.LLM_CHAT_STOP_SEQUENCES]: options.stop ?? metadata.ls_stop,\n [SpanAttributes.LLM_REQUEST_TOP_P]: options.top_p,\n };\n}\n\nfunction setLlmPrompts(span: Span, prompts: string[]): void {\n const seperator = \":\";\n const roleMap: Record<string, string> = { human: \"user\" };\n\n prompts.forEach((prompt, index) => {\n const [role, ...rest] = prompt.split(seperator);\n const content = rest.join(seperator);\n\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.role`,\n roleMap[role.toLowerCase()] ?? role,\n );\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n content,\n );\n });\n}\n","import { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport { LLMResult } from \"@langchain/core/outputs\";\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n Span,\n SpanKind,\n Tracer,\n Context,\n context,\n trace,\n createContextKey,\n} from \"@opentelemetry/api\";\n\nimport { Logger } from \"../../logger\";\nimport {\n defineHidden,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Context key to track if we're inside a LangGraph instrumented call\n// This prevents double-instrumentation when invoke internally calls stream\nconst LANGGRAPH_INSTRUMENTATION_ACTIVE = createContextKey(\"netra.langgraph.active\");\n\nfunction getContextManager(): any {\n try {\n if ((context as any)._getContextManager) {\n return (context as any)._getContextManager();\n }\n\n const globalSymbols = Object.getOwnPropertySymbols(global);\n const otelSymbol = globalSymbols.find(s =>\n s.toString().includes(\"opentelemetry.js.api\"),\n );\n if (otelSymbol) {\n const globalState = (global as any)[otelSymbol];\n if (globalState?.contextManager) {\n return globalState.contextManager;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nfunction enterWithContext(newContext: Context): void {\n const contextManager = getContextManager();\n if (!contextManager) return;\n\n if (typeof contextManager.enterWith === \"function\") {\n contextManager.enterWith(newContext);\n return;\n }\n\n if (\n contextManager._asyncLocalStorage &&\n typeof contextManager._asyncLocalStorage.enterWith === \"function\"\n ) {\n contextManager._asyncLocalStorage.enterWith(newContext);\n }\n}\nimport {\n NetraLanggraphAttributes,\n setChainInputAttributes,\n setChainOutputAttributes,\n setGraphInputAttributes,\n setGraphOutputAttributes,\n setLlmRequestAttributes,\n setToolAttributes,\n} from \"./utils\";\n\ntype AnyFunc = (...args: any[]) => any;\ntype AsyncIterableFunc = (...args: any[]) => Promise<AsyncIterable<any>>;\n\nclass NetraLanggraphCallbackHandler extends BaseCallbackHandler {\n name = \"netra-langgraph-callback-handler\";\n // Map runId -> Span for explicit parenting\n private spans: Map<string, Span> = new Map();\n private nodeAttributes: Map<string, Record<string, any>> = new Map();\n private runStack: string[] = [];\n private inferredParents: Map<string, string> = new Map();\n\n constructor(\n private tracer: Tracer,\n private rootSpan: Span,\n ) {\n super();\n }\n\n private getParentSpan(parentRunId?: string): Span {\n if (parentRunId && this.spans.has(parentRunId)) {\n return this.spans.get(parentRunId)!;\n }\n return this.rootSpan;\n }\n\n private addNodeAttributes(runId: string, attributes: Record<string, any>) {\n const current = this.nodeAttributes.get(runId) || {};\n this.nodeAttributes.set(runId, { ...current, ...attributes });\n }\n\n private inferParentRunId(parentRunId?: string): string | undefined {\n if (parentRunId) return parentRunId;\n return this.runStack.length > 0\n ? this.runStack[this.runStack.length - 1]\n : undefined;\n }\n\n private pushRun(runId: string): void {\n this.runStack.push(runId);\n }\n\n private popRun(runId: string): void {\n const last = this.runStack[this.runStack.length - 1];\n if (last === runId) {\n this.runStack.pop();\n return;\n }\n const idx = this.runStack.lastIndexOf(runId);\n if (idx >= 0) {\n this.runStack.splice(idx, 1);\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n runType?: string,\n ) {\n const metadataNodeName =\n typeof metadata?.langgraph_node === \"string\"\n ? (metadata.langgraph_node as string)\n : \"\";\n const runNameValue = typeof runName === \"string\" ? runName : \"\";\n const chainIdName =\n Array.isArray(chain.id) && chain.id.length > 0\n ? chain.id[chain.id.length - 1]\n : \"\";\n const nodeName = metadataNodeName || runNameValue || chainIdName || \"Chain\";\n const nodeType = chainIdName || \"Unknown\";\n\n const metadataKeys =\n metadata && typeof metadata === \"object\"\n ? Object.keys(metadata as Record<string, unknown>).join(\",\")\n : \"n/a\";\n Logger.debug(\n `NetraLanggraph handleChainStart: runId=${runId} parentRunId=${parentRunId} nodeName=${nodeName} nodeType=${nodeType} runName=${runNameValue || \"n/a\"} metadataKeys=${metadataKeys}`,\n );\n\n if (\n !nodeName ||\n [\"__start__\"].includes(nodeName.toLowerCase())\n ) {\n return;\n }\n\n const effectiveParentRunId = this.inferParentRunId(parentRunId);\n if (\n !parentRunId &&\n effectiveParentRunId &&\n effectiveParentRunId !== runId\n ) {\n this.inferredParents.set(runId, effectiveParentRunId);\n Logger.debug(`NetraLanggraph inferred parent: runId=${runId} parentRunId=${effectiveParentRunId}`);\n }\n\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n\n // Create span parented to the correct node/workflow\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${nodeName}.task`, undefined, ctx);\n\n setChainInputAttributes(span, inputs, tags, metadata);\n\n this.spans.set(runId, span);\n this.pushRun(runId);\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n\n setChainOutputAttributes(span, outputs, tags);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleChainError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n kwargs?: { inputs?: Record<string, unknown> },\n ) {\n const span = this.spans.get(runId);\n if (!span) return;\n span.recordException(err);\n span.end();\n this.spans.delete(runId);\n this.nodeAttributes.delete(runId);\n this.inferredParents.delete(runId);\n this.popRun(runId);\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const llmId = llm.id?.[llm.id.length - 1] || \"llm\";\n Logger.debug(`NetraLanggraph handleLLMStart: runId=${runId} parentRunId=${effectiveParentRunId} llmId=${llmId}`);\n }\n this.addNodeAttributes(runId, {\n llmIds: llm.id,\n metadata,\n prompts,\n extraParams,\n parentRunId: effectiveParentRunId, // Store parent ID to link back\n });\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n parentRunId?: string,\n ): Promise<void> {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const response = (output?.generations?.[0]?.[0] as any)?.message;\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n setLlmRequestAttributes(\n span,\n attributes.metadata,\n attributes.prompts,\n attributes.extraParams,\n );\n setBaseResponseAttributes(span, response);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n extraParams?: Record<string, unknown>,\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const llmIds = attributes.llmIds ?? [];\n const llmId = llmIds?.length > 0 ? llmIds[llmIds.length - 1] : \"llm\";\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${llmId}.task`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runName?: string,\n ) {\n let parsedInput: Record<string | number, any>;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n parsedInput = {};\n }\n\n const effectiveParentRunId =\n parentRunId ?? this.inferParentRunId(parentRunId);\n {\n const toolName = tool.id?.[tool.id.length - 1] || \"tool\";\n Logger.debug(`NetraLanggraph handleToolStart: runId=${runId} parentRunId=${effectiveParentRunId} tool=${toolName}`);\n }\n this.addNodeAttributes(runId, {\n input: parsedInput,\n metadata,\n tags,\n parentRunId: effectiveParentRunId,\n });\n }\n\n async handleToolEnd(\n output: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const { input, metadata } = attributes;\n\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n setToolAttributes(span, toolName, input ?? {}, output, metadata, tags);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n\n async handleToolError(\n err: any,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n ) {\n const attributes = this.nodeAttributes.get(runId);\n if (!attributes) return;\n\n const toolName = attributes?.input?.name ?? \"custom\";\n const effectiveParentRunId =\n parentRunId ??\n attributes.parentRunId ??\n this.inferredParents.get(runId);\n const parentSpan = this.getParentSpan(effectiveParentRunId);\n const ctx = trace.setSpan(context.active(), parentSpan);\n const span = this.tracer.startSpan(`${toolName}.tool`, undefined, ctx);\n span.recordException(err);\n span.end();\n\n this.nodeAttributes.delete(runId);\n }\n}\n\nclass LanggraphStreamingWrapper implements AsyncIterable<unknown> {\n private iterable: any;\n private output: Record<string, any> = {};\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private rootSpan!: Span;\n private rootContext!: Context;\n\n constructor(rootSpan: Span, rootContext: Context) {\n defineHidden(this, \"rootSpan\", rootSpan);\n defineHidden(this, \"rootContext\", rootContext);\n }\n\n toJSON() {\n try {\n return this.output;\n } catch {\n return {};\n }\n }\n\n async startStream(\n originalFunc: (...args: any[]) => any,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ) {\n this.iterable = await originalFunc.call(instance, input, config, ...rest);\n return this;\n }\n\n async *[Symbol.asyncIterator]() {\n const spanContext = trace.setSpan(this.rootContext, this.rootSpan);\n try {\n const iterator = await this.iterable[Symbol.asyncIterator]();\n while (true) {\n let result: any;\n await context.with(spanContext, async () => {\n result = await iterator.next();\n });\n if (result.done) break;\n const value = result?.value ?? {};\n this.output = { ...this.output, ...value };\n yield result;\n }\n this.rootSpan.setAttribute(\n NetraLanggraphAttributes.entityOutput,\n JSON.stringify({ outputs: this.output }),\n );\n } catch (error) {\n this.rootSpan.recordException(error as Error);\n throw error;\n } finally {\n this.rootSpan.end();\n }\n }\n}\n\nexport class LanggraphWrapper {\n private spanName: string;\n\n constructor(private tracer: Tracer) {\n this.spanName = \"Langgraph.workflow\";\n }\n\n private getUpdatedConfig(\n config?: RunnableConfig,\n rootSpan?: Span,\n ): RunnableConfig {\n if (!rootSpan) return config || {};\n\n const callbackHandler = new NetraLanggraphCallbackHandler(\n this.tracer,\n rootSpan,\n );\n const callbacks = config?.callbacks;\n const normalizedCallbacks = callbacks\n ? Array.isArray(callbacks)\n ? callbacks\n : [callbacks]\n : [];\n const updatedConfig: RunnableConfig = {\n ...config,\n callbacks: [...normalizedCallbacks, callbackHandler],\n };\n return updatedConfig;\n }\n\n async invoke(\n originalFunc: AnyFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n const activeSpan = trace.getSpan(context.active());\n Logger.debug(`LangGraph invoke start. Active TraceId: ${activeSpan?.spanContext().traceId}, SpanId: ${activeSpan?.spanContext().spanId}`);\n\n // Start metadata spanning for the workflow\n // We use context.active() to parent to the current active span (e.g. request handler)\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active()\n );\n\n Logger.debug(`LangGraph span created. New TraceId: ${span.spanContext().traceId}, SpanId: ${span.spanContext().spanId}`);\n\n // Set the active flag to prevent nested instrumentation (e.g., when invoke calls stream internally)\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n\n return context.with(ctxWithFlag, async () => {\n {\n const innerSpan = trace.getSpan(context.active());\n Logger.debug(`Inside LangGraph context. Active TraceId: ${innerSpan?.spanContext().traceId}, SpanId: ${innerSpan?.spanContext().spanId}`);\n }\n try {\n setGraphInputAttributes(span, input);\n\n // Pass the workflow span as the root for the callback handler\n const updatedConfig = this.getUpdatedConfig(config, span);\n\n const output = await originalFunc.call(\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n\n setGraphOutputAttributes(span, output);\n\n return output;\n } catch (e) {\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n });\n }\n\n async stream(\n originalFunc: AsyncIterableFunc,\n instance: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<unknown> {\n // Skip if instrumentation is suppressed or we're already inside a LangGraph instrumented call\n if (shouldSuppressInstrumentation() || context.active().getValue(LANGGRAPH_INSTRUMENTATION_ACTIVE)) {\n Logger.debug(\"LangGraph stream skipped (inside instrumented call)\");\n return await originalFunc.call(instance, input, config, ...rest);\n }\n\n Logger.debug(\"LangGraph stream starting instrumentation\");\n\n const span = this.tracer.startSpan(\n this.spanName,\n {\n kind: SpanKind.CLIENT,\n },\n context.active(),\n );\n setGraphInputAttributes(span, input);\n const updatedConfig = this.getUpdatedConfig(config, span);\n try {\n const ctxWithSpan = trace.setSpan(context.active(), span);\n const ctxWithFlag = ctxWithSpan.setValue(LANGGRAPH_INSTRUMENTATION_ACTIVE, true);\n enterWithContext(ctxWithFlag);\n const streamingWrapper = new LanggraphStreamingWrapper(span, ctxWithFlag);\n return streamingWrapper.startStream(\n originalFunc,\n instance,\n input,\n updatedConfig,\n ...rest,\n );\n } catch (error) {\n span.recordException(error as Error);\n span.end();\n }\n }\n}\n","import { RunnableConfig } from \"@langchain/core/runnables\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { LanggraphWrapper } from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.langgraph\";\nconst INSTRUMENTS = [\"langgraph >= 1.1.1\"];\n\nlet isInstrumented = false;\nlet LanggraphClass: any = null;\nconst originalMethods: Map<string, Function | object> = new Map();\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\n/**\n * Find a module in Node's require cache by name pattern.\n * This allows us to patch the same module instance the app is using.\n */\nfunction findModuleInCache(moduleName: string): any {\n // Try require.cache first (CommonJS)\n if (typeof require !== 'undefined' && require.cache) {\n const cache = require.cache;\n for (const key of Object.keys(cache)) {\n // Match the module name in the path, but exclude our own SDK's copy\n if (key.includes(moduleName.replace(/\\//g, '/')) && !key.includes('netra-sdk')) {\n Logger.debug(`Found module in require.cache: ${key}`);\n return cache[key]?.exports;\n }\n }\n Logger.debug(\n `Module ${moduleName} not found in require.cache. Cache keys containing 'langgraph':`,\n Object.keys(cache).filter(k => k.includes('langgraph')),\n );\n }\n return null;\n}\n\nasync function resolveLanggraph(): Promise<any> {\n if (LanggraphClass) return LanggraphClass;\n try {\n // First, try to find the module in require.cache (already loaded by the app)\n // This ensures we patch the same module instance the app is using\n let langgraphModule = findModuleInCache('@langchain/langgraph');\n\n if (langgraphModule) {\n Logger.debug(\"Found @langchain/langgraph in require.cache (using app's module instance)\");\n } else {\n // Fallback to dynamic import if not in cache\n langgraphModule = await import(\"@langchain/langgraph\");\n Logger.debug(\"Loaded @langchain/langgraph via dynamic import\");\n }\n\n Logger.debug(\"LangGraph Module Exports:\", Object.keys(langgraphModule));\n LanggraphClass = langgraphModule.CompiledStateGraph ?? langgraphModule.StateGraph;\n Logger.debug(\"Resolved LanggraphClass:\", !!LanggraphClass);\n Logger.debug(\"LanggraphClass name:\", LanggraphClass?.name);\n Logger.debug(\n \"LanggraphClass.prototype keys:\",\n LanggraphClass?.prototype ? Object.getOwnPropertyNames(LanggraphClass.prototype) : \"no prototype\",\n );\n Logger.debug(\"Has invoke on prototype:\", !!LanggraphClass?.prototype?.invoke);\n Logger.debug(\"Has stream on prototype:\", !!LanggraphClass?.prototype?.stream);\n\n // Check prototype chain to find where invoke is defined\n Logger.debug(\"Checking prototype chain for invoke location:\");\n let proto = LanggraphClass?.prototype;\n while (proto) {\n const hasOwn = Object.getOwnPropertyNames(proto).includes('invoke');\n Logger.debug(` ${proto.constructor?.name}: hasOwnProperty('invoke')=${hasOwn}`);\n if (hasOwn) {\n Logger.debug(` -> invoke is defined on: ${proto.constructor?.name}`);\n break;\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return LanggraphClass;\n } catch (e) {\n Logger.error(\"Failed to resolve LangGraph:\", e);\n return null;\n }\n}\n\nexport class NetraLanggraphInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n\n constructor() {}\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n instrumentationDependencies(): string[] {\n return [...INSTRUMENTS];\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraLanggraphInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"Langgraph is already instrumented\");\n return this;\n }\n\n const Langgraph = await resolveLanggraph();\n if (!Langgraph) {\n Logger.warn(\"LangGraph class not found, skipping instrumentation\");\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider\n ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n this._instrumentInvoke(Langgraph);\n this._instrumentStream(Langgraph);\n isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!isInstrumented) {\n Logger.warn(\"LangGraph is not instrumented\");\n return;\n }\n\n const Langgraph = await resolveLanggraph();\n if (Langgraph) {\n this._uninstrumentInvoke(Langgraph);\n this._uninstrumentStream(Langgraph);\n }\n\n originalMethods.clear();\n LanggraphClass = null;\n isInstrumented = false;\n }\n\n private _instrumentInvoke(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the invoke method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('invoke')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.invoke) {\n Logger.error(\"Failed to find langgraph invoke function to instrument\");\n return;\n }\n\n Logger.debug(`Found invoke on prototype: ${targetProto.constructor?.name}`);\n\n const originalInvoke = targetProto.invoke;\n originalMethods.set(\"langgraph.graph.invoke\", originalInvoke);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.invoke.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n const patchedInvoke = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph invoke intercepted!\");\n return await wrapper.invoke(\n originalInvoke,\n this,\n input,\n config,\n ...rest,\n );\n };\n // Add marker to identify patched method\n (patchedInvoke as any).__netra_patched = true;\n targetProto.invoke = patchedInvoke;\n\n Logger.debug(`Successfully instrumented LangGraph invoke method on ${targetProto.constructor?.name}`);\n Logger.debug(`Patched Pregel class identity:`, targetProto.constructor);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph invoke: ${error}`);\n }\n }\n\n private _instrumentStream(Langgraph: any): void {\n if (!this.tracer) return;\n\n try {\n // Find the prototype that actually owns the stream method\n let targetProto = Langgraph?.prototype;\n while (targetProto && !Object.getOwnPropertyNames(targetProto).includes('stream')) {\n targetProto = Object.getPrototypeOf(targetProto);\n }\n\n if (!targetProto?.stream) {\n Logger.error(\"Failed to find langgraph stream function to instrument\");\n return;\n }\n\n Logger.debug(`Found stream on prototype: ${targetProto.constructor?.name}`);\n\n const originalStream = targetProto.stream;\n originalMethods.set(\"langgraph.graph.stream\", originalStream);\n // Store the target prototype for uninstrumentation\n originalMethods.set(\"langgraph.graph.stream.proto\", targetProto);\n\n const tracer = this.tracer;\n const wrapper = new LanggraphWrapper(tracer);\n\n targetProto.stream = async function (\n this: unknown,\n input: any,\n config?: RunnableConfig,\n ...rest: any[]\n ): Promise<any> {\n Logger.debug(\"LangGraph stream intercepted!\");\n return await wrapper.stream(\n originalStream,\n this,\n input,\n config,\n ...rest,\n );\n };\n\n Logger.debug(`Successfully instrumented LangGraph stream method on ${targetProto.constructor?.name}`);\n } catch (error) {\n Logger.error(`Failed to instrument langgraph stream: ${error}`);\n }\n }\n\n private _uninstrumentInvoke(Langgraph: any): void {\n try {\n const originalInvoke = originalMethods.get(\"langgraph.graph.invoke\");\n const targetProto = originalMethods.get(\"langgraph.graph.invoke.proto\") || Langgraph?.prototype;\n if (originalInvoke && targetProto?.invoke) {\n targetProto.invoke = originalInvoke;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph invoke: ${error}`);\n }\n return;\n }\n\n private _uninstrumentStream(Langgraph: any): void {\n try {\n const originalStream = originalMethods.get(\"langgraph.graph.stream\");\n const targetProto = originalMethods.get(\"langgraph.graph.stream.proto\") || Langgraph?.prototype;\n if (originalStream && targetProto?.stream) {\n targetProto.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument langgraph stream: ${error}`);\n }\n return;\n }\n}\n\nexport const langgraphInstrumentor = new NetraLanggraphInstrumentor();\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for MistralAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","/**\n * MistralAI-specific utility functions for instrumentation.\n *\n * This file extends the shared instrumentation utilities with Mistral-only\n * fields while keeping attribute naming consistent across providers.\n */\n\nimport { Span } from \"@opentelemetry/api\";\nimport {\n modelAsDict,\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"../utils\";\n\n// Re-export common utilities for convenience\nexport { modelAsDict, shouldSuppressInstrumentation };\n\n/**\n * Set request attributes on span for MistralAI.\n * Includes MistralAI-specific attributes.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string\n): void {\n // Set shared/common attributes first\n setBaseRequestAttributes(span, kwargs, requestType, \"mistralai\");\n\n // MistralAI-specific: Agent ID (agents API)\n if (kwargs.agentId) {\n span.setAttribute(\"gen_ai.agent.id\", String(kwargs.agentId));\n span.setAttribute(\"llm.agent.id\", String(kwargs.agentId));\n }\n\n // MistralAI-specific: Safe prompt\n if (kwargs.safePrompt !== undefined) {\n span.setAttribute(\"gen_ai.mistral.safe_prompt\", Boolean(kwargs.safePrompt));\n }\n\n // MistralAI-specific: Random seed\n if (kwargs.randomSeed !== undefined && kwargs.randomSeed !== null) {\n span.setAttribute(\"gen_ai.mistral.random_seed\", Number(kwargs.randomSeed));\n }\n\n // MistralAI FIM-specific: prompt and suffix\n if (kwargs.prompt !== undefined) {\n span.setAttribute(\"llm.request.has_prompt\", true);\n }\n if (kwargs.suffix !== undefined && kwargs.suffix !== null) {\n span.setAttribute(\"llm.request.has_suffix\", true);\n }\n}\n\n/**\n * Set response attributes on span for MistralAI\n * Uses the shared response attributes (supports snake_case + camelCase).\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>\n): void {\n // Use common response attributes - handles both snake_case and camelCase\n setBaseResponseAttributes(span, response);\n}\n","/**\n * Wrapper functions for MistralAI instrumentation\n */\n\nimport {\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n} from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { defineHidden, isPromise } from \"../utils\";\nimport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\n// Span names\nconst CHAT_SPAN_NAME = \"mistralai.chat\";\nconst EMBEDDING_SPAN_NAME = \"mistralai.embedding\";\nconst FIM_SPAN_NAME = \"mistralai.fim\";\nconst AGENTS_SPAN_NAME = \"mistralai.agents\";\n// Align with OpenAI/Groq: streaming uses same span name\nconst CHAT_STREAM_SPAN_NAME = CHAT_SPAN_NAME;\nconst FIM_STREAM_SPAN_NAME = FIM_SPAN_NAME;\nconst AGENTS_STREAM_SPAN_NAME = AGENTS_SPAN_NAME;\n\ntype MistralRequestType = \"chat\" | \"embedding\" | \"fim\" | \"agent\";\n\nfunction mistralWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n return tracer.startActiveSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: { \"llm.request.type\": requestType },\n },\n (span: Span) => {\n try {\n setRequestAttributes(span, kwargs, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const value = await response;\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(value));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message:\n error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n\n const endTime = Date.now();\n setResponseAttributes(span, modelAsDict(response));\n span.setAttribute(\n \"llm.response.duration\",\n (endTime - startTime) / 1000\n );\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nfunction mistralStreamWrapper(\n tracer: Tracer,\n spanName: string,\n requestType: MistralRequestType\n) {\n return function wrapper<F extends (...args: any[]) => any>(\n wrapped: F,\n instance: unknown,\n args: Parameters<F>,\n kwargs: Record<string, unknown>\n ): unknown {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((value) => value) : result;\n }\n\n // IMPORTANT: Pass the active context to inherit parent span\n const currentContext = context.active();\n const span = tracer.startSpan(\n spanName,\n {\n kind: SpanKind.CLIENT,\n attributes: {\n \"llm.request.type\": requestType,\n \"llm.request.stream\": true,\n },\n },\n currentContext\n );\n\n try {\n // Force stream=true for attribution\n setRequestAttributes(span, { ...kwargs, stream: true }, requestType);\n const startTime = Date.now();\n const response = wrapped.call(instance, ...args);\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n if (\n stream &&\n typeof stream === \"object\" &&\n Symbol.asyncIterator in (stream as any)\n ) {\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n }\n return new StreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n })();\n }\n if (\n response &&\n typeof response === \"object\" &&\n Symbol.asyncIterator in (response as any)\n ) {\n return new AsyncStreamingWrapper(span, response, startTime, kwargs);\n }\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n Logger.error(\"netra.instrumentation.mistralai:\", error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n };\n}\n\n/**\n * Wrapper factory for chat completions\n */\nexport const chatWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, CHAT_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for chat stream\n */\nexport const chatStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, CHAT_STREAM_SPAN_NAME, \"chat\");\n\n/**\n * Wrapper factory for embeddings\n */\nexport const embeddingsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, EMBEDDING_SPAN_NAME, \"embedding\");\n\n/**\n * Wrapper factory for FIM completions\n */\nexport const fimWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, FIM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for FIM stream\n */\nexport const fimStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, FIM_STREAM_SPAN_NAME, \"fim\");\n\n/**\n * Wrapper factory for agents completions\n */\nexport const agentsWrapper = (tracer: Tracer) =>\n mistralWrapper(tracer, AGENTS_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper factory for agents stream\n */\nexport const agentsStreamWrapper = (tracer: Tracer) =>\n mistralStreamWrapper(tracer, AGENTS_STREAM_SPAN_NAME, \"agent\");\n\n/**\n * Wrapper for streaming responses when the SDK returns a sync Iterable/Iterator.\n * (Matches the newer OpenAI/Groq wrapper behavior.)\n */\nexport class StreamingWrapper implements Iterable<unknown>, Iterator<unknown> {\n private iterator: Iterator<unknown> | null = null;\n private completeResponse: Record<string, unknown> = {\n choices: [],\n model: \"\",\n };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n\n constructor(span: Span, response: unknown, startTime: number, requestKwargs: Record<string, unknown>) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n const isObject = this.response && typeof this.response === \"object\";\n if (!isObject) throw new Error(\"Response is not an iterable\");\n\n if (typeof (this.response as any)[Symbol.iterator] === \"function\") {\n this.iterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n } else if (\n typeof (this.response as Iterator<unknown>).next === \"function\"\n ) {\n this.iterator = this.response as Iterator<unknown>;\n } else {\n throw new Error(\"Response is not an iterable\");\n }\n }\n\n if (!this.iterator) throw new Error(\"Iterator not initialized\");\n\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n\n/**\n * Async wrapper for streaming responses (AsyncIterable from MistralAI SDK)\n */\nexport class AsyncStreamingWrapper\n implements AsyncIterable<unknown>, AsyncIterator<unknown>\n{\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n private span!: Span;\n private response!: unknown;\n private iterator: AsyncIterator<unknown> | null = null;\n private startTime!: number;\n private requestKwargs!: Record<string, unknown>;\n private completeResponse: Record<string, unknown>;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"response\", response);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n this.completeResponse = { choices: [], model: \"\" };\n }\n\n toJSON() {\n return this.completeResponse;\n }\n\n private isChat(): boolean {\n return (\n typeof this.requestKwargs === \"object\" &&\n this.requestKwargs !== null &&\n \"messages\" in this.requestKwargs\n );\n }\n\n private ensureChoice(index: number): void {\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n while (choices.length <= index) {\n if (this.isChat()) {\n choices.push({ message: { role: \"assistant\", content: \"\" } });\n } else {\n choices.push({ text: \"\" });\n }\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n // Initialize the iterator on first call\n if (!this.iterator) {\n // Check if response is an AsyncIterable and get the iterator\n if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.asyncIterator in this.response\n ) {\n this.iterator = (this.response as AsyncIterable<unknown>)[\n Symbol.asyncIterator\n ]();\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n Symbol.iterator in (this.response as any)\n ) {\n // Handle sync iterables\n const syncIterator = (this.response as Iterable<unknown>)[\n Symbol.iterator\n ]();\n this.iterator = {\n async next() {\n return syncIterator.next();\n },\n };\n } else if (\n this.response &&\n typeof this.response === \"object\" &&\n typeof (this.response as AsyncIterator<unknown>).next === \"function\"\n ) {\n // Already an iterator\n this.iterator = this.response as AsyncIterator<unknown>;\n } else {\n throw new Error(\"Response is not iterable\");\n }\n }\n\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan();\n return result;\n }\n this.processChunk(result.value);\n return result;\n } catch (error) {\n this.finalizeSpan(error);\n throw error;\n }\n }\n\n private processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n const choices = this.completeResponse.choices as Array<\n Record<string, unknown>\n >;\n\n if (chunkDict.model) {\n this.completeResponse.model = chunkDict.model;\n }\n\n // Handle CompletionEvent structure from MistralAI\n const data = chunkDict.data as Record<string, unknown> | undefined;\n if (data) {\n if (data.model) {\n this.completeResponse.model = data.model;\n }\n\n const dataChoices = (data.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(dataChoices)) {\n for (const choice of dataChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (data.usage && typeof data.usage === \"object\") {\n this.completeResponse.usage = data.usage;\n }\n }\n\n // Also handle direct choices (for backwards compatibility)\n const chunkChoices = (chunkDict.choices || []) as Array<\n Record<string, unknown>\n >;\n if (Array.isArray(chunkChoices) && chunkChoices.length > 0) {\n for (const choice of chunkChoices) {\n const index = Number(choice.index || 0);\n this.ensureChoice(index);\n\n const delta = (choice.delta || {}) as Record<string, unknown>;\n if (typeof delta === \"object\" && delta.content) {\n const contentPiece = String(delta.content || \"\");\n const choiceEntry = choices[index];\n if (this.isChat()) {\n if (!choiceEntry.message) {\n choiceEntry.message = { role: \"assistant\", content: \"\" };\n }\n const message = choiceEntry.message as Record<string, unknown>;\n message.content = String(message.content || \"\") + contentPiece;\n } else {\n choiceEntry.text = String(choiceEntry.text || \"\") + contentPiece;\n }\n }\n\n if (choice.finishReason) {\n choices[index].finishReason = choice.finishReason;\n }\n }\n }\n\n if (chunkDict.usage && typeof chunkDict.usage === \"object\") {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n private finalizeSpan(error?: unknown): void {\n const endTime = Date.now();\n const duration = (endTime - this.startTime) / 1000;\n setResponseAttributes(this.span, this.completeResponse);\n this.span.setAttribute(\"llm.response.duration\", duration);\n if (error) {\n this.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n try {\n this.span.recordException(error as Error);\n } catch {\n // Ignore\n }\n } else {\n this.span.setStatus({ code: SpanStatusCode.OK });\n }\n this.span.end();\n }\n}\n","/**\n * Custom MistralAI instrumentor for Netra SDK\n *\n * Note: '@mistralai/mistralai' is a peer dependency. The SDK dynamically imports it\n * to ensure we patch the same module instance the application uses.\n */\n\nimport { createRequire } from \"module\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport {\n agentsStreamWrapper,\n agentsWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n} from \"./wrappers\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.mistral_ai\";\nconst INSTRUMENTS = [\"@mistralai/mistralai >= 1.0.0\"];\n\n// Store original methods for uninstrumentation\nconst originalMethods: Map<string, Function> = new Map();\n\n// Track instrumentation state\nlet isInstrumented = false;\n\n// Cache all resolved Mistral classes (ESM + CJS)\nlet mistralClasses: any[] = [];\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\ntype MistralResourceName = \"chat\" | \"embeddings\" | \"fim\" | \"agents\";\n\n/**\n * Resolve the Mistral module from the application's context.\n * Tries ESM dynamic import first, then falls back to CJS require so the\n * instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveMistralAsync(): Promise<any[]> {\n if (mistralClasses.length > 0) return mistralClasses;\n\n try {\n // @ts-ignore - @mistralai/mistralai is an optional peer dependency\n const mistralModule = await import(\"@mistralai/mistralai\");\n mistralClasses.push(\n mistralModule.Mistral || mistralModule.default || mistralModule\n );\n } catch {\n Logger.warn(\"Failed to resolve MistralAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@mistralai/mistralai\");\n const cjsClass = mod.Mistral || mod.default || mod;\n if (!mistralClasses.includes(cjsClass)) {\n mistralClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve MistralAI CJS module\");\n }\n\n return mistralClasses;\n}\n\n/**\n * Synchronous version that returns cached classes.\n * Must call resolveMistralAsync() first to populate cache.\n */\nfunction resolveMistral(): any[] {\n return mistralClasses;\n}\n\n/**\n * Custom MistralAI instrumentor for Netra SDK\n */\nexport class NetraMistralAIInstrumentor {\n private tracer: Tracer | null = null;\n private tracerProvider?: TracerProvider;\n private resourceCtors: Partial<Record<MistralResourceName, any>> = {};\n\n constructor() {\n // Initialize without tracer - will be set during instrument()\n }\n\n /**\n * Returns the list of instrumentation dependencies\n */\n instrumentationDependencies(): string[] {\n return INSTRUMENTS;\n }\n\n /**\n * Instrument MistralAI client methods (async version)\n * Tries both ESM and CJS resolution to cover dual-package setups.\n */\n async instrumentAsync(\n options: InstrumentorOptions = {}\n ): Promise<NetraMistralAIInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n const classes = await resolveMistralAsync();\n if (classes.length === 0) {\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n let didPatch = false;\n classes.forEach((Mistral, index) => {\n const patchedChat = this._instrumentChat(Mistral, index);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral, index);\n const patchedFIM = this._instrumentFIM(Mistral, index);\n const patchedAgents = this._instrumentAgents(Mistral, index);\n if (patchedChat || patchedEmbeddings || patchedFIM || patchedAgents) {\n didPatch = true;\n }\n });\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Instrument MistralAI client methods (sync version - for backwards compatibility)\n * Note: This uses cached Mistral classes. Call instrumentAsync() for proper initialization.\n */\n instrument(options: InstrumentorOptions = {}): NetraMistralAIInstrumentor {\n if (isInstrumented) {\n Logger.warn(\"MistralAI is already instrumented\");\n return this;\n }\n\n const classes = resolveMistral();\n if (classes.length === 0) {\n this.instrumentAsync(options).catch((e) => {\n Logger.error(\"Failed to instrument MistralAI:\", e);\n });\n return this;\n }\n\n try {\n this.tracerProvider = options.tracerProvider;\n if (this.tracerProvider) {\n this.tracer = this.tracerProvider.getTracer(\n INSTRUMENTATION_NAME,\n __version__\n );\n } else {\n this.tracer = trace.getTracer(INSTRUMENTATION_NAME, __version__);\n }\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n let didPatch = false;\n classes.forEach((Mistral, index) => {\n const patchedChat = this._instrumentChat(Mistral, index);\n const patchedEmbeddings = this._instrumentEmbeddings(Mistral, index);\n const patchedFIM = this._instrumentFIM(Mistral, index);\n const patchedAgents = this._instrumentAgents(Mistral, index);\n if (patchedChat || patchedEmbeddings || patchedFIM || patchedAgents) {\n didPatch = true;\n }\n });\n\n if (!didPatch) {\n Logger.warn(\n \"MistralAI instrumentation initialized but no methods were patched. Is '@mistralai/mistralai' installed and compatible?\"\n );\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n /**\n * Uninstrument MistralAI client methods\n */\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"MistralAI is not instrumented\");\n return;\n }\n\n const classes = resolveMistral();\n classes.forEach((Mistral, index) => {\n this._uninstrumentChat(Mistral, index);\n this._uninstrumentEmbeddings(Mistral, index);\n this._uninstrumentFIM(Mistral, index);\n this._uninstrumentAgents(Mistral, index);\n });\n\n originalMethods.clear();\n mistralClasses = [];\n isInstrumented = false;\n }\n\n /**\n * Check if MistralAI is currently instrumented\n */\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Resolve public resource constructors from the exported Mistral client.\n * This avoids relying on internal \"@mistralai/mistralai/sdk/*\" paths.\n *\n * We create a temporary client instance purely for discovery; it should not\n * make network calls.\n */\n private _ensureResourceCtors(Mistral: any): void {\n if (\n this.resourceCtors.chat &&\n this.resourceCtors.embeddings &&\n this.resourceCtors.fim &&\n this.resourceCtors.agents\n ) {\n return;\n }\n\n // Some SDK versions require an apiKey at construction time.\n // Use a dummy if none is provided; this is only for discovering constructors.\n const apiKey = process.env.MISTRAL_API_KEY ?? \"netra_dummy_api_key\";\n\n let client: any;\n try {\n client = new Mistral({ apiKey });\n } catch {\n // Fallback for alternate ctor signatures\n client = new Mistral(apiKey);\n }\n\n for (const name of [\"chat\", \"embeddings\", \"fim\", \"agents\"] as const) {\n const res = client?.[name];\n if (res && res.constructor) {\n this.resourceCtors[name] = res.constructor;\n }\n }\n }\n\n private _getCtor(Mistral: any, name: MistralResourceName): any | null {\n this._ensureResourceCtors(Mistral);\n return this.resourceCtors[name] ?? null;\n }\n\n private _instrumentChat(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n let didPatch = false;\n\n if (ChatClass?.prototype?.complete) {\n const originalComplete = ChatClass.prototype.complete;\n originalMethods.set(`chat.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = chatWrapper(tracer);\n\n ChatClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (ChatClass?.prototype?.stream) {\n const originalStream = ChatClass.prototype.stream;\n originalMethods.set(`chat.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = chatStreamWrapper(tracer);\n\n ChatClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI chat:\", error);\n return false;\n }\n }\n\n private _instrumentEmbeddings(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n let didPatch = false;\n\n if (EmbeddingsClass?.prototype?.create) {\n const originalCreate = EmbeddingsClass.prototype.create;\n originalMethods.set(`embeddings.create-${index}`, originalCreate);\n\n const tracer = this.tracer;\n const wrapper = embeddingsWrapper(tracer);\n\n EmbeddingsClass.prototype.create = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalCreate.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI embeddings:\", error);\n return false;\n }\n }\n\n private _instrumentFIM(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n let didPatch = false;\n\n if (FimClass?.prototype?.complete) {\n const originalComplete = FimClass.prototype.complete;\n originalMethods.set(`fim.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = fimWrapper(tracer);\n\n FimClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (FimClass?.prototype?.stream) {\n const originalStream = FimClass.prototype.stream;\n originalMethods.set(`fim.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = fimStreamWrapper(tracer);\n\n FimClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI FIM:\", error);\n return false;\n }\n }\n\n private _instrumentAgents(Mistral: any, index: number): boolean {\n if (!this.tracer) return false;\n\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n let didPatch = false;\n\n if (AgentsClass?.prototype?.complete) {\n const originalComplete = AgentsClass.prototype.complete;\n originalMethods.set(`agents.complete-${index}`, originalComplete);\n\n const tracer = this.tracer;\n const wrapper = agentsWrapper(tracer);\n\n AgentsClass.prototype.complete = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalComplete.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n if (AgentsClass?.prototype?.stream) {\n const originalStream = AgentsClass.prototype.stream;\n originalMethods.set(`agents.stream-${index}`, originalStream);\n\n const tracer = this.tracer;\n const wrapper = agentsStreamWrapper(tracer);\n\n AgentsClass.prototype.stream = function (\n this: unknown,\n ...args: unknown[]\n ): unknown {\n const original = originalStream.bind(this);\n const kwargs = (args[0] || {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => original(...a),\n this,\n args,\n kwargs\n );\n };\n didPatch = true;\n }\n\n return didPatch;\n } catch (error) {\n Logger.error(\"Failed to instrument MistralAI agents:\", error);\n return false;\n }\n }\n\n private _uninstrumentChat(Mistral: any, index: number): void {\n try {\n const ChatClass = this._getCtor(Mistral, \"chat\");\n\n const originalComplete = originalMethods.get(`chat.complete-${index}`);\n if (originalComplete && ChatClass?.prototype) {\n ChatClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`chat.stream-${index}`);\n if (originalStream && ChatClass?.prototype) {\n ChatClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI chat: ${error}`);\n }\n }\n\n private _uninstrumentEmbeddings(Mistral: any, index: number): void {\n try {\n const EmbeddingsClass = this._getCtor(Mistral, \"embeddings\");\n\n const originalCreate = originalMethods.get(`embeddings.create-${index}`);\n if (originalCreate && EmbeddingsClass?.prototype) {\n EmbeddingsClass.prototype.create = originalCreate;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI embeddings: ${error}`);\n }\n }\n\n private _uninstrumentFIM(Mistral: any, index: number): void {\n try {\n const FimClass = this._getCtor(Mistral, \"fim\");\n\n const originalComplete = originalMethods.get(`fim.complete-${index}`);\n if (originalComplete && FimClass?.prototype) {\n FimClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`fim.stream-${index}`);\n if (originalStream && FimClass?.prototype) {\n FimClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI FIM: ${error}`);\n }\n }\n\n private _uninstrumentAgents(Mistral: any, index: number): void {\n try {\n const AgentsClass = this._getCtor(Mistral, \"agents\");\n\n const originalComplete = originalMethods.get(`agents.complete-${index}`);\n if (originalComplete && AgentsClass?.prototype) {\n AgentsClass.prototype.complete = originalComplete;\n }\n\n const originalStream = originalMethods.get(`agents.stream-${index}`);\n if (originalStream && AgentsClass?.prototype) {\n AgentsClass.prototype.stream = originalStream;\n }\n } catch (error) {\n Logger.error(`Failed to uninstrument MistralAI agents: ${error}`);\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const mistralAIInstrumentor = new NetraMistralAIInstrumentor();\n\n// Re-export wrappers for advanced usage\nexport {\n agentsStreamWrapper,\n agentsWrapper,\n AsyncStreamingWrapper,\n chatStreamWrapper,\n chatWrapper,\n embeddingsWrapper,\n fimStreamWrapper,\n fimWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\n// Re-export utilities\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","/**\n * Version information for OpenAI instrumentation\n */\n\nexport const __version__ = \"1.0.0\";\n\n","import { Span } from \"@opentelemetry/api\";\nimport {\n setRequestAttributes as setBaseRequestAttributes,\n setResponseAttributes as setBaseResponseAttributes,\n} from \"../utils\";\n\n/**\n * OpenAI-specific request attributes.\n * Calls the shared base implementation with \"openai\" as the system identifier,\n * then adds any OpenAI-only fields.\n */\nexport function setRequestAttributes(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: string,\n): void {\n if (!span.isRecording()) return;\n setBaseRequestAttributes(span, kwargs, requestType, \"openai\");\n\n // Embeddings-only: output dimension hint\n if (kwargs.dimensions !== undefined) {\n span.setAttribute(\"gen_ai.request.dimensions\", Number(kwargs.dimensions));\n }\n}\n\n/**\n * OpenAI-specific response attributes.\n * Delegates entirely to the shared base implementation.\n */\nexport function setResponseAttributes(\n span: Span,\n response: Record<string, unknown>,\n): void {\n if (!span.isRecording()) return;\n setBaseResponseAttributes(span, response);\n}\n","import {\n Context,\n Span,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n defineHidden,\n isPromise,\n modelAsDict,\n shouldSuppressInstrumentation,\n} from \"../utils\";\nimport { setRequestAttributes, setResponseAttributes } from \"./utils\";\nimport { OpenAIRequestType, StreamResponse, WrapperFn } from \"./types\";\n\nconst SPAN_NAMES: Record<OpenAIRequestType, string> = {\n chat: \"openai.chat\",\n embedding: \"openai.embedding\",\n response: \"openai.response\",\n};\n\nconst STREAMING_TYPES = new Set<OpenAIRequestType>([\"chat\", \"response\"]);\n\nfunction handleSpanError(span: Span, error: unknown): void {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n}\n\nfunction setSpanRequestContext(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n): void {\n setRequestAttributes(span, kwargs, requestType);\n}\n\nfunction finalizeSpanSuccess(\n span: Span,\n response: Record<string, unknown>,\n startTime: number,\n): void {\n setResponseAttributes(span, response);\n span.setAttribute(\"llm.response.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n}\n\nabstract class BaseStreamHandler {\n protected completeResponse: StreamResponse = { choices: [], model: \"\" };\n // Assigned via defineHidden in constructor (non-enumerable to avoid circular JSON)\n protected span!: Span;\n protected startTime!: number;\n protected requestKwargs!: Record<string, unknown>;\n\n constructor(\n span: Span,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n defineHidden(this, \"span\", span);\n defineHidden(this, \"startTime\", startTime);\n defineHidden(this, \"requestKwargs\", requestKwargs);\n }\n\n toJSON(): StreamResponse {\n return this.completeResponse;\n }\n\n protected processChunk(chunk: unknown): void {\n const chunkDict = modelAsDict(chunk);\n\n if (chunkDict.model) {\n this.completeResponse.model = String(chunkDict.model);\n }\n\n const chunkChoices = chunkDict.choices;\n if (Array.isArray(chunkChoices)) {\n for (const choice of chunkChoices as Array<Record<string, unknown>>) {\n const index = Number(choice.index ?? 0);\n this.ensureChoice(index);\n const delta = (choice.delta ?? {}) as Record<string, unknown>;\n if (delta.content) {\n const entry = this.completeResponse.choices[index];\n if (!entry.message) {\n entry.message = { role: \"assistant\", content: \"\" };\n }\n const msg = entry.message as Record<string, unknown>;\n msg.content = String(msg.content ?? \"\") + String(delta.content);\n }\n if (choice.finish_reason) {\n this.completeResponse.choices[index].finish_reason =\n choice.finish_reason;\n }\n }\n }\n\n if (chunkDict.usage) {\n this.completeResponse.usage = chunkDict.usage;\n }\n\n // Responses API: final response object arrives in a chunk\n const responseChunk = chunkDict.response as\n | Record<string, unknown>\n | undefined;\n if (responseChunk?.status === \"completed\") {\n const outputs = (responseChunk.output ?? []) as Array<\n Record<string, unknown>\n >;\n for (const out of outputs) {\n const content = out.content as\n | Array<Record<string, unknown>>\n | undefined;\n if (Array.isArray(content)) {\n for (const item of content) {\n this.completeResponse.choices.push({\n message: { role: \"assistant\", content: String(item.text ?? \"\") },\n });\n }\n }\n }\n this.completeResponse.usage = responseChunk.usage ?? {};\n }\n\n this.span.addEvent(\"llm.content.completion.chunk\");\n }\n\n protected ensureChoice(index: number): void {\n const isChat = Array.isArray(this.requestKwargs.messages);\n while (this.completeResponse.choices.length <= index) {\n this.completeResponse.choices.push(\n isChat ? { message: { role: \"assistant\", content: \"\" } } : { text: \"\" },\n );\n }\n }\n\n protected finalizeSpan(code: SpanStatusCode): void {\n if (code === SpanStatusCode.OK) {\n finalizeSpanSuccess(\n this.span,\n this.completeResponse as Record<string, unknown>,\n this.startTime,\n );\n } else {\n this.span.setAttribute(\n \"llm.response.duration\",\n (Date.now() - this.startTime) / 1000,\n );\n this.span.setStatus({ code });\n this.span.end();\n }\n }\n}\n\nexport class StreamingWrapper\n extends BaseStreamHandler\n implements Iterable<unknown>\n{\n private iterator: Iterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.iterator](): Iterator<unknown> {\n return this;\n }\n\n next(): IteratorResult<unknown> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): Iterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.iterator in (this.response as object)) {\n return (this.response as Iterable<unknown>)[Symbol.iterator]();\n }\n if (typeof (this.response as Iterator<unknown>).next === \"function\") {\n return this.response as Iterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nexport class AsyncStreamingWrapper\n extends BaseStreamHandler\n implements AsyncIterable<unknown>\n{\n private iterator: AsyncIterator<unknown> | null = null;\n private response!: unknown;\n\n constructor(\n span: Span,\n response: unknown,\n startTime: number,\n requestKwargs: Record<string, unknown>,\n ) {\n super(span, startTime, requestKwargs);\n defineHidden(this, \"response\", response);\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this;\n }\n\n async next(): Promise<IteratorResult<unknown>> {\n try {\n if (!this.iterator) {\n this.iterator = this.resolveIterator();\n }\n const result = await this.iterator.next();\n if (result.done) {\n this.finalizeSpan(SpanStatusCode.OK);\n } else {\n this.processChunk(result.value);\n }\n return result;\n } catch (error) {\n this.finalizeSpan(SpanStatusCode.ERROR);\n throw error;\n }\n }\n\n private resolveIterator(): AsyncIterator<unknown> {\n if (!this.response || typeof this.response !== \"object\") {\n throw new Error(\"Response is not iterable\");\n }\n if (Symbol.asyncIterator in (this.response as object)) {\n return (this.response as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n }\n if (Symbol.iterator in (this.response as object)) {\n const syncIter = (this.response as Iterable<unknown>)[Symbol.iterator]();\n return {\n async next() {\n return syncIter.next();\n },\n };\n }\n if (typeof (this.response as AsyncIterator<unknown>).next === \"function\") {\n return this.response as AsyncIterator<unknown>;\n }\n throw new Error(\"Response is not iterable\");\n }\n}\n\nfunction executeStreaming(\n span: Span,\n ctx: Context,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const response = context.with(trace.setSpan(ctx, span), call);\n\n if (isPromise(response)) {\n return (async () => {\n try {\n const stream = await response;\n return new AsyncStreamingWrapper(span, stream, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n })();\n }\n\n return new StreamingWrapper(span, response, startTime, kwargs);\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction executeNonStreaming(\n span: Span,\n kwargs: Record<string, unknown>,\n requestType: OpenAIRequestType,\n call: () => unknown,\n): unknown {\n const startTime = Date.now();\n try {\n setSpanRequestContext(span, kwargs, requestType);\n const result = call();\n\n if (isPromise(result)) {\n return result.then(\n (value) => {\n finalizeSpanSuccess(span, modelAsDict(value), startTime);\n return value;\n },\n (error) => {\n handleSpanError(span, error);\n throw error;\n },\n );\n }\n\n finalizeSpanSuccess(span, modelAsDict(result), startTime);\n return result;\n } catch (error) {\n handleSpanError(span, error);\n throw error;\n }\n}\n\nfunction openAIWrapper(\n tracer: Tracer,\n requestType: OpenAIRequestType,\n): WrapperFn {\n const spanName = SPAN_NAMES[requestType];\n const spanOpts = { kind: SpanKind.CLIENT, attributes: { \"llm.request.type\": requestType } };\n\n return (wrapped, instance, args, kwargs) => {\n if (shouldSuppressInstrumentation()) {\n const result = wrapped.call(instance, ...args);\n return isPromise(result) ? result.then((v) => v) : result;\n }\n\n const currentContext = context.active();\n const call = () => wrapped.call(instance, ...args);\n const isStreaming = kwargs.stream === true && STREAMING_TYPES.has(requestType);\n\n if (isStreaming) {\n const span = tracer.startSpan(spanName, spanOpts, currentContext);\n return executeStreaming(span, currentContext, kwargs, requestType, call);\n }\n\n return tracer.startActiveSpan(spanName, spanOpts, (span) =>\n executeNonStreaming(span, kwargs, requestType, call),\n );\n };\n}\n\nexport const chatWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"chat\");\n\nexport const embeddingsWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"embedding\");\n\nexport const responsesWrapper = (tracer: Tracer): WrapperFn =>\n openAIWrapper(tracer, \"response\");\n","import { createRequire } from \"module\";\nimport { trace, Tracer } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { __version__ } from \"./version\";\nimport { chatWrapper, embeddingsWrapper, responsesWrapper } from \"./wrappers\";\nimport { InstrumentorOptions, PatchTarget } from \"./types\";\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.openai\";\nconst SUPPORTED_VERSIONS = [\"openai >= 4.0.0\"];\n\nlet openAIClasses: any[] = [];\n\n/**\n * Resolve the OpenAI module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveOpenAI(): Promise<any[]> {\n if (openAIClasses.length > 0) return openAIClasses;\n\n try {\n // @ts-ignore - openai is an optional peer dependency\n const mod = await import(\"openai\");\n openAIClasses.push(mod.OpenAI ?? mod.default ?? mod);\n } catch {\n Logger.warn(\"Failed to resolve OpenAI ESM module\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"openai\");\n const cjsClass = mod.OpenAI ?? mod.default ?? mod;\n // Only add if it resolves to a different class identity than what ESM gave us.\n // In bundler / dual-package setups the two could resolve to the same object,\n // and patching the same prototype twice would wrap methods redundantly.\n if (!openAIClasses.includes(cjsClass)) {\n openAIClasses.push(cjsClass);\n }\n } catch {\n Logger.warn(\"Failed to resolve OpenAI CJS module\");\n }\n\n return openAIClasses;\n}\n\nconst PATCH_TARGETS: PatchTarget[] = [\n {\n key: \"chat.completions.create\",\n getPrototype: (O) => O.Chat?.Completions?.prototype,\n wrapperFactory: chatWrapper,\n },\n {\n key: \"embeddings.create\",\n getPrototype: (O) => O.Embeddings?.prototype,\n wrapperFactory: embeddingsWrapper,\n },\n {\n key: \"responses.create\",\n getPrototype: (O) => O.Responses?.prototype,\n wrapperFactory: responsesWrapper,\n optional: true,\n },\n];\n\nexport class NetraOpenAIInstrumentor {\n private tracer: Tracer | null = null;\n private static _isInstrumented = false;\n private readonly originalMethods = new Map<string, Function>();\n\n instrumentationDependencies(): string[] {\n return [...SUPPORTED_VERSIONS];\n }\n\n isInstrumented(): boolean {\n return NetraOpenAIInstrumentor._isInstrumented;\n }\n\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIInstrumentor> {\n if (this.isInstrumented()) {\n Logger.warn(\"OpenAI is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n this.tracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.patch(openAIClass, target, index);\n });\n });\n\n NetraOpenAIInstrumentor._isInstrumented = true;\n return this;\n }\n\n async uninstrument(): Promise<void> {\n if (!this.isInstrumented()) {\n Logger.warn(\"OpenAI is not instrumented\");\n return;\n }\n\n const openAIClasses = await resolveOpenAI();\n openAIClasses.forEach((openAIClass, index) => {\n PATCH_TARGETS.forEach((target) => {\n this.unpatch(openAIClass, target, index);\n });\n });\n\n this.originalMethods.clear();\n openAIClasses.length = 0;\n NetraOpenAIInstrumentor._isInstrumented = false;\n }\n\n private patch(openAIClass: any, target: PatchTarget, index: number): void {\n if (!this.tracer) return;\n\n const proto = target.getPrototype(openAIClass);\n if (!proto?.create) {\n if (!target.optional) {\n Logger.error(`Failed to find OpenAI method to patch: ${target.key}`);\n }\n return;\n }\n\n try {\n const original = proto.create as Function;\n this.originalMethods.set(`${target.key}-${index}`, original);\n const wrapper = target.wrapperFactory(this.tracer);\n\n proto.create = function (this: unknown, ...args: unknown[]): unknown {\n const kwargs = (args[0] ?? {}) as Record<string, unknown>;\n return wrapper(\n (...a: unknown[]) => (original as any).call(this, ...a),\n this,\n args,\n kwargs,\n );\n };\n } catch (error) {\n Logger.error(`Failed to patch ${target.key}: ${error}`);\n }\n }\n\n private unpatch(openAIClass: any, target: PatchTarget, index: number): void {\n try {\n const proto = target.getPrototype(openAIClass);\n const original = this.originalMethods.get(`${target.key}-${index}`);\n if (proto && original) {\n proto.create = original;\n }\n } catch (error) {\n Logger.error(`Failed to unpatch ${target.key}: ${error}`);\n }\n }\n}\n\nexport const openAIInstrumentor = new NetraOpenAIInstrumentor();\n\nexport {\n AsyncStreamingWrapper,\n chatWrapper,\n embeddingsWrapper,\n responsesWrapper,\n StreamingWrapper,\n} from \"./wrappers\";\n\nexport {\n setRequestAttributes,\n setResponseAttributes,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n","export const INSTRUMENTATION_NAME = \"netra.instrumentation.openai_agents\";\nexport const DEFAULT_LLM_SYSTEM = \"openai\";\nexport const MAX_INDEXED_MESSAGES = 128;\nexport const MAX_STRINGIFY_LENGTH = 65_536;\n\nexport const NETRA_SPAN_TYPE_ATTR = \"netra.span.type\";\n\n// Workflow attributes\nexport const NETRA_WORKFLOW_NAME = \"netra.workflow.name\";\n\n// Agent attributes\nexport const NETRA_AGENT_NAME = \"netra.agent.name\";\nexport const NETRA_AGENT_HANDOFFS = \"netra.agent.handoffs\";\nexport const NETRA_AGENT_TOOLS = \"netra.agent.tools\";\nexport const NETRA_AGENT_OUTPUT_TYPE = \"netra.agent.output_type\";\n\n// Agents SDK trace/span attributes\nexport const NETRA_AGENTS_GROUP_ID = \"netra.agents.group_id\";\nexport const NETRA_AGENTS_METADATA = \"netra.agents.metadata\";\nexport const NETRA_AGENTS_SPAN_TYPE = \"netra.agents.span_type\";\nexport const NETRA_AGENTS_PARENT_AGENT = \"netra.agents.parent_agent\";\n\n// Handoff attributes\nexport const NETRA_HANDOFF_SOURCE_AGENT = \"netra.handoff.source_agent\";\nexport const NETRA_HANDOFF_TARGET_AGENT = \"netra.handoff.target_agent\";\n\n// Guardrail attributes\nexport const NETRA_GUARDRAIL_NAME = \"netra.guardrail.name\";\nexport const NETRA_GUARDRAIL_TRIGGERED = \"netra.guardrail.triggered\";\n\n// MCP attributes\nexport const NETRA_MCP_DATA = \"netra.mcp.data\";\nexport const NETRA_MCP_SERVER = \"netra.mcp.server\";\n\n// Custom span attributes\nexport const NETRA_SPAN_NAME = \"netra.span.name\";\nexport const NETRA_CUSTOM_DATA = \"netra.custom.data\";\n\n// GenAI semantic convention attributes not covered by shared SpanAttributes\nexport const GEN_AI_AGENT_NAME = \"gen_ai.agent.name\";\nexport const GEN_AI_TOOL_NAME = \"gen_ai.tool.name\";\nexport const GEN_AI_RESPONSE_ID = \"gen_ai.response.id\";\n","import { SpanType } from \"../../types\";\nimport { MAX_STRINGIFY_LENGTH } from \"./constants\";\nimport { AgentSpan, SpanData } from \"./types\";\n\nexport function safeJsonStringify(obj: unknown, maxLength: number = MAX_STRINGIFY_LENGTH): string {\n try {\n if (typeof obj === \"string\") {\n return maxLength > 0 && obj.length > maxLength ? obj.slice(0, maxLength) : obj;\n }\n const s = JSON.stringify(obj);\n return maxLength > 0 && s.length > maxLength ? s.slice(0, maxLength) : s;\n } catch {\n return String(obj);\n }\n}\n\nexport function getNetraSpanType(data: SpanData): SpanType {\n switch (data.type) {\n case \"agent\":\n return SpanType.AGENT;\n case \"generation\":\n case \"response\":\n return SpanType.GENERATION;\n case \"function\":\n case \"mcp_list_tools\":\n return SpanType.TOOL;\n case \"handoff\":\n return SpanType.HANDOFF;\n case \"guardrail\":\n return SpanType.GUARDRAIL;\n default:\n return SpanType.SPAN;\n }\n}\n\nexport function getSpanName(agentSpan: AgentSpan): string {\n const data = agentSpan.spanData;\n if (data.name) return data.name;\n if (data.type === \"handoff\" && data.to_agent) return `handoff to ${data.to_agent}`;\n return `openai.agents.${data.type}`;\n}\n\nexport function extractContentString(content: unknown): string {\n if (content === undefined || content === null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const texts: string[] = [];\n for (const item of content) {\n if (item && typeof item === \"object\") {\n const part = item as Record<string, unknown>;\n if (part.text !== undefined) {\n texts.push(String(part.text));\n }\n }\n }\n return texts.length > 0 ? texts.join(\" \") : safeJsonStringify(content);\n }\n return String(content);\n}\n\nexport function extractInstructions(response: unknown): string | undefined {\n if (!response || typeof response !== \"object\") return undefined;\n const resp = response as Record<string, unknown>;\n if (typeof resp.instructions === \"string\" && resp.instructions.length > 0) {\n return resp.instructions;\n }\n return undefined;\n}\n","import { Span as OTelSpan } from \"@opentelemetry/api\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n GEN_AI_AGENT_NAME,\n GEN_AI_RESPONSE_ID,\n GEN_AI_TOOL_NAME,\n MAX_INDEXED_MESSAGES,\n NETRA_AGENT_HANDOFFS,\n NETRA_AGENT_NAME,\n NETRA_AGENT_OUTPUT_TYPE,\n NETRA_AGENT_TOOLS,\n NETRA_CUSTOM_DATA,\n NETRA_GUARDRAIL_NAME,\n NETRA_GUARDRAIL_TRIGGERED,\n NETRA_HANDOFF_SOURCE_AGENT,\n NETRA_HANDOFF_TARGET_AGENT,\n NETRA_MCP_DATA,\n NETRA_MCP_SERVER,\n NETRA_SPAN_NAME,\n} from \"./constants\";\nimport { Logger } from \"../../logger\";\nimport { AgentSpan, SpanData } from \"./types\";\nimport { extractContentString, extractInstructions, safeJsonStringify } from \"./utils\";\n\nexport function setSpanDataAttributes(\n otelSpan: OTelSpan,\n agentSpan: AgentSpan,\n systemName: string = DEFAULT_LLM_SYSTEM,\n): void {\n const data = agentSpan.spanData;\n\n switch (data.type) {\n case \"agent\":\n setAgentAttributes(otelSpan, data);\n break;\n case \"generation\":\n setGenerationAttributes(otelSpan, data, systemName);\n break;\n case \"response\":\n setResponseAttributes(otelSpan, agentSpan, systemName);\n break;\n case \"function\":\n setFunctionAttributes(otelSpan, data);\n break;\n case \"handoff\":\n setHandoffAttributes(otelSpan, data);\n break;\n case \"guardrail\":\n setGuardrailAttributes(otelSpan, data);\n break;\n case \"mcp_list_tools\":\n setMCPListToolsAttributes(otelSpan, data);\n break;\n default:\n setCustomAttributes(otelSpan, data);\n break;\n }\n}\n\nfunction setAgentAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_AGENT_NAME, data.name);\n span.setAttribute(GEN_AI_AGENT_NAME, data.name);\n }\n if (data.handoffs && data.handoffs.length > 0) {\n span.setAttribute(NETRA_AGENT_HANDOFFS, data.handoffs.join(\", \"));\n }\n if (data.tools && data.tools.length > 0) {\n span.setAttribute(NETRA_AGENT_TOOLS, data.tools.join(\", \"));\n }\n if (data.output_type) {\n span.setAttribute(NETRA_AGENT_OUTPUT_TYPE, data.output_type);\n }\n}\n\nfunction setGenerationAttributes(span: OTelSpan, data: SpanData, systemName: string): void {\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"chat\");\n\n if (data.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, data.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, data.model);\n }\n\n if (data.model_config) {\n const config = data.model_config;\n if (config.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, Number(config.temperature));\n }\n if (config.max_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MAX_TOKENS, Number(config.max_tokens));\n }\n if (config.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, Number(config.top_p));\n }\n if (config.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, Number(config.frequency_penalty));\n }\n if (config.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, Number(config.presence_penalty));\n }\n if (config.stop !== undefined) {\n span.setAttribute(SpanAttributes.LLM_CHAT_STOP_SEQUENCES, safeJsonStringify(config.stop));\n }\n if (config.reasoning_effort !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, String(config.reasoning_effort));\n } else if (config.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(config.reasoning));\n }\n }\n\n if (data.usage) {\n setUsageAttributes(span, data.usage);\n }\n\n if (data.input !== undefined) {\n setIndexedPromptAttributes(span, data.input);\n }\n if (data.output !== undefined) {\n setIndexedCompletionAttributes(span, data.output);\n }\n}\n\nfunction setResponseAttributes(span: OTelSpan, agentSpan: AgentSpan, systemName: string): void {\n const data = agentSpan.spanData;\n span.setAttribute(SpanAttributes.LLM_SYSTEM, systemName);\n span.setAttribute(SpanAttributes.LLM_REQUEST_TYPE, \"response\");\n\n if (data.response_id) {\n span.setAttribute(GEN_AI_RESPONSE_ID, data.response_id);\n }\n\n if (!data._response && !data._input) {\n Logger.debug(\n \"NetraAgentsTracingProcessor: response span has no _response/_input data;\",\n \"the @openai/agents SDK may have changed its internal fields\",\n );\n }\n\n let promptStartIndex = 0;\n\n const instructions = extractInstructions(data._response);\n if (instructions) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"system\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, instructions);\n promptStartIndex = 1;\n }\n\n if (data._input !== undefined) {\n setIndexedPromptAttributes(span, data._input, promptStartIndex);\n }\n\n if (data._response) {\n setResponseObjectAttributes(span, data._response);\n setIndexedCompletionAttributes(span, data._response);\n }\n\n const resp = data._response as Record<string, unknown> | undefined;\n if (data.usage && !(resp && typeof resp === \"object\" && resp.usage)) {\n setUsageAttributes(span, data.usage);\n }\n}\n\nfunction setFunctionAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.name);\n }\n if (data.mcp_data) {\n span.setAttribute(NETRA_MCP_DATA, data.mcp_data);\n }\n if (data.input !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.0.content`, safeJsonStringify(data.input));\n }\n if (data.output !== undefined) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.role`, \"tool\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.0.content`, safeJsonStringify(data.output));\n }\n}\n\nfunction setHandoffAttributes(span: OTelSpan, data: SpanData): void {\n if (data.from_agent) {\n span.setAttribute(NETRA_HANDOFF_SOURCE_AGENT, data.from_agent);\n }\n if (data.to_agent) {\n span.setAttribute(NETRA_HANDOFF_TARGET_AGENT, data.to_agent);\n }\n}\n\nfunction setGuardrailAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_GUARDRAIL_NAME, data.name);\n }\n if (data.triggered !== undefined) {\n span.setAttribute(NETRA_GUARDRAIL_TRIGGERED, data.triggered);\n }\n}\n\nfunction setMCPListToolsAttributes(span: OTelSpan, data: SpanData): void {\n if (data.server) {\n span.setAttribute(GEN_AI_TOOL_NAME, data.server);\n span.setAttribute(NETRA_MCP_SERVER, data.server);\n }\n}\n\nfunction setCustomAttributes(span: OTelSpan, data: SpanData): void {\n if (data.name) {\n span.setAttribute(NETRA_SPAN_NAME, data.name);\n }\n if (data.data !== undefined) {\n span.setAttribute(NETRA_CUSTOM_DATA, safeJsonStringify(data.data));\n }\n}\n\nfunction setUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<SpanData[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(\n SpanAttributes.LLM_USAGE_TOTAL_TOKENS,\n usage.input_tokens + usage.output_tokens,\n );\n }\n\n if (usage.details) {\n const details = usage.details;\n if (details.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, Number(details.cached_tokens));\n }\n if (details.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, Number(details.reasoning_tokens));\n }\n }\n}\n\ninterface ResponseObject {\n model?: string;\n temperature?: number;\n top_p?: number;\n frequency_penalty?: number;\n presence_penalty?: number;\n reasoning?: unknown;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n input_tokens_details?: { cached_tokens?: number };\n output_tokens_details?: { reasoning_tokens?: number };\n };\n output?: Array<{\n type?: string;\n role?: string;\n content?: Array<{ type?: string; text?: string }>;\n name?: string;\n arguments?: string;\n call_id?: string;\n id?: string;\n }>;\n}\n\nfunction setResponseObjectAttributes(span: OTelSpan, response: unknown): void {\n if (!response || typeof response !== \"object\") return;\n const resp = response as ResponseObject;\n\n if (resp.model) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_MODEL, resp.model);\n span.setAttribute(SpanAttributes.LLM_RESPONSE_MODEL, resp.model);\n }\n\n if (resp.temperature !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TEMPERATURE, resp.temperature);\n }\n if (resp.top_p !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_TOP_P, resp.top_p);\n }\n if (resp.frequency_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_FREQUENCY_PENALTY, resp.frequency_penalty);\n }\n if (resp.presence_penalty !== undefined) {\n span.setAttribute(SpanAttributes.LLM_PRESENCE_PENALTY, resp.presence_penalty);\n }\n if (resp.reasoning !== undefined) {\n span.setAttribute(SpanAttributes.LLM_REQUEST_REASONING_EFFORT, safeJsonStringify(resp.reasoning));\n }\n\n if (resp.usage) {\n setResponseObjectUsageAttributes(span, resp.usage);\n }\n}\n\nfunction setResponseObjectUsageAttributes(\n span: OTelSpan,\n usage: NonNullable<ResponseObject[\"usage\"]>,\n): void {\n if (usage.input_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_PROMPT_TOKENS, usage.input_tokens);\n }\n if (usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_COMPLETION_TOKENS, usage.output_tokens);\n }\n if (usage.total_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.total_tokens);\n } else if (usage.input_tokens !== undefined && usage.output_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_TOTAL_TOKENS, usage.input_tokens + usage.output_tokens);\n }\n if (usage.input_tokens_details?.cached_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_CACHE_READ_INPUT_TOKENS, usage.input_tokens_details.cached_tokens);\n }\n if (usage.output_tokens_details?.reasoning_tokens !== undefined) {\n span.setAttribute(SpanAttributes.LLM_USAGE_REASONING_TOKENS, usage.output_tokens_details.reasoning_tokens);\n }\n}\n\nfunction setIndexedPromptAttributes(span: OTelSpan, input: unknown, startIndex = 0): void {\n if (!input) return;\n\n if (typeof input === \"string\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.role`, \"user\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${startIndex}.content`, input);\n return;\n }\n\n if (!Array.isArray(input)) return;\n\n let index = startIndex;\n for (const message of input) {\n if (index - startIndex >= MAX_INDEXED_MESSAGES) break;\n if (!message || typeof message !== \"object\") continue;\n const msg = message as Record<string, unknown>;\n const msgType = msg.type as string | undefined;\n\n if (msgType === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_PROMPTS}.${index}.content`,\n safeJsonStringify({ name: msg.name, arguments: msg.arguments }),\n );\n } else if (msgType === \"function_call_output\" || msgType === \"function_call_result\") {\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, \"tool\");\n const output = msg.output;\n const outputText = output && typeof output === \"object\" && (output as Record<string, unknown>).text\n ? String((output as Record<string, unknown>).text)\n : String(output ?? \"\");\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, outputText);\n } else {\n const role = (msg.role as string) || \"user\";\n const content = extractContentString(msg.content);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.role`, role);\n span.setAttribute(`${SpanAttributes.LLM_PROMPTS}.${index}.content`, content);\n }\n index++;\n }\n}\n\nfunction setIndexedCompletionAttributes(span: OTelSpan, responseData: unknown): void {\n if (!responseData || typeof responseData !== \"object\") return;\n const resp = responseData as Record<string, unknown>;\n\n if (Array.isArray(resp.output)) {\n let index = 0;\n for (const item of resp.output) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!item || typeof item !== \"object\") continue;\n const element = item as Record<string, unknown>;\n\n if (element.type === \"message\" && Array.isArray(element.content)) {\n for (const contentItem of element.content as Array<Record<string, unknown>>) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (contentItem.type === \"output_text\" && contentItem.text) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.content`, String(contentItem.text));\n index++;\n }\n }\n } else if (element.type === \"function_call\") {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: element.name, arguments: element.arguments }),\n );\n const toolCallId = element.call_id || element.id;\n if (toolCallId) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(toolCallId));\n }\n index++;\n }\n }\n return;\n }\n\n if (Array.isArray(resp.choices)) {\n let index = 0;\n for (const choice of resp.choices) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n if (!choice || typeof choice !== \"object\") continue;\n const c = choice as Record<string, unknown>;\n const message = (c.message || c.delta) as Record<string, unknown> | undefined;\n const choiceStartIndex = index;\n\n if (message) {\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.role`,\n String(message.role ?? \"assistant\"),\n );\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n String(message.content ?? \"\"),\n );\n index++;\n\n const toolCalls = message.tool_calls as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(toolCalls)) {\n for (const tc of toolCalls) {\n if (index >= MAX_INDEXED_MESSAGES) break;\n const func = (tc.function || {}) as Record<string, unknown>;\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.role`, \"assistant\");\n span.setAttribute(\n `${SpanAttributes.LLM_COMPLETIONS}.${index}.content`,\n safeJsonStringify({ name: func.name ?? \"\", arguments: func.arguments ?? \"\" }),\n );\n if (tc.id) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${index}.tool_call_id`, String(tc.id));\n }\n index++;\n }\n }\n }\n\n if (c.finish_reason) {\n span.setAttribute(`${SpanAttributes.LLM_COMPLETIONS}.${choiceStartIndex}.finish_reason`, String(c.finish_reason));\n }\n }\n }\n}\n","import {\n Span as OTelSpan,\n SpanKind,\n SpanStatusCode,\n Tracer,\n context,\n trace,\n} from \"@opentelemetry/api\";\nimport { SpanType } from \"../../types\";\nimport { SpanAttributes } from \"../span-attributes\";\nimport {\n DEFAULT_LLM_SYSTEM,\n NETRA_AGENTS_GROUP_ID,\n NETRA_AGENTS_METADATA,\n NETRA_AGENTS_PARENT_AGENT,\n NETRA_AGENTS_SPAN_TYPE,\n NETRA_SPAN_TYPE_ATTR,\n NETRA_WORKFLOW_NAME,\n} from \"./constants\";\nimport { getNetraSpanType, getSpanName, safeJsonStringify } from \"./utils\";\nimport { setSpanDataAttributes } from \"./attributes\";\nimport { Logger } from \"../../logger\";\nimport type { AgentSpan, AgentTrace, TracingProcessor } from \"./types\";\n\nexport class NetraAgentsTracingProcessor implements TracingProcessor {\n private static readonly MAX_TRACKED_SPANS = 10_000;\n private static readonly MAX_TRACKED_TRACES = 1_000;\n\n private _tracer: Tracer;\n private _systemName: string;\n private _isShutdown = false;\n private _rootSpans = new Map<string, OTelSpan>();\n private _otelSpans = new Map<string, OTelSpan>();\n private _handoffs = new Map<string, Map<string, string>>();\n private _traceErrors = new Set<string>();\n private _traceSpans = new Map<string, Set<string>>();\n\n constructor(tracer: Tracer, systemName: string = DEFAULT_LLM_SYSTEM) {\n this._tracer = tracer;\n this._systemName = systemName;\n }\n\n private _parseTimestamp(iso: string | null | undefined): Date | undefined {\n if (!iso) return undefined;\n const ts = new Date(iso);\n return isNaN(ts.getTime()) ? undefined : ts;\n }\n\n private _evictOldestSpan(): void {\n const oldest = this._otelSpans.keys().next().value;\n if (oldest) {\n const stale = this._otelSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(oldest);\n Logger.debug(\"NetraAgentsTracingProcessor: evicted span due to MAX_TRACKED_SPANS limit\");\n }\n }\n\n private _evictOldestTrace(): void {\n const oldest = this._rootSpans.keys().next().value;\n if (oldest) {\n const stale = this._rootSpans.get(oldest);\n try {\n stale?.setAttribute(\"netra.agents.evicted\", true);\n stale?.setStatus({ code: SpanStatusCode.ERROR, message: \"Trace evicted due to limit\" });\n stale?.end();\n } catch { /* already ended */ }\n this._rootSpans.delete(oldest);\n this._traceErrors.delete(oldest);\n this._handoffs.delete(oldest);\n\n const orphanedSpanIds = this._traceSpans.get(oldest);\n if (orphanedSpanIds) {\n for (const spanId of orphanedSpanIds) {\n const orphan = this._otelSpans.get(spanId);\n if (orphan) {\n try {\n orphan.setAttribute(\"netra.agents.evicted\", true);\n orphan.end();\n } catch { /* already ended */ }\n this._otelSpans.delete(spanId);\n }\n }\n this._traceSpans.delete(oldest);\n }\n\n Logger.debug(\"NetraAgentsTracingProcessor: evicted root trace due to MAX_TRACKED_TRACES limit\");\n }\n }\n\n onTraceStart(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n if (agentTrace.disabled) return;\n\n const existingRoot = this._rootSpans.get(agentTrace.traceId);\n if (existingRoot) {\n try { existingRoot.end(); } catch { /* already ended */ }\n this._rootSpans.delete(agentTrace.traceId);\n }\n\n if (this._rootSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_TRACES) {\n this._evictOldestTrace();\n }\n\n const span = this._tracer.startSpan(agentTrace.name || \"Agent workflow\", {\n kind: SpanKind.INTERNAL,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: SpanType.AGENT,\n [NETRA_WORKFLOW_NAME]: agentTrace.name || \"Agent workflow\",\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n },\n });\n\n if (agentTrace.groupId) {\n span.setAttribute(NETRA_AGENTS_GROUP_ID, agentTrace.groupId);\n }\n if (agentTrace.metadata) {\n span.setAttribute(NETRA_AGENTS_METADATA, safeJsonStringify(agentTrace.metadata));\n }\n\n this._rootSpans.set(agentTrace.traceId, span);\n }\n\n onTraceEnd(agentTrace: AgentTrace): void {\n if (this._isShutdown) return;\n\n const rootSpan = this._rootSpans.get(agentTrace.traceId);\n if (!rootSpan) return;\n\n const hasErrors = this._traceErrors.has(agentTrace.traceId);\n rootSpan.setStatus(hasErrors\n ? { code: SpanStatusCode.ERROR, message: \"One or more child spans failed\" }\n : { code: SpanStatusCode.OK },\n );\n rootSpan.end();\n\n this._rootSpans.delete(agentTrace.traceId);\n this._traceErrors.delete(agentTrace.traceId);\n this._handoffs.delete(agentTrace.traceId);\n this._traceSpans.delete(agentTrace.traceId);\n }\n\n onSpanStart(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const existingSpan = this._otelSpans.get(agentSpan.spanId);\n if (existingSpan) {\n try { existingSpan.end(); } catch { /* already ended */ }\n this._otelSpans.delete(agentSpan.spanId);\n }\n\n if (this._otelSpans.size >= NetraAgentsTracingProcessor.MAX_TRACKED_SPANS) {\n this._evictOldestSpan();\n }\n\n const parentSpan = agentSpan.parentId\n ? this._otelSpans.get(agentSpan.parentId)\n : this._rootSpans.get(agentSpan.traceId);\n\n const parentContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined;\n\n const spanName = getSpanName(agentSpan);\n const netraType = getNetraSpanType(agentSpan.spanData);\n const startTime = this._parseTimestamp(agentSpan.startedAt);\n\n const span = this._tracer.startSpan(\n spanName,\n {\n kind: SpanKind.INTERNAL,\n startTime,\n attributes: {\n [NETRA_SPAN_TYPE_ATTR]: netraType,\n [SpanAttributes.LLM_SYSTEM]: this._systemName,\n [NETRA_AGENTS_SPAN_TYPE]: agentSpan.spanData.type,\n },\n },\n parentContext,\n );\n\n this._otelSpans.set(agentSpan.spanId, span);\n\n let spanSet = this._traceSpans.get(agentSpan.traceId);\n if (!spanSet) {\n spanSet = new Set();\n this._traceSpans.set(agentSpan.traceId, spanSet);\n }\n spanSet.add(agentSpan.spanId);\n }\n\n onSpanEnd(agentSpan: AgentSpan): void {\n if (this._isShutdown) return;\n\n const span = this._otelSpans.get(agentSpan.spanId);\n if (!span) return;\n\n span.updateName(getSpanName(agentSpan));\n setSpanDataAttributes(span, agentSpan, this._systemName);\n\n const data = agentSpan.spanData;\n\n if (data.type === \"handoff\" && data.to_agent && data.from_agent) {\n let traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (!traceHandoffs) {\n traceHandoffs = new Map();\n this._handoffs.set(agentSpan.traceId, traceHandoffs);\n }\n traceHandoffs.set(data.to_agent, data.from_agent);\n }\n\n if (data.type === \"agent\" && data.name) {\n const traceHandoffs = this._handoffs.get(agentSpan.traceId);\n if (traceHandoffs) {\n const parentNode = traceHandoffs.get(data.name);\n if (parentNode) {\n span.setAttribute(NETRA_AGENTS_PARENT_AGENT, parentNode);\n traceHandoffs.delete(data.name);\n if (traceHandoffs.size === 0) {\n this._handoffs.delete(agentSpan.traceId);\n }\n }\n }\n }\n\n if (agentSpan.error) {\n const errorMsg = agentSpan.error.data\n ? `${agentSpan.error.message}: ${safeJsonStringify(agentSpan.error.data)}`\n : agentSpan.error.message;\n span.setStatus({ code: SpanStatusCode.ERROR, message: errorMsg });\n span.recordException(new Error(agentSpan.error.message));\n this._traceErrors.add(agentSpan.traceId);\n } else {\n span.setStatus({ code: SpanStatusCode.OK });\n }\n\n const endTime = this._parseTimestamp(agentSpan.endedAt);\n span.end(endTime);\n this._otelSpans.delete(agentSpan.spanId);\n\n const spanSet = this._traceSpans.get(agentSpan.traceId);\n if (spanSet) {\n spanSet.delete(agentSpan.spanId);\n if (spanSet.size === 0) {\n this._traceSpans.delete(agentSpan.traceId);\n }\n }\n }\n\n forceFlush(): void {\n // The OTel pipeline handles flushing via its own span processors.\n // In-flight spans (started but not yet ended) cannot be flushed here\n // because they are still accumulating attributes; they will be exported\n // when their corresponding onSpanEnd / onTraceEnd callback fires.\n }\n\n shutdown(): void {\n this._isShutdown = true;\n\n for (const span of this._rootSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n\n for (const span of this._otelSpans.values()) {\n try {\n span.setAttribute(\"netra.agents.interrupted\", true);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: \"Span interrupted by processor shutdown\",\n });\n span.end();\n } catch {\n // span may already be ended\n }\n }\n this._rootSpans.clear();\n this._otelSpans.clear();\n this._handoffs.clear();\n this._traceErrors.clear();\n this._traceSpans.clear();\n }\n}\n","import { createRequire } from \"module\";\n\nlet _version = \"1.0.0\";\ntry {\n const req = createRequire(import.meta.url);\n const pkg = req(\"../../../package.json\");\n if (pkg?.version) _version = pkg.version;\n} catch {\n // Fall back to hardcoded version if package.json is unavailable at runtime\n}\n\nexport const __version__ = _version;\n","import { trace, Tracer } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { NetraAgentsTracingProcessor } from \"./processor\";\nimport { DEFAULT_LLM_SYSTEM, INSTRUMENTATION_NAME } from \"./constants\";\nimport { __version__ } from \"./version\";\nimport { Logger } from \"../../logger\";\nimport { parseNativeTracingEnv } from \"../utils\";\nimport type { NativeTracingMode } from \"../utils\";\nimport type { InstrumentorOptions, TracingProcessor } from \"./types\";\n\nlet cachedAgentsModule: any = null;\nlet isInstrumented = false;\nlet activeTracer: Tracer | null = null;\nlet activeProcessor: NetraAgentsTracingProcessor | null = null;\nlet originalProcessors: TracingProcessor[] | null = null;\nlet didReplaceProcessors = false;\n\n/**\n * Resolve the @openai/agents module from the application's context.\n * Tries ESM dynamic import first (same instance as the app), then falls back\n * to CJS require so the instrumentor works in both ESM and CommonJS projects.\n */\nasync function resolveAgentsModule(): Promise<any> {\n if (cachedAgentsModule) return cachedAgentsModule;\n\n try {\n // @ts-ignore - @openai/agents is an optional peer dependency\n const mod = await import(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"ESM resolution of @openai/agents failed, trying CJS fallback\");\n }\n\n try {\n const req = createRequire(import.meta.url);\n const mod = req(\"@openai/agents\");\n cachedAgentsModule = mod;\n return cachedAgentsModule;\n } catch {\n Logger.debug(\"CJS resolution of @openai/agents also failed\");\n }\n\n return null;\n}\n\nexport class NetraOpenAIAgentsInstrumentor {\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n /**\n * Register the Netra tracing processor with the OpenAI Agents SDK.\n *\n * Returns `this` in all cases (success **and** failure) so the call can be\n * chained. Check {@link isInstrumented} afterwards to verify the processor\n * was registered successfully.\n */\n async instrument(\n options: InstrumentorOptions = {},\n ): Promise<NetraOpenAIAgentsInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is already instrumented\");\n return this;\n }\n\n try {\n const provider = options.tracerProvider;\n activeTracer = provider\n ? provider.getTracer(INSTRUMENTATION_NAME, __version__)\n : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer for OpenAI Agents: ${error}`);\n return this;\n }\n\n const agentsModule = await resolveAgentsModule();\n if (!agentsModule) {\n Logger.warn(\n \"OpenAI Agents SDK (@openai/agents) not found.\",\n \"Install it to enable automatic agent tracing.\",\n );\n return this;\n }\n\n const systemName = options.systemName ?? DEFAULT_LLM_SYSTEM;\n activeProcessor = new NetraAgentsTracingProcessor(activeTracer!, systemName);\n\n const mode: NativeTracingMode = options.nativeTracing\n ?? parseNativeTracingEnv(\"NATIVE_TRACING_MODE\")\n ?? \"netra-strict\";\n\n const canSet = typeof agentsModule.setTraceProcessors === \"function\";\n const canAdd = typeof agentsModule.addTraceProcessor === \"function\";\n\n let strategy: \"replace\" | \"append\" | \"skip\";\n if (mode === \"both\" || (mode === \"netra\" && !canSet)) {\n strategy = \"append\";\n } else if (canSet) {\n strategy = \"replace\";\n } else {\n strategy = \"skip\";\n }\n\n try {\n switch (strategy) {\n case \"replace\":\n if (typeof agentsModule.getTraceProcessors === \"function\") {\n originalProcessors = agentsModule.getTraceProcessors();\n }\n agentsModule.setTraceProcessors([activeProcessor]);\n didReplaceProcessors = true;\n Logger.debug(\"OpenAI Agents native tracing disabled — traces will only be sent to Netra.\");\n break;\n\n case \"append\":\n if (canAdd) {\n agentsModule.addTraceProcessor(activeProcessor);\n } else {\n Logger.warn(\"OpenAI Agents SDK does not expose addTraceProcessor or setTraceProcessors.\");\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n if (mode === \"netra\") {\n Logger.warn(\n \"Cannot exclusively replace native trace processors in this @openai/agents version.\",\n \"Traces may still be sent to OpenAI.\",\n );\n }\n break;\n\n case \"skip\":\n Logger.warn(\n \"nativeTracing is \\\"netra-strict\\\" but the installed @openai/agents version\",\n \"does not support processor replacement. Skipping instrumentation.\",\n );\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n } catch (error) {\n Logger.warn(\"Failed to register trace processor with @openai/agents:\", error);\n activeProcessor = null;\n activeTracer = null;\n return this;\n }\n\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"OpenAI Agents SDK is not instrumented\");\n return;\n }\n\n if (activeProcessor) {\n activeProcessor.shutdown();\n activeProcessor = null;\n }\n\n if (didReplaceProcessors && cachedAgentsModule) {\n try {\n if (originalProcessors && typeof cachedAgentsModule.setTraceProcessors === \"function\") {\n cachedAgentsModule.setTraceProcessors(originalProcessors);\n Logger.debug(\"Restored original OpenAI Agents trace processors\");\n } else if (typeof cachedAgentsModule.setDefaultOpenAITracingExporter === \"function\") {\n cachedAgentsModule.setDefaultOpenAITracingExporter();\n Logger.debug(\"Restored default OpenAI Agents tracing exporter\");\n }\n } catch (error) {\n Logger.debug(\"Failed to restore original trace processors:\", error);\n }\n }\n\n originalProcessors = null;\n didReplaceProcessors = false;\n activeTracer = null;\n cachedAgentsModule = null;\n isInstrumented = false;\n }\n}\n\nexport const openaiAgentsInstrumentor = new NetraOpenAIAgentsInstrumentor();\n\nexport { NetraAgentsTracingProcessor } from \"./processor\";\nexport type { AgentSpan, AgentTrace, InstrumentorOptions, NativeTracingMode, TracingProcessor } from \"./types\";\n","import { Span } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\n\nexport function extractQuery(query: string | { query: string; parameters?: any[] }): {\n sql: string;\n parameters?: any[];\n} {\n if (typeof query === \"string\") {\n return { sql: query };\n }\n if (query && typeof query === \"object\" && \"query\" in query) {\n return {\n sql: String(query.query),\n parameters: Array.isArray(query.parameters) ? query.parameters : undefined,\n };\n }\n return { sql: String(query) };\n}\nexport function sanitizeQuery(sql: string, maxLength: number = 5000): string {\n if (sql.length <= maxLength) {\n return sql;\n }\n return sql.substring(0, maxLength) + \"...\";\n}\n\nexport function setQueryAttributes(\n span: Span,\n sql: string,\n parameters?: any[],\n operation?: string\n): void {\n span.setAttribute(\"db.system\", \"typeorm\");\n span.setAttribute(\"db.type\", \"sql\");\n \n if (operation) {\n span.setAttribute(\"db.operation\", operation);\n }\n\n if (!operation) {\n const upperSql = sql.trim().toUpperCase();\n if (upperSql.startsWith(\"SELECT\")) {\n span.setAttribute(\"db.operation\", \"SELECT\");\n } else if (upperSql.startsWith(\"INSERT\")) {\n span.setAttribute(\"db.operation\", \"INSERT\");\n } else if (upperSql.startsWith(\"UPDATE\")) {\n span.setAttribute(\"db.operation\", \"UPDATE\");\n } else if (upperSql.startsWith(\"DELETE\")) {\n span.setAttribute(\"db.operation\", \"DELETE\");\n } else if (upperSql.startsWith(\"CREATE\")) {\n span.setAttribute(\"db.operation\", \"CREATE\");\n } else if (upperSql.startsWith(\"DROP\")) {\n span.setAttribute(\"db.operation\", \"DROP\");\n } else if (upperSql.startsWith(\"ALTER\")) {\n span.setAttribute(\"db.operation\", \"ALTER\");\n }\n }\n\n span.setAttribute(\"db.statement\", sanitizeQuery(sql));\n\n if (parameters && parameters.length > 0) {\n try {\n span.setAttribute(\"db.statement.parameters\", JSON.stringify(parameters));\n } catch (e) {\n Logger.log(e);\n }\n }\n}\n\nexport function setResultAttributes(\n span: Span,\n result: any,\n rowCount?: number\n): void {\n if (rowCount !== undefined) {\n span.setAttribute(\"db.rows_affected\", rowCount);\n } else if (result !== undefined && result !== null) {\n if (Array.isArray(result)) {\n span.setAttribute(\"db.rows_affected\", result.length);\n } else if (typeof result === \"object\" && \"affected\" in result) {\n span.setAttribute(\"db.rows_affected\", Number(result.affected) || 0);\n } else if (typeof result === \"number\") {\n span.setAttribute(\"db.rows_affected\", result);\n }\n }\n}\n\nexport function extractDatabaseName(dataSource: any): string | undefined {\n if (!dataSource) return undefined;\n \n const options = dataSource.options || dataSource.connectionOptions;\n if (options) {\n if (options.database) return String(options.database);\n if (options.url) {\n try {\n const url = new URL(options.url);\n const dbName = url.pathname?.replace(/^\\//, \"\");\n if (dbName) return dbName;\n } catch(e) {\n Logger.log(e);\n }\n }\n }\n \n return undefined;\n}\n\n","import {\n Tracer,\n Span,\n SpanKind,\n SpanStatusCode,\n} from \"@opentelemetry/api\";\nimport {\n extractQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nconst QUERY_SPAN_NAME = \"typeorm.query\";\nconst MANAGER_QUERY_SPAN_NAME = \"typeorm.manager.query\";\nconst REPOSITORY_QUERY_SPAN_NAME = \"typeorm.repository.query\";\n\ntype WrappedFunction = (...args: unknown[]) => unknown;\n\nexport function queryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const dbName = extractDatabaseName(instance);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function managerQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n MANAGER_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const manager = instance as any;\n const connection = manager.connection || manager.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\nexport function repositoryQueryWrapper(tracer: Tracer) {\n return function wrapper(\n wrapped: WrappedFunction,\n instance: unknown,\n args: unknown[]\n ): unknown {\n const queryInfo = extractQuery(args[0] as string | { query: string; parameters?: any[] });\n const parameters = args[1] as any[] | undefined || queryInfo.parameters;\n\n return tracer.startActiveSpan(\n REPOSITORY_QUERY_SPAN_NAME,\n { kind: SpanKind.CLIENT },\n (span: Span) => {\n try {\n const repository = instance as any;\n const manager = repository.manager;\n const connection = manager?.connection || manager?.dataSource;\n const dbName = extractDatabaseName(connection);\n if (dbName) {\n span.setAttribute(\"db.name\", dbName);\n }\n\n if (repository.metadata) {\n span.setAttribute(\"db.typeorm.entity\", repository.metadata.name);\n if (repository.metadata.tableName) {\n span.setAttribute(\"db.sql.table\", repository.metadata.tableName);\n }\n }\n\n setQueryAttributes(span, queryInfo.sql, parameters);\n\n const startTime = Date.now();\n const result = wrapped.call(instance, ...args);\n const endTime = Date.now();\n\n if (result && typeof (result as Promise<unknown>).then === \"function\") {\n return (result as Promise<any>)\n .then((res) => {\n setResultAttributes(span, res);\n span.setAttribute(\"db.duration\", (Date.now() - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n return res;\n })\n .catch((error) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n throw error;\n })\n .finally(() => {\n span.end();\n });\n } else {\n setResultAttributes(span, result);\n span.setAttribute(\"db.duration\", (endTime - startTime) / 1000);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n }\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n span.recordException(error as Error);\n span.end();\n throw error;\n }\n }\n );\n };\n}\n\n","export const __version__ = \"1.0.0\";\n\n","import {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\nimport { __version__ } from \"./version\";\nimport { trace, Tracer, TracerProvider } from \"@opentelemetry/api\";\nimport { Logger } from \"../../logger\";\nimport { createRequire } from \"module\";\n\nconst require = createRequire(import.meta.url);\n\nconst INSTRUMENTATION_NAME = \"netra.instrumentation.typeorm\";\nconst originalMethods: Map<string, Function> = new Map();\nlet isInstrumented = false;\n\nexport interface InstrumentorOptions {\n tracerProvider?: TracerProvider;\n}\n\nexport class NetraTypeORMInstrumentor {\n private tracer?: Tracer;\n private tracerProvider?: TracerProvider;\n\n constructor() {\n }\n\n async instrument(options: InstrumentorOptions = {}): Promise<NetraTypeORMInstrumentor> {\n if (isInstrumented) {\n Logger.warn(\"TypeORM is already instrumented\");\n return this;\n }\n try {\n this.tracerProvider = options.tracerProvider;\n this.tracer = this.tracerProvider ? this.tracerProvider.getTracer(INSTRUMENTATION_NAME, __version__) : trace.getTracer(INSTRUMENTATION_NAME, __version__);\n } catch (error) {\n Logger.error(`Failed to initialize tracer: ${error}`);\n return this;\n }\n await this._instrumentDataSource();\n await this._instrumentEntityManager();\n await this._instrumentRepository();\n isInstrumented = true;\n return this;\n }\n\n uninstrument(): void {\n if (!isInstrumented) {\n Logger.warn(\"TypeORM is not instrumented\");\n return;\n }\n this._uninstrumentDataSource().catch(() => {\n });\n this._uninstrumentEntityManager().catch(() => {\n });\n this._uninstrumentRepository().catch(() => {\n });\n\n originalMethods.clear();\n isInstrumented = false;\n }\n\n isInstrumented(): boolean {\n return isInstrumented;\n }\n\n private async _instrumentDataSource(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n if (!DataSource) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM DataSource not found, skipping instrumentation\");\n }\n return;\n }\n\n if (DataSource.prototype?.query) {\n const originalQuery = DataSource.prototype.query;\n originalMethods.set(\"DataSource.prototype.query\", originalQuery);\n const tracer = this.tracer;\n const wrapper = queryWrapper(tracer);\n DataSource.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument DataSource: ${error}`);\n }\n }\n\n private async _instrumentEntityManager(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n if (!EntityManager) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM EntityManager not found, skipping instrumentation\");\n }\n return;\n }\n if (EntityManager.prototype?.query) {\n const originalQuery = EntityManager.prototype.query;\n originalMethods.set(\"EntityManager.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = managerQueryWrapper(tracer);\n\n EntityManager.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument EntityManager: ${error}`);\n }\n }\n\n private async _instrumentRepository(): Promise<void> {\n if (!this.tracer) return;\n\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n\n if (!Repository) {\n if (this.tracerProvider) {\n Logger.debug(\"TypeORM Repository not found, skipping instrumentation\");\n }\n return;\n }\n\n if (Repository.prototype?.query) {\n const originalQuery = Repository.prototype.query;\n originalMethods.set(\"Repository.prototype.query\", originalQuery);\n\n const tracer = this.tracer;\n const wrapper = repositoryQueryWrapper(tracer);\n\n Repository.prototype.query = function (\n this: unknown,\n ...args: unknown[]\n ): any {\n const original = originalQuery.bind(this);\n return wrapper(original as any, this, args);\n };\n }\n } catch (error) {\n Logger.debug(`Failed to instrument Repository: ${error}`);\n }\n }\n\n private async _uninstrumentDataSource(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const DataSource = typeorm.DataSource || (typeorm as any).default?.DataSource;\n\n const originalQuery = originalMethods.get(\"DataSource.prototype.query\");\n if (originalQuery && DataSource?.prototype) {\n DataSource.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument DataSource: ${error}`);\n }\n }\n\n private async _uninstrumentEntityManager(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const EntityManager = typeorm.EntityManager || (typeorm as any).default?.EntityManager;\n const originalQuery = originalMethods.get(\"EntityManager.prototype.query\");\n if (originalQuery && EntityManager?.prototype) {\n EntityManager.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument EntityManager: ${error}`);\n }\n }\n\n private async _uninstrumentRepository(): Promise<void> {\n try {\n const typeorm = require(\"typeorm\");\n const Repository = typeorm.Repository || (typeorm as any).default?.Repository;\n const originalQuery = originalMethods.get(\"Repository.prototype.query\");\n if (originalQuery && Repository?.prototype) {\n Repository.prototype.query = originalQuery as any;\n }\n } catch (error) {\n Logger.debug(`Failed to uninstrument Repository: ${error}`);\n }\n }\n}\n\nexport const typeORMInstrumentor = new NetraTypeORMInstrumentor();\n\nexport {\n queryWrapper,\n managerQueryWrapper,\n repositoryQueryWrapper,\n} from \"./wrappers\";\n\nexport {\n extractQuery,\n sanitizeQuery,\n setQueryAttributes,\n setResultAttributes,\n extractDatabaseName,\n} from \"./utils\";\n\nexport { __version__ } from \"./version\";\n\n","import { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\n\nlet trialBlockedAt: number | null = null;\nconst blockedTraceIds = new Set<string>();\n\nexport function setTrialBlocked(blocked: boolean) {\n if (blocked) {\n if (!trialBlockedAt) {\n trialBlockedAt = Date.now();\n Logger.warn(\n `Trial/quota exhausted: blocking span export for ${Config.TRIAL_BLOCK_DURATION_SECONDS}s`,\n );\n }\n } else {\n trialBlockedAt = null;\n }\n}\n\nexport function isTrialBlocked(): boolean {\n if (trialBlockedAt === null) return false;\n\n const elapsed = (Date.now() - trialBlockedAt) / 1000;\n\n if (elapsed >= Config.TRIAL_BLOCK_DURATION_SECONDS) {\n trialBlockedAt = null;\n return false;\n }\n\n return true;\n}\n\nexport function addBlockedTraceId(traceId: string) {\n blockedTraceIds.add(traceId);\n}\n\nexport function isTraceIdBlocked(traceId: string): boolean {\n return blockedTraceIds.has(traceId);\n}\n\nexport function getTraceId(span: ReadableSpan): string {\n try {\n return span.spanContext().traceId;\n } catch {\n return \"\";\n }\n}\n","import { ExportResultCode } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport type { SpanContext } from \"@opentelemetry/api\";\nimport {\n compilePatterns,\n matchesAnyPattern,\n CompiledPatterns,\n} from \"../utils/pattern-matching\";\nimport {\n addBlockedTraceId,\n getTraceId,\n isTraceIdBlocked,\n isTrialBlocked,\n} from \"./utils\";\n\n/**\n * Wrapper that overrides parentSpanContext without mutating the original span.\n * Delegates all other ReadableSpan properties to the original.\n *\n * NOTE: This class manually delegates every property of the ReadableSpan\n * interface. If the upstream interface adds new properties, they must be\n * forwarded here as well to avoid silent data loss during export.\n */\nclass ReparentedSpan implements ReadableSpan {\n constructor(\n private readonly delegate: ReadableSpan,\n private readonly newParent: SpanContext | undefined,\n ) {}\n\n get parentSpanContext(): SpanContext | undefined {\n return this.newParent;\n }\n\n get name() { return this.delegate.name; }\n get kind() { return this.delegate.kind; }\n spanContext() { return this.delegate.spanContext(); }\n get startTime() { return this.delegate.startTime; }\n get endTime() { return this.delegate.endTime; }\n get status() { return this.delegate.status; }\n get attributes() { return this.delegate.attributes; }\n get links() { return this.delegate.links; }\n get events() { return this.delegate.events; }\n get duration() { return this.delegate.duration; }\n get ended() { return this.delegate.ended; }\n get resource() { return this.delegate.resource; }\n get instrumentationScope() { return this.delegate.instrumentationScope; }\n get droppedAttributesCount() { return this.delegate.droppedAttributesCount; }\n get droppedEventsCount() { return this.delegate.droppedEventsCount; }\n get droppedLinksCount() { return this.delegate.droppedLinksCount; }\n}\n\nexport class FilteringSpanExporter implements SpanExporter {\n private static readonly MAX_REMEMBERED_ENTRIES = 10_000;\n\n /** Pre-compiled global patterns — compiled once in the constructor. */\n private readonly compiled: CompiledPatterns;\n\n /**\n * Spans that were blocked in a previous export() call but whose children\n * may still arrive in a later call (e.g. out-of-order export batches).\n */\n private readonly rememberedBlockedParentMap = new Map<\n string,\n SpanContext | undefined\n >();\n\n /** Cache for compiled local pattern sets to avoid per-span recompilation. */\n private readonly localPatternCache = new Map<string, CompiledPatterns>();\n private static readonly MAX_LOCAL_PATTERN_CACHE = 100;\n\n constructor(\n private readonly exporter: SpanExporter,\n globalPatterns: string[],\n private readonly localBlockedMap?: ReadonlyMap<string, SpanContext | undefined>,\n ) {\n this.compiled = compilePatterns(globalPatterns);\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: { code: ExportResultCode }) => void,\n ): void {\n if (isTrialBlocked()) {\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId) addBlockedTraceId(traceId);\n }\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n const filtered: ReadableSpan[] = [];\n const batchBlockedMap = new Map<string, SpanContext | undefined>();\n\n // Snapshot the shared processor map to avoid iteration/mutation races\n // when BatchSpanProcessor invokes export() concurrently with onStart().\n const localBlockedSnapshot = this.localBlockedMap\n ? new Map(this.localBlockedMap)\n : undefined;\n\n for (const span of spans) {\n const traceId = getTraceId(span);\n if (traceId && isTraceIdBlocked(traceId)) continue;\n\n const name = span.name;\n\n const globallyBlocked = matchesAnyPattern(name, this.compiled);\n\n const localPatterns = this.getLocalPatterns(span);\n const locallyBlocked =\n (localPatterns.length > 0 &&\n matchesAnyPattern(name, this.getCompiledLocalPatterns(localPatterns))) ||\n this.hasLocalBlockFlag(span);\n\n if (!globallyBlocked && !locallyBlocked) {\n filtered.push(span);\n continue;\n }\n\n const spanId = span.spanContext().spanId;\n const parentCtx = span.parentSpanContext;\n batchBlockedMap.set(spanId, parentCtx);\n this.rememberedBlockedParentMap.set(spanId, parentCtx);\n }\n\n const merged = new Map<string, SpanContext | undefined>();\n\n for (const [k, v] of this.rememberedBlockedParentMap) {\n merged.set(k, v);\n }\n if (localBlockedSnapshot) {\n for (const [k, v] of localBlockedSnapshot) {\n merged.set(k, v);\n }\n }\n for (const [k, v] of batchBlockedMap) {\n merged.set(k, v);\n }\n\n if (merged.size > 0) {\n this.reparentBlockedChildren(filtered, merged);\n }\n\n this.evictRememberedIfNeeded();\n\n if (filtered.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n this.exporter.export(filtered, resultCallback);\n }\n\n shutdown(): Promise<void> {\n this.rememberedBlockedParentMap.clear();\n this.localPatternCache.clear();\n return this.exporter.shutdown();\n }\n\n forceFlush(): Promise<void> {\n return this.exporter.forceFlush?.() ?? Promise.resolve();\n }\n\n private getCompiledLocalPatterns(patterns: string[]): CompiledPatterns {\n const key = patterns.join(\"\\0\");\n let compiled = this.localPatternCache.get(key);\n if (!compiled) {\n compiled = compilePatterns(patterns);\n this.localPatternCache.set(key, compiled);\n if (this.localPatternCache.size > FilteringSpanExporter.MAX_LOCAL_PATTERN_CACHE) {\n const first = this.localPatternCache.keys().next().value;\n if (first) this.localPatternCache.delete(first);\n }\n }\n return compiled;\n }\n\n private evictRememberedIfNeeded(): void {\n if (this.rememberedBlockedParentMap.size <= FilteringSpanExporter.MAX_REMEMBERED_ENTRIES) {\n return;\n }\n // Batch-evict 25% to amortize cost and avoid per-export eviction overhead\n const toRemove = Math.max(\n this.rememberedBlockedParentMap.size - FilteringSpanExporter.MAX_REMEMBERED_ENTRIES,\n Math.ceil(FilteringSpanExporter.MAX_REMEMBERED_ENTRIES * 0.25),\n );\n const keys = Array.from(this.rememberedBlockedParentMap.keys()).slice(0, toRemove);\n for (const key of keys) {\n this.rememberedBlockedParentMap.delete(key);\n }\n }\n\n private getLocalPatterns(span: ReadableSpan): string[] {\n const value = span.attributes?.[\"netra.local_blocked_spans\"];\n if (Array.isArray(value) && value.every((v) => typeof v === \"string\")) {\n return (value as string[]).filter((v) => v !== \"\");\n }\n return [];\n }\n\n private hasLocalBlockFlag(span: ReadableSpan): boolean {\n return span.attributes?.[\"netra.local_blocked\"] === true;\n }\n\n /**\n * Walk up the blocked-parent chain for each surviving span and wrap it\n * with a ReparentedSpan pointing to the nearest non-blocked ancestor.\n *\n * A cycle guard (visited set) prevents infinite loops in malformed traces.\n */\n private reparentBlockedChildren(\n spans: ReadableSpan[],\n blockedMap: Map<string, SpanContext | undefined>,\n ): void {\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n let parent = span.parentSpanContext;\n if (!parent) continue;\n\n const visited = new Set<string>();\n let changed = false;\n\n while (parent && blockedMap.has(parent.spanId)) {\n if (visited.has(parent.spanId)) break;\n visited.add(parent.spanId);\n parent = blockedMap.get(parent.spanId);\n changed = true;\n }\n\n if (changed) {\n spans[i] = new ReparentedSpan(span, parent);\n }\n }\n }\n}\n","import * as http from \"http\";\nimport * as https from \"https\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { ExportResult, ExportResultCode } from \"@opentelemetry/core\";\nimport { JsonTraceSerializer } from \"@opentelemetry/otlp-transformer\";\nimport { isTrialBlocked, setTrialBlocked } from \"./utils\";\n\ninterface ExporterConfig {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport class TrialAwareOTLPExporter implements SpanExporter {\n private _url: string;\n private _headers: Record<string, string>;\n private _isShutdown = false;\n\n constructor(config: ExporterConfig) {\n this._url = config.url;\n this._headers = config.headers || {};\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (this._isShutdown || isTrialBlocked()) {\n return resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n let data: Uint8Array | string;\n try {\n const serialized = JsonTraceSerializer.serializeRequest(spans);\n if (!serialized) throw new Error(\"Serialization failed\");\n data = serialized;\n } catch (err) {\n return resultCallback({\n code: ExportResultCode.FAILED,\n error: err instanceof Error ? err : new Error(\"Serialization failed\"),\n });\n }\n\n const url = new URL(this._url);\n const options: https.RequestOptions = {\n hostname: url.hostname,\n port: url.port,\n path: url.pathname,\n method: \"POST\",\n headers: {\n ...this._headers,\n host: url.host,\n \"Content-Type\": \"application/json\",\n \"Content-Length\":\n typeof data === \"string\" ? Buffer.byteLength(data) : data.byteLength,\n },\n };\n\n const lib = url.protocol === \"https:\" ? https : http;\n\n const req = lib.request(options, (res) => {\n let body = \"\";\n res.on(\"data\", (chunk) => (body += chunk));\n res.on(\"end\", () => {\n if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n } else {\n this.checkErrorBody(body, res.statusCode);\n resultCallback({\n code: ExportResultCode.FAILED,\n error: new Error(`Status ${res.statusCode}`),\n });\n }\n });\n });\n\n req.on(\"error\", (err) =>\n resultCallback({ code: ExportResultCode.FAILED, error: err }),\n );\n req.write(data);\n req.end();\n }\n\n private checkErrorBody(bodyString: string, statusCode?: number) {\n try {\n const jsonBody = JSON.parse(bodyString);\n const errorCode = jsonBody?.error?.code || statusCode;\n const errorMessage = jsonBody?.error?.message || \"\";\n\n if (errorCode === 429 || errorMessage.includes(\"usage quota exceeded\")) {\n setTrialBlocked(true);\n }\n } catch (e) {\n if (statusCode === 429 || bodyString.includes(\"quota exceeded\")) {\n setTrialBlocked(true);\n }\n }\n }\n\n async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n async shutdown(): Promise<void> {\n this._isShutdown = true;\n return Promise.resolve();\n }\n}\n","/**\n * Instrumentation setup for Netra SDK\n */\n\nimport { context, trace } from \"@opentelemetry/api\";\nimport {\n ConsoleSpanExporter,\n SpanExporter,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { initialize, InitializeOptions } from \"@traceloop/node-server-sdk\";\nimport { createRequire } from \"module\";\nimport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"../config\";\nimport { Logger } from \"../logger\";\nimport {\n AttributeSizeLimitProcessor,\n InstrumentationSpanProcessor,\n LlmTraceIdentifierSpanProcessor,\n RootSpanProcessor,\n RootInstrumentFilterProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"../processors\";\nimport { anthropicInstrumentor } from \"./anthropic\";\nimport { googleGenerativeAIInstrumentor } from \"./google-genai\";\nimport { groqInstrumentor } from \"./groq\";\nimport { langgraphInstrumentor } from \"./langgraph\";\nimport { mistralAIInstrumentor } from \"./mistralai\";\nimport { openAIInstrumentor } from \"./openai\";\nimport { openaiAgentsInstrumentor } from \"./openai-agents\";\nimport { typeORMInstrumentor } from \"./typeorm\";\nimport { FilteringSpanExporter, TrialAwareOTLPExporter } from \"../exporters\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { LocalFilteringSpanProcessor } from \"../processors/localfiltering-span-processor\";\nimport { propagation } from \"@opentelemetry/api\";\nimport {\n CompositePropagator,\n W3CBaggagePropagator as BaggagePropagator,\n W3CTraceContextPropagator,\n} from \"@opentelemetry/core\";\n\n// Interface for TracerProvider with addSpanProcessor method\ninterface TracerProviderWithProcessors {\n addSpanProcessor(processor: SpanProcessor): void;\n}\n\n// Re-export shared utilities for use across instrumentations\nexport {\n modelAsDict,\n setRequestAttributes,\n setResponseAttributes,\n shouldSuppressInstrumentation,\n} from \"./utils\";\n\nconst require = createRequire(import.meta.url);\n\nlet _httpInstrumentation: any = null;\nlet _undiciInstrumentation: any = null;\n\n/**\n * Check if a package is installed and resolvable.\n * Equivalent to Python SDK's `is_package_installed()`.\n */\nfunction isPackageInstalled(packageName: string): boolean {\n try {\n require.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Promise that resolves when custom instrumentations are initialized.\n * Can be awaited after calling initInstrumentations() to ensure\n * all async instrumentations are complete.\n */\nexport let instrumentationsReady: Promise<void> = Promise.resolve();\n\npropagation.setGlobalPropagator(\n new CompositePropagator({\n propagators: [new W3CTraceContextPropagator(), new BaggagePropagator()],\n }),\n);\n\nfunction patchTraceloopLangchainCallbackHandler(): void {\n const applyPatch = (mod: any, sourceLabel: string) => {\n const Handler = mod?.TraceloopCallbackHandler;\n if (!Handler || Handler.__netra_patched) return;\n\n const wrapWithParentContext = (methodName: string) => {\n const original = Handler.prototype[methodName];\n if (typeof original !== \"function\") return;\n Handler.prototype[methodName] = function (...args: any[]) {\n const parentRunId = args[3];\n const parentSpan = parentRunId\n ? this?.spans?.get(parentRunId)?.span\n : undefined;\n const active = trace.getSpan(context.active());\n Logger.debug(\n `Traceloop ${methodName}: runId=${args[2]} parentRunId=${parentRunId} parentSpan=${parentSpan ? \"yes\" : \"no\"} activeSpanId=${active?.spanContext().spanId}`,\n );\n // Always bind the current active context (or explicit parent) for this callback.\n const ctx = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : context.active();\n return context.with(ctx, () => original.apply(this, args));\n };\n };\n\n wrapWithParentContext(\"handleChainStart\");\n wrapWithParentContext(\"handleLLMStart\");\n wrapWithParentContext(\"handleChatModelStart\");\n wrapWithParentContext(\"handleToolStart\");\n\n Handler.__netra_patched = true;\n Logger.debug(`Patched TraceloopCallbackHandler for parent context (${sourceLabel}).`);\n };\n\n try {\n const mod = require(\"@traceloop/instrumentation-langchain\");\n Logger.debug(`Loaded @traceloop/instrumentation-langchain via require from ${require.resolve(\"@traceloop/instrumentation-langchain\")}`);\n applyPatch(mod, \"require\");\n return;\n } catch (e) {\n Logger.debug(\"require() for traceloop langchain failed, falling back to import().\");\n }\n\n import(\"@traceloop/instrumentation-langchain\")\n .then((mod: any) => {\n applyPatch(mod, \"import\");\n })\n .catch(() => {\n // No-op: langchain instrumentation not installed or not in use\n });\n}\n\nfunction disableTraceloopLangchainCallbackHandler(): void {\n try {\n const callbackManagerModule = require(\"@langchain/core/callbacks/manager\");\n const CallbackManager = callbackManagerModule?.CallbackManager;\n if (!CallbackManager || (CallbackManager as any).__netra_disable_traceloop) {\n return;\n }\n const originalConfigureSync = (CallbackManager as any)._configureSync;\n if (typeof originalConfigureSync !== \"function\") return;\n\n (CallbackManager as any)._configureSync = function (\n inheritableHandlers: any,\n localHandlers: any,\n inheritableTags: any,\n localTags: any,\n inheritableMetadata: any,\n localMetadata: any,\n options?: any,\n ) {\n const filterHandlers = (handlers: any) => {\n if (!handlers) return handlers;\n if (Array.isArray(handlers)) {\n return handlers.filter(\n (h) => h?.name !== \"traceloop_callback_handler\",\n );\n }\n return handlers;\n };\n const filteredInheritable = filterHandlers(inheritableHandlers);\n const filteredLocal = filterHandlers(localHandlers);\n return originalConfigureSync.call(\n this,\n filteredInheritable,\n filteredLocal,\n inheritableTags,\n localTags,\n inheritableMetadata,\n localMetadata,\n options,\n );\n };\n (CallbackManager as any).__netra_disable_traceloop = true;\n Logger.debug(\"Disabled Traceloop LangChain callback injection.\");\n } catch {\n // no-op\n }\n}\n\n/**\n * Resolve the effective root instrument allow-list.\n *\n * `rootInstruments` is resolved independently of the non-root `instruments`\n * set. `blockInstruments` is subtracted from the resolved root set.\n *\n * When `NetraInstruments.ALL` is in `rootInstruments`, returns `null` (no\n * root filtering — all instrumentations may create root spans) unless\n * `blockInstruments` restricts the set.\n *\n * Returns a set of instrumentation-name strings, or `null` when no filtering\n * should be applied.\n */\nfunction resolveRootInstrumentNames(\n rootInstruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): Set<string> | null {\n const allSentinel = NetraInstruments.ALL;\n const rootHasAll = rootInstruments != null && rootInstruments.has(allSentinel);\n const blockHasAll = blockInstruments != null && blockInstruments.has(allSentinel);\n\n if (blockHasAll) {\n if (rootHasAll) {\n Logger.error(\n \"Netra: rootInstruments=ALL is contradicted by blockInstruments=ALL; \" +\n \"all root instrumentation is disabled.\",\n );\n } else {\n Logger.warn(\n \"Netra: blockInstruments contains ALL; all instrumentation will be disabled.\",\n );\n }\n }\n\n // All instrument values (excluding the ALL sentinel)\n const allInstrumentValues = new Set<string>(\n Object.values(NetraInstruments).filter((v) => v !== allSentinel),\n );\n\n // Compute blocked values\n let blockedValues: Set<string>;\n if (blockHasAll) {\n blockedValues = new Set(allInstrumentValues);\n } else if (blockInstruments && blockInstruments.size > 0) {\n blockedValues = new Set(\n [...blockInstruments]\n .filter((m) => m !== allSentinel)\n .map((m) => m.valueOf()),\n );\n } else {\n blockedValues = new Set();\n }\n\n // Resolve root set\n if (rootHasAll) {\n if (blockedValues.size > 0) {\n const resolved = new Set<string>();\n for (const v of allInstrumentValues) {\n if (!blockedValues.has(v)) {\n resolved.add(v);\n }\n }\n return resolved;\n }\n return null; // No filtering — all roots allowed\n }\n\n // Use explicit rootInstruments or fall back to DEFAULT_INSTRUMENTS_FOR_ROOT\n const effectiveRoot =\n rootInstruments && rootInstruments.size > 0\n ? rootInstruments\n : DEFAULT_INSTRUMENTS_FOR_ROOT;\n\n const resolved = new Set<string>();\n for (const m of effectiveRoot) {\n if (m === allSentinel) continue;\n const val = m.valueOf();\n if (!blockedValues.has(val)) {\n resolved.add(val);\n }\n }\n\n return resolved;\n}\n\nexport function initInstrumentations(\n config: Config,\n instruments?: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n rootInstruments?: Set<NetraInstruments>,\n): TracerProviderWithProcessors | null {\n // Resolve effective instruments: use DEFAULT_INSTRUMENTS when not provided\n const enableAll = instruments != null && instruments.has(NetraInstruments.ALL);\n\n // Resolve root instrument names (independent of `instruments`).\n // blockInstruments is subtracted from the resolved root set.\n const resolvedRootNames: Set<string> | null = resolveRootInstrumentNames(\n rootInstruments,\n blockInstruments,\n );\n\n // Map Netra instruments to Traceloop instrument modules\n const instrumentModules: InitializeOptions[\"instrumentModules\"] = {};\n\n // Track whether to use custom instrumentors\n const customInstrumentModules: Record<string, boolean> = {\n openai: false,\n groq: false,\n mistral: false,\n langgraph: false,\n googleGenAI: false,\n anthropic: false,\n openAiAgents: false,\n };\n\n // Resolve effective instrument set (Python parity):\n // ALL → enable everything; otherwise fall back to DEFAULT_INSTRUMENTS\n const resolved: Set<NetraInstruments> = enableAll\n ? new Set(Object.values(NetraInstruments).filter((v) => v !== NetraInstruments.ALL) as NetraInstruments[])\n : (instruments && instruments.size > 0) ? instruments : DEFAULT_INSTRUMENTS;\n\n // Explicitly disable all Traceloop modules, then selectively enable\n instrumentModules.google_vertexai = false;\n instrumentModules.langchain = false;\n instrumentModules.llamaIndex = false;\n instrumentModules.pinecone = false;\n instrumentModules.qdrant = false;\n instrumentModules.chromadb = false;\n instrumentModules.together = false;\n\n if (resolved.has(NetraInstruments.OPENAI)) {\n customInstrumentModules.openai = true;\n }\n if (resolved.has(NetraInstruments.MISTRAL)) {\n customInstrumentModules.mistral = true;\n }\n if (resolved.has(NetraInstruments.GROQ)) {\n customInstrumentModules.groq = true;\n }\n if (resolved.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) {\n customInstrumentModules.googleGenAI = true;\n }\n if (resolved.has(NetraInstruments.VERTEX_AI) && isPackageInstalled(\"@google-cloud/vertexai\")) {\n instrumentModules.google_vertexai = require(\"@google-cloud/vertexai\");\n }\n if (resolved.has(NetraInstruments.LANGCHAIN)) {\n instrumentModules.langchain = true;\n }\n if (resolved.has(NetraInstruments.LANGGRAPH)) {\n customInstrumentModules.langgraph = true;\n }\n if (resolved.has(NetraInstruments.LLAMA_INDEX) && isPackageInstalled(\"llamaindex\")) {\n instrumentModules.llamaIndex = require(\"llamaindex\");\n }\n if (resolved.has(NetraInstruments.PINECONE) && isPackageInstalled(\"@pinecone-database/pinecone\")) {\n instrumentModules.pinecone = require(\"@pinecone-database/pinecone\");\n }\n if (resolved.has(NetraInstruments.QDRANT) && isPackageInstalled(\"@qdrant/js-client-rest\")) {\n instrumentModules.qdrant = require(\"@qdrant/js-client-rest\");\n }\n if (resolved.has(NetraInstruments.CHROMADB) && isPackageInstalled(\"chromadb\")) {\n instrumentModules.chromadb = require(\"chromadb\");\n }\n if (resolved.has(NetraInstruments.TOGETHER) && isPackageInstalled(\"together-ai\")) {\n instrumentModules.together = require(\"together-ai\");\n }\n if (resolved.has(NetraInstruments.ANTHROPIC)) {\n customInstrumentModules.anthropic = true;\n }\n if (resolved.has(NetraInstruments.OPENAI_AGENTS)) {\n customInstrumentModules.openAiAgents = true;\n }\n\n // Apply blockInstruments to Traceloop and Netra custom modules\n if (blockInstruments && blockInstruments.size > 0) {\n const blockAll = blockInstruments.has(NetraInstruments.ALL);\n if (blockAll || blockInstruments.has(NetraInstruments.OPENAI)) customInstrumentModules.openai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GROQ)) customInstrumentModules.groq = false;\n if (blockAll || blockInstruments.has(NetraInstruments.MISTRAL)) customInstrumentModules.mistral = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGGRAPH)) customInstrumentModules.langgraph = false;\n if (blockAll || blockInstruments.has(NetraInstruments.GOOGLE_GENERATIVE_AI)) customInstrumentModules.googleGenAI = false;\n if (blockAll || blockInstruments.has(NetraInstruments.ANTHROPIC)) customInstrumentModules.anthropic = false;\n if (blockAll || blockInstruments.has(NetraInstruments.OPENAI_AGENTS)) customInstrumentModules.openAiAgents = false;\n if (blockAll || blockInstruments.has(NetraInstruments.VERTEX_AI)) instrumentModules.google_vertexai = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LANGCHAIN)) instrumentModules.langchain = false;\n if (blockAll || blockInstruments.has(NetraInstruments.LLAMA_INDEX)) instrumentModules.llamaIndex = false;\n if (blockAll || blockInstruments.has(NetraInstruments.PINECONE)) instrumentModules.pinecone = false;\n if (blockAll || blockInstruments.has(NetraInstruments.QDRANT)) instrumentModules.qdrant = false;\n if (blockAll || blockInstruments.has(NetraInstruments.CHROMADB)) instrumentModules.chromadb = false;\n if (blockAll || blockInstruments.has(NetraInstruments.TOGETHER)) instrumentModules.together = false;\n }\n\n // Set Traceloop environment variables before initializing\n // This ensures the SDK picks up our configuration\n config.setTraceloopEnv();\n\n // Debug: Log configuration being used\n Logger.debug(\"Netra SDK Configuration:\");\n Logger.debug(` App Name: ${config.appName}`);\n Logger.debug(` OTLP Endpoint: ${config.otlpEndpoint || \"(default - localhost:3002)\"}`);\n Logger.debug(` API Key: ${config.apiKey ? \"***\" + config.apiKey.slice(-4) : \"(not set)\"}`);\n Logger.debug(` Trace Content: ${config.traceContent}`);\n Logger.debug(` Enable Scrubbing: ${config.enableScrubbing}`);\n\n // Initialize Traceloop SDK\n const traceloopOptions: InitializeOptions = {\n appName: config.appName,\n apiKey: config.apiKey,\n baseUrl: config.otlpEndpoint,\n disableBatch: config.disableBatch,\n traceContent: config.traceContent,\n headers: config.headers,\n instrumentModules,\n silenceInitializationMessage: !config.debugMode,\n };\n // ---- updated exporter setup (Python-equivalent) ----\n\n // 1) Pick base exporter (Console fallback OR TrialAware(OTLP))\n let exporter: SpanExporter;\n\n if (!traceloopOptions.baseUrl || traceloopOptions.baseUrl == undefined) {\n exporter = new ConsoleSpanExporter();\n } else {\n const formattedEndpoint = config.formatOtlpEndpoint();\n\n // In TS, we pass the config directly to our custom class\n // because it handles the HTTP transport itself to catch the error body.\n exporter = new TrialAwareOTLPExporter({\n url: formattedEndpoint,\n headers: config.headers,\n });\n }\n\n // 2) Always attempt filtering (even for Console fallback)\n // The LocalFilteringSpanProcessor is instantiated below and its\n // blockedParentMap is injected into FilteringSpanExporter so the\n // two can share reparenting state without module-level globals.\n const globalBlockedPatterns = config.blockedSpans ?? [];\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor(globalBlockedPatterns);\n const originalExporter = exporter;\n\n try {\n exporter = new FilteringSpanExporter(\n exporter,\n globalBlockedPatterns,\n localFilteringSpanProcessor.blockedParentMap,\n );\n } catch {\n exporter = originalExporter;\n }\n\n traceloopOptions.exporter = exporter;\n\n initialize(traceloopOptions);\n\n if (instrumentModules.langchain) {\n patchTraceloopLangchainCallbackHandler();\n } else {\n disableTraceloopLangchainCallbackHandler();\n }\n\n // ---- rest stays same ----\n const tracerProvider = trace.getTracerProvider();\n\n // Add custom span processors to the TracerProvider\n // The Traceloop SDK creates a BasicTracerProvider internally\n const effectiveProvider = addCustomSpanProcessors(\n tracerProvider,\n config,\n resolvedRootNames,\n );\n\n // Initialize custom instrumentations asynchronously\n // We use async initialization to ensure we get the same ES module instances\n // that the application uses (important for ESM/CJS dual package handling)\n instrumentationsReady = initCustomInstrumentationsAsync(\n config,\n tracerProvider,\n customInstrumentModules,\n blockInstruments,\n );\n\n // Initialize additional OpenTelemetry instrumentations (uses resolved set)\n initOpenTelemetryInstrumentations(config, resolved, blockInstruments);\n\n return effectiveProvider;\n}\n\n/**\n * Returns true if the given instrument should be blocked.\n * Handles the ALL sentinel (blocks everything).\n */\nfunction isBlocked(\n instrument: NetraInstruments,\n blockInstruments?: Set<NetraInstruments>,\n): boolean {\n if (!blockInstruments || blockInstruments.size === 0) return false;\n return (\n blockInstruments.has(NetraInstruments.ALL) ||\n blockInstruments.has(instrument)\n );\n}\n\n/**\n * Initialize custom instrumentations asynchronously\n * This uses dynamic import() to ensure we patch the same ES module instances\n * that the application uses.\n */\nasync function initCustomInstrumentationsAsync(\n config: Config,\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n customInstrumentModules: Record<string, boolean>,\n blockInstruments?: Set<NetraInstruments>,\n): Promise<void> {\n if (customInstrumentModules.mistral) {\n try {\n await mistralAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom MistralAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom MistralAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.openai) {\n try {\n await openAIInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.groq) {\n try {\n await groqInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Groq instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Groq instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.googleGenAI) {\n try {\n await googleGenerativeAIInstrumentor.instrumentAsync({ tracerProvider });\n Logger.debug(\"Custom Google GenAI instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Google GenAI instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.langgraph) {\n try {\n await langgraphInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom Langgraph instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Langgraph instrumentation:\", e);\n }\n }\n\n if (customInstrumentModules.anthropic) {\n try {\n await anthropicInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom Anthropic instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom Anthropic instrumentation:\", e);\n }\n }\n\n // Initialize OpenAI Agents SDK instrumentation\n if (\n customInstrumentModules.openAiAgents &&\n !blockInstruments?.has(NetraInstruments.OPENAI_AGENTS)\n ) {\n try {\n await openaiAgentsInstrumentor.instrument({ tracerProvider });\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation enabled\");\n } catch (e) {\n Logger.debug(\"Failed to initialize custom OpenAI Agents SDK instrumentation:\", e);\n }\n }\n}\n\nfunction initOpenTelemetryInstrumentations(\n config: Config,\n resolved: Set<NetraInstruments>,\n blockInstruments?: Set<NetraInstruments>,\n): void {\n // HTTP/HTTPS instrumentation\n // Also auto-enabled when Express is requested (Express needs HTTP for traceparent propagation)\n // Shared URL exclusion — mirrors Python's OTEL_PYTHON_EXCLUDED_URLS global.\n // Always skips internal Netra egress; OTEL_NODE_EXCLUDED_URLS adds user patterns.\n let netraHost = \"\";\n try {\n if (config.otlpEndpoint) {\n netraHost = new URL(config.otlpEndpoint).host;\n }\n } catch {\n Logger.debug(`OTEL_NODE_EXCLUDED_URLS: malformed otlpEndpoint '${config.otlpEndpoint}', skipping host-based exclusion`);\n }\n\n // Comma-separated regex patterns (unanchored search). Precompiled once;\n // invalid patterns are skipped so a bad entry never breaks instrumentation.\n const excludeRegexes = (process.env.OTEL_NODE_EXCLUDED_URLS || \"\")\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n .map((pattern) => {\n try {\n return new RegExp(pattern);\n } catch {\n if (config.debugMode) {\n Logger.debug(\n `Invalid OTEL_NODE_EXCLUDED_URLS pattern skipped: ${pattern}`,\n );\n }\n return null;\n }\n })\n .filter((re): re is RegExp => re !== null);\n\n const isExcludedUrl = (url: string): boolean => {\n if (netraHost && url.includes(netraHost)) return true;\n return excludeRegexes.some((re) => re.test(url));\n };\n\n if (\n !isBlocked(NetraInstruments.HTTP, blockInstruments) &&\n (resolved.has(NetraInstruments.HTTP) || resolved.has(NetraInstruments.EXPRESS))\n ) {\n try {\n const { HttpInstrumentation } = require(\"@opentelemetry/instrumentation-http\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n _httpInstrumentation = new HttpInstrumentation({\n ignoreOutgoingRequestHook: (request: { host?: string; hostname?: string; path?: string }) => {\n const url = `${request.host ?? request.hostname ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_httpInstrumentation] });\n if (config.debugMode) {\n Logger.debug(\"HTTP instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"HTTP instrumentation not available:\", e);\n }\n }\n\n // undici / native fetch instrumentation. instrumentation-http does NOT cover\n // Node's global fetch (Node 18+) — it is backed by undici and bypasses the\n // http module. This is the primary egress path for OpenAI/Anthropic/AI-SDK.\n const fetchEnabled =\n !isBlocked(NetraInstruments.HTTP, blockInstruments) &&\n resolved.has(NetraInstruments.HTTP);\n\n if (fetchEnabled) {\n try {\n const { UndiciInstrumentation } = require(\"@opentelemetry/instrumentation-undici\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n\n _undiciInstrumentation = new UndiciInstrumentation({\n ignoreRequestHook: (request: { origin?: string; path?: string }) => {\n const url = `${request.origin ?? \"\"}${request.path ?? \"\"}`;\n return isExcludedUrl(url);\n },\n });\n registerInstrumentations({ instrumentations: [_undiciInstrumentation] });\n if (config.debugMode) {\n Logger.debug(\"Undici/fetch instrumentation enabled\");\n }\n } catch (e) {\n if (config.debugMode) {\n Logger.debug(\"Undici/fetch instrumentation not available:\", e);\n }\n }\n }\n\n // Prisma instrumentation\n if (\n !isBlocked(NetraInstruments.PRISMA, blockInstruments) &&\n resolved.has(NetraInstruments.PRISMA) &&\n isPackageInstalled(\"@prisma/instrumentation\")\n ) {\n try {\n const { PrismaInstrumentation } = require(\"@prisma/instrumentation\");\n // Note: This would need to be registered with the SDK\n } catch (e) {\n Logger.debug(\"Prisma instrumentation not available:\", e);\n }\n }\n\n if (\n !isBlocked(NetraInstruments.TYPEORM, blockInstruments) &&\n resolved.has(NetraInstruments.TYPEORM) &&\n isPackageInstalled(\"typeorm\")\n ) {\n typeORMInstrumentor\n .instrument()\n .then(() => {\n Logger.debug(\"TypeORM instrumentation successfully initialized\");\n })\n .catch((e) => {\n Logger.debug(\"TypeORM instrumentation error:\", e);\n });\n }\n\n // Express instrumentation\n if (\n !isBlocked(NetraInstruments.EXPRESS, blockInstruments) &&\n resolved.has(NetraInstruments.EXPRESS)\n ) {\n try {\n const { ExpressInstrumentation } = require(\"@opentelemetry/instrumentation-express\");\n const { registerInstrumentations } = require(\"@opentelemetry/instrumentation\");\n registerInstrumentations({ instrumentations: [new ExpressInstrumentation()] });\n if (config.debugMode) {\n Logger.debug(\"Express instrumentation enabled\");\n }\n } catch (e) {\n Logger.debug(\"Express instrumentation not available:\", e);\n }\n }\n}\n\n/**\n * Add custom span processors to the TracerProvider\n * These processors add session context, instrumentation metadata, and scrubbing\n *\n * Returns the effective TracerProvider that processors were added to.\n */\nfunction addCustomSpanProcessors(\n tracerProvider: ReturnType<typeof trace.getTracerProvider>,\n config: Config,\n rootInstrumentNames: Set<string> | null,\n): TracerProviderWithProcessors | null {\n try {\n // The TracerProvider from Traceloop is a ProxyTracerProvider\n // We need to find the actual provider with addSpanProcessor method\n let provider: TracerProviderWithProcessors | null = null;\n\n // Try to access the delegate/underlying provider\n const providerAny = tracerProvider as any;\n\n // Check if it's a ProxyTracerProvider with a delegate\n if (\n providerAny._delegate &&\n typeof providerAny._delegate.addSpanProcessor === \"function\"\n ) {\n provider = providerAny._delegate as TracerProviderWithProcessors;\n }\n // Check if it has getDelegate method\n else if (typeof providerAny.getDelegate === \"function\") {\n const delegate = providerAny.getDelegate();\n if (delegate) {\n if (typeof delegate.addSpanProcessor === \"function\") {\n provider = delegate as TracerProviderWithProcessors;\n } else if (\n delegate._activeSpanProcessor &&\n delegate._activeSpanProcessor.constructor.name ===\n \"MultiSpanProcessor\" &&\n Array.isArray(delegate._activeSpanProcessor._spanProcessors)\n ) {\n // Fallback for OTel SDKs where addSpanProcessor is removed/protected\n // and MultiSpanProcessor is used (e.g. created by Traceloop)\n provider = {\n addSpanProcessor: (processor: SpanProcessor) => {\n delegate._activeSpanProcessor._spanProcessors.push(processor);\n },\n getTracer: (name: string, version?: string) => {\n return delegate.getTracer(name, version);\n },\n } as TracerProviderWithProcessors;\n }\n }\n }\n // Check if it directly has addSpanProcessor\n else if (typeof providerAny.addSpanProcessor === \"function\") {\n provider = providerAny as TracerProviderWithProcessors;\n }\n // Try accessing via global registry (NodeTracerProvider stores itself)\n else {\n try {\n // Try to get the active provider from the SDK\n const { NodeTracerProvider } = require(\"@opentelemetry/sdk-trace-node\");\n // The provider might be accessible via other means\n } catch {\n // SDK not available\n }\n }\n\n if (!provider) {\n Logger.debug(\n \"Could not access TracerProvider for adding span processors. \" +\n \"Session context will still be propagated via baggage.\",\n );\n return null;\n }\n\n // ─── Processor registration order matters ───\n // Processors that wrap span.setAttribute form an implicit call chain:\n // InstrumentationSpanProcessor (#1) wraps setAttribute for truncation,\n // then SpanIOProcessor (#3) wraps the already-wrapped setAttribute for\n // IO normalisation. Reordering these will break the chain silently.\n //\n // onEnd runs in registration order: SpanIOProcessor (#3) promotes\n // netra.user.input/output → input/output BEFORE RootSpanProcessor (#5)\n // cleans up its root span map.\n\n // 0. Local Filtering Span Processor - filters spans based on local context\n const localFilteringSpanProcessor = new LocalFilteringSpanProcessor();\n provider.addSpanProcessor(localFilteringSpanProcessor);\n\n // 0.5. Root Instrument Filter Processor - blocks root spans from non-allowed instrumentations\n // When rootInstrumentNames is null, all instrumentations may produce root spans (no filtering).\n if (rootInstrumentNames !== null) {\n const rootFilterProcessor = new RootInstrumentFilterProcessor(\n rootInstrumentNames,\n );\n provider.addSpanProcessor(rootFilterProcessor);\n }\n\n // 1. Instrumentation Span Processor - truncates attributes and adds instrumentation name.\n // MUST run before SpanIOProcessor so the IO processor's setAttribute wrapper\n // captures the truncation wrapper in its call chain.\n const instrumentationProcessor = new InstrumentationSpanProcessor();\n provider.addSpanProcessor(instrumentationProcessor);\n\n // 2. Session Span Processor - adds session context (session_id, user_id, etc.)\n const sessionProcessor = new SessionSpanProcessor(config.environment);\n provider.addSpanProcessor(sessionProcessor);\n\n // 3. Span I/O Processor - normalises input/output from gen_ai.prompt/completion\n // and traceloop.entity attributes; remaps traceloop.* → netra.*\n // MUST run after InstrumentationSpanProcessor (captures its setAttribute wrapper).\n // MUST run before RootSpanProcessor (promotes netra.user.* in onEnd first).\n const spanIOProcessor = new SpanIOProcessor();\n provider.addSpanProcessor(spanIOProcessor);\n\n // 4. LLM Trace Identifier Span Processor - marks root spans that contain LLM calls\n const llmTraceProcessor = new LlmTraceIdentifierSpanProcessor();\n provider.addSpanProcessor(llmTraceProcessor);\n\n // 5. Root Span Processor - tracks the root span per trace by traceId.\n // Registered AFTER LlmTraceIdentifierSpanProcessor so that on_end cleanup\n // happens after the LLM processor has finished annotating the root span.\n // Registered AFTER SpanIOProcessor so root spans have setAttribute wrapped\n // before being stored in the root span map.\n const rootSpanProcessor = new RootSpanProcessor();\n provider.addSpanProcessor(rootSpanProcessor);\n\n // 6. Scrubbing Span Processor - scrubs sensitive data (if enabled)\n if (config.enableScrubbing) {\n const scrubbingProcessor = new ScrubbingSpanProcessor();\n provider.addSpanProcessor(scrubbingProcessor);\n }\n\n // 7. Attribute Size Limit Processor - enforces hard size limits on span\n // attributes before export to prevent \"entity too large\" errors.\n // MUST be last so it acts as final gate after all other processors.\n const sizeLimitProcessor = new AttributeSizeLimitProcessor(\n Config.SPAN_ATTRIBUTE_MAX_SIZE,\n );\n provider.addSpanProcessor(sizeLimitProcessor);\n\n Logger.debug(\"Custom span processors registered successfully\");\n\n return provider;\n } catch (e) {\n Logger.debug(\"Failed to add custom span processors:\", e);\n return null;\n }\n}\n\n/**\n * Uninstrument all active instrumentations\n * Should be called during shutdown\n */\nexport async function uninstrumentAll(): Promise<void> {\n // Uninstrument custom OpenAI instrumentation\n try {\n if (openAIInstrumentor.isInstrumented()) {\n await openAIInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI:\", e);\n }\n\n // Uninstrument custom MistralAI instrumentation\n try {\n if (mistralAIInstrumentor.isInstrumented()) {\n mistralAIInstrumentor.uninstrument();\n Logger.debug(\"Custom MistralAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument MistralAI:\", e);\n }\n\n // Uninstrument custom Groq instrumentation\n try {\n if (groqInstrumentor.isInstrumented()) {\n groqInstrumentor.uninstrument();\n Logger.debug(\"Custom Groq instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Groq:\", e);\n }\n\n // Uninstrument custom Anthropic instrumentation\n try {\n if (anthropicInstrumentor.isInstrumented()) {\n anthropicInstrumentor.uninstrument();\n Logger.debug(\"Custom Anthropic instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Anthropic:\", e);\n }\n\n // Uninstrument custom Google GenAI instrumentation\n try {\n if (googleGenerativeAIInstrumentor.isInstrumented()) {\n googleGenerativeAIInstrumentor.uninstrument();\n Logger.debug(\"Custom Google GenAI instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Google GenAI:\", e);\n }\n\n // Uninstrument custom Langgraph instrumentation\n try {\n if (langgraphInstrumentor.isInstrumented()) {\n await langgraphInstrumentor.uninstrument();\n Logger.debug(\"Custom Langgraph instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument Langgraph:\", e);\n }\n\n // Uninstrument custom TypeORM instrumentation\n try {\n if (typeORMInstrumentor.isInstrumented()) {\n typeORMInstrumentor.uninstrument();\n Logger.debug(\"Custom TypeORM instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument TypeORM:\", e);\n }\n\n // Uninstrument custom OpenAI Agents SDK instrumentation\n try {\n if (openaiAgentsInstrumentor.isInstrumented()) {\n openaiAgentsInstrumentor.uninstrument();\n Logger.debug(\"Custom OpenAI Agents SDK instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument OpenAI Agents SDK:\", e);\n }\n\n // Uninstrument HTTP instrumentation\n try {\n if (_httpInstrumentation) {\n _httpInstrumentation.disable();\n _httpInstrumentation = null;\n Logger.debug(\"HTTP instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument HTTP:\", e);\n }\n\n // Uninstrument undici/fetch instrumentation\n try {\n if (_undiciInstrumentation) {\n _undiciInstrumentation.disable();\n _undiciInstrumentation = null;\n Logger.debug(\"Undici/fetch instrumentation disabled\");\n }\n } catch (e) {\n Logger.debug(\"Failed to uninstrument undici:\", e);\n }\n}\n","import { ProcessedFile, TaskResult } from \"./models\";\n\n\nexport abstract class BaseTask {\n /**\n * Process a simulation turn and return the agent's response.\n *\n * @param message - The input message from the simulation.\n * @param sessionId - The session identifier.\n * @param files - Optional list of base64-encoded file attachments from the\n * dataset item. Will be `null` when no files are attached.\n * @returns The task result containing:\n * - message (string): The response message from the task.\n * - sessionId (string): The session identifier.\n */\n abstract run(\n message: string,\n sessionId?: string | null,\n files?: ProcessedFile[] | null,\n ): Promise<TaskResult> | TaskResult;\n}\n","import axios from \"axios\";\nimport pLimit from \"p-limit\";\nimport { Logger } from \"../logger\";\nimport { FileData, ProcessedFile } from \"./models\";\nimport { BaseTask } from \"./task\";\n\ntype LimitFunction = ReturnType<typeof pLimit>;\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_FILE_DOWNLOAD_TIMEOUT_S = 30;\nconst MAX_FILE_DOWNLOAD_WORKERS = 8;\n\nlet _cachedFileDownloadTimeoutMs: number | null = null;\n\n/**\n * Format the trace ID as a 32-digit hexadecimal string.\n *\n * @param traceId - The integer trace ID to format\n * @returns The formatted trace ID as a hexadecimal string\n */\nexport function formatTraceId(traceId: number): string {\n return traceId.toString(16).padStart(32, \"0\");\n}\n\n/**\n * Validate required inputs for simulation.\n *\n * @param datasetId - The dataset identifier to validate\n * @param task - The task function to validate\n * @returns True if inputs are valid, false otherwise\n */\nexport function validateSimulationInputs(\n datasetId: string,\n task: BaseTask,\n): boolean {\n if (!datasetId) {\n Logger.error(`${LOG_PREFIX}: dataset_id is required`);\n return false;\n }\n if (!(task instanceof BaseTask)) {\n Logger.error(`${LOG_PREFIX}: task must be a BaseTask instance`);\n return false;\n }\n return true;\n}\n\n/**\n * Get the file download timeout in milliseconds.\n *\n * Reads from the `NETRA_SIMULATION_FILE_DOWNLOAD_TIMEOUT` environment\n * variable (value in seconds) on first access and caches the result.\n * Falls back to the default of 30 s.\n *\n * @returns Timeout in milliseconds\n */\nfunction _getFileDownloadTimeout(): number {\n if (_cachedFileDownloadTimeoutMs !== null) {\n return _cachedFileDownloadTimeoutMs;\n }\n\n const envVal = process.env.NETRA_SIMULATION_FILE_DOWNLOAD_TIMEOUT;\n if (envVal) {\n const parsed = parseFloat(envVal);\n if (!isNaN(parsed) && parsed > 0) {\n _cachedFileDownloadTimeoutMs = parsed * 1000;\n return _cachedFileDownloadTimeoutMs;\n }\n Logger.warn(\n `${LOG_PREFIX}: Invalid file download timeout '${envVal}', using default ${DEFAULT_FILE_DOWNLOAD_TIMEOUT_S}s`,\n );\n }\n _cachedFileDownloadTimeoutMs = DEFAULT_FILE_DOWNLOAD_TIMEOUT_S * 1000;\n return _cachedFileDownloadTimeoutMs;\n}\n\n/**\n * Download a single file from its pre-signed URL and base64-encode the content.\n *\n * @param fileData - Metadata with the download URL\n * @param timeoutMs - Request timeout in milliseconds\n * @param signal - AbortSignal to cancel the download if another file in the\n * batch fails\n * @returns ProcessedFile with base64-encoded data\n * @throws Error if the download fails, with contextual information about which\n * file failed and the HTTP status (if available)\n */\nasync function _downloadSingleFile(\n fileData: FileData,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<ProcessedFile> {\n try {\n const response = await axios.get(fileData.downloadUrl, {\n responseType: \"arraybuffer\",\n timeout: timeoutMs,\n signal,\n });\n\n const encoded = Buffer.from(response.data).toString(\"base64\");\n return {\n fileName: fileData.fileName,\n contentType: fileData.contentType,\n description: fileData.description,\n data: encoded,\n };\n } catch (error) {\n if (axios.isCancel(error)) {\n throw new Error(\n `Download of '${fileData.fileName}' was cancelled`,\n );\n }\n\n const status = axios.isAxiosError(error) ? error.response?.status : undefined;\n const reason = status\n ? `HTTP ${status}`\n : (error instanceof Error ? error.message : String(error));\n\n Logger.error(\n `${LOG_PREFIX}: Failed to download file '${fileData.fileName}': ${reason}`,\n );\n\n throw new Error(\n `Failed to download file '${fileData.fileName}': ${reason}`,\n );\n }\n}\n\n/**\n * Parse raw attachment entries from the backend into typed FileData objects.\n *\n * Entries missing a `fileName` or `downloadUrl` are skipped with a warning.\n *\n * @param rawFiles - Array of attachment objects from the API response\n * @returns Parsed FileData array (empty when input is null/undefined)\n */\nexport function parseFiles(\n rawFiles: Array<Record<string, string>> | null | undefined,\n): FileData[] {\n if (!rawFiles) {\n return [];\n }\n\n const parsed: FileData[] = [];\n for (const entry of rawFiles) {\n const fileName = entry.fileName || \"\";\n const downloadUrl = entry.downloadUrl || \"\";\n\n if (!fileName || !downloadUrl) {\n Logger.warn(\n `${LOG_PREFIX}: Skipping malformed file attachment (missing fileName or downloadUrl)`,\n );\n continue;\n }\n\n parsed.push({\n fileName,\n contentType: entry.contentType || \"\",\n description: entry.description || undefined,\n downloadUrl,\n });\n }\n\n return parsed;\n}\n\n/**\n * Download and base64-encode a batch of files concurrently.\n *\n * Uses up to {@link MAX_FILE_DOWNLOAD_WORKERS} parallel downloads. If any\n * single download fails, outstanding downloads are cancelled via\n * AbortController and the error propagates to the caller.\n *\n * @param files - Array of FileData objects to download\n * @returns Array of ProcessedFile objects with base64-encoded data, or null\n * when the input array is empty / undefined\n * @throws Error if any file download fails\n */\nexport async function processFiles(\n files: FileData[] | null | undefined,\n): Promise<ProcessedFile[] | null> {\n if (!files || files.length === 0) {\n return null;\n }\n\n const timeoutMs = _getFileDownloadTimeout();\n const limit: LimitFunction = pLimit(MAX_FILE_DOWNLOAD_WORKERS);\n const controller = new AbortController();\n\n const downloadPromises = files.map((file) =>\n limit(() => _downloadSingleFile(file, timeoutMs, controller.signal)),\n );\n\n try {\n return await Promise.all(downloadPromises);\n } catch (error) {\n controller.abort();\n limit.clearQueue();\n throw error;\n }\n}\n\n/**\n * Execute a task function (sync or async) and extract message and session_id.\n *\n * When `rawFiles` is provided, the files are downloaded and base64-encoded\n * before being passed to the task's `run` method.\n *\n * @param task - The task function to execute\n * @param message - The input message to pass to the task\n * @param sessionId - The current session identifier\n * @param rawFiles - Optional array of file metadata to download and forward\n * @returns A tuple of [response_message, session_id]\n * @throws Error if the task returns an unsupported type or file download fails\n */\nexport async function executeTask(\n task: BaseTask,\n message: string,\n sessionId: string | null,\n rawFiles?: FileData[] | null,\n): Promise<[string, string | null]> {\n const processedFiles = rawFiles && rawFiles.length > 0\n ? await processFiles(rawFiles)\n : null;\n\n const result = task.run(message, sessionId, processedFiles);\n\n const resolvedResult = result instanceof Promise ? await result : result;\n\n if (\n typeof resolvedResult === \"object\" &&\n resolvedResult !== null &&\n \"message\" in resolvedResult &&\n \"sessionId\" in resolvedResult\n ) {\n return [resolvedResult.message, resolvedResult.sessionId];\n }\n\n throw new Error(\n `Task must return TaskResult, got ${typeof resolvedResult}`,\n );\n}\n","import axios, { AxiosInstance, AxiosResponse, AxiosError } from \"axios\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { injectTraceContextHeaders } from \"../utils/context-propagation\";\nimport { ConversationResponse, SimulationItem } from \"./models\";\nimport { parseFiles } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst DEFAULT_TIMEOUT = 10000; // 10 seconds in milliseconds\n\n/**\n * Result from creating a simulation run.\n */\nexport interface CreateRunResult {\n runId: string;\n simulationItems: SimulationItem[];\n}\n\n/**\n * Internal HTTP client for simulation API endpoints.\n */\nexport class SimulationHttpClient {\n private client: AxiosInstance | null = null;\n\n constructor(config: Config) {\n this.client = this._createClient(config);\n }\n\n /**\n * Create and configure the HTTP client.\n */\n private _createClient(config: Config): AxiosInstance | null {\n const endpoint = (config.otlpEndpoint || \"\").trim();\n if (!endpoint) {\n Logger.error(`${LOG_PREFIX}: NETRA_OTLP_ENDPOINT is required`);\n return null;\n }\n\n const baseURL = this._resolveBaseUrl(endpoint);\n const headers = this._buildHeaders(config);\n const timeout = this._getTimeout();\n\n try {\n const instance = axios.create({\n baseURL,\n headers,\n timeout,\n });\n\n // Inject W3C trace context (traceparent/tracestate) into every\n // outgoing request so the Netra backend can join the active trace.\n instance.interceptors.request.use(\n (config) => {\n const traceHeaders = injectTraceContextHeaders({});\n Object.assign(config.headers, traceHeaders);\n return config;\n },\n (error) => Promise.reject(error),\n );\n\n return instance;\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Failed to create HTTP client:`, error);\n return null;\n }\n }\n\n /**\n * Extract base URL, removing telemetry suffix if present.\n */\n private _resolveBaseUrl(endpoint: string): string {\n let baseUrl = endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint;\n if (baseUrl.endsWith(\"/telemetry\")) {\n baseUrl = baseUrl.slice(0, -\"/telemetry\".length);\n }\n return baseUrl;\n }\n\n /**\n * Build request headers from configuration.\n */\n private _buildHeaders(config: Config): Record<string, string> {\n const headers: Record<string, string> = { ...config.headers };\n if (config.apiKey) {\n headers[\"x-api-key\"] = config.apiKey;\n }\n return headers;\n }\n\n /**\n * Get timeout from environment or use default.\n */\n private _getTimeout(): number {\n const timeoutStr = process.env.NETRA_SIMULATION_TIMEOUT;\n if (!timeoutStr) {\n return DEFAULT_TIMEOUT;\n }\n\n const timeout = parseFloat(timeoutStr);\n if (isNaN(timeout)) {\n Logger.warn(\n `${LOG_PREFIX}: Invalid timeout '${timeoutStr}', using default ${DEFAULT_TIMEOUT}ms`,\n );\n return DEFAULT_TIMEOUT;\n }\n\n return timeout * 1000; // Convert seconds to milliseconds\n }\n\n /**\n * Create a new simulation run for the specified dataset.\n */\n async createRun(\n name: string,\n datasetId: string,\n context?: Record<string, any>,\n ): Promise<CreateRunResult | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/test_run/multi-turn\";\n const payload = {\n name,\n datasetId,\n context: context || {},\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const userMessages = responseData.userMessages || [];\n\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages returned from create_run`);\n return null;\n }\n\n const runId = responseData.id || \"\";\n const simulationItems: SimulationItem[] = userMessages.map(\n (msg: any) => ({\n runItemId: msg.testRunItemId || \"\",\n message: msg.userMessage || \"\",\n turnId: msg.turnId || \"\",\n files: parseFiles(msg.attachments),\n }),\n );\n\n return {\n runId,\n simulationItems,\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to create simulation run:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Send a conversation turn to the backend and get the next response.\n */\n async triggerConversation(\n message: string,\n turnId: string,\n sessionId: string,\n traceId: string,\n ): Promise<ConversationResponse | null> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return null;\n }\n\n try {\n const url = \"/evaluations/turn/agent-response\";\n const payload = {\n turnId,\n agentResponse: { message },\n sessionId,\n traceId,\n };\n\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n const responseData = data.data || {};\n const decision = responseData.decision || \"continue\";\n\n if (decision === \"stop\") {\n return {\n decision,\n reason: responseData.reason || \"\",\n };\n }\n\n const userMessages = responseData.userMessages || [];\n if (userMessages.length === 0) {\n Logger.warn(`${LOG_PREFIX}: No user messages in continue response`);\n return null;\n }\n\n const nextMsg = userMessages[0];\n return {\n decision,\n nextTurnId: nextMsg.turnId || \"\",\n nextUserMessage: nextMsg.userMessage || \"\",\n nextRunItemId: nextMsg.testRunItemId || \"\",\n nextFiles: parseFiles(nextMsg.attachments),\n };\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(`${LOG_PREFIX}: Failed to trigger conversation:`, errorMsg);\n return null;\n }\n }\n\n /**\n * Report a task execution failure to the backend.\n */\n async reportFailure(runId: string, runItemId: string, error: string): Promise<void> {\n if (!this.client) {\n Logger.error(`${LOG_PREFIX}: Client not initialized`);\n return;\n }\n\n try {\n const url = `/evaluations/run/${runId}/item/${runItemId}/status`;\n const payload = { status: \"failed\", failureReason: error };\n await this.client.patch(url, payload);\n Logger.info(`${LOG_PREFIX}: Reported failure - ${error}`);\n } catch (err) {\n const errorMsg = this._extractErrorMessage(err);\n Logger.error(`${LOG_PREFIX}: Failed to report failure:`, errorMsg);\n }\n }\n\n /**\n * Submit the run status.\n */\n async postRunStatus(runId: string, status: string): Promise<any> {\n if (!this.client) {\n Logger.error(\n `${LOG_PREFIX}: Client not initialized; cannot post run status`,\n );\n return { success: false };\n }\n\n try {\n const url = `/evaluations/run/${runId}/status`;\n const payload = { status };\n const response: AxiosResponse = await this.client.post(url, payload);\n const data = response.data;\n\n if (data && typeof data === \"object\" && \"data\" in data) {\n Logger.info(`${LOG_PREFIX}: Completed test run successfully`);\n return data.data || {};\n }\n return data;\n } catch (error) {\n const errorMsg = this._extractErrorMessage(error);\n Logger.error(\n `${LOG_PREFIX}: Failed to post run status for run '${runId}':`,\n errorMsg,\n );\n return { success: false };\n }\n }\n\n /**\n * Extract error message from response or exception.\n */\n private _extractErrorMessage(error: any): string {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError;\n if (axiosError.response?.data) {\n const responseData = axiosError.response.data as any;\n if (\n typeof responseData === \"object\" &&\n responseData.error &&\n typeof responseData.error === \"object\"\n ) {\n return responseData.error.message || error.message;\n }\n }\n return axiosError.message;\n }\n return error?.message || String(error);\n }\n}\n","/**\n * Public API for running multi-turn conversation simulations.\n */\n\nimport pLimit from \"p-limit\";\nimport { Config } from \"../config\";\nimport { Logger } from \"../logger\";\nimport { SpanWrapper } from \"../span-wrapper\";\nimport { SimulationHttpClient } from \"./client\";\nimport {\n ConversationResult,\n FileData,\n SimulationItem,\n SimulationResult,\n} from \"./models\";\nimport { BaseTask } from \"./task\";\nimport { executeTask, validateSimulationInputs } from \"./utils\";\n\nconst LOG_PREFIX = \"netra.simulation\";\nconst SPAN_NAME = \"Netra.Simulation.TestRun\";\n\n\nexport interface SimulationOptions {\n name: string;\n datasetId: string;\n task: BaseTask;\n context?: Record<string, any>;\n maxConcurrency?: number; // default: 5\n}\n\n/**\n * Public API for running multi-turn conversation simulations.\n */\nexport class Simulation {\n private _config: Config;\n private _client: SimulationHttpClient;\n\n constructor(config: Config) {\n this._config = config;\n this._client = new SimulationHttpClient(config);\n }\n\n /**\n * Run a multi-turn conversation simulation.\n *\n * @param options - Simulation configuration options\n * @returns Dictionary with simulation results, or null on failure\n */\n async runSimulation(\n options: SimulationOptions,\n ): Promise<SimulationResult | null> {\n const {\n name,\n datasetId,\n task,\n context,\n maxConcurrency = 5,\n } = options;\n\n if (!validateSimulationInputs(datasetId, task)) {\n return null;\n }\n\n const startTime = Date.now();\n const runResult = await this._client.createRun(name, datasetId, context);\n if (!runResult) {\n return null;\n }\n\n const { runId, simulationItems } = runResult;\n if (!simulationItems || simulationItems.length === 0) {\n Logger.error(`${LOG_PREFIX}: No items returned from create_run`);\n return null;\n }\n\n let interrupted = false;\n const proc = typeof process !== \"undefined\" ? process : undefined;\n const finalizeFailure = (signal?: NodeJS.Signals) => {\n if (interrupted) {\n return;\n }\n interrupted = true;\n proc?.removeListener(\"SIGINT\", handleSignal);\n proc?.removeListener(\"SIGTERM\", handleSignal);\n proc?.removeListener(\"uncaughtException\", handleException);\n proc?.removeListener(\"unhandledRejection\", handleRejection);\n void this._client.postRunStatus(runId, \"failed\").finally(() => {\n if (signal) {\n proc?.kill(proc.pid, signal);\n }\n });\n };\n const handleSignal = (signal: \"SIGINT\" | \"SIGTERM\") => {\n finalizeFailure(signal);\n };\n const handleException = () => {\n finalizeFailure();\n };\n const handleRejection = () => {\n finalizeFailure();\n };\n if (proc && typeof proc.once === \"function\") {\n proc.once(\"SIGINT\", handleSignal);\n proc.once(\"SIGTERM\", handleSignal);\n proc.once(\"uncaughtException\", handleException);\n proc.once(\"unhandledRejection\", handleRejection);\n }\n\n Logger.info(\n `${LOG_PREFIX}: Starting simulation with ${simulationItems.length} items`,\n );\n\n try {\n const result = await this._runSimulationAsync(\n runId,\n simulationItems,\n task,\n maxConcurrency,\n );\n\n const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(2);\n Logger.info(\n `${LOG_PREFIX}: Simulation completed in ${elapsedTime} seconds`,\n );\n\n return result;\n } catch (error) {\n Logger.error(`${LOG_PREFIX}: Run simulation failed`);\n await this._client.postRunStatus(runId, \"failed\");\n throw error;\n } finally {\n if (proc && typeof proc.removeListener === \"function\") {\n proc.removeListener(\"SIGINT\", handleSignal);\n proc.removeListener(\"SIGTERM\", handleSignal);\n proc.removeListener(\"uncaughtException\", handleException);\n proc.removeListener(\"unhandledRejection\", handleRejection);\n }\n }\n }\n\n /**\n * Async implementation of run_simulation with concurrency control.\n */\n private async _runSimulationAsync(\n runId: string,\n runItems: SimulationItem[],\n task: BaseTask,\n maxConcurrency: number,\n ): Promise<SimulationResult> {\n const results: SimulationResult = {\n success: true,\n completed: [],\n failed: [],\n totalItems: runItems.length,\n };\n\n let processedCount = 0;\n\n // Create concurrency limiter\n const limit = pLimit(Math.min(5, maxConcurrency));\n\n // Process items with concurrency control\n const promises = runItems.map((runItem) =>\n limit(async () => {\n const result = await this._executeConversation(runId, runItem, task);\n\n if (result.success) {\n results.completed.push(result);\n } else {\n results.failed.push(result);\n }\n\n processedCount++;\n Logger.info(\n `${LOG_PREFIX}: ${processedCount}/${runItems.length} processed (run_item_id=${runItem.runItemId})`,\n );\n\n return result;\n }),\n );\n\n await Promise.all(promises);\n\n Logger.info(\n `${LOG_PREFIX}: Completed=${results.completed.length}, Failed=${results.failed.length}`,\n );\n\n await this._client.postRunStatus(runId, \"completed\");\n\n return results;\n }\n\n /**\n * Execute a multi-turn conversation for a single simulation item.\n */\n private async _executeConversation(\n runId: string,\n runItem: SimulationItem,\n task: BaseTask,\n ): Promise<ConversationResult> {\n const { runItemId, message: initialMessage, turnId: initialTurnId, files: initialFiles } = runItem;\n let message = initialMessage;\n let turnId = initialTurnId;\n let sessionId: string | null = null;\n let rawFiles: FileData[] = initialFiles ?? [];\n\n while (true) {\n const span = new SpanWrapper(SPAN_NAME, {}, LOG_PREFIX);\n span.start();\n\n try {\n const traceId = span.getCurrentSpan()?.spanContext().traceId ?? \"\";\n\n const [responseMessage, taskSessionId] = await span.withActive(\n () => executeTask(task, message, sessionId, rawFiles),\n );\n\n if (taskSessionId) {\n sessionId = taskSessionId;\n }\n\n // Trigger conversation inside the same active context so the\n // axios interceptor injects the correct traceparent header.\n const response = await span.withActive(() =>\n this._client.triggerConversation(\n responseMessage,\n turnId,\n sessionId || \"\",\n traceId,\n ),\n );\n\n if (response === null) {\n const errorMsg = \"Failed to get conversation response\";\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n }\n\n if (response.decision === \"stop\") {\n Logger.info(\n `${LOG_PREFIX}: Completed run_item_id=${runItemId} reason=${response.reason}`,\n );\n return {\n runItemId,\n success: true,\n finalTurnId: turnId,\n };\n }\n\n message = response.nextUserMessage!;\n turnId = response.nextTurnId!;\n rawFiles = response.nextFiles || [];\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n Logger.error(\n `${LOG_PREFIX}: Task failed run_item_id=${runItemId}, turn_id=${turnId}: ${errorMsg}`,\n );\n await this._client.reportFailure(runId, runItemId, errorMsg);\n return {\n runItemId,\n success: false,\n error: errorMsg,\n turnId,\n };\n } finally {\n span.end();\n }\n }\n }\n}\n","import { trace, Tracer as OtelTracer } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\n\nexport class Tracer {\n readonly tracer: OtelTracer;\n\n constructor(cfg: Config, effectiveProvider?: any) {\n if (effectiveProvider && typeof effectiveProvider.getTracer === \"function\") {\n this.tracer = effectiveProvider.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n } else {\n this.tracer = trace.getTracer(Config.LIBRARY_NAME, Config.LIBRARY_VERSION);\n }\n }\n}\n","/**\n * Decorators for easy instrumentation\n */\n\nimport { context, trace, Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { Config } from \"./config\";\nimport { Logger } from \"./logger\";\nimport { SessionManager } from \"./session-manager\";\nimport { SpanType, DecoratorOptions } from \"./types\";\nimport { wrapResponse } from \"./utils/response-handler\";\nimport { safeStringify, serializeValue } from \"./utils/serialization\";\n\ntype AnyFunction = (...args: any[]) => any;\ntype AsyncFunction = (...args: any[]) => Promise<any>;\ntype AnyClass = new (...args: any[]) => any;\ntype ClassDecoratorFn = (target: AnyClass) => void;\ntype MethodDecoratorFn = (\n target: any,\n key: string | symbol,\n descriptor: PropertyDescriptor,\n) => void;\ntype UnifiedDecorator = ClassDecoratorFn & MethodDecoratorFn;\n\n/**\n * Returns true if the span already has a non-empty `output` attribute.\n * Checks both the public `attributes` property and the internal `_attributes`\n * store to handle SDK implementations that buffer attributes before export.\n */\nfunction spanHasOutput(span: Span): boolean {\n try {\n for (const field of [\"attributes\", \"_attributes\"]) {\n const attrs = (span as any)[field];\n if (attrs && typeof attrs === \"object\" && attrs[\"output\"]) return true;\n }\n } catch (e) {\n Logger.warn(\"spanHasOutput: error inspecting span attributes:\", e);\n }\n return false;\n}\n\nfunction addInputAttributes(span: Span, args: any[], entityType: string): void {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.type`, entityType);\n if (args.length > 0) {\n span.setAttribute(\"input\", safeStringify(args, Config.ATTRIBUTE_MAX_LEN));\n }\n}\n\nfunction addOutputAttributes(span: Span, result: any): void {\n // Skip if the user already set output explicitly inside the decorated function\n if (spanHasOutput(span)) return;\n try {\n span.setAttribute(\"output\", serializeValue(result, Config.ATTRIBUTE_MAX_LEN));\n } catch (e) {\n span.setAttribute(\"output_error\", String(e));\n }\n}\n\nfunction isClassConstructor(value: unknown): value is AnyClass {\n if (typeof value !== \"function\") {\n return false;\n }\n\n const prototype = value.prototype;\n return (\n prototype != null &&\n typeof prototype === \"object\" &&\n prototype.constructor === value\n );\n}\n\nfunction createFunctionWrapper<T extends AnyFunction>(\n func: T,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): T {\n const moduleName = func.name || \"unknown\";\n const spanName = name || func.name || \"anonymous\";\n const isAsync = func.constructor.name === \"AsyncFunction\";\n\n const initSpan = (span: Span): void => {\n span.setAttribute(\"netra.span.type\", asType);\n SessionManager.registerSpan(spanName, span);\n };\n\n const recordError = (span: Span, e: any) => {\n span.setAttribute(`${Config.LIBRARY_NAME}.entity.error`, String(e));\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e instanceof Error ? e.message : String(e),\n });\n span.recordException(e);\n };\n\n const cleanup = (span: Span) => {\n span.end();\n SessionManager.unregisterSpan(spanName, span);\n SessionManager.popEntity(entityType);\n };\n\n const wrapperFn = isAsync\n ? async function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, async (span) => {\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = await (func as AsyncFunction).call(this, ...args);\n const spanCtx = trace.setSpan(context.active(), span);\n return wrapResponse(result, {\n withContext: (fn) => context.with(spanCtx, fn),\n onError: (e) => recordError(span, e),\n onSuccess: (value) => addOutputAttributes(span, value),\n finalize: () => cleanup(span),\n });\n } catch (e: any) {\n recordError(span, e);\n cleanup(span);\n throw e;\n }\n });\n }\n : function (this: any, ...args: any[]) {\n SessionManager.pushEntity(entityType, spanName);\n const tracer = trace.getTracer(moduleName);\n return tracer.startActiveSpan(spanName, (span) => {\n try {\n initSpan(span);\n addInputAttributes(span, args, entityType);\n const result = (func as AnyFunction).call(this, ...args);\n const spanCtx = trace.setSpan(context.active(), span);\n return wrapResponse(result, {\n withContext: (fn) => context.with(spanCtx, fn),\n onError: (e) => recordError(span, e),\n onSuccess: (value) => addOutputAttributes(span, value),\n finalize: () => cleanup(span),\n });\n } catch (e: any) {\n recordError(span, e);\n cleanup(span);\n throw e;\n }\n });\n };\n return wrapperFn as T;\n}\n\nconst SKIP_STATIC_PROPS = new Set([\n \"length\",\n \"name\",\n \"prototype\",\n \"arguments\",\n \"caller\",\n]);\n\nfunction createClassWrapper(\n cls: AnyClass,\n entityType: string,\n name?: string,\n asType: SpanType = SpanType.SPAN,\n): void {\n const className = name ?? cls.name;\n\n for (const methodName of Object.getOwnPropertyNames(cls.prototype)) {\n if (methodName === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(cls.prototype, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n cls.prototype[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n\n for (const methodName of Object.getOwnPropertyNames(cls)) {\n if (SKIP_STATIC_PROPS.has(methodName)) continue;\n const desc = Object.getOwnPropertyDescriptor(cls, methodName);\n if (!desc || typeof desc.value !== \"function\") continue;\n (cls as any)[methodName] = createFunctionWrapper(\n desc.value,\n entityType,\n `${className}.${methodName}`,\n asType,\n );\n }\n}\n\nfunction decoratorFactory(\n entityType: string,\n spanType: SpanType,\n targetOrOptions?: AnyFunction | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): AnyFunction | AnyClass | UnifiedDecorator {\n if (isClassConstructor(targetOrOptions)) {\n createClassWrapper(targetOrOptions, entityType, options?.name, spanType);\n return targetOrOptions;\n }\n\n if (typeof targetOrOptions === \"function\") {\n return createFunctionWrapper(\n targetOrOptions,\n entityType,\n options?.name,\n spanType,\n );\n }\n\n const opts = targetOrOptions as DecoratorOptions | undefined;\n return function (\n target: AnyFunction | AnyClass,\n _key?: string | symbol,\n descriptor?: PropertyDescriptor,\n ): void {\n if (descriptor) {\n // Mutate descriptor in place — returning void is valid for method decorators\n descriptor.value = createFunctionWrapper(\n descriptor.value,\n entityType,\n opts?.name,\n spanType,\n );\n return;\n } else if (isClassConstructor(target)) {\n createClassWrapper(target, entityType, opts?.name, spanType);\n return;\n }\n } as UnifiedDecorator;\n}\n\nexport function workflow(target: AnyClass): void;\nexport function workflow<T extends AnyFunction>(target: T): T;\nexport function workflow(options?: DecoratorOptions): UnifiedDecorator;\nexport function workflow<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\n \"workflow\",\n SpanType.SPAN,\n targetOrOptions,\n options,\n ) as T | void | UnifiedDecorator;\n}\n\nexport function agent(target: AnyClass): void;\nexport function agent<T extends AnyFunction>(target: T): T;\nexport function agent(options?: DecoratorOptions): UnifiedDecorator;\nexport function agent<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"agent\", SpanType.AGENT, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function task(target: AnyClass): void;\nexport function task<T extends AnyFunction>(target: T): T;\nexport function task(options?: DecoratorOptions): UnifiedDecorator;\nexport function task<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n return decoratorFactory(\"task\", SpanType.TOOL, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n\nexport function span(target: AnyClass): void;\nexport function span<T extends AnyFunction>(target: T): T;\nexport function span(options?: DecoratorOptions): UnifiedDecorator;\nexport function span<T extends AnyFunction>(\n targetOrOptions?: T | AnyClass | DecoratorOptions,\n options?: DecoratorOptions,\n): T | void | UnifiedDecorator {\n const spanType =\n (typeof targetOrOptions !== \"function\"\n ? (targetOrOptions as DecoratorOptions)?.asType\n : options?.asType) ?? SpanType.SPAN;\n return decoratorFactory(\"span\", spanType, targetOrOptions, options) as\n | T\n | void\n | UnifiedDecorator;\n}\n","/**\n * Netra SDK - Main entry point\n * A comprehensive TypeScript/JavaScript SDK for AI application observability\n * Built on top of OpenTelemetry and Traceloop\n */\n\nimport { context, Span, SpanKind, trace } from \"@opentelemetry/api\";\nimport { createRequire } from \"module\";\nimport { Prompts, Dashboard, Evaluation, Usage } from \"./api\";\nimport { Config, NetraConfig } from \"./config\";\nimport { initInstrumentations, instrumentationsReady, uninstrumentAll } from \"./instrumentation\";\nimport { Logger } from \"./logger\";\nimport { setSessionBaggage, withBlockedSpansLocal } from \"./processors\";\nimport { ConversationType, SessionManager } from \"./session-manager\";\nimport { Simulation } from \"./simulation\";\nimport { SpanWrapper } from \"./span-wrapper\";\nimport { Tracer } from \"./tracer\";\nimport { SpanType, SpanCallback, SpanOptions, SpanAttributes } from \"./types\";\nimport { wrapResponse } from \"./utils/response-handler\";\n\nexport {\n Config,\n DEFAULT_INSTRUMENTS,\n DEFAULT_INSTRUMENTS_FOR_ROOT,\n NetraInstruments,\n} from \"./config\";\nexport { agent, span, task, workflow } from \"./decorators\";\nexport {\n AttributeSizeLimitProcessor,\n InstrumentationSpanProcessor,\n ScrubbingSpanProcessor,\n SessionSpanProcessor,\n SpanIOProcessor,\n} from \"./processors\";\nexport { ConversationType } from \"./session-manager\";\nexport { SpanType } from \"./types\";\nexport type { ActionModel, UsageModel, SpanOptions } from \"./types\";\n// Expose provider instrumentors for advanced usage/testing\nexport { mistralAIInstrumentor } from \"./instrumentation/mistralai\";\nexport {\n NetraOpenAIAgentsInstrumentor,\n openaiAgentsInstrumentor,\n NetraAgentsTracingProcessor,\n} from \"./instrumentation/openai-agents\";\n\n// Export API types and classes\nexport {\n Aggregation,\n ChartType,\n // Dashboard API\n Dashboard,\n DimensionField,\n EntryStatus,\n // Evaluation API\n Evaluation,\n FilterField,\n FilterType,\n GroupBy,\n Measure,\n metadataField,\n Operator,\n RunEntryContext,\n RunStatus,\n Scope,\n // Usage API\n Usage,\n // Prompts API\n Prompts,\n} from \"./api\";\n\nexport type {\n // Dashboard API\n CategoricalDataPoint,\n // Evaluation API\n CreateDatasetParams,\n DashboardData,\n Dataset,\n DatasetEntry,\n DatasetItem,\n Dimension,\n DimensionValue,\n EvaluationScore,\n EvaluatorFunction,\n Filter,\n FilterConfig,\n // Usage API\n ListSpansParams,\n ListTracesParams,\n Metrics,\n NumberResponse,\n QueryDataParams,\n QueryResponse,\n Run,\n SessionUsageData,\n SpansPage,\n TaskFunction,\n TenantUsageData,\n TestSuiteResult,\n TimeRange,\n TimeSeriesDataPoint,\n TimeSeriesResponse,\n TimeSeriesWithDimension,\n TracesPage,\n TraceSpan,\n TraceSummary,\n GetPromptParams,\n PromptResponse,\n} from \"./api\";\n\n// Export simulation types and classes\nexport { BaseTask, Simulation } from \"./simulation\";\nexport type {\n ConversationResponse,\n ConversationResult,\n CreateRunResult,\n ProcessedFile,\n SimulationItem,\n SimulationOptions,\n SimulationResult,\n TaskResult,\n} from \"./simulation\";\nexport * from \"./exporters\";\n\n// Context propagation helpers for distributed tracing\nexport {\n netraExpressMiddleware,\n runWithExtractedContext,\n} from \"./utils/context-propagation\";\n\nexport class Netra {\n private static _SDK_NAME = \"netra_sdk\";\n\n private static _initialized = false;\n private static _config: Config | undefined;\n private static _tracer: any;\n private static _rootSpan: Span | undefined;\n private static _metricsEnabled = false;\n\n static usage: Usage;\n static evaluation: Evaluation;\n static dashboard: Dashboard;\n static simulation: Simulation;\n static prompts: Prompts;\n\n static getConfig(): Config {\n if (!this._config) {\n throw new Error(\"Netra SDK not initialized. Call Netra.init() first.\");\n }\n return this._config;\n }\n\n static isInitialized(): boolean {\n return this._initialized;\n }\n\n static async init(config: NetraConfig = {}): Promise<void> {\n if (this._initialized) {\n Logger.warn(\"Netra.init() called more than once; ignoring subsequent calls.\");\n return;\n }\n\n const cfg = new Config(config);\n this._config = cfg;\n\n // Wire the logger before anything else so all modules respect debugMode.\n Logger.setDebugMode(cfg.debugMode);\n\n // Initialize instrumentations and get effective provider\n const effectiveProvider = initInstrumentations(\n cfg,\n config.instruments,\n config.blockInstruments,\n config.rootInstruments,\n );\n\n // Create the tracer\n const tracer = new Tracer(cfg, effectiveProvider);\n this._tracer = tracer.tracer;\n\n try {\n this.usage = new Usage(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize usage client:\", e);\n }\n\n try {\n this.evaluation = new Evaluation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize evaluation client:\", e);\n }\n\n try {\n this.dashboard = new Dashboard(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize dashboard client:\", e);\n }\n\n try {\n this.simulation = new Simulation(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize simulation client:\", e);\n }\n\n try {\n this.prompts = new Prompts(cfg);\n } catch (e) {\n Logger.warn(\"Netra: failed to initialize prompts client:\", e);\n }\n\n this._initialized = true;\n Logger.info(\"Netra successfully initialized.\");\n\n {\n let pkgVersion = Config.LIBRARY_VERSION;\n let pkgPath = \"unknown\";\n try {\n const req = createRequire(import.meta.url);\n pkgPath = req.resolve(\"../package.json\");\n const pkg = req(\"../package.json\");\n pkgVersion = pkg?.version || pkgVersion;\n } catch {\n // keep defaults\n }\n Logger.debug(\n `SDK version=${pkgVersion} libraryVersion=${Config.LIBRARY_VERSION} build=langgraph-parenting-v3 packageJson=${pkgPath}`,\n );\n }\n\n // Graceful shutdown logic\n const handleSignal = async (signal: string) => {\n Logger.log(`\\nReceived ${signal}. Shutting down Netra SDK...`);\n await this.shutdown();\n process.exit(0);\n };\n\n const handleUncaughtException = async (error: Error) => {\n Logger.error(\"Uncaught exception:\", error);\n Logger.error(\"Shutting down Netra SDK due to crash...\");\n try {\n await this.shutdown();\n } catch (err) {\n Logger.error(\"Error during crash shutdown:\", err);\n }\n process.exit(1);\n };\n\n // Handle process running out of work\n process.once(\"beforeExit\", async () => {\n // beforeExit can be called multiple times if the loop fills up again\n // but for our purpose, we just want to ensure flush happens if the script finishes\n await this.shutdown();\n });\n\n // Handle termination signals\n process.once(\"SIGINT\", () => handleSignal(\"SIGINT\"));\n process.once(\"SIGTERM\", () => handleSignal(\"SIGTERM\"));\n\n // Handle crashes\n process.once(\"uncaughtException\", handleUncaughtException);\n\n // Create root span if enabled\n if (cfg.enableRootSpan) {\n // Use the effective tracer if available\n const tracer = this._tracer || trace.getTracer(\"netra.root.span\");\n const rootName = `${Config.LIBRARY_NAME}.root.span`;\n\n // Create the root span\n this._rootSpan = tracer.startSpan(rootName, {\n kind: SpanKind.INTERNAL,\n });\n\n if (this._rootSpan) {\n if (cfg.appName) {\n this._rootSpan.setAttribute(\"service.name\", cfg.appName);\n }\n this._rootSpan.setAttribute(\"netra.environment\", cfg.environment);\n this._rootSpan.setAttribute(\n \"netra.library.version\",\n Config.LIBRARY_VERSION,\n );\n\n Logger.info(\n \"Netra root span created. Use Netra.runWithRootSpan() to parent spans under it.\",\n );\n }\n }\n\n // Wait for all async instrumentations to be ready\n await instrumentationsReady;\n }\n\n static async shutdown(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n\n // Unpatch any monkey-patched instrumentations first\n try {\n await uninstrumentAll();\n } catch (e) {\n Logger.error(\"Error during uninstrumentAll:\", e);\n }\n\n if (this._rootSpan) {\n try {\n this._rootSpan.end();\n } catch (e) {\n } finally {\n this._rootSpan = undefined;\n }\n }\n\n const FLUSH_TIMEOUT_MS = 5000;\n\n try {\n const traceProvider = trace.getTracerProvider();\n const flushPromise = (async () => {\n if (\n \"forceFlush\" in traceProvider &&\n typeof traceProvider.forceFlush === \"function\"\n ) {\n await traceProvider.forceFlush();\n }\n if (\n \"shutdown\" in traceProvider &&\n typeof traceProvider.shutdown === \"function\"\n ) {\n await traceProvider.shutdown();\n }\n })();\n\n await Promise.race([\n flushPromise,\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n } catch (e) {\n Logger.error(\"Error during Netra trace shutdown:\", e);\n }\n\n this._initialized = false;\n this._tracer = undefined;\n }\n\n static getTraceId(): string | undefined {\n return SessionManager.getTraceId();\n }\n\n static setInput(value: any): void {\n SessionManager.setInput(value);\n }\n\n static setOutput(value: any): void {\n SessionManager.setOutput(value);\n }\n\n static setRootInput(value: any): void {\n SessionManager.setRootInput(value);\n }\n\n static setRootOutput(value: any): void {\n SessionManager.setRootOutput(value);\n }\n\n /**\n * Run a function with the root span as the active parent context.\n * All spans created within this function will be children of the root span.\n * Note: required in JS because OTel JS has no persistent context.attach()\n */\n static runWithRootSpan<T>(fn: () => T): T {\n if (!this._rootSpan) {\n Logger.warn(\n \"runWithRootSpan: No root span available. Running function without parent context.\",\n );\n return fn();\n }\n return context.with(trace.setSpan(context.active(), this._rootSpan), fn);\n }\n\n static setSessionId(sessionId: string): void {\n if (typeof sessionId !== \"string\") {\n Logger.error(`setSessionId: sessionId must be a string, got ${typeof sessionId}`);\n return;\n }\n if (sessionId) {\n setSessionBaggage(\"session_id\", sessionId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.session_id`,\n sessionId,\n );\n } else {\n Logger.warn(\"setSessionId: Session ID must be provided for setting session_id.\");\n }\n }\n\n /**\n * Set user_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setUserId(userId: string): void {\n if (typeof userId !== \"string\") {\n Logger.error(`setUserId: userId must be a string, got ${typeof userId}`);\n return;\n }\n if (userId) {\n setSessionBaggage(\"user_id\", userId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.user_id`,\n userId,\n );\n } else {\n Logger.warn(\"setUserId: User ID must be provided for setting user_id.\");\n }\n }\n\n /**\n * Set tenant_id context attributes for all spans.\n * Uses OpenTelemetry baggage API for automatic context propagation.\n */\n static setTenantId(tenantId: string): void {\n if (typeof tenantId !== \"string\") {\n Logger.error(`setTenantId: tenantId must be a string, got ${typeof tenantId}`);\n return;\n }\n if (tenantId) {\n setSessionBaggage(\"tenant_id\", tenantId);\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.tenant_id`,\n tenantId,\n );\n } else {\n Logger.warn(\"setTenantId: Tenant ID must be provided for setting tenant_id.\");\n }\n }\n\n /**\n * Set a custom attribute on the current active span\n */\n static setCustomAttributes(key: string, value: any): void {\n if (key && value !== undefined && value !== null) {\n SessionManager.setAttributeOnActiveSpan(\n `${Config.LIBRARY_NAME}.custom.${key}`,\n value,\n );\n } else {\n Logger.warn(\"Both key and value must be provided for custom attributes.\");\n }\n }\n\n /**\n * Set custom event in the current active span\n */\n static setCustomEvent(\n eventName: string,\n attributes: Record<string, any>,\n ): void {\n if (eventName && attributes) {\n SessionManager.setCustomEvent(eventName, attributes);\n } else {\n Logger.warn(\"Both eventName and attributes must be provided for custom events.\");\n }\n }\n\n /**\n * Append a conversation entry to the current active span\n */\n static addConversation(\n conversationType: ConversationType,\n role: string,\n content: string | Record<string, any>,\n ): void {\n SessionManager.addConversation(conversationType, role, content);\n }\n\n static startSpan(name: string): SpanWrapper;\n static startSpan(name: string, options: SpanOptions): SpanWrapper;\n static startSpan(name: string, options?: SpanOptions): SpanWrapper {\n const attributes = options?.attributes ?? {};\n const moduleName = options?.moduleName ?? this._SDK_NAME;\n const spanType = options?.asType ?? SpanType.SPAN;\n\n return new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n options?.blockedSpans,\n ).start();\n }\n\n static startActiveSpan<T>(name: string, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(name: string, options: SpanOptions, fn: SpanCallback<T>): T;\n static startActiveSpan<T>(\n name: string,\n optionsOrFn: SpanOptions | SpanCallback<T>,\n fn?: SpanCallback<T>,\n ): T {\n let attributes: SpanAttributes = {};\n let moduleName = this._SDK_NAME;\n let spanType: SpanType = SpanType.SPAN;\n let callback: SpanCallback<T>;\n\n if (typeof optionsOrFn === \"function\") {\n callback = optionsOrFn;\n } else {\n attributes = optionsOrFn.attributes ?? {};\n moduleName = optionsOrFn.moduleName ?? this._SDK_NAME;\n spanType = optionsOrFn.asType ?? SpanType.SPAN;\n callback = fn!;\n }\n\n const blockedSpans = typeof optionsOrFn === \"function\"\n ? undefined\n : optionsOrFn.blockedSpans;\n\n const spanWrapper = new SpanWrapper(\n name,\n attributes,\n moduleName,\n spanType,\n this._tracer,\n blockedSpans,\n ).start();\n\n return spanWrapper.withActive(() => {\n let result: T;\n try {\n result = callback(spanWrapper);\n } catch (e) {\n spanWrapper.setError(e instanceof Error ? e.message : String(e));\n spanWrapper.end();\n throw e;\n }\n\n return wrapResponse(result, {\n withContext: (fn) => spanWrapper.withActive(fn),\n onError: (e) =>\n spanWrapper.setError(e instanceof Error ? e.message : String(e)),\n finalize: () => spanWrapper.end(),\n }) as T;\n });\n }\n\n static withBlockedSpansLocal = withBlockedSpansLocal;\n}\n\nexport default Netra;\n"]}