Files
klz-cables.com/.pnpm-store/v10/files/54/a692aceb02c5d43b034b1e06077567807ac9d7dcbfb0b7e2d92f1a671c6b85fe7d3c76f516289fe51c057b9916d78c426cd736916b7c88fb29a900666be3a1
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

1 line
20 KiB
Plaintext

{"version":3,"file":"streaming.js","sources":["../../../../src/tracing/anthropic-ai/streaming.ts"],"sourcesContent":["import { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types-hoist/span';\nimport {\n GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n GEN_AI_RESPONSE_ID_ATTRIBUTE,\n GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n GEN_AI_RESPONSE_STREAMING_ATTRIBUTE,\n GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { setTokenUsageAttributes } from '../ai/utils';\nimport type { AnthropicAiStreamingEvent } from './types';\n\n/**\n * State object used to accumulate information from a stream of Anthropic AI events.\n */\ninterface StreamingState {\n /** Collected response text fragments (for output recording). */\n responseTexts: string[];\n /** Reasons for finishing the response, as reported by the API. */\n finishReasons: string[];\n /** The response ID. */\n responseId: string;\n /** The model name. */\n responseModel: string;\n /** Number of prompt/input tokens used. */\n promptTokens: number | undefined;\n /** Number of completion/output tokens used. */\n completionTokens: number | undefined;\n /** Number of cache creation input tokens used. */\n cacheCreationInputTokens: number | undefined;\n /** Number of cache read input tokens used. */\n cacheReadInputTokens: number | undefined;\n /** Accumulated tool calls (finalized) */\n toolCalls: Array<Record<string, unknown>>;\n /** In-progress tool call blocks keyed by index */\n activeToolBlocks: Record<\n number,\n {\n id?: string;\n name?: string;\n inputJsonParts: string[];\n }\n >;\n}\n\n/**\n * Checks if an event is an error event\n * @param event - The event to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n * @param span - The span to update\n * @returns Whether an error occurred\n */\n\nfunction isErrorEvent(event: AnthropicAiStreamingEvent, span: Span): boolean {\n if ('type' in event && typeof event.type === 'string') {\n // If the event is an error, set the span status and capture the error\n // These error events are not rejected by the API by default, but are sent as metadata of the response\n if (event.type === 'error') {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: event.error?.type ?? 'internal_error' });\n captureException(event.error, {\n mechanism: {\n handled: false,\n type: 'auto.ai.anthropic.anthropic_error',\n },\n });\n return true;\n }\n }\n return false;\n}\n\n/**\n * Processes the message metadata of an event\n * @param event - The event to process\n * @param state - The state of the streaming process\n */\n\nfunction handleMessageMetadata(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n // The token counts shown in the usage field of the message_delta event are cumulative.\n // @see https://docs.anthropic.com/en/docs/build-with-claude/streaming#event-types\n if (event.type === 'message_delta' && event.usage) {\n if ('output_tokens' in event.usage && typeof event.usage.output_tokens === 'number') {\n state.completionTokens = event.usage.output_tokens;\n }\n }\n\n if (event.message) {\n const message = event.message;\n\n if (message.id) state.responseId = message.id;\n if (message.model) state.responseModel = message.model;\n if (message.stop_reason) state.finishReasons.push(message.stop_reason);\n\n if (message.usage) {\n if (typeof message.usage.input_tokens === 'number') state.promptTokens = message.usage.input_tokens;\n if (typeof message.usage.cache_creation_input_tokens === 'number')\n state.cacheCreationInputTokens = message.usage.cache_creation_input_tokens;\n if (typeof message.usage.cache_read_input_tokens === 'number')\n state.cacheReadInputTokens = message.usage.cache_read_input_tokens;\n }\n }\n}\n\n/**\n * Handle start of a content block (e.g., tool_use)\n */\nfunction handleContentBlockStart(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n if (event.type !== 'content_block_start' || typeof event.index !== 'number' || !event.content_block) return;\n if (event.content_block.type === 'tool_use' || event.content_block.type === 'server_tool_use') {\n state.activeToolBlocks[event.index] = {\n id: event.content_block.id,\n name: event.content_block.name,\n inputJsonParts: [],\n };\n }\n}\n\n/**\n * Handle deltas of a content block, including input_json_delta for tool_use\n */\nfunction handleContentBlockDelta(\n event: AnthropicAiStreamingEvent,\n state: StreamingState,\n recordOutputs: boolean,\n): void {\n if (event.type !== 'content_block_delta' || !event.delta) return;\n\n // Accumulate tool_use input JSON deltas only when we have an index and an active tool block\n if (\n typeof event.index === 'number' &&\n 'partial_json' in event.delta &&\n typeof event.delta.partial_json === 'string'\n ) {\n const active = state.activeToolBlocks[event.index];\n if (active) {\n active.inputJsonParts.push(event.delta.partial_json);\n }\n }\n\n // Accumulate streamed response text regardless of index\n if (recordOutputs && typeof event.delta.text === 'string') {\n state.responseTexts.push(event.delta.text);\n }\n}\n\n/**\n * Handle stop of a content block; finalize tool_use entries\n */\nfunction handleContentBlockStop(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n if (event.type !== 'content_block_stop' || typeof event.index !== 'number') return;\n\n const active = state.activeToolBlocks[event.index];\n if (!active) return;\n\n const raw = active.inputJsonParts.join('');\n let parsedInput: unknown;\n\n try {\n parsedInput = raw ? JSON.parse(raw) : {};\n } catch {\n parsedInput = { __unparsed: raw };\n }\n\n state.toolCalls.push({\n type: 'tool_use',\n id: active.id,\n name: active.name,\n input: parsedInput,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete state.activeToolBlocks[event.index];\n}\n\n/**\n * Processes an event\n * @param event - The event to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n * @param span - The span to update\n */\nfunction processEvent(\n event: AnthropicAiStreamingEvent,\n state: StreamingState,\n recordOutputs: boolean,\n span: Span,\n): void {\n if (!(event && typeof event === 'object')) {\n return;\n }\n\n const isError = isErrorEvent(event, span);\n if (isError) return;\n\n handleMessageMetadata(event, state);\n\n // Tool call events are sent via 3 separate events:\n // - content_block_start (start of the tool call)\n // - content_block_delta (delta aka input of the tool call)\n // - content_block_stop (end of the tool call)\n // We need to handle them all to capture the full tool call.\n handleContentBlockStart(event, state);\n handleContentBlockDelta(event, state, recordOutputs);\n handleContentBlockStop(event, state);\n}\n\n/**\n * Finalizes span attributes when stream processing completes\n */\nfunction finalizeStreamSpan(state: StreamingState, span: Span, recordOutputs: boolean): void {\n if (!span.isRecording()) {\n return;\n }\n\n // Set common response attributes if available\n if (state.responseId) {\n span.setAttributes({\n [GEN_AI_RESPONSE_ID_ATTRIBUTE]: state.responseId,\n });\n }\n if (state.responseModel) {\n span.setAttributes({\n [GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: state.responseModel,\n });\n }\n\n setTokenUsageAttributes(\n span,\n state.promptTokens,\n state.completionTokens,\n state.cacheCreationInputTokens,\n state.cacheReadInputTokens,\n );\n\n span.setAttributes({\n [GEN_AI_RESPONSE_STREAMING_ATTRIBUTE]: true,\n });\n\n if (state.finishReasons.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify(state.finishReasons),\n });\n }\n\n if (recordOutputs && state.responseTexts.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: state.responseTexts.join(''),\n });\n }\n\n // Set tool calls if any were captured\n if (recordOutputs && state.toolCalls.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE]: JSON.stringify(state.toolCalls),\n });\n }\n\n span.end();\n}\n\n/**\n * Instruments an async iterable stream of Anthropic events, updates the span with\n * streaming attributes and (optionally) the aggregated output text, and yields\n * each event from the input stream unchanged.\n */\nexport async function* instrumentAsyncIterableStream(\n stream: AsyncIterable<AnthropicAiStreamingEvent>,\n span: Span,\n recordOutputs: boolean,\n): AsyncGenerator<AnthropicAiStreamingEvent, void, unknown> {\n const state: StreamingState = {\n responseTexts: [],\n finishReasons: [],\n responseId: '',\n responseModel: '',\n promptTokens: undefined,\n completionTokens: undefined,\n cacheCreationInputTokens: undefined,\n cacheReadInputTokens: undefined,\n toolCalls: [],\n activeToolBlocks: {},\n };\n\n try {\n for await (const event of stream) {\n processEvent(event, state, recordOutputs, span);\n yield event;\n }\n } finally {\n // Set common response attributes if available\n if (state.responseId) {\n span.setAttributes({\n [GEN_AI_RESPONSE_ID_ATTRIBUTE]: state.responseId,\n });\n }\n if (state.responseModel) {\n span.setAttributes({\n [GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: state.responseModel,\n });\n }\n\n setTokenUsageAttributes(\n span,\n state.promptTokens,\n state.completionTokens,\n state.cacheCreationInputTokens,\n state.cacheReadInputTokens,\n );\n\n span.setAttributes({\n [GEN_AI_RESPONSE_STREAMING_ATTRIBUTE]: true,\n });\n\n if (state.finishReasons.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify(state.finishReasons),\n });\n }\n\n if (recordOutputs && state.responseTexts.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: state.responseTexts.join(''),\n });\n }\n\n // Set tool calls if any were captured\n if (recordOutputs && state.toolCalls.length > 0) {\n span.setAttributes({\n [GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE]: JSON.stringify(state.toolCalls),\n });\n }\n\n span.end();\n }\n}\n\n/**\n * Instruments a MessageStream by registering event handlers and preserving the original stream API.\n */\nexport function instrumentMessageStream<R extends { on: (...args: unknown[]) => void }>(\n stream: R,\n span: Span,\n recordOutputs: boolean,\n): R {\n const state: StreamingState = {\n responseTexts: [],\n finishReasons: [],\n responseId: '',\n responseModel: '',\n promptTokens: undefined,\n completionTokens: undefined,\n cacheCreationInputTokens: undefined,\n cacheReadInputTokens: undefined,\n toolCalls: [],\n activeToolBlocks: {},\n };\n\n stream.on('streamEvent', (event: unknown) => {\n processEvent(event as AnthropicAiStreamingEvent, state, recordOutputs, span);\n });\n\n // The event fired when a message is done being streamed by the API. Corresponds to the message_stop SSE event.\n // @see https://github.com/anthropics/anthropic-sdk-typescript/blob/d3be31f5a4e6ebb4c0a2f65dbb8f381ae73a9166/helpers.md?plain=1#L42-L44\n stream.on('message', () => {\n finalizeStreamSpan(state, span, recordOutputs);\n });\n\n stream.on('error', (error: unknown) => {\n captureException(error, {\n mechanism: {\n handled: false,\n type: 'auto.ai.anthropic.stream_error',\n },\n });\n\n if (span.isRecording()) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'stream_error' });\n span.end();\n }\n });\n\n return stream;\n}\n"],"names":["SPAN_STATUS_ERROR","captureException","GEN_AI_RESPONSE_ID_ATTRIBUTE","GEN_AI_RESPONSE_MODEL_ATTRIBUTE","setTokenUsageAttributes","GEN_AI_RESPONSE_STREAMING_ATTRIBUTE","GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE","GEN_AI_RESPONSE_TEXT_ATTRIBUTE","GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE"],"mappings":";;;;;;;AAcA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,YAAY,CAAC,KAAK,EAA6B,IAAI,EAAiB;AAC7E,EAAE,IAAI,MAAA,IAAU,KAAA,IAAS,OAAO,KAAK,CAAC,IAAA,KAAS,QAAQ,EAAE;AACzD;AACA;AACA,IAAI,IAAI,KAAK,CAAC,IAAA,KAAS,OAAO,EAAE;AAChC,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAEA,4BAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,gBAAA,EAAkB,CAAC;AACjG,MAAMC,yBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE;AACpC,QAAQ,SAAS,EAAE;AACnB,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,IAAI,EAAE,mCAAmC;AACnD,SAAS;AACT,OAAO,CAAC;AACR,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;AACF,EAAE,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAS,qBAAqB,CAAC,KAAK,EAA6B,KAAK,EAAwB;AAC9F;AACA;AACA,EAAE,IAAI,KAAK,CAAC,IAAA,KAAS,eAAA,IAAmB,KAAK,CAAC,KAAK,EAAE;AACrD,IAAI,IAAI,eAAA,IAAmB,KAAK,CAAC,KAAA,IAAS,OAAO,KAAK,CAAC,KAAK,CAAC,aAAA,KAAkB,QAAQ,EAAE;AACzF,MAAM,KAAK,CAAC,gBAAA,GAAmB,KAAK,CAAC,KAAK,CAAC,aAAa;AACxD,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;AACrB,IAAI,MAAM,OAAA,GAAU,KAAK,CAAC,OAAO;;AAEjC,IAAI,IAAI,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,UAAA,GAAa,OAAO,CAAC,EAAE;AACjD,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,aAAA,GAAgB,OAAO,CAAC,KAAK;AAC1D,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;;AAE1E,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,YAAA,KAAiB,QAAQ,EAAE,KAAK,CAAC,YAAA,GAAe,OAAO,CAAC,KAAK,CAAC,YAAY;AACzG,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,2BAAA,KAAgC,QAAQ;AACvE,QAAQ,KAAK,CAAC,wBAAA,GAA2B,OAAO,CAAC,KAAK,CAAC,2BAA2B;AAClF,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,uBAAA,KAA4B,QAAQ;AACnE,QAAQ,KAAK,CAAC,oBAAA,GAAuB,OAAO,CAAC,KAAK,CAAC,uBAAuB;AAC1E,IAAI;AACJ,EAAE;AACF;;AAEA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,KAAK,EAA6B,KAAK,EAAwB;AAChG,EAAE,IAAI,KAAK,CAAC,SAAS,qBAAA,IAAyB,OAAO,KAAK,CAAC,KAAA,KAAU,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE;AACvG,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,IAAA,KAAS,UAAA,IAAc,KAAK,CAAC,aAAa,CAAC,IAAA,KAAS,iBAAiB,EAAE;AACjG,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,IAAI;AAC1C,MAAM,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE;AAChC,MAAM,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI;AACpC,MAAM,cAAc,EAAE,EAAE;AACxB,KAAK;AACL,EAAE;AACF;;AAEA;AACA;AACA;AACA,SAAS,uBAAuB;AAChC,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,aAAa;AACf,EAAQ;AACR,EAAE,IAAI,KAAK,CAAC,IAAA,KAAS,qBAAA,IAAyB,CAAC,KAAK,CAAC,KAAK,EAAE;;AAE5D;AACA,EAAE;AACF,IAAI,OAAO,KAAK,CAAC,KAAA,KAAU,QAAA;AAC3B,IAAI,cAAA,IAAkB,KAAK,CAAC,KAAA;AAC5B,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,iBAAiB;AACxC,IAAI;AACJ,IAAI,MAAM,MAAA,GAAS,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;AACtD,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1D,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI,aAAA,IAAiB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAA,KAAS,QAAQ,EAAE;AAC7D,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9C,EAAE;AACF;;AAEA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,KAAK,EAA6B,KAAK,EAAwB;AAC/F,EAAE,IAAI,KAAK,CAAC,SAAS,oBAAA,IAAwB,OAAO,KAAK,CAAC,KAAA,KAAU,QAAQ,EAAE;;AAE9E,EAAE,MAAM,MAAA,GAAS,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;AACpD,EAAE,IAAI,CAAC,MAAM,EAAE;;AAEf,EAAE,MAAM,GAAA,GAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,EAAE,IAAI,WAAW;;AAEjB,EAAE,IAAI;AACN,IAAI,WAAA,GAAc,GAAA,GAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA,GAAI,EAAE;AAC5C,EAAE,EAAE,MAAM;AACV,IAAI,cAAc,EAAE,UAAU,EAAE,KAAK;AACrC,EAAE;;AAEF,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AACvB,IAAI,IAAI,EAAE,UAAU;AACpB,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE;AACjB,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AACrB,IAAI,KAAK,EAAE,WAAW;AACtB,GAAG,CAAC;;AAEJ;AACA,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY;AACrB,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,aAAa;AACf,EAAE,IAAI;AACN,EAAQ;AACR,EAAE,IAAI,EAAE,KAAA,IAAS,OAAO,KAAA,KAAU,QAAQ,CAAC,EAAE;AAC7C,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,UAAU,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAC3C,EAAE,IAAI,OAAO,EAAE;;AAEf,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC;AACvC,EAAE,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;AACtD,EAAE,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;AACtC;;AAEA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAkB,IAAI,EAAQ,aAAa,EAAiB;AAC7F,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC3B,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,4CAA4B,GAAG,KAAK,CAAC,UAAU;AACtD,KAAK,CAAC;AACN,EAAE;AACF,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE;AAC3B,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,+CAA+B,GAAG,KAAK,CAAC,aAAa;AAC5D,KAAK,CAAC;AACN,EAAE;;AAEF,EAAEC,6BAAuB;AACzB,IAAI,IAAI;AACR,IAAI,KAAK,CAAC,YAAY;AACtB,IAAI,KAAK,CAAC,gBAAgB;AAC1B,IAAI,KAAK,CAAC,wBAAwB;AAClC,IAAI,KAAK,CAAC,oBAAoB;AAC9B,GAAG;;AAEH,EAAE,IAAI,CAAC,aAAa,CAAC;AACrB,IAAI,CAACC,mDAAmC,GAAG,IAAI;AAC/C,GAAG,CAAC;;AAEJ,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,MAAA,GAAS,CAAC,EAAE;AACtC,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,wDAAwC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AACrF,KAAK,CAAC;AACN,EAAE;;AAEF,EAAE,IAAI,aAAA,IAAiB,KAAK,CAAC,aAAa,CAAC,MAAA,GAAS,CAAC,EAAE;AACvD,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,8CAA8B,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACpE,KAAK,CAAC;AACN,EAAE;;AAEF;AACA,EAAE,IAAI,aAAA,IAAiB,KAAK,CAAC,SAAS,CAAC,MAAA,GAAS,CAAC,EAAE;AACnD,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,oDAAoC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7E,KAAK,CAAC;AACN,EAAE;;AAEF,EAAE,IAAI,CAAC,GAAG,EAAE;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACO,gBAAgB,6BAA6B;AACpD,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,aAAa;AACf,EAA4D;AAC5D,EAAE,MAAM,KAAK,GAAmB;AAChC,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,UAAU,EAAE,EAAE;AAClB,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,YAAY,EAAE,SAAS;AAC3B,IAAI,gBAAgB,EAAE,SAAS;AAC/B,IAAI,wBAAwB,EAAE,SAAS;AACvC,IAAI,oBAAoB,EAAE,SAAS;AACnC,IAAI,SAAS,EAAE,EAAE;AACjB,IAAI,gBAAgB,EAAE,EAAE;AACxB,GAAG;;AAEH,EAAE,IAAI;AACN,IAAI,WAAW,MAAM,KAAA,IAAS,MAAM,EAAE;AACtC,MAAM,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC;AACrD,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE,UAAU;AACZ;AACA,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE;AAC1B,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,CAACN,4CAA4B,GAAG,KAAK,CAAC,UAAU;AACxD,OAAO,CAAC;AACR,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE;AAC7B,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,CAACC,+CAA+B,GAAG,KAAK,CAAC,aAAa;AAC9D,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAIC,6BAAuB;AAC3B,MAAM,IAAI;AACV,MAAM,KAAK,CAAC,YAAY;AACxB,MAAM,KAAK,CAAC,gBAAgB;AAC5B,MAAM,KAAK,CAAC,wBAAwB;AACpC,MAAM,KAAK,CAAC,oBAAoB;AAChC,KAAK;;AAEL,IAAI,IAAI,CAAC,aAAa,CAAC;AACvB,MAAM,CAACC,mDAAmC,GAAG,IAAI;AACjD,KAAK,CAAC;;AAEN,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,MAAA,GAAS,CAAC,EAAE;AACxC,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,CAACC,wDAAwC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AACvF,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAI,IAAI,aAAA,IAAiB,KAAK,CAAC,aAAa,CAAC,MAAA,GAAS,CAAC,EAAE;AACzD,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,CAACC,8CAA8B,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACtE,OAAO,CAAC;AACR,IAAI;;AAEJ;AACA,IAAI,IAAI,aAAA,IAAiB,KAAK,CAAC,SAAS,CAAC,MAAA,GAAS,CAAC,EAAE;AACrD,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,CAACC,oDAAoC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;AAC/E,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,EAAE;AACF;;AAEA;AACA;AACA;AACO,SAAS,uBAAuB;AACvC,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,aAAa;AACf,EAAK;AACL,EAAE,MAAM,KAAK,GAAmB;AAChC,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,UAAU,EAAE,EAAE;AAClB,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,YAAY,EAAE,SAAS;AAC3B,IAAI,gBAAgB,EAAE,SAAS;AAC/B,IAAI,wBAAwB,EAAE,SAAS;AACvC,IAAI,oBAAoB,EAAE,SAAS;AACnC,IAAI,SAAS,EAAE,EAAE;AACjB,IAAI,gBAAgB,EAAE,EAAE;AACxB,GAAG;;AAEH,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,KAAc;AAC/C,IAAI,YAAY,CAAC,KAAA,GAAoC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC;AAChF,EAAE,CAAC,CAAC;;AAEJ;AACA;AACA,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM;AAC7B,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC;AAClD,EAAE,CAAC,CAAC;;AAEJ,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAc;AACzC,IAAIP,yBAAgB,CAAC,KAAK,EAAE;AAC5B,MAAM,SAAS,EAAE;AACjB,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,IAAI,EAAE,gCAAgC;AAC9C,OAAO;AACP,KAAK,CAAC;;AAEN,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC5B,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAED,4BAAiB,EAAE,OAAO,EAAE,cAAA,EAAgB,CAAC;AAC1E,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,IAAI;AACJ,EAAE,CAAC,CAAC;;AAEJ,EAAE,OAAO,MAAM;AACf;;;;;"}