@cognipeer/agent-sdk 0.4.3 → 0.4.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/langchain.ts","../src/model.ts","../src/tool.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/smart/runtimeConfig.ts","../src/utils/utilTokens.ts","../src/smart/toolResponses.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/agent.ts","../src/nodes/agent.ts","../src/smart/contextPolicy.ts","../src/nodes/contextSummarize.ts","../src/utils/tokenManager.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/memory.ts","../src/smart/index.ts","../src/smart/eval.ts","../src/utils/content.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts"],"names":["wrapped","GuardrailPhase","path","status","durationMs","nanoid","entry","z","systemMessage","messageText","isSyntheticSummaryMessage"],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage>;\n // Optional streaming method that yields incremental chunks or messages\n stream?(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[]): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[]) {\n if (model?.bindTools) return model.bindTools(tools);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n /** Normalize multimodal content parts for LangChain message format. */\n const normalizeContent = (content: any): any => {\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n return part;\n }\n return part;\n });\n }\n return content;\n };\n\n /** Convert a BaseChatMessage to a LangChain-compatible message object. */\n const toLC = (m: BaseChatMessage): any => {\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n return { role: m.role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage> => {\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages, options);\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n stream: async function* (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }) {\n if (typeof lcModel.stream !== 'function') return;\n const lcMessages = messages.map(toLC);\n const streamResult = lcModel.stream(lcMessages, options);\n const stream = typeof (streamResult as Promise<unknown>)?.then === \"function\" ? await streamResult : streamResult;\n for await (const chunk of stream) {\n yield chunk as any;\n }\n },\n bindTools: (tools: any[]) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n maxExecutionsPerRun,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n if (maxExecutionsPerRun !== undefined) {\n (toolRecord as any).maxExecutionsPerRun = maxExecutionsPerRun;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","import type { PlanningMode } from \"./types.js\";\n\nconst DEFAULT_TODO_LIST_PROMPT = `Planning tools are available when they materially improve execution.\n\nRules:\n1) Use \"manage_todo_list\" for multi-step work, delegation, recovery after a failed attempt, or when the user explicitly asks for a plan.\n2) Do NOT create a plan for direct Q&A, simple recall from existing context, or a single straightforward tool lookup unless the user asks for one.\n3) If a task is multi-step and no valid plan exists yet, create one before substantial execution.\n4) Use operation=\"write\" only to create or fully replace the entire plan. After a plan exists, default to operation=\"update\" for progress, evidence, status, owner changes, blockers, or reprioritization.\n5) When using operation=\"update\", send only the changed items. Do not resend unchanged plan items unless the whole plan structure is being rewritten.\n6) Include expectedVersion from the latest successful plan state whenever you update an existing plan. If you do not know the latest version, read the plan first.\n7) Keep exactly ONE item \"in-progress\" at a time.\n8) Update the plan whenever a step starts, completes, becomes blocked, fails, or the approach changes. Do not finish a multi-step task with stale plan state.\n9) If tool results materially change the task state, sync the plan before the final answer.\n10) Reuse prior tool results already present in the conversation before calling tools again.\n11) If an update fails because of a version mismatch, read the latest plan and retry instead of blindly rewriting it.\n12) Repeating full operation=\"write\" calls for the same plan is a mistake unless the plan structure itself changed.\n13) Keep the plan internal unless the user explicitly asks to see it.`;\n\nfunction buildPlanningBlock(todoListPrompt?: string) {\n const promptBody = todoListPrompt?.trim() || DEFAULT_TODO_LIST_PROMPT;\n if (promptBody.startsWith(\"<planning>\")) {\n return promptBody;\n }\n return `<planning>\\n${promptBody}\\n</planning>`;\n}\n\nexport function buildSystemPrompt(\n extra?: string,\n planning?: boolean | PlanningMode,\n name: string = \"Agent\",\n todoListPrompt?: string,\n) {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningMode = typeof planning === \"string\"\n ? planning\n : planning\n ? \"todo\"\n : \"off\";\n const planningBlock = planningMode !== \"off\"\n ? buildPlanningBlock(todoListPrompt)\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n // Approximate maximum context tokens the smart runtime should build for model calls\n maxContextTokens?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkOtlpConfig = {\n type: \"otlp\";\n endpoint: string;\n headers?: Record<string, string>;\n};\n\nexport type TracingMode = \"batched\" | \"streaming\";\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig\n | TraceSinkOtlpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n mode?: TracingMode;\n logData?: boolean;\n sink?: TraceSinkConfig;\n threadId?: string;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional override for the built-in todo list planning instructions.\n // Applied only when todo/planning guidance is enabled.\n todoListPrompt?: string;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\nexport type BuiltInRuntimeProfile = \"fast\" | \"balanced\" | \"deep\" | \"research\";\n\nexport type RuntimeProfile = BuiltInRuntimeProfile | \"custom\";\n\nexport type SummarizationMode = \"incremental\" | \"full_rewrite\";\n\nexport type ContextPolicy = \"raw\" | \"summary_only\" | \"hybrid\";\n\nexport type ToolResponseRetentionPolicy = \"keep_full\" | \"keep_structured\" | \"summarize_archive\" | \"drop\";\n\nexport type ToolResponseClassification = \"critical\" | \"informative\" | \"verbose\" | \"redundant\";\n\nexport type PlanningMode = \"off\" | \"todo\" | \"planner_executor\" | \"reasoning_then_tools\";\n\nexport type ReplanPolicy = \"never\" | \"on_failure\" | \"on_conflict\" | \"every_n_steps\";\n\nexport type DelegationMode = \"off\" | \"role_based\" | \"automatic\";\n\nexport type ChildContextPolicy = \"minimal\" | \"scoped\" | \"full\";\n\nexport type MemoryProviderKind = \"inMemory\" | \"redis\" | \"postgres\" | \"mongo\" | \"s3\";\n\nexport type MemoryScope = \"session\" | \"user\" | \"workspace\" | \"tenant\";\n\nexport type MemoryWritePolicy = \"manual\" | \"auto_important\" | \"always\";\n\nexport type MemoryReadPolicy = \"recent_only\" | \"semantic\" | \"hybrid\";\n\nexport type MemoryFact = {\n key: string;\n value: string;\n sourceTurn: number;\n confidence: number;\n ttl?: number | null;\n obsolete?: boolean;\n lastUpdatedAt?: string;\n scope?: MemoryScope;\n tags?: string[];\n};\n\nexport interface MemoryStore {\n get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]>;\n upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void>;\n markObsolete(scope: MemoryScope, keys: string[]): Promise<void>;\n semanticSearch?(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]>;\n}\n\nexport type SummaryFactItem = {\n key: string;\n value: string;\n confidence?: number;\n source?: string;\n};\n\nexport type StructuredSummary = {\n stable_facts: SummaryFactItem[];\n active_goals: string[];\n open_questions: string[];\n discarded_obsolete: string[];\n rawSummary?: string;\n};\n\nexport type SummaryIntegrityCheck = {\n passed: boolean;\n criticalFactLoss: boolean;\n obsoleteFactRevived: boolean;\n notes: string[];\n};\n\nexport type PlanStepRecord = {\n id: number;\n step: string;\n owner: \"agent\" | \"user\" | \"tool\" | string;\n exitCriteria: string;\n evidence?: string;\n status: \"not-started\" | \"in-progress\" | \"completed\" | \"blocked\";\n title?: string;\n description?: string;\n};\n\nexport type SmartAgentSummarizationConfig = {\n enable?: boolean;\n maxTokens?: number;\n summaryTriggerTokens?: number;\n summaryPromptMaxTokens?: number;\n summaryCompressionRatioTarget?: number;\n summaryMode?: SummarizationMode;\n promptTemplate?: string;\n toolFreeCall?: boolean;\n integrityCheck?: boolean;\n};\n\nexport type SmartAgentBudgetConfig = {\n systemReserveTokens?: number;\n goalsReserveTokens?: number;\n recentTurnsReserveTokens?: number;\n toolResponseReserveTokens?: number;\n};\n\nexport type SmartAgentContextConfig = {\n policy?: ContextPolicy;\n lastTurnsToKeep?: number;\n toolResponsePolicy?: ToolResponseRetentionPolicy;\n archiveLargeToolResponses?: boolean;\n retrieveArchivedToolResponseOnDemand?: boolean;\n budget?: SmartAgentBudgetConfig;\n};\n\nexport type SmartAgentPlanningConfig = {\n mode?: PlanningMode;\n replanPolicy?: ReplanPolicy;\n everyNSteps?: number;\n};\n\nexport type SmartAgentDelegationConfig = {\n mode?: DelegationMode;\n maxDelegationDepth?: number;\n maxChildCalls?: number;\n maxParallelChild?: number;\n childContextPolicy?: ChildContextPolicy;\n requireJsonOutputContract?: boolean;\n};\n\nexport type SmartAgentMemoryConfig = {\n provider?: MemoryProviderKind;\n store?: MemoryStore;\n scope?: MemoryScope;\n writePolicy?: MemoryWritePolicy;\n readPolicy?: MemoryReadPolicy;\n};\n\nexport type SmartAgentToolResponseConfig = {\n maxToolResponseChars?: number;\n maxToolResponseTokens?: number;\n defaultPolicy?: ToolResponseRetentionPolicy;\n largeResponsePolicy?: ToolResponseRetentionPolicy;\n toolResponseRetentionByTool?: Record<string, ToolResponseRetentionPolicy>;\n criticalTools?: string[];\n schemaValidation?: \"strict\" | \"warn\";\n retryOnSchemaError?: boolean;\n fallbackPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type SmartAgentWatchdogConfig = {\n enabled?: boolean;\n tokenDriftThreshold?: number;\n overToolingSpikeThreshold?: number;\n contextRotThreshold?: number;\n autoCompaction?: boolean;\n autoReplanOnFailure?: boolean;\n};\n\nexport type SmartAgentCustomProfileConfig = {\n extends?: BuiltInRuntimeProfile;\n limits?: AgentLimits;\n summarization?: SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n planning?: SmartAgentPlanningConfig;\n memory?: SmartAgentMemoryConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n watchdog?: SmartAgentWatchdogConfig;\n};\n\nexport type ProfileConfig = {\n limits: Required<AgentLimits>;\n summarization: Required<SmartAgentSummarizationConfig>;\n context: Required<SmartAgentContextConfig> & { budget: Required<SmartAgentBudgetConfig> };\n planning: Required<SmartAgentPlanningConfig>;\n memory: Required<Omit<SmartAgentMemoryConfig, \"store\">> & { store?: MemoryStore };\n delegation: Required<SmartAgentDelegationConfig>;\n toolResponses: Required<SmartAgentToolResponseConfig>;\n watchdog: Required<SmartAgentWatchdogConfig>;\n};\n\nexport type ResolvedSmartAgentConfig = ProfileConfig & {\n runtimeProfile: RuntimeProfile;\n baseProfile: BuiltInRuntimeProfile;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n runtimeProfile?: RuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n memory?: SmartAgentMemoryConfig;\n planning?: SmartAgentPlanningConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n watchdog?: SmartAgentWatchdogConfig;\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Optional override for the built-in todo list planning instructions.\n // Applied only when planning mode injects todo guidance.\n todoListPrompt?: string;\n // Enable internal planning workflow (todo list tool + prompt hints)\n /** @deprecated Use planning.mode=\"todo\" */\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n todoListPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n runtimeProfile?: RuntimeProfile;\n smart?: ResolvedSmartAgentConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string }\n | { type: \"otlp\"; endpoint: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n traceId?: string;\n rootSpanId?: string;\n threadId?: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> }\n | { type: \"otlp\"; endpoint: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: TracingMode;\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n traceId?: string;\n rootSpanId?: string;\n currentIterationSpanId?: string;\n threadId?: string;\n sessionStarted?: boolean;\n agentInfo?: { name?: string; version?: string; model?: string; provider?: string };\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n summaryRecords?: Array<StructuredSummary & { integrity?: SummaryIntegrityCheck; createdAt?: string }>;\n memoryFacts?: MemoryFact[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n plan?: { version: number; steps: PlanStepRecord[]; lastUpdated?: string; adherenceScore?: number } | null;\n planVersion?: number;\n watchdog?: {\n tokenDrift?: number;\n contextRotScore?: number;\n overToolingRate?: number;\n compactions?: number;\n lastAction?: string;\n };\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\" | \"update\";\n todoList?: PlanStepRecord[];\n version?: number;\n adherenceScore?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n /** Number of messages that were compressed/summarized */\n messagesCompressed?: number;\n /** Input tokens used for summarization prompt (from model response if available, otherwise estimated) */\n inputTokens?: number;\n /** Output tokens from summarization response (from model response if available, otherwise estimated) */\n outputTokens?: number;\n /** Cached input tokens from model response (prompt cache hit) */\n cachedInputTokens?: number;\n /** Total tokens (input + output) */\n totalTokens?: number;\n /** Duration of the summarization call in milliseconds */\n durationMs?: number;\n /** Previous summary content (if incremental summarization) */\n previousSummary?: string;\n /** Total token count before summarization */\n tokenCountBefore?: number;\n /** Total token count after summarization */\n tokenCountAfter?: number;\n /** @deprecated Use messagesCompressed instead */\n archivedCount?: number;\n structuredSummary?: StructuredSummary;\n integrity?: SummaryIntegrityCheck;\n};\n\nexport type EvalFamily = \"recall\" | \"state_continuity\" | \"summarization_fidelity\" | \"context_rollover\" | \"query_focused_summary\";\n\nexport type EvalCase = {\n id: string;\n family: EvalFamily;\n prompt: string;\n expectedPhrases?: string[];\n forbiddenPhrases?: string[];\n expectedFacts?: Array<{ key: string; value: string }>;\n expectedToolNames?: string[];\n};\n\nexport type EvalProfileDescriptor = {\n label: string;\n runtimeProfile: RuntimeProfile;\n baseProfile?: BuiltInRuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n};\n\nexport type EvalProfileTarget = RuntimeProfile | EvalProfileDescriptor;\n\nexport type EvalCaseResult = {\n id: string;\n family: EvalFamily;\n success: boolean;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens?: number;\n profile: RuntimeProfile;\n profileLabel?: string;\n baseProfile?: BuiltInRuntimeProfile;\n notes: string[];\n};\n\nexport type EvalHarnessMetrics = {\n taskSuccess: number;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens: number;\n score: number;\n};\n\nexport type EvalHarnessResult = {\n profile: RuntimeProfile;\n profileLabel: string;\n baseProfile?: BuiltInRuntimeProfile;\n metrics: EvalHarnessMetrics;\n cases: EvalCaseResult[];\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type ProgressEvent = {\n type: \"progress\";\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamEvent = {\n type: \"stream\";\n text: string;\n isFinal?: boolean;\n};\n\nexport type CancelledEvent = {\n type: \"cancelled\";\n stage?: string;\n reason?: string;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SmartAgentEvent =\n | ToolCallEvent\n | ToolApprovalEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent\n | ProgressEvent\n | StreamEvent\n | CancelledEvent;\n\nexport type CancellationTokenLike = {\n readonly isCancellationRequested: boolean;\n onCancellationRequested?: (listener: () => void) => { dispose(): void } | void;\n};\n\nexport type ProgressUpdate = {\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamChunk = {\n text: string;\n isFinal?: boolean;\n};\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Optional per-call progress hook\n onProgress?: (progress: ProgressUpdate) => void;\n // Optional per-call streaming hook\n onStream?: (chunk: StreamChunk) => void;\n // Enable streaming if supported by model\n stream?: boolean;\n // Cancellation control\n cancellationToken?: CancellationTokenLike | AbortSignal;\n // Optional timeout for the full invoke (ms)\n timeoutMs?: number;\n // Optional per-call limits override\n limits?: Partial<AgentLimits>;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n // OpenAI format: prompt_tokens_details / completion_tokens_details\n // LangChain format: input_token_details / output_token_details\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails \n || raw.input_token_details || raw.inputTokenDetails || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails\n || raw.output_token_details || raw.outputTokenDetails || {};\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(\n promptDetailsSrc.cached_tokens || promptDetailsSrc.cached || promptDetailsSrc.cache_read\n || raw.cached_input_tokens || raw.cached_prompt_tokens\n || raw.cache_read_input_tokens\n ),\n audio_tokens: safe(promptDetailsSrc.audio_tokens || promptDetailsSrc.audio),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(completionDetailsSrc.reasoning_tokens),\n audio_tokens: safe(completionDetailsSrc.audio_tokens),\n accepted_prediction_tokens: safe(completionDetailsSrc.accepted_prediction_tokens),\n rejected_prediction_tokens: safe(completionDetailsSrc.rejected_prediction_tokens),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport crypto from \"node:crypto\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n TracingMode,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://console.cognipeer.com/api/client/v1/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\n\n/**\n * Create an OTLP/HTTP JSON sink that exports traces in OpenTelemetry format.\n * @param endpoint OTLP endpoint URL (e.g. \"https://console.cognipeer.com/api/client/v1/traces\")\n * @param headers Optional headers (e.g. { Authorization: \"Bearer ...\" })\n */\nexport function otlpSink(endpoint: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"otlp\", endpoint, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\n// Metadata extraction paths - defined once for DRY principle\nconst METADATA_PATHS = {\n model: [\n \"model\", \"options.model\", \"params.model\", \"config.model\", \n \"configuration.model\", \"metadata.model\", \"lc_kwargs.model\",\n \"metadata.modelName\", \"modelName\", \"lc_alias\", \"model_id\", \"id\",\n \"_model\", \"_modelName\", \"__model\", \"_modelId\", \"_llmType\"\n ],\n provider: [\n \"provider\", \"options.provider\", \"params.provider\", \"config.provider\",\n \"configuration.provider\", \"metadata.provider\", \"lc_kwargs.provider\"\n ],\n};\n\n/** Safely extract nested object value using dot notation path */\nfunction getNestedValue(obj: any, path: string): any {\n if (!obj || typeof path !== \"string\") return undefined;\n return path.split(\".\").reduce((current, key) => current?.[key], obj);\n}\n\n/** Unified metadata extraction - eliminates code duplication between model/provider extraction */\nfunction extractMetadata(model: any, paths: string[]): string | undefined {\n if (!model) return undefined;\n \n // Direct extraction from model\n for (const path of paths) {\n const value = getNestedValue(model, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n \n // Try LangChain wrapper (_lc property)\n const maybeLc = model?._lc;\n if (maybeLc) {\n for (const path of paths) {\n const value = getNestedValue(maybeLc, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Try client/api/service properties\n const maybeClient = model?.client || model?.api || model?.service;\n if (maybeClient) {\n for (const path of paths) {\n const value = getNestedValue(maybeClient, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Constructor name as last resort (filter out generic types)\n const constructorName = model?.constructor?.name;\n if (constructorName && ![\"Object\", \"Function\"].includes(constructorName)) {\n return constructorName;\n }\n \n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.model);\n}\n\nexport function getProviderName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.provider);\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific metadata paths for inference from history\n const messagePaths = [\n \"metadata.model\", \"metadata.modelName\", \"response_metadata.model\",\n \"response_metadata.modelName\", \"usage_metadata.model\", \"model\", \"modelName\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific paths for provider inference\n const messagePaths = [\n \"metadata.provider\", \"response_metadata.provider\", \"usage_metadata.provider\", \"provider\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n const mode: TracingMode = config?.mode === \"streaming\" ? \"streaming\" : \"batched\";\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode,\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n case \"otlp\": {\n const endpoint = typeof candidate.endpoint === \"string\" ? candidate.endpoint.trim() : \"\";\n if (!endpoint) {\n throw new Error(\"otlp sink requires a non-empty endpoint\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"otlp\", endpoint, headers } : { type: \"otlp\", endpoint };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n case \"otlp\":\n return { type: \"otlp\", endpoint: sink.endpoint };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n const errorMsg = `${statusLine}${bodyPreview}`;\n \n // DEBUG error logging\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Error posting to\", url, \":\", errorMsg);\n }\n \n throw new Error(errorMsg);\n }\n } catch (err) {\n // Rethrow with error info\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a streaming session start to the remote endpoint\n */\nasync function postStreamingSessionStart(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n startedAt: string;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config?: TraceSessionConfigSnapshot;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/start`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session start:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a single event to the streaming endpoint\n */\nasync function postStreamingEvent(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n sessionId: string,\n event: TraceEventRecord\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${sessionId}/events`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify({ event }),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post streaming event:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST session end to the streaming endpoint\n */\nasync function postStreamingSessionEnd(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n endedAt: string;\n durationMs: number;\n status: TraceSessionStatus;\n summary: TraceSessionSummary;\n errors: Array<{ eventId: string; message: string; stack?: string; type?: string; timestamp?: string }>;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/end`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session end:\", errMsg);\n }\n throw err;\n }\n}\n\n// ─── OTLP/HTTP JSON Export ──────────────────────────────────────────────────\n\n/** Nanosecond timestamp from ISO date string */\nfunction isoToUnixNano(iso: string): string {\n const ms = new Date(iso).getTime();\n // OTel uses fixed-point string nanoseconds (BigInt not needed for JSON)\n return `${ms}000000`;\n}\n\n/** Map agent/event status to OTel StatusCode: 0=UNSET, 1=OK, 2=ERROR */\nfunction toOtlpStatusCode(status: string): number {\n if (status === \"error\") return 2;\n if (status === \"success\" || status === \"completed\") return 1;\n return 0; // UNSET for in_progress, skipped, retry, etc.\n}\n\n/** Map event type to OTel SpanKind: 0 UNSPECIFIED, 1 INTERNAL, 2 SERVER, 3 CLIENT */\nfunction toOtlpSpanKind(type: string): number {\n switch (type) {\n case \"ai_call\":\n return 3; // CLIENT — outgoing LLM request\n case \"tool_call\":\n return 1; // INTERNAL\n case \"agent_iteration\":\n return 1; // INTERNAL\n default:\n return 1; // INTERNAL\n }\n}\n\ntype OtlpKeyValue = { key: string; value: { stringValue?: string; intValue?: string; doubleValue?: number; boolValue?: boolean } };\n\nfunction stringAttr(key: string, val: string | undefined): OtlpKeyValue | null {\n return val != null ? { key, value: { stringValue: val } } : null;\n}\n\nfunction intAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { intValue: String(val) } } : null;\n}\n\nfunction doubleAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { doubleValue: val } } : null;\n}\n\n/** Convert a single TraceEventRecord into an OTLP Span object. */\nfunction eventToOtlpSpan(event: TraceEventRecord): Record<string, unknown> {\n const startNano = isoToUnixNano(event.timestamp);\n const endNano = event.durationMs != null\n ? `${new Date(new Date(event.timestamp).getTime() + event.durationMs).getTime()}000000`\n : startNano;\n\n const attrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.event.type\", event.type),\n stringAttr(\"cognipeer.event.label\", event.label),\n intAttr(\"cognipeer.event.sequence\", event.sequence),\n stringAttr(\"cognipeer.actor.scope\", event.actor?.scope),\n stringAttr(\"cognipeer.actor.name\", event.actor?.name),\n stringAttr(\"cognipeer.actor.role\", event.actor?.role),\n stringAttr(\"cognipeer.model\", event.model),\n stringAttr(\"cognipeer.provider\", event.provider),\n intAttr(\"cognipeer.tokens.input\", event.inputTokens),\n intAttr(\"cognipeer.tokens.output\", event.outputTokens),\n intAttr(\"cognipeer.tokens.total\", event.totalTokens),\n intAttr(\"cognipeer.tokens.cached_input\", event.cachedInputTokens),\n intAttr(\"cognipeer.bytes.request\", event.requestBytes),\n intAttr(\"cognipeer.bytes.response\", event.responseBytes),\n stringAttr(\"cognipeer.tool.execution_id\", event.toolExecutionId),\n stringAttr(\"cognipeer.retry_of\", event.retryOf),\n stringAttr(\"cognipeer.event.id\", event.id),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Add sections as a JSON string attribute if present\n if (event.data?.sections && event.data.sections.length > 0) {\n try {\n attrs.push({ key: \"cognipeer.sections\", value: { stringValue: JSON.stringify(event.data.sections) } });\n } catch { /* skip on serialization failures */ }\n }\n\n const span: Record<string, unknown> = {\n traceId: event.traceId,\n spanId: event.spanId,\n parentSpanId: event.parentSpanId || \"\",\n name: event.label || event.type,\n kind: toOtlpSpanKind(event.type),\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: attrs,\n status: {\n code: toOtlpStatusCode(event.status),\n ...(event.status === \"error\" && event.error?.message ? { message: event.error.message } : {}),\n },\n };\n\n // Error events\n if (event.error) {\n span.events = [{\n timeUnixNano: startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: event.error.message } },\n ...(event.error.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: event.error.stack } }] : []),\n ],\n }];\n }\n\n return span;\n}\n\n/**\n * Convert a complete TraceSessionFile into an OTLP ExportTraceServiceRequest (JSON).\n * Produces a root span for the session and child spans for each event.\n */\nexport function traceSessionToOtlp(session: TraceSessionFile): Record<string, unknown> {\n const traceId = session.traceId || generateTraceId();\n const rootSpanId = session.rootSpanId || generateSpanId();\n const startNano = isoToUnixNano(session.startedAt);\n const endNano = session.endedAt ? isoToUnixNano(session.endedAt) : startNano;\n\n // Resource attributes\n const resourceAttrs: OtlpKeyValue[] = [\n { key: \"service.name\", value: { stringValue: session.agent?.name || \"cognipeer-agent\" } },\n stringAttr(\"service.version\", session.agent?.version),\n stringAttr(\"cognipeer.session.id\", session.sessionId),\n stringAttr(\"cognipeer.thread.id\", session.threadId),\n stringAttr(\"cognipeer.agent.model\", session.agent?.model),\n stringAttr(\"cognipeer.agent.provider\", session.agent?.provider),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Root span — represents the entire agent session\n const rootAttrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.session.status\", session.status),\n doubleAttr(\"cognipeer.session.duration_ms\", session.durationMs),\n intAttr(\"cognipeer.session.total_input_tokens\", session.summary.totalInputTokens),\n intAttr(\"cognipeer.session.total_output_tokens\", session.summary.totalOutputTokens),\n intAttr(\"cognipeer.session.total_cached_input_tokens\", session.summary.totalCachedInputTokens),\n intAttr(\"cognipeer.session.total_bytes_in\", session.summary.totalBytesIn),\n intAttr(\"cognipeer.session.total_bytes_out\", session.summary.totalBytesOut),\n intAttr(\"cognipeer.session.event_count\", session.events.length),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Include event count breakdown\n if (session.summary.eventCounts) {\n for (const [key, count] of Object.entries(session.summary.eventCounts)) {\n rootAttrs.push({ key: `cognipeer.session.event_count.${key}`, value: { intValue: String(count) } });\n }\n }\n\n const rootSpan: Record<string, unknown> = {\n traceId,\n spanId: rootSpanId,\n parentSpanId: \"\",\n name: `agent_session: ${session.agent?.name || \"agent\"}`,\n kind: 1, // INTERNAL\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: rootAttrs,\n status: {\n code: toOtlpStatusCode(session.status),\n ...(session.status === \"error\" && session.errors.length > 0\n ? { message: session.errors.map((e) => e.message).join(\"; \") }\n : {}),\n },\n };\n\n // Error events on root span\n if (session.errors.length > 0) {\n rootSpan.events = session.errors.map((err) => ({\n timeUnixNano: err.timestamp ? isoToUnixNano(err.timestamp) : startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: err.message } },\n ...(err.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: err.stack } }] : []),\n ...(err.type ? [{ key: \"exception.type\", value: { stringValue: err.type } }] : []),\n ],\n }));\n }\n\n // Child spans for each event — inherit traceId from session\n const childSpans = session.events.map((event) => {\n const span = eventToOtlpSpan({\n ...event,\n traceId: event.traceId || traceId,\n spanId: event.spanId || generateSpanId(),\n parentSpanId: event.parentSpanId || rootSpanId,\n });\n return span;\n });\n\n return {\n resourceSpans: [{\n resource: { attributes: resourceAttrs },\n scopeSpans: [{\n scope: {\n name: \"cognipeer-agent-sdk\",\n version: \"1.0.0\",\n },\n spans: [rootSpan, ...childSpans],\n }],\n }],\n };\n}\n\n/**\n * POST an OTLP ExportTraceServiceRequest (JSON) to the given endpoint.\n */\nasync function postOtlpTraces(\n endpoint: string,\n headers: Record<string, string> | undefined,\n payload: Record<string, unknown>\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"OTLP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n ...(headers || {}),\n };\n\n try {\n const response = await fetchFn(endpoint, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch { /* ignore */ }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] OTLP export failed:\", errMsg);\n }\n throw err;\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\n/** Generate a W3C-compatible trace ID (32 hex chars / 128-bit). */\nexport function generateTraceId(): string {\n return crypto.randomBytes(16).toString(\"hex\");\n}\n\n/** Generate an OTel span ID (16 hex chars / 64-bit). */\nexport function generateSpanId(): string {\n return crypto.randomBytes(8).toString(\"hex\");\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const traceId = generateTraceId();\n const rootSpanId = generateSpanId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n traceId,\n rootSpanId,\n threadId: opts.tracing?.threadId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n sessionStarted: false,\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\n/**\n * Start a streaming trace session. Should be called before recording events in streaming mode.\n * This sends the session start to the remote endpoint immediately.\n */\nexport async function startStreamingSession(\n session: TraceSessionRuntime | undefined,\n agentRuntime?: AgentRuntimeConfig\n): Promise<void> {\n if (!session) return;\n if (session.resolvedConfig.mode !== \"streaming\") return;\n if (session.sessionStarted) return;\n\n const sink = session.resolvedConfig.sink;\n \n // Build agent info\n const agentInfo = agentRuntime ? {\n name: agentRuntime.name || \"unknown-agent\",\n version: agentRuntime.version,\n model: getModelName(agentRuntime.model) || \"unknown-model\",\n provider: getProviderName(agentRuntime.model),\n } : undefined;\n \n session.agentInfo = agentInfo;\n \n const configSnapshot = buildConfigSnapshot(session);\n const startedAtIso = new Date(session.startedAt).toISOString();\n \n const payload = {\n sessionId: session.sessionId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n agent: agentInfo,\n config: configSnapshot,\n };\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n await postStreamingSessionStart(sink.url, headers, payload);\n session.sessionStarted = true;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"session_start\",\n message,\n type: \"sink\",\n timestamp: startedAtIso,\n });\n // Don't throw - allow session to continue in degraded mode\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to start streaming session, falling back to batched:\", message);\n }\n }\n } else if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n // For custom sinks in streaming mode, we mark as started and let events flow through\n session.sessionStarted = true;\n } else if (sink.type === \"file\") {\n // File sink in streaming mode - just mark as started, events will be written on finalize\n session.sessionStarted = true;\n }\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n /** Explicit parent span ID. Falls back to session.currentIterationSpanId when omitted. */\n parentSpanId?: string;\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n /** Pre-built sections to use instead of auto-converting messageList */\n sections?: TraceDataSection[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n // Use pre-built sections if provided, otherwise auto-convert from messageList\n if (event.sections && event.sections.length > 0) {\n sections = ensureUniqueSections(id, event.sections);\n } else {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n\n // Span hierarchy: traceId from session, unique spanId per event,\n // parentSpanId from explicit param or current iteration span\n const spanId = generateSpanId();\n const parentSpanId = event.parentSpanId || session.currentIterationSpanId || session.rootSpanId;\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n traceId: session.traceId,\n spanId,\n parentSpanId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n\n // In streaming mode, send event immediately to HTTP sinks\n if (session.resolvedConfig.mode === \"streaming\" && session.sessionStarted) {\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n // Fire and forget - don't block on event sending\n postStreamingEvent(sink.url, headers, session.sessionId, record).catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to send streaming event:\", errMsg);\n }\n session.errors.push({\n eventId: record.id,\n message: errMsg,\n type: \"sink\",\n timestamp: timestampIso,\n });\n });\n }\n }\n\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n // Build agent info with safe defaults - single source of truth\n const buildAgentInfo = (runtime: AgentRuntimeConfig | undefined) => {\n if (!runtime) return undefined;\n return {\n name: runtime.name || \"unknown-agent\",\n version: runtime.version,\n model: getModelName(runtime.model) || \"unknown-model\",\n provider: getProviderName(runtime.model),\n };\n };\n\n const agentInfo = buildAgentInfo(params.agentRuntime);\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n traceId: session.traceId,\n rootSpanId: session.rootSpanId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo || session.agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n const isStreamingMode = session.resolvedConfig.mode === \"streaming\";\n\n if (sink.type === \"otlp\") {\n // OTLP/HTTP JSON export — convert session to ExportTraceServiceRequest and POST\n try {\n const otlpPayload = traceSessionToOtlp(payloadForSink);\n await postOtlpTraces(sink.endpoint, sink.headers, otlpPayload);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n } else if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n if (isStreamingMode && session.sessionStarted) {\n // In streaming mode, send session end instead of full session\n await postStreamingSessionEnd(sink.url, headers, {\n sessionId: session.sessionId,\n endedAt: endedAtIso,\n durationMs,\n status: initialStatus,\n summary: session.summary,\n errors: session.errors,\n });\n } else {\n // In batched mode (or if streaming never started), send full session\n await postTraceSession(sink.url, headers, payloadForSink);\n }\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n \n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hadSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && (sinkFailed || hadSinkErrors)) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n \n // Phase 1: Build a set of all valid tool_call IDs from assistant messages\n const validToolCallIds = new Set<string>();\n for (const m of msgs) {\n if (m?.role === 'assistant') {\n for (const tu of extractToolUses(m)) {\n if (tu.id) validToolCallIds.add(tu.id);\n }\n }\n }\n \n // Phase 2: Filter out orphan tool messages (those without a matching assistant tool_call)\n const filteredMsgs = msgs.filter((m) => {\n if (m?.role === 'tool') {\n const toolCallId = m.tool_call_id;\n if (!toolCallId || !validToolCallIds.has(toolCallId)) {\n // Orphan tool message - remove it\n return false;\n }\n }\n return true;\n });\n \n // Phase 3: Ensure tool messages immediately follow their corresponding assistant message\n // OpenAI requires: assistant(tool_calls) -> tool(tool_call_id) -> tool(tool_call_id) -> ...\n for (let i = 0; i < filteredMsgs.length; i++) {\n const m = filteredMsgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = filteredMsgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for tool_result adjacency.\",\n }));\n filteredMsgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return filteredMsgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch {\n // Debug tool pairing failed silently\n }\n };\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: any) => void) | undefined;\n const onStream = (state.ctx as any)?.__onStream as ((chunk: { text: string; isFinal?: boolean }) => void) | undefined;\n const streamingEnabled = Boolean((state.ctx as any)?.__streaming);\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n\n const extractText = (chunk: any) => {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n if (typeof chunk?.delta?.content === \"string\") return chunk.delta.content;\n return \"\";\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n if (streamingEnabled && typeof (modelWithTools as any).stream === \"function\") {\n let streamedText = \"\";\n let streamedMessage: any | undefined;\n for await (const chunk of (modelWithTools as any).stream(normalizedMessages, { signal: abortSignal, cancellationToken })) {\n if ((cancellationToken && cancellationToken.isCancellationRequested) || abortSignal?.aborted) {\n break;\n }\n if (chunk && typeof chunk === \"object\" && (chunk as any).role) {\n streamedMessage = chunk;\n }\n const text = extractText(chunk);\n if (text) {\n streamedText += text;\n onStream?.({ text });\n onEvent?.({ type: \"stream\", text });\n }\n }\n if (streamedMessage) {\n response = { ...streamedMessage };\n if (response.content == null || response.content === \"\") {\n response.content = streamedText;\n }\n } else {\n response = { role: \"assistant\", content: streamedText } as any;\n }\n } else {\n response = await modelWithTools.invoke(normalizedMessages, { signal: abortSignal, cancellationToken });\n }\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage // LangChain camelCase\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type {\n AgentLimits,\n BuiltInRuntimeProfile,\n MemoryStore,\n ProfileConfig,\n ResolvedSmartAgentConfig,\n RuntimeProfile,\n SmartAgentOptions,\n} from \"../types.js\";\n\nconst DEFAULT_CRITICAL_TOOLS = [\"response\", \"manage_todo_list\", \"get_tool_response\"];\n\nexport const DEFAULT_PROFILE_CONFIGS: Record<BuiltInRuntimeProfile, ProfileConfig> = {\n fast: {\n limits: { maxToolCalls: 4, maxParallelTools: 1, maxContextTokens: 12000 },\n summarization: {\n enable: true,\n maxTokens: 12000,\n summaryTriggerTokens: 9000,\n summaryPromptMaxTokens: 5000,\n summaryCompressionRatioTarget: 0.4,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 6,\n toolResponsePolicy: \"keep_structured\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1000,\n goalsReserveTokens: 900,\n recentTurnsReserveTokens: 3200,\n toolResponseReserveTokens: 1800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"recent_only\",\n },\n delegation: {\n mode: \"off\",\n maxDelegationDepth: 1,\n maxChildCalls: 2,\n maxParallelChild: 1,\n childContextPolicy: \"minimal\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 2400,\n maxToolResponseTokens: 800,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 1200,\n overToolingSpikeThreshold: 0.7,\n contextRotThreshold: 0.65,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n balanced: {\n limits: { maxToolCalls: 8, maxParallelTools: 2, maxContextTokens: 24000 },\n summarization: {\n enable: true,\n maxTokens: 24000,\n summaryTriggerTokens: 17000,\n summaryPromptMaxTokens: 7000,\n summaryCompressionRatioTarget: 0.35,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 8,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1200,\n goalsReserveTokens: 1200,\n recentTurnsReserveTokens: 5200,\n toolResponseReserveTokens: 2800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 4,\n maxParallelChild: 2,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 3600,\n maxToolResponseTokens: 1200,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 1800,\n overToolingSpikeThreshold: 0.6,\n contextRotThreshold: 0.55,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n deep: {\n limits: { maxToolCalls: 14, maxParallelTools: 3, maxContextTokens: 42000 },\n summarization: {\n enable: true,\n maxTokens: 42000,\n summaryTriggerTokens: 30000,\n summaryPromptMaxTokens: 9000,\n summaryCompressionRatioTarget: 0.3,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 12,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1400,\n goalsReserveTokens: 1600,\n recentTurnsReserveTokens: 7000,\n toolResponseReserveTokens: 3600,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"workspace\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 3,\n maxChildCalls: 6,\n maxParallelChild: 2,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 5400,\n maxToolResponseTokens: 1800,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 2200,\n overToolingSpikeThreshold: 0.55,\n contextRotThreshold: 0.5,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n research: {\n limits: { maxToolCalls: 20, maxParallelTools: 4, maxContextTokens: 56000 },\n summarization: {\n enable: true,\n maxTokens: 56000,\n summaryTriggerTokens: 42000,\n summaryPromptMaxTokens: 10000,\n summaryCompressionRatioTarget: 0.28,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 20,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1600,\n goalsReserveTokens: 1800,\n recentTurnsReserveTokens: 9000,\n toolResponseReserveTokens: 4800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"workspace\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"automatic\",\n maxDelegationDepth: 4,\n maxChildCalls: 8,\n maxParallelChild: 3,\n childContextPolicy: \"full\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 7200,\n maxToolResponseTokens: 2200,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 2600,\n overToolingSpikeThreshold: 0.5,\n contextRotThreshold: 0.45,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n};\n\nfunction mergeLimits(base: Required<AgentLimits>, override?: AgentLimits): Required<AgentLimits> {\n return {\n maxToolCalls: override?.maxToolCalls ?? base.maxToolCalls,\n maxParallelTools: override?.maxParallelTools ?? base.maxParallelTools,\n maxContextTokens: override?.maxContextTokens ?? base.maxContextTokens,\n };\n}\n\nfunction resolveBaseProfile(opts: SmartAgentOptions, runtimeProfile: RuntimeProfile): BuiltInRuntimeProfile {\n if (opts.customProfile?.extends) return opts.customProfile.extends;\n if (runtimeProfile !== \"custom\") return runtimeProfile;\n return \"balanced\";\n}\n\nexport function normalizeSmartAgentOptions(opts: SmartAgentOptions): ResolvedSmartAgentConfig {\n const runtimeProfile = opts.runtimeProfile ?? (opts.customProfile ? \"custom\" : \"balanced\");\n const baseProfile = resolveBaseProfile(opts, runtimeProfile);\n const preset = DEFAULT_PROFILE_CONFIGS[baseProfile];\n const customProfile = opts.customProfile || {};\n const useTodoList = opts.useTodoList === true;\n const summarizationDisabled = opts.summarization === false;\n const summarizationOverride = typeof opts.summarization === \"object\" ? opts.summarization : {};\n const planningMode = opts.planning?.mode ?? customProfile.planning?.mode ?? (useTodoList ? \"todo\" : preset.planning.mode);\n const memoryStore = (opts.memory?.store ?? customProfile.memory?.store) as MemoryStore | undefined;\n\n return {\n runtimeProfile,\n baseProfile,\n limits: mergeLimits(mergeLimits(preset.limits, customProfile.limits), opts.limits),\n summarization: {\n ...preset.summarization,\n ...(customProfile.summarization || {}),\n ...summarizationOverride,\n enable: summarizationDisabled ? false : (summarizationOverride.enable ?? customProfile.summarization?.enable ?? preset.summarization.enable),\n maxTokens: summarizationOverride.maxTokens ?? opts.limits?.maxContextTokens ?? customProfile.summarization?.maxTokens ?? preset.summarization.maxTokens,\n summaryTriggerTokens:\n summarizationOverride.summaryTriggerTokens\n ?? summarizationOverride.maxTokens\n ?? opts.limits?.maxContextTokens\n ?? customProfile.summarization?.summaryTriggerTokens\n ?? customProfile.summarization?.maxTokens\n ?? preset.summarization.summaryTriggerTokens,\n promptTemplate: summarizationOverride.promptTemplate ?? customProfile.summarization?.promptTemplate ?? preset.summarization.promptTemplate,\n },\n context: {\n ...preset.context,\n ...(customProfile.context || {}),\n ...(opts.context || {}),\n budget: {\n ...preset.context.budget,\n ...((customProfile.context?.budget || {})),\n ...((opts.context?.budget || {})),\n },\n toolResponsePolicy: opts.context?.toolResponsePolicy ?? customProfile.context?.toolResponsePolicy ?? preset.context.toolResponsePolicy,\n },\n planning: {\n ...preset.planning,\n ...(customProfile.planning || {}),\n ...(opts.planning || {}),\n mode: planningMode,\n },\n memory: {\n ...preset.memory,\n ...(customProfile.memory || {}),\n ...(opts.memory || {}),\n store: memoryStore,\n },\n delegation: {\n ...preset.delegation,\n ...(customProfile.delegation || {}),\n ...(opts.delegation || {}),\n },\n toolResponses: {\n ...preset.toolResponses,\n ...(customProfile.toolResponses || {}),\n ...(opts.toolResponses || {}),\n toolResponseRetentionByTool: {\n ...preset.toolResponses.toolResponseRetentionByTool,\n ...((customProfile.toolResponses?.toolResponseRetentionByTool || {})),\n ...((opts.toolResponses?.toolResponseRetentionByTool || {})),\n },\n criticalTools: opts.toolResponses?.criticalTools ?? customProfile.toolResponses?.criticalTools ?? preset.toolResponses.criticalTools,\n },\n watchdog: {\n ...preset.watchdog,\n ...(customProfile.watchdog || {}),\n ...(opts.watchdog || {}),\n },\n };\n}\n\nexport function getResolvedSmartConfig(opts: SmartAgentOptions, runtime?: { smart?: ResolvedSmartAgentConfig | undefined }): ResolvedSmartAgentConfig {\n return runtime?.smart || normalizeSmartAgentOptions(opts);\n}","/**\n * Estimates token count from text using a character-based heuristic.\n * \n * This is a rough approximation:\n * - For Latin/ASCII text: ~4 characters per token (GPT-family models)\n * - For CJK/Unicode text: ~1.5 characters per token\n * \n * For production accuracy, consider using a proper tokenizer like tiktoken.\n */\nexport function countApproxTokens(text: string): number {\n if (!text) return 0;\n // Count non-ASCII characters (CJK, Arabic, etc.) which use more tokens\n const nonAsciiCount = (text.match(/[^\\x00-\\x7F]/g) || []).length;\n const asciiCount = text.length - nonAsciiCount;\n // ASCII text: ~4 chars/token, non-ASCII: ~1.5 chars/token\n return Math.ceil(asciiCount / 4 + nonAsciiCount / 1.5);\n}\n\n/**\n * Extracts all text from a message, including content AND tool_calls arguments.\n * \n * Standard `countApproxTokens` only counts `.content`, but assistant messages\n * with tool_calls often have `content: \"\"` while `tool_calls[].function.arguments`\n * can contain massive JSON strings. The actual LLM API counts both towards input tokens,\n * so we must include tool_calls to get an accurate estimate.\n * \n * Also accounts for per-message overhead (role, name, formatting tokens).\n */\nfunction extractMessageText(m: any): string {\n if (!m) return \"\";\n const parts: string[] = [];\n\n // 1. Role + name overhead (~4 tokens worth of text)\n parts.push(m.role || \"\");\n if (m.name) parts.push(m.name);\n\n // 2. Content field\n if (typeof m.content === \"string\") {\n parts.push(m.content);\n } else if (Array.isArray(m.content)) {\n for (const c of m.content) {\n if (typeof c === \"string\") parts.push(c);\n else if (c?.text) parts.push(c.text);\n else if (c?.content) parts.push(c.content);\n else if (c?.type === \"tool_use\" && c?.input) {\n // Anthropic/Bedrock native tool_use content blocks\n parts.push(c.name || \"\");\n parts.push(typeof c.input === \"string\" ? c.input : JSON.stringify(c.input));\n } else if (c != null && typeof c === \"object\") {\n parts.push(JSON.stringify(c));\n }\n }\n } else if (m.content != null && typeof m.content === \"object\") {\n parts.push(JSON.stringify(m.content));\n }\n\n // 3. Tool calls (assistant messages) — these are counted by the API but often missed\n if (Array.isArray(m.tool_calls)) {\n for (const tc of m.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n // LangChain normalized format (name + args at top level)\n if (tc?.name && !tc?.function?.name) parts.push(tc.name);\n if (tc?.args && !tc?.function?.arguments) {\n parts.push(typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args));\n }\n }\n }\n\n // 4. additional_kwargs.tool_calls (LangChain Bedrock format)\n if (Array.isArray(m.additional_kwargs?.tool_calls)) {\n for (const tc of m.additional_kwargs.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n }\n }\n\n return parts.join(\"\\n\");\n}\n\n/**\n * Estimates the total token count for an array of messages.\n * \n * Unlike counting only `.content`, this includes:\n * - `tool_calls[].function.arguments` (can be massive JSON)\n * - `tool_calls[].function.name`\n * - `additional_kwargs.tool_calls` (LangChain/Bedrock)\n * - Per-message overhead (role, name, formatting)\n * - Anthropic tool_use content blocks\n */\nexport function countMessagesTokens(messages: any[]): number {\n if (!Array.isArray(messages) || messages.length === 0) return 0;\n const allText = messages.map(extractMessageText).join(\"\\n\");\n // Add ~4 tokens per message for framing overhead (role delimiters, etc.)\n return countApproxTokens(allText) + messages.length * 4;\n}\n","import { ZodError } from \"zod\";\nimport type {\n ResolvedSmartAgentConfig,\n ToolInterface,\n ToolResponseClassification,\n ToolResponseRetentionPolicy,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n const serialized = JSON.stringify(value);\n return typeof serialized === \"string\" ? serialized : String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction summarizeObject(value: any): string {\n if (value == null) return \"null\";\n if (typeof value === \"string\") {\n return value.length > 240 ? `${value.slice(0, 240)}...` : value;\n }\n if (Array.isArray(value)) {\n const preview = value.slice(0, 3).map((entry) => safeStringify(entry).slice(0, 120)).join(\" | \");\n return `array(length=${value.length}) ${preview}`.trim();\n }\n if (typeof value === \"object\") {\n const keys = Object.keys(value);\n const preview = keys.slice(0, 6).map((key) => `${key}=${safeStringify(value[key]).slice(0, 80)}`).join(\"; \");\n return `object(keys=${keys.length}) ${preview}`.trim();\n }\n return safeStringify(value);\n}\n\nexport function classifyToolResponse(toolName: string, output: unknown, config: ResolvedSmartAgentConfig): ToolResponseClassification {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const criticalTools = new Set(config.toolResponses.criticalTools);\n\n if (criticalTools.has(toolName)) return \"critical\";\n if (tokenCount >= config.toolResponses.maxToolResponseTokens || serialized.length >= config.toolResponses.maxToolResponseChars) {\n return \"verbose\";\n }\n if (serialized === \"ok\" || serialized === \"true\" || serialized === \"null\") {\n return \"redundant\";\n }\n return \"informative\";\n}\n\nexport function resolveToolResponsePolicy(\n toolName: string,\n output: unknown,\n config: ResolvedSmartAgentConfig,\n): {\n classification: ToolResponseClassification;\n retentionPolicy: ToolResponseRetentionPolicy;\n content: string;\n rawOutput: unknown;\n summary: string;\n tokenCount: number;\n} {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const classification = classifyToolResponse(toolName, output, config);\n const byTool = config.toolResponses.toolResponseRetentionByTool[toolName];\n let retentionPolicy: ToolResponseRetentionPolicy = byTool || config.toolResponses.defaultPolicy;\n\n if (classification === \"critical\") {\n retentionPolicy = byTool || \"keep_structured\";\n } else if (classification === \"verbose\") {\n retentionPolicy = byTool || config.toolResponses.largeResponsePolicy;\n } else if (classification === \"redundant\") {\n retentionPolicy = byTool || \"drop\";\n }\n\n const summary = summarizeObject(output);\n if (retentionPolicy === \"keep_full\") {\n return { classification, retentionPolicy, content: serialized, rawOutput: output, summary, tokenCount };\n }\n if (retentionPolicy === \"keep_structured\") {\n return { classification, retentionPolicy, content: summary, rawOutput: output, summary, tokenCount };\n }\n if (retentionPolicy === \"summarize_archive\") {\n return {\n classification,\n retentionPolicy,\n content: `ARCHIVED_TOOL_RESPONSE: ${summary}`,\n rawOutput: output,\n summary,\n tokenCount,\n };\n }\n return {\n classification,\n retentionPolicy,\n content: `DROPPED_TOOL_RESPONSE: ${summary}`,\n rawOutput: output,\n summary,\n tokenCount,\n };\n}\n\nexport function validateToolArgs(\n tool: ToolInterface<any, any, any>,\n args: unknown,\n): { ok: true; value: any } | { ok: false; message: string } {\n const schema = (tool as any).schema;\n if (!schema || typeof schema.parse !== \"function\") {\n return { ok: true, value: args };\n }\n\n try {\n return { ok: true, value: schema.parse(args) };\n } catch (error) {\n if (error instanceof ZodError) {\n const message = error.issues.map((issue) => `${issue.path.join(\".\") || \"root\"}: ${issue.message}`).join(\"; \");\n return { ok: false, message };\n }\n return { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n}","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { resolveToolResponsePolicy, validateToolArgs } from \"../smart/toolResponses.js\";\n\nfunction normalizeMaxExecutionsPerRun(value: unknown): number | null {\n if (value === null || value === undefined || value === \"\") return null;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return null;\n const normalized = Math.trunc(parsed);\n return normalized >= 0 ? normalized : null;\n}\n\nfunction countSuccessfulToolExecutions(toolHistory: SmartState[\"toolHistory\"], toolName: string): number {\n if (!Array.isArray(toolHistory)) return 0;\n return toolHistory.filter((entry) => entry?.toolName === toolName && (entry?.status === \"success\" || entry?.status === \"handoff\")).length;\n}\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n todoListPrompt: opts?.todoListPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const resolved = getResolvedSmartConfig(opts || ({} as SmartAgentOptions), runtime as any);\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const tool of activeTools) toolByName.set((tool as any).name, tool);\n\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? resolved.limits.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n let awaitingApproval = false;\n\n for (const tool of toolByName.values()) {\n const anyTool: any = tool as any;\n if (anyTool._stateRef && typeof anyTool._stateRef === \"object\") {\n anyTool._stateRef.toolHistory = state.toolHistory;\n anyTool._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyTool._stateRef.__onEvent = onEvent;\n }\n }\n\n const last = state.messages[state.messages.length - 1] as any;\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = Array.isArray(last?.tool_calls) ? last.tool_calls : [];\n const toolHistory = state.toolHistory || [];\n const toolHistoryArchived = state.toolHistoryArchived || [];\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval };\n\n const isCancelled = () => {\n if (abortSignal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (cancellationToken && cancellationToken.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const markToolFailure = (message: string, toolName: string, toolCallId?: string) => {\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__lastToolError = message;\n if (toolCallId) {\n ctx.__toolSchemaError = { toolName, toolCallId, message };\n }\n if (resolved.watchdog.autoReplanOnFailure) {\n ctx.__planNeedsReplan = true;\n }\n state.ctx = ctx;\n };\n\n const runOne = async (tc: { id?: string; name: string; args: any }): Promise<ToolExecutionResult> => {\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n return { status: \"error\" };\n }\n\n const tool = toolByName.get(tc.name);\n if (!tool) {\n appended.push({ role: \"tool\", content: `Tool not found: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch { /* keep raw string */ }\n }\n\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n const validatedArgs = validateToolArgs(tool, args);\n if (!validatedArgs.ok && resolved.toolResponses.schemaValidation === \"strict\") {\n const errorMessage = `Tool argument validation failed for ${tc.name}: ${validatedArgs.message}`;\n appended.push({ role: \"tool\", content: errorMessage, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(errorMessage, tc.name, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args, error: { message: errorMessage } });\n toolCount += 1;\n return { status: \"error\" };\n }\n if (validatedArgs.ok) {\n args = validatedArgs.value;\n }\n\n const toolName = (tool as any).name || tc.name;\n const maxExecutionsPerRun = normalizeMaxExecutionsPerRun((tool as any).maxExecutionsPerRun);\n if (maxExecutionsPerRun !== null) {\n const currentExecutions = countSuccessfulToolExecutions(toolHistory, toolName);\n if (currentExecutions >= maxExecutionsPerRun) {\n const limitMessage = `Skipped tool due to per-tool execution limit: ${toolName} (${maxExecutionsPerRun}/run)`;\n appended.push({ role: \"tool\", content: limitMessage, tool_call_id: toolCallId, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: toolName, id: tc.id, args });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList: [\n {\n role: \"assistant\",\n name: toolName,\n content: limitMessage,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: { name: toolName, arguments: sanitizeTracePayload(args) },\n },\n ],\n },\n ],\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n }\n\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((tool as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (tool as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (tool as any).approvalPrompt || (tool as any).approvalDefaults\n ? { prompt: (tool as any).approvalPrompt, defaults: (tool as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n appended.push({ role: \"tool\", content: `Tool call rejected: ${rejectionMessage}`, tool_call_id: toolCallId, name: tc.name });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n pendingByCallId.set(toolCallId, approvalEntry);\n toolHistory.push({ executionId: nanoid(), toolName: (tool as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"rejected\" });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\" && approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n\n const start = Date.now();\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n\n try {\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: toolName, id: tc.id, args });\n onProgress?.({ stage: \"tools\", message: `Running tool ${tc.name}` });\n const anyTool = tool as any;\n const callOptions = { cancellationToken, signal: abortSignal };\n let output: any;\n if (typeof anyTool.func === \"function\") output = await anyTool.func(args, callOptions);\n else if (typeof anyTool.invoke === \"function\") output = await anyTool.invoke(args, callOptions);\n else if (typeof anyTool.call === \"function\") output = await anyTool.call(args, callOptions);\n else if (typeof anyTool._call === \"function\") output = await anyTool._call(args, callOptions);\n else if (typeof anyTool.run === \"function\") output = await anyTool.run(args, callOptions);\n else throw new Error(\"Tool is not invokable\");\n\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n\n if (output && typeof output === \"object\" && output.__handoff && output.__handoff.runtime) {\n toolHistory.push({ executionId, toolName, args, output: \"handoff:ok\", rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"handoff\" });\n appended.push({ role: \"tool\", content: \"ok\", tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n state.agent = output.__handoff.runtime as AgentRuntimeConfig;\n onEvent?.({ type: \"handoff\", from: runtime.name, to: state.agent?.name, toolName });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: \"handoff\", durationMs });\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n }\n\n if (output && typeof output === \"object\" && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n\n const responsePolicy = resolveToolResponsePolicy(toolName, output, resolved);\n const timestamp = new Date().toISOString();\n const storedOutput = responsePolicy.retentionPolicy === \"keep_full\" ? output : responsePolicy.summary;\n\n toolHistory.push({\n executionId,\n toolName,\n args,\n output: storedOutput,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: responsePolicy.retentionPolicy !== \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n summary: responsePolicy.summary,\n archiveId: responsePolicy.retentionPolicy === \"summarize_archive\" || responsePolicy.retentionPolicy === \"drop\" ? executionId : undefined,\n status: \"success\",\n });\n\n if (resolved.context.archiveLargeToolResponses && (responsePolicy.retentionPolicy === \"summarize_archive\" || responsePolicy.retentionPolicy === \"drop\")) {\n toolHistoryArchived.push({\n executionId,\n toolName,\n args,\n output,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: true,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n summary: responsePolicy.summary,\n archiveId: executionId,\n status: \"success\",\n });\n }\n\n let toolMessageContent = responsePolicy.content;\n if (responsePolicy.retentionPolicy === \"summarize_archive\") {\n toolMessageContent = `ARCHIVED_TOOL_RESPONSE [executionId=${executionId}]: ${responsePolicy.summary}\\nUse get_tool_response with executionId \"${executionId}\" to retrieve the full output.`;\n } else if (responsePolicy.retentionPolicy === \"drop\") {\n toolMessageContent = `DROPPED_TOOL_RESPONSE [executionId=${executionId}]: ${responsePolicy.summary}\\nUse get_tool_response with executionId \"${executionId}\" to retrieve the full output.`;\n }\n appended.push({ role: \"tool\", content: toolMessageContent, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: output, durationMs });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} completed`, detail: { durationMs } });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: responsePolicy.content,\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolExecutionId: executionId,\n messageList,\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n originalTokenCount: responsePolicy.tokenCount,\n },\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (error: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n const message = error?.message || String(error);\n toolHistory.push({ executionId, toolName, args, output: `Error executing tool: ${message}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"error\" });\n appended.push({ role: \"tool\", content: `Error executing tool: ${message}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n markToolFailure(message, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message } });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} failed`, detail: { error: message } });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n toolExecutionId: executionId,\n error: { message, stack: error?.stack },\n messageList: [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: { name: toolName, arguments: sanitizedArgs },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: `Error executing tool: ${message}`,\n },\n ],\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n for (const tc of planned) {\n if (awaitingApproval) break;\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n break;\n }\n const result = await runOne(tc);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n }\n\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const sanitizedArgs = sanitizeTracePayload(tc.args);\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList: [\n {\n role: \"assistant\",\n name: tc.name,\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: { name: tc.name, arguments: sanitizedArgs },\n },\n ],\n },\n ],\n });\n appended.push({ role: \"tool\", content: `Skipped tool due to tool-call limit: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n toolCount += 1;\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n toolHistoryArchived,\n agent: state.agent,\n pendingApprovals,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\n// Note: Using 'user' role since 'system' messages cannot appear in the middle of a conversation for OpenAI API.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'user', content: \"[System Notice] Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\n \"__onEvent\",\n \"__onProgress\",\n \"__onStream\",\n \"__traceSession\",\n \"__paused\",\n \"__cancellationToken\",\n \"__abortSignal\",\n]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession, startStreamingSession, recordTraceEvent } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { countMessagesTokens } from \"./utils/utilTokens.js\";\n\nfunction isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n if (opts.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema as any,\n func: async (data: any) => ({ __finalStructuredOutput: true, data }),\n });\n toolsBase.push(responseTool);\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n tracing: opts.tracing,\n };\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n const mergedLimits = {\n ...(opts.limits || {}),\n ...((config?.limits || {}) as any),\n } as AgentOptions[\"limits\"];\n\n const maxToolCalls = (mergedLimits?.maxToolCalls === undefined) ? 50 : mergedLimits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n let iterations = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n\n const isCancelled = () => {\n const ctx: any = state.ctx || {};\n const token = ctx.__cancellationToken as any;\n const signal = ctx.__abortSignal as AbortSignal | undefined;\n const deadline = ctx.__deadline as number | undefined;\n if (signal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (token && token.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n if (deadline && Date.now() > deadline) return { cancelled: true, reason: \"timeout\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const cancelIfRequested = (stage: string) => {\n const result = isCancelled();\n if (!result.cancelled) return false;\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__cancelled = { stage, reason: result.reason, timestamp: new Date().toISOString() };\n state = { ...state, ctx } as AgentState;\n emit?.({ type: \"cancelled\", stage, reason: result.reason });\n onProgress?.({ stage, message: \"Cancelled\", detail: { reason: result.reason } });\n return true;\n };\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch (err) {\n console.warn('[agent-sdk] onStateChange callback error:', err);\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n while (iterations < iterationLimit) {\n iterations++;\n\n // Open an iteration span as parent for all ai_call / tool_call events in this turn\n const traceSession = state.ctx?.__traceSession as import(\"./types.js\").TraceSessionRuntime | undefined;\n if (traceSession) {\n const iterEvent = recordTraceEvent(traceSession, {\n type: \"agent_iteration\",\n label: `Iteration ${iterations}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"orchestrator\" },\n parentSpanId: traceSession.rootSpanId,\n });\n // Override the spanId for the iteration event so children reference it\n if (iterEvent) {\n traceSession.currentIterationSpanId = iterEvent.spanId;\n }\n }\n\n if (cancelIfRequested(\"loop\")) break;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (cancelIfRequested(\"before_guardrails\")) break;\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Check if context is too large and needs summarization (signal to SmartAgent).\n // Use summaryTriggerTokens (the intended threshold) rather than maxTokens\n // (which controls summary output size) to avoid premature compaction.\n let maxTok: number | undefined;\n if ((opts as any).summarization && typeof (opts as any).summarization === 'object') {\n maxTok = (opts as any).summarization.summaryTriggerTokens || (opts as any).summarization.maxTokens;\n }\n if (maxTok === undefined) {\n maxTok = 50000; // Default if not found\n }\n\n if (maxTok) {\n // Exclude synthetic summary messages AND context overhead injected by SmartAgent's\n // buildModelMessages (context_summary, memory_context). These system messages are\n // added on top of the conversation and shouldn't trigger re-summarization.\n const tokCountMessages = (state.messages || []).filter((message: any) => {\n if (isSyntheticSummaryMessage(message)) return false;\n if (message.role === 'system' && (message.name === 'context_summary' || message.name === 'memory_context')) return false;\n return true;\n });\n const tokenCount = countMessagesTokens(tokCountMessages);\n if (tokenCount > maxTok) {\n // Only signal summarization if tokens exceed the threshold by a meaningful margin\n // or if summarization hasn't just been performed (prevents infinite break loops\n // where summarized output + context overhead barely exceeds the limit).\n const hasFreshSummary = (state.messages || []).some((m: any) =>\n m.role === 'tool' && m.content === 'SUMMARIZED'\n );\n if (hasFreshSummary && tokenCount <= maxTok * 1.15) {\n // Summarization was recently performed and the overshoot is within 15%.\n // Proceed to agent call instead of re-triggering summarization.\n } else {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n }\n\n // Agent step\n onProgress?.({ stage: \"agent\", message: \"Invoking model\" });\n if (cancelIfRequested(\"before_agent\")) break;\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n onProgress?.({ stage: \"agent\", message: \"Model response received\" });\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n const toolCalls: any[] = Array.isArray(lastMsg?.tool_calls) ? lastMsg.tool_calls : [];\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) break;\n\n // Run tools\n onProgress?.({ stage: \"tools\", message: \"Running tools\" });\n if (cancelIfRequested(\"before_tools\")) break;\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n onProgress?.({ stage: \"tools\", message: \"Tools finished\" });\n if (state.ctx?.__awaitingApproval) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n }\n\n // Best-effort: if a structured output schema is active but the model never called `response`,\n // append a force-finalize instruction and allow one more agent turn (without tools ideally).\n // This helps avoid \"completed but no response generated\" situations.\n if (opts.outputSchema && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n // Only nudge if we appear to be done (no pending tool calls) but still no structured finalize.\n if (!lastHasToolCalls) {\n const forceMsg = {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n ].join(\"\\n\"),\n } as any;\n\n // Avoid spamming the same instruction\n const alreadyForced = Boolean((state as any).ctx?.__structuredOutputForceFinalize);\n if (!alreadyForced) {\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, forceMsg], ctx } as AgentState;\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch (err: unknown) {\n // Log structured output force-finalize error so callers can diagnose failures\n const errMsg = err instanceof Error ? err.message : String(err);\n emit?.({ type: \"metadata\", error: `Structured output force-finalize failed: ${errMsg}` });\n }\n }\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n const onEvent = config?.onEvent;\n const onProgress = config?.onProgress;\n const onStream = config?.onStream;\n const streamEnabled = config?.stream === true;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch (err) { console.warn('[agent-sdk] onEvent callback error:', err); } };\n const emitProgress = (progress: { stage?: string; message?: string; percent?: number; detail?: any }) => {\n try { onProgress?.(progress); } catch (err) { console.warn('[agent-sdk] onProgress callback error:', err); }\n emit({ type: \"progress\", ...progress });\n };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = {\n ...(input.ctx || {}),\n __onEvent: onEvent,\n __onProgress: emitProgress,\n __onStream: onStream,\n __streaming: streamEnabled,\n };\n if (traceSession) ctx.__traceSession = traceSession;\n if (config?.cancellationToken) ctx.__cancellationToken = config.cancellationToken;\n if ((config?.cancellationToken as AbortSignal | undefined)?.aborted !== undefined) {\n ctx.__abortSignal = config?.cancellationToken as AbortSignal;\n }\n if (config?.timeoutMs && config.timeoutMs > 0) {\n ctx.__deadline = Date.now() + config.timeoutMs;\n }\n\n const runtimeWithInvokeLimits: AgentRuntimeConfig = config?.limits\n ? { ...runtime, limits: { ...(runtime.limits || {}), ...config.limits } }\n : runtime;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n agent: input.agent || runtimeWithInvokeLimits,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n await startStreamingSession(traceSession, runtimeWithInvokeLimits);\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n throw err;\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n const finalMsg = res.messages[res.messages.length - 1];\n let content = \"\";\n if (typeof finalMsg?.content === \"string\") content = finalMsg.content;\n else if (Array.isArray(finalMsg?.content)) content = finalMsg.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n\n let parsed: TOutput | undefined = undefined;\n const schema = opts.outputSchema as ZodSchema<TOutput> | undefined;\n if (schema && (res as any).ctx?.__structuredOutputParsed) {\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (schema && content) {\n // Fallback: try to parse JSON from assistant message\n let jsonText: string | null = null;\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) jsonText = fenced[1].trim();\n else {\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const start = [braceIdx, bracketIdx].filter(i => i >= 0).sort((a, b) => a - b)[0];\n if (start !== undefined) jsonText = content.slice(start).trim();\n }\n try {\n const raw = JSON.parse(jsonText ?? content);\n parsed = schema.parse(raw) as TOutput;\n } catch {}\n }\n\n emit({ type: \"finalAnswer\", content: typeof finalMsg?.content === 'string' ? finalMsg.content : content });\n if (streamEnabled && content) {\n onStream?.({ text: content, isFinal: true });\n emit({ type: \"stream\", text: content, isFinal: true });\n }\n\n return {\n content,\n output: parsed as TOutput | undefined,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n return createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n const res = await instance.invoke({ messages: [{ role: 'user', content: input } as any] });\n return {\n content: res.content,\n output: res.output,\n summary: res.state?.summaries?.[res.state.summaries.length - 1],\n };\n }\n });\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\",\n runtime.todoListPrompt,\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage || (response as any)?.response_metadata?.token_usage || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type { BaseMessage, MemoryFact, ResolvedSmartAgentConfig, SmartState, StructuredSummary } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\nfunction messageText(message: BaseMessage): string {\n if (typeof message.content === \"string\") return message.content;\n if (Array.isArray(message.content)) {\n return message.content.map((part: any) => (typeof part === \"string\" ? part : part?.text ?? part?.content ?? JSON.stringify(part))).join(\" \");\n }\n return \"\";\n}\n\nfunction collectRecentTurns(messages: BaseMessage[], lastTurnsToKeep: number): BaseMessage[] {\n if (lastTurnsToKeep <= 0) return [];\n const systemPrefix = messages.filter((message, index) => index === 0 && message.role === \"system\");\n const body = systemPrefix.length > 0 ? messages.slice(1) : [...messages];\n let userTurnCount = 0;\n const collected: BaseMessage[] = [];\n\n for (let index = body.length - 1; index >= 0; index -= 1) {\n const message = body[index];\n collected.unshift(message);\n if (message.role === \"user\") {\n userTurnCount += 1;\n if (userTurnCount >= lastTurnsToKeep) break;\n }\n }\n\n return [...systemPrefix, ...collected];\n}\n\nexport function renderStructuredSummary(summary: StructuredSummary | undefined): string {\n if (!summary) return \"\";\n const lines = [\"Context summary:\"];\n if (summary.stable_facts.length > 0) {\n lines.push(\"Stable facts:\");\n lines.push(...summary.stable_facts.map((fact) => `- ${fact.key}: ${fact.value}`));\n }\n if (summary.active_goals.length > 0) {\n lines.push(\"Active goals:\");\n lines.push(...summary.active_goals.map((goal) => `- ${goal}`));\n }\n if (summary.open_questions.length > 0) {\n lines.push(\"Open questions:\");\n lines.push(...summary.open_questions.map((question) => `- ${question}`));\n }\n if (summary.discarded_obsolete.length > 0) {\n lines.push(\"Discarded obsolete:\");\n lines.push(...summary.discarded_obsolete.map((item) => `- ${item}`));\n }\n return lines.join(\"\\n\");\n}\n\nfunction renderMemoryBlock(facts: MemoryFact[] | undefined): string {\n if (!facts || facts.length === 0) return \"\";\n return [\n \"Retrieved memory:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value}`),\n ].join(\"\\n\");\n}\n\nfunction clampToBudget(messages: BaseMessage[], maxContextTokens: number): BaseMessage[] {\n let working = [...messages];\n while (working.length > 2) {\n const tokenCount = countApproxTokens(working.map(messageText).join(\"\\n\"));\n if (tokenCount <= maxContextTokens) return working;\n\n const firstNonSystem = working.findIndex((message, index) => !(index === 0 && message.role === \"system\"));\n if (firstNonSystem < 0) break;\n working.splice(firstNonSystem, 1);\n }\n return working;\n}\n\nexport function buildModelMessages(state: SmartState, config: ResolvedSmartAgentConfig): BaseMessage[] {\n const rawMessages = (state.messages || []) as BaseMessage[];\n if (config.context.policy === \"raw\") {\n return clampToBudget(rawMessages, config.limits.maxContextTokens);\n }\n\n const recentMessages = collectRecentTurns(rawMessages, config.context.lastTurnsToKeep);\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n const summaryText = renderStructuredSummary(latestSummary);\n const memoryText = renderMemoryBlock(state.memoryFacts);\n const systemMessage = recentMessages[0]?.role === \"system\" ? recentMessages[0] : undefined;\n const body = systemMessage ? recentMessages.slice(1) : recentMessages;\n const syntheticContextMessages: BaseMessage[] = [];\n\n if (summaryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"context_summary\", content: summaryText });\n }\n if (memoryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"memory_context\", content: memoryText });\n }\n\n const assembled = [\n ...(systemMessage ? [systemMessage] : []),\n ...syntheticContextMessages,\n ...(config.context.policy === \"summary_only\" ? body.filter((message) => message.role === \"user\" || message.role === \"assistant\").slice(-2) : body),\n ];\n\n return clampToBudget(assembled, config.limits.maxContextTokens);\n}\n\nexport function estimateContextRotScore(state: SmartState): number {\n const summaryCount = state.summaryRecords?.length || 0;\n const archivedCount = state.toolHistoryArchived?.length || 0;\n const messageCount = state.messages?.length || 0;\n const summarizedMessages = state.messages?.filter((message) => message.role === \"tool\" && message.content === \"SUMMARIZED\").length || 0;\n const numerator = (summaryCount * 2) + archivedCount + summarizedMessages;\n const denominator = Math.max(messageCount, 1);\n return Number((numerator / denominator).toFixed(3));\n}","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type {\n SmartAgentOptions,\n SmartState,\n BaseMessage,\n SmartAgentEvent,\n StructuredSummary,\n SummarizationEvent,\n SummaryIntegrityCheck,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { recordTraceEvent, sanitizeTracePayload } from \"../utils/tracing.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { renderStructuredSummary } from \"../smart/contextPolicy.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\nfunction isSyntheticSummaryToolMessage(message: BaseMessage): boolean {\n return message.role === 'tool' && message.name === 'summarize_context';\n}\n\nfunction isSyntheticSummaryAssistantMessage(message: BaseMessage): boolean {\n if (message.role !== 'assistant' || !Array.isArray(message.tool_calls)) {\n return false;\n }\n\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n}\n\n/**\n * Validates message sequence to ensure OpenAI API compatibility.\n * Every tool message must follow an assistant message with a matching tool_call.\n * This prevents \"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'\" errors.\n */\nfunction validateMessageSequence(messages: BaseMessage[]): BaseMessage[] {\n const validated: BaseMessage[] = [];\n const pendingToolCallIds = new Set<string>();\n \n for (const m of messages) {\n if (m.role === 'assistant') {\n // Clear any pending tool calls when we see a new assistant message without tool_calls\n if (!m.tool_calls || m.tool_calls.length === 0) {\n pendingToolCallIds.clear();\n } else {\n // Register new tool calls\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) pendingToolCallIds.add(tc.id);\n });\n }\n validated.push(m);\n } else if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n // Only include tool messages that have a pending (expected) tool_call_id\n if (toolCallId && pendingToolCallIds.has(toolCallId)) {\n pendingToolCallIds.delete(toolCallId);\n validated.push(m);\n }\n // Otherwise, this is an orphan tool message - skip it\n } else {\n // user, system messages - always include\n validated.push(m);\n }\n }\n \n return validated;\n}\n\n/**\n * Gets the summarization configuration normalized\n */\nfunction extractJsonObject(text: string): string | null {\n const fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenced?.[1]) return fenced[1].trim();\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start >= 0 && end > start) {\n return text.slice(start, end + 1);\n }\n return null;\n}\n\nfunction normalizeStructuredSummary(input: any, fallbackText: string): StructuredSummary {\n const summary: StructuredSummary = {\n stable_facts: Array.isArray(input?.stable_facts)\n ? input.stable_facts\n .filter((fact: any) => fact && typeof fact === \"object\")\n .map((fact: any) => ({\n key: String(fact.key || \"unknown\"),\n value: String(fact.value || \"\"),\n confidence: typeof fact.confidence === \"number\" ? fact.confidence : 0.7,\n source: fact.source ? String(fact.source) : undefined,\n }))\n : [],\n active_goals: Array.isArray(input?.active_goals) ? input.active_goals.map((goal: any) => String(goal)) : [],\n open_questions: Array.isArray(input?.open_questions) ? input.open_questions.map((question: any) => String(question)) : [],\n discarded_obsolete: Array.isArray(input?.discarded_obsolete || input?.obsolete_discarded)\n ? (input.discarded_obsolete || input.obsolete_discarded).map((item: any) => String(item))\n : [],\n rawSummary: typeof input?.rawSummary === \"string\" ? input.rawSummary : fallbackText,\n };\n\n if (summary.stable_facts.length === 0 && fallbackText) {\n const importantLines = fallbackText\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(0, 8);\n summary.stable_facts = importantLines.map((line, index) => ({\n key: `fact_${index + 1}`,\n value: line,\n confidence: 0.5,\n }));\n }\n\n return summary;\n}\n\nfunction normalizeFactKeySegment(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n || \"item\";\n}\n\nfunction extractCanonicalFacts(messages: BaseMessage[]): StructuredSummary[\"stable_facts\"] {\n const facts = new Map<string, StructuredSummary[\"stable_facts\"][number]>();\n\n for (const message of messages) {\n const content = typeof message.content === \"string\"\n ? message.content\n : Array.isArray(message.content)\n ? message.content.map((part: any) => part?.text ?? part?.content ?? String(part ?? \"\")).join(\"\\n\")\n : \"\";\n if (!content) continue;\n\n const lines = content.split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n for (const line of lines) {\n if (!/^[A-Z0-9_]+\\|/.test(line) || !line.includes(\"=\")) continue;\n\n const segments = line.split(\"|\").map((segment) => segment.trim()).filter(Boolean);\n const label = segments[0];\n const entries = segments.slice(1)\n .map((segment) => {\n const eqIndex = segment.indexOf(\"=\");\n if (eqIndex <= 0) return null;\n return {\n key: segment.slice(0, eqIndex).trim(),\n value: segment.slice(eqIndex + 1).trim(),\n };\n })\n .filter((entry): entry is { key: string; value: string } => Boolean(entry?.key));\n if (entries.length === 0) continue;\n\n const identifier = entries.find((entry) => [\"code\", \"id\", \"project\", \"name\", \"key\"].includes(entry.key.toLowerCase()))?.value;\n const keyPrefix = [normalizeFactKeySegment(label), identifier ? normalizeFactKeySegment(identifier) : undefined]\n .filter(Boolean)\n .join(\".\");\n\n for (const entry of entries) {\n const normalizedEntryKey = normalizeFactKeySegment(entry.key);\n const factKey = keyPrefix ? `${keyPrefix}.${normalizedEntryKey}` : `${normalizeFactKeySegment(label)}.${normalizedEntryKey}`;\n facts.set(factKey, {\n key: factKey,\n value: entry.value,\n confidence: 0.98,\n source: \"canonical_tool_output\",\n });\n }\n }\n }\n\n return [...facts.values()];\n}\n\nfunction mergeStableFacts(\n summary: StructuredSummary,\n additionalFacts: StructuredSummary[\"stable_facts\"],\n): StructuredSummary {\n if (additionalFacts.length === 0) return summary;\n\n const merged = new Map(summary.stable_facts.map((fact) => [fact.key, fact]));\n for (const fact of additionalFacts) {\n const existing = merged.get(fact.key);\n if (!existing || (fact.confidence || 0) >= (existing.confidence || 0)) {\n merged.set(fact.key, fact);\n }\n }\n\n return {\n ...summary,\n stable_facts: [...merged.values()],\n };\n}\n\nfunction runIntegrityCheck(previous: StructuredSummary | undefined, current: StructuredSummary): SummaryIntegrityCheck {\n const notes: string[] = [];\n const previousKeys = new Set((previous?.stable_facts || []).map((fact) => fact.key));\n const currentKeys = new Set(current.stable_facts.map((fact) => fact.key));\n const obsoleteKeys = new Set(current.discarded_obsolete);\n const criticalFactLoss = [...previousKeys].some((key) => !obsoleteKeys.has(key) && !currentKeys.has(key));\n const obsoleteFactRevived = current.stable_facts.some((fact) => obsoleteKeys.has(fact.key));\n\n if (criticalFactLoss) {\n notes.push(\"Missing previously retained facts; merged forward during integrity repair.\");\n }\n if (obsoleteFactRevived) {\n notes.push(\"Obsolete facts reappeared; removed during integrity repair.\");\n }\n\n return {\n passed: !criticalFactLoss && !obsoleteFactRevived,\n criticalFactLoss,\n obsoleteFactRevived,\n notes,\n };\n}\n\nfunction repairStructuredSummary(previous: StructuredSummary | undefined, current: StructuredSummary, integrity: SummaryIntegrityCheck): StructuredSummary {\n if (!previous) return current;\n const nextFacts = [...current.stable_facts];\n if (integrity.criticalFactLoss) {\n const existingKeys = new Set(nextFacts.map((fact) => fact.key));\n for (const fact of previous.stable_facts) {\n if (!existingKeys.has(fact.key) && !current.discarded_obsolete.includes(fact.key)) {\n nextFacts.push(fact);\n }\n }\n }\n const filteredFacts = integrity.obsoleteFactRevived\n ? nextFacts.filter((fact) => !current.discarded_obsolete.includes(fact.key))\n : nextFacts;\n return { ...current, stable_facts: filteredFacts };\n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n const config = resolved.summarization;\n if (!config.enable) return {};\n\n const model = (opts as any).model;\n const messages = state.messages || [];\n\n // Get onEvent and traceSession from state context\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n // Check if there are any tool messages that can be compressed\n const compressableMessages = messages.filter(\n (m) => m.role === 'tool' && m.content !== \"SUMMARIZED\" && !isSyntheticSummaryToolMessage(m),\n );\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // Calculate token count before summarization\n const allTextBefore = messages\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCountBefore = countApproxTokens(allTextBefore);\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // IMPORTANT: We must truncate the conversation to fit within summaryPromptMaxTokens\n // to avoid \"input too large\" errors from the model.\n \n // Build conversation text from RECENT messages, respecting token budget\n const summaryPromptMaxTokens = config.summaryPromptMaxTokens;\n // Reserve ~500 tokens for the system prompt and instructions\n const availableTokensForConversation = summaryPromptMaxTokens - 500;\n \n // Build messages from newest to oldest, stopping when we hit the budget\n const messageTexts: string[] = [];\n let accumulatedTokens = 0;\n \n // Process messages from end to start (most recent first)\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (isSyntheticSummaryToolMessage(m) || isSyntheticSummaryAssistantMessage(m)) {\n continue;\n }\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n \n // Truncate individual message content if it's too large (e.g., huge tool outputs)\n const maxContentLength = 2000; // ~500 tokens per message max\n if (content.length > maxContentLength) {\n content = content.substring(0, maxContentLength) + \"... [TRUNCATED]\";\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n const messageText = `${prefix}: ${content}`;\n const messageTokens = countApproxTokens(messageText);\n \n if (accumulatedTokens + messageTokens > availableTokensForConversation) {\n // We've hit our budget, stop adding more messages\n // Add a note that earlier messages were omitted\n messageTexts.unshift(\"[Earlier conversation history omitted for brevity]\");\n break;\n }\n \n messageTexts.unshift(messageText);\n accumulatedTokens += messageTokens;\n }\n \n const conversationText = messageTexts.join(\"\\n\\n\");\n const canonicalFacts = extractCanonicalFacts(compressableMessages);\n\n const previousSummary = Array.isArray(state.summaries) && state.summaries.length > 0\n ? state.summaries[state.summaries.length - 1]\n : \"\";\n const previousStructuredSummary = Array.isArray(state.summaryRecords) && state.summaryRecords.length > 0\n ? state.summaryRecords[state.summaryRecords.length - 1]\n : undefined;\n\n const defaultPrompt = `Summarize the conversation into strict JSON.\n\nReturn exactly one JSON object with this schema:\n{\n \"stable_facts\": [{ \"key\": string, \"value\": string, \"confidence\": number }],\n \"active_goals\": [string],\n \"open_questions\": [string],\n \"discarded_obsolete\": [string],\n \"rawSummary\": string\n}\n\nRules:\n- Keep stable_facts only for facts that future turns must remember.\n- Put invalidated or superseded fact keys in discarded_obsolete.\n- Preserve active_goals still relevant to the user.\n- Preserve unresolved questions.\n- Do not include prose outside JSON.\n- Target compression ratio: ${config.summaryCompressionRatioTarget}.\n- Summary mode: ${config.summaryMode}.\n\nPrevious summary text:\n${previousSummary || \"(none)\"}\n\nPrevious structured summary:\n${previousStructuredSummary ? JSON.stringify(previousStructuredSummary) : \"(none)\"}\n\nConversation:\n${conversationText}\n\nCanonical facts extracted from tool outputs:\n${canonicalFacts.length > 0 ? canonicalFacts.map((fact) => `- ${fact.key}: ${fact.value}`).join(\"\\n\") : \"(none)\"}`;\n\n const template = config.promptTemplate || defaultPrompt;\n const promptBody = template\n .replace(/\\{\\{\\s*conversation\\s*\\}\\}/g, conversationText)\n .replace(/\\{\\{\\s*previousSummary\\s*\\}\\}/g, previousSummary || \"\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently. Return strict JSON only.\"),\n humanMessage(promptBody)\n ];\n\n // Estimate input tokens for the summarization prompt (fallback if model doesn't provide usage)\n const inputTokensEstimate = countApproxTokens(summaryPrompt.map(m => m.content).join(\"\\n\"));\n\n let summaryText = \"Summary unavailable.\";\n let structuredSummary: StructuredSummary | undefined;\n let integrity: SummaryIntegrityCheck | undefined;\n let outputTokensEstimate = 0;\n let durationMs = 0;\n let inputTokensActual: number | undefined;\n let outputTokensActual: number | undefined;\n let cachedInputTokens: number | undefined;\n let totalTokensActual: number | undefined;\n \n const startTime = Date.now();\n try {\n if (!model || typeof model.invoke !== \"function\") {\n throw new Error(\"Summarization model is unavailable.\");\n }\n const response = await model.invoke(summaryPrompt);\n durationMs = Date.now() - startTime;\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n outputTokensEstimate = countApproxTokens(summaryText);\n\n const jsonText = extractJsonObject(summaryText);\n const parsed = jsonText ? JSON.parse(jsonText) : undefined;\n structuredSummary = normalizeStructuredSummary(parsed, summaryText);\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = config.integrityCheck\n ? runIntegrityCheck(previousStructuredSummary, structuredSummary)\n : { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [] };\n if (integrity && !integrity.passed) {\n structuredSummary = repairStructuredSummary(previousStructuredSummary, structuredSummary, integrity);\n integrity = { ...integrity, passed: true };\n }\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Extract actual token usage from model response if available\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n if (normalized) {\n inputTokensActual = normalized.prompt_tokens;\n outputTokensActual = normalized.completion_tokens;\n totalTokensActual = normalized.total_tokens;\n cachedInputTokens = normalized.prompt_tokens_details?.cached_tokens;\n }\n } catch (err: any) {\n durationMs = Date.now() - startTime;\n structuredSummary = normalizeStructuredSummary(undefined, previousSummary || conversationText.slice(0, 800));\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [\"Fallback summary generated locally.\"] };\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Emit error event for onEvent\n const errorEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter: tokenCountBefore,\n structuredSummary,\n integrity,\n };\n onEvent?.(errorEvent);\n \n // Record trace event for error\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization Failed\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"error\",\n durationMs,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: sanitizeTracePayload(summaryPrompt),\n });\n // Continue with local fallback summary to avoid losing the compaction step.\n }\n\n // 2. Build a map of tool_call_id -> assistant message index\n // This ensures we only keep tool messages that have a matching assistant with tool_calls\n const toolCallIdToAssistantIdx = new Map<string, number>();\n messages.forEach((m, idx) => {\n if (m.role === 'assistant' && m.tool_calls && Array.isArray(m.tool_calls)) {\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) {\n toolCallIdToAssistantIdx.set(tc.id, idx);\n }\n });\n }\n });\n\n // 3. Modify existing messages\n // Replace content of tool messages with \"SUMMARIZED\", but only if they have a matching assistant.\n // Filter out orphan tool messages that don't have a preceding assistant with tool_calls.\n const newMessages = messages.map((m) => {\n if (m.role === 'tool') {\n if (isSyntheticSummaryToolMessage(m)) {\n return m;\n }\n const toolCallId = m.tool_call_id;\n \n // Check if this tool message has a matching assistant with tool_calls\n if (!toolCallId || !toolCallIdToAssistantIdx.has(toolCallId)) {\n // Orphan tool message - mark for removal\n return null;\n }\n \n // Check if it's already summarized to avoid double-processing\n if (m.content === \"SUMMARIZED\") return m;\n \n return { \n ...m, \n content: \"SUMMARIZED\" \n };\n }\n return m;\n }).filter((m): m is NonNullable<typeof m> => m !== null);\n\n // 4. Validate message sequence - ensure every tool message follows an assistant with matching tool_calls\n const validatedMessages = validateMessageSequence(newMessages);\n\n // 5. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n const summaries = Array.isArray(state.summaries) ? [...state.summaries, summaryText] : [summaryText];\n const summaryRecords = Array.isArray(state.summaryRecords)\n ? [...state.summaryRecords, { ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }]\n : [{ ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }];\n\n // Calculate token count after summarization\n const finalMessages = [...validatedMessages, assistantSummaryCall, toolSummaryResponse];\n const allTextAfter = finalMessages\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCountAfter = countApproxTokens(allTextAfter);\n\n // Emit successful summarization event (use actual values from model response if available, fallback to estimates)\n const summarizationEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual ?? ((inputTokensActual ?? inputTokensEstimate) + (outputTokensActual ?? outputTokensEstimate)),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter,\n archivedCount: compressableMessages.length, // deprecated field for backward compatibility\n structuredSummary,\n integrity,\n };\n onEvent?.(summarizationEvent);\n\n // Record trace event for successful summarization\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"success\",\n durationMs,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual,\n messageList: sanitizeTracePayload([\n ...summaryPrompt,\n { role: \"assistant\", content: summaryText, name: \"summarization_result\" }\n ]),\n debug: {\n messagesCompressed: compressableMessages.length,\n tokenCountBefore,\n tokenCountAfter,\n tokensSaved: tokenCountBefore - tokenCountAfter,\n previousSummaryLength: previousSummary?.length || 0,\n usageFromModel: inputTokensActual !== undefined,\n cachedInputTokens: cachedInputTokens,\n integrity,\n },\n });\n\n return {\n messages: finalMessages as any,\n summaries,\n summaryRecords,\n watchdog: {\n ...(state.watchdog || {}),\n compactions: (state.watchdog?.compactions || 0) + 1,\n lastAction: \"summarized\",\n },\n };\n };\n}\n","import { countApproxTokens } from \"./utilTokens.js\";\nimport { Message } from \"../types.js\";\n\nexport type TokenLimits = {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n};\n\nexport async function applyTokenLimits({\n state,\n limits,\n}: {\n state: { messages: Message[]; summaries?: string[] };\n limits: {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n };\n}) {\n const messages = state.messages || [];\n const budget = limits.contextTokenLimit;\n let total = messages.reduce((acc, m) => acc + countApproxTokens(String((m as any).content || \"\")), 0);\n if (total <= budget) return state;\n\n // Trim oldest non-system messages until we're under budget\n const newMessages: Message[] = [...messages];\n while (total > budget && newMessages.length > 1) {\n // Find the first non-system message to remove (preserve system messages)\n const idx = newMessages.findIndex(m => m.role !== 'system');\n if (idx === -1) break; // Only system messages left\n const removed = newMessages.splice(idx, 1)[0];\n total -= countApproxTokens(String((removed as any).content || \"\"));\n }\n\n return { ...state, messages: newMessages };\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\n// no message helpers needed here\n\nconst todoStatusSchema = z.enum([\"not-started\", \"in-progress\", \"completed\", \"blocked\"]);\n\nconst todoWriteItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Sequential id starting from 1\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema,\n evidence: z.string().max(300).optional(),\n});\n\nconst todoUpdateItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Existing todo id to update\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema.optional(),\n evidence: z.string().max(300).optional(),\n});\n\nfunction normalizeTodoItem(item: any, existing?: any) {\n const id = item.id ?? existing?.id;\n const step = item.step || item.title || item.description || existing?.step || existing?.title || existing?.description || `Step ${id}`;\n const title = item.title || item.step || existing?.title || existing?.step || `Step ${id}`;\n const description = item.description || item.step || item.title || existing?.description || existing?.step || existing?.title || `Step ${id}`;\n\n return {\n ...existing,\n ...item,\n id,\n step,\n title,\n description,\n owner: item.owner || existing?.owner || \"agent\",\n exitCriteria: item.exitCriteria || existing?.exitCriteria || description || `Complete step ${id}`,\n status: item.status || existing?.status,\n evidence: item.evidence ?? existing?.evidence,\n };\n}\n\nfunction validatePlanInvariants(todoList: any[], requireSequentialIds: boolean) {\n const ids = todoList.map((item) => item.id);\n const uniqueIds = new Set(ids);\n if (uniqueIds.size !== ids.length) {\n return { ok: false, error: \"Todo ids must be unique.\" } as const;\n }\n\n if (requireSequentialIds) {\n const expectedIds = Array.from({ length: todoList.length }, (_, index) => index + 1);\n const isSequential = ids.every((id, index) => id === expectedIds[index]);\n if (!isSequential) {\n return { ok: false, error: \"Todo ids must be sequential starting from 1 for write operations.\" } as const;\n }\n }\n\n const inProgressCount = todoList.filter((item) => item.status === \"in-progress\").length;\n if (inProgressCount > 1) {\n return { ok: false, error: \"Only one todo item may be in-progress at a time.\" } as const;\n }\n\n return { ok: true } as const;\n}\n\nfunction calculateAdherenceScore(todoList: any[]) {\n const completedCount = todoList.filter((item) => item.status === \"completed\").length;\n return todoList.length === 0 ? 1 : Number((completedCount / todoList.length).toFixed(2));\n}\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: { toolHistory?: any[]; toolHistoryArchived?: any[]; todoList?: any[]; planVersion?: number; adherenceScore?: number },\n opts?: { planningEnabled?: boolean; outputSchema?: any }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session.\\n\\nOperations:\\n- read: return the current plan\\n- write: replace the full plan with a complete ordered todoList\\n- update: patch existing todo items by id without resending the whole plan\\n\\nRules:\\n- Use write only when creating or fully rewriting the plan\\n- After a plan exists, prefer update for status, evidence, or owner changes\\n- Update payloads should contain only the changed items\\n- When using update, pass expectedVersion to avoid overwriting a newer plan\\n- Keep ids unique; write operations must keep ids sequential starting from 1\\n- Keep at most ONE item in-progress at a time\\n- If update fails due to version mismatch, read the latest plan and retry\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\", \"update\"]),\n expectedVersion: z.number().int().min(0).optional(),\n todoList: z.array(z.union([todoWriteItemSchema, todoUpdateItemSchema])).optional()\n }),\n func: async ({ operation, expectedVersion, todoList }) => {\n const onEvent = (manageTodo as any)._stateRef?.__onEvent as undefined | ((e: any) => void);\n const currentVersion = stateRef.planVersion || 0;\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"read\", todoList: list, version: stateRef.planVersion || 1, adherenceScore: stateRef.adherenceScore || 0 });\n return list;\n }\n\n if (typeof expectedVersion === \"number\" && expectedVersion !== currentVersion) {\n return {\n status: \"error\",\n operation,\n error: \"Plan version mismatch. Read the latest plan and retry.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (!Array.isArray(todoList)) {\n return {\n status: \"error\",\n operation,\n error: \"todoList is required for write and update operations.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (operation === \"write\") {\n const parsed = z.array(todoWriteItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for write.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const normalizedList = parsed.data.map((item) => normalizeTodoItem(item));\n const validation = validatePlanInvariants(normalizedList, true);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = normalizedList;\n } else if (operation === \"update\") {\n const parsed = z.array(todoUpdateItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for update.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const currentList = Array.isArray(stateRef.todoList) ? stateRef.todoList : [];\n if (currentList.length === 0) {\n return {\n status: \"error\",\n operation,\n error: \"No existing plan to update. Use write first.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n const patchIds = new Set<number>();\n for (const item of parsed.data) {\n if (patchIds.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: \"Update payload contains duplicate todo ids.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n patchIds.add(item.id);\n }\n\n const currentMap = new Map(currentList.map((item) => [item.id, item]));\n for (const item of parsed.data) {\n if (!currentMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: `Cannot update missing todo id ${item.id}. Use write to replace the plan.`,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n }\n\n const mergedList = currentList.map((item) => {\n const patch = parsed.data.find((candidate) => candidate.id === item.id);\n return patch ? normalizeTodoItem(patch, item) : item;\n });\n const validation = validatePlanInvariants(mergedList, false);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = mergedList;\n }\n\n stateRef.planVersion = currentVersion + 1;\n stateRef.adherenceScore = calculateAdherenceScore(stateRef.todoList || []);\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n version: stateRef.planVersion || 1,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation, todoList: stateRef.todoList, version: stateRef.planVersion || 1, adherenceScore: stateRef.adherenceScore || 0 });\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n tools.push(manageTodo);\n }\n\n // get_tool_response retrieves original raw output by executionId\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE the full output of a tool execution whose response was archived or dropped. When a tool response appears as 'ARCHIVED_TOOL_RESPONSE [executionId=xxx]' or 'DROPPED_TOOL_RESPONSE [executionId=xxx]', pass that exact executionId to this tool to get the complete data. You can also pass the tool_call_id from your original tool call.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id\") }),\n func: async ({ executionId }) => {\n const matchesExecution = (t: any) => t?.executionId === executionId || t?.tool_call_id === executionId;\n let execution = stateRef.toolHistory?.find((t) => matchesExecution(t));\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => matchesExecution(t));\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n // mark mutable stateRef for toolsNode sync\n (getTool as any)._stateRef = stateRef;\n tools.push(getTool);\n\n // Structured output finalize tool (response) if outputSchema provided\n if (opts?.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema.shape ? opts.outputSchema : z.any(),\n func: async (data: any) => {\n // Validate directly against provided schema\n try {\n const validated = opts.outputSchema.parse ? opts.outputSchema.parse(data) : data;\n // store parsed result for toolsNode to pick up (toolsNode already looks for __finalStructuredOutput?)\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n return { error: 'Schema validation failed', details: e?.message };\n }\n }\n });\n (responseTool as any)._stateRef = stateRef;\n tools.push(responseTool);\n }\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\n\nfunction isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n if ((state.ctx as any)?.__needsSummarization) {\n return true;\n }\n\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n if (!resolved.summarization.enable) {\n return false;\n }\n\n const maxTok = resolved.summarization.summaryTriggerTokens;\n\n try {\n const allText = (state.messages || [])\n .filter((message: any) => !isSyntheticSummaryMessage(message))\n .map((m: any) => {\n if (typeof m.content === \"string\") return m.content;\n if (Array.isArray(m.content)) {\n return m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? JSON.stringify(c))).join('');\n }\n // Handle object content (e.g., tool results)\n if (m.content && typeof m.content === 'object') {\n return JSON.stringify(m.content);\n }\n return '';\n })\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n const contextRotScore = state.watchdog?.contextRotScore || 0;\n const needsSum = tokenCount > maxTok || (\n resolved.watchdog.enabled\n && resolved.watchdog.autoCompaction\n && contextRotScore >= resolved.watchdog.contextRotThreshold\n );\n // Debug log for development - can be removed in production\n if (process.env.DEBUG_SUMMARIZATION) {\n const msgCount = (state.messages || []).length;\n const toolMsgs = (state.messages || []).filter((m: any) => m.role === 'tool');\n const toolDetails = toolMsgs.map((m: any, i: number) => {\n const contentStr = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);\n return `[${i}] id:${m.tool_call_id?.slice(-8) || 'none'} len:${contentStr.length} preview:\"${contentStr.slice(0, 30)}...\"`;\n });\n console.log(`[Summarization] Messages: ${msgCount}, Tool messages: ${toolMsgs.length}`);\n toolDetails.forEach(d => console.log(` ${d}`));\n console.log(`[Summarization] Token count: ${tokenCount}, Max: ${maxTok}, Context rot: ${contextRotScore}, Needs summarization: ${needsSum}`);\n }\n return needsSum;\n } catch {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function finalizeDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function finalizeDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n","import type {\n MemoryFact,\n MemoryReadPolicy,\n MemoryScope,\n MemoryStore,\n ResolvedSmartAgentConfig,\n StructuredSummary,\n} from \"../types.js\";\n\ntype ScopeMap = Map<MemoryScope, MemoryFact[]>;\n\nfunction normalizeFact(scope: MemoryScope, fact: MemoryFact): MemoryFact {\n return {\n ...fact,\n scope,\n obsolete: fact.obsolete ?? false,\n lastUpdatedAt: fact.lastUpdatedAt ?? new Date().toISOString(),\n confidence: Number.isFinite(fact.confidence) ? fact.confidence : 0.5,\n };\n}\n\nexport class InMemoryMemoryStore implements MemoryStore {\n private readonly buckets: ScopeMap = new Map();\n\n async get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]> {\n const includeObsolete = options?.includeObsolete === true;\n const all = [...(this.buckets.get(scope) || [])]\n .filter((fact) => includeObsolete || !fact.obsolete)\n .sort((left, right) => new Date(right.lastUpdatedAt || 0).getTime() - new Date(left.lastUpdatedAt || 0).getTime());\n return typeof options?.limit === \"number\" ? all.slice(0, options.limit) : all;\n }\n\n async upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void> {\n const existing = [...(this.buckets.get(scope) || [])];\n\n for (const fact of facts) {\n const normalized = normalizeFact(scope, fact);\n const sameKey = existing.filter((entry) => entry.key === normalized.key && !entry.obsolete);\n for (const entry of sameKey) {\n if (entry.value !== normalized.value) {\n entry.obsolete = true;\n entry.lastUpdatedAt = new Date().toISOString();\n }\n }\n\n const match = existing.find((entry) => entry.key === normalized.key && entry.value === normalized.value && !entry.obsolete);\n if (match) {\n match.confidence = Math.max(match.confidence, normalized.confidence);\n match.sourceTurn = normalized.sourceTurn;\n match.ttl = normalized.ttl;\n match.tags = normalized.tags;\n match.lastUpdatedAt = normalized.lastUpdatedAt;\n } else {\n existing.push(normalized);\n }\n }\n\n this.buckets.set(scope, existing);\n }\n\n async markObsolete(scope: MemoryScope, keys: string[]): Promise<void> {\n const bucket = this.buckets.get(scope) || [];\n const now = new Date().toISOString();\n for (const fact of bucket) {\n if (keys.includes(fact.key)) {\n fact.obsolete = true;\n fact.lastUpdatedAt = now;\n }\n }\n this.buckets.set(scope, bucket);\n }\n\n async semanticSearch(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]> {\n const normalizedQuery = query.toLowerCase();\n const bucket = (this.buckets.get(scope) || []).filter((fact) => !fact.obsolete);\n const scored = bucket\n .map((fact) => {\n const haystack = `${fact.key} ${fact.value} ${(fact.tags || []).join(\" \")}`.toLowerCase();\n const score = haystack.includes(normalizedQuery) ? 2 : normalizedQuery.split(/\\s+/).filter(Boolean).reduce((acc, token) => acc + (haystack.includes(token) ? 1 : 0), 0);\n return { fact, score };\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.fact.confidence - left.fact.confidence)\n .map((entry) => entry.fact);\n return typeof options?.limit === \"number\" ? scored.slice(0, options.limit) : scored;\n }\n}\n\nexport function resolveMemoryStore(config: ResolvedSmartAgentConfig): MemoryStore | undefined {\n if (config.memory.store) return config.memory.store;\n if (config.memory.provider === \"inMemory\") return new InMemoryMemoryStore();\n return undefined;\n}\n\nexport async function readMemoryFacts(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n query: string,\n): Promise<MemoryFact[]> {\n if (!store) return [];\n const scope = config.memory.scope;\n const limit = config.context.lastTurnsToKeep;\n const policy: MemoryReadPolicy = config.memory.readPolicy;\n\n if (policy === \"recent_only\") {\n return store.get(scope, { limit });\n }\n\n if (policy === \"semantic\" && typeof store.semanticSearch === \"function\") {\n return store.semanticSearch(scope, query, { limit });\n }\n\n if (policy === \"hybrid\") {\n const recent = await store.get(scope, { limit: Math.max(3, Math.ceil(limit / 2)) });\n const semantic = typeof store.semanticSearch === \"function\"\n ? await store.semanticSearch(scope, query, { limit: Math.max(3, Math.ceil(limit / 2)) })\n : [];\n const deduped = new Map<string, MemoryFact>();\n for (const fact of [...semantic, ...recent]) {\n deduped.set(`${fact.key}:${fact.value}`, fact);\n }\n return [...deduped.values()].slice(0, limit);\n }\n\n return store.get(scope, { limit });\n}\n\nexport async function writeSummaryFactsToMemory(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n summary: StructuredSummary | undefined,\n sourceTurn: number,\n): Promise<MemoryFact[]> {\n if (!store || !summary) return [];\n\n const facts: MemoryFact[] = summary.stable_facts.map((fact) => ({\n key: fact.key,\n value: fact.value,\n sourceTurn,\n confidence: fact.confidence ?? 0.8,\n obsolete: false,\n tags: [\"summary_fact\"],\n }));\n\n if (summary.discarded_obsolete.length > 0) {\n await store.markObsolete(config.memory.scope, summary.discarded_obsolete);\n }\n\n if (facts.length > 0) {\n await store.upsert(config.memory.scope, facts);\n }\n\n return store.get(config.memory.scope, { limit: config.context.lastTurnsToKeep + summary.stable_facts.length });\n}\n\nexport function renderMemoryFacts(facts: MemoryFact[]): string {\n if (facts.length === 0) return \"\";\n return [\n \"Memory facts:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value} (confidence ${fact.confidence.toFixed(2)})`),\n ].join(\"\\n\");\n}","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance } from \"../types.js\";\nimport type { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools } from \"../contextTools.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\nimport { normalizeSmartAgentOptions } from \"./runtimeConfig.js\";\nimport { buildModelMessages, estimateContextRotScore } from \"./contextPolicy.js\";\nimport { readMemoryFacts, resolveMemoryStore, writeSummaryFactsToMemory } from \"./memory.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n const resolved = normalizeSmartAgentOptions(opts);\n const planningEnabled = resolved.planning.mode !== 'off';\n const memoryStore = resolveMemoryStore(resolved);\n const runtimeOpts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> } = {\n ...opts,\n runtimeProfile: resolved.runtimeProfile,\n limits: resolved.limits,\n summarization: resolved.summarization,\n context: resolved.context,\n planning: resolved.planning,\n delegation: resolved.delegation,\n memory: { ...resolved.memory, store: memoryStore },\n toolResponses: resolved.toolResponses,\n watchdog: resolved.watchdog,\n useTodoList: planningEnabled,\n };\n\n // Prepare context tools (todo + get_tool_response). Avoid duplicating response tool; base agent will add it if schema provided.\n const stateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const contextTools = createContextTools(stateRef, { planningEnabled, outputSchema: undefined });\n const mergedTools = [...((opts.tools as any) ?? []), ...contextTools];\n\n // Compose base agent\n const base = createAgent<TOutput>({ ...runtimeOpts, tools: mergedTools });\n base.__runtime.runtimeProfile = resolved.runtimeProfile;\n base.__runtime.smart = resolved;\n\n const summarizationEnabled = resolved.summarization.enable !== false;\n const summarizer = summarizationEnabled ? createContextSummarizeNode(runtimeOpts) : undefined;\n const decideBefore = resolverDecisionFactory(runtimeOpts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(runtimeOpts, summarizationEnabled);\n\n const structuredOutputHint = opts.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const runtimeHint = [\n resolved.runtimeProfile === resolved.baseProfile\n ? `Runtime profile: ${resolved.runtimeProfile}.`\n : `Runtime profile: ${resolved.runtimeProfile} (base: ${resolved.baseProfile}).`,\n `Context policy: ${resolved.context.policy}.`,\n `Planning mode: ${resolved.planning.mode}. Replan policy: ${resolved.planning.replanPolicy}.`,\n `Delegation mode: ${resolved.delegation.mode}. Child context policy: ${resolved.delegation.childContextPolicy}.`,\n `Tool response policy: ${resolved.context.toolResponsePolicy}.`,\n ].join('\\n');\n\n function latestUserPrompt(messages: any[]): string {\n const latest = [...messages].reverse().find((message) => message.role === 'user');\n if (!latest) return '';\n return typeof latest.content === 'string'\n ? latest.content\n : Array.isArray(latest.content)\n ? latest.content.map((part: any) => (typeof part === 'string' ? part : part?.text ?? part?.content ?? '')).join(' ')\n : '';\n }\n\n async function syncMemory(state: SmartState): Promise<SmartState> {\n const query = latestUserPrompt(state.messages || []);\n const memoryFacts = await readMemoryFacts(memoryStore, resolved, query);\n return { ...state, memoryFacts };\n }\n\n async function persistLatestSummary(state: SmartState): Promise<SmartState> {\n if (!memoryStore) return state;\n if (resolved.memory.writePolicy === 'manual') return state;\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n if (!latestSummary) return state;\n if (resolved.memory.writePolicy === 'auto_important' && latestSummary.stable_facts.length === 0) {\n return state;\n }\n const memoryFacts = await writeSummaryFactsToMemory(memoryStore, resolved, latestSummary, Math.max(1, (state.messages || []).filter((message) => message.role === 'user').length));\n return { ...state, memoryFacts };\n }\n\n function syncPlanState(state: SmartState): SmartState {\n if (!Array.isArray(stateRef.todoList)) return state;\n return {\n ...state,\n plan: {\n version: stateRef.planVersion || state.planVersion || 1,\n steps: stateRef.todoList,\n lastUpdated: new Date().toISOString(),\n adherenceScore: stateRef.adherenceScore || 0,\n },\n planVersion: stateRef.planVersion || state.planVersion || 1,\n };\n }\n\n function systemMessage(): any {\n const sys = buildSystemPrompt(\n [opts.systemPrompt, runtimeHint, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n planningEnabled,\n opts.name || \"Agent\",\n opts.todoListPrompt,\n );\n return { role: 'system', content: sys } as any;\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // wire stateRef for context tools\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n stateRef.todoList = input.plan?.steps;\n stateRef.planVersion = input.planVersion || input.plan?.version || 0;\n stateRef.adherenceScore = input.plan?.adherenceScore || 0;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(), ...(input.messages || [])];\n let state: SmartState = await syncMemory({ ...input, messages: seedMessages } as SmartState);\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n let rawMessages = [...seedMessages];\n const effectiveMaxToolCalls = (config?.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number;\n const iterationLimit = Math.max(effectiveMaxToolCalls * 3 + 5, 30);\n let previousTokenCount = countApproxTokens(rawMessages.map((message: any) => typeof message.content === 'string' ? message.content : JSON.stringify(message.content)).join('\\n'));\n\n for (let i = 0; i < iterationLimit; i++) {\n state = { ...state, messages: rawMessages } as SmartState;\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n // Prevent infinite loop if summarizer returns no changes (e.g. error or nothing to summarize)\n if (!delta || Object.keys(delta).length === 0) {\n // Summarization failed to produce a change. Proceed to agent to avoid stall, \n // though it might hit token limits.\n } else {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n continue; // run decision again before calling base\n }\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const modelMessages = buildModelMessages(state, resolved);\n const res = await base.invoke({ ...state, messages: modelMessages } as SmartState, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n // Preserve summaries from current state when merging with result state\n const currentSummaries = state.summaries;\n const currentSummaryRecords = state.summaryRecords;\n const currentPlan = state.plan;\n const appendedMessages = res.messages.slice(modelMessages.length);\n rawMessages = [...rawMessages, ...appendedMessages];\n state = ((res.state as SmartState) || { ...state, messages: res.messages }) as SmartState;\n state = { ...state, messages: rawMessages } as SmartState;\n // Restore summaries if they were lost during state merge\n if (currentSummaries && currentSummaries.length > 0 && (!state.summaries || state.summaries.length === 0)) {\n state = { ...state, summaries: currentSummaries };\n }\n if (currentSummaryRecords && currentSummaryRecords.length > 0 && (!state.summaryRecords || state.summaryRecords.length === 0)) {\n state = { ...state, summaryRecords: currentSummaryRecords };\n }\n if (currentPlan && !state.plan) {\n state = { ...state, plan: currentPlan };\n }\n state = syncPlanState(await syncMemory(state));\n stateRef.toolHistory = state.toolHistory;\n stateRef.toolHistoryArchived = state.toolHistoryArchived;\n\n const currentTokenCount = countApproxTokens(rawMessages.map((message: any) => typeof message.content === 'string' ? message.content : JSON.stringify(message.content)).join('\\n'));\n const tokenDrift = Math.max(0, currentTokenCount - previousTokenCount);\n const toolMessagesThisTurn = appendedMessages.filter((message: any) => message.role === 'tool').length;\n const overToolingRate = appendedMessages.length === 0 ? 0 : Number((toolMessagesThisTurn / appendedMessages.length).toFixed(2));\n state = {\n ...state,\n watchdog: {\n tokenDrift,\n contextRotScore: estimateContextRotScore(state),\n overToolingRate,\n compactions: state.watchdog?.compactions || 0,\n lastAction: appendedMessages.length > 0 ? 'agent_turn' : state.watchdog?.lastAction,\n },\n };\n previousTokenCount = currentTokenCount;\n\n if (resolved.watchdog.enabled && resolved.watchdog.autoCompaction) {\n const shouldCompact = tokenDrift >= resolved.watchdog.tokenDriftThreshold\n || (state.watchdog?.overToolingRate || 0) >= resolved.watchdog.overToolingSpikeThreshold\n || (state.watchdog?.contextRotScore || 0) >= resolved.watchdog.contextRotThreshold;\n if (shouldCompact) {\n state = { ...state, ctx: { ...(state.ctx || {}), __needsSummarization: true } };\n }\n }\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n // Clear the flag\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n // Run summarization\n const delta = await summarizer(state);\n // If delta is valid, apply and loop back to retry the agent pass after compaction.\n // If delta is empty, summarization had nothing to compress — fall through to\n // the normal break logic so the loop can terminate.\n if (delta && Object.keys(delta).length > 0) {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n continue; // Loop will attempt another agent pass after summarization\n }\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n if (delta && Object.keys(delta).length > 0) {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n // Loop will attempt another agent pass\n continue;\n }\n }\n }\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n // Ensure summaries are preserved in the final result\n if (state.summaries && state.summaries.length > 0) {\n if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n } else {\n lastResult = { ...lastResult, state: { ...state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n }\n } else if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import type {\n EvalCase,\n EvalCaseResult,\n EvalHarnessMetrics,\n EvalProfileDescriptor,\n EvalProfileTarget,\n EvalHarnessResult,\n RuntimeProfile,\n SmartAgentEvent,\n SmartAgentInstance,\n SmartState,\n} from \"../types.js\";\n\nexport type EvalHarnessParams = {\n profiles: EvalProfileTarget[];\n cases: EvalCase[];\n createAgent: (profile: RuntimeProfile, descriptor: EvalProfileDescriptor) => SmartAgentInstance<any>;\n};\n\nfunction normalizeProfileTarget(target: EvalProfileTarget): EvalProfileDescriptor {\n if (typeof target === \"string\") {\n return {\n label: target,\n runtimeProfile: target,\n baseProfile: target === \"custom\" ? \"balanced\" : target,\n };\n }\n return {\n label: target.label,\n runtimeProfile: target.runtimeProfile,\n baseProfile: target.baseProfile ?? (target.runtimeProfile === \"custom\" ? target.customProfile?.extends ?? \"balanced\" : target.runtimeProfile),\n customProfile: target.customProfile,\n };\n}\n\nfunction normalizeText(value: string | undefined): string {\n return (value || \"\").toLowerCase();\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 1;\n return Number((numerator / denominator).toFixed(3));\n}\n\nfunction sum(values: number[]): number {\n return values.reduce((acc, value) => acc + value, 0);\n}\n\nfunction mean(values: number[]): number {\n if (values.length === 0) return 0;\n return Number((sum(values) / values.length).toFixed(3));\n}\n\nfunction extractTotalTokens(usage: any): number {\n if (!usage?.totals || typeof usage.totals !== \"object\") return 0;\n return Object.values(usage.totals).reduce((acc: number, entry: any) => acc + (Number(entry?.total) || 0), 0);\n}\n\nfunction caseResultFromRun(\n descriptor: EvalProfileDescriptor,\n testCase: EvalCase,\n content: string,\n events: SmartAgentEvent[],\n state: SmartState | undefined,\n latencyMs: number,\n totalTokens: number,\n): EvalCaseResult {\n const normalizedContent = normalizeText(content);\n const matchedPhrases = (testCase.expectedPhrases || []).filter((phrase) => normalizedContent.includes(normalizeText(phrase)));\n const matchedFacts = (testCase.expectedFacts || []).filter((fact) => {\n const memoryMatch = state?.memoryFacts?.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value)));\n const summaryMatch = state?.summaryRecords?.some((record) => record.stable_facts.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value))));\n return Boolean(memoryMatch || summaryMatch || normalizedContent.includes(normalizeText(fact.value)));\n });\n const forbiddenMisses = (testCase.forbiddenPhrases || []).filter((phrase) => !normalizedContent.includes(normalizeText(phrase)));\n const toolCalls = events.filter((event) => event.type === \"tool_call\" && event.phase === \"success\") as Array<Extract<SmartAgentEvent, { type: \"tool_call\" }>>;\n const expectedToolHits = (testCase.expectedToolNames || []).filter((toolName) => toolCalls.some((event) => event.name === toolName));\n const toolPrecision = ratio(expectedToolHits.length, Math.max(toolCalls.length, 1));\n const recallAccuracy = ratio(matchedPhrases.length + matchedFacts.length, (testCase.expectedPhrases?.length || 0) + (testCase.expectedFacts?.length || 0));\n const obsoleteDropAccuracy = ratio(forbiddenMisses.length, testCase.forbiddenPhrases?.length || 0);\n const trajectoryScore = ratio(expectedToolHits.length, testCase.expectedToolNames?.length || 0);\n const hadRecoverableError = events.some((event) => event.type === \"tool_call\" && event.phase === \"error\");\n const recoveryRate = hadRecoverableError ? Number((normalizedContent.length > 0 ? 1 : 0).toFixed(3)) : 1;\n const overToolingRate = toolCalls.length === 0 ? 0 : Number((Math.max(0, toolCalls.length - Math.max(testCase.expectedToolNames?.length || 0, 1)) / toolCalls.length).toFixed(3));\n const success = recallAccuracy >= 0.8 && obsoleteDropAccuracy >= 0.8;\n\n return {\n id: testCase.id,\n family: testCase.family,\n success,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore: Number(((trajectoryScore + toolPrecision) / 2).toFixed(3)),\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n notes: success ? [] : [\n recallAccuracy < 0.8 ? \"Recall below threshold.\" : \"\",\n obsoleteDropAccuracy < 0.8 ? \"Obsolete filtering below threshold.\" : \"\",\n trajectoryScore < 0.5 ? \"Tool trajectory diverged from expectation.\" : \"\",\n ].filter(Boolean),\n };\n}\n\nfunction aggregateMetrics(caseResults: EvalCaseResult[]): EvalHarnessMetrics {\n const taskSuccess = ratio(caseResults.filter((result) => result.success).length, caseResults.length);\n const recallAccuracy = mean(caseResults.map((result) => result.recallAccuracy));\n const obsoleteDropAccuracy = mean(caseResults.map((result) => result.obsoleteDropAccuracy));\n const trajectoryScore = mean(caseResults.map((result) => result.trajectoryScore));\n const recoveryRate = mean(caseResults.map((result) => result.recoveryRate));\n const overToolingRate = mean(caseResults.map((result) => result.overToolingRate));\n const latencyMs = mean(caseResults.map((result) => result.latencyMs));\n const totalTokens = sum(caseResults.map((result) => result.totalTokens || 0));\n const toolPrecision = trajectoryScore;\n const costScore = totalTokens <= 0 ? 1 : Number((1 / (1 + totalTokens / 10000)).toFixed(3));\n const score = Number((\n (0.45 * taskSuccess)\n + (0.20 * trajectoryScore)\n + (0.15 * toolPrecision)\n + (0.10 * recoveryRate)\n + (0.10 * costScore)\n ).toFixed(3));\n\n return {\n taskSuccess,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore,\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n score,\n };\n}\n\nexport async function runSmartAgentEvalHarness(params: EvalHarnessParams): Promise<EvalHarnessResult[]> {\n const results: EvalHarnessResult[] = [];\n\n for (const profileTarget of params.profiles) {\n const descriptor = normalizeProfileTarget(profileTarget);\n const caseResults: EvalCaseResult[] = [];\n\n for (const testCase of params.cases) {\n const agent = params.createAgent(descriptor.runtimeProfile, descriptor);\n const events: SmartAgentEvent[] = [];\n const startedAt = Date.now();\n const result = await agent.invoke({\n messages: [{ role: \"user\", content: testCase.prompt }],\n } as SmartState, {\n onEvent: (event) => {\n events.push(event);\n },\n });\n\n caseResults.push(caseResultFromRun(\n descriptor,\n testCase,\n result.content,\n events,\n result.state,\n Date.now() - startedAt,\n extractTotalTokens(result.metadata?.usage),\n ));\n }\n\n results.push({\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n metrics: aggregateMetrics(caseResults),\n cases: caseResults,\n });\n }\n\n return results;\n}","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/langchain.ts","../src/model.ts","../src/tool.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/smart/runtimeConfig.ts","../src/utils/utilTokens.ts","../src/smart/toolResponses.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/agent.ts","../src/nodes/agent.ts","../src/smart/contextPolicy.ts","../src/nodes/contextSummarize.ts","../src/utils/tokenManager.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/memory.ts","../src/smart/index.ts","../src/smart/eval.ts","../src/utils/content.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts"],"names":["wrapped","GuardrailPhase","path","status","durationMs","nanoid","entry","z","systemMessage","messageText","isSyntheticSummaryMessage"],"mappings":";;;;;;;;;;AAOA,IAAM,UAAA,GAAa,uBAAA;AACnB,IAAI,iBAAA;AACJ,IAAI,yBAAA,GAA4B,KAAA;AAEhC,IAAI,SAAA,GAAiD,IAAA;AACrD,IAAI;AACF,EAAA,SAAA,GAAY,aAAA,CAAc,YAAY,GAAG,CAAA;AAC3C,CAAA,CAAA,MAAQ;AACN,EAAA,SAAA,GAAY,IAAA;AACd;AAEA,SAAS,YAAY,IAAA,EAAmC;AACtD,EAAA,IAAI,OAAO,KAAK,MAAA,KAAW,UAAA,SAAmB,CAAC,KAAA,KAAe,IAAA,CAAK,MAAA,CAAQ,KAAK,CAAA;AAChF,EAAA,IAAI,OAAO,KAAK,IAAA,KAAS,UAAA,SAAmB,CAAC,KAAA,KAAe,IAAA,CAAK,IAAA,CAAM,KAAK,CAAA;AAC5E,EAAA,IAAI,OAAQ,KAAa,IAAA,KAAS,UAAA,SAAmB,CAAC,KAAA,KAAgB,IAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAC7F,EAAA,IAAI,OAAQ,KAAa,GAAA,KAAQ,UAAA,SAAmB,CAAC,KAAA,KAAgB,IAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAC3F,EAAA,IAAI,OAAQ,SAAqC,UAAA,EAAY;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,IAAA,EAAM,IAAA,IAAQ,WAAW,CAAA,iBAAA,CAAmB,CAAA;AACtE;AAEA,SAAS,wBAAA,GAA8F;AACrG,EAAA,IAAI,yBAAA,SAAkC,iBAAA,IAAqB,IAAA;AAC3D,EAAA,yBAAA,GAA4B,IAAA;AAC5B,EAAA,iBAAA,GAAoB,IAAA;AACpB,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,IAAA,MAAM,UAAU,OAAO,GAAA,EAAK,IAAA,KAAS,UAAA,GAAa,IAAI,IAAA,GAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,iBAAA,GAAoB,OAAA;AAAA,IACtB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,iBAAA,GAAoB,IAAA;AAAA,EACtB;AACA,EAAA,OAAO,iBAAA,IAAqB,IAAA;AAC9B;AAEA,SAAS,aAAa,SAAA,EAAgB;AACpC,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,CAAA,CAAE,GAAA,EAAI;AAC7B,EAAA,IAAI,SAAA,YAAqB,CAAA,CAAE,OAAA,EAAS,OAAO,SAAA;AAC3C,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,iBAAiB,KAAA,EAA+B;AAC9D,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAK,IAAA,CAAa,QAAA,EAAU,OAAQ,IAAA,CAAa,QAAA;AAEjD,IAAA,MAAM,QAAA,GAAW,YAAY,IAAI,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,OAAA,CAAQ,OAAO,KAAA,KAAe,QAAA,CAAS,KAAK,CAAA,EAAG;AAAA,QAC5D,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,MAAA,EAAQ,YAAA,CAAc,IAAA,CAAa,MAAM;AAAA,OAC1C,CAAA;AACD,MAAC,KAAa,QAAA,GAAW,MAAA;AACzB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,mBAA4D,KAAA,EAAmB;AAC7F,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAc;AAC9B,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAK,IAAA,CAAa,QAAA,KAAa,OAAA,EAAS,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAO,IAAA,KAAS,UAAA,IAAc,CAAC,KAAK,IAAA,EAAM;AAC5C,MAAA,MAAMA,WAAU,gBAAA,CAAiB;AAAA,QAC/B,IAAA,EAAM,gBAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,MAAA,EAAQ,EAAE,GAAA,EAAI;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAACA,SAAgB,QAAA,GAAW,WAAA;AAC5B,MAACA,SAAgB,IAAA,GAAO,IAAA;AACxB,MAAA,OAAOA,QAAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAS,IAAA,EAAM,WAAW,IAAA,IAAoB,IAAA,EAAM,QAAQ,IAAA,IAAmB,MAAA;AACjG,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,IAAe,IAAA,EAAM,SAAA,EAAW,WAAA;AACzD,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,IAAU,MAAM,SAAA,EAAW,MAAA,IAAU,EAAE,GAAA,EAAI;AAC/D,IAAA,MAAM,QAAA,GAAyB,CAAC,KAAA,KAAe;AAC7C,MAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,YAAY,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAC/D,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAC3D,MAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,YAAY,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAC7D,MAAA,IAAI,OAAO,IAAA,CAAK,GAAA,KAAQ,YAAY,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AACzD,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAC3D,MAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,OAAO,KAAK,KAAK,CAAA;AACjD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,iBAAA,CAAmB,CAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAM,UAAU,gBAAA,CAAiB;AAAA,MAC/B,IAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAC,QAAgB,QAAA,GAAW,WAAA;AAC5B,IAAC,QAAgB,IAAA,GAAO,IAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKkB;AAChB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAe,QAAA,CAAS,KAAK,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACR;AACF;;;ACjGO,SAAS,aAAa,CAAA,EAAyB;AACpD,EAAA,OAAO,CAAC,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,OAAO,EAAE,MAAA,KAAW,UAAA;AAC7D;AAEO,SAAS,SAAA,CAAU,OAAmB,KAAA,EAAc;AACzD,EAAA,IAAI,KAAA,EAAO,SAAA,EAAW,OAAO,KAAA,CAAM,UAAU,KAAK,CAAA;AAClD,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,mBAAmB,OAAA,EAA6B;AAC9D,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAG3E,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAsB;AAC9C,IAAA,IAAI,OAAA,IAAW,MAAM,OAAO,OAAA;AAC5B,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAc;AAChC,QAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AAC9C,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA,EAAE;AAC/E,QAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,UAAA,MAAM,MAAO,IAAA,CAAa,SAAA;AAC1B,UAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,EAAE,GAAA,EAAK,GAAA,EAAI,EAAE;AACjF,UAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,YAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,WAAW,GAAA,EAAI;AAC7D,YAAA,IAAI,YAAY,GAAA,EAAK;AACnB,cAAA,MAAM,KAAA,GAAS,IAAY,UAAA,IAAc,YAAA;AACzC,cAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,KAAK,CAAA,QAAA,EAAY,IAAY,MAAM,CAAA,CAAA;AAC3D,cAAA,MAAM,SAAU,GAAA,CAAY,MAAA;AAC5B,cAAA,OAAO,EAAE,MAAM,WAAA,EAAa,SAAA,EAAW,EAAE,GAAA,EAAK,OAAA,EAAS,QAAO,EAAE;AAAA,YAClE;AAAA,UACF;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAA4B;AACxC,IAAA,IAAK,CAAA,CAAU,QAAA,IAAa,CAAA,CAAU,eAAA,EAAiB,OAAO,CAAA;AAC9D,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,iBAAiB,CAAA,CAAE,OAAO,CAAA,EAAG,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA,EAAa,EAAU,UAAA,EAAY,YAAA,EAAe,EAAU,YAAA,EAAa;AAAA,EACtJ,CAAA;AAEA,EAAA,MAAM,OAAA,GAAyB;AAAA,IAC7B,MAAA,EAAQ,OAAO,QAAA,EAA6B,OAAA,KAA2H;AACrK,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAA,CAAO,YAAY,OAAO,CAAA;AACzD,MAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAM,OAAA,GAAW,QAAA,CAAiB,OAAA,IAAY,QAAA,CAAiB,IAAA,IAAQ,EAAA;AACvE,QAAA,OAAO;AAAA,UACL,IAAA,EAAO,SAAiB,IAAA,IAAQ,WAAA;AAAA,UAC9B,OAAA;AAAA,UACA,YAAa,QAAA,CAAiB,UAAA;AAAA,UAC9B,OAAQ,QAAA,CAAiB,KAAA;AAAA,UACzB,mBAAoB,QAAA,CAAiB,iBAAA;AAAA,UACrC,GAAG;AAAA,SACP;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,EAAE;AAAA,IAC9D,CAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,QAAA,EAA6B,OAAA,EAA8F;AAClJ,MAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY;AAC1C,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA;AACvD,MAAA,MAAM,SAAS,OAAQ,YAAA,EAAmC,IAAA,KAAS,UAAA,GAAa,MAAM,YAAA,GAAe,YAAA;AACrG,MAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,KAAiB;AAC3B,MAAA,MAAM,OAAA,GAAU,iBAAiB,KAAK,CAAA;AACtC,MAAA,IAAI,OAAO,OAAA,CAAQ,SAAA,KAAc,UAAA,EAAY;AAC3C,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA;AACvC,QAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,OAAO,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AACtC,QAAA,MAAM,QAAQ,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,SAAS,CAAA;AAC7C,QAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAW,OAAA,CAAQ,SAAA,IAAa,QAAQ,QAAA,IAAY,OAAA,CAAQ,YAAY,OAAA,CAAQ,IAAA;AAAA,IAChF,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,OAAO,OAAA;AACT;;;AChIO,SAAS,UAAA,CAAW;AAAA,EACvB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACJ,CAAA,EASkB;AACd,EAAA,MAAM,OAAA,GAAuB,OAAO,KAAA,KAAe,IAAA,CAAK,KAAK,CAAA;AAE7D,EAAA,MAAM,UAAA,GAA4B;AAAA,IAC9B,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA;AAAA,IAEA,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,OAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACV;AAEA,EAAA,IAAI,OAAO,kBAAkB,SAAA,EAAW;AACpC,IAAC,WAAmB,aAAA,GAAgB,aAAA;AAAA,EACxC;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAC9B,IAAC,WAAmB,cAAA,GAAiB,cAAA;AAAA,EACzC;AACA,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAChC,IAAC,WAAmB,gBAAA,GAAmB,gBAAA;AAAA,EAC3C;AACA,EAAA,IAAI,wBAAwB,MAAA,EAAW;AACnC,IAAC,WAAmB,mBAAA,GAAsB,mBAAA;AAAA,EAC9C;AAEA,EAAC,UAAA,CAAmB,QAAA,GAAY,UAAA,CAAmB,QAAA,IAAY,OAAA;AAC/D,EAAC,WAAmB,MAAA,GAAS,IAAA;AAE7B,EAAA,OAAO,UAAA;AACX;;;ACrDA,IAAM,wBAAA,GAA2B,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qEAAA,CAAA;AAiBjC,SAAS,mBAAmB,cAAA,EAAyB;AACnD,EAAA,MAAM,UAAA,GAAa,cAAA,EAAgB,IAAA,EAAK,IAAK,wBAAA;AAC7C,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,YAAY,CAAA,EAAG;AACvC,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AAAA,EAAe,UAAU;AAAA,WAAA,CAAA;AAClC;AAEO,SAAS,iBAAA,CACd,KAAA,EACA,QAAA,EACA,IAAA,GAAe,SACf,cAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,EAAK;AACjC,EAAA,MAAM,WAAA,GAAc,eAAe,IAAI,CAAA,CAAA;AACvC,EAAA,MAAM,eAAe,OAAO,QAAA,KAAa,QAAA,GACrC,QAAA,GACA,WACA,MAAA,GACA,KAAA;AACJ,EAAA,MAAM,aAAA,GAAgB,YAAA,KAAiB,KAAA,GACnC,kBAAA,CAAmB,cAAc,CAAA,GACjC,EAAA;AACJ,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,sEAAA;AAAA,IACA,qBAAA;AAAA,IACA,8DAAA;AAAA,IACA,iEAAA;AAAA,IACA,qEAAA;AAAA,IACA,qEAAA;AAAA,IACA,4EAAA;AAAA,IACA,iFAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,GAAe,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,GAAK;AAAA,GACzD,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AACd;;;ACXO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AAFD,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;AC5CL,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAO,OAAO,KAAA,KAA2C;AACvD,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA,CAAM,WAAW,EAAC;AACnE,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MAC/B,aAAA,EAAe,MAAM,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MACnC,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,MACnC,mBAAA,EAAqB,KAAA,CAAM,mBAAA,IAAuB,EAAC;AAAA,MAC/C,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,EAAC;AAAA,MAC7C,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,WAAA,EAAa,MAAM,WAAA,IAAe;AAAA,KACpC;AAAA,EACF,CAAA;AACF;;;ACMO,SAAS,eAAe,GAAA,EAA0D;AACvF,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,aAAA,EAAe,IAAI,YAAA,EAAc,GAAA,CAAI,YAAA,EAAc,GAAA,CAAI,mBAAmB,CAAA;AACjG,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,iBAAA,EAAmB,IAAI,aAAA,EAAe,GAAA,CAAI,gBAAA,EAAkB,GAAA,CAAI,uBAAuB,CAAA;AAElH,EAAA,MAAM,KAAA,GAAQ,GAAA;AAAA,IACZ,GAAA,CAAI,YAAA;AAAA,IACJ,GAAA,CAAI,WAAA;AAAA,IAAA,CACH,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,MAAM,OAAO,UAAA,KAAe,WAAW,UAAA,GAAa,CAAA;AAAA,GAC7F;AAKA,EAAA,MAAM,gBAAA,GAAmB,IAAI,qBAAA,IAAyB,GAAA,CAAI,uBACrD,GAAA,CAAI,mBAAA,IAAuB,GAAA,CAAI,iBAAA,IAAqB,EAAC;AAC1D,EAAA,MAAM,oBAAA,GAAuB,IAAI,yBAAA,IAA6B,GAAA,CAAI,2BAC7D,GAAA,CAAI,oBAAA,IAAwB,GAAA,CAAI,kBAAA,IAAsB,EAAC;AAE5D,EAAA,MAAM,UAAA,GAA8B;AAAA,IAClC,aAAA,EAAe,KAAK,MAAM,CAAA;AAAA,IAC1B,iBAAA,EAAmB,KAAK,UAAU,CAAA;AAAA,IAClC,cAAc,IAAA,CAAK,KAAA,IAAA,CAAU,MAAA,IAAU,CAAA,KAAM,cAAc,CAAA,CAAE,CAAA;AAAA,IAC7D,qBAAA,EAAuB;AAAA,MACrB,aAAA,EAAe,IAAA;AAAA,QACb,gBAAA,CAAiB,aAAA,IAAiB,gBAAA,CAAiB,MAAA,IAAU,gBAAA,CAAiB,cAC3E,GAAA,CAAI,mBAAA,IAAuB,GAAA,CAAI,oBAAA,IAC/B,GAAA,CAAI;AAAA,OACT;AAAA,MACA,YAAA,EAAc,IAAA,CAAK,gBAAA,CAAiB,YAAA,IAAgB,iBAAiB,KAAK;AAAA,KAC5E;AAAA,IACA,yBAAA,EAA2B;AAAA,MACzB,gBAAA,EAAkB,IAAA,CAAK,oBAAA,CAAqB,gBAAgB,CAAA;AAAA,MAC5D,YAAA,EAAc,IAAA,CAAK,oBAAA,CAAqB,YAAY,CAAA;AAAA,MACpD,0BAAA,EAA4B,IAAA,CAAK,oBAAA,CAAqB,0BAA0B,CAAA;AAAA,MAChF,0BAAA,EAA4B,IAAA,CAAK,oBAAA,CAAqB,0BAA0B;AAAA,KAClF;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,OAAO,IAAA,EAAiC;AAC/C,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,IAAA,IAAI,KAAK,IAAA,EAAM;AACf,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA;AACT;AACA,SAAS,KAAK,CAAA,EAAgB;AAAE,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAAG,EAAA,OAAO,OAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA;AAAG;ACrDlG,IAAM,qBAAA,GAAwB,8DAAA;AAEvB,SAAS,SAASC,KAAAA,EAAgC;AACvD,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAAA,KAAAA,EAAK;AAC9B;AASO,SAAS,WAAW,OAAA,EAAyC;AAClE,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAA,EAAQ;AAAA,EAC5C;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,SAAS,OAAO,OAAA,EAAS,OAAA,KAAY,UAAA,GAAa,QAAQ,OAAA,GAAU,MAAA;AAAA,IACpE,WAAW,OAAO,OAAA,EAAS,SAAA,KAAc,UAAA,GAAa,QAAQ,SAAA,GAAY;AAAA,GAC5E;AACF;AAIO,SAAS,aAAA,CAAc,OAA2B,MAAA,EAAkC;AACzF,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,SAAS,KAAA,IAAS,EAAA;AACxB,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAO;AAAA,EACrC;AACA,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAClF,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,QAAQ,MAAA,EAAO;AAClD;AAEO,SAAS,QAAA,CAAS,KAAa,OAAA,EAAmD;AACvF,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAQ;AACtC;AAOO,SAAS,QAAA,CAAS,UAAkB,OAAA,EAAmD;AAC5F,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAQ;AAC3C;AACA,SAAS,kBAAA,CAAmB,UAAA,EAAqB,eAAA,GAAkB,IAAA,EAAM;AACvE,EAAA,MAAM,IAAA,GAAO,QAAQ,GAAA,EAAI;AACzB,EAAA,MAAM,IAAA,GAAO,UAAA,IAAc,UAAA,CAAW,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAC7F,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC3D,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,KAAA,CAAM,WAAW,CAAA,EAAG;AACrD,IAAA,IAAI;AACF,MAAA,OAAO,cAAA,CAAgB,OAAyB,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAA,GAAa,eAAe,IAAI,CAAA;AACtC,MAAA,IAAI,YAAY,OAAO,UAAA;AAAA,IACzB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAGA,IAAM,cAAA,GAAiB;AAAA,EACrB,KAAA,EAAO;AAAA,IACL,OAAA;AAAA,IAAS,eAAA;AAAA,IAAiB,cAAA;AAAA,IAAgB,cAAA;AAAA,IAC1C,qBAAA;AAAA,IAAuB,gBAAA;AAAA,IAAkB,iBAAA;AAAA,IACzC,oBAAA;AAAA,IAAsB,WAAA;AAAA,IAAa,UAAA;AAAA,IAAY,UAAA;AAAA,IAAY,IAAA;AAAA,IAC3D,QAAA;AAAA,IAAU,YAAA;AAAA,IAAc,SAAA;AAAA,IAAW,UAAA;AAAA,IAAY;AAAA,GACjD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA;AAAA,IAAY,kBAAA;AAAA,IAAoB,iBAAA;AAAA,IAAmB,iBAAA;AAAA,IACnD,wBAAA;AAAA,IAA0B,mBAAA;AAAA,IAAqB;AAAA;AAEnD,CAAA;AAGA,SAAS,cAAA,CAAe,KAAUA,KAAAA,EAAmB;AACnD,EAAA,IAAI,CAAC,GAAA,IAAO,OAAOA,KAAAA,KAAS,UAAU,OAAO,MAAA;AAC7C,EAAA,OAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AACrE;AAGA,SAAS,eAAA,CAAgB,OAAY,KAAA,EAAqC;AACxE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAGnB,EAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,EAAOA,KAAI,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,IAAA,IAAI,KAAK,OAAO,GAAA;AAAA,EAClB;AAGA,EAAA,MAAM,UAAU,KAAA,EAAO,GAAA;AACvB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,EAASA,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAGA,EAAA,MAAM,WAAA,GAAc,KAAA,EAAO,MAAA,IAAU,KAAA,EAAO,OAAO,KAAA,EAAO,OAAA;AAC1D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,WAAA,EAAaA,KAAI,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAGA,EAAA,MAAM,eAAA,GAAkB,OAAO,WAAA,EAAa,IAAA;AAC5C,EAAA,IAAI,eAAA,IAAmB,CAAC,CAAC,QAAA,EAAU,UAAU,CAAA,CAAE,QAAA,CAAS,eAAe,CAAA,EAAG;AACxE,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAgC;AAC3D,EAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,KAAK,CAAA;AACpD;AAEO,SAAS,gBAAgB,KAAA,EAAgC;AAC9D,EAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,QAAQ,CAAA;AACvD;AAEA,SAAS,uBAAuB,WAAA,EAAyC;AACvE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,MAAA;AAGxC,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,gBAAA;AAAA,IAAkB,oBAAA;AAAA,IAAsB,yBAAA;AAAA,IACxC,6BAAA;AAAA,IAA+B,sBAAA;AAAA,IAAwB,OAAA;AAAA,IAAS;AAAA,GAClE;AAGA,EAAA,KAAA,IAAS,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,IAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,KAAA,MAAWA,SAAQ,YAAA,EAAc;AAC/B,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,EAASA,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0BAA0B,WAAA,EAAyC;AAC1E,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,MAAA;AAGxC,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,mBAAA;AAAA,IAAqB,4BAAA;AAAA,IAA8B,yBAAA;AAAA,IAA2B;AAAA,GAChF;AAGA,EAAA,KAAA,IAAS,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,IAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,KAAA,MAAWA,SAAQ,YAAA,EAAc;AAC/B,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,EAASA,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAE3B,OAAA,EAAS;AACX,CAAA;AAEA,SAAS,UAAU,CAAA,EAAW;AAC5B,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,CAAC,CAAA,EAAG;AACrB,IAAA,EAAA,CAAG,SAAA,CAAU,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,aAAa,MAAA,EAAuD;AAC3E,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,MAAA,EAAQ,OAAA,IAAW,oBAAA,CAAqB,OAAA;AACxD,EAAA,MAAM,IAAA,GAAoB,MAAA,EAAQ,IAAA,KAAS,WAAA,GAAc,WAAA,GAAc,SAAA;AAEvE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EACjC,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,MAAA,OAAA,CAAQ,IAAA,CAAK,kEAAkE,GAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAA,GAAO,WAAA,CAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAY,IAAA,EAA2C;AAC9D,EAAA,MAAM,SAAA,GAAY,IAAA,IAAQ,EAAE,IAAA,EAAM,MAAA,EAAO;AACzC,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,SAAA,CAAU,IAAA,EAAM,KAAK,CAAA;AACxD,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AAAA,IACjC;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,UAAU,OAAO,SAAA,CAAU,OAAA,KAAY,UAAA,GAAa,UAAU,OAAA,GAAU,MAAA;AAC9E,MAAA,MAAM,YAAY,OAAO,SAAA,CAAU,SAAA,KAAc,UAAA,GAAa,UAAU,SAAA,GAAY,MAAA;AACpF,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,SAAA,EAAU;AAAA,IAC9C;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,CAAU,MAAA,KAAW,WAAW,SAAA,CAAU,MAAA,CAAO,MAAK,GAAI,EAAA;AAChF,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,GAAA,GAAM,OAAO,SAAA,CAAU,GAAA,KAAQ,YAAY,SAAA,CAAU,GAAA,CAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAC3E,SAAA,CAAU,GAAA,CAAI,MAAK,GACnB,qBAAA;AACJ,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAA,EAAO;AAAA,IAC1C;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GAAM,OAAO,SAAA,CAAU,GAAA,KAAQ,WAAW,SAAA,CAAU,GAAA,CAAI,MAAK,GAAI,EAAA;AACvE,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,MACtD;AACA,MAAA,MAAM,UAAU,SAAA,CAAU,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI,MAAA;AAC/D,MAAA,OAAO,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,SAAQ,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAI;AAAA,IACxE;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,QAAA,GAAW,OAAO,SAAA,CAAU,QAAA,KAAa,WAAW,SAAA,CAAU,QAAA,CAAS,MAAK,GAAI,EAAA;AACtF,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,MAC3D;AACA,MAAA,MAAM,UAAU,SAAA,CAAU,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI,MAAA;AAC/D,MAAA,OAAO,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,SAAQ,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAS;AAAA,IAClF;AAAA,IACA,SAAS;AACP,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,yDAAyD,SAAS,CAAA;AAAA,MACjF;AACA,MAAA,OAAO,WAAA,CAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,IACrC;AAAA;AAEJ;AAEA,SAAS,aAAa,OAAA,EAAiD;AACrE,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,CAAQ,WAAA,IAAe,KAAK,OAAA,EAAQ;AAAA,IACnE,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,IAC5C,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,IACvC,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,IACjD;AACE,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA;AAE9B;AAEA,SAAS,oBAAoB,OAAA,EAA0D;AACrF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAQ,cAAA,CAAe,OAAA;AAAA,IAChC,OAAA,EAAS,QAAQ,cAAA,CAAe,OAAA;AAAA,IAChC,IAAA,EAAM,aAAa,OAAO;AAAA,GAC5B;AACF;AAEA,eAAe,gBAAA,CACb,GAAA,EACA,OAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAA;AAG5C,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,QAAA,OAAA,CAAQ,KAAA,CAAM,4BAAA,EAA8B,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,MAChE;AAEA,MAAA,MAAM,IAAI,MAAM,QAAQ,CAAA;AAAA,IAC1B;AAAA,EACF,SAAS,GAAA,EAAK;AAEZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,MAAM,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,yBAAA,CACb,OAAA,EACA,OAAA,EACA,OAAA,EAMe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,MAAA,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,2CAA2C,MAAM,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,kBAAA,CACb,OAAA,EACA,OAAA,EACA,SAAA,EACA,KAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,WAAW,SAAS,CAAA,OAAA,CAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,6CAA6C,MAAM,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,uBAAA,CACb,OAAA,EACA,OAAA,EACA,OAAA,EAQe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,IAAA,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,MAAM,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,SAAS,cAAc,GAAA,EAAqB;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,GAAG,EAAE,OAAA,EAAQ;AAEjC,EAAA,OAAO,GAAG,EAAE,CAAA,MAAA,CAAA;AACd;AAGA,SAAS,iBAAiB,MAAA,EAAwB;AAChD,EAAA,IAAI,MAAA,KAAW,SAAS,OAAO,CAAA;AAC/B,EAAA,IAAI,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,WAAA,EAAa,OAAO,CAAA;AAC3D,EAAA,OAAO,CAAA;AACT;AAGA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT,KAAK,iBAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT;AACE,MAAA,OAAO,CAAA;AAAA;AAEb;AAIA,SAAS,UAAA,CAAW,KAAa,GAAA,EAA8C;AAC7E,EAAA,OAAO,GAAA,IAAO,OAAO,EAAE,GAAA,EAAK,OAAO,EAAE,WAAA,EAAa,GAAA,EAAI,EAAE,GAAI,IAAA;AAC9D;AAEA,SAAS,OAAA,CAAQ,KAAa,GAAA,EAA8C;AAC1E,EAAA,OAAO,OAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,EAAE,GAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,CAAO,GAAG,CAAA,IAAI,GAAI,IAAA;AACzF;AAEA,SAAS,UAAA,CAAW,KAAa,GAAA,EAA8C;AAC7E,EAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,MAAM,GAAG,CAAA,GAAI,EAAE,GAAA,EAAK,KAAA,EAAO,EAAE,WAAA,EAAa,GAAA,IAAM,GAAI,IAAA;AACpF;AAGA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA;AAC/C,EAAA,MAAM,UAAU,KAAA,CAAM,UAAA,IAAc,OAChC,CAAA,EAAG,IAAI,KAAK,IAAI,IAAA,CAAK,MAAM,SAAS,CAAA,CAAE,SAAQ,GAAI,KAAA,CAAM,UAAU,CAAA,CAAE,OAAA,EAAS,CAAA,MAAA,CAAA,GAC7E,SAAA;AAEJ,EAAA,MAAM,KAAA,GAAwB;AAAA,IAC5B,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,IAAI,CAAA;AAAA,IAC7C,UAAA,CAAW,uBAAA,EAAyB,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/C,OAAA,CAAQ,0BAAA,EAA4B,KAAA,CAAM,QAAQ,CAAA;AAAA,IAClD,UAAA,CAAW,uBAAA,EAAyB,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAAA,IACtD,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,IACpD,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,IACpD,UAAA,CAAW,iBAAA,EAAmB,KAAA,CAAM,KAAK,CAAA;AAAA,IACzC,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,QAAQ,CAAA;AAAA,IAC/C,OAAA,CAAQ,wBAAA,EAA0B,KAAA,CAAM,WAAW,CAAA;AAAA,IACnD,OAAA,CAAQ,yBAAA,EAA2B,KAAA,CAAM,YAAY,CAAA;AAAA,IACrD,OAAA,CAAQ,wBAAA,EAA0B,KAAA,CAAM,WAAW,CAAA;AAAA,IACnD,OAAA,CAAQ,+BAAA,EAAiC,KAAA,CAAM,iBAAiB,CAAA;AAAA,IAChE,OAAA,CAAQ,yBAAA,EAA2B,KAAA,CAAM,YAAY,CAAA;AAAA,IACrD,OAAA,CAAQ,0BAAA,EAA4B,KAAA,CAAM,aAAa,CAAA;AAAA,IACvD,UAAA,CAAW,6BAAA,EAA+B,KAAA,CAAM,eAAe,CAAA;AAAA,IAC/D,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,OAAO,CAAA;AAAA,IAC9C,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,EAAE;AAAA,GAC3C,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,IAAI,MAAM,IAAA,EAAM,QAAA,IAAY,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1D,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,GAAA,EAAK,oBAAA,EAAsB,OAAO,EAAE,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,IAAK,CAAA;AAAA,IACvG,CAAA,CAAA,MAAQ;AAAA,IAAuC;AAAA,EACjD;AAEA,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,YAAA,EAAc,MAAM,YAAA,IAAgB,EAAA;AAAA,IACpC,IAAA,EAAM,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA;AAAA,IAC3B,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AAAA,IAC/B,iBAAA,EAAmB,SAAA;AAAA,IACnB,eAAA,EAAiB,OAAA;AAAA,IACjB,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA;AAAA,MACnC,GAAI,KAAA,CAAM,MAAA,KAAW,OAAA,IAAW,KAAA,CAAM,KAAA,EAAO,OAAA,GAAU,EAAE,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,OAAA,KAAY;AAAC;AAC7F,GACF;AAGA,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,IAAA,CAAK,SAAS,CAAC;AAAA,MACb,YAAA,EAAc,SAAA;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,EAAE,KAAK,mBAAA,EAAqB,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ,EAAE;AAAA,QACxE,GAAI,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,GAAA,EAAK,sBAAA,EAAwB,KAAA,EAAO,EAAE,aAAa,KAAA,CAAM,KAAA,CAAM,OAAM,EAAG,IAAI;AAAC;AAC1G,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,mBAAmB,OAAA,EAAoD;AACrF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,eAAA,EAAgB;AACnD,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,cAAA,EAAe;AACxD,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,OAAA,CAAQ,SAAS,CAAA;AACjD,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,OAAO,CAAA,GAAI,SAAA;AAGnE,EAAA,MAAM,aAAA,GAAgC;AAAA,IACpC,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,EAAE,aAAa,OAAA,CAAQ,KAAA,EAAO,IAAA,IAAQ,iBAAA,EAAkB,EAAE;AAAA,IACxF,UAAA,CAAW,iBAAA,EAAmB,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACpD,UAAA,CAAW,sBAAA,EAAwB,OAAA,CAAQ,SAAS,CAAA;AAAA,IACpD,UAAA,CAAW,qBAAA,EAAuB,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClD,UAAA,CAAW,uBAAA,EAAyB,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAAA,IACxD,UAAA,CAAW,0BAAA,EAA4B,OAAA,CAAQ,KAAA,EAAO,QAAQ;AAAA,GAChE,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,MAAM,SAAA,GAA4B;AAAA,IAChC,UAAA,CAAW,0BAAA,EAA4B,OAAA,CAAQ,MAAM,CAAA;AAAA,IACrD,UAAA,CAAW,+BAAA,EAAiC,OAAA,CAAQ,UAAU,CAAA;AAAA,IAC9D,OAAA,CAAQ,sCAAA,EAAwC,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IAChF,OAAA,CAAQ,uCAAA,EAAyC,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,CAAA;AAAA,IAClF,OAAA,CAAQ,6CAAA,EAA+C,OAAA,CAAQ,OAAA,CAAQ,sBAAsB,CAAA;AAAA,IAC7F,OAAA,CAAQ,kCAAA,EAAoC,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA;AAAA,IACxE,OAAA,CAAQ,mCAAA,EAAqC,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA;AAAA,IAC1E,OAAA,CAAQ,+BAAA,EAAiC,OAAA,CAAQ,MAAA,CAAO,MAAM;AAAA,GAChE,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtE,MAAA,SAAA,CAAU,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA;AAAA,IACpG;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAoC;AAAA,IACxC,OAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,YAAA,EAAc,EAAA;AAAA,IACd,IAAA,EAAM,CAAA,eAAA,EAAkB,OAAA,CAAQ,KAAA,EAAO,QAAQ,OAAO,CAAA,CAAA;AAAA,IACtD,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,iBAAA,EAAmB,SAAA;AAAA,IACnB,eAAA,EAAiB,OAAA;AAAA,IACjB,UAAA,EAAY,SAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA;AAAA,MACrC,GAAI,QAAQ,MAAA,KAAW,OAAA,IAAW,QAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GACtD,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAO,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,OAAO,EAAE,IAAA,CAAK,IAAI,CAAA,EAAE,GAC3D;AAAC;AACP,GACF;AAGA,EAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC7C,cAAc,GAAA,CAAI,SAAA,GAAY,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,GAAI,SAAA;AAAA,MAC7D,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,EAAE,KAAK,mBAAA,EAAqB,KAAA,EAAO,EAAE,WAAA,EAAa,GAAA,CAAI,SAAQ,EAAE;AAAA,QAChE,GAAI,GAAA,CAAI,KAAA,GAAQ,CAAC,EAAE,GAAA,EAAK,sBAAA,EAAwB,KAAA,EAAO,EAAE,aAAa,GAAA,CAAI,KAAA,EAAM,EAAG,IAAI,EAAC;AAAA,QACxF,GAAI,GAAA,CAAI,IAAA,GAAO,CAAC,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,EAAE,aAAa,GAAA,CAAI,IAAA,EAAK,EAAG,IAAI;AAAC;AAClF,KACF,CAAE,CAAA;AAAA,EACJ;AAGA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC/C,IAAA,MAAM,OAAO,eAAA,CAAgB;AAAA,MAC3B,GAAG,KAAA;AAAA,MACH,OAAA,EAAS,MAAM,OAAA,IAAW,OAAA;AAAA,MAC1B,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,cAAA,EAAe;AAAA,MACvC,YAAA,EAAc,MAAM,YAAA,IAAgB;AAAA,KACrC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,eAAe,CAAC;AAAA,MACd,QAAA,EAAU,EAAE,UAAA,EAAY,aAAA,EAAc;AAAA,MACtC,YAAY,CAAC;AAAA,QACX,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,qBAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,EAAU,GAAG,UAAU;AAAA,OAChC;AAAA,KACF;AAAA,GACH;AACF;AAKA,eAAe,cAAA,CACb,QAAA,EACA,OAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,cAAA,EAAgB,kBAAA;AAAA,IAChB,GAAI,WAAW;AAAC,GAClB;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,QAAA,EAAU;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAAe;AACvB,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,MAAM,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAA,GAA0C;AACjD,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CAAA;AAAA,IACjB,gBAAA,EAAkB,CAAA;AAAA,IAClB,iBAAA,EAAmB,CAAA;AAAA,IACnB,sBAAA,EAAwB,CAAA;AAAA,IACxB,YAAA,EAAc,CAAA;AAAA,IACd,aAAA,EAAe,CAAA;AAAA,IACf,aAAa;AAAC,GAChB;AACF;AAEA,SAAS,iBAAA,GAA4B;AACnC,EAAA,OAAO,CAAA,KAAA,EAAQ,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAC3B;AAEA,SAAS,gBAAgB,QAAA,EAA0B;AACjD,EAAA,OAAO,CAAA,IAAA,EAAO,MAAA,CAAO,QAAQ,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAC9D;AAGO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,EAAE,CAAA,CAAE,SAAS,KAAK,CAAA;AAC9C;AAGO,SAAS,cAAA,GAAyB;AACvC,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,CAAC,CAAA,CAAE,SAAS,KAAK,CAAA;AAC7C;AAEA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT;AACE,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA;AAElF;AAEA,SAAS,oBAAA,CAAqB,SAAiB,QAAA,EAA+D;AAC5G,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,MAAA;AAC/C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK,CAAE,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK,GAAI,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AACxG,IAAA,MAAM,SAAA,GAAA,CAAa,WAAA,CAAY,GAAA,CAAI,SAAS,KAAK,CAAA,IAAK,CAAA;AACtD,IAAA,WAAA,CAAY,GAAA,CAAI,WAAW,SAAS,CAAA;AACpC,IAAA,MAAM,aAAa,SAAA,GAAY,CAAA,GAAI,GAAG,SAAS,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GAAM,SAAA;AAEnE,IAAA,IAAI,EAAA,GAAK,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,EAAA,GAAK,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,IACrE;AACA,IAAA,OAAA,IAAW,CAAA;AAEX,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,GAAG,OAAA;AAAA,MACH,EAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACY,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,oBAAoB,IAAA,EAAwC;AACnE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,aAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEA,SAAS,iBAAA,CAAkB,MAAc,KAAA,EAAuB;AAC9D,EAAA,MAAM,aAAa,IAAA,EAAM,IAAA,GAAO,MAAA,GAAS,IAAA,CAAK,MAAK,GAAI,SAAA;AACvD,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,QAAA,CAAA;AACxE,EAAA,OAAO,QAAQ,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAC3C;AAEA,SAAS,gBAAgB,KAAA,EAAoB;AAC3C,EAAA,MAAM,SAAA,GAAY,qBAAqB,KAAK,CAAA;AAC5C,EAAA,IAAI,SAAA,IAAa,MAAM,OAAO,EAAA;AAC9B,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,OAAO,SAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,UACJ,GAAA,CAAI,CAAC,SAAS,eAAA,CAAgB,IAAI,CAAC,CAAA,CACnC,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,IAAQ,KAAK,IAAA,EAAK,CAAE,SAAS,CAAC,CAAA,CAC/C,KAAK,IAAI,CAAA;AAAA,EACd;AACA,EAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,IAAA,IAAI,OAAQ,UAAkB,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACtF,MAAA,OAAQ,SAAA,CAAkB,IAAA;AAAA,IAC5B;AACA,IAAA,IAAI,OAAQ,SAAA,CAAkB,OAAA,KAAY,QAAA,EAAU;AAClD,MAAA,OAAQ,SAAA,CAAkB,OAAA;AAAA,IAC5B;AACA,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAO,SAAS,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,OAAO,SAAS,CAAA;AACzB;AAEA,SAAS,mBAAmB,IAAA,EAAgB;AAC1C,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,MAAA;AACzB,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,mCAAmC,OAAA,EAAsC;AAChF,EAAA,MAAM,WAAmC,EAAC;AAC1C,EAAA,IAAI,CAAC,SAAS,OAAO,QAAA;AAErB,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAc;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,QAAA,GAAW,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,IAAA,IAAQ,MAAM,QAAA,EAAU,IAAA,IAAQ,IAAA,EAAM,aAAA,EAAe,IAAA,IAAQ,MAAA;AAClG,IAAA,MAAM,OAAA,GAAU,IAAA,EAAM,SAAA,IAAa,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,QAAA,EAAU,SAAA,IAAa,IAAA,EAAM,aAAA,EAAe,SAAA;AAClH,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,UAAA,IAAc,OAAA,IAAW,EAAE,CAAA;AACzE,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,cAAc,QAAQ,CAAA,CAAA;AAAA,MAC7B,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,SAAS,UAAU,CAAA,GAAI,QAAQ,UAAA,GAAa,MAAA;AAC9E,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAc,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,6BAA6B,WAAA,EAAqD;AACzF,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,WAAW,KAAK,WAAA,CAAY,MAAA,KAAW,GAAG,OAAO,MAAA;AACpE,EAAA,MAAM,WAA+B,EAAC;AACtC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAE3C,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,YAAA,GAAe,mCAAmC,OAAO,CAAA;AAC/D,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,YAAY,CAAA;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,OAAO,OAAA,EAAS,IAAA,KAAS,QAAA,GAAW,QAAQ,IAAA,GAAO,WAAA;AAChE,IAAA,MAAM,IAAA,GAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,IAAI,KAAK,CAAA,IAAK,CAAA;AAC3C,IAAA,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,CAAA;AAEzB,IAAA,IAAI,OAAA,GAAU,eAAA,CAAgB,OAAA,EAAS,OAAA,IAAW,EAAE,CAAA;AACpD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,GAAO,MAAA,EAAQ;AACtC,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,OAAA,GAAU,aAAA;AAAA,MACZ,WAAW,OAAO,OAAA,EAAS,YAAY,WAAA,IAAe,OAAA,EAAS,YAAY,IAAA,EAAM;AAC/E,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,eAAA,CAAgB,oBAAA,CAAqB,OAAA,EAAS,OAAO,CAAC,CAAA;AAChE,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,GAAO,MAAA,EAAQ;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,iBAAA,CAAkB,IAAA,EAAM,IAAI,CAAA;AAAA,MACnC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU,OAAO,OAAA,EAAS,IAAA,KAAS,WAAW,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK,GAAI;AAAA,KACxE,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,MAAA;AAC1C;AAEO,SAAS,mBAAmB,IAAA,EAA0D;AAC3F,EAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,EAAS,OAAO,MAAA;AAEzB,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,aAAa,cAAA,EAAe;AAClC,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU,KAAK,OAAA,EAAS,QAAA;AAAA,IACxB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,IACpB,cAAA,EAAgB,GAAA;AAAA,IAChB,QAAQ,EAAC;AAAA,IACT,SAAS,kBAAA,EAAmB;AAAA,IAC5B,MAAA,EAAQ,aAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,OAAA;AACzB,IAAA,SAAA,CAAU,OAAO,CAAA;AACjB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA;AAC/C,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA,OAAA,CAAQ,WAAA,GAAc,OAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,UAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,OAAA;AACT;AAMA,eAAsB,qBAAA,CACpB,SACA,YAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA,EAAa;AACjD,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAE5B,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AAGpC,EAAA,MAAM,YAAY,YAAA,GAAe;AAAA,IAC/B,IAAA,EAAM,aAAa,IAAA,IAAQ,eAAA;AAAA,IAC3B,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,KAAA,EAAO,YAAA,CAAa,YAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AAAA,IAC3C,QAAA,EAAU,eAAA,CAAgB,YAAA,CAAa,KAAK;AAAA,GAC9C,GAAI,MAAA;AAEJ,EAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAEpB,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,eAAe,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,WAAA,EAAY;AAE7D,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAA,EAAW,YAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAET,MAAA,MAAM,yBAAA,CAA0B,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS,OAAO,CAAA;AAC1D,MAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,IAC3B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,eAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,yEAAyE,OAAO,CAAA;AAAA,MAC/F;AAAA,IACF;AAAA,EACF,WAAW,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAEvE,IAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,EAC3B,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAE/B,IAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,EAC3B;AACF;AAEO,SAAS,gBAAA,CACd,SACA,KAAA,EAyB8B;AAC9B,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAGrB,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA;AACzC,EAAA,MAAM,EAAA,GAAK,gBAAgB,QAAQ,CAAA;AACnC,EAAA,MAAM,eAAe,KAAA,CAAM,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAC/D,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,SAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,EAAO,IAAA,EAAK,CAAE,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK,GAAI,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAChG,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA;AAE5C,EAAA,MAAM,aAAa,KAAA,CAAM,UAAA,KAAe,SAAY,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,cAAc,GAAG,CAAA,IAAK,eAAe,MAAA,EAAW;AAChE,IAAA,OAAA,CAAQ,QAAQ,eAAA,IAAmB,UAAA;AAAA,EACrC;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA,KAAgB,SAAY,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAClF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,eAAe,GAAG,CAAA,IAAK,gBAAgB,MAAA,EAAW;AAClE,IAAA,OAAA,CAAQ,QAAQ,gBAAA,IAAoB,WAAA;AAAA,EACtC;AAEA,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA,KAAiB,SAAY,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,GAAI,MAAA;AACrF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,gBAAgB,GAAG,CAAA,IAAK,iBAAiB,MAAA,EAAW;AACpE,IAAA,OAAA,CAAQ,QAAQ,iBAAA,IAAqB,YAAA;AAAA,EACvC;AAEA,EAAA,MAAM,oBAAoB,KAAA,CAAM,iBAAA,KAAsB,SAAY,MAAA,CAAO,KAAA,CAAM,iBAAiB,CAAA,GAAI,MAAA;AACpG,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,qBAAqB,GAAG,CAAA,IAAK,sBAAsB,MAAA,EAAW;AAC9E,IAAA,OAAA,CAAQ,QAAQ,sBAAA,IAA0B,iBAAA;AAAA,EAC5C;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA,KAAgB,SAAY,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAClF,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA,KAAiB,SAAY,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,GAAI,MAAA;AACrF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,gBAAgB,GAAG,CAAA,IAAK,iBAAiB,MAAA,EAAW;AACpE,IAAA,OAAA,CAAQ,QAAQ,YAAA,IAAgB,YAAA;AAAA,EAClC;AAEA,EAAA,MAAM,gBAAgB,KAAA,CAAM,aAAA,KAAkB,SAAY,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,GAAI,MAAA;AACxF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,iBAAiB,GAAG,CAAA,IAAK,kBAAkB,MAAA,EAAW;AACtE,IAAA,OAAA,CAAQ,QAAQ,aAAA,IAAiB,aAAA;AAAA,EACnC;AAEA,EAAA,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,GAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA;AAE3F,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,eAAe,OAAA,EAAS;AAElC,IAAA,IAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/C,MAAA,QAAA,GAAW,oBAAA,CAAqB,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,4BAAA,CAA6B,KAAA,CAAM,WAAW,CAAA;AAChE,MAAA,QAAA,GAAW,oBAAA,CAAqB,IAAI,SAAS,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,KAAA,IAAS,sBAAA,CAAuB,MAAM,WAAW,CAAA;AAC7E,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,QAAA,IAAY,yBAAA,CAA0B,MAAM,WAAW,CAAA;AAGtF,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,SAAA;AAIhC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,IAAgB,OAAA,CAAQ,0BAA0B,OAAA,CAAQ,UAAA;AAErF,EAAA,MAAM,MAAA,GAA2B;AAAA,IAC/B,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAA;AAAA,IACA,YAAA;AAAA,IACA,EAAA;AAAA,IACA,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,KAAA,EAAO,UAAA;AAAA,IACP,QAAA;AAAA,IACA,SAAA,EAAW,YAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,QAAA,GAAW;AAAA,MACb,aAAa,WAAA,IAAe,CAAA;AAAA,MAC5B,cAAc,YAAA,IAAgB,CAAA;AAAA,MAC9B,aAAa,WAAA,IAAe,CAAA;AAAA,MAC5B,mBAAmB,iBAAA,IAAqB;AAAA,KAC1C,GAAI;AAAA,MACF,GAAI,WAAA,KAAgB,MAAA,IAAa,EAAE,WAAA,EAAY;AAAA,MAC/C,GAAI,YAAA,KAAiB,MAAA,IAAa,EAAE,YAAA,EAAa;AAAA,MACjD,GAAI,WAAA,KAAgB,MAAA,IAAa,EAAE,WAAA,EAAY;AAAA,MAC/C,GAAI,iBAAA,KAAsB,MAAA,IAAa,EAAE,iBAAA;AAAkB,KAC7D;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,gBAAA;AAAA,IACV,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,KAAA,EAAO,MAAM,KAAA,KAAU,MAAA,KAAW,UAAU,EAAE,OAAA,EAAS,eAAA,EAAgB,GAAI,MAAA,CAAA,IAAc,MAAA;AAAA,IACzF,IAAA,EAAM,QAAA,GAAW,EAAE,QAAA,EAAS,GAAI,MAAA;AAAA,IAChC,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,EAAE,SAAS,eAAA,EAAgB;AAC5D,IAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,MAClB,OAAA,EAAS,EAAA;AAAA,MACT,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,IAAI,KAAK,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAChE,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAChD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAClC,MAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAA6B,IAAA,KAAS,UAAA,EAAY;AACtE,QAAC,MAAA,CAA6B,IAAA,CAAK,KAAA,CAAA,EAAW,CAAC,KAAA,KAAmB;AAChE,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,YAAA,OAAA,CAAQ,IAAA,CAAK,sCAAsC,KAAK,CAAA;AAAA,UAC1D;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,oCAAoC,GAAG,CAAA;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA,IAAe,QAAQ,cAAA,EAAgB;AACzE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AACrD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAGT,MAAA,kBAAA,CAAmB,IAAA,CAAK,KAAK,OAAA,EAAS,OAAA,CAAQ,WAAW,MAAM,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAC9E,QAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,QAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,UAAA,OAAA,CAAQ,IAAA,CAAK,6CAA6C,MAAM,CAAA;AAAA,QAClE;AACA,QAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,UAClB,SAAS,MAAA,CAAO,EAAA;AAAA,UAChB,OAAA,EAAS,MAAA;AAAA,UACT,IAAA,EAAM,MAAA;AAAA,UACN,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,oBAAA,CAAqB,OAAA,EAA0C,MAAA,GAIjF,EAAC,EAA0C;AAC7C,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,SAAS,EAAE,WAAA,EAAY;AACnD,EAAA,MAAM,UAAA,GAAa,YAAY,OAAA,CAAQ,SAAA;AACvC,EAAA,MAAM,eAAe,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,WAAA,EAAY;AAG7D,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAA4C;AAClE,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAQ,IAAA,IAAQ,eAAA;AAAA,MACtB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA,IAAK,eAAA;AAAA,MACtC,QAAA,EAAU,eAAA,CAAgB,OAAA,CAAQ,KAAK;AAAA,KACzC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,MAAA,CAAO,YAAY,CAAA;AAEpD,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,MAClB,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,eAAA;AAAA,MACjC,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA;AAAA,MACpB,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,aAAA,GAAoC,OAAO,MAAA,GAC7C,MAAA,CAAO,SACP,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GACtB,OAAA,GACA,SAAA;AAEN,EAAA,MAAM,YAAA,GAAe,CAACC,OAAAA,MAAkD;AAAA,IACtE,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAA,EAAW,YAAA;AAAA,IACX,OAAA,EAAS,UAAA;AAAA,IACT,UAAA;AAAA,IACA,KAAA,EAAO,aAAa,OAAA,CAAQ,SAAA;AAAA,IAC5B,MAAA,EAAQ,cAAA;AAAA,IACR,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAA,EAAAA,OAAAA;AAAA,IACA,QAAQ,OAAA,CAAQ;AAAA,GAClB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,aAAa,aAAa,CAAA;AACjD,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA;AAExD,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,mBAAmB,cAAc,CAAA;AACrD,MAAA,MAAM,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,SAAS,WAAW,CAAA;AAAA,IAC/D,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAAA,EACF,WAAW,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAET,MAAA,IAAI,eAAA,IAAmB,QAAQ,cAAA,EAAgB;AAE7C,QAAA,MAAM,uBAAA,CAAwB,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS;AAAA,UAC/C,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,OAAA,EAAS,UAAA;AAAA,UACT,UAAA;AAAA,UACA,MAAA,EAAQ,aAAA;AAAA,UACR,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ;AAAA,SACjB,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS,cAAc,CAAA;AAAA,MAC1D;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAE/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,MAAM,CAAA;AAC3F,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AAC1E,EAAA,IAAI,MAAA,GAA6B,MAAA,CAAO,MAAA,KAAW,gBAAA,GAAmB,OAAA,GAAU,SAAA,CAAA;AAChF,EAAA,IAAI,MAAA,KAAW,SAAA,KAAc,UAAA,IAAc,aAAA,CAAA,EAAgB;AACzD,IAAA,MAAA,GAAS,SAAA;AAAA,EACX;AAEA,EAAA,IAAI,YAAA,GAAe,aAAa,MAAM,CAAA;AAEtC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,cAAA,EAAgB;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAgB,oBAAoB,CAAA;AACvE,MAAA,MAAM,EAAA,CAAG,QAAA,CAAS,SAAA,CAAU,QAAA,EAAU,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,MAAM,CAAA;AAAA,IACrF,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,MAAA,GAAS,SAAA;AACT,QAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,cAAc,UAAA,EAAY;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,YAAY,CAAC,CAAA;AACtD,MAAA,MAAM,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,IAC7B,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,MAAA,GAAS,SAAA;AACT,QAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,IAAA,MAAM,qBAAA,GAAwB,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,MAAM,CAAA;AAChG,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AAC1E,IAAA,IAAI,cAAA,GAAqC,wBAAwB,OAAA,GAAU,SAAA;AAC3E,IAAA,IAAI,cAAA,KAAmB,aAAa,aAAA,EAAe;AACjD,MAAA,cAAA,GAAiB,SAAA;AAAA,IACnB;AACA,IAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,MAAA,MAAA,GAAS,cAAA;AACT,MAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,IACpC;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;AAIO,SAAS,qBAAqB,KAAA,EAAiB;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,uBAAY,OAAA,EAAQ;AAC1B,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA;AAAA,MACA,CAAC,MAAM,GAAA,KAAQ;AACb,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,SAAmB,CAAA,UAAA,EAAa,GAAA,CAAI,QAAQ,WAAW,CAAA,CAAA,CAAA;AAC1E,QAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAI,QAAA,EAAS;AACjD,QAAA,IAAI,GAAA,YAAe,OAAO,OAAO,EAAE,SAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM;AAC1E,QAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,UAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,YAAA;AAC3B,UAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AAAA,QACf;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,kBAAA;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,KAAA,EAAoB;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACjC,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,IAAA,IAAQ,EAAA,EAAI,MAAM,CAAA;AAAA,EAC7C,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,UAAA,CAAW,MAAA,CAAO,KAAA,IAAS,EAAE,GAAG,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;;;AC97CO,SAAS,oBAAoB,IAAA,EAAyB;AAC3D,EAAA,OAAO,OAAO,KAAA,KAAoD;AAChE,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,IAAS;AAAA,MAC7B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAQ,IAAA,CAAK,KAAA,IAAiB,EAAC;AAAA,MAC/B,YAAa,IAAA,CAAa,UAAA;AAAA,MAE1B,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,MAEb,cAAe,IAAA,CAAa,YAAA;AAAA,MAC5B,SAAS,IAAA,CAAK;AAAA,KAChB;AAEA,IAAA,MAAM,KAAA,GAA8C,OAAA,CAAQ,KAAA,IAAiB,EAAC;AAC9E,IAAA,MAAM,cAAA,GAAkB,QAAQ,KAAA,EAAQ,SAAA,GACnC,QAAQ,KAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAC/B,OAAA,CAAQ,KAAA;AAEZ,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,OAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,eAAA,GAAkB,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA,GAAI,MAAA;AAC/E,IAAA,MAAM,WAAA,GAAc,aAAA,KAAkB,MAAA,GAAY,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAIxF,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAiD;AACxE,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,IAAc,CAAA,EAAG,iBAAA,EAAmB,UAAA;AACnD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,SAAU,EAAC;AACjC,MAAA,OAAO,GAAA,CACJ,GAAA,CAAI,CAAC,EAAA,MAAa,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,QAAA,EAAU,IAAA,IAAQ,EAAA,EAAI,MAAK,CAAE,CAAA,CACvE,MAAA,CAAO,CAAC,CAAA,KAAW,OAAO,CAAA,CAAE,EAAA,KAAO,QAAA,IAAY,CAAA,CAAE,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA;AAAA,IACnE,CAAA;AAEA,IAAA,MAAM,2BAAA,GAA8B,CAAC,KAAA,KAAwB;AAC3D,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,CAAA,GAAI,EAAC;AAGlD,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAC3B,UAAA,KAAA,MAAW,EAAA,IAAM,eAAA,CAAgB,CAAC,CAAA,EAAG;AACnC,YAAA,IAAI,EAAA,CAAG,EAAA,EAAI,gBAAA,CAAiB,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM;AACtC,QAAA,IAAI,CAAA,EAAG,SAAS,MAAA,EAAQ;AACtB,UAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AACrB,UAAA,IAAI,CAAC,UAAA,IAAc,CAAC,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA,EAAG;AAEpD,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAID,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,QAAA,MAAM,CAAA,GAAI,aAAa,CAAC,CAAA;AACxB,QAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAE7B,QAAA,MAAM,QAAA,GAAW,gBAAgB,CAAC,CAAA;AAClC,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAK3B,QAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,GAAI,CAAC,CAAA;AAG/B,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,EAAG,EAAA;AAC7B,QAAA,MAAM,kBAAA,GAAqB,CAAC,EAAE,IAAA,IAAQ,KAAK,IAAA,KAAS,MAAA,IAAU,KAAK,YAAA,KAAiB,OAAA,CAAA;AACpF,QAAA,IAAI,kBAAA,EAAoB;AAGxB,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACzC,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,GAAG,IAAA,IAAQ,cAAA;AAAA,UACjB,cAAc,EAAA,CAAG,EAAA;AAAA,UACjB,OAAA,EAAS;AAAA,SACX,CAAE,CAAA;AACF,QAAA,YAAA,CAAa,MAAA,CAAO,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,GAAG,YAAY,CAAA;AAG7C,QAAA,CAAA,IAAK,YAAA,CAAa,MAAA;AAAA,MACpB;AACA,MAAA,OAAO,YAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,cAAA,KAA0B;AAClD,MAAA,IAAI;AACF,QAAA,MAAM,OAAc,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,GAAI,iBAAiB,EAAC;AACtE,QAAA,MAAM,aAAuB,EAAC;AAC9B,QAAA,MAAM,iBAAwE,EAAC;AAE/E,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,UAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,UAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAC3B,YAAA,KAAA,MAAW,EAAA,IAAM,eAAA,CAAgB,CAAC,CAAA,EAAG;AACnC,cAAA,UAAA,CAAW,IAAA,CAAK,GAAG,EAAE,CAAA;AACrB,cAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,cAAA,IAAI,EAAE,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,KAAW,IAAA,CAAK,YAAA,KAAiB,EAAA,CAAG,EAAA,IAAM,IAAA,CAAK,YAAA,KAAiB,CAAA,EAAG,YAAA,CAAA,CAAA,EAAgB;AAC7G,gBAAA,cAAA,CAAe,IAAA,CAAK,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA,EAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAAA,cAC9D;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MAEF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,QAAA,GAAY,MAAM,GAAA,EAAa,UAAA;AACrC,IAAA,MAAM,gBAAA,GAAmB,OAAA,CAAS,KAAA,CAAM,GAAA,EAAa,WAAW,CAAA;AAChE,IAAA,MAAM,iBAAA,GAAqB,MAAM,GAAA,EAAa,mBAAA;AAC9C,IAAA,MAAM,WAAA,GAAe,MAAM,GAAA,EAAa,aAAA;AAExC,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAe;AAClC,MAAA,IAAI,KAAA,IAAS,MAAM,OAAO,EAAA;AAC1B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,MAAA,IAAI,OAAO,KAAA,EAAO,OAAA,KAAY,QAAA,SAAiB,KAAA,CAAM,OAAA;AACrD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,EAAG;AACjC,QAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAY,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAA,IAAW,EAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,MACzG;AACA,MAAA,IAAI,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,SAAiB,KAAA,CAAM,IAAA;AAClD,MAAA,IAAI,OAAO,KAAA,EAAO,KAAA,EAAO,YAAY,QAAA,EAAU,OAAO,MAAM,KAAA,CAAM,OAAA;AAClE,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACN,MAAA,MAAM,qBAAqB,2BAAA,CAA4B,CAAC,GAAI,KAAA,CAAM,QAAkB,CAAC,CAAA;AACrF,MAAA,gBAAA,CAAiB,kBAAkB,CAAA;AACnC,MAAA,IAAI,gBAAA,IAAoB,OAAQ,cAAA,CAAuB,MAAA,KAAW,UAAA,EAAY;AAC5E,QAAA,IAAI,YAAA,GAAe,EAAA;AACnB,QAAA,IAAI,eAAA;AACJ,QAAA,WAAA,MAAiB,KAAA,IAAU,eAAuB,MAAA,CAAO,kBAAA,EAAoB,EAAE,MAAA,EAAQ,WAAA,EAAa,iBAAA,EAAmB,CAAA,EAAG;AACxH,UAAA,IAAK,iBAAA,IAAqB,iBAAA,CAAkB,uBAAA,IAA4B,WAAA,EAAa,OAAA,EAAS;AAC5F,YAAA;AAAA,UACF;AACA,UAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAa,MAAc,IAAA,EAAM;AAC7D,YAAA,eAAA,GAAkB,KAAA;AAAA,UACpB;AACA,UAAA,MAAM,IAAA,GAAO,YAAY,KAAK,CAAA;AAC9B,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,YAAA,IAAgB,IAAA;AAChB,YAAA,QAAA,GAAW,EAAE,MAAM,CAAA;AACnB,YAAA,OAAA,GAAU,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,UACpC;AAAA,QACF;AACA,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,QAAA,GAAW,EAAE,GAAG,eAAA,EAAgB;AAChC,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,IAAA,IAAQ,QAAA,CAAS,YAAY,EAAA,EAAI;AACvD,YAAA,QAAA,CAAS,OAAA,GAAU,YAAA;AAAA,UACrB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,GAAW,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACxD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,MAAM,eAAe,MAAA,CAAO,kBAAA,EAAoB,EAAE,MAAA,EAAQ,WAAA,EAAa,mBAAmB,CAAA;AAAA,MACvG;AAAA,IACE,SAAS,GAAA,EAAU;AACjB,MAAA,MAAMC,WAAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACnF,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA,EAAAA,WAAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,KAAA,EAAO,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACjE,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACvE,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,aAAa,KAAA,CAAM;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,oBAAA,GAAkC;AAAA,MACtC,GAAG,KAAA,CAAM,QAAA;AAAA,MACT;AAAA,KACF;AAGA,IAAA,MAAM,QAAA,GAAY,QAAA,EAAkB,KAAA,IAC9B,QAAA,EAAkB,iBAAA,EAAmB,eACrC,QAAA,EAAkB,iBAAA,EAAmB,UAAA,IACrC,QAAA,EAAkB,iBAAA,EAAmB,KAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,IAAA,MAAM,YAAY,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,IAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AACjF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAEhC,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,iBAAA,GAAoB,oBAAA,CAAqB,QAAQ,CAAA,GAAI,MAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,eAAA,KAAoB,MAAA,GAAY,oBAAA,CAAqB,eAAe,CAAA,GAAI,MAAA;AAE9F,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,oBAAA;AAAA,MACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACnF,UAAA;AAAA,MACA,aAAa,UAAA,EAAY,aAAA;AAAA,MACzB,cAAc,UAAA,EAAY,iBAAA;AAAA,MAC1B,aAAa,UAAA,EAAY,YAAA;AAAA,MACzB,iBAAA,EAAmB,YAAY,qBAAA,EAAuB,aAAA;AAAA,MACtD,YAAA,EAAc,WAAA;AAAA,MACd,aAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,MACvE,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,UAAA,GAAa,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAC/D,MAAA,MAAM,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA;AAC5C,MAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,MAAA,MAAM,cAAA,GAAiB,WAAW,qBAAA,EAAuB,aAAA;AACzD,MAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,cAAA,EAAgB,CAAA;AAC7G,MAAA,MAAM,WAAW,UAAA,CAAW,aAAA;AAC5B,MAAA,MAAM,YAAY,UAAA,CAAW,iBAAA;AAC7B,MAAA,MAAM,WAAW,UAAA,CAAW,YAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,SAAA;AACZ,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,aAAa,CAAA,EAAE;AACtF,MAAA,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACvB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,MAAA,CAAO,SAAS,CAAA,IAAK,CAAA,CAAA;AAAA,QAC3C,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,MAAA,CAAO,cAAc,CAAA,IAAK,CAAA;AAAA,OAC5D;AACA,MAAC,MAAc,KAAA,GAAQ,UAAA;AAAA,IACzB;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,oBAAA,EAAsB,KAAA,EAAQ,MAAc,KAAA,EAAM;AAAA,EACvE,CAAA;AACF;;;AC/OA,IAAM,sBAAA,GAAyB,CAAC,UAAA,EAAY,kBAAA,EAAoB,mBAAmB,CAAA;AAE5E,IAAM,uBAAA,GAAwE;AAAA,EACnF,IAAA,EAAM;AAAA,IACJ,QAAQ,EAAE,YAAA,EAAc,GAAG,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,IAAA,EAAM;AAAA,IACxE,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAsB,GAAA;AAAA,MACtB,sBAAA,EAAwB,GAAA;AAAA,MACxB,6BAAA,EAA+B,GAAA;AAAA,MAC/B,WAAA,EAAa,aAAA;AAAA,MACb,cAAA,EAAgB,EAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB,CAAA;AAAA,MACjB,kBAAA,EAAoB,iBAAA;AAAA,MACpB,yBAAA,EAA2B,IAAA;AAAA,MAC3B,oCAAA,EAAsC,IAAA;AAAA,MACtC,MAAA,EAAQ;AAAA,QACN,mBAAA,EAAqB,GAAA;AAAA,QACrB,kBAAA,EAAoB,GAAA;AAAA,QACpB,wBAAA,EAA0B,IAAA;AAAA,QAC1B,yBAAA,EAA2B;AAAA;AAC7B,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,YAAA,EAAc,YAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,gBAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,KAAA;AAAA,MACN,kBAAA,EAAoB,CAAA;AAAA,MACpB,aAAA,EAAe,CAAA;AAAA,MACf,gBAAA,EAAkB,CAAA;AAAA,MAClB,kBAAA,EAAoB,SAAA;AAAA,MACpB,yBAAA,EAA2B;AAAA,KAC7B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,oBAAA,EAAsB,IAAA;AAAA,MACtB,qBAAA,EAAuB,GAAA;AAAA,MACvB,aAAA,EAAe,iBAAA;AAAA,MACf,mBAAA,EAAqB,mBAAA;AAAA,MACrB,6BAA6B,EAAC;AAAA,MAC9B,aAAA,EAAe,CAAC,GAAG,sBAAsB,CAAA;AAAA,MACzC,gBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,IAAA;AAAA,MACpB,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,mBAAA,EAAqB,IAAA;AAAA,MACrB,yBAAA,EAA2B,GAAA;AAAA,MAC3B,mBAAA,EAAqB,IAAA;AAAA,MACrB,cAAA,EAAgB,IAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA;AACvB,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAQ,EAAE,YAAA,EAAc,GAAG,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,IAAA,EAAM;AAAA,IACxE,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAsB,IAAA;AAAA,MACtB,sBAAA,EAAwB,GAAA;AAAA,MACxB,6BAAA,EAA+B,IAAA;AAAA,MAC/B,WAAA,EAAa,aAAA;AAAA,MACb,cAAA,EAAgB,EAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB,CAAA;AAAA,MACjB,kBAAA,EAAoB,mBAAA;AAAA,MACpB,yBAAA,EAA2B,IAAA;AAAA,MAC3B,oCAAA,EAAsC,IAAA;AAAA,MACtC,MAAA,EAAQ;AAAA,QACN,mBAAA,EAAqB,IAAA;AAAA,QACrB,kBAAA,EAAoB,IAAA;AAAA,QACpB,wBAAA,EAA0B,IAAA;AAAA,QAC1B,yBAAA,EAA2B;AAAA;AAC7B,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,YAAA,EAAc,YAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,gBAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,YAAA;AAAA,MACN,kBAAA,EAAoB,CAAA;AAAA,MACpB,aAAA,EAAe,CAAA;AAAA,MACf,gBAAA,EAAkB,CAAA;AAAA,MAClB,kBAAA,EAAoB,QAAA;AAAA,MACpB,yBAAA,EAA2B;AAAA,KAC7B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,oBAAA,EAAsB,IAAA;AAAA,MACtB,qBAAA,EAAuB,IAAA;AAAA,MACvB,aAAA,EAAe,iBAAA;AAAA,MACf,mBAAA,EAAqB,mBAAA;AAAA,MACrB,6BAA6B,EAAC;AAAA,MAC9B,aAAA,EAAe,CAAC,GAAG,sBAAsB,CAAA;AAAA,MACzC,gBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,IAAA;AAAA,MACpB,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,mBAAA,EAAqB,IAAA;AAAA,MACrB,yBAAA,EAA2B,GAAA;AAAA,MAC3B,mBAAA,EAAqB,IAAA;AAAA,MACrB,cAAA,EAAgB,IAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA;AACvB,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,QAAQ,EAAE,YAAA,EAAc,IAAI,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,IAAA,EAAM;AAAA,IACzE,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAsB,GAAA;AAAA,MACtB,sBAAA,EAAwB,GAAA;AAAA,MACxB,6BAAA,EAA+B,GAAA;AAAA,MAC/B,WAAA,EAAa,aAAA;AAAA,MACb,cAAA,EAAgB,EAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB,EAAA;AAAA,MACjB,kBAAA,EAAoB,mBAAA;AAAA,MACpB,yBAAA,EAA2B,IAAA;AAAA,MAC3B,oCAAA,EAAsC,IAAA;AAAA,MACtC,MAAA,EAAQ;AAAA,QACN,mBAAA,EAAqB,IAAA;AAAA,QACrB,kBAAA,EAAoB,IAAA;AAAA,QACpB,wBAAA,EAA0B,GAAA;AAAA,QAC1B,yBAAA,EAA2B;AAAA;AAC7B,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,YAAA,EAAc,YAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,WAAA,EAAa,gBAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,YAAA;AAAA,MACN,kBAAA,EAAoB,CAAA;AAAA,MACpB,aAAA,EAAe,CAAA;AAAA,MACf,gBAAA,EAAkB,CAAA;AAAA,MAClB,kBAAA,EAAoB,QAAA;AAAA,MACpB,yBAAA,EAA2B;AAAA,KAC7B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,oBAAA,EAAsB,IAAA;AAAA,MACtB,qBAAA,EAAuB,IAAA;AAAA,MACvB,aAAA,EAAe,iBAAA;AAAA,MACf,mBAAA,EAAqB,mBAAA;AAAA,MACrB,6BAA6B,EAAC;AAAA,MAC9B,aAAA,EAAe,CAAC,GAAG,sBAAsB,CAAA;AAAA,MACzC,gBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,IAAA;AAAA,MACpB,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,mBAAA,EAAqB,IAAA;AAAA,MACrB,yBAAA,EAA2B,IAAA;AAAA,MAC3B,mBAAA,EAAqB,GAAA;AAAA,MACrB,cAAA,EAAgB,IAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA;AACvB,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAQ,EAAE,YAAA,EAAc,IAAI,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,IAAA,EAAM;AAAA,IACzE,aAAA,EAAe;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAsB,IAAA;AAAA,MACtB,sBAAA,EAAwB,GAAA;AAAA,MACxB,6BAAA,EAA+B,IAAA;AAAA,MAC/B,WAAA,EAAa,aAAA;AAAA,MACb,cAAA,EAAgB,EAAA;AAAA,MAChB,YAAA,EAAc,IAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB,EAAA;AAAA,MACjB,kBAAA,EAAoB,mBAAA;AAAA,MACpB,yBAAA,EAA2B,IAAA;AAAA,MAC3B,oCAAA,EAAsC,IAAA;AAAA,MACtC,MAAA,EAAQ;AAAA,QACN,mBAAA,EAAqB,IAAA;AAAA,QACrB,kBAAA,EAAoB,IAAA;AAAA,QACpB,wBAAA,EAA0B,GAAA;AAAA,QAC1B,yBAAA,EAA2B;AAAA;AAC7B,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA;AAAA,MACN,YAAA,EAAc,YAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,WAAA,EAAa,gBAAA;AAAA,MACb,UAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,WAAA;AAAA,MACN,kBAAA,EAAoB,CAAA;AAAA,MACpB,aAAA,EAAe,CAAA;AAAA,MACf,gBAAA,EAAkB,CAAA;AAAA,MAClB,kBAAA,EAAoB,MAAA;AAAA,MACpB,yBAAA,EAA2B;AAAA,KAC7B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,oBAAA,EAAsB,IAAA;AAAA,MACtB,qBAAA,EAAuB,IAAA;AAAA,MACvB,aAAA,EAAe,iBAAA;AAAA,MACf,mBAAA,EAAqB,mBAAA;AAAA,MACrB,6BAA6B,EAAC;AAAA,MAC9B,aAAA,EAAe,CAAC,GAAG,sBAAsB,CAAA;AAAA,MACzC,gBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,IAAA;AAAA,MACpB,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,mBAAA,EAAqB,IAAA;AAAA,MACrB,yBAAA,EAA2B,GAAA;AAAA,MAC3B,mBAAA,EAAqB,IAAA;AAAA,MACrB,cAAA,EAAgB,IAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA;AACvB;AAEJ;AAEA,SAAS,WAAA,CAAY,MAA6B,QAAA,EAA+C;AAC/F,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,QAAA,EAAU,YAAA,IAAgB,IAAA,CAAK,YAAA;AAAA,IAC7C,gBAAA,EAAkB,QAAA,EAAU,gBAAA,IAAoB,IAAA,CAAK,gBAAA;AAAA,IACrD,gBAAA,EAAkB,QAAA,EAAU,gBAAA,IAAoB,IAAA,CAAK;AAAA,GACvD;AACF;AAEA,SAAS,kBAAA,CAAmB,MAAyB,cAAA,EAAuD;AAC1G,EAAA,IAAI,IAAA,CAAK,aAAA,EAAe,OAAA,EAAS,OAAO,KAAK,aAAA,CAAc,OAAA;AAC3D,EAAA,IAAI,cAAA,KAAmB,UAAU,OAAO,cAAA;AACxC,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,2BAA2B,IAAA,EAAmD;AAC5F,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,cAAA,KAAmB,IAAA,CAAK,gBAAgB,QAAA,GAAW,UAAA,CAAA;AAC/E,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,IAAA,EAAM,cAAc,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,wBAAwB,WAAW,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,IAAiB,EAAC;AAC7C,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,KAAgB,IAAA;AACzC,EAAA,MAAM,qBAAA,GAAwB,KAAK,aAAA,KAAkB,KAAA;AACrD,EAAA,MAAM,wBAAwB,OAAO,IAAA,CAAK,kBAAkB,QAAA,GAAW,IAAA,CAAK,gBAAgB,EAAC;AAC7F,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,EAAU,IAAA,IAAQ,aAAA,CAAc,UAAU,IAAA,KAAS,WAAA,GAAc,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,IAAA,CAAA;AACpH,EAAA,MAAM,WAAA,GAAe,IAAA,CAAK,MAAA,EAAQ,KAAA,IAAS,cAAc,MAAA,EAAQ,KAAA;AAEjE,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,EAAQ,YAAY,WAAA,CAAY,MAAA,CAAO,QAAQ,aAAA,CAAc,MAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA;AAAA,IACjF,aAAA,EAAe;AAAA,MACb,GAAG,MAAA,CAAO,aAAA;AAAA,MACV,GAAI,aAAA,CAAc,aAAA,IAAiB,EAAC;AAAA,MACpC,GAAG,qBAAA;AAAA,MACH,MAAA,EAAQ,wBAAwB,KAAA,GAAS,qBAAA,CAAsB,UAAU,aAAA,CAAc,aAAA,EAAe,MAAA,IAAU,MAAA,CAAO,aAAA,CAAc,MAAA;AAAA,MACrI,SAAA,EAAW,qBAAA,CAAsB,SAAA,IAAa,IAAA,CAAK,MAAA,EAAQ,oBAAoB,aAAA,CAAc,aAAA,EAAe,SAAA,IAAa,MAAA,CAAO,aAAA,CAAc,SAAA;AAAA,MAC9I,oBAAA,EACE,qBAAA,CAAsB,oBAAA,IACnB,qBAAA,CAAsB,aACtB,IAAA,CAAK,MAAA,EAAQ,gBAAA,IACb,aAAA,CAAc,eAAe,oBAAA,IAC7B,aAAA,CAAc,aAAA,EAAe,SAAA,IAC7B,OAAO,aAAA,CAAc,oBAAA;AAAA,MAC1B,gBAAgB,qBAAA,CAAsB,cAAA,IAAkB,cAAc,aAAA,EAAe,cAAA,IAAkB,OAAO,aAAA,CAAc;AAAA,KAC9H;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAG,MAAA,CAAO,OAAA;AAAA,MACV,GAAI,aAAA,CAAc,OAAA,IAAW,EAAC;AAAA,MAC9B,GAAI,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,MACrB,MAAA,EAAQ;AAAA,QACN,GAAG,OAAO,OAAA,CAAQ,MAAA;AAAA,QAClB,GAAK,aAAA,CAAc,OAAA,EAAS,MAAA,IAAU,EAAC;AAAA,QACvC,GAAK,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU;AAAC,OAChC;AAAA,MACA,kBAAA,EAAoB,KAAK,OAAA,EAAS,kBAAA,IAAsB,cAAc,OAAA,EAAS,kBAAA,IAAsB,OAAO,OAAA,CAAQ;AAAA,KACtH;AAAA,IACA,QAAA,EAAU;AAAA,MACR,GAAG,MAAA,CAAO,QAAA;AAAA,MACV,GAAI,aAAA,CAAc,QAAA,IAAY,EAAC;AAAA,MAC/B,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,MACtB,IAAA,EAAM;AAAA,KACR;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,GAAG,MAAA,CAAO,MAAA;AAAA,MACV,GAAI,aAAA,CAAc,MAAA,IAAU,EAAC;AAAA,MAC7B,GAAI,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,MACpB,KAAA,EAAO;AAAA,KACT;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,MAAA,CAAO,UAAA;AAAA,MACV,GAAI,aAAA,CAAc,UAAA,IAAc,EAAC;AAAA,MACjC,GAAI,IAAA,CAAK,UAAA,IAAc;AAAC,KAC1B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,GAAG,MAAA,CAAO,aAAA;AAAA,MACV,GAAI,aAAA,CAAc,aAAA,IAAiB,EAAC;AAAA,MACpC,GAAI,IAAA,CAAK,aAAA,IAAiB,EAAC;AAAA,MAC3B,2BAAA,EAA6B;AAAA,QAC3B,GAAG,OAAO,aAAA,CAAc,2BAAA;AAAA,QACxB,GAAK,aAAA,CAAc,aAAA,EAAe,2BAAA,IAA+B,EAAC;AAAA,QAClE,GAAK,IAAA,CAAK,aAAA,EAAe,2BAAA,IAA+B;AAAC,OAC3D;AAAA,MACA,aAAA,EAAe,KAAK,aAAA,EAAe,aAAA,IAAiB,cAAc,aAAA,EAAe,aAAA,IAAiB,OAAO,aAAA,CAAc;AAAA,KACzH;AAAA,IACA,QAAA,EAAU;AAAA,MACR,GAAG,MAAA,CAAO,QAAA;AAAA,MACV,GAAI,aAAA,CAAc,QAAA,IAAY,EAAC;AAAA,MAC/B,GAAI,IAAA,CAAK,QAAA,IAAY;AAAC;AACxB,GACF;AACF;AAEO,SAAS,sBAAA,CAAuB,MAAyB,OAAA,EAAsF;AACpJ,EAAA,OAAO,OAAA,EAAS,KAAA,IAAS,0BAAA,CAA2B,IAAI,CAAA;AAC1D;;;ACvWO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,IAAI,CAAC,MAAM,OAAO,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA,IAAK,EAAC,EAAG,MAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,GAAS,aAAA;AAEjC,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,UAAA,GAAa,CAAA,GAAI,gBAAgB,GAAG,CAAA;AACvD;AAYA,SAAS,mBAAmB,CAAA,EAAgB;AAC1C,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AACvB,EAAA,IAAI,CAAA,CAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAG7B,EAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,EACtB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,OAAA,EAAS;AACzB,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,WAAA,IAC9B,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,WAAA,IAC1B,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,WAAA,IAChC,CAAA,EAAG,IAAA,KAAS,UAAA,IAAc,CAAA,EAAG,KAAA,EAAO;AAE3C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AACvB,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,CAAA,CAAE,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,MAC5E,CAAA,MAAA,IAAW,CAAA,IAAK,IAAA,IAAQ,OAAO,MAAM,QAAA,EAAU;AAC7C,QAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,WAAW,CAAA,CAAE,OAAA,IAAW,QAAQ,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU;AAC7D,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EACtC;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,EAAG;AAC/B,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,UAAA,EAAY;AAC7B,MAAA,IAAI,IAAI,QAAA,EAAU,IAAA,QAAY,IAAA,CAAK,EAAA,CAAG,SAAS,IAAI,CAAA;AACnD,MAAA,IAAI,EAAA,EAAI,UAAU,SAAA,EAAW;AAC3B,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,OAAO,EAAA,CAAG,QAAA,CAAS,SAAA,KAAc,QAAA,GAC7B,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAS;AAAA,SAC1C;AAAA,MACF;AAEA,MAAA,IAAI,EAAA,EAAI,QAAQ,CAAC,EAAA,EAAI,UAAU,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AACvD,MAAA,IAAI,EAAA,EAAI,IAAA,IAAQ,CAAC,EAAA,EAAI,UAAU,SAAA,EAAW;AACxC,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,EAAA,CAAG,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,iBAAA,EAAmB,UAAU,CAAA,EAAG;AAClD,IAAA,KAAA,MAAW,EAAA,IAAM,CAAA,CAAE,iBAAA,CAAkB,UAAA,EAAY;AAC/C,MAAA,IAAI,IAAI,QAAA,EAAU,IAAA,QAAY,IAAA,CAAK,EAAA,CAAG,SAAS,IAAI,CAAA;AACnD,MAAA,IAAI,EAAA,EAAI,UAAU,SAAA,EAAW;AAC3B,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,OAAO,EAAA,CAAG,QAAA,CAAS,SAAA,KAAc,QAAA,GAC7B,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAS;AAAA,SAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAYO,SAAS,oBAAoB,QAAA,EAAyB;AAC3D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,CAAA;AAC9D,EAAA,MAAM,UAAU,QAAA,CAAS,GAAA,CAAI,kBAAkB,CAAA,CAAE,KAAK,IAAI,CAAA;AAE1D,EAAA,OAAO,iBAAA,CAAkB,OAAO,CAAA,GAAI,QAAA,CAAS,MAAA,GAAS,CAAA;AACxD;;;AClGA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,OAAO,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa,OAAO,KAAK,CAAA;AAAA,EACnE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAEA,SAAS,gBAAgB,KAAA,EAAoB;AAC3C,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,SAAS,GAAA,GAAM,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA,GAAQ,KAAA;AAAA,EAC5D;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,UAAU,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,KAAK,CAAA;AAC/F,IAAA,OAAO,gBAAgB,KAAA,CAAM,MAAM,CAAA,EAAA,EAAK,OAAO,GAAG,IAAA,EAAK;AAAA,EACzD;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,cAAc,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC3G,IAAA,OAAO,eAAe,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,OAAO,GAAG,IAAA,EAAK;AAAA,EACvD;AACA,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEO,SAAS,oBAAA,CAAqB,QAAA,EAAkB,MAAA,EAAiB,MAAA,EAA8D;AACpI,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,kBAAkB,UAAU,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,cAAc,aAAa,CAAA;AAEhE,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,UAAA;AACxC,EAAA,IAAI,UAAA,IAAc,OAAO,aAAA,CAAc,qBAAA,IAAyB,WAAW,MAAA,IAAU,MAAA,CAAO,cAAc,oBAAA,EAAsB;AAC9H,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAA,KAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,IAAU,eAAe,MAAA,EAAQ;AACzE,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA;AACT;AAEO,SAAS,yBAAA,CACd,QAAA,EACA,MAAA,EACA,MAAA,EAQA;AACA,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,kBAAkB,UAAU,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,2BAAA,CAA4B,QAAQ,CAAA;AACxE,EAAA,IAAI,eAAA,GAA+C,MAAA,IAAU,MAAA,CAAO,aAAA,CAAc,aAAA;AAElF,EAAA,IAAI,mBAAmB,UAAA,EAAY;AACjC,IAAA,eAAA,GAAkB,MAAA,IAAU,OAAO,aAAA,CAAc,cAAA;AAAA,EACnD,CAAA,MAAA,IAAW,mBAAmB,SAAA,EAAW;AACvC,IAAA,eAAA,GAAkB,MAAA,IAAU,OAAO,aAAA,CAAc,mBAAA;AAAA,EACnD,CAAA,MAAA,IAAW,mBAAmB,WAAA,EAAa;AACzC,IAAA,eAAA,GAAkB,MAAA,IAAU,MAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,MAAM,CAAA;AACtC,EAAA,IAAI,oBAAoB,WAAA,EAAa;AACnC,IAAA,OAAO,EAAE,gBAAgB,eAAA,EAAiB,OAAA,EAAS,YAAY,SAAA,EAAW,MAAA,EAAQ,SAAS,UAAA,EAAW;AAAA,EACxG;AACA,EAAA,IAAI,oBAAoB,iBAAA,EAAmB;AACzC,IAAA,OAAO,EAAE,gBAAgB,eAAA,EAAiB,OAAA,EAAS,SAAS,SAAA,EAAW,MAAA,EAAQ,SAAS,UAAA,EAAW;AAAA,EACrG;AACA,EAAA,IAAI,oBAAoB,mBAAA,EAAqB;AAC3C,IAAA,OAAO;AAAA,MACL,cAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA,EAAS,2BAA2B,OAAO,CAAA,CAAA;AAAA,MAC3C,SAAA,EAAW,MAAA;AAAA,MACX,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA,EAAS,0BAA0B,OAAO,CAAA,CAAA;AAAA,IAC1C,SAAA,EAAW,MAAA;AAAA,IACX,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,gBAAA,CACd,MACA,IAAA,EAC2D;AAC3D,EAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,CAAO,UAAU,UAAA,EAAY;AACjD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAE;AAAA,EAC/C,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,GAAG,KAAA,CAAM,IAAA,CAAK,KAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC5G,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAA,EAAQ;AAAA,IAC9B;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EACtF;AACF;;;AC5GA,SAAS,6BAA6B,KAAA,EAA+B;AACnE,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,IAAA;AAClE,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,GAAG,OAAO,IAAA;AACrC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACpC,EAAA,OAAO,UAAA,IAAc,IAAI,UAAA,GAAa,IAAA;AACxC;AAEA,SAAS,6BAAA,CAA8B,aAAwC,QAAA,EAA0B;AACvG,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,CAAA;AACxC,EAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,EAAO,QAAA,KAAa,QAAA,KAAa,KAAA,EAAO,MAAA,KAAW,SAAA,IAAa,KAAA,EAAO,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AACrI;AAEO,SAAS,eAAA,CAAgB,cAAmD,IAAA,EAA0B;AAC3G,EAAA,OAAO,OAAO,KAAA,KAAoC;AAChD,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,IAAS;AAAA,MAC7B,MAAM,IAAA,EAAM,IAAA;AAAA,MACZ,OAAO,IAAA,EAAM,KAAA;AAAA,MACb,KAAA,EAAO,YAAA;AAAA,MACP,QAAQ,IAAA,EAAM,MAAA;AAAA,MACd,cAAc,IAAA,EAAM,YAAA;AAAA,MACpB,gBAAgB,IAAA,EAAM,cAAA;AAAA,MACtB,aAAa,IAAA,EAAM,WAAA;AAAA,MACnB,cAAe,IAAA,EAAc;AAAA,KAC/B;AACA,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,IAAS,IAA0B,OAAc,CAAA;AACzF,IAAA,MAAM,cAAmD,OAAA,CAAQ,KAAA;AACjE,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA2B;AAClD,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa,UAAA,CAAW,GAAA,CAAK,IAAA,CAAa,MAAM,IAAI,CAAA;AAEvE,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,cAAe,OAAA,CAAQ,MAAA,EAAQ,YAAA,IAAgB,QAAA,CAAS,OAAO,YAAA,IAAgB,EAAA;AAAA,MAC/E,gBAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,OAAA,CAAQ,QAAQ,gBAAA,IAAoB,QAAA,CAAS,MAAA,CAAO,gBAAA,IAAoB,CAAY;AAAA,KACrH;AACA,IAAA,MAAM,WAAsB,EAAC;AAC7B,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,UAAA,GAAc,MAAM,GAAA,EAAa,YAAA;AACvC,IAAA,MAAM,iBAAA,GAAqB,MAAM,GAAA,EAAa,mBAAA;AAC9C,IAAA,MAAM,WAAA,GAAe,MAAM,GAAA,EAAa,aAAA;AACxC,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,mBAA0C,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,gBAAgB,IAChF,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IACpD,EAAC;AACL,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,gBAAA,CAAiB,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,UAAA,EAAY,KAAK,CAAC,CAAC,CAAA;AAC1F,IAAA,IAAI,gBAAA,GAAmB,KAAA;AAEvB,IAAA,KAAA,MAAW,IAAA,IAAQ,UAAA,CAAW,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,OAAA,GAAe,IAAA;AACrB,MAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAO,OAAA,CAAQ,cAAc,QAAA,EAAU;AAC9D,QAAA,OAAA,CAAQ,SAAA,CAAU,cAAc,KAAA,CAAM,WAAA;AACtC,QAAA,OAAA,CAAQ,SAAA,CAAU,sBAAsB,KAAA,CAAM,mBAAA;AAC9C,QAAA,OAAA,CAAQ,UAAU,SAAA,GAAY,OAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,IAAA,IAAI,SAAA,GAAY,MAAM,aAAA,IAAiB,CAAA;AACvC,IAAA,MAAM,SAAA,GAA6D,MAAM,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA,GAAI,IAAA,CAAK,aAAa,EAAC;AACxH,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,EAAC;AAC1C,IAAA,MAAM,mBAAA,GAAsB,KAAA,CAAM,mBAAA,IAAuB,EAAC;AAC1D,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,eAAe,SAAS,CAAA;AAC7D,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAMzC,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,aAAa,OAAA,EAAS,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,SAAA,EAAU;AACtE,MAAA,IAAI,iBAAA,IAAqB,kBAAkB,uBAAA,EAAyB,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,WAAA,EAAY;AAClH,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAU;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,EAAiB,QAAA,EAAkB,UAAA,KAAwB;AAClF,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,eAAA,GAAkB,OAAA;AACtB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,GAAA,CAAI,iBAAA,GAAoB,EAAE,QAAA,EAAU,UAAA,EAAY,OAAA,EAAQ;AAAA,MAC1D;AACA,MAAA,IAAI,QAAA,CAAS,SAAS,mBAAA,EAAqB;AACzC,QAAA,GAAA,CAAI,iBAAA,GAAoB,IAAA;AAAA,MAC1B;AACA,MAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AAAA,IACd,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,OAAO,EAAA,KAA+E;AACnG,MAAA,MAAM,cAAc,WAAA,EAAY;AAChC,MAAA,IAAI,YAAY,SAAA,EAAW;AACzB,QAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,QAAC,GAAA,CAAY,WAAA,GAAc,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AAC7G,QAAA,OAAA,GAAU,EAAE,MAAM,WAAA,EAAa,KAAA,EAAO,SAAS,MAAA,EAAQ,WAAA,CAAY,QAAQ,CAAA;AAC3E,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAO,EAAG,CAAA;AAC7F,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,gBAAA,EAAmB,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,YAAA,EAAc,EAAA,CAAG,MAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAC5I,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,OAAO,OAAA,EAAS,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,EAAI,GAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,EAAS,gBAAA,IAAoB,CAAA;AAC9H,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,IAAI,OAAY,EAAA,CAAG,IAAA;AACnB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,IAAI;AAAE,UAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAwB;AAAA,MACjE;AAEA,MAAA,MAAM,UAAA,GAAa,GAAG,EAAA,IAAM,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,CAAA,CAAA;AACvD,MAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,IAAA,EAAM,IAAI,CAAA;AACjD,MAAA,IAAI,CAAC,aAAA,CAAc,EAAA,IAAM,QAAA,CAAS,aAAA,CAAc,qBAAqB,QAAA,EAAU;AAC7E,QAAA,MAAM,eAAe,CAAA,oCAAA,EAAuC,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,cAAc,OAAO,CAAA,CAAA;AAC7F,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAC9F,QAAA,eAAA,CAAgB,YAAA,EAAc,EAAA,CAAG,IAAA,EAAM,UAAU,CAAA;AACjD,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,MAAM,EAAA,CAAG,IAAA,EAAM,EAAA,EAAI,EAAA,CAAG,IAAI,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,EAAS,YAAA,IAAgB,CAAA;AACjH,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AACA,MAAA,IAAI,cAAc,EAAA,EAAI;AACpB,QAAA,IAAA,GAAO,aAAA,CAAc,KAAA;AAAA,MACvB;AAEA,MAAA,MAAM,QAAA,GAAY,IAAA,CAAa,IAAA,IAAQ,EAAA,CAAG,IAAA;AAC1C,MAAA,MAAM,mBAAA,GAAsB,4BAAA,CAA8B,IAAA,CAAa,mBAAmB,CAAA;AAC1F,MAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,QAAA,MAAM,iBAAA,GAAoB,6BAAA,CAA8B,WAAA,EAAa,QAAQ,CAAA;AAC7E,QAAA,IAAI,qBAAqB,mBAAA,EAAqB;AAC5C,UAAA,MAAM,YAAA,GAAe,CAAA,8CAAA,EAAiD,QAAQ,CAAA,EAAA,EAAK,mBAAmB,CAAA,KAAA,CAAA;AACtG,UAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAC9F,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,CAAA;AAClF,UAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,YAC7B,IAAA,EAAM,WAAA;AAAA,YACN,KAAA,EAAO,kBAAkB,QAAQ,CAAA,CAAA;AAAA,YACjC,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,YACrD,MAAA,EAAQ,SAAA;AAAA,YACR,iBAAiB,EAAA,CAAG,EAAA;AAAA,YACpB,WAAA,EAAa;AAAA,cACX;AAAA,gBACE,IAAA,EAAM,WAAA;AAAA,gBACN,IAAA,EAAM,QAAA;AAAA,gBACN,OAAA,EAAS,YAAA;AAAA,gBACT,UAAA,EAAY;AAAA,kBACV;AAAA,oBACE,IAAI,EAAA,CAAG,EAAA;AAAA,oBACP,IAAA,EAAM,UAAA;AAAA,oBACN,UAAU,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,oBAAA,CAAqB,IAAI,CAAA;AAAE;AACpE;AACF;AACF;AACF,WACD,CAAA;AACD,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,QAC3B;AAAA,MACF;AAEA,MAAA,IAAI,aAAA,GAAgB,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAClD,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAS,IAAA,CAAa,aAAa,CAAA;AACzD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,aAAA,GAAgB;AAAA,YACd,IAAIC,MAAAA,EAAO;AAAA,YACX,UAAA;AAAA,YACA,QAAA,EAAW,IAAA,CAAa,IAAA,IAAQ,EAAA,CAAG,IAAA;AAAA,YACnC,IAAA;AAAA,YACA,MAAA,EAAQ,SAAA;AAAA,YACR,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,YACpC,QAAA,EAAW,IAAA,CAAa,cAAA,IAAmB,IAAA,CAAa,gBAAA,GACpD,EAAE,MAAA,EAAS,IAAA,CAAa,cAAA,EAAgB,QAAA,EAAW,IAAA,CAAa,gBAAA,EAAiB,GACjF;AAAA,WACN;AACA,UAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA;AACnC,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAC7C,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,WAAW,EAAA,EAAI,aAAA,CAAc,EAAA,EAAI,QAAA,EAAU,cAAc,QAAA,EAAU,UAAA,EAAY,aAAA,CAAc,UAAA,EAAY,MAAM,CAAA;AAAA,QAC5J,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,IAAA,EAAM;AAC9B,UAAA,aAAA,CAAc,IAAA,GAAO,IAAA;AAAA,QACvB;AAEA,QAAA,IAAI,aAAA,CAAc,WAAW,SAAA,EAAW;AACtC,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,UAAA,GAAA,CAAI,kBAAA,GAAqB;AAAA,YACvB,YAAY,aAAA,CAAc,EAAA;AAAA,YAC1B,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,aAAa,aAAA,CAAc;AAAA,WAC7B;AACA,UAAA,GAAA,CAAI,aAAA,GAAgB,OAAA;AACpB,UAAA,OAAO,EAAE,MAAA,EAAQ,mBAAA,EAAqB,QAAA,EAAU,aAAA,EAAc;AAAA,QAChE;AAEA,QAAA,IAAI,aAAA,CAAc,WAAW,UAAA,EAAY;AACvC,UAAA,MAAM,gBAAA,GAAmB,cAAc,OAAA,IAAW,iCAAA;AAClD,UAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,CAAA,oBAAA,EAAuB,gBAAgB,CAAA,CAAA,EAAI,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAC3H,UAAA,aAAA,CAAc,QAAA,GAAW,EAAE,GAAI,aAAA,CAAc,YAAY,EAAC,EAAI,YAAY,UAAA,EAAW;AACrF,UAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,UAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAC7C,UAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAaA,MAAAA,EAAO,EAAG,QAAA,EAAW,IAAA,CAAa,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,CAAA,UAAA,EAAa,gBAAgB,CAAA,CAAA,EAAI,WAAW,IAAA,EAAM,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAG,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,MAAA,EAAQ,UAAA,EAAY,CAAA;AACtN,UAAA,OAAA,GAAU,EAAE,MAAM,eAAA,EAAiB,MAAA,EAAQ,YAAY,EAAA,EAAI,aAAA,CAAc,IAAI,QAAA,EAAU,aAAA,CAAc,UAAU,UAAA,EAAY,aAAA,CAAc,YAAY,OAAA,EAAS,aAAA,CAAc,SAAS,SAAA,EAAW,aAAA,CAAc,WAAW,CAAA;AACzN,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,aAAA,EAAc;AAAA,QACvD;AAEA,QAAA,IAAI,aAAA,CAAc,MAAA,KAAW,UAAA,IAAc,aAAA,CAAc,iBAAiB,MAAA,EAAW;AACnF,UAAA,IAAA,GAAO,aAAA,CAAc,YAAA;AACrB,UAAA,OAAA,GAAU,EAAE,MAAM,eAAA,EAAiB,MAAA,EAAQ,YAAY,EAAA,EAAI,aAAA,CAAc,IAAI,QAAA,EAAU,aAAA,CAAc,UAAU,UAAA,EAAY,aAAA,CAAc,YAAY,SAAA,EAAW,aAAA,CAAc,WAAW,OAAA,EAAS,aAAA,CAAc,SAAS,CAAA;AAAA,QAC3N;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,aAAA,GAAgB,qBAAqB,IAAI,CAAA;AAC/C,MAAA,MAAM,aAAa,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAEhG,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,CAAA;AAChF,QAAA,UAAA,GAAa,EAAE,OAAO,OAAA,EAAS,OAAA,EAAS,gBAAgB,EAAA,CAAG,IAAI,IAAI,CAAA;AACnE,QAAA,MAAM,OAAA,GAAU,IAAA;AAChB,QAAA,MAAM,WAAA,GAAc,EAAE,iBAAA,EAAmB,MAAA,EAAQ,WAAA,EAAY;AAC7D,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,OAAO,QAAQ,IAAA,KAAS,UAAA,WAAqB,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AAAA,aAAA,IAC5E,OAAO,QAAQ,MAAA,KAAW,UAAA,WAAqB,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,WAAW,CAAA;AAAA,aAAA,IACrF,OAAO,QAAQ,IAAA,KAAS,UAAA,WAAqB,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AAAA,aAAA,IACjF,OAAO,QAAQ,KAAA,KAAU,UAAA,WAAqB,MAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,WAAW,CAAA;AAAA,aAAA,IACnF,OAAO,QAAQ,GAAA,KAAQ,UAAA,WAAqB,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,WAAW,CAAA;AAAA,aACnF,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAAA;AAE5C,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,QAAA,MAAM,cAAcA,MAAAA,EAAO;AAE3B,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,SAAA,IAAa,MAAA,CAAO,UAAU,OAAA,EAAS;AACxF,UAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAa,QAAA,EAAU,MAAM,MAAA,EAAQ,YAAA,EAAc,WAAW,MAAA,EAAQ,SAAA,EAAA,qBAAe,IAAA,EAAK,EAAE,aAAY,EAAG,YAAA,EAAc,GAAG,EAAA,EAAI,MAAA,EAAQ,WAAW,CAAA;AACtK,UAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,IAAA,EAAM,cAAc,EAAA,CAAG,EAAA,IAAM,GAAG,EAAA,CAAG,IAAI,IAAI,QAAA,CAAS,MAAM,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACpH,UAAA,KAAA,CAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,OAAA;AAC/B,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,CAAA;AAClF,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,YAAY,CAAA;AACjH,UAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,YAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,YAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,YAAA,aAAA,CAAc,WAAA,GAAc,WAAA;AAC5B,YAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAAA,UAC/C;AACA,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,aAAA,EAAc;AAAA,QACtD;AAEA,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,uBAAA,EAAyB;AAC1E,UAAA,IAAI,CAAC,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,MAAM,EAAC;AAC7B,UAAA,KAAA,CAAM,GAAA,CAAI,2BAA2B,MAAA,CAAO,IAAA;AAC5C,UAAA,KAAA,CAAM,IAAI,gCAAA,GAAmC,IAAA;AAAA,QAC/C;AAEA,QAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0B,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAC3E,QAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,QAAA,MAAM,YAAA,GAAe,cAAA,CAAe,eAAA,KAAoB,WAAA,GAAc,SAAS,cAAA,CAAe,OAAA;AAE9F,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,WAAA;AAAA,UACA,QAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EAAW,MAAA;AAAA,UACX,SAAA;AAAA,UACA,cAAc,EAAA,CAAG,EAAA;AAAA,UACjB,UAAA,EAAY,eAAe,eAAA,KAAoB,WAAA;AAAA,UAC/C,oBAAoB,cAAA,CAAe,UAAA;AAAA,UACnC,gBAAgB,cAAA,CAAe,cAAA;AAAA,UAC/B,iBAAiB,cAAA,CAAe,eAAA;AAAA,UAChC,SAAS,cAAA,CAAe,OAAA;AAAA,UACxB,WAAW,cAAA,CAAe,eAAA,KAAoB,uBAAuB,cAAA,CAAe,eAAA,KAAoB,SAAS,WAAA,GAAc,KAAA,CAAA;AAAA,UAC/H,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,IAAI,QAAA,CAAS,QAAQ,yBAAA,KAA8B,cAAA,CAAe,oBAAoB,mBAAA,IAAuB,cAAA,CAAe,oBAAoB,MAAA,CAAA,EAAS;AACvJ,UAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,YACvB,WAAA;AAAA,YACA,QAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA,EAAW,MAAA;AAAA,YACX,SAAA;AAAA,YACA,cAAc,EAAA,CAAG,EAAA;AAAA,YACjB,UAAA,EAAY,IAAA;AAAA,YACZ,oBAAoB,cAAA,CAAe,UAAA;AAAA,YACnC,gBAAgB,cAAA,CAAe,cAAA;AAAA,YAC/B,iBAAiB,cAAA,CAAe,eAAA;AAAA,YAChC,SAAS,cAAA,CAAe,OAAA;AAAA,YACxB,SAAA,EAAW,WAAA;AAAA,YACX,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,qBAAqB,cAAA,CAAe,OAAA;AACxC,QAAA,IAAI,cAAA,CAAe,oBAAoB,mBAAA,EAAqB;AAC1D,UAAA,kBAAA,GAAqB,CAAA,oCAAA,EAAuC,WAAW,CAAA,GAAA,EAAM,cAAA,CAAe,OAAO;AAAA,wCAAA,EAA6C,WAAW,CAAA,8BAAA,CAAA;AAAA,QAC7J,CAAA,MAAA,IAAW,cAAA,CAAe,eAAA,KAAoB,MAAA,EAAQ;AACpD,UAAA,kBAAA,GAAqB,CAAA,mCAAA,EAAsC,WAAW,CAAA,GAAA,EAAM,cAAA,CAAe,OAAO;AAAA,wCAAA,EAA6C,WAAW,CAAA,8BAAA,CAAA;AAAA,QAC5J;AACA,QAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,kBAAA,EAAoB,cAAc,EAAA,CAAG,EAAA,IAAM,GAAG,EAAA,CAAG,IAAI,IAAI,QAAA,CAAS,MAAM,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAClI,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,YAAY,CAAA;AAC9G,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,UAAA,CAAA,EAAc,MAAA,EAAQ,EAAE,UAAA,EAAW,EAAG,CAAA;AAE7F,QAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,UAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,UAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,UAAA,aAAA,CAAc,WAAA,GAAc,WAAA;AAC5B,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAAA,QAC/C;AAEA,QAAA,MAAM,eAAA,GAAkB,qBAAqB,MAAM,CAAA;AACnD,QAAA,MAAM,cAAc,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,eAAe,CAAA,GAAI,KAAA,CAAA;AACnG,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB;AAAA,YACE,IAAA,EAAM,WAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,OAAA,EAAS,EAAA;AAAA,YACT,UAAA,EAAY;AAAA,cACV;AAAA,gBACE,EAAA,EAAI,GAAG,EAAA,IAAM,WAAA;AAAA,gBACb,IAAA,EAAM,UAAA;AAAA,gBACN,QAAA,EAAU;AAAA,kBACR,IAAA,EAAM,QAAA;AAAA,kBACN,SAAA,EAAW;AAAA;AACb;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,SAAS,cAAA,CAAe;AAAA;AAC1B,SACF;AACA,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO,oBAAoB,QAAQ,CAAA,CAAA;AAAA,UACnC,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,UACrD,UAAA;AAAA,UACA,YAAA,EAAc,UAAA;AAAA,UACd,aAAA,EAAe,WAAA;AAAA,UACf,eAAA,EAAiB,WAAA;AAAA,UACjB,WAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACL,gBAAgB,cAAA,CAAe,cAAA;AAAA,YAC/B,iBAAiB,cAAA,CAAe,eAAA;AAAA,YAChC,oBAAoB,cAAA,CAAe;AAAA;AACrC,SACD,CAAA;AACD,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,aAAA,EAAc;AAAA,MACtD,SAAS,KAAA,EAAY;AACnB,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,QAAA,MAAM,cAAcA,MAAAA,EAAO;AAC3B,QAAA,MAAM,OAAA,GAAU,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAC9C,QAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAa,QAAA,EAAU,MAAM,MAAA,EAAQ,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAA,EAAI,SAAA,EAAW,IAAA,EAAM,4BAAW,IAAI,IAAA,IAAO,WAAA,EAAY,EAAG,cAAc,EAAA,CAAG,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,CAAA;AACxL,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,sBAAA,EAAyB,OAAO,IAAI,YAAA,EAAc,EAAA,CAAG,MAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAClJ,QAAA,eAAA,CAAgB,OAAA,EAAS,UAAU,UAAU,CAAA;AAC7C,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAS,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,IAAI,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,IAAW,CAAA;AACpG,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,OAAA,CAAA,EAAW,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA,IAAW,CAAA;AAC9F,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO,gBAAgB,QAAQ,CAAA,CAAA;AAAA,UAC/B,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,UACrD,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA;AAAA,UACA,YAAA,EAAc,UAAA;AAAA,UACd,eAAA,EAAiB,WAAA;AAAA,UACjB,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,UACtC,WAAA,EAAa;AAAA,YACX;AAAA,cACE,IAAA,EAAM,WAAA;AAAA,cACN,IAAA,EAAM,QAAA;AAAA,cACN,OAAA,EAAS,EAAA;AAAA,cACT,UAAA,EAAY;AAAA,gBACV;AAAA,kBACE,EAAA,EAAI,GAAG,EAAA,IAAM,WAAA;AAAA,kBACb,IAAA,EAAM,UAAA;AAAA,kBACN,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,aAAA;AAAc;AACvD;AACF,aACF;AAAA,YACA;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,QAAA;AAAA,cACN,OAAA,EAAS,yBAAyB,OAAO,CAAA;AAAA;AAC3C;AACF,SACD,CAAA;AACD,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,aAAA,EAAc;AAAA,MACpD;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,IAAI,gBAAA,EAAkB;AACtB,MAAA,MAAM,cAAc,WAAA,EAAY;AAChC,MAAA,IAAI,YAAY,SAAA,EAAW;AACzB,QAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,QAAC,GAAA,CAAY,WAAA,GAAc,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AAC7G,QAAA,OAAA,GAAU,EAAE,MAAM,WAAA,EAAa,KAAA,EAAO,SAAS,MAAA,EAAQ,WAAA,CAAY,QAAQ,CAAA;AAC3E,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAO,EAAG,CAAA;AAC7F,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,EAAE,CAAA;AAC9B,MAAA,IAAI,MAAA,CAAO,WAAW,mBAAA,EAAqB;AACzC,QAAA,gBAAA,GAAmB,IAAA;AACnB,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAC1F,MAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,EAAA,CAAG,IAAI,CAAA;AAClD,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO,CAAA,eAAA,EAAkB,EAAA,CAAG,IAAI,CAAA,CAAA;AAAA,QAChC,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAM,EAAA,CAAG,IAAA,EAAM,MAAM,MAAA,EAAO;AAAA,QACpD,MAAA,EAAQ,SAAA;AAAA,QACR,iBAAiB,EAAA,CAAG,EAAA;AAAA,QACpB,WAAA,EAAa;AAAA,UACX;AAAA,YACE,IAAA,EAAM,WAAA;AAAA,YACN,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,OAAA,EAAS,CAAA,qCAAA,EAAwC,EAAA,CAAG,IAAI,CAAA,CAAA;AAAA,YACxD,UAAA,EAAY;AAAA,cACV;AAAA,gBACE,IAAI,EAAA,CAAG,EAAA;AAAA,gBACP,IAAA,EAAM,UAAA;AAAA,gBACN,UAAU,EAAE,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,WAAW,aAAA;AAAc;AACtD;AACF;AACF;AACF,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,qCAAA,EAAwC,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,YAAA,EAAc,EAAA,CAAG,MAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AACjK,MAAA,SAAA,IAAa,CAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,gBAAA,IAAoB,KAAA,CAAM,GAAA,EAAK,kBAAA,EAAoB;AACtD,MAAA,MAAM,GAAA,GAAM,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC3B,MAAA,OAAO,GAAA,CAAI,kBAAA;AACX,MAAA,IAAI,CAAC,iBAAiB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,MAAA,KAAW,UAAU,CAAA,EAAG;AAClE,QAAA,OAAO,GAAA,CAAI,aAAA;AAAA,MACb;AACA,MAAA,KAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,IAAI,GAAA,GAAM,MAAA;AAAA,IAClD;AAEA,IAAA,OAAO;AAAA,MACL,UAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,MACzC,aAAA,EAAe,SAAA;AAAA,MACf,WAAA;AAAA,MACA,mBAAA;AAAA,MACA,OAAO,KAAA,CAAM,KAAA;AAAA,MACb;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;ACldO,SAAS,4BAA4B,KAAA,EAA0B;AACpE,EAAA,OAAO,OAAO,KAAA,KAAoD;AAClE,IAAA,MAAM,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,iKAAA,EAAkK;AAC1M,IAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,2BAA2B,IAAA,EAAK;AACpE,IAAA,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,QAAA,EAAU,MAAM,GAAG,GAAA,EAAI;AAAA,EACpD,CAAA;AACF;ACaA,SAAS,YAAe,KAAA,EAA6B;AACnD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACzC;AAEA,SAAS,aACP,MAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,QAAA,CAAS,OAAO,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrE,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAA,EAAU,OAAO,KAAA,CAAM,QAAA;AAAA,IACvB,aAAA,EAAe,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO;AAAA,GAClB;AACF;AAEA,SAAS,oBAAA,CACP,QACA,WAAA,EACsB;AACtB,EAAA,IAAI,aAAa,OAAO,WAAA;AACxB,EAAA,OAAO,SAAS,OAAA,GAAU,OAAA;AAC5B;AAEA,eAAsB,mBACpB,MAAA,EAC2B;AAC3B,EAAA,MAAM,YAAiC,EAAC;AACxC,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,UAAU,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,cACxD,WAAA,CAAY,SAAA,CAAU,SAAS,CAAA,CAAE,QAAA,CAAS,OAAO,KAAK;AAAA,GACxD;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,SAAA,EAAU;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAA,GAAU,aAAa,MAAM,CAAA;AAEnC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,SAAA,CAAU,KAAK,CAAA,EAAG;AAC/C,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAAA,MACtC,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,GAAS;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,QAAQ,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,OAAO,eAAe,CAAA;AAAA,UAC1E,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,EAAK;AAAA,UACxB,WAAA,EAAa;AAAA,SACf;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,KAAW,KAAA;AAClC,MAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAA;AAEpE,MAAA,IAAI,MAAA,IAAU,gBAAgB,OAAA,EAAS;AACrC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAA8B;AAAA,QAClC,aAAa,SAAA,CAAU,EAAA,IAAM,IAAA,CAAK,EAAA,IAAMA,OAAO,CAAC,CAAA;AAAA,QAChD,gBAAgB,SAAA,CAAU,KAAA;AAAA,QAC1B,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,WAAW,IAAA,CAAK,KAAA;AAAA,QAChB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAQ,MAAA,EAAQ,MAAA;AAAA,QAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,QACjB;AAAA,OACF;AAEA,MAAA,IAAI,uBAAuB,QAAA,CAAS,WAAA;AACpC,MAAA,IAAI,OAAO,SAAA,CAAU,WAAA,KAAgB,UAAA,EAAY;AAC/C,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,WAAA,CAAY,UAAU,OAAO,CAAA;AAC9D,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,oBAAA,GAAuB,QAAA;AACvB,YAAA,QAAA,CAAS,WAAA,GAAc,QAAA;AAAA,UACzB;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,oBAAA,GAAuB,OAAA;AACvB,UAAA,QAAA,CAAS,WAAA,GAAc,OAAA;AACvB,UAAA,QAAA,CAAS,OAAA,GAAU;AAAA,YACjB,GAAI,QAAA,CAAS,OAAA,IAAW,EAAC;AAAA,YACzB,kBAAkB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,OAAO,eAAe;AAAA,WACtF;AACA,UAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,YAAA,QAAA,CAAS,MAAA,GAAS,+CAAA;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAEvB,MAAA,MAAA,CAAO,IAAA,GAAO;AAAA,QACZ,IAAA,EAAM,WAAA;AAAA,QACN,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,gBAAgB,QAAA,CAAS,cAAA;AAAA,QACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,WAAA,EAAa,oBAAA;AAAA,QACb,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,SAAS,QAAA,CAAS;AAAA,OACnB,CAAA;AAED,MAAA,IAAI,oBAAA,KAAyB,OAAA,IAAW,SAAA,CAAU,eAAA,KAAoB,KAAA,EAAO;AAC3E,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAK,SAAA,CAAU,KAAA,CAAM,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACzE,EAAA,OAAO,EAAE,IAAI,SAAA,EAAU;AACzB;AAaO,SAAS,gBAAgB,OAAA,EAAwD;AACtF,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,EAAW,MAAA,GACjC,OAAA,CAAQ,YACR,CAAA,SAAA,gBAAA,UAAA,gBAAgD;AAEpD,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,SAAA;AAAA,IACA,OAAO,OAAA,CAAQ,MAAA;AAAA,IACf,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACpB;AACF;;;ACrKA,IAAM,mBAAA,uBAA0B,GAAA,CAAI;AAAA,EAClC,WAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,KAAA,GAAQ,CAAI,KAAA,KAAgB;AAChC,EAAA,IAAI,OAAQ,UAAA,CAAmB,eAAA,KAAoB,UAAA,EAAY;AAC7D,IAAA,OAAQ,UAAA,CAAmB,gBAAgB,KAAK,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,GAAA,KAA+D;AAC/E,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,EAAE,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,CAAC,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAC,CAAA;AACnF,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,OAAO,MAAA,CAAO,YAAY,OAAO,CAAA;AACnC,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAA+B;AAC3D,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,IAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,SAAc,IAAA,EAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AACxG,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,KAAA,EAAO,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ;AAAA,GAC7C;AACF,CAAA;AAEO,SAAS,eAAA,CAAgB,OAAmB,OAAA,EAA0C;AAC3F,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,GAAG,MAAK,GAAI,KAAA;AAChC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,KAAK,OAAA,EAAS,GAAA;AAAA,IACd,MAAA,EAAQ,KAAK,QAAA,IAAY;AAAA,GAC3B;AAEA,EAAA,MAAM,YAAY,KAAA,CAAM;AAAA,IACtB,GAAG,IAAA;AAAA,IACH,GAAA,EAAK,SAAS,GAAG;AAAA,GAClB,CAAA;AAED,EAAA,IAAI,SAAA,CAAU,GAAA,IAAO,UAAA,IAAc,SAAA,CAAU,GAAA,EAAK;AAChD,IAAA,OAAQ,UAAU,GAAA,CAA4B,QAAA;AAAA,EAChD;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,aAAa,OAAA,EAAS,kBAAA,KAAuB,KAAA,GAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAA;AAAA,IACnF;AAAA,GACF;AACF;AAEO,SAAS,eAAA,CAAgB,UAAyB,cAAA,EAAqD;AAC5G,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AACjC,EAAA,MAAM,cAAc,cAAA,EAAgB,GAAA;AACpC,EAAA,MAAM,YAAY,cAAA,EAAgB,QAAA,KAAa,KAAA,GAC3C,QAAA,CAAS,WAAW,CAAA,GACpB;AAAA,IACE,GAAI,IAAA,CAAK,GAAA,IAAO,EAAC;AAAA,IACjB,GAAG,SAAS,WAAW;AAAA,GACzB;AAEJ,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,GAAI,aAAa,EAAC;AAAA,IAClB,sBAAA,EAAwB;AAAA,GAC1B;AAEA,EAAA,MAAM,QAAA,GAAuB;AAAA,IAC3B,GAAG,IAAA;AAAA,IACH;AAAA,GACF;AAEA,EAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,IAAA,QAAA,CAAS,QAAQ,cAAA,CAAe,KAAA;AAAA,EAClC;AAEA,EAAA,OAAO,QAAA;AACT;;;ACnFA,IAAM,iBAAiB,CAAC,SAAA,KACtB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IAAI,EAAC;AAElE,SAAS,wBAAA,CAAyB,OAAmB,UAAA,EAAgD;AAC1G,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAAM,gBAAgB,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,SAAA,CAAU,CAACC,MAAAA,KAAUA,MAAAA,CAAM,EAAA,KAAO,UAAA,CAAW,EAAA,IAAMA,MAAAA,CAAM,UAAA,KAAe,UAAA,CAAW,EAAE,CAAA;AAClH,EAAA,IAAI,eAAe,EAAA,EAAI;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,UAAA,CAAW,EAAE,CAAA,CAAE,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,SAAA,CAAU,UAAU,CAAA,EAAE;AACzC,EAAA,IAAI,KAAA,CAAM,WAAW,UAAA,EAAY;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,KAAA,CAAM,EAAE,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAChE;AAEA,EAAA,KAAA,CAAM,MAAA,GAAS,UAAA,CAAW,QAAA,GAAW,UAAA,GAAa,UAAA;AAClD,EAAA,KAAA,CAAM,eAAe,UAAA,CAAW,QAAA,GAAY,UAAA,CAAW,YAAA,IAAgB,MAAM,IAAA,GAAQ,MAAA;AACrF,EAAA,KAAA,CAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,EAAA,KAAA,CAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,EAAA,KAAA,CAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEzC,EAAA,SAAA,CAAU,UAAU,CAAA,GAAI,KAAA;AAExB,EAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,EAAA,OAAO,GAAA,CAAI,kBAAA;AACX,EAAA,GAAA,CAAI,aAAA,GAAgB,OAAA;AACpB,EAAA,GAAA,CAAI,qBAAqB,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,MAAA,EAAQ,MAAM,MAAA,EAAO;AAE9D,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,gBAAA,EAAkB,SAAA;AAAA,IAClB;AAAA,GACF;AACF;;;ACpBA,SAAS,0BAA0B,OAAA,EAAuB;AACxD,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,IAAA,KAAS,WAAA,IAAe,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrE,IAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,QAAA,KAAkB;AAChD,MAAA,MAAM,QAAA,GAAW,QAAA,EAAU,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,IAAA;AACvD,MAAA,OAAO,QAAA,KAAa,mBAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,YAA+B,IAAA,EAAoF;AACjI,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,MAAM,SAAA,GAAY,oBAAoB,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAY,CAAC,GAAK,IAAA,CAAK,KAAA,IAAiB,EAAG,CAAA;AACjD,EAAA,IAAI,KAAK,YAAA,EAAc;AACvB,IAAA,MAAM,eAAe,UAAA,CAAW;AAAA,MAC5B,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAa,gJAAA;AAAA,MACb,QAAQ,IAAA,CAAK,YAAA;AAAA,MACb,MAAM,OAAO,IAAA,MAAe,EAAE,uBAAA,EAAyB,MAAM,IAAA,EAAK;AAAA,KACnE,CAAA;AACD,IAAA,SAAA,CAAU,KAAK,YAAY,CAAA;AAAA,EAC7B;AACA,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,SAAA,EAAW,IAAI,CAAA;AACjD,EAAA,MAAM,YAAA,GAAe,4BAAgC,CAAA;AAIrD,EAAA,MAAM,sBAAA,GAAyB,CAC7B,IAAA,EACA,IAAA,KACqB;AACrB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,EAAA;AAAA,MACpB,WAAW,CAAC,GAAG,KAAK,SAAA,EAAW,GAAG,KAAK,SAAS;AAAA,KAClD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAsC;AAClE,IAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,IAAA,MAAM,QAAA,GAAY,IAAI,gBAAA,IAAmD;AAAA,MACvE,iBAAA,EAAmB,EAAA;AAAA,MACnB,kBAAA,EAAoB;AAAA,KACtB;AACA,IAAA,GAAA,CAAI,gBAAA,GAAmB,QAAA;AACvB,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAsB;AAChD,IAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,EAAO,UAAA;AACrC,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,GAChC,eAAA,GACA,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAC7B,IAAA,CAAK,UAAA,GACL,EAAC;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,OAAA,GAA8B;AAAA,IAClC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAA,EAAa,MAAA;AAAA,IACb,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,SAAS,IAAA,CAAK;AAAA,GAChB;AAEA,EAAA,eAAe,OAAA,CACb,OAAA,EACA,MAAA,EACA,IAAA,EACqB;AACrB,IAAA,IAAI,KAAA,GAAQ,MAAM,QAAA,CAAS,OAAO,CAAA;AAClC,IAAA,IAAI,KAAA,CAAM,KAAK,QAAA,EAAU;AACvB,MAAA,MAAM,OAAA,GAAU,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC/B,MAAA,OAAO,OAAA,CAAQ,QAAA;AACf,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,EAAU;AAAA,IACjF;AACA,IAAA,IAAI,WAAA,GAA8B,IAAA;AAClC,IAAA,IAAI,KAAA,CAAM,KAAK,aAAA,EAAe;AAC5B,MAAA,MAAM,OAAA,GAAU,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC/B,MAAA,IAAI,OAAA,CAAQ,kBAAkB,OAAA,EAAS;AACrC,QAAA,WAAA,GAAc,OAAA;AAAA,MAChB;AACA,MAAA,OAAO,OAAA,CAAQ,aAAA;AACf,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,EAAU;AAAA,IACjF;AAEA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAI,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,MACpB,GAAK,MAAA,EAAQ,MAAA,IAAU;AAAC,KAC1B;AAEA,IAAA,MAAM,YAAA,GAAgB,YAAA,EAAc,YAAA,KAAiB,MAAA,GAAa,KAAK,YAAA,EAAc,YAAA;AACrF,IAAA,MAAM,cAAA,GAAiB,iBAAiB,QAAA,GAAW,GAAA,GAAM,KAAK,GAAA,CAAI,YAAA,GAAe,CAAA,GAAI,EAAA,EAAI,EAAE,CAAA;AAC3F,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,MAAM,gBAAgB,MAAA,EAAQ,aAAA;AAC9B,IAAA,MAAM,mBAAmB,MAAA,EAAQ,gBAAA;AACjC,IAAA,IAAI,WAAA,GAA6B,IAAA;AAEjC,IAAA,MAAM,UAAA,GAAc,MAAM,GAAA,EAAa,YAAA;AAEvC,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,GAAA,GAAW,KAAA,CAAM,GAAA,IAAO,EAAC;AAC/B,MAAA,MAAM,QAAQ,GAAA,CAAI,mBAAA;AAClB,MAAA,MAAM,SAAS,GAAA,CAAI,aAAA;AACnB,MAAA,MAAM,WAAW,GAAA,CAAI,UAAA;AACrB,MAAA,IAAI,QAAQ,OAAA,EAAS,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,SAAA,EAAU;AACjE,MAAA,IAAI,KAAA,IAAS,MAAM,uBAAA,EAAyB,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,WAAA,EAAY;AAC1F,MAAA,IAAI,QAAA,IAAY,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA,SAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAU;AACnF,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAU;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAkB;AAC3C,MAAA,MAAM,SAAS,WAAA,EAAY;AAC3B,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,EAAW,OAAO,KAAA;AAC9B,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,WAAA,GAAc,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAE;AACtF,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,MAAA,IAAA,GAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAC1D,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,EAAG,CAAA;AAC/E,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAkB;AAC/C,MAAA,IAAI,OAAO,aAAA,KAAkB,UAAA,EAAY,OAAO,KAAA;AAChD,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,cAAc,KAAK,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,IAAA,CAAK,6CAA6C,GAAG,CAAA;AAC7D,QAAA,MAAA,GAAS,KAAA;AAAA,MACX;AACA,MAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,QAAA,GAAW;AAAA,QACb,KAAA;AAAA,QACA,SAAA,EAAW,UAAA;AAAA,QACX,MAAA,EAAQ,gBAAA;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AACA,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,MAAA,WAAA,GAAc,KAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAA,OAAO,aAAa,cAAA,EAAgB;AAClC,MAAA,UAAA,EAAA;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,GAAA,EAAK,cAAA;AAChC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,SAAA,GAAY,iBAAiB,YAAA,EAAc;AAAA,UAC/C,IAAA,EAAM,iBAAA;AAAA,UACN,KAAA,EAAO,aAAa,UAAU,CAAA,CAAA;AAAA,UAC9B,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,EAAM,cAAA,EAAe;AAAA,UAC1E,cAAc,YAAA,CAAa;AAAA,SAC5B,CAAA;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,YAAA,CAAa,yBAAyB,SAAA,CAAU,MAAA;AAAA,QAClD;AAAA,MACF;AAEA,MAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAE/B,MAAA,MAAM,gBAAgB,WAAA,KAAgB,OAAA;AACtC,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,IAAI,iBAAA,CAAkB,mBAAmB,CAAA,EAAG;AAC5C,QAAA,IAAI,qBAAA,CAAsB,mBAAmB,CAAA,EAAG;AAEhD,QAAA,MAAM,aAAA,GAAgB,mBAAmB,KAAK,CAAA;AAC9C,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,KAAA,GAAQ,qBAAqB,KAAK,CAAA;AACxC,UAAA,IAAI,KAAA,CAAM,iBAAA,KAAsB,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ;AACrD,YAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB;AAAA,cACvC,UAAA,EAAY,aAAA;AAAA,cACZ,KAAA,EAAA,SAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA,EAAS,MAAM,KAAA,IAAS,OAAA;AAAA,cACxB,OAAA,EAAS,IAAA;AAAA,cACT;AAAA,aACD,CAAA;AACD,YAAA,KAAA,CAAM,iBAAA,GAAoB,MAAM,QAAA,CAAS,MAAA;AACzC,YAAA,KAAA,CAAM,eAAA,GAAkB,sBAAA,CAAuB,KAAA,CAAM,eAAA,EAAiB,OAAO,CAAA;AAC7E,YAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACtF,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,MAAM,YAAA,GAAoB;AAAA,gBACxB,IAAA,EAAM,WAAA;AAAA,gBACN,IAAA,EAAM,WAAA;AAAA,gBACN,OAAA,EAAS,SAAS,MAAA,IAAU,sCAAA;AAAA,gBAC5B,QAAA,EAAU;AAAA,kBACR,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,SAAA;AAAA,oBACA,WAAW,OAAA,CAAQ;AAAA;AACrB;AACF,eACF;AACA,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,YAAY,CAAA,EAAE;AAChE,cAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,cAAC,IAAY,kBAAA,GAAqB;AAAA,gBAChC,KAAA,EAAA,SAAA;AAAA,gBACA,QAAA,EAAU;AAAA,eACZ;AACA,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAKA,QAAA,IAAI,MAAA;AACJ,QAAA,IAAK,IAAA,CAAa,aAAA,IAAiB,OAAQ,IAAA,CAAa,kBAAkB,QAAA,EAAU;AAClF,UAAA,MAAA,GAAU,IAAA,CAAa,aAAA,CAAc,oBAAA,IAAyB,IAAA,CAAa,aAAA,CAAc,SAAA;AAAA,QAC3F;AACA,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,MAAA,GAAS,GAAA;AAAA,QACX;AAEA,QAAA,IAAI,MAAA,EAAQ;AAIV,UAAA,MAAM,oBAAoB,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,OAAA,KAAiB;AACvE,YAAA,IAAI,yBAAA,CAA0B,OAAO,CAAA,EAAG,OAAO,KAAA;AAC/C,YAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,KAAa,OAAA,CAAQ,SAAS,iBAAA,IAAqB,OAAA,CAAQ,IAAA,KAAS,gBAAA,CAAA,EAAmB,OAAO,KAAA;AACnH,YAAA,OAAO,IAAA;AAAA,UACT,CAAC,CAAA;AACD,UAAA,MAAM,UAAA,GAAa,oBAAoB,gBAAgB,CAAA;AACvD,UAAA,IAAI,aAAa,MAAA,EAAQ;AAIvB,YAAA,MAAM,eAAA,GAAA,CAAmB,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,IAAA;AAAA,cAAK,CAAC,CAAA,KACnD,CAAA,CAAE,IAAA,KAAS,UACR,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,KACpB,EAAE,OAAA,KAAY,YAAA,IAAgB,CAAA,CAAE,OAAA,CAAQ,WAAW,0BAA0B,CAAA;AAAA,aACnF;AACA,YAAA,IAAI,eAAA,IAAmB,UAAA,IAAc,MAAA,GAAS,IAAA,EAAM,CAGpD,MAAO;AACL,cAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,sBAAsB,IAAA,EAAK;AAC/D,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGE,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAkB,CAAA;AAC1D,QAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACvC,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,2BAA2B,CAAA;AAEvE,QAAA,IAAI,qBAAA,CAAsB,aAAa,CAAA,EAAG;AAExC,QAAA,MAAM,cAAA,GAAiB,mBAAmB,KAAK,CAAA;AAC/C,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,KAAA,GAAQ,qBAAqB,KAAK,CAAA;AACxC,UAAA,IAAI,KAAA,CAAM,kBAAA,KAAuB,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ;AACtD,YAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB;AAAA,cACvC,UAAA,EAAY,cAAA;AAAA,cACZ,KAAA,EAAA,UAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA,EAAS,MAAM,KAAA,IAAS,OAAA;AAAA,cACxB,OAAA,EAAS,IAAA;AAAA,cACT;AAAA,aACD,CAAA;AACD,YAAA,KAAA,CAAM,kBAAA,GAAqB,MAAM,QAAA,CAAS,MAAA;AAC1C,YAAA,KAAA,CAAM,eAAA,GAAkB,sBAAA,CAAuB,KAAA,CAAM,eAAA,EAAiB,OAAO,CAAA;AAC7E,YAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACtF,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,MAAM,eAAA,GAAkB,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA;AAC1C,cAAA,MAAM,QAAA,GAAW,gBAAgB,GAAA,EAAI;AACrC,cAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,gBACnB,IAAA,EAAM,WAAA;AAAA,gBACN,IAAA,EAAM,WAAA;AAAA,gBACN,OAAA,EAAS,SAAS,MAAA,IAAU,uCAAA;AAAA,gBAC5B,QAAA,EAAU;AAAA,kBACR,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,UAAA;AAAA,oBACA,WAAW,OAAA,CAAQ,SAAA;AAAA,oBACnB;AAAA;AACF;AACF,eACM,CAAA;AACR,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,eAAA,EAAgB;AAC9C,cAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,cAAC,IAAY,kBAAA,GAAqB;AAAA,gBAChC,KAAA,EAAA,UAAA;AAAA,gBACA,QAAA,EAAU,QAAA;AAAA,gBACV;AAAA,eACF;AACA,cAAA;AAAA,YACF,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACvC,cAAA,MAAM,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,IAAA,CAAK,QAAA,GAAW;AAAA,kBACd,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,kBACtB,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,UAAA;AAAA,oBACA,WAAW,OAAA,CAAQ;AAAA;AACrB,iBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,WAAA,GAAc,IAAA;AAAA,MAChB;AAEA,MAAA,MAAM,UAAe,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC7D,MAAA,MAAM,SAAA,GAAmB,MAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA,GAAI,OAAA,CAAQ,aAAa,EAAC;AACpF,MAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,IAAiB,CAAA;AAG7C,MAAA,IAAI,KAAA,CAAM,KAAK,yBAAA,EAA2B;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAA,IAAiB,YAAA,IAAgB,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACzD,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAEnD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAG5B,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,iBAAiB,CAAA;AACzD,MAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACvC,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAkB,CAAA;AAC1D,MAAA,IAAI,KAAA,CAAM,KAAK,kBAAA,EAAoB;AACnC,MAAA,IAAI,qBAAA,CAAsB,aAAa,CAAA,EAAG;AAC1C,MAAA,IAAI,KAAA,CAAM,KAAK,gCAAA,EAAkC;AAAA,IACnD;AAKA,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,CAAE,KAAA,CAAc,KAAK,gCAAA,EAAkC;AAC9E,MAAA,MAAM,OAAY,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC1D,MAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA,IAAK,IAAA,CAAK,WAAW,MAAA,GAAS,CAAA;AAGrF,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,uCAAA;AAAA,YACA,uFAAA;AAAA,YACA,iDAAA;AAAA,YACA;AAAA,WACF,CAAE,KAAK,IAAI;AAAA,SACb;AAGA,QAAA,MAAM,aAAA,GAAgB,OAAA,CAAS,KAAA,CAAc,GAAA,EAAK,+BAA+B,CAAA;AACjF,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,iCAAiC,IAAA,EAAK;AAC1E,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA,EAAG,GAAA,EAAI;AACjE,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,YAAA,MAAM,YAAiB,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC/D,YAAA,MAAM,cAAA,GAAwB,MAAM,OAAA,CAAQ,SAAA,EAAW,UAAU,CAAA,GAAI,SAAA,CAAU,aAAa,EAAC;AAC7F,YAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAAA,YAClD;AAAA,UACF,SAAS,GAAA,EAAc;AAErB,YAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,YAAA,IAAA,GAAO,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA,yCAAA,EAA4C,MAAM,IAAI,CAAA;AAAA,UAC1F;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,WAAA,IAAe,OAAO,kBAAkB,UAAA,IAAc,aAAA,CAAc,KAAK,CAAA,EAAG;AAC/E,MAAA,qBAAA,CAAsB,YAAY,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,KAAA,EAAmB,MAAA,KAA+D;AAC3G,IAAA,MAAM,UAAU,MAAA,EAAQ,OAAA;AACxB,IAAA,MAAM,aAAa,MAAA,EAAQ,UAAA;AAC3B,IAAA,MAAM,WAAW,MAAA,EAAQ,QAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,KAAW,IAAA;AACzC,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAuB;AAAE,MAAA,IAAI;AAAE,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MAAG,SAAS,GAAA,EAAK;AAAE,QAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,GAAG,CAAA;AAAA,MAAG;AAAA,IAAE,CAAA;AACvI,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAmF;AACvG,MAAA,IAAI;AAAE,QAAA,UAAA,GAAa,QAAQ,CAAA;AAAA,MAAG,SAAS,GAAA,EAAK;AAAE,QAAA,OAAA,CAAQ,IAAA,CAAK,0CAA0C,GAAG,CAAA;AAAA,MAAG;AAC3G,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,UAAU,CAAA;AAAA,IACxC,CAAA;AACA,IAAA,MAAM,YAAA,GAAe,mBAAmB,IAAI,CAAA;AAE5C,IAAA,MAAM,GAAA,GAA2B;AAAA,MAC/B,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC;AAAA,MAClB,SAAA,EAAW,OAAA;AAAA,MACX,YAAA,EAAc,YAAA;AAAA,MACd,UAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,MAAkB,cAAA,GAAiB,YAAA;AACvC,IAAA,IAAI,MAAA,EAAQ,iBAAA,EAAmB,GAAA,CAAI,mBAAA,GAAsB,MAAA,CAAO,iBAAA;AAChE,IAAA,IAAK,MAAA,EAAQ,iBAAA,EAA+C,OAAA,KAAY,MAAA,EAAW;AACjF,MAAA,GAAA,CAAI,gBAAgB,MAAA,EAAQ,iBAAA;AAAA,IAC9B;AACA,IAAA,IAAI,MAAA,EAAQ,SAAA,IAAa,MAAA,CAAO,SAAA,GAAY,CAAA,EAAG;AAC7C,MAAA,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,SAAA;AAAA,IACvC;AAEA,IAAA,MAAM,0BAA8C,MAAA,EAAQ,MAAA,GACxD,EAAE,GAAG,SAAS,MAAA,EAAQ,EAAE,GAAI,OAAA,CAAQ,UAAU,EAAC,EAAI,GAAG,MAAA,CAAO,MAAA,IAAS,GACtE,OAAA;AAEJ,IAAA,MAAM,OAAA,GAAsB;AAAA,MAC1B,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,MAC7B,aAAA,EAAe,MAAM,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MAC/B,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,MACnC,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,GAAA;AAAA,MACA,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,EAAC;AAAA,MAC7C,KAAA,EAAO,MAAM,KAAA,IAAS,uBAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC;AAAE,KACrD;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,CAAsB,cAAc,uBAAuB,CAAA;AACjE,MAAA,GAAA,GAAM,MAAM,OAAA,CAAQ,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAU;AACjB,MAAA,MAAM,qBAAqB,YAAA,EAAc;AAAA,QACvC,YAAA,EAAc,OAAA;AAAA,QACd,MAAA,EAAQ,OAAA;AAAA,QACR,OAAO,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,KAAA,EAAO,KAAK,KAAA;AAAM,OACnD,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,MAAM,qBAAqB,YAAA,EAAc;AAAA,MACvC,YAAA,EAAc,IAAI,KAAA,IAAS,OAAA;AAAA,MAC3B,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,WAAW,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI,OAAO,QAAA,EAAU,OAAA,KAAY,QAAA,YAAoB,QAAA,CAAS,OAAA;AAAA,SAAA,IACrD,KAAA,CAAM,QAAQ,QAAA,EAAU,OAAO,GAAG,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAY,OAAO,CAAA,KAAM,QAAA,GAAW,IAAI,CAAA,EAAG,IAAA,IAAQ,GAAG,OAAA,IAAW,EAAG,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAExJ,IAAA,IAAI,MAAA,GAA8B,MAAA;AAClC,IAAA,MAAM,SAAS,IAAA,CAAK,YAAA;AACpB,IAAA,IAAI,MAAA,IAAW,GAAA,CAAY,GAAA,EAAK,wBAAA,EAA0B;AACxD,MAAA,MAAA,GAAU,IAAY,GAAA,CAAI,wBAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,UAAU,OAAA,EAAS;AAE5B,MAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,8BAA8B,CAAA;AAC3D,MAAA,IAAI,MAAA,IAAU,OAAO,CAAC,CAAA,aAAc,MAAA,CAAO,CAAC,EAAE,IAAA,EAAK;AAAA,WAC9C;AACH,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACpC,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,QAAA,MAAM,QAAQ,CAAC,QAAA,EAAU,UAAU,CAAA,CAAE,OAAO,CAAA,CAAA,KAAK,CAAA,IAAK,CAAC,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAC,EAAE,CAAC,CAAA;AAChF,QAAA,IAAI,UAAU,MAAA,EAAW,QAAA,GAAW,QAAQ,KAAA,CAAM,KAAK,EAAE,IAAA,EAAK;AAAA,MAChE;AACA,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,QAAA,IAAY,OAAO,CAAA;AAC1C,QAAA,MAAA,GAAS,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,MAC3B,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,OAAO,QAAA,EAAU,OAAA,KAAY,QAAA,GAAW,QAAA,CAAS,OAAA,GAAU,OAAA,EAAS,CAAA;AACzG,IAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,MAAA,QAAA,GAAW,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAC3C,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU,EAAE,KAAA,EAAQ,GAAA,CAAY,KAAA,EAAM;AAAA,MACtC,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,KAAA,EAAO;AAAA,KACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,CAAC,KAAA,EAAmB,OAAA,KAA8B,eAAA,CAAgB,OAAO,OAAO,CAAA;AAEtG,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAyB,MAAA,EAAuB,cAAA,KAA4C;AACrH,IAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,QAAA,EAAU,cAAc,CAAA;AAC9D,IAAA,OAAO,WAAA,CAAY,eAAe,MAAM,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,sBAAsB,CAAC,KAAA,EAAmB,UAAA,KAC9C,wBAAA,CAAyB,OAAO,UAAU,CAAA;AAE5C,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,aAAA;AAAA,IACV,MAAA,EAAQ,WAAA;AAAA,IACR,mBAAA;AAAA,IACA,QAAQ,CAAC,EAAE,QAAA,EAAU,WAAA,EAAa,kBAAiB,KAA6E;AAC9H,MAAA,MAAM,MAAA,GAASC,CAAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,gBAAA,IAAoB,2BAA2B,CAAA,EAAG,CAAA;AAC3G,MAAA,OAAO,UAAA,CAAW;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,WAAA,IAAe,CAAA,uBAAA,EAA0B,IAAA,CAAK,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC1E,MAAA;AAAA,QACA,IAAA,EAAM,OAAO,EAAE,KAAA,EAAM,KAAM;AACzB,UAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,CAAO,EAAE,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAc,GAAG,CAAA;AACzF,UAAA,OAAO;AAAA,YACL,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,QAAQ,GAAA,CAAI,MAAA;AAAA,YACZ,OAAA,EAAS,IAAI,KAAA,EAAO,SAAA,GAAY,IAAI,KAAA,CAAM,SAAA,CAAU,SAAS,CAAC;AAAA,WAChE;AAAA,QACF;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,WAAW,CAAC,EAAE,QAAA,EAAU,WAAA,EAAa,QAAO,KAAgG;AAC1I,MAAA,MAAM,SAAA,GAAY,QAAA,IAAY,CAAA,WAAA,EAAc,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAA;AACnE,MAAA,MAAM,OAAA,GAAU,MAAA,IAAUA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,oBAAoB,CAAA,EAAG,CAAA;AACxF,MAAA,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,WAAA,IAAe,CAAA,yBAAA,EAA4B,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC/E,MAAA,EAAQ,OAAA;AAAA,QACR,MAAM,OAAO,KAAA,MAAgB,EAAE,SAAA,EAAW,EAAE,SAAQ,EAAE;AAAA,OACvD,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,WAAA,EAAa,WAAA,IAAe,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAS;AAAA,IACnH,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,KAAK,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AACjD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK;AAC1C,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,IAAUA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,oBAAoB,GAAG,CAAA;AAC7F,MAAA,OAAO,UAAA,CAAW;AAAA,QACZ,MAAM,CAAA,CAAE,QAAA;AAAA,QACR,WAAA,EAAa,EAAE,WAAA,IAAe,CAAA,WAAA,EAAc,EAAE,MAAA,CAAO,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC9E,MAAA;AAAA,QACA,IAAA,EAAM,OAAO,KAAA,MAAgB,EAAE,SAAA,EAAW,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,SAAA,EAAU,EAAE;AAAA,OAC3E,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,QAAQ,CAAC,GAAG,OAAA,CAAQ,KAAA,EAAO,GAAG,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,QAAA;AACT;;;AC3jBO,SAAS,gBAAgB,IAAA,EAAyB;AACvD,EAAA,OAAO,OAAO,KAAA,KAAoD;AAEhE,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,IAAS;AAAA,MAC7B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAQ,IAAA,CAAK,KAAA,IAAiB,EAAC;AAAA,MAC/B,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAe,IAAA,CAAa;AAAA,KAC9B;AACA,IAAA,MAAM,KAAA,GAA8C,OAAA,CAAQ,KAAA,IAAiB,EAAC;AAC9E,IAAA,MAAM,cAAA,GAAkB,QAAQ,KAAA,EAAQ,SAAA,GACnC,QAAQ,KAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAC/B,OAAA,CAAQ,KAAA;AAEZ,IAAA,MAAM,oBAAA,GAAuB,QAAQ,YAAA,GACjC;AAAA,MACE,uCAAA;AAAA,MACA,gEAAA;AAAA,MACA,6HAAA;AAAA,MACA;AAAA,KACF,CAAE,IAAA,CAAK,IAAI,CAAA,GACX,EAAA;AAEJ,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,iBAAA;AAAA,QACP,CAAC,QAAQ,YAAA,EAAc,oBAAoB,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,QACtE,QAAQ,WAAA,KAAgB,IAAA;AAAA,QACxB,QAAQ,IAAA,IAAQ,OAAA;AAAA,QAChB,OAAA,CAAQ;AAAA;AACV,KACF;AACA,IAAA,MAAM,QAAA,GAAW,CAAC,SAAA,EAAW,GAAG,MAAM,QAAQ,CAAA;AAE9C,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,OAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,GAAG,MAAM,QAAQ,CAAA;AACpD,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,eAAA,GAAkB,oBAAA,CAAqB,cAAc,CAAA,GAAI,MAAA;AAC/E,IAAA,MAAM,WAAA,GAAc,aAAA,KAAkB,MAAA,GAAY,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAExF,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,cAAc,CAAA;AAAA,IACvD,SAAS,GAAA,EAAU;AACjB,MAAA,MAAMH,WAAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACnF,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA,EAAAA,WAAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,KAAA,EAAO,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACjE,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACvE,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,oBAAA,GAAkC;AAAA,MACtC,GAAG,QAAA;AAAA,MACH;AAAA,KACF;AAGA,IAAA,MAAM,WAAY,QAAA,EAAkB,KAAA,IAAU,UAAkB,iBAAA,EAAmB,WAAA,IAAgB,UAAkB,iBAAA,EAAmB,KAAA;AACxI,IAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,IAAA,MAAM,YAAY,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,IAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AACjF,IAAA,MAAM,YAAA,GAAe,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAClF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,iBAAA,GAAoB,oBAAA,CAAqB,QAAQ,CAAA,GAAI,MAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,eAAA,KAAoB,MAAA,GAAY,oBAAA,CAAqB,eAAe,CAAA,GAAI,MAAA;AAE9F,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,oBAAA;AAAA,MACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACnF,UAAA;AAAA,MACA,aAAa,UAAA,EAAY,aAAA;AAAA,MACzB,cAAc,UAAA,EAAY,iBAAA;AAAA,MAC1B,aAAa,UAAA,EAAY,YAAA;AAAA,MACzB,iBAAA,EAAmB,YAAY,qBAAA,EAAuB,aAAA;AAAA,MACtD,YAAA,EAAc,WAAA;AAAA,MACd,aAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,UAAA,GAAa,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAC/D,MAAA,MAAM,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA;AAC5C,MAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC7C,MAAA,MAAM,cAAA,GAAiB,WAAW,qBAAA,CAAsB,aAAA;AACpD,MAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,cAAA,EAAgB,CAAA;AAE7G,MAAA,MAAM,WAAW,UAAA,CAAW,aAAA;AAC5B,MAAA,MAAM,YAAY,UAAA,CAAW,iBAAA;AAC7B,MAAA,MAAM,WAAW,UAAA,CAAW,YAAA;AAChC,MAAA,MAAM,GAAA,GAAM,SAAA;AACR,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,aAAa,CAAA,EAAE;AACtF,MAAA,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACvB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,MAAA,CAAO,SAAS,CAAA,IAAK,CAAA,CAAA;AAAA,QAC3C,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,MAAA,CAAO,cAAc,CAAA,IAAK,CAAA;AAAA,OAC5D;AAEA,MAAC,MAAc,KAAA,GAAQ,UAAA;AAAA,IACzB;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,oBAAA,EAAsB,KAAA,EAAQ,MAAc,KAAA,EAAM;AAAA,EACvE,CAAA;AACF;;;AC5HA,SAAS,YAAY,OAAA,EAA8B;AACjD,EAAA,IAAI,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,SAAiB,OAAA,CAAQ,OAAA;AACxD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClC,IAAA,OAAO,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAe,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,WAAW,IAAA,CAAK,SAAA,CAAU,IAAI,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EAC7I;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,UAAyB,eAAA,EAAwC;AAC3F,EAAA,IAAI,eAAA,IAAmB,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,EAAS,UAAU,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,QAAA,CAAS,MAAM,CAAC,CAAA,GAAI,CAAC,GAAG,QAAQ,CAAA;AACvE,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,MAAM,YAA2B,EAAC;AAElC,EAAA,KAAA,IAAS,QAAQ,IAAA,CAAK,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACxD,IAAA,MAAM,OAAA,GAAU,KAAK,KAAK,CAAA;AAC1B,IAAA,SAAA,CAAU,QAAQ,OAAO,CAAA;AACzB,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,MAAA,aAAA,IAAiB,CAAA;AACjB,MAAA,IAAI,iBAAiB,eAAA,EAAiB;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,YAAA,EAAc,GAAG,SAAS,CAAA;AACvC;AAEO,SAAS,wBAAwB,OAAA,EAAgD;AACtF,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,CAAC,kBAAkB,CAAA;AACjC,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,EAAE,CAAC,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACrC,IAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,cAAA,CAAe,GAAA,CAAI,CAAC,QAAA,KAAa,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,CAAC,CAAA;AAAA,EACzE;AACA,EAAA,IAAI,OAAA,CAAQ,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,kBAAA,CAAmB,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,kBAAkB,KAAA,EAAyC;AAClE,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,EAAA;AACzC,EAAA,OAAO;AAAA,IACL,mBAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,CAAE;AAAA,GACvD,CAAE,KAAK,IAAI,CAAA;AACb;AAEA,SAAS,aAAA,CAAc,UAAyB,gBAAA,EAAyC;AACvF,EAAA,IAAI,OAAA,GAAU,CAAC,GAAG,QAAQ,CAAA;AAC1B,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,UAAA,GAAa,kBAAkB,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACxE,IAAA,IAAI,UAAA,IAAc,kBAAkB,OAAO,OAAA;AAE3C,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,CAAU,CAAC,OAAA,EAAS,KAAA,KAAU,EAAE,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,KAAS,QAAA,CAAS,CAAA;AACxG,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,OAAmB,MAAA,EAAiD;AACrG,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,QAAA,IAAY,EAAC;AACxC,EAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,KAAA,EAAO;AACnC,IAAA,OAAO,aAAA,CAAc,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,cAAA,GAAiB,kBAAA,CAAmB,WAAA,EAAa,MAAA,CAAO,QAAQ,eAAe,CAAA;AACrF,EAAA,MAAM,gBAAgB,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,SAAS,CAAC,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAc,wBAAwB,aAAa,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,WAAW,CAAA;AACtD,EAAA,MAAMI,cAAAA,GAAgB,eAAe,CAAC,CAAA,EAAG,SAAS,QAAA,GAAW,cAAA,CAAe,CAAC,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,IAAA,GAAOA,cAAAA,GAAgB,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,GAAI,cAAA;AACvD,EAAA,MAAM,2BAA0C,EAAC;AAEjD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,wBAAA,CAAyB,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,iBAAA,EAAmB,OAAA,EAAS,aAAa,CAAA;AAAA,EACjG;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,wBAAA,CAAyB,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,gBAAA,EAAkB,OAAA,EAAS,YAAY,CAAA;AAAA,EAC/F;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,GAAIA,cAAAA,GAAgB,CAACA,cAAa,IAAI,EAAC;AAAA,IACvC,GAAG,wBAAA;AAAA,IACH,GAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,cAAA,GAAiB,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,UAAU,OAAA,CAAQ,IAAA,KAAS,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA,GAAI;AAAA,GAC/I;AAEA,EAAA,OAAO,aAAA,CAAc,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;AAChE;AAEO,SAAS,wBAAwB,KAAA,EAA2B;AACjE,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,cAAA,EAAgB,MAAA,IAAU,CAAA;AACrD,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,mBAAA,EAAqB,MAAA,IAAU,CAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU,CAAA;AAC/C,EAAA,MAAM,kBAAA,GAAqB,MAAM,QAAA,EAAU,MAAA,CAAO,CAAC,OAAA,KACjD,OAAA,CAAQ,IAAA,KAAS,MAAA,IACd,OAAO,OAAA,CAAQ,YAAY,QAAA,KAC1B,OAAA,CAAQ,YAAY,YAAA,IAAgB,OAAA,CAAQ,QAAQ,UAAA,CAAW,0BAA0B,CAAA,CAC9F,CAAA,CAAE,MAAA,IAAU,CAAA;AACb,EAAA,MAAM,SAAA,GAAa,YAAA,GAAe,CAAA,GAAK,aAAA,GAAgB,kBAAA;AACvD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,CAAC,CAAA;AAC5C,EAAA,OAAO,MAAA,CAAA,CAAQ,SAAA,GAAY,WAAA,EAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpD;;;AClGA,IAAM,gBAAgB,CAAC,OAAA,MAAqB,EAAE,IAAA,EAAM,UAAU,OAAA,EAAQ,CAAA;AACtE,IAAM,eAAe,CAAC,OAAA,MAAqB,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAQ,CAAA;AAEnE,SAAS,8BAA8B,OAAA,EAA+B;AAClE,EAAA,OAAO,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,IAAA,KAAS,mBAAA;AACvD;AAEA,SAAS,mCAAmC,OAAA,EAA+B;AACvE,EAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,IAAe,CAAC,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,EAAG;AACpE,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,QAAA,KAAkB;AAC9C,IAAA,MAAM,QAAA,GAAW,QAAA,EAAU,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,IAAA;AACvD,IAAA,OAAO,QAAA,KAAa,mBAAA;AAAA,EACxB,CAAC,CAAA;AACL;AAOA,SAAS,wBAAwB,QAAA,EAAwC;AACrE,EAAA,MAAM,YAA2B,EAAC;AAClC,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAY;AAE3C,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACtB,IAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAExB,MAAA,IAAI,CAAC,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AAC5C,QAAA,kBAAA,CAAmB,KAAA,EAAM;AAAA,MAC7B,CAAA,MAAO;AAEH,QAAA,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAY;AAC9B,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,kBAAA,CAAmB,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,QAC3C,CAAC,CAAA;AAAA,MACL;AACA,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AAErB,MAAA,IAAI,UAAA,IAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA,EAAG;AAClD,QAAA,kBAAA,CAAmB,OAAO,UAAU,CAAA;AACpC,QAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MACpB;AAAA,IAEJ,CAAA,MAAO;AAEH,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACpB;AAAA,EACJ;AAEA,EAAA,OAAO,SAAA;AACX;AAKA,SAAS,kBAAkB,IAAA,EAA6B;AACpD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AACzD,EAAA,IAAI,SAAS,CAAC,CAAA,SAAU,MAAA,CAAO,CAAC,EAAE,IAAA,EAAK;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAChC,EAAA,IAAI,KAAA,IAAS,CAAA,IAAK,GAAA,GAAM,KAAA,EAAO;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAA,GAAM,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,0BAAA,CAA2B,OAAY,YAAA,EAAyC;AACrF,EAAA,MAAM,OAAA,GAA6B;AAAA,IAC/B,cAAc,KAAA,CAAM,OAAA,CAAQ,OAAO,YAAY,CAAA,GACzC,MAAM,YAAA,CACC,MAAA,CAAO,CAAC,IAAA,KAAc,QAAQ,OAAO,IAAA,KAAS,QAAQ,CAAA,CACtD,GAAA,CAAI,CAAC,IAAA,MAAe;AAAA,MACjB,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAA,IAAO,SAAS,CAAA;AAAA,MACjC,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA;AAAA,MAC9B,YAAY,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,GAAW,KAAK,UAAA,GAAa,GAAA;AAAA,MACpE,QAAQ,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI;AAAA,KAChD,CAAE,IACR,EAAC;AAAA,IACP,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAc,MAAA,CAAO,IAAI,CAAC,IAAI,EAAC;AAAA,IAC1G,cAAA,EAAgB,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,cAAc,CAAA,GAAI,KAAA,CAAM,cAAA,CAAe,GAAA,CAAI,CAAC,QAAA,KAAkB,MAAA,CAAO,QAAQ,CAAC,IAAI,EAAC;AAAA,IACxH,oBAAoB,KAAA,CAAM,OAAA,CAAQ,OAAO,kBAAA,IAAsB,KAAA,EAAO,kBAAkB,CAAA,GAAA,CACjF,KAAA,CAAM,sBAAsB,KAAA,CAAM,kBAAA,EAAoB,IAAI,CAAC,IAAA,KAAc,OAAO,IAAI,CAAC,IACtF,EAAC;AAAA,IACP,YAAY,OAAO,KAAA,EAAO,UAAA,KAAe,QAAA,GAAW,MAAM,UAAA,GAAa;AAAA,GAC3E;AAEA,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,KAAW,CAAA,IAAK,YAAA,EAAc;AACnD,IAAA,MAAM,iBAAiB,YAAA,CAClB,KAAA,CAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,OAAO,CAAA,CACd,KAAA,CAAM,GAAG,CAAC,CAAA;AACf,IAAA,OAAA,CAAQ,YAAA,GAAe,cAAA,CAAe,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW;AAAA,MACxD,GAAA,EAAK,CAAA,KAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA,CAAA;AAAA,MACtB,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY;AAAA,KAChB,CAAE,CAAA;AAAA,EACN;AAEA,EAAA,OAAO,OAAA;AACX;AAEA,SAAS,wBAAwB,KAAA,EAAuB;AACpD,EAAA,OAAO,KAAA,CACF,IAAA,EAAK,CACL,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,IACpB,MAAA;AACX;AAEA,SAAS,sBAAsB,QAAA,EAA4D;AACvF,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAuD;AAEzE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GACrC,OAAA,CAAQ,OAAA,GACR,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GACzB,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAc,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAC/F,EAAA;AACV,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAC3E,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,MAAA,IAAI,CAAC,gBAAgB,IAAA,CAAK,IAAI,KAAK,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAExD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAChF,MAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,MAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAC3B,GAAA,CAAI,CAAC,OAAA,KAAY;AACd,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACnC,QAAA,IAAI,OAAA,IAAW,GAAG,OAAO,IAAA;AACzB,QAAA,OAAO;AAAA,UACH,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAO,EAAE,IAAA,EAAK;AAAA,UACpC,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,CAAC,EAAE,IAAA;AAAK,SAC3C;AAAA,MACJ,CAAC,EACA,MAAA,CAAO,CAAC,UAAmD,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA;AACnF,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAE1B,MAAA,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,CAAC,QAAQ,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,KAAK,EAAE,QAAA,CAAS,KAAA,CAAM,IAAI,WAAA,EAAa,CAAC,CAAA,EAAG,KAAA;AACxH,MAAA,MAAM,SAAA,GAAY,CAAC,uBAAA,CAAwB,KAAK,GAAG,UAAA,GAAa,uBAAA,CAAwB,UAAU,CAAA,GAAI,MAAS,CAAA,CAC1G,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEb,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AACzB,QAAA,MAAM,kBAAA,GAAqB,uBAAA,CAAwB,KAAA,CAAM,GAAG,CAAA;AAC5D,QAAA,MAAM,OAAA,GAAU,SAAA,GAAY,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,GAAK,CAAA,EAAG,uBAAA,CAAwB,KAAK,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA;AAC1H,QAAA,KAAA,CAAM,IAAI,OAAA,EAAS;AAAA,UACf,GAAA,EAAK,OAAA;AAAA,UACL,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SACX,CAAA;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,CAAA;AAC7B;AAEA,SAAS,0BAA0B,OAAA,EAA8B;AAC7D,EAAA,IAAI,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,EAAU;AACrC,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,EACnB;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AAChC,IAAA,OAAO,QAAQ,OAAA,CACV,GAAA,CAAI,CAAC,IAAA,KAAe,OAAO,SAAS,QAAA,GAAW,IAAA,GAAO,MAAM,IAAA,IAAQ,IAAA,EAAM,WAAW,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAE,CAAA,CACxG,KAAK,GAAG,CAAA;AAAA,EACjB;AAEA,EAAA,OAAO,EAAA;AACX;AAEA,SAAS,4BAA4B,OAAA,EAA0C;AAC3E,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA,KAClB,YAAY,YAAA,IAAgB,OAAA,CAAQ,WAAW,0BAA0B,CAAA,CAAA;AACrF;AAEA,SAAS,4BAA4B,OAAA,EAA8B;AAC/D,EAAA,MAAM,OAAA,GAAU,yBAAA,CAA0B,OAAO,CAAA,CAAE,IAAA,EAAK;AACxD,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,uBAAA;AAAA,EACX;AAEA,EAAA,OAAO,OAAA,CAAQ,SAAS,GAAA,GAAM,CAAA,EAAG,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA,GAAQ,OAAA;AAClE;AAEA,SAAS,oBAAA,CAAqB,KAAA,EAAmB,UAAA,EAAqB,QAAA,EAAmB;AACrF,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ,GAAI,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,IAC1B,GAAI,KAAA,CAAM,mBAAA,IAAuB;AAAC,GACtC;AAEA,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACzD,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAK,CAAA;AAC3B,MAAA,IAAI,KAAA,EAAO,iBAAiB,UAAA,EAAY;AACpC,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAMA,EAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACzD,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAK,CAAA;AAC3B,IAAA,IAAI,KAAA,EAAO,aAAa,QAAA,EAAU;AAC9B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,0BAAA,CAA2B,SAAsB,KAAA,EAA2B;AACjF,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,IAAQ,cAAA;AACjC,EAAA,MAAM,aAAa,OAAA,CAAQ,YAAA;AAC3B,EAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,KAAA,EAAO,UAAA,EAAY,QAAQ,CAAA;AACrE,EAAA,MAAM,cAAc,YAAA,EAAc,WAAA;AAClC,EAAA,MAAM,OAAA,GAAU,YAAA,EAAc,OAAA,IAAW,2BAAA,CAA4B,OAAO,CAAA;AAC5E,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,YAAY,QAAQ,CAAA,CAAA;AAAA,IACpB,UAAA,GAAa,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,GAAK,IAAA;AAAA,IAC1C,WAAA,GAAc,CAAA,YAAA,EAAe,WAAW,CAAA,CAAA,GAAK;AAAA,GACjD,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAE3B,EAAA,IAAI,aAAA,GAAgB,0DAAA;AACpB,EAAA,IAAI,eAAe,UAAA,EAAY;AAC3B,IAAA,aAAA,GAAgB,CAAA,wCAAA,EAA2C,WAAW,CAAA,mBAAA,EAAsB,UAAU,CAAA,oCAAA,CAAA;AAAA,EAC1G,CAAA,MAAA,IAAW,eAAe,UAAA,EAAY;AAClC,IAAA,aAAA,GAAgB,CAAA,wCAAA,EAA2C,eAAe,UAAU,CAAA,oCAAA,CAAA;AAAA,EACxF;AAEA,EAAA,OAAO;AAAA,IACH,6BAA6B,UAAU,CAAA,CAAA,CAAA;AAAA,IACvC,YAAY,OAAO,CAAA,CAAA;AAAA,IACnB;AAAA,GACJ,CAAE,KAAK,IAAI,CAAA;AACf;AAEA,SAAS,gBAAA,CACL,SACA,eAAA,EACiB;AACjB,EAAA,IAAI,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAEzC,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA;AAC3E,EAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAChC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,QAAA,IAAA,CAAa,IAAA,CAAK,cAAc,CAAA,MAAO,QAAA,CAAS,cAAc,CAAA,CAAA,EAAI;AACnE,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AAAA,IAC7B;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,GAAG,OAAA;AAAA,IACH,YAAA,EAAc,CAAC,GAAG,MAAA,CAAO,QAAQ;AAAA,GACrC;AACJ;AAEA,SAAS,iBAAA,CAAkB,UAAyC,OAAA,EAAmD;AACnH,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAA,CAAK,QAAA,EAAU,YAAA,IAAgB,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACnF,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,OAAA,CAAQ,kBAAkB,CAAA;AACvD,EAAA,MAAM,mBAAmB,CAAC,GAAG,YAAY,CAAA,CAAE,KAAK,CAAC,GAAA,KAAQ,CAAC,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,CAAC,WAAA,CAAY,GAAA,CAAI,GAAG,CAAC,CAAA;AACxG,EAAA,MAAM,mBAAA,GAAsB,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,CAAC,SAAS,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAE1F,EAAA,IAAI,gBAAA,EAAkB;AAClB,IAAA,KAAA,CAAM,KAAK,4EAA4E,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,mBAAA,EAAqB;AACrB,IAAA,KAAA,CAAM,KAAK,6DAA6D,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,CAAC,gBAAA,IAAoB,CAAC,mBAAA;AAAA,IAC9B,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,SAAS,uBAAA,CAAwB,QAAA,EAAyC,OAAA,EAA4B,SAAA,EAAqD;AACvJ,EAAA,IAAI,CAAC,UAAU,OAAO,OAAA;AACtB,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,OAAA,CAAQ,YAAY,CAAA;AAC1C,EAAA,IAAI,UAAU,gBAAA,EAAkB;AAC5B,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9D,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,YAAA,EAAc;AACtC,MAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,IAAK,CAAC,OAAA,CAAQ,kBAAA,CAAmB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AAC/E,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,mBAAA,GAC1B,SAAA,CAAU,OAAO,CAAC,IAAA,KAAS,CAAC,OAAA,CAAQ,kBAAA,CAAmB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,GACzE,SAAA;AACN,EAAA,OAAO,EAAE,GAAG,OAAA,EAAS,YAAA,EAAc,aAAA,EAAc;AACrD;AAcO,SAAS,2BAA2B,IAAA,EAAyB;AAClE,EAAA,OAAO,OAAO,KAAA,KAAoD;AAC5D,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAY,CAAA;AAChE,IAAA,MAAM,SAAS,QAAA,CAAS,aAAA;AACxB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,OAAO,EAAC;AAEhC,IAAA,MAAM,QAAS,IAAA,CAAa,KAAA;AAC5B,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,EAAC;AAGpC,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AAGzC,IAAA,MAAM,uBAAuB,QAAA,CAAS,MAAA;AAAA,MAClC,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAC,2BAAA,CAA4B,CAAA,CAAE,OAAO,CAAA,IAAK,CAAC,6BAAA,CAA8B,CAAC;AAAA,KAC3G;AACA,IAAA,IAAI,oBAAA,CAAqB,WAAW,CAAA,EAAG;AAGnC,MAAA,OAAO,EAAC;AAAA,IACZ;AAGA,IAAA,MAAM,gBAAgB,QAAA,CACnB,GAAA,CAAI,CAAC,CAAA,KAAW,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,CAAA,CAAE,UAAU,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,IAAI,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAY,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,GAAG,IAAA,IAAQ,CAAA,EAAG,OAAA,IAAW,EAAG,EAAE,IAAA,CAAK,EAAE,IAAI,EAAE,CAAA,CACzL,KAAK,IAAI,CAAA;AACZ,IAAA,MAAM,gBAAA,GAAmB,kBAAkB,aAAa,CAAA;AAQxD,IAAA,MAAM,yBAAyB,MAAA,CAAO,sBAAA;AAEtC,IAAA,MAAM,iCAAiC,sBAAA,GAAyB,GAAA;AAGhE,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,IAAI,iBAAA,GAAoB,CAAA;AAGxB,IAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,MAAA,IAAI,6BAAA,CAA8B,CAAC,CAAA,IAAK,kCAAA,CAAmC,CAAC,CAAA,EAAG;AAC3E,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,OAAA,GAAU,EAAA;AACd,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,YAAoB,CAAA,CAAE,OAAA;AAAA,WAAA,IACtC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AAC/B,QAAA,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC7E;AAGA,MAAA,MAAM,gBAAA,GAAmB,GAAA;AACzB,MAAA,IAAI,OAAA,CAAQ,SAAS,gBAAA,EAAkB;AACnC,QAAA,OAAA,GAAU,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,gBAAgB,CAAA,GAAI,iBAAA;AAAA,MACvD;AAEA,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA,CAAA;AACpC,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,MAAA,IAAU,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA,CAAA,CAAA;AAEjC,MAAA,MAAMC,YAAAA,GAAc,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AACzC,MAAA,MAAM,aAAA,GAAgB,kBAAkBA,YAAW,CAAA;AAEnD,MAAA,IAAI,iBAAA,GAAoB,gBAAgB,8BAAA,EAAgC;AAGpE,QAAA,YAAA,CAAa,QAAQ,oDAAoD,CAAA;AACzE,QAAA;AAAA,MACJ;AAEA,MAAA,YAAA,CAAa,QAAQA,YAAW,CAAA;AAChC,MAAA,iBAAA,IAAqB,aAAA;AAAA,IACzB;AAEA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACjD,IAAA,MAAM,cAAA,GAAiB,sBAAsB,oBAAoB,CAAA;AAE7D,IAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,KAAK,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAC7E,MAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAC1C,EAAA;AACN,IAAA,MAAM,4BAA4B,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,cAAc,KAAK,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAA,GACjG,MAAM,cAAA,CAAe,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA,GACpD,MAAA;AAEN,IAAA,MAAM,aAAA,GAAgB,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAA,EAiBA,OAAO,6BAA6B,CAAA;AAAA,gBAAA,EAChD,OAAO,WAAW,CAAA;;AAAA;AAAA,EAGlC,mBAAmB,QAAQ;;AAAA;AAAA,EAG3B,yBAAA,GAA4B,IAAA,CAAK,SAAA,CAAU,yBAAyB,IAAI,QAAQ;;AAAA;AAAA,EAGhF,gBAAgB;;AAAA;AAAA,EAGhB,eAAe,MAAA,GAAS,CAAA,GAAI,eAAe,GAAA,CAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,CAAE,EAAE,IAAA,CAAK,IAAI,IAAI,QAAQ,CAAA,CAAA;AAExG,IAAA,MAAM,QAAA,GAAW,OAAO,cAAA,IAAkB,aAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,SACd,OAAA,CAAQ,6BAAA,EAA+B,gBAAgB,CAAA,CACvD,OAAA,CAAQ,gCAAA,EAAkC,eAAA,IAAmB,EAAE,CAAA;AAEpE,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,cAAc,wGAAwG,CAAA;AAAA,MACtH,aAAa,UAAU;AAAA,KAC3B;AAGJ,IAAA,MAAM,mBAAA,GAAsB,iBAAA,CAAkB,aAAA,CAAc,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1F,IAAA,IAAI,WAAA,GAAc,sBAAA;AAClB,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,oBAAA,GAAuB,CAAA;AAC3B,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,kBAAA;AACJ,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,iBAAA;AAEJ,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AACvB,IAAA,IAAI;AACI,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,CAAM,WAAW,UAAA,EAAY;AAC9C,QAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,MACzD;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA;AACzD,MAAA,UAAA,GAAa,IAAA,CAAK,KAAI,GAAI,SAAA;AAC1B,MAAA,WAAA,GAAc,OAAO,QAAA,CAAS,OAAA,KAAY,QAAA,GACpC,QAAA,CAAS,OAAA,GACT,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,GAC1B,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GACtD,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AACzC,MAAA,oBAAA,GAAuB,kBAAkB,WAAW,CAAA;AAE5C,MAAA,MAAM,QAAA,GAAW,kBAAkB,WAAW,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA,CAAA;AACjD,MAAA,iBAAA,GAAoB,0BAAA,CAA2B,QAAQ,WAAW,CAAA;AAClE,MAAA,iBAAA,GAAoB,gBAAA,CAAiB,mBAAmB,cAAc,CAAA;AACtE,MAAA,SAAA,GAAY,MAAA,CAAO,cAAA,GACb,iBAAA,CAAkB,yBAAA,EAA2B,iBAAiB,CAAA,GAC9D,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAkB,KAAA,EAAO,mBAAA,EAAqB,KAAA,EAAO,KAAA,EAAO,EAAC,EAAE;AACrF,MAAA,IAAI,SAAA,IAAa,CAAC,SAAA,CAAU,MAAA,EAAQ;AAChC,QAAA,iBAAA,GAAoB,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,EAAmB,SAAS,CAAA;AACnG,QAAA,SAAA,GAAY,EAAE,GAAG,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC7C;AACA,MAAA,WAAA,GAAc,wBAAwB,iBAAiB,CAAA;AAG/D,MAAA,MAAM,QAAA,GAAY,QAAA,EAAkB,KAAA,IAC9B,QAAA,EAAkB,iBAAA,EAAmB,eACrC,QAAA,EAAkB,iBAAA,EAAmB,UAAA,IACrC,QAAA,EAAkB,iBAAA,EAAmB,KAAA;AAC3C,MAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,iBAAA,GAAoB,UAAA,CAAW,aAAA;AAC/B,QAAA,kBAAA,GAAqB,UAAA,CAAW,iBAAA;AAChC,QAAA,iBAAA,GAAoB,UAAA,CAAW,YAAA;AAC/B,QAAA,iBAAA,GAAoB,WAAW,qBAAA,EAAuB,aAAA;AAAA,MACxD;AAAA,IACJ,SAAS,GAAA,EAAU;AACf,MAAA,UAAA,GAAa,IAAA,CAAK,KAAI,GAAI,SAAA;AAClB,MAAA,iBAAA,GAAoB,2BAA2B,MAAA,EAAW,eAAA,IAAmB,iBAAiB,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC3G,MAAA,iBAAA,GAAoB,gBAAA,CAAiB,mBAAmB,cAAc,CAAA;AACtE,MAAA,SAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,qBAAqB,KAAA,EAAO,KAAA,EAAO,CAAC,qCAAqC,CAAA,EAAE;AAChI,MAAA,WAAA,GAAc,wBAAwB,iBAAiB,CAAA;AAG/D,MAAA,MAAM,UAAA,GAAiC;AAAA,QACrC,IAAA,EAAM,eAAA;AAAA,QACI,OAAA,EAAS,WAAA;AAAA,QACT,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,QACnD,WAAA,EAAa,mBAAA;AAAA,QACH,YAAA,EAAc,kBAAkB,WAAW,CAAA;AAAA,QACrD,UAAA;AAAA,QACA,iBAAiB,eAAA,IAAmB,MAAA;AAAA,QACpC,gBAAA;AAAA,QACU,eAAA,EAAiB,gBAAA;AAAA,QACjB,iBAAA;AAAA,QACA;AAAA,OACZ;AACA,MAAA,OAAA,GAAU,UAAU,CAAA;AAGpB,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,8BAAA;AAAA,QACP,OAAO,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,YAAA,EAAc,MAAM,eAAA,EAAgB;AAAA,QACpE,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA;AAAA,QACA,WAAA,EAAa,mBAAA;AAAA,QACH,YAAA,EAAc,kBAAkB,WAAW,CAAA;AAAA,QACrD,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,WAAA,EAAa,qBAAqB,aAAa;AAAA,OAChD,CAAA;AAAA,IAEL;AAIA,IAAA,MAAM,wBAAA,uBAA+B,GAAA,EAAoB;AACzD,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ;AACzB,MAAA,IAAI,CAAA,CAAE,SAAS,WAAA,IAAe,CAAA,CAAE,cAAc,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,EAAG;AACvE,QAAA,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAY;AAC9B,UAAA,IAAI,GAAG,EAAA,EAAI;AACP,YAAA,wBAAA,CAAyB,GAAA,CAAI,EAAA,CAAG,EAAA,EAAI,GAAG,CAAA;AAAA,UAC3C;AAAA,QACJ,CAAC,CAAA;AAAA,MACL;AAAA,IACJ,CAAC,CAAA;AAKD,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM;AACpC,MAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AACnB,QAAA,IAAI,6BAAA,CAA8B,CAAC,CAAA,EAAG;AAClC,UAAA,OAAO,CAAA;AAAA,QACX;AACA,QAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AAGrB,QAAA,IAAI,CAAC,UAAA,IAAc,CAAC,wBAAA,CAAyB,GAAA,CAAI,UAAU,CAAA,EAAG;AAE1D,UAAA,OAAO,IAAA;AAAA,QACX;AAGA,QAAA,IAAI,2BAAA,CAA4B,CAAA,CAAE,OAAO,CAAA,EAAG,OAAO,CAAA;AAEnD,QAAA,OAAO;AAAA,UACH,GAAG,CAAA;AAAA,UACH,OAAA,EAAS,0BAAA,CAA2B,CAAA,EAAG,KAAK;AAAA,SAChD;AAAA,MACJ;AACA,MAAA,OAAO,CAAA;AAAA,IACX,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAkC,MAAM,IAAI,CAAA;AAGvD,IAAA,MAAM,iBAAA,GAAoB,wBAAwB,WAAW,CAAA;AAI7D,IAAA,MAAM,iBAAA,GAAoB,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAGpD,IAAA,MAAM,oBAAA,GAAoC;AAAA,MACtC,IAAA,EAAM,WAAA;AAAA;AAAA,MACN,OAAA,EAAS,gFAAA;AAAA,MACT,UAAA,EAAY;AAAA,QACR;AAAA,UACI,EAAA,EAAI,iBAAA;AAAA,UACJ,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACN,IAAA,EAAM,mBAAA;AAAA,YACN,SAAA,EAAW;AAAA;AACf;AACJ;AACJ,KACJ;AAGA,IAAA,MAAM,mBAAA,GAAmC;AAAA,MACrC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,iBAAA;AAAA,MACd,IAAA,EAAM,mBAAA;AAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACb;AAEI,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,GAAI,CAAC,GAAG,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA,GAAI,CAAC,WAAW,CAAA;AACnG,IAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,MAAM,cAAc,CAAA,GACnD,CAAC,GAAG,KAAA,CAAM,cAAA,EAAgB,EAAE,GAAI,iBAAA,IAAqB,0BAAA,CAA2B,QAAW,WAAW,CAAA,EAAI,WAAW,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAG,IAC1J,CAAC,EAAE,GAAI,iBAAA,IAAqB,0BAAA,CAA2B,QAAW,WAAW,CAAA,EAAI,WAAW,SAAA,EAAA,iBAAW,IAAI,MAAK,EAAE,WAAA,IAAe,CAAA;AAG3I,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,iBAAA,EAAmB,sBAAsB,mBAAmB,CAAA;AACtF,IAAA,MAAM,eAAe,aAAA,CAClB,GAAA,CAAI,CAAC,CAAA,KAAW,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,CAAA,CAAE,UAAU,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,IAAI,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAY,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,GAAG,IAAA,IAAQ,CAAA,EAAG,OAAA,IAAW,EAAG,EAAE,IAAA,CAAK,EAAE,IAAI,EAAE,CAAA,CACzL,KAAK,IAAI,CAAA;AACZ,IAAA,MAAM,eAAA,GAAkB,kBAAkB,YAAY,CAAA;AAGtD,IAAA,MAAM,kBAAA,GAAyC;AAAA,MAC7C,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,WAAA;AAAA,MACT,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,MACzC,aAAa,iBAAA,IAAqB,mBAAA;AAAA,MAClC,cAAc,kBAAA,IAAsB,oBAAA;AAAA,MACpC,iBAAA;AAAA,MACA,WAAA,EAAa,iBAAA,IAAA,CAAuB,iBAAA,IAAqB,mBAAA,KAAwB,kBAAA,IAAsB,oBAAA,CAAA;AAAA,MACvG,UAAA;AAAA,MACA,iBAAiB,eAAA,IAAmB,MAAA;AAAA,MACpC,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAe,oBAAA,CAAqB,MAAA;AAAA;AAAA,MAC9B,iBAAA;AAAA,MACA;AAAA,KACR;AACA,IAAA,OAAA,GAAU,kBAAkB,CAAA;AAG5B,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,KAAA,EAAO,uBAAA;AAAA,MACP,OAAO,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,YAAA,EAAc,MAAM,eAAA,EAAgB;AAAA,MACpE,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA;AAAA,MACA,aAAa,iBAAA,IAAqB,mBAAA;AAAA,MAClC,cAAc,kBAAA,IAAsB,oBAAA;AAAA,MACpC,iBAAA;AAAA,MACA,WAAA,EAAa,iBAAA;AAAA,MACb,aAAa,oBAAA,CAAqB;AAAA,QAChC,GAAG,aAAA;AAAA,QACH,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,WAAA,EAAa,MAAM,sBAAA;AAAuB,OACzE,CAAA;AAAA,MACD,KAAA,EAAO;AAAA,QACL,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,QACzC,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,aAAa,gBAAA,GAAmB,eAAA;AAAA,QAChC,qBAAA,EAAuB,iBAAiB,MAAA,IAAU,CAAA;AAAA,QAClD,gBAAgB,iBAAA,KAAsB,MAAA;AAAA,QACtC,iBAAA;AAAA,QACQ;AAAA;AACV,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,aAAA;AAAA,MACF,SAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACN,GAAI,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,QACvB,WAAA,EAAA,CAAc,KAAA,CAAM,QAAA,EAAU,WAAA,IAAe,CAAA,IAAK,CAAA;AAAA,QAClD,UAAA,EAAY;AAAA;AAChB,KACZ;AAAA,EACF,CAAA;AACF;;;ACjrBA,eAAsB,gBAAA,CAAiB;AAAA,EACrC,KAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,EAAC;AACpC,EAAA,MAAM,SAAS,MAAA,CAAO,iBAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,iBAAA,CAAkB,MAAA,CAAQ,CAAA,CAAU,OAAA,IAAW,EAAE,CAAC,GAAG,CAAC,CAAA;AACpG,EAAA,IAAI,KAAA,IAAS,QAAQ,OAAO,KAAA;AAG5B,EAAA,MAAM,WAAA,GAAyB,CAAC,GAAG,QAAQ,CAAA;AAC3C,EAAA,OAAO,KAAA,GAAQ,MAAA,IAAU,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAE/C,IAAA,MAAM,MAAM,WAAA,CAAY,SAAA,CAAU,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC1D,IAAA,IAAI,QAAQ,EAAA,EAAI;AAChB,IAAA,MAAM,UAAU,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,CAAC,EAAE,CAAC,CAAA;AAC5C,IAAA,KAAA,IAAS,iBAAA,CAAkB,MAAA,CAAQ,OAAA,CAAgB,OAAA,IAAW,EAAE,CAAC,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,WAAA,EAAY;AAC3C;AC9BA,IAAM,gBAAA,GAAmBF,EAAE,IAAA,CAAK,CAAC,eAAe,aAAA,EAAe,WAAA,EAAa,SAAS,CAAC,CAAA;AAEtF,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACnC,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,EACpE,MAAMA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,aAAaA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxC,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,cAAcA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACzC,MAAA,EAAQ,gBAAA;AAAA,EACR,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AAChC,CAAC,CAAA;AAED,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACjE,MAAMA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,aAAaA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxC,OAAOA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,cAAcA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACzC,MAAA,EAAQ,iBAAiB,QAAA,EAAS;AAAA,EAClC,UAAUA,CAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AAChC,CAAC,CAAA;AAED,SAAS,iBAAA,CAAkB,MAAW,QAAA,EAAgB;AACpD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,QAAA,EAAU,EAAA;AAChC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAS,IAAA,CAAK,WAAA,IAAe,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,KAAA,IAAS,QAAA,EAAU,WAAA,IAAe,QAAQ,EAAE,CAAA,CAAA;AACpI,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAQ,UAAU,KAAA,IAAS,QAAA,EAAU,IAAA,IAAQ,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAA;AACxF,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,IAAS,QAAA,EAAU,WAAA,IAAe,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,KAAA,IAAS,QAAQ,EAAE,CAAA,CAAA;AAE3I,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,IAAA;AAAA,IACH,EAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,QAAA,EAAU,KAAA,IAAS,OAAA;AAAA,IACxC,cAAc,IAAA,CAAK,YAAA,IAAgB,UAAU,YAAA,IAAgB,WAAA,IAAe,iBAAiB,EAAE,CAAA,CAAA;AAAA,IAC/F,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,QAAA,EAAU,MAAA;AAAA,IACjC,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,QAAA,EAAU;AAAA,GACvC;AACF;AAEA,SAAS,sBAAA,CAAuB,UAAiB,oBAAA,EAA+B;AAC9E,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,EAAE,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,GAAA,CAAI,MAAA,EAAQ;AACjC,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EACxD;AAEA,EAAA,IAAI,oBAAA,EAAsB;AACxB,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAO,EAAG,CAAC,CAAA,EAAG,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAA;AACnF,IAAA,MAAM,YAAA,GAAe,IAAI,KAAA,CAAM,CAAC,IAAI,KAAA,KAAU,EAAA,KAAO,WAAA,CAAY,KAAK,CAAC,CAAA;AACvE,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,mEAAA,EAAoE;AAAA,IACjG;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AACjF,EAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,kDAAA,EAAmD;AAAA,EAChF;AAEA,EAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AACpB;AAEA,SAAS,wBAAwB,QAAA,EAAiB;AAChD,EAAA,MAAM,cAAA,GAAiB,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AAC9E,EAAA,OAAO,QAAA,CAAS,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,MAAA,CAAA,CAAQ,iBAAiB,QAAA,CAAS,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AACzF;AAGO,SAAS,kBAAA,CACd,UACA,IAAA,EACA;AACA,EAAA,MAAM,QAAQ,EAAC;AAEf,EAAA,IAAI,MAAM,eAAA,EAAiB;AAC3B,IAAA,MAAM,aAAa,UAAA,CAAW;AAAA,MAC1B,IAAA,EAAM,kBAAA;AAAA,MACN,WAAA,EACE,8vBAAA;AAAA,MACF,MAAA,EAAQA,EAAE,MAAA,CAAO;AAAA,QACf,WAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,QAC7C,eAAA,EAAiBA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,QAClD,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,KAAA,CAAM,CAAC,mBAAA,EAAqB,oBAAoB,CAAC,CAAC,CAAA,CAAE,QAAA;AAAS,OAClF,CAAA;AAAA,MACD,MAAM,OAAO,EAAE,SAAA,EAAW,eAAA,EAAiB,UAAS,KAAM;AACxD,QAAA,MAAM,OAAA,GAAW,WAAmB,SAAA,EAAW,SAAA;AAC/C,QAAA,MAAM,cAAA,GAAiB,SAAS,WAAA,IAAe,CAAA;AAC/C,QAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,UAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,IAAY,EAAC;AACnC,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,kBAAA,EAAoB,WAAW,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,SAAS,WAAA,IAAe,CAAA,EAAG,gBAAgB,QAAA,CAAS,cAAA,IAAkB,GAAG,CAAA;AAC3K,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,IAAI,OAAO,eAAA,KAAoB,QAAA,IAAY,eAAA,KAAoB,cAAA,EAAgB;AAC7E,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,KAAA,EAAO,wDAAA;AAAA,YACP,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,KAAA,EAAO,uDAAA;AAAA,YACP,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AAEA,QAAA,IAAI,cAAc,OAAA,EAAS;AACzB,UAAA,MAAM,SAASA,CAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC9D,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,OAAA,IAAW,6BAAA;AAAA,cAC1C,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AACA,UAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS,iBAAA,CAAkB,IAAI,CAAC,CAAA;AACxE,UAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,cAAA,EAAgB,IAAI,CAAA;AAC9D,UAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,OAAO,UAAA,CAAW,KAAA;AAAA,cAClB,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AACA,UAAA,QAAA,CAAS,QAAA,GAAW,cAAA;AAAA,QACtB,CAAA,MAAA,IAAW,cAAc,QAAA,EAAU;AACjC,UAAA,MAAM,SAASA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC/D,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,OAAA,IAAW,8BAAA;AAAA,cAC1C,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AACA,UAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,WAAW,EAAC;AAC5E,UAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,KAAA,EAAO,8CAAA;AAAA,cACP,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AAEA,UAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,UAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,IAAA,EAAM;AAC9B,YAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,cAAA,OAAO;AAAA,gBACL,MAAA,EAAQ,OAAA;AAAA,gBACR,SAAA;AAAA,gBACA,KAAA,EAAO,6CAAA;AAAA,gBACP,OAAA,EAAS,cAAA;AAAA,gBACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,eAC7C;AAAA,YACF;AACA,YAAA,QAAA,CAAS,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,UACtB;AAEA,UAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AACrE,UAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,IAAA,EAAM;AAC9B,YAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAC5B,cAAA,OAAO;AAAA,gBACL,MAAA,EAAQ,OAAA;AAAA,gBACR,SAAA;AAAA,gBACA,KAAA,EAAO,CAAA,8BAAA,EAAiC,IAAA,CAAK,EAAE,CAAA,gCAAA,CAAA;AAAA,gBAC/C,OAAA,EAAS,cAAA;AAAA,gBACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,eAC7C;AAAA,YACF;AAAA,UACF;AAEA,UAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3C,YAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,EAAA,KAAO,IAAA,CAAK,EAAE,CAAA;AACtE,YAAA,OAAO,KAAA,GAAQ,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAA,GAAI,IAAA;AAAA,UAClD,CAAC,CAAA;AACD,UAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,EAAY,KAAK,CAAA;AAC3D,UAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,OAAO,UAAA,CAAW,KAAA;AAAA,cAClB,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AACA,UAAA,QAAA,CAAS,QAAA,GAAW,UAAA;AAAA,QACtB;AAEA,QAAA,QAAA,CAAS,cAAc,cAAA,GAAiB,CAAA;AACxC,QAAA,QAAA,CAAS,cAAA,GAAiB,uBAAA,CAAwB,QAAA,CAAS,QAAA,IAAY,EAAE,CAAA;AACzE,QAAA,MAAM,OAAA,GAAU;AAAA,UACd,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA;AAAA,UACA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,SAAS,MAAA,GAAS,MAAA;AAAA,UACnD,OAAA,EAAS,SAAS,WAAA,IAAe,CAAA;AAAA,UACjC,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,SAC7C;AACA,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,kBAAA,EAAoB,WAAW,QAAA,EAAU,QAAA,CAAS,QAAA,EAAU,OAAA,EAAS,SAAS,WAAA,IAAe,CAAA,EAAG,gBAAgB,QAAA,CAAS,cAAA,IAAkB,GAAG,CAAA;AAChL,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACD,CAAA;AACD,IAAC,WAAmB,SAAA,GAAY,QAAA;AAChC,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACvB;AAGA,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EACE,maAAA;AAAA,IACF,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,4CAA4C,CAAA,EAAG,CAAA;AAAA,IACnG,IAAA,EAAM,OAAO,EAAE,WAAA,EAAY,KAAM;AAC/B,MAAA,MAAM,mBAAmB,CAAC,CAAA,KAAW,GAAG,WAAA,KAAgB,WAAA,IAAe,GAAG,YAAA,KAAiB,WAAA;AAC3F,MAAA,IAAI,SAAA,GAAY,SAAS,WAAA,EAAa,IAAA,CAAK,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAC,CAAA;AACrE,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,SAAA,GAAY,SAAS,mBAAA,EAAqB,IAAA,CAAK,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,MAC3E;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,SAAA,CAAU,aAAa,SAAA,CAAU,MAAA;AAAA,MAC1C;AACA,MAAA,OAAO,oDAAA;AAAA,IACT;AAAA,GACD,CAAA;AAED,EAAC,QAAgB,SAAA,GAAY,QAAA;AAC7B,EAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAGlB,EAAA,IAAI,MAAM,YAAA,EAAc;AACxB,IAAA,MAAM,eAAe,UAAA,CAAW;AAAA,MAC5B,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAa,gJAAA;AAAA,MACb,QAAQ,IAAA,CAAK,YAAA,CAAa,QAAQ,IAAA,CAAK,YAAA,GAAeA,EAAE,GAAA,EAAI;AAAA,MAC5D,IAAA,EAAM,OAAO,IAAA,KAAc;AAEzB,QAAA,IAAI;AACF,UAAA,MAAM,SAAA,GAAY,KAAK,YAAA,CAAa,KAAA,GAAQ,KAAK,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAE5E,UAAA,OAAO,EAAE,uBAAA,EAAyB,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,QAC1D,SAAS,CAAA,EAAQ;AACf,UAAA,OAAO,EAAE,KAAA,EAAO,0BAAA,EAA4B,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,QAClE;AAAA,MACF;AAAA,KACD,CAAA;AACD,IAAC,aAAqB,SAAA,GAAY,QAAA;AAClC,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,KAAA;AACT;;;AC5QA,SAASG,2BAA0B,OAAA,EAAuB;AACxD,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,IAAA,KAAS,WAAA,IAAe,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrE,IAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,QAAA,KAAkB;AAChD,MAAA,MAAM,QAAA,GAAW,QAAA,EAAU,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,IAAA;AACvD,MAAA,OAAO,QAAA,KAAa,mBAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,kBAAA,CAAmB,KAAA,EAAmB,IAAA,EAAyB,oBAAA,EAAwC;AAC9G,EAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAK,KAAA,CAAM,KAAa,oBAAA,EAAsB;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAY,CAAA;AAChE,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,MAAA,EAAQ;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,SAAS,aAAA,CAAc,oBAAA;AAEtC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAA,CAAW,KAAA,CAAM,QAAA,IAAY,IAChC,MAAA,CAAO,CAAC,OAAA,KAAiB,CAACA,2BAA0B,OAAO,CAAC,CAAA,CAC5D,GAAA,CAAI,CAAC,CAAA,KAAW;AACf,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,SAAiB,CAAA,CAAE,OAAA;AAC5C,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AAC5B,QAAA,OAAO,EAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAY,OAAO,MAAM,QAAA,GAAW,CAAA,GAAI,GAAG,IAAA,IAAQ,CAAA,EAAG,WAAW,IAAA,CAAK,SAAA,CAAU,CAAC,CAAE,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,MACpH;AAEA,MAAA,IAAI,CAAA,CAAE,OAAA,IAAW,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU;AAC9C,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,EAAA;AAAA,IACT,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,UAAA,GAAa,kBAAkB,OAAO,CAAA;AAC5C,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,QAAA,EAAU,eAAA,IAAmB,CAAA;AAC3D,IAAA,MAAM,QAAA,GAAW,UAAA,GAAa,MAAA,IAC5B,QAAA,CAAS,QAAA,CAAS,OAAA,IACf,QAAA,CAAS,QAAA,CAAS,cAAA,IAClB,eAAA,IAAmB,QAAA,CAAS,QAAA,CAAS,mBAAA;AAG1C,IAAA,IAAI,OAAA,CAAQ,IAAI,mBAAA,EAAqB;AACnC,MAAA,MAAM,QAAA,GAAA,CAAY,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,MAAA;AACxC,MAAA,MAAM,QAAA,GAAA,CAAY,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,OAAO,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA;AAC5E,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,GAAQ,CAAA,KAAc;AACtD,QAAA,MAAM,UAAA,GAAa,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AACvF,QAAA,OAAO,IAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,YAAA,EAAc,MAAM,CAAA,CAAE,CAAA,IAAK,MAAM,CAAA,KAAA,EAAQ,WAAW,MAAM,CAAA,UAAA,EAAa,WAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,IAAA,CAAA;AAAA,MACtH,CAAC,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,0BAAA,EAA6B,QAAQ,CAAA,iBAAA,EAAoB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACtF,MAAA,WAAA,CAAY,QAAQ,CAAA,CAAA,KAAK,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAC,EAAE,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,gCAAgC,UAAU,CAAA,OAAA,EAAU,MAAM,CAAA,eAAA,EAAkB,eAAe,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC7I;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,uBAAA,CAAwB,MAAyB,oBAAA,EAA+B;AAC9F,EAAA,OAAO,SAAS,iBAAiB,KAAA,EAAmB;AAClD,IAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,IAAA,EAAM,oBAAoB,IAAI,kBAAA,GAAqB,OAAA;AAAA,EACtF,CAAA;AACF;AAEO,SAAS,oBAAA,CAAqB,MAAyB,oBAAA,EAA+B;AAC3F,EAAA,OAAO,SAAS,cAAc,KAAA,EAAmB;AAC/C,IAAA,MAAM,GAAA,GAAO,IAAA,CAAK,MAAA,EAAQ,YAAA,IAAgB,EAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,MAAM,aAAA,IAAiB,CAAA;AACrC,IAAA,IAAI,KAAA,IAAS,KAAK,OAAO,mBAAA;AACzB,IAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,IAAA,EAAM,oBAAoB,IAAI,kBAAA,GAAqB,OAAA;AAAA,EACtF,CAAA;AACF;;;AC/EA,SAAS,aAAA,CAAc,OAAoB,IAAA,EAA8B;AACvE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,KAAA;AAAA,IACA,QAAA,EAAU,KAAK,QAAA,IAAY,KAAA;AAAA,IAC3B,eAAe,IAAA,CAAK,aAAA,IAAA,iBAAiB,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,IAC5D,YAAY,MAAA,CAAO,QAAA,CAAS,KAAK,UAAU,CAAA,GAAI,KAAK,UAAA,GAAa;AAAA,GACnE;AACF;AAEO,IAAM,sBAAN,MAAiD;AAAA,EAAjD,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,OAAA,uBAAwB,GAAA,EAAI;AAAA,EAAA;AAAA,EAE7C,MAAM,GAAA,CAAI,KAAA,EAAoB,OAAA,EAAgF;AAC5G,IAAA,MAAM,eAAA,GAAkB,SAAS,eAAA,KAAoB,IAAA;AACrD,IAAA,MAAM,MAAM,CAAC,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,KAAK,CAAA,IAAK,EAAG,EAC5C,MAAA,CAAO,CAAC,SAAS,eAAA,IAAmB,CAAC,KAAK,QAAQ,CAAA,CAClD,IAAA,CAAK,CAAC,MAAM,KAAA,KAAU,IAAI,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAC,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,IAAA,CAAK,iBAAiB,CAAC,CAAA,CAAE,SAAS,CAAA;AACnH,IAAA,OAAO,OAAO,SAAS,KAAA,KAAU,QAAA,GAAW,IAAI,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,GAAI,GAAA;AAAA,EAC5E;AAAA,EAEA,MAAM,MAAA,CAAO,KAAA,EAAoB,KAAA,EAAoC;AACnE,IAAA,MAAM,QAAA,GAAW,CAAC,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,EAAG,CAAA;AAEpD,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AAC5C,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,GAAA,KAAQ,UAAA,CAAW,GAAA,IAAO,CAAC,KAAA,CAAM,QAAQ,CAAA;AAC1F,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,KAAA,CAAM,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO;AACpC,UAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AACjB,UAAA,KAAA,CAAM,aAAA,GAAA,iBAAgB,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAC/C;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,GAAA,KAAQ,UAAA,CAAW,GAAA,IAAO,MAAM,KAAA,KAAU,UAAA,CAAW,KAAA,IAAS,CAAC,MAAM,QAAQ,CAAA;AAC1H,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,aAAa,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,UAAA,EAAY,WAAW,UAAU,CAAA;AACnE,QAAA,KAAA,CAAM,aAAa,UAAA,CAAW,UAAA;AAC9B,QAAA,KAAA,CAAM,MAAM,UAAA,CAAW,GAAA;AACvB,QAAA,KAAA,CAAM,OAAO,UAAA,CAAW,IAAA;AACxB,QAAA,KAAA,CAAM,gBAAgB,UAAA,CAAW,aAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,YAAA,CAAa,KAAA,EAAoB,IAAA,EAA+B;AACpE,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,EAAC;AAC3C,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA,IAAA,CAAK,aAAA,GAAgB,GAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,cAAA,CAAe,KAAA,EAAoB,KAAA,EAAe,OAAA,EAAqD;AAC3G,IAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAC1C,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,KAAK,QAAQ,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,MAAA,CACZ,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,WAAW,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,EAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,IAAA,CAAK,GAAG,CAAC,GAAG,WAAA,EAAY;AACxF,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,eAAe,CAAA,GAAI,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,IAAO,QAAA,CAAS,SAAS,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA;AACtK,MAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AAAA,IACvB,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CACjC,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,CAC9F,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA;AAC5B,IAAA,OAAO,OAAO,SAAS,KAAA,KAAU,QAAA,GAAW,OAAO,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,GAAI,MAAA;AAAA,EAC/E;AACF;AAEO,SAAS,mBAAmB,MAAA,EAA2D;AAC5F,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAO,OAAO,MAAA,CAAO,KAAA;AAC9C,EAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,UAAA,EAAY,OAAO,IAAI,mBAAA,EAAoB;AAC1E,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,eAAA,CACpB,KAAA,EACA,MAAA,EACA,KAAA,EACuB;AACvB,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,KAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,eAAA;AAC7B,EAAA,MAAM,MAAA,GAA2B,OAAO,MAAA,CAAO,UAAA;AAE/C,EAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,MAAA,KAAW,UAAA,IAAc,OAAO,KAAA,CAAM,mBAAmB,UAAA,EAAY;AACvE,IAAA,OAAO,MAAM,cAAA,CAAe,KAAA,EAAO,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,SAAS,MAAM,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAC,GAAG,CAAA;AAClF,IAAA,MAAM,QAAA,GAAW,OAAO,KAAA,CAAM,cAAA,KAAmB,aAC7C,MAAM,KAAA,CAAM,cAAA,CAAe,KAAA,EAAO,KAAA,EAAO,EAAE,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,CAAA,GACrF,EAAC;AACL,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAwB;AAC5C,IAAA,KAAA,MAAW,QAAQ,CAAC,GAAG,QAAA,EAAU,GAAG,MAAM,CAAA,EAAG;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,GAAG,IAAI,IAAA,CAAK,KAAK,IAAI,IAAI,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,GAAG,KAAK,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,OAAO,CAAA;AACnC;AAEA,eAAsB,yBAAA,CACpB,KAAA,EACA,MAAA,EACA,OAAA,EACA,UAAA,EACuB;AACvB,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,SAAgB,EAAC;AAEhC,EAAA,MAAM,KAAA,GAAsB,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IAC9D,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,UAAA;AAAA,IACA,UAAA,EAAY,KAAK,UAAA,IAAc,GAAA;AAAA,IAC/B,QAAA,EAAU,KAAA;AAAA,IACV,IAAA,EAAM,CAAC,cAAc;AAAA,GACvB,CAAE,CAAA;AAEF,EAAA,IAAI,OAAA,CAAQ,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,MAAM,MAAM,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,kBAAkB,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,MAAM,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,eAAA,GAAkB,OAAA,CAAQ,YAAA,CAAa,QAAQ,CAAA;AAC/G;AAEO,SAAS,kBAAkB,KAAA,EAA6B;AAC7D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,WAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG;AAAA,GAClG,CAAE,KAAK,IAAI,CAAA;AACb;;;ACpJO,SAAS,iBAAoC,IAAA,EAA8F;AAChJ,EAAA,MAAM,QAAA,GAAW,2BAA2B,IAAI,CAAA;AAChD,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,QAAA,CAAS,IAAA,KAAS,KAAA;AACnD,EAAA,MAAM,WAAA,GAAc,mBAAmB,QAAQ,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAyE;AAAA,IAC7E,GAAG,IAAA;AAAA,IACH,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,eAAe,QAAA,CAAS,aAAA;AAAA,IACxB,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,QAAQ,EAAE,GAAG,QAAA,CAAS,MAAA,EAAQ,OAAO,WAAA,EAAY;AAAA,IACjD,eAAe,QAAA,CAAS,aAAA;AAAA,IACxB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,WAAA,EAAa;AAAA,GACf;AAGA,EAAA,MAAM,QAAA,GAAgB,EAAE,WAAA,EAAa,MAAA,EAAW,mBAAA,EAAqB,MAAA,EAAW,QAAA,EAAU,MAAA,EAAW,WAAA,EAAa,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AACvI,EAAA,MAAM,eAAe,kBAAA,CAAmB,QAAA,EAAU,EAAE,eAAA,EAAiB,YAAA,EAAc,QAAW,CAAA;AAC9F,EAAA,MAAM,WAAA,GAAc,CAAC,GAAK,IAAA,CAAK,SAAiB,EAAC,EAAI,GAAG,YAAY,CAAA;AAGpE,EAAA,MAAM,OAAO,WAAA,CAAqB,EAAE,GAAG,WAAA,EAAa,KAAA,EAAO,aAAa,CAAA;AACxE,EAAA,IAAA,CAAK,SAAA,CAAU,iBAAiB,QAAA,CAAS,cAAA;AACzC,EAAA,IAAA,CAAK,UAAU,KAAA,GAAQ,QAAA;AAEvB,EAAA,MAAM,oBAAA,GAAuB,QAAA,CAAS,aAAA,CAAc,MAAA,KAAW,KAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,oBAAA,GAAuB,0BAAA,CAA2B,WAAW,CAAA,GAAI,MAAA;AACpF,EAAA,MAAM,YAAA,GAAe,uBAAA,CAAwB,WAAA,EAAa,oBAAoB,CAAA;AAC9E,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,WAAA,EAAa,oBAAoB,CAAA;AAE1E,EAAA,MAAM,oBAAA,GAAuB,KAAK,YAAA,GAC9B;AAAA,IACA,uCAAA;AAAA,IACA,gEAAA;AAAA,IACA,6HAAA;AAAA,IACA;AAAA,GACF,CAAE,IAAA,CAAK,IAAI,CAAA,GACT,EAAA;AAEJ,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,QAAA,CAAS,cAAA,KAAmB,QAAA,CAAS,WAAA,GACjC,CAAA,iBAAA,EAAoB,QAAA,CAAS,cAAc,CAAA,CAAA,CAAA,GAC3C,CAAA,iBAAA,EAAoB,QAAA,CAAS,cAAc,CAAA,QAAA,EAAW,SAAS,WAAW,CAAA,EAAA,CAAA;AAAA,IAC9E,CAAA,gBAAA,EAAmB,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAA;AAAA,IAC1C,kBAAkB,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,iBAAA,EAAoB,QAAA,CAAS,SAAS,YAAY,CAAA,CAAA,CAAA;AAAA,IAC1F,oBAAoB,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,wBAAA,EAA2B,QAAA,CAAS,WAAW,kBAAkB,CAAA,CAAA,CAAA;AAAA,IAC7G,CAAA,sBAAA,EAAyB,QAAA,CAAS,OAAA,CAAQ,kBAAkB,CAAA,CAAA;AAAA,GAC9D,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,SAAS,iBAAiB,QAAA,EAAyB;AACjD,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,MAAM,CAAA;AAChF,IAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,IAAA,OAAO,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,GAC7B,MAAA,CAAO,OAAA,GACP,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,GAC5B,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAe,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,EAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GACjH,EAAA;AAAA,EACN;AAEA,EAAA,eAAe,WAAW,KAAA,EAAwC;AAChE,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,CAAM,QAAA,IAAY,EAAE,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,WAAA,EAAa,UAAU,KAAK,CAAA;AACtE,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAY;AAAA,EACjC;AAEA,EAAA,eAAe,qBAAqB,KAAA,EAAwC;AAC1E,IAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AACzB,IAAA,IAAI,QAAA,CAAS,MAAA,CAAO,WAAA,KAAgB,QAAA,EAAU,OAAO,KAAA;AACrD,IAAA,MAAM,gBAAgB,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,SAAS,CAAC,CAAA;AAC5E,IAAA,IAAI,CAAC,eAAe,OAAO,KAAA;AAC3B,IAAA,IAAI,SAAS,MAAA,CAAO,WAAA,KAAgB,oBAAoB,aAAA,CAAc,YAAA,CAAa,WAAW,CAAA,EAAG;AAC/F,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAA,GAAc,MAAM,yBAAA,CAA0B,WAAA,EAAa,UAAU,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,KAAA,CAAM,YAAY,EAAC,EAAG,OAAO,CAAC,OAAA,KAAY,QAAQ,IAAA,KAAS,MAAM,CAAA,CAAE,MAAM,CAAC,CAAA;AACjL,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAY;AAAA,EACjC;AAEA,EAAA,SAAS,cAAc,KAAA,EAA+B;AACpD,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,GAAG,OAAO,KAAA;AAC9C,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,QAAA,CAAS,WAAA,IAAe,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,QACtD,OAAO,QAAA,CAAS,QAAA;AAAA,QAChB,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,OAC7C;AAAA,MACA,WAAA,EAAa,QAAA,CAAS,WAAA,IAAe,KAAA,CAAM,WAAA,IAAe;AAAA,KAC5D;AAAA,EACF;AAEA,EAAA,SAASF,cAAAA,GAAqB;AAC5B,IAAA,MAAM,GAAA,GAAM,iBAAA;AAAA,MACV,CAAC,IAAA,CAAK,YAAA,EAAc,WAAA,EAAa,oBAAoB,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,MAChF,eAAA;AAAA,MACA,KAAK,IAAA,IAAQ,OAAA;AAAA,MACb,IAAA,CAAK;AAAA,KACP;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,GAAA,EAAI;AAAA,EACxC;AAEA,EAAA,MAAM,QAAA,GAAwC;AAAA,IAC5C,MAAA,EAAQ,OAAO,KAAA,EAAmB,MAAA,KAA+D;AAE/F,MAAA,QAAA,CAAS,cAAc,KAAA,CAAM,WAAA;AAC7B,MAAA,QAAA,CAAS,sBAAsB,KAAA,CAAM,mBAAA;AACrC,MAAA,QAAA,CAAS,QAAA,GAAW,MAAM,IAAA,EAAM,KAAA;AAChC,MAAA,QAAA,CAAS,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,MAAM,OAAA,IAAW,CAAA;AACnE,MAAA,QAAA,CAAS,cAAA,GAAiB,KAAA,CAAM,IAAA,EAAM,cAAA,IAAkB,CAAA;AAGxD,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA,KAAS,QAAA;AACtF,MAAA,MAAM,eAAe,gBAAA,GAAmB,CAAC,GAAI,KAAA,CAAM,YAAY,EAAG,CAAA,GAAI,CAACA,gBAAc,EAAG,GAAI,KAAA,CAAM,QAAA,IAAY,EAAG,CAAA;AACjH,MAAA,IAAI,KAAA,GAAoB,MAAM,UAAA,CAAW,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,cAA4B,CAAA;AAC3F,MAAA,IAAI,UAAA,GAAgD,IAAA;AACpD,MAAA,IAAI,WAAA,GAAc,CAAC,GAAG,YAAY,CAAA;AAClC,MAAA,MAAM,wBAAyB,MAAA,EAAQ,MAAA,EAAQ,YAAA,IAAgB,QAAA,CAAS,OAAO,YAAA,IAAgB,EAAA;AAC/F,MAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA,CAAI,qBAAA,GAAwB,CAAA,GAAI,GAAG,EAAE,CAAA;AACjE,MAAA,IAAI,kBAAA,GAAqB,kBAAkB,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,KAAiB,OAAO,QAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAEhL,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,EAAgB,CAAA,EAAA,EAAK;AACvC,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,WAAA,EAAY;AAE1C,QAAA,MAAM,IAAA,GAAO,oBAAA,GAAuB,YAAA,CAAa,KAAK,CAAA,GAAI,OAAA;AAC1D,QAAA,IAAI,IAAA,KAAS,sBAAsB,UAAA,EAAY;AAC7C,UAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,KAAK,CAAA;AAEpC,UAAA,IAAI,CAAC,KAAA,IAAS,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,WAAW,CAAA,EAAG,CAG/C,MAAO;AACJ,YAAA,KAAA,GAAQ,MAAM,qBAAqB,aAAA,CAAc,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAqB,CAAC,CAAA;AACtF,YAAA,WAAA,GAAc,CAAC,GAAI,KAAA,CAAM,QAAA,IAAY,WAAY,CAAA;AACjD,YAAA;AAAA,UACH;AAAA,QACF;AAGA,QAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,KAAA,EAAO,QAAQ,CAAA;AACxD,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,aAAA,EAAc,EAAiB,MAAM,CAAA;AACzF,QAAA,UAAA,GAAa,GAAA;AAEb,QAAA,MAAM,mBAAmB,KAAA,CAAM,SAAA;AAC/B,QAAA,MAAM,wBAAwB,KAAA,CAAM,cAAA;AACpC,QAAA,MAAM,cAAc,KAAA,CAAM,IAAA;AAC1B,QAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,cAAc,MAAM,CAAA;AAChE,QAAA,WAAA,GAAc,CAAC,GAAG,WAAA,EAAa,GAAG,gBAAgB,CAAA;AAClD,QAAA,KAAA,GAAU,IAAI,KAAA,IAAwB,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,IAAI,QAAA,EAAS;AACzE,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,WAAA,EAAY;AAE1C,QAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,MAAA,GAAS,CAAA,KAAM,CAAC,MAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,MAAA,KAAW,CAAA,CAAA,EAAI;AACzG,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,gBAAA,EAAiB;AAAA,QAClD;AACA,QAAA,IAAI,qBAAA,IAAyB,qBAAA,CAAsB,MAAA,GAAS,CAAA,KAAM,CAAC,MAAM,cAAA,IAAkB,KAAA,CAAM,cAAA,CAAe,MAAA,KAAW,CAAA,CAAA,EAAI;AAC7H,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,cAAA,EAAgB,qBAAA,EAAsB;AAAA,QAC5D;AACA,QAAA,IAAI,WAAA,IAAe,CAAC,KAAA,CAAM,IAAA,EAAM;AAC9B,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC;AACA,QAAA,KAAA,GAAQ,aAAA,CAAc,MAAM,UAAA,CAAW,KAAK,CAAC,CAAA;AAC7C,QAAA,QAAA,CAAS,cAAc,KAAA,CAAM,WAAA;AAC7B,QAAA,QAAA,CAAS,sBAAsB,KAAA,CAAM,mBAAA;AAErC,QAAA,MAAM,iBAAA,GAAoB,kBAAkB,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,KAAiB,OAAO,QAAQ,OAAA,KAAY,QAAA,GAAW,QAAQ,OAAA,GAAU,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACjL,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,oBAAoB,kBAAkB,CAAA;AACrE,QAAA,MAAM,oBAAA,GAAuB,iBAAiB,MAAA,CAAO,CAAC,YAAiB,OAAA,CAAQ,IAAA,KAAS,MAAM,CAAA,CAAE,MAAA;AAChG,QAAA,MAAM,eAAA,GAAkB,gBAAA,CAAiB,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,MAAA,CAAA,CAAQ,oBAAA,GAAuB,gBAAA,CAAiB,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC9H,QAAA,KAAA,GAAQ;AAAA,UACN,GAAG,KAAA;AAAA,UACH,QAAA,EAAU;AAAA,YACR,UAAA;AAAA,YACA,eAAA,EAAiB,wBAAwB,KAAK,CAAA;AAAA,YAC9C,eAAA;AAAA,YACA,WAAA,EAAa,KAAA,CAAM,QAAA,EAAU,WAAA,IAAe,CAAA;AAAA,YAC5C,YAAY,gBAAA,CAAiB,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,MAAM,QAAA,EAAU;AAAA;AAC3E,SACF;AACA,QAAA,kBAAA,GAAqB,iBAAA;AAErB,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,SAAS,cAAA,EAAgB;AACjE,UAAA,MAAM,gBAAgB,UAAA,IAAc,QAAA,CAAS,QAAA,CAAS,mBAAA,IAAA,CAChD,MAAM,QAAA,EAAU,eAAA,IAAmB,CAAA,KAAM,QAAA,CAAS,SAAS,yBAAA,IAAA,CAC3D,KAAA,CAAM,UAAU,eAAA,IAAmB,CAAA,KAAM,SAAS,QAAA,CAAS,mBAAA;AACjE,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAI,oBAAA,EAAsB,IAAA,EAAK,EAAE;AAAA,UAChF;AAAA,QACF;AAGA,QAAA,IAAK,KAAA,CAAc,GAAA,EAAK,oBAAA,IAAwB,UAAA,EAAY;AAE1D,UAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,UAAA,OAAO,GAAA,CAAI,oBAAA;AACX,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AAExB,UAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,KAAK,CAAA;AAIpC,UAAA,IAAI,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AACzC,YAAA,KAAA,GAAQ,MAAM,qBAAqB,aAAA,CAAc,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAqB,CAAC,CAAA;AACtF,YAAA,WAAA,GAAc,CAAC,GAAI,KAAA,CAAM,QAAA,IAAY,WAAY,CAAA;AACjD,YAAA;AAAA,UACH;AAAA,QACF;AAGA,QAAA,IAAK,KAAA,CAAc,KAAK,gCAAA,EAAkC;AAG1D,QAAA,IAAI,oBAAA,EAAsB;AACxB,UAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,UAAA,IAAI,KAAA,KAAU,sBAAsB,UAAA,EAAY;AAC9C,YAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,KAAK,CAAA;AACnC,YAAA,IAAI,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AACzC,cAAA,KAAA,GAAQ,MAAM,qBAAqB,aAAA,CAAc,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAqB,CAAC,CAAA;AACtF,cAAA,WAAA,GAAc,CAAC,GAAI,KAAA,CAAM,QAAA,IAAY,WAAY,CAAA;AAEjD,cAAA;AAAA,YACH;AAAA,UACH;AAAA,QACF;AAGA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,MAAM,CAAA;AAC3C,QAAA,UAAA,GAAa,GAAA;AAAA,MACf;AAGA,MAAA,IAAI,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AACjD,QAAA,IAAI,WAAW,KAAA,EAAO;AACpB,UAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,EAAE,GAAG,UAAA,CAAW,KAAA,EAAO,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,cAAA,EAAgB,KAAA,CAAM,cAAA,EAAgB,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,WAAA,EAAY,EAAE;AAAA,QACpQ,CAAA,MAAO;AACL,UAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,cAAA,EAAgB,KAAA,CAAM,cAAA,EAAgB,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,WAAA,EAAY,EAAE;AAAA,QACzP;AAAA,MACF,CAAA,MAAA,IAAW,WAAW,KAAA,EAAO;AAC3B,QAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,EAAE,GAAG,UAAA,CAAW,KAAA,EAAO,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,MAAM,KAAA,CAAM,IAAA,EAAM,aAAa,KAAA,CAAM,WAAA,EAAa,UAAU,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,WAAA,EAAY,EAAE;AAAA,MAClM;AAEA,MAAA,OAAO,UAAA;AAAA,IACT,CAAA;AAAA,IACA,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,qBAAqB,IAAA,CAAK,mBAAA;AAAA,IAC1B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,WAAW,IAAA,CAAK;AAAA,GAClB;AAEA,EAAA,OAAO,QAAA;AACT;;;AC5PA,SAAS,uBAAuB,MAAA,EAAkD;AAChF,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA;AAAA,MACP,cAAA,EAAgB,MAAA;AAAA,MAChB,WAAA,EAAa,MAAA,KAAW,QAAA,GAAW,UAAA,GAAa;AAAA,KAClD;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,WAAA,EAAa,MAAA,CAAO,WAAA,KAAgB,MAAA,CAAO,cAAA,KAAmB,WAAW,MAAA,CAAO,aAAA,EAAe,OAAA,IAAW,UAAA,GAAa,MAAA,CAAO,cAAA,CAAA;AAAA,IAC9H,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAEA,SAAS,cAAc,KAAA,EAAmC;AACxD,EAAA,OAAA,CAAQ,KAAA,IAAS,IAAI,WAAA,EAAY;AACnC;AAEA,SAAS,KAAA,CAAM,WAAmB,WAAA,EAA6B;AAC7D,EAAA,IAAI,WAAA,IAAe,GAAG,OAAO,CAAA;AAC7B,EAAA,OAAO,MAAA,CAAA,CAAQ,SAAA,GAAY,WAAA,EAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpD;AAEA,SAAS,IAAI,MAAA,EAA0B;AACrC,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU,GAAA,GAAM,OAAO,CAAC,CAAA;AACrD;AAEA,SAAS,KAAK,MAAA,EAA0B;AACtC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAChC,EAAA,OAAO,MAAA,CAAA,CAAQ,IAAI,MAAM,CAAA,GAAI,OAAO,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AACxD;AAEA,SAAS,mBAAmB,KAAA,EAAoB;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,IAAU,OAAO,KAAA,CAAM,MAAA,KAAW,UAAU,OAAO,CAAA;AAC/D,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAM,EAAE,MAAA,CAAO,CAAC,GAAA,EAAa,KAAA,KAAe,OAAO,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA,IAAK,IAAI,CAAC,CAAA;AAC7G;AAEA,SAAS,kBACP,UAAA,EACA,QAAA,EACA,SACA,MAAA,EACA,KAAA,EACA,WACA,WAAA,EACgB;AAChB,EAAA,MAAM,iBAAA,GAAoB,cAAc,OAAO,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAA,CAAkB,QAAA,CAAS,eAAA,IAAmB,EAAC,EAAG,MAAA,CAAO,CAAC,MAAA,KAAW,iBAAA,CAAkB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAC,CAAC,CAAA;AAC5H,EAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA,IAAiB,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAS;AACnE,IAAA,MAAM,cAAc,KAAA,EAAO,WAAA,EAAa,KAAK,CAAC,KAAA,KAAU,MAAM,GAAA,KAAQ,IAAA,CAAK,OAAO,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,CAAS,cAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAChJ,IAAA,MAAM,YAAA,GAAe,KAAA,EAAO,cAAA,EAAgB,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAA,IAAO,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1L,IAAA,OAAO,OAAA,CAAQ,eAAe,YAAA,IAAgB,iBAAA,CAAkB,SAAS,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EACrG,CAAC,CAAA;AACD,EAAA,MAAM,eAAA,GAAA,CAAmB,QAAA,CAAS,gBAAA,IAAoB,IAAI,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,iBAAA,CAAkB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAC,CAAC,CAAA;AAC/H,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,KAAA,KAAU,SAAS,CAAA;AAClG,EAAA,MAAM,gBAAA,GAAA,CAAoB,QAAA,CAAS,iBAAA,IAAqB,IAAI,MAAA,CAAO,CAAC,QAAA,KAAa,SAAA,CAAU,KAAK,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,QAAQ,CAAC,CAAA;AACnI,EAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,CAAiB,MAAA,EAAQ,KAAK,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAC,CAAA;AAClF,EAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,YAAA,CAAa,MAAA,EAAA,CAAS,QAAA,CAAS,eAAA,EAAiB,MAAA,IAAU,CAAA,KAAM,QAAA,CAAS,aAAA,EAAe,UAAU,CAAA,CAAE,CAAA;AACzJ,EAAA,MAAM,uBAAuB,KAAA,CAAM,eAAA,CAAgB,QAAQ,QAAA,CAAS,gBAAA,EAAkB,UAAU,CAAC,CAAA;AACjG,EAAA,MAAM,kBAAkB,KAAA,CAAM,gBAAA,CAAiB,QAAQ,QAAA,CAAS,iBAAA,EAAmB,UAAU,CAAC,CAAA;AAC9F,EAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,MAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,KAAA,KAAU,OAAO,CAAA;AACxG,EAAA,MAAM,YAAA,GAAe,mBAAA,GAAsB,MAAA,CAAA,CAAQ,iBAAA,CAAkB,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAI,CAAA;AACvG,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,MAAA,GAAS,IAAA,CAAK,IAAI,QAAA,CAAS,iBAAA,EAAmB,MAAA,IAAU,CAAA,EAAG,CAAC,CAAC,IAAI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAChL,EAAA,MAAM,OAAA,GAAU,cAAA,IAAkB,GAAA,IAAO,oBAAA,IAAwB,GAAA;AAEjE,EAAA,OAAO;AAAA,IACL,IAAI,QAAA,CAAS,EAAA;AAAA,IACb,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,OAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,iBAAiB,MAAA,CAAA,CAAA,CAAS,eAAA,GAAkB,iBAAiB,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC1E,YAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAS,UAAA,CAAW,cAAA;AAAA,IACpB,cAAc,UAAA,CAAW,KAAA;AAAA,IACzB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,KAAA,EAAO,OAAA,GAAU,EAAC,GAAI;AAAA,MACpB,cAAA,GAAiB,MAAM,yBAAA,GAA4B,EAAA;AAAA,MACnD,oBAAA,GAAuB,MAAM,qCAAA,GAAwC,EAAA;AAAA,MACrE,eAAA,GAAkB,MAAM,4CAAA,GAA+C;AAAA,KACzE,CAAE,OAAO,OAAO;AAAA,GAClB;AACF;AAEA,SAAS,iBAAiB,WAAA,EAAmD;AAC3E,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,CAAY,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,EAAQ,WAAA,CAAY,MAAM,CAAA;AACnG,EAAA,MAAM,cAAA,GAAiB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,cAAc,CAAC,CAAA;AAC9E,EAAA,MAAM,oBAAA,GAAuB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAC1F,EAAA,MAAM,eAAA,GAAkB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,CAAC,CAAA;AAChF,EAAA,MAAM,YAAA,GAAe,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,YAAY,CAAC,CAAA;AAC1E,EAAA,MAAM,eAAA,GAAkB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,CAAC,CAAA;AAChF,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,CAAC,CAAA;AACpE,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,WAAA,IAAe,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,aAAA,GAAgB,eAAA;AACtB,EAAA,MAAM,SAAA,GAAY,WAAA,IAAe,CAAA,GAAI,CAAA,GAAI,MAAA,CAAA,CAAQ,CAAA,IAAK,CAAA,GAAI,WAAA,GAAc,GAAA,CAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC1F,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAA,CACX,IAAA,GAAO,WAAA,GACL,MAAO,eAAA,GACP,IAAA,GAAO,aAAA,GACP,GAAA,GAAO,YAAA,GACP,GAAA,GAAO,SAAA,EACV,OAAA,CAAQ,CAAC,CAAC,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,eAAsB,yBAAyB,MAAA,EAAyD;AACtG,EAAA,MAAM,UAA+B,EAAC;AAEtC,EAAA,KAAA,MAAW,aAAA,IAAiB,OAAO,QAAA,EAAU;AAC3C,IAAA,MAAM,UAAA,GAAa,uBAAuB,aAAa,CAAA;AACvD,IAAA,MAAM,cAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,QAAA,IAAY,OAAO,KAAA,EAAO;AACnC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,gBAAgB,UAAU,CAAA;AACtE,MAAA,MAAM,SAA4B,EAAC;AACnC,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,QAChC,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,QAAA,CAAS,QAAQ;AAAA,OACvD,EAAiB;AAAA,QACf,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,OACD,CAAA;AAED,MAAA,WAAA,CAAY,IAAA,CAAK,iBAAA;AAAA,QACf,UAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,CAAO,OAAA;AAAA,QACP,MAAA;AAAA,QACA,MAAA,CAAO,KAAA;AAAA,QACP,IAAA,CAAK,KAAI,GAAI,SAAA;AAAA,QACb,kBAAA,CAAmB,MAAA,CAAO,QAAA,EAAU,KAAK;AAAA,OAC1C,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,SAAS,UAAA,CAAW,cAAA;AAAA,MACpB,cAAc,UAAA,CAAW,KAAA;AAAA,MACzB,aAAa,UAAA,CAAW,WAAA;AAAA,MACxB,OAAA,EAAS,iBAAiB,WAAW,CAAA;AAAA,MACrC,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA;AACT;;;ACjLO,SAAS,gBAAgB,OAAA,EAA+C;AAC7E,EAAA,IAAI;AACF,IAAA,IAAI,OAAA,IAAW,MAAM,OAAO,EAAA;AAC5B,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,QAAA,IAAI,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,EAAU,OAAO,OAAO,CAAC,CAAA;AAChD,QAAA,IAAK,EAAU,IAAA,KAAS,MAAA,SAAe,MAAA,CAAQ,CAAA,CAAU,QAAQ,EAAE,CAAA;AACnE,QAAA,IAAK,CAAA,CAAU,SAAS,WAAA,EAAa;AACnC,UAAA,MAAM,MAAO,CAAA,CAAU,SAAA;AACvB,UAAA,MAAM,GAAA,GAAM,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,EAAK,GAAA;AACjD,UAAA,MAAM,MAAA,GAAS,OAAO,GAAA,KAAQ,QAAA,GAAW,SAAY,GAAA,EAAK,MAAA;AAC1D,UAAA,OAAO,CAAA,OAAA,EAAU,OAAO,SAAS,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,MAAM,KAAK,EAAE,CAAA,CAAA,CAAA;AAAA,QACvE;AAEA,QAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,MACzB,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAAA,IACd;AAEA,IAAA,OAAO,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB;AACF;AAGO,SAAS,sBAAsB,QAAA,EAAuD;AAC3F,EAAA,OAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,gBAAgB,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC1D;;;ACtBA,IAAM,GAAA,GAAO,WAAuE,OAAA,IAAY,SAAA;AAChG,IAAM,aAAa,IAAI,GAAA,CAAI,EAAE,SAAA,EAAW,MAAwB,CAAA;AAC/D,UAAA,CAAmB,KAAK,MAAA,GAAS,KAAA;AAElC,SAAS,YAAA,CAAa,SAA0B,KAAA,EAAwB;AACtE,EAAA,IAAI,OAAA,YAAmB,QAAQ,OAAO,OAAA;AACtC,EAAA,OAAO,IAAI,MAAA,CAAO,OAAA,EAAS,KAAA,IAAS,GAAG,CAAA;AACzC;AAEA,SAAS,WAAW,OAAA,EAAmC;AACrD,EAAA,OAAO,eAAA,CAAgB,OAAA,CAAQ,aAAA,EAAe,OAAA,IAAW,EAAE,CAAA;AAC7D;AAEA,SAAS,WAAW,OAAA,EAAmC;AACrD,EAAA,OAAO,qBAAA,CAAsB,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAC,CAAA;AACzE;AAcO,SAAS,UAAU,OAAA,EAA0C;AAClE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,OAAA,EAAS,QAAQ,KAAK,CAAA;AACzD,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,iBACJ,OAAA,CAAQ,cAAA,IAAkB,CAAA,0BAAA,EAA6B,KAAA,CAAM,UAAU,CAAA,CAAA;AACzE,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,OAAA;AACrD,EAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,KAAiB,IAAA;AAE9C,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,kBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,YAAA,GAAe,OAAA,GAAU,CAAC,OAAA;AACzC,MAAA,MAAM,WAAA,GAAc,UAAU,gBAAA,GAAmB,OAAA;AACjD,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,MAAA,EAAQ,UAAU,cAAA,GAAiB,MAAA;AAAA,QACnC,WAAA;AAAA,QACA,OAAA,EAAS,OAAA,GAAU,EAAE,OAAA,EAAS,KAAA,CAAM,QAAA,EAAS,EAAG,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,GAAE,GAAI;AAAA,OACtF;AAAA,IACF;AAAA,GACF;AACF;AAYA,SAAS,iBACP,MAAA,EAC6D;AAC7D,EAAA,IAAK,QAAyB,IAAA,EAAM;AAClC,IAAA,MAAM,KAAA,GAAQ,MAAA;AACd,IAAA,OAAO,CAAC,KAAA,KAAmB;AACzB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,CAAU,KAAK,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,OAAO,MAAA,CAAO,OAAA;AAAA,QACd,MAAA,EAAQ,MAAA,CAAO,OAAA,GACX,MAAA,GACA,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO;AAAA,OACtD;AAAA,IACF,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAA8B,UAAA,CAAW,OAAA,CAAQ,MAAqB,CAAA;AAC5E,EAAA,OAAO,CAAC,KAAA,KAAmB;AACzB,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAU,SAAA,CAAU,MAAA,EAA6C,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClF,MAAA,MAAMN,KAAAA,GAAQ,cAAA,IAAkB,GAAA,IAAO,OAAO,GAAA,CAAI,YAAA,KAAiB,QAAA,IAAY,GAAA,CAAI,YAAA,CAAa,MAAA,GAAS,CAAA,GACrG,GAAA,CAAI,eACF,GAAA,CAAY,QAAA;AAClB,MAAA,OAAO,GAAGA,KAAAA,IAAQ,GAAG,CAAA,CAAA,EAAI,GAAA,CAAI,WAAW,SAAS,CAAA,CAAA;AAAA,IACnD,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,CAAC,CAAC,OAAO,MAAA,EAAO;AAAA,EAClC,CAAA;AACF;AAEO,SAAS,eAAe,OAAA,EAA+C;AAC5E,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,OAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA;AAEjD,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,wBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,UAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,QACxB;AACA,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,WAAA;AAAA,UACA,MAAA,EAAQ,oCAAA;AAAA,UACR,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA;AAAE,SACrE;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,MACxB;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA;AAAA,QACA,MAAA,EAAQ,wCAAA;AAAA,QACR,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA;AAAO,OACnC;AAAA,IACF;AAAA,GACF;AACF;AAWA,SAAS,mBAAA,CAAoB,MAAc,SAAA,EAA6C;AACtF,EAAA,IAAI,CAAC,SAAA,EAAW,MAAA,EAAQ,OAAO,KAAA;AAC/B,EAAA,OAAO,SAAA,CAAU,KAAK,CAAC,OAAA,KAAY,aAAa,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACrE;AAEA,IAAM,WAAA,GAAc,0EAAA;AAEb,SAAS,gBAAA,CAAiB,OAAA,GAAoC,EAAC,EAAkB;AACtF,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,MAAA;AAE3C,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,yBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,QAAQ,IAAA,EAAK;AACjC,MAAA,IAAI,mBAAA,CAAoB,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChD,QAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,MACxB;AACA,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,QAAQ,IAAA,EAAK;AACpC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA;AAAA,QACA,MAAA,EAAQ,6CAAA;AAAA,QACR,SAAS,EAAE,OAAA,EAAS,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAE,OACzC;AAAA,IACF;AAAA,GACF;AACF;AAEA,IAAM,cAAA,GAAiBK,EAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,CAAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,wCAAwC,CAAA;AAAA,EACpE,WAAA,EAAaA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACzD,MAAA,EAAQA,EACL,MAAA,EAAO,CACP,IAAI,GAAA,EAAK,yCAAyC,EAClD,QAAA,EAAS;AAAA,EACZ,SAASA,CAAAA,CAAE,MAAA,CAAOA,EAAE,GAAA,EAAK,EAAE,QAAA;AAC7B,CAAC,CAAA;AAYD,SAAS,eAAe,OAAA,EAAmC;AACzD,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,WAAW,OAAO,CAAA;AACrC,EAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACV;AAAA,MACE,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAA,EAAe,MAAA;AAAA,MACf,UAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,QAAQ,OAAA,EAAS,IAAA;AAAA,UACvB,OAAA,EAAS,QAAQ,OAAA,EAAS;AAAA;AAC5B;AACF,KACF;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,iBAAiB,OAAA,EAA0C;AACzE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,cAAA;AACjD,EAAA,MAAM,mBAAA,GAAsB,QAAQ,mBAAA,IAAuB,OAAA;AAE3D,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,uBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,MAAA,MAAM,YAAA,GACJ,QAAQ,YAAA,IACR,8PAAA;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO;AAAA,QACxC,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,YAAA,EAAa;AAAA,UACxC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAA;AAAQ;AACnC,OACD,CAAA;AAED,MAAA,IAAI,SAAS,MAAA,CAAO,MAAA;AACpB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,eAAe,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,GAAS,eAAe,KAAA,CAAM,EAAE,OAAO,KAAA,EAAO,MAAA,EAAQ,iDAAiD,CAAA;AAAA,QACzG;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,KAAgB,MAAA,CAAO,QAAQ,OAAA,GAAU,mBAAA,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,QAAQ,MAAA,CAAO,KAAA;AAAA,QACf,WAAA;AAAA,QACA,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,IACF;AAAA,GACF;AACF;AA8BO,SAAS,mBAAmB,OAAA,EAA2C;AAC5E,EAAA,MAAM,mBAAA,GAAsB,QAAQ,kBAAA,IAAsB,OAAA;AAC1D,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,2BAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAC9C,MAAA,IAAI,OAAO,YAAY,SAAA,EAAW;AAChC,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,OAAA;AAAA,UACR,WAAA,EAAa,UAAU,OAAA,GAAU;AAAA,SACnC;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,QAAQ,OAAA,CAAQ,KAAA;AAAA,QAChB,WAAA,EAAa,OAAA,CAAQ,WAAA,KAAgB,OAAA,CAAQ,QAAQ,OAAA,GAAU,mBAAA,CAAA;AAAA,QAC/D,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,GACF;AACF;;;AC5QO,SAAS,oBAAA,CACd,SACA,OAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,UAAU,EAAE,OAAA,EAAS,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAI,CAAA;AAC5D,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,OAAA,EAAS,MAAM,KAAA,IAAS,iBAAA;AAAA,IAC1D,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,OAAA,EAAS,IAAA,EAAM,WAAA;AAAA,IAC7D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;AAMO,SAAS,mBAAA,CACd,QACA,OAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,eAAe,EAAE,MAAA,EAAQ,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAI,CAAA;AAChE,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,OAAA,EAAS,MAAM,KAAA,IAAS,uBAAA;AAAA,IAC1D,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,OAAA,EAAS,IAAA,EAAM,WAAA;AAAA,IAC7D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;AAMO,SAAS,oBAAoB,OAAA,EAAuD;AACzF,EAAA,MAAM,WAAA,GAAc,EAAE,WAAA,EAAa,MAAA,EAAiB,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAG;AAC7E,EAAA,MAAM,IAAA,GAAO,iBAAiB,WAAW,CAAA;AACzC,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,WAAA,CAAY,KAAA,IAAS,yBAAA;AAAA,IACvD,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,WAAA,CAAY,WAAA;AAAA,IAC1D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH","file":"index.mjs","sourcesContent":["import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage>;\n // Optional streaming method that yields incremental chunks or messages\n stream?(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[]): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[]) {\n if (model?.bindTools) return model.bindTools(tools);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n /** Normalize multimodal content parts for LangChain message format. */\n const normalizeContent = (content: any): any => {\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n return part;\n }\n return part;\n });\n }\n return content;\n };\n\n /** Convert a BaseChatMessage to a LangChain-compatible message object. */\n const toLC = (m: BaseChatMessage): any => {\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n return { role: m.role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage> => {\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages, options);\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n stream: async function* (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }) {\n if (typeof lcModel.stream !== 'function') return;\n const lcMessages = messages.map(toLC);\n const streamResult = lcModel.stream(lcMessages, options);\n const stream = typeof (streamResult as Promise<unknown>)?.then === \"function\" ? await streamResult : streamResult;\n for await (const chunk of stream) {\n yield chunk as any;\n }\n },\n bindTools: (tools: any[]) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n maxExecutionsPerRun,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n if (maxExecutionsPerRun !== undefined) {\n (toolRecord as any).maxExecutionsPerRun = maxExecutionsPerRun;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","import type { PlanningMode } from \"./types.js\";\n\nconst DEFAULT_TODO_LIST_PROMPT = `Planning tools are available when they materially improve execution.\n\nRules:\n1) Use \"manage_todo_list\" for multi-step work, delegation, recovery after a failed attempt, or when the user explicitly asks for a plan.\n2) Do NOT create a plan for direct Q&A, simple recall from existing context, or a single straightforward tool lookup unless the user asks for one.\n3) If a task is multi-step and no valid plan exists yet, create one before substantial execution.\n4) Use operation=\"write\" only to create or fully replace the entire plan. After a plan exists, default to operation=\"update\" for progress, evidence, status, owner changes, blockers, or reprioritization.\n5) When using operation=\"update\", send only the changed items. Do not resend unchanged plan items unless the whole plan structure is being rewritten.\n6) Include expectedVersion from the latest successful plan state whenever you update an existing plan. If you do not know the latest version, read the plan first.\n7) Keep exactly ONE item \"in-progress\" at a time.\n8) Update the plan whenever a step starts, completes, becomes blocked, fails, or the approach changes. Do not finish a multi-step task with stale plan state.\n9) If tool results materially change the task state, sync the plan before the final answer.\n10) Reuse prior tool results already present in the conversation before calling tools again.\n11) If an update fails because of a version mismatch, read the latest plan and retry instead of blindly rewriting it.\n12) Repeating full operation=\"write\" calls for the same plan is a mistake unless the plan structure itself changed.\n13) Keep the plan internal unless the user explicitly asks to see it.`;\n\nfunction buildPlanningBlock(todoListPrompt?: string) {\n const promptBody = todoListPrompt?.trim() || DEFAULT_TODO_LIST_PROMPT;\n if (promptBody.startsWith(\"<planning>\")) {\n return promptBody;\n }\n return `<planning>\\n${promptBody}\\n</planning>`;\n}\n\nexport function buildSystemPrompt(\n extra?: string,\n planning?: boolean | PlanningMode,\n name: string = \"Agent\",\n todoListPrompt?: string,\n) {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningMode = typeof planning === \"string\"\n ? planning\n : planning\n ? \"todo\"\n : \"off\";\n const planningBlock = planningMode !== \"off\"\n ? buildPlanningBlock(todoListPrompt)\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n // Approximate maximum context tokens the smart runtime should build for model calls\n maxContextTokens?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkOtlpConfig = {\n type: \"otlp\";\n endpoint: string;\n headers?: Record<string, string>;\n};\n\nexport type TracingMode = \"batched\" | \"streaming\";\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig\n | TraceSinkOtlpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n mode?: TracingMode;\n logData?: boolean;\n sink?: TraceSinkConfig;\n threadId?: string;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional override for the built-in todo list planning instructions.\n // Applied only when todo/planning guidance is enabled.\n todoListPrompt?: string;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\nexport type BuiltInRuntimeProfile = \"fast\" | \"balanced\" | \"deep\" | \"research\";\n\nexport type RuntimeProfile = BuiltInRuntimeProfile | \"custom\";\n\nexport type SummarizationMode = \"incremental\" | \"full_rewrite\";\n\nexport type ContextPolicy = \"raw\" | \"summary_only\" | \"hybrid\";\n\nexport type ToolResponseRetentionPolicy = \"keep_full\" | \"keep_structured\" | \"summarize_archive\" | \"drop\";\n\nexport type ToolResponseClassification = \"critical\" | \"informative\" | \"verbose\" | \"redundant\";\n\nexport type PlanningMode = \"off\" | \"todo\" | \"planner_executor\" | \"reasoning_then_tools\";\n\nexport type ReplanPolicy = \"never\" | \"on_failure\" | \"on_conflict\" | \"every_n_steps\";\n\nexport type DelegationMode = \"off\" | \"role_based\" | \"automatic\";\n\nexport type ChildContextPolicy = \"minimal\" | \"scoped\" | \"full\";\n\nexport type MemoryProviderKind = \"inMemory\" | \"redis\" | \"postgres\" | \"mongo\" | \"s3\";\n\nexport type MemoryScope = \"session\" | \"user\" | \"workspace\" | \"tenant\";\n\nexport type MemoryWritePolicy = \"manual\" | \"auto_important\" | \"always\";\n\nexport type MemoryReadPolicy = \"recent_only\" | \"semantic\" | \"hybrid\";\n\nexport type MemoryFact = {\n key: string;\n value: string;\n sourceTurn: number;\n confidence: number;\n ttl?: number | null;\n obsolete?: boolean;\n lastUpdatedAt?: string;\n scope?: MemoryScope;\n tags?: string[];\n};\n\nexport interface MemoryStore {\n get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]>;\n upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void>;\n markObsolete(scope: MemoryScope, keys: string[]): Promise<void>;\n semanticSearch?(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]>;\n}\n\nexport type SummaryFactItem = {\n key: string;\n value: string;\n confidence?: number;\n source?: string;\n};\n\nexport type StructuredSummary = {\n stable_facts: SummaryFactItem[];\n active_goals: string[];\n open_questions: string[];\n discarded_obsolete: string[];\n rawSummary?: string;\n};\n\nexport type SummaryIntegrityCheck = {\n passed: boolean;\n criticalFactLoss: boolean;\n obsoleteFactRevived: boolean;\n notes: string[];\n};\n\nexport type PlanStepRecord = {\n id: number;\n step: string;\n owner: \"agent\" | \"user\" | \"tool\" | string;\n exitCriteria: string;\n evidence?: string;\n status: \"not-started\" | \"in-progress\" | \"completed\" | \"blocked\";\n title?: string;\n description?: string;\n};\n\nexport type SmartAgentSummarizationConfig = {\n enable?: boolean;\n maxTokens?: number;\n summaryTriggerTokens?: number;\n summaryPromptMaxTokens?: number;\n summaryCompressionRatioTarget?: number;\n summaryMode?: SummarizationMode;\n promptTemplate?: string;\n toolFreeCall?: boolean;\n integrityCheck?: boolean;\n};\n\nexport type SmartAgentBudgetConfig = {\n systemReserveTokens?: number;\n goalsReserveTokens?: number;\n recentTurnsReserveTokens?: number;\n toolResponseReserveTokens?: number;\n};\n\nexport type SmartAgentContextConfig = {\n policy?: ContextPolicy;\n lastTurnsToKeep?: number;\n toolResponsePolicy?: ToolResponseRetentionPolicy;\n archiveLargeToolResponses?: boolean;\n retrieveArchivedToolResponseOnDemand?: boolean;\n budget?: SmartAgentBudgetConfig;\n};\n\nexport type SmartAgentPlanningConfig = {\n mode?: PlanningMode;\n replanPolicy?: ReplanPolicy;\n everyNSteps?: number;\n};\n\nexport type SmartAgentDelegationConfig = {\n mode?: DelegationMode;\n maxDelegationDepth?: number;\n maxChildCalls?: number;\n maxParallelChild?: number;\n childContextPolicy?: ChildContextPolicy;\n requireJsonOutputContract?: boolean;\n};\n\nexport type SmartAgentMemoryConfig = {\n provider?: MemoryProviderKind;\n store?: MemoryStore;\n scope?: MemoryScope;\n writePolicy?: MemoryWritePolicy;\n readPolicy?: MemoryReadPolicy;\n};\n\nexport type SmartAgentToolResponseConfig = {\n maxToolResponseChars?: number;\n maxToolResponseTokens?: number;\n defaultPolicy?: ToolResponseRetentionPolicy;\n largeResponsePolicy?: ToolResponseRetentionPolicy;\n toolResponseRetentionByTool?: Record<string, ToolResponseRetentionPolicy>;\n criticalTools?: string[];\n schemaValidation?: \"strict\" | \"warn\";\n retryOnSchemaError?: boolean;\n fallbackPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type SmartAgentWatchdogConfig = {\n enabled?: boolean;\n tokenDriftThreshold?: number;\n overToolingSpikeThreshold?: number;\n contextRotThreshold?: number;\n autoCompaction?: boolean;\n autoReplanOnFailure?: boolean;\n};\n\nexport type SmartAgentCustomProfileConfig = {\n extends?: BuiltInRuntimeProfile;\n limits?: AgentLimits;\n summarization?: SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n planning?: SmartAgentPlanningConfig;\n memory?: SmartAgentMemoryConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n watchdog?: SmartAgentWatchdogConfig;\n};\n\nexport type ProfileConfig = {\n limits: Required<AgentLimits>;\n summarization: Required<SmartAgentSummarizationConfig>;\n context: Required<SmartAgentContextConfig> & { budget: Required<SmartAgentBudgetConfig> };\n planning: Required<SmartAgentPlanningConfig>;\n memory: Required<Omit<SmartAgentMemoryConfig, \"store\">> & { store?: MemoryStore };\n delegation: Required<SmartAgentDelegationConfig>;\n toolResponses: Required<SmartAgentToolResponseConfig>;\n watchdog: Required<SmartAgentWatchdogConfig>;\n};\n\nexport type ResolvedSmartAgentConfig = ProfileConfig & {\n runtimeProfile: RuntimeProfile;\n baseProfile: BuiltInRuntimeProfile;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n runtimeProfile?: RuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n memory?: SmartAgentMemoryConfig;\n planning?: SmartAgentPlanningConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n watchdog?: SmartAgentWatchdogConfig;\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Optional override for the built-in todo list planning instructions.\n // Applied only when planning mode injects todo guidance.\n todoListPrompt?: string;\n // Enable internal planning workflow (todo list tool + prompt hints)\n /** @deprecated Use planning.mode=\"todo\" */\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n todoListPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n runtimeProfile?: RuntimeProfile;\n smart?: ResolvedSmartAgentConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string }\n | { type: \"otlp\"; endpoint: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n traceId?: string;\n rootSpanId?: string;\n threadId?: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> }\n | { type: \"otlp\"; endpoint: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: TracingMode;\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n traceId?: string;\n rootSpanId?: string;\n currentIterationSpanId?: string;\n threadId?: string;\n sessionStarted?: boolean;\n agentInfo?: { name?: string; version?: string; model?: string; provider?: string };\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n summaryRecords?: Array<StructuredSummary & { integrity?: SummaryIntegrityCheck; createdAt?: string }>;\n memoryFacts?: MemoryFact[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n plan?: { version: number; steps: PlanStepRecord[]; lastUpdated?: string; adherenceScore?: number } | null;\n planVersion?: number;\n watchdog?: {\n tokenDrift?: number;\n contextRotScore?: number;\n overToolingRate?: number;\n compactions?: number;\n lastAction?: string;\n };\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\" | \"update\";\n todoList?: PlanStepRecord[];\n version?: number;\n adherenceScore?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n /** Number of messages that were compressed/summarized */\n messagesCompressed?: number;\n /** Input tokens used for summarization prompt (from model response if available, otherwise estimated) */\n inputTokens?: number;\n /** Output tokens from summarization response (from model response if available, otherwise estimated) */\n outputTokens?: number;\n /** Cached input tokens from model response (prompt cache hit) */\n cachedInputTokens?: number;\n /** Total tokens (input + output) */\n totalTokens?: number;\n /** Duration of the summarization call in milliseconds */\n durationMs?: number;\n /** Previous summary content (if incremental summarization) */\n previousSummary?: string;\n /** Total token count before summarization */\n tokenCountBefore?: number;\n /** Total token count after summarization */\n tokenCountAfter?: number;\n /** @deprecated Use messagesCompressed instead */\n archivedCount?: number;\n structuredSummary?: StructuredSummary;\n integrity?: SummaryIntegrityCheck;\n};\n\nexport type EvalFamily = \"recall\" | \"state_continuity\" | \"summarization_fidelity\" | \"context_rollover\" | \"query_focused_summary\";\n\nexport type EvalCase = {\n id: string;\n family: EvalFamily;\n prompt: string;\n expectedPhrases?: string[];\n forbiddenPhrases?: string[];\n expectedFacts?: Array<{ key: string; value: string }>;\n expectedToolNames?: string[];\n};\n\nexport type EvalProfileDescriptor = {\n label: string;\n runtimeProfile: RuntimeProfile;\n baseProfile?: BuiltInRuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n};\n\nexport type EvalProfileTarget = RuntimeProfile | EvalProfileDescriptor;\n\nexport type EvalCaseResult = {\n id: string;\n family: EvalFamily;\n success: boolean;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens?: number;\n profile: RuntimeProfile;\n profileLabel?: string;\n baseProfile?: BuiltInRuntimeProfile;\n notes: string[];\n};\n\nexport type EvalHarnessMetrics = {\n taskSuccess: number;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens: number;\n score: number;\n};\n\nexport type EvalHarnessResult = {\n profile: RuntimeProfile;\n profileLabel: string;\n baseProfile?: BuiltInRuntimeProfile;\n metrics: EvalHarnessMetrics;\n cases: EvalCaseResult[];\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type ProgressEvent = {\n type: \"progress\";\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamEvent = {\n type: \"stream\";\n text: string;\n isFinal?: boolean;\n};\n\nexport type CancelledEvent = {\n type: \"cancelled\";\n stage?: string;\n reason?: string;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SmartAgentEvent =\n | ToolCallEvent\n | ToolApprovalEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent\n | ProgressEvent\n | StreamEvent\n | CancelledEvent;\n\nexport type CancellationTokenLike = {\n readonly isCancellationRequested: boolean;\n onCancellationRequested?: (listener: () => void) => { dispose(): void } | void;\n};\n\nexport type ProgressUpdate = {\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamChunk = {\n text: string;\n isFinal?: boolean;\n};\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Optional per-call progress hook\n onProgress?: (progress: ProgressUpdate) => void;\n // Optional per-call streaming hook\n onStream?: (chunk: StreamChunk) => void;\n // Enable streaming if supported by model\n stream?: boolean;\n // Cancellation control\n cancellationToken?: CancellationTokenLike | AbortSignal;\n // Optional timeout for the full invoke (ms)\n timeoutMs?: number;\n // Optional per-call limits override\n limits?: Partial<AgentLimits>;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n // OpenAI format: prompt_tokens_details / completion_tokens_details\n // LangChain format: input_token_details / output_token_details\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails \n || raw.input_token_details || raw.inputTokenDetails || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails\n || raw.output_token_details || raw.outputTokenDetails || {};\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(\n promptDetailsSrc.cached_tokens || promptDetailsSrc.cached || promptDetailsSrc.cache_read\n || raw.cached_input_tokens || raw.cached_prompt_tokens\n || raw.cache_read_input_tokens\n ),\n audio_tokens: safe(promptDetailsSrc.audio_tokens || promptDetailsSrc.audio),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(completionDetailsSrc.reasoning_tokens),\n audio_tokens: safe(completionDetailsSrc.audio_tokens),\n accepted_prediction_tokens: safe(completionDetailsSrc.accepted_prediction_tokens),\n rejected_prediction_tokens: safe(completionDetailsSrc.rejected_prediction_tokens),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport crypto from \"node:crypto\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n TracingMode,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://console.cognipeer.com/api/client/v1/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\n\n/**\n * Create an OTLP/HTTP JSON sink that exports traces in OpenTelemetry format.\n * @param endpoint OTLP endpoint URL (e.g. \"https://console.cognipeer.com/api/client/v1/traces\")\n * @param headers Optional headers (e.g. { Authorization: \"Bearer ...\" })\n */\nexport function otlpSink(endpoint: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"otlp\", endpoint, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\n// Metadata extraction paths - defined once for DRY principle\nconst METADATA_PATHS = {\n model: [\n \"model\", \"options.model\", \"params.model\", \"config.model\", \n \"configuration.model\", \"metadata.model\", \"lc_kwargs.model\",\n \"metadata.modelName\", \"modelName\", \"lc_alias\", \"model_id\", \"id\",\n \"_model\", \"_modelName\", \"__model\", \"_modelId\", \"_llmType\"\n ],\n provider: [\n \"provider\", \"options.provider\", \"params.provider\", \"config.provider\",\n \"configuration.provider\", \"metadata.provider\", \"lc_kwargs.provider\"\n ],\n};\n\n/** Safely extract nested object value using dot notation path */\nfunction getNestedValue(obj: any, path: string): any {\n if (!obj || typeof path !== \"string\") return undefined;\n return path.split(\".\").reduce((current, key) => current?.[key], obj);\n}\n\n/** Unified metadata extraction - eliminates code duplication between model/provider extraction */\nfunction extractMetadata(model: any, paths: string[]): string | undefined {\n if (!model) return undefined;\n \n // Direct extraction from model\n for (const path of paths) {\n const value = getNestedValue(model, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n \n // Try LangChain wrapper (_lc property)\n const maybeLc = model?._lc;\n if (maybeLc) {\n for (const path of paths) {\n const value = getNestedValue(maybeLc, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Try client/api/service properties\n const maybeClient = model?.client || model?.api || model?.service;\n if (maybeClient) {\n for (const path of paths) {\n const value = getNestedValue(maybeClient, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Constructor name as last resort (filter out generic types)\n const constructorName = model?.constructor?.name;\n if (constructorName && ![\"Object\", \"Function\"].includes(constructorName)) {\n return constructorName;\n }\n \n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.model);\n}\n\nexport function getProviderName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.provider);\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific metadata paths for inference from history\n const messagePaths = [\n \"metadata.model\", \"metadata.modelName\", \"response_metadata.model\",\n \"response_metadata.modelName\", \"usage_metadata.model\", \"model\", \"modelName\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific paths for provider inference\n const messagePaths = [\n \"metadata.provider\", \"response_metadata.provider\", \"usage_metadata.provider\", \"provider\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n const mode: TracingMode = config?.mode === \"streaming\" ? \"streaming\" : \"batched\";\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode,\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n case \"otlp\": {\n const endpoint = typeof candidate.endpoint === \"string\" ? candidate.endpoint.trim() : \"\";\n if (!endpoint) {\n throw new Error(\"otlp sink requires a non-empty endpoint\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"otlp\", endpoint, headers } : { type: \"otlp\", endpoint };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n case \"otlp\":\n return { type: \"otlp\", endpoint: sink.endpoint };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n const errorMsg = `${statusLine}${bodyPreview}`;\n \n // DEBUG error logging\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Error posting to\", url, \":\", errorMsg);\n }\n \n throw new Error(errorMsg);\n }\n } catch (err) {\n // Rethrow with error info\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a streaming session start to the remote endpoint\n */\nasync function postStreamingSessionStart(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n startedAt: string;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config?: TraceSessionConfigSnapshot;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/start`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session start:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a single event to the streaming endpoint\n */\nasync function postStreamingEvent(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n sessionId: string,\n event: TraceEventRecord\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${sessionId}/events`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify({ event }),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post streaming event:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST session end to the streaming endpoint\n */\nasync function postStreamingSessionEnd(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n endedAt: string;\n durationMs: number;\n status: TraceSessionStatus;\n summary: TraceSessionSummary;\n errors: Array<{ eventId: string; message: string; stack?: string; type?: string; timestamp?: string }>;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/end`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session end:\", errMsg);\n }\n throw err;\n }\n}\n\n// ─── OTLP/HTTP JSON Export ──────────────────────────────────────────────────\n\n/** Nanosecond timestamp from ISO date string */\nfunction isoToUnixNano(iso: string): string {\n const ms = new Date(iso).getTime();\n // OTel uses fixed-point string nanoseconds (BigInt not needed for JSON)\n return `${ms}000000`;\n}\n\n/** Map agent/event status to OTel StatusCode: 0=UNSET, 1=OK, 2=ERROR */\nfunction toOtlpStatusCode(status: string): number {\n if (status === \"error\") return 2;\n if (status === \"success\" || status === \"completed\") return 1;\n return 0; // UNSET for in_progress, skipped, retry, etc.\n}\n\n/** Map event type to OTel SpanKind: 0 UNSPECIFIED, 1 INTERNAL, 2 SERVER, 3 CLIENT */\nfunction toOtlpSpanKind(type: string): number {\n switch (type) {\n case \"ai_call\":\n return 3; // CLIENT — outgoing LLM request\n case \"tool_call\":\n return 1; // INTERNAL\n case \"agent_iteration\":\n return 1; // INTERNAL\n default:\n return 1; // INTERNAL\n }\n}\n\ntype OtlpKeyValue = { key: string; value: { stringValue?: string; intValue?: string; doubleValue?: number; boolValue?: boolean } };\n\nfunction stringAttr(key: string, val: string | undefined): OtlpKeyValue | null {\n return val != null ? { key, value: { stringValue: val } } : null;\n}\n\nfunction intAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { intValue: String(val) } } : null;\n}\n\nfunction doubleAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { doubleValue: val } } : null;\n}\n\n/** Convert a single TraceEventRecord into an OTLP Span object. */\nfunction eventToOtlpSpan(event: TraceEventRecord): Record<string, unknown> {\n const startNano = isoToUnixNano(event.timestamp);\n const endNano = event.durationMs != null\n ? `${new Date(new Date(event.timestamp).getTime() + event.durationMs).getTime()}000000`\n : startNano;\n\n const attrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.event.type\", event.type),\n stringAttr(\"cognipeer.event.label\", event.label),\n intAttr(\"cognipeer.event.sequence\", event.sequence),\n stringAttr(\"cognipeer.actor.scope\", event.actor?.scope),\n stringAttr(\"cognipeer.actor.name\", event.actor?.name),\n stringAttr(\"cognipeer.actor.role\", event.actor?.role),\n stringAttr(\"cognipeer.model\", event.model),\n stringAttr(\"cognipeer.provider\", event.provider),\n intAttr(\"cognipeer.tokens.input\", event.inputTokens),\n intAttr(\"cognipeer.tokens.output\", event.outputTokens),\n intAttr(\"cognipeer.tokens.total\", event.totalTokens),\n intAttr(\"cognipeer.tokens.cached_input\", event.cachedInputTokens),\n intAttr(\"cognipeer.bytes.request\", event.requestBytes),\n intAttr(\"cognipeer.bytes.response\", event.responseBytes),\n stringAttr(\"cognipeer.tool.execution_id\", event.toolExecutionId),\n stringAttr(\"cognipeer.retry_of\", event.retryOf),\n stringAttr(\"cognipeer.event.id\", event.id),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Add sections as a JSON string attribute if present\n if (event.data?.sections && event.data.sections.length > 0) {\n try {\n attrs.push({ key: \"cognipeer.sections\", value: { stringValue: JSON.stringify(event.data.sections) } });\n } catch { /* skip on serialization failures */ }\n }\n\n const span: Record<string, unknown> = {\n traceId: event.traceId,\n spanId: event.spanId,\n parentSpanId: event.parentSpanId || \"\",\n name: event.label || event.type,\n kind: toOtlpSpanKind(event.type),\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: attrs,\n status: {\n code: toOtlpStatusCode(event.status),\n ...(event.status === \"error\" && event.error?.message ? { message: event.error.message } : {}),\n },\n };\n\n // Error events\n if (event.error) {\n span.events = [{\n timeUnixNano: startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: event.error.message } },\n ...(event.error.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: event.error.stack } }] : []),\n ],\n }];\n }\n\n return span;\n}\n\n/**\n * Convert a complete TraceSessionFile into an OTLP ExportTraceServiceRequest (JSON).\n * Produces a root span for the session and child spans for each event.\n */\nexport function traceSessionToOtlp(session: TraceSessionFile): Record<string, unknown> {\n const traceId = session.traceId || generateTraceId();\n const rootSpanId = session.rootSpanId || generateSpanId();\n const startNano = isoToUnixNano(session.startedAt);\n const endNano = session.endedAt ? isoToUnixNano(session.endedAt) : startNano;\n\n // Resource attributes\n const resourceAttrs: OtlpKeyValue[] = [\n { key: \"service.name\", value: { stringValue: session.agent?.name || \"cognipeer-agent\" } },\n stringAttr(\"service.version\", session.agent?.version),\n stringAttr(\"cognipeer.session.id\", session.sessionId),\n stringAttr(\"cognipeer.thread.id\", session.threadId),\n stringAttr(\"cognipeer.agent.model\", session.agent?.model),\n stringAttr(\"cognipeer.agent.provider\", session.agent?.provider),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Root span — represents the entire agent session\n const rootAttrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.session.status\", session.status),\n doubleAttr(\"cognipeer.session.duration_ms\", session.durationMs),\n intAttr(\"cognipeer.session.total_input_tokens\", session.summary.totalInputTokens),\n intAttr(\"cognipeer.session.total_output_tokens\", session.summary.totalOutputTokens),\n intAttr(\"cognipeer.session.total_cached_input_tokens\", session.summary.totalCachedInputTokens),\n intAttr(\"cognipeer.session.total_bytes_in\", session.summary.totalBytesIn),\n intAttr(\"cognipeer.session.total_bytes_out\", session.summary.totalBytesOut),\n intAttr(\"cognipeer.session.event_count\", session.events.length),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Include event count breakdown\n if (session.summary.eventCounts) {\n for (const [key, count] of Object.entries(session.summary.eventCounts)) {\n rootAttrs.push({ key: `cognipeer.session.event_count.${key}`, value: { intValue: String(count) } });\n }\n }\n\n const rootSpan: Record<string, unknown> = {\n traceId,\n spanId: rootSpanId,\n parentSpanId: \"\",\n name: `agent_session: ${session.agent?.name || \"agent\"}`,\n kind: 1, // INTERNAL\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: rootAttrs,\n status: {\n code: toOtlpStatusCode(session.status),\n ...(session.status === \"error\" && session.errors.length > 0\n ? { message: session.errors.map((e) => e.message).join(\"; \") }\n : {}),\n },\n };\n\n // Error events on root span\n if (session.errors.length > 0) {\n rootSpan.events = session.errors.map((err) => ({\n timeUnixNano: err.timestamp ? isoToUnixNano(err.timestamp) : startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: err.message } },\n ...(err.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: err.stack } }] : []),\n ...(err.type ? [{ key: \"exception.type\", value: { stringValue: err.type } }] : []),\n ],\n }));\n }\n\n // Child spans for each event — inherit traceId from session\n const childSpans = session.events.map((event) => {\n const span = eventToOtlpSpan({\n ...event,\n traceId: event.traceId || traceId,\n spanId: event.spanId || generateSpanId(),\n parentSpanId: event.parentSpanId || rootSpanId,\n });\n return span;\n });\n\n return {\n resourceSpans: [{\n resource: { attributes: resourceAttrs },\n scopeSpans: [{\n scope: {\n name: \"cognipeer-agent-sdk\",\n version: \"1.0.0\",\n },\n spans: [rootSpan, ...childSpans],\n }],\n }],\n };\n}\n\n/**\n * POST an OTLP ExportTraceServiceRequest (JSON) to the given endpoint.\n */\nasync function postOtlpTraces(\n endpoint: string,\n headers: Record<string, string> | undefined,\n payload: Record<string, unknown>\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"OTLP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n ...(headers || {}),\n };\n\n try {\n const response = await fetchFn(endpoint, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch { /* ignore */ }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] OTLP export failed:\", errMsg);\n }\n throw err;\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\n/** Generate a W3C-compatible trace ID (32 hex chars / 128-bit). */\nexport function generateTraceId(): string {\n return crypto.randomBytes(16).toString(\"hex\");\n}\n\n/** Generate an OTel span ID (16 hex chars / 64-bit). */\nexport function generateSpanId(): string {\n return crypto.randomBytes(8).toString(\"hex\");\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const traceId = generateTraceId();\n const rootSpanId = generateSpanId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n traceId,\n rootSpanId,\n threadId: opts.tracing?.threadId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n sessionStarted: false,\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\n/**\n * Start a streaming trace session. Should be called before recording events in streaming mode.\n * This sends the session start to the remote endpoint immediately.\n */\nexport async function startStreamingSession(\n session: TraceSessionRuntime | undefined,\n agentRuntime?: AgentRuntimeConfig\n): Promise<void> {\n if (!session) return;\n if (session.resolvedConfig.mode !== \"streaming\") return;\n if (session.sessionStarted) return;\n\n const sink = session.resolvedConfig.sink;\n \n // Build agent info\n const agentInfo = agentRuntime ? {\n name: agentRuntime.name || \"unknown-agent\",\n version: agentRuntime.version,\n model: getModelName(agentRuntime.model) || \"unknown-model\",\n provider: getProviderName(agentRuntime.model),\n } : undefined;\n \n session.agentInfo = agentInfo;\n \n const configSnapshot = buildConfigSnapshot(session);\n const startedAtIso = new Date(session.startedAt).toISOString();\n \n const payload = {\n sessionId: session.sessionId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n agent: agentInfo,\n config: configSnapshot,\n };\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n await postStreamingSessionStart(sink.url, headers, payload);\n session.sessionStarted = true;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"session_start\",\n message,\n type: \"sink\",\n timestamp: startedAtIso,\n });\n // Don't throw - allow session to continue in degraded mode\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to start streaming session, falling back to batched:\", message);\n }\n }\n } else if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n // For custom sinks in streaming mode, we mark as started and let events flow through\n session.sessionStarted = true;\n } else if (sink.type === \"file\") {\n // File sink in streaming mode - just mark as started, events will be written on finalize\n session.sessionStarted = true;\n }\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n /** Explicit parent span ID. Falls back to session.currentIterationSpanId when omitted. */\n parentSpanId?: string;\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n /** Pre-built sections to use instead of auto-converting messageList */\n sections?: TraceDataSection[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n // Use pre-built sections if provided, otherwise auto-convert from messageList\n if (event.sections && event.sections.length > 0) {\n sections = ensureUniqueSections(id, event.sections);\n } else {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n\n // Span hierarchy: traceId from session, unique spanId per event,\n // parentSpanId from explicit param or current iteration span\n const spanId = generateSpanId();\n const parentSpanId = event.parentSpanId || session.currentIterationSpanId || session.rootSpanId;\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n traceId: session.traceId,\n spanId,\n parentSpanId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n\n // In streaming mode, send event immediately to HTTP sinks\n if (session.resolvedConfig.mode === \"streaming\" && session.sessionStarted) {\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n // Fire and forget - don't block on event sending\n postStreamingEvent(sink.url, headers, session.sessionId, record).catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to send streaming event:\", errMsg);\n }\n session.errors.push({\n eventId: record.id,\n message: errMsg,\n type: \"sink\",\n timestamp: timestampIso,\n });\n });\n }\n }\n\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n // Build agent info with safe defaults - single source of truth\n const buildAgentInfo = (runtime: AgentRuntimeConfig | undefined) => {\n if (!runtime) return undefined;\n return {\n name: runtime.name || \"unknown-agent\",\n version: runtime.version,\n model: getModelName(runtime.model) || \"unknown-model\",\n provider: getProviderName(runtime.model),\n };\n };\n\n const agentInfo = buildAgentInfo(params.agentRuntime);\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n traceId: session.traceId,\n rootSpanId: session.rootSpanId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo || session.agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n const isStreamingMode = session.resolvedConfig.mode === \"streaming\";\n\n if (sink.type === \"otlp\") {\n // OTLP/HTTP JSON export — convert session to ExportTraceServiceRequest and POST\n try {\n const otlpPayload = traceSessionToOtlp(payloadForSink);\n await postOtlpTraces(sink.endpoint, sink.headers, otlpPayload);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n } else if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n if (isStreamingMode && session.sessionStarted) {\n // In streaming mode, send session end instead of full session\n await postStreamingSessionEnd(sink.url, headers, {\n sessionId: session.sessionId,\n endedAt: endedAtIso,\n durationMs,\n status: initialStatus,\n summary: session.summary,\n errors: session.errors,\n });\n } else {\n // In batched mode (or if streaming never started), send full session\n await postTraceSession(sink.url, headers, payloadForSink);\n }\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n \n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hadSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && (sinkFailed || hadSinkErrors)) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n \n // Phase 1: Build a set of all valid tool_call IDs from assistant messages\n const validToolCallIds = new Set<string>();\n for (const m of msgs) {\n if (m?.role === 'assistant') {\n for (const tu of extractToolUses(m)) {\n if (tu.id) validToolCallIds.add(tu.id);\n }\n }\n }\n \n // Phase 2: Filter out orphan tool messages (those without a matching assistant tool_call)\n const filteredMsgs = msgs.filter((m) => {\n if (m?.role === 'tool') {\n const toolCallId = m.tool_call_id;\n if (!toolCallId || !validToolCallIds.has(toolCallId)) {\n // Orphan tool message - remove it\n return false;\n }\n }\n return true;\n });\n \n // Phase 3: Ensure tool messages immediately follow their corresponding assistant message\n // OpenAI requires: assistant(tool_calls) -> tool(tool_call_id) -> tool(tool_call_id) -> ...\n for (let i = 0; i < filteredMsgs.length; i++) {\n const m = filteredMsgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = filteredMsgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for tool_result adjacency.\",\n }));\n filteredMsgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return filteredMsgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch {\n // Debug tool pairing failed silently\n }\n };\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: any) => void) | undefined;\n const onStream = (state.ctx as any)?.__onStream as ((chunk: { text: string; isFinal?: boolean }) => void) | undefined;\n const streamingEnabled = Boolean((state.ctx as any)?.__streaming);\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n\n const extractText = (chunk: any) => {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n if (typeof chunk?.delta?.content === \"string\") return chunk.delta.content;\n return \"\";\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n if (streamingEnabled && typeof (modelWithTools as any).stream === \"function\") {\n let streamedText = \"\";\n let streamedMessage: any | undefined;\n for await (const chunk of (modelWithTools as any).stream(normalizedMessages, { signal: abortSignal, cancellationToken })) {\n if ((cancellationToken && cancellationToken.isCancellationRequested) || abortSignal?.aborted) {\n break;\n }\n if (chunk && typeof chunk === \"object\" && (chunk as any).role) {\n streamedMessage = chunk;\n }\n const text = extractText(chunk);\n if (text) {\n streamedText += text;\n onStream?.({ text });\n onEvent?.({ type: \"stream\", text });\n }\n }\n if (streamedMessage) {\n response = { ...streamedMessage };\n if (response.content == null || response.content === \"\") {\n response.content = streamedText;\n }\n } else {\n response = { role: \"assistant\", content: streamedText } as any;\n }\n } else {\n response = await modelWithTools.invoke(normalizedMessages, { signal: abortSignal, cancellationToken });\n }\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage // LangChain camelCase\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type {\n AgentLimits,\n BuiltInRuntimeProfile,\n MemoryStore,\n ProfileConfig,\n ResolvedSmartAgentConfig,\n RuntimeProfile,\n SmartAgentOptions,\n} from \"../types.js\";\n\nconst DEFAULT_CRITICAL_TOOLS = [\"response\", \"manage_todo_list\", \"get_tool_response\"];\n\nexport const DEFAULT_PROFILE_CONFIGS: Record<BuiltInRuntimeProfile, ProfileConfig> = {\n fast: {\n limits: { maxToolCalls: 4, maxParallelTools: 1, maxContextTokens: 12000 },\n summarization: {\n enable: true,\n maxTokens: 12000,\n summaryTriggerTokens: 9000,\n summaryPromptMaxTokens: 5000,\n summaryCompressionRatioTarget: 0.4,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 6,\n toolResponsePolicy: \"keep_structured\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1000,\n goalsReserveTokens: 900,\n recentTurnsReserveTokens: 3200,\n toolResponseReserveTokens: 1800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"recent_only\",\n },\n delegation: {\n mode: \"off\",\n maxDelegationDepth: 1,\n maxChildCalls: 2,\n maxParallelChild: 1,\n childContextPolicy: \"minimal\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 2400,\n maxToolResponseTokens: 800,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 1200,\n overToolingSpikeThreshold: 0.7,\n contextRotThreshold: 0.65,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n balanced: {\n limits: { maxToolCalls: 8, maxParallelTools: 2, maxContextTokens: 24000 },\n summarization: {\n enable: true,\n maxTokens: 24000,\n summaryTriggerTokens: 17000,\n summaryPromptMaxTokens: 7000,\n summaryCompressionRatioTarget: 0.35,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 8,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1200,\n goalsReserveTokens: 1200,\n recentTurnsReserveTokens: 5200,\n toolResponseReserveTokens: 2800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 4,\n maxParallelChild: 2,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 3600,\n maxToolResponseTokens: 1200,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 1800,\n overToolingSpikeThreshold: 0.6,\n contextRotThreshold: 0.55,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n deep: {\n limits: { maxToolCalls: 14, maxParallelTools: 3, maxContextTokens: 42000 },\n summarization: {\n enable: true,\n maxTokens: 42000,\n summaryTriggerTokens: 30000,\n summaryPromptMaxTokens: 9000,\n summaryCompressionRatioTarget: 0.3,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 12,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1400,\n goalsReserveTokens: 1600,\n recentTurnsReserveTokens: 7000,\n toolResponseReserveTokens: 3600,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"workspace\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 3,\n maxChildCalls: 6,\n maxParallelChild: 2,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 5400,\n maxToolResponseTokens: 1800,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 2200,\n overToolingSpikeThreshold: 0.55,\n contextRotThreshold: 0.5,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n research: {\n limits: { maxToolCalls: 20, maxParallelTools: 4, maxContextTokens: 56000 },\n summarization: {\n enable: true,\n maxTokens: 56000,\n summaryTriggerTokens: 42000,\n summaryPromptMaxTokens: 10000,\n summaryCompressionRatioTarget: 0.28,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 20,\n toolResponsePolicy: \"summarize_archive\",\n archiveLargeToolResponses: true,\n retrieveArchivedToolResponseOnDemand: true,\n budget: {\n systemReserveTokens: 1600,\n goalsReserveTokens: 1800,\n recentTurnsReserveTokens: 9000,\n toolResponseReserveTokens: 4800,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"workspace\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"automatic\",\n maxDelegationDepth: 4,\n maxChildCalls: 8,\n maxParallelChild: 3,\n childContextPolicy: \"full\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 7200,\n maxToolResponseTokens: 2200,\n defaultPolicy: \"keep_structured\",\n largeResponsePolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n retryOnSchemaError: true,\n fallbackPolicy: \"keep_structured\",\n },\n watchdog: {\n enabled: true,\n tokenDriftThreshold: 2600,\n overToolingSpikeThreshold: 0.5,\n contextRotThreshold: 0.45,\n autoCompaction: true,\n autoReplanOnFailure: true,\n },\n },\n};\n\nfunction mergeLimits(base: Required<AgentLimits>, override?: AgentLimits): Required<AgentLimits> {\n return {\n maxToolCalls: override?.maxToolCalls ?? base.maxToolCalls,\n maxParallelTools: override?.maxParallelTools ?? base.maxParallelTools,\n maxContextTokens: override?.maxContextTokens ?? base.maxContextTokens,\n };\n}\n\nfunction resolveBaseProfile(opts: SmartAgentOptions, runtimeProfile: RuntimeProfile): BuiltInRuntimeProfile {\n if (opts.customProfile?.extends) return opts.customProfile.extends;\n if (runtimeProfile !== \"custom\") return runtimeProfile;\n return \"balanced\";\n}\n\nexport function normalizeSmartAgentOptions(opts: SmartAgentOptions): ResolvedSmartAgentConfig {\n const runtimeProfile = opts.runtimeProfile ?? (opts.customProfile ? \"custom\" : \"balanced\");\n const baseProfile = resolveBaseProfile(opts, runtimeProfile);\n const preset = DEFAULT_PROFILE_CONFIGS[baseProfile];\n const customProfile = opts.customProfile || {};\n const useTodoList = opts.useTodoList === true;\n const summarizationDisabled = opts.summarization === false;\n const summarizationOverride = typeof opts.summarization === \"object\" ? opts.summarization : {};\n const planningMode = opts.planning?.mode ?? customProfile.planning?.mode ?? (useTodoList ? \"todo\" : preset.planning.mode);\n const memoryStore = (opts.memory?.store ?? customProfile.memory?.store) as MemoryStore | undefined;\n\n return {\n runtimeProfile,\n baseProfile,\n limits: mergeLimits(mergeLimits(preset.limits, customProfile.limits), opts.limits),\n summarization: {\n ...preset.summarization,\n ...(customProfile.summarization || {}),\n ...summarizationOverride,\n enable: summarizationDisabled ? false : (summarizationOverride.enable ?? customProfile.summarization?.enable ?? preset.summarization.enable),\n maxTokens: summarizationOverride.maxTokens ?? opts.limits?.maxContextTokens ?? customProfile.summarization?.maxTokens ?? preset.summarization.maxTokens,\n summaryTriggerTokens:\n summarizationOverride.summaryTriggerTokens\n ?? summarizationOverride.maxTokens\n ?? opts.limits?.maxContextTokens\n ?? customProfile.summarization?.summaryTriggerTokens\n ?? customProfile.summarization?.maxTokens\n ?? preset.summarization.summaryTriggerTokens,\n promptTemplate: summarizationOverride.promptTemplate ?? customProfile.summarization?.promptTemplate ?? preset.summarization.promptTemplate,\n },\n context: {\n ...preset.context,\n ...(customProfile.context || {}),\n ...(opts.context || {}),\n budget: {\n ...preset.context.budget,\n ...((customProfile.context?.budget || {})),\n ...((opts.context?.budget || {})),\n },\n toolResponsePolicy: opts.context?.toolResponsePolicy ?? customProfile.context?.toolResponsePolicy ?? preset.context.toolResponsePolicy,\n },\n planning: {\n ...preset.planning,\n ...(customProfile.planning || {}),\n ...(opts.planning || {}),\n mode: planningMode,\n },\n memory: {\n ...preset.memory,\n ...(customProfile.memory || {}),\n ...(opts.memory || {}),\n store: memoryStore,\n },\n delegation: {\n ...preset.delegation,\n ...(customProfile.delegation || {}),\n ...(opts.delegation || {}),\n },\n toolResponses: {\n ...preset.toolResponses,\n ...(customProfile.toolResponses || {}),\n ...(opts.toolResponses || {}),\n toolResponseRetentionByTool: {\n ...preset.toolResponses.toolResponseRetentionByTool,\n ...((customProfile.toolResponses?.toolResponseRetentionByTool || {})),\n ...((opts.toolResponses?.toolResponseRetentionByTool || {})),\n },\n criticalTools: opts.toolResponses?.criticalTools ?? customProfile.toolResponses?.criticalTools ?? preset.toolResponses.criticalTools,\n },\n watchdog: {\n ...preset.watchdog,\n ...(customProfile.watchdog || {}),\n ...(opts.watchdog || {}),\n },\n };\n}\n\nexport function getResolvedSmartConfig(opts: SmartAgentOptions, runtime?: { smart?: ResolvedSmartAgentConfig | undefined }): ResolvedSmartAgentConfig {\n return runtime?.smart || normalizeSmartAgentOptions(opts);\n}","/**\n * Estimates token count from text using a character-based heuristic.\n * \n * This is a rough approximation:\n * - For Latin/ASCII text: ~4 characters per token (GPT-family models)\n * - For CJK/Unicode text: ~1.5 characters per token\n * \n * For production accuracy, consider using a proper tokenizer like tiktoken.\n */\nexport function countApproxTokens(text: string): number {\n if (!text) return 0;\n // Count non-ASCII characters (CJK, Arabic, etc.) which use more tokens\n const nonAsciiCount = (text.match(/[^\\x00-\\x7F]/g) || []).length;\n const asciiCount = text.length - nonAsciiCount;\n // ASCII text: ~4 chars/token, non-ASCII: ~1.5 chars/token\n return Math.ceil(asciiCount / 4 + nonAsciiCount / 1.5);\n}\n\n/**\n * Extracts all text from a message, including content AND tool_calls arguments.\n * \n * Standard `countApproxTokens` only counts `.content`, but assistant messages\n * with tool_calls often have `content: \"\"` while `tool_calls[].function.arguments`\n * can contain massive JSON strings. The actual LLM API counts both towards input tokens,\n * so we must include tool_calls to get an accurate estimate.\n * \n * Also accounts for per-message overhead (role, name, formatting tokens).\n */\nfunction extractMessageText(m: any): string {\n if (!m) return \"\";\n const parts: string[] = [];\n\n // 1. Role + name overhead (~4 tokens worth of text)\n parts.push(m.role || \"\");\n if (m.name) parts.push(m.name);\n\n // 2. Content field\n if (typeof m.content === \"string\") {\n parts.push(m.content);\n } else if (Array.isArray(m.content)) {\n for (const c of m.content) {\n if (typeof c === \"string\") parts.push(c);\n else if (c?.text) parts.push(c.text);\n else if (c?.content) parts.push(c.content);\n else if (c?.type === \"tool_use\" && c?.input) {\n // Anthropic/Bedrock native tool_use content blocks\n parts.push(c.name || \"\");\n parts.push(typeof c.input === \"string\" ? c.input : JSON.stringify(c.input));\n } else if (c != null && typeof c === \"object\") {\n parts.push(JSON.stringify(c));\n }\n }\n } else if (m.content != null && typeof m.content === \"object\") {\n parts.push(JSON.stringify(m.content));\n }\n\n // 3. Tool calls (assistant messages) — these are counted by the API but often missed\n if (Array.isArray(m.tool_calls)) {\n for (const tc of m.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n // LangChain normalized format (name + args at top level)\n if (tc?.name && !tc?.function?.name) parts.push(tc.name);\n if (tc?.args && !tc?.function?.arguments) {\n parts.push(typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args));\n }\n }\n }\n\n // 4. additional_kwargs.tool_calls (LangChain Bedrock format)\n if (Array.isArray(m.additional_kwargs?.tool_calls)) {\n for (const tc of m.additional_kwargs.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n }\n }\n\n return parts.join(\"\\n\");\n}\n\n/**\n * Estimates the total token count for an array of messages.\n * \n * Unlike counting only `.content`, this includes:\n * - `tool_calls[].function.arguments` (can be massive JSON)\n * - `tool_calls[].function.name`\n * - `additional_kwargs.tool_calls` (LangChain/Bedrock)\n * - Per-message overhead (role, name, formatting)\n * - Anthropic tool_use content blocks\n */\nexport function countMessagesTokens(messages: any[]): number {\n if (!Array.isArray(messages) || messages.length === 0) return 0;\n const allText = messages.map(extractMessageText).join(\"\\n\");\n // Add ~4 tokens per message for framing overhead (role delimiters, etc.)\n return countApproxTokens(allText) + messages.length * 4;\n}\n","import { ZodError } from \"zod\";\nimport type {\n ResolvedSmartAgentConfig,\n ToolInterface,\n ToolResponseClassification,\n ToolResponseRetentionPolicy,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n const serialized = JSON.stringify(value);\n return typeof serialized === \"string\" ? serialized : String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction summarizeObject(value: any): string {\n if (value == null) return \"null\";\n if (typeof value === \"string\") {\n return value.length > 240 ? `${value.slice(0, 240)}...` : value;\n }\n if (Array.isArray(value)) {\n const preview = value.slice(0, 3).map((entry) => safeStringify(entry).slice(0, 120)).join(\" | \");\n return `array(length=${value.length}) ${preview}`.trim();\n }\n if (typeof value === \"object\") {\n const keys = Object.keys(value);\n const preview = keys.slice(0, 6).map((key) => `${key}=${safeStringify(value[key]).slice(0, 80)}`).join(\"; \");\n return `object(keys=${keys.length}) ${preview}`.trim();\n }\n return safeStringify(value);\n}\n\nexport function classifyToolResponse(toolName: string, output: unknown, config: ResolvedSmartAgentConfig): ToolResponseClassification {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const criticalTools = new Set(config.toolResponses.criticalTools);\n\n if (criticalTools.has(toolName)) return \"critical\";\n if (tokenCount >= config.toolResponses.maxToolResponseTokens || serialized.length >= config.toolResponses.maxToolResponseChars) {\n return \"verbose\";\n }\n if (serialized === \"ok\" || serialized === \"true\" || serialized === \"null\") {\n return \"redundant\";\n }\n return \"informative\";\n}\n\nexport function resolveToolResponsePolicy(\n toolName: string,\n output: unknown,\n config: ResolvedSmartAgentConfig,\n): {\n classification: ToolResponseClassification;\n retentionPolicy: ToolResponseRetentionPolicy;\n content: string;\n rawOutput: unknown;\n summary: string;\n tokenCount: number;\n} {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const classification = classifyToolResponse(toolName, output, config);\n const byTool = config.toolResponses.toolResponseRetentionByTool[toolName];\n let retentionPolicy: ToolResponseRetentionPolicy = byTool || config.toolResponses.defaultPolicy;\n\n if (classification === \"critical\") {\n retentionPolicy = byTool || config.toolResponses.fallbackPolicy;\n } else if (classification === \"verbose\") {\n retentionPolicy = byTool || config.toolResponses.largeResponsePolicy;\n } else if (classification === \"redundant\") {\n retentionPolicy = byTool || \"drop\";\n }\n\n const summary = summarizeObject(output);\n if (retentionPolicy === \"keep_full\") {\n return { classification, retentionPolicy, content: serialized, rawOutput: output, summary, tokenCount };\n }\n if (retentionPolicy === \"keep_structured\") {\n return { classification, retentionPolicy, content: summary, rawOutput: output, summary, tokenCount };\n }\n if (retentionPolicy === \"summarize_archive\") {\n return {\n classification,\n retentionPolicy,\n content: `ARCHIVED_TOOL_RESPONSE: ${summary}`,\n rawOutput: output,\n summary,\n tokenCount,\n };\n }\n return {\n classification,\n retentionPolicy,\n content: `DROPPED_TOOL_RESPONSE: ${summary}`,\n rawOutput: output,\n summary,\n tokenCount,\n };\n}\n\nexport function validateToolArgs(\n tool: ToolInterface<any, any, any>,\n args: unknown,\n): { ok: true; value: any } | { ok: false; message: string } {\n const schema = (tool as any).schema;\n if (!schema || typeof schema.parse !== \"function\") {\n return { ok: true, value: args };\n }\n\n try {\n return { ok: true, value: schema.parse(args) };\n } catch (error) {\n if (error instanceof ZodError) {\n const message = error.issues.map((issue) => `${issue.path.join(\".\") || \"root\"}: ${issue.message}`).join(\"; \");\n return { ok: false, message };\n }\n return { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n}","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { resolveToolResponsePolicy, validateToolArgs } from \"../smart/toolResponses.js\";\n\nfunction normalizeMaxExecutionsPerRun(value: unknown): number | null {\n if (value === null || value === undefined || value === \"\") return null;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return null;\n const normalized = Math.trunc(parsed);\n return normalized >= 0 ? normalized : null;\n}\n\nfunction countSuccessfulToolExecutions(toolHistory: SmartState[\"toolHistory\"], toolName: string): number {\n if (!Array.isArray(toolHistory)) return 0;\n return toolHistory.filter((entry) => entry?.toolName === toolName && (entry?.status === \"success\" || entry?.status === \"handoff\")).length;\n}\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n todoListPrompt: opts?.todoListPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const resolved = getResolvedSmartConfig(opts || ({} as SmartAgentOptions), runtime as any);\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const tool of activeTools) toolByName.set((tool as any).name, tool);\n\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? resolved.limits.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n let awaitingApproval = false;\n\n for (const tool of toolByName.values()) {\n const anyTool: any = tool as any;\n if (anyTool._stateRef && typeof anyTool._stateRef === \"object\") {\n anyTool._stateRef.toolHistory = state.toolHistory;\n anyTool._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyTool._stateRef.__onEvent = onEvent;\n }\n }\n\n const last = state.messages[state.messages.length - 1] as any;\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = Array.isArray(last?.tool_calls) ? last.tool_calls : [];\n const toolHistory = state.toolHistory || [];\n const toolHistoryArchived = state.toolHistoryArchived || [];\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval };\n\n const isCancelled = () => {\n if (abortSignal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (cancellationToken && cancellationToken.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const markToolFailure = (message: string, toolName: string, toolCallId?: string) => {\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__lastToolError = message;\n if (toolCallId) {\n ctx.__toolSchemaError = { toolName, toolCallId, message };\n }\n if (resolved.watchdog.autoReplanOnFailure) {\n ctx.__planNeedsReplan = true;\n }\n state.ctx = ctx;\n };\n\n const runOne = async (tc: { id?: string; name: string; args: any }): Promise<ToolExecutionResult> => {\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n return { status: \"error\" };\n }\n\n const tool = toolByName.get(tc.name);\n if (!tool) {\n appended.push({ role: \"tool\", content: `Tool not found: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch { /* keep raw string */ }\n }\n\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n const validatedArgs = validateToolArgs(tool, args);\n if (!validatedArgs.ok && resolved.toolResponses.schemaValidation === \"strict\") {\n const errorMessage = `Tool argument validation failed for ${tc.name}: ${validatedArgs.message}`;\n appended.push({ role: \"tool\", content: errorMessage, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(errorMessage, tc.name, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args, error: { message: errorMessage } });\n toolCount += 1;\n return { status: \"error\" };\n }\n if (validatedArgs.ok) {\n args = validatedArgs.value;\n }\n\n const toolName = (tool as any).name || tc.name;\n const maxExecutionsPerRun = normalizeMaxExecutionsPerRun((tool as any).maxExecutionsPerRun);\n if (maxExecutionsPerRun !== null) {\n const currentExecutions = countSuccessfulToolExecutions(toolHistory, toolName);\n if (currentExecutions >= maxExecutionsPerRun) {\n const limitMessage = `Skipped tool due to per-tool execution limit: ${toolName} (${maxExecutionsPerRun}/run)`;\n appended.push({ role: \"tool\", content: limitMessage, tool_call_id: toolCallId, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: toolName, id: tc.id, args });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList: [\n {\n role: \"assistant\",\n name: toolName,\n content: limitMessage,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: { name: toolName, arguments: sanitizeTracePayload(args) },\n },\n ],\n },\n ],\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n }\n\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((tool as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (tool as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (tool as any).approvalPrompt || (tool as any).approvalDefaults\n ? { prompt: (tool as any).approvalPrompt, defaults: (tool as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n appended.push({ role: \"tool\", content: `Tool call rejected: ${rejectionMessage}`, tool_call_id: toolCallId, name: tc.name });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n pendingByCallId.set(toolCallId, approvalEntry);\n toolHistory.push({ executionId: nanoid(), toolName: (tool as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"rejected\" });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\" && approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n\n const start = Date.now();\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n\n try {\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: toolName, id: tc.id, args });\n onProgress?.({ stage: \"tools\", message: `Running tool ${tc.name}` });\n const anyTool = tool as any;\n const callOptions = { cancellationToken, signal: abortSignal };\n let output: any;\n if (typeof anyTool.func === \"function\") output = await anyTool.func(args, callOptions);\n else if (typeof anyTool.invoke === \"function\") output = await anyTool.invoke(args, callOptions);\n else if (typeof anyTool.call === \"function\") output = await anyTool.call(args, callOptions);\n else if (typeof anyTool._call === \"function\") output = await anyTool._call(args, callOptions);\n else if (typeof anyTool.run === \"function\") output = await anyTool.run(args, callOptions);\n else throw new Error(\"Tool is not invokable\");\n\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n\n if (output && typeof output === \"object\" && output.__handoff && output.__handoff.runtime) {\n toolHistory.push({ executionId, toolName, args, output: \"handoff:ok\", rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"handoff\" });\n appended.push({ role: \"tool\", content: \"ok\", tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n state.agent = output.__handoff.runtime as AgentRuntimeConfig;\n onEvent?.({ type: \"handoff\", from: runtime.name, to: state.agent?.name, toolName });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: \"handoff\", durationMs });\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n }\n\n if (output && typeof output === \"object\" && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n\n const responsePolicy = resolveToolResponsePolicy(toolName, output, resolved);\n const timestamp = new Date().toISOString();\n const storedOutput = responsePolicy.retentionPolicy === \"keep_full\" ? output : responsePolicy.summary;\n\n toolHistory.push({\n executionId,\n toolName,\n args,\n output: storedOutput,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: responsePolicy.retentionPolicy !== \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n summary: responsePolicy.summary,\n archiveId: responsePolicy.retentionPolicy === \"summarize_archive\" || responsePolicy.retentionPolicy === \"drop\" ? executionId : undefined,\n status: \"success\",\n });\n\n if (resolved.context.archiveLargeToolResponses && (responsePolicy.retentionPolicy === \"summarize_archive\" || responsePolicy.retentionPolicy === \"drop\")) {\n toolHistoryArchived.push({\n executionId,\n toolName,\n args,\n output,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: true,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n summary: responsePolicy.summary,\n archiveId: executionId,\n status: \"success\",\n });\n }\n\n let toolMessageContent = responsePolicy.content;\n if (responsePolicy.retentionPolicy === \"summarize_archive\") {\n toolMessageContent = `ARCHIVED_TOOL_RESPONSE [executionId=${executionId}]: ${responsePolicy.summary}\\nUse get_tool_response with executionId \"${executionId}\" to retrieve the full output.`;\n } else if (responsePolicy.retentionPolicy === \"drop\") {\n toolMessageContent = `DROPPED_TOOL_RESPONSE [executionId=${executionId}]: ${responsePolicy.summary}\\nUse get_tool_response with executionId \"${executionId}\" to retrieve the full output.`;\n }\n appended.push({ role: \"tool\", content: toolMessageContent, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: output, durationMs });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} completed`, detail: { durationMs } });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: responsePolicy.content,\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolExecutionId: executionId,\n messageList,\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: responsePolicy.retentionPolicy,\n originalTokenCount: responsePolicy.tokenCount,\n },\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (error: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n const message = error?.message || String(error);\n toolHistory.push({ executionId, toolName, args, output: `Error executing tool: ${message}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"error\" });\n appended.push({ role: \"tool\", content: `Error executing tool: ${message}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n markToolFailure(message, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message } });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} failed`, detail: { error: message } });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n toolExecutionId: executionId,\n error: { message, stack: error?.stack },\n messageList: [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: { name: toolName, arguments: sanitizedArgs },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: `Error executing tool: ${message}`,\n },\n ],\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n for (const tc of planned) {\n if (awaitingApproval) break;\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n break;\n }\n const result = await runOne(tc);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n }\n\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const sanitizedArgs = sanitizeTracePayload(tc.args);\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList: [\n {\n role: \"assistant\",\n name: tc.name,\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: { name: tc.name, arguments: sanitizedArgs },\n },\n ],\n },\n ],\n });\n appended.push({ role: \"tool\", content: `Skipped tool due to tool-call limit: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n toolCount += 1;\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n toolHistoryArchived,\n agent: state.agent,\n pendingApprovals,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\n// Note: Using 'user' role since 'system' messages cannot appear in the middle of a conversation for OpenAI API.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'user', content: \"[System Notice] Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\n \"__onEvent\",\n \"__onProgress\",\n \"__onStream\",\n \"__traceSession\",\n \"__paused\",\n \"__cancellationToken\",\n \"__abortSignal\",\n]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession, startStreamingSession, recordTraceEvent } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { countMessagesTokens } from \"./utils/utilTokens.js\";\n\nfunction isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n if (opts.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema as any,\n func: async (data: any) => ({ __finalStructuredOutput: true, data }),\n });\n toolsBase.push(responseTool);\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n tracing: opts.tracing,\n };\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n const mergedLimits = {\n ...(opts.limits || {}),\n ...((config?.limits || {}) as any),\n } as AgentOptions[\"limits\"];\n\n const maxToolCalls = (mergedLimits?.maxToolCalls === undefined) ? 50 : mergedLimits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n let iterations = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n\n const isCancelled = () => {\n const ctx: any = state.ctx || {};\n const token = ctx.__cancellationToken as any;\n const signal = ctx.__abortSignal as AbortSignal | undefined;\n const deadline = ctx.__deadline as number | undefined;\n if (signal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (token && token.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n if (deadline && Date.now() > deadline) return { cancelled: true, reason: \"timeout\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const cancelIfRequested = (stage: string) => {\n const result = isCancelled();\n if (!result.cancelled) return false;\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__cancelled = { stage, reason: result.reason, timestamp: new Date().toISOString() };\n state = { ...state, ctx } as AgentState;\n emit?.({ type: \"cancelled\", stage, reason: result.reason });\n onProgress?.({ stage, message: \"Cancelled\", detail: { reason: result.reason } });\n return true;\n };\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch (err) {\n console.warn('[agent-sdk] onStateChange callback error:', err);\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n while (iterations < iterationLimit) {\n iterations++;\n\n // Open an iteration span as parent for all ai_call / tool_call events in this turn\n const traceSession = state.ctx?.__traceSession as import(\"./types.js\").TraceSessionRuntime | undefined;\n if (traceSession) {\n const iterEvent = recordTraceEvent(traceSession, {\n type: \"agent_iteration\",\n label: `Iteration ${iterations}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"orchestrator\" },\n parentSpanId: traceSession.rootSpanId,\n });\n // Override the spanId for the iteration event so children reference it\n if (iterEvent) {\n traceSession.currentIterationSpanId = iterEvent.spanId;\n }\n }\n\n if (cancelIfRequested(\"loop\")) break;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (cancelIfRequested(\"before_guardrails\")) break;\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Check if context is too large and needs summarization (signal to SmartAgent).\n // Use summaryTriggerTokens (the intended threshold) rather than maxTokens\n // (which controls summary output size) to avoid premature compaction.\n let maxTok: number | undefined;\n if ((opts as any).summarization && typeof (opts as any).summarization === 'object') {\n maxTok = (opts as any).summarization.summaryTriggerTokens || (opts as any).summarization.maxTokens;\n }\n if (maxTok === undefined) {\n maxTok = 50000; // Default if not found\n }\n\n if (maxTok) {\n // Exclude synthetic summary messages AND context overhead injected by SmartAgent's\n // buildModelMessages (context_summary, memory_context). These system messages are\n // added on top of the conversation and shouldn't trigger re-summarization.\n const tokCountMessages = (state.messages || []).filter((message: any) => {\n if (isSyntheticSummaryMessage(message)) return false;\n if (message.role === 'system' && (message.name === 'context_summary' || message.name === 'memory_context')) return false;\n return true;\n });\n const tokenCount = countMessagesTokens(tokCountMessages);\n if (tokenCount > maxTok) {\n // Only signal summarization if tokens exceed the threshold by a meaningful margin\n // or if summarization hasn't just been performed (prevents infinite break loops\n // where summarized output + context overhead barely exceeds the limit).\n const hasFreshSummary = (state.messages || []).some((m: any) =>\n m.role === 'tool'\n && typeof m.content === 'string'\n && (m.content === 'SUMMARIZED' || m.content.startsWith('SUMMARIZED_TOOL_RESPONSE'))\n );\n if (hasFreshSummary && tokenCount <= maxTok * 1.15) {\n // Summarization was recently performed and the overshoot is within 15%.\n // Proceed to agent call instead of re-triggering summarization.\n } else {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n }\n\n // Agent step\n onProgress?.({ stage: \"agent\", message: \"Invoking model\" });\n if (cancelIfRequested(\"before_agent\")) break;\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n onProgress?.({ stage: \"agent\", message: \"Model response received\" });\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n const toolCalls: any[] = Array.isArray(lastMsg?.tool_calls) ? lastMsg.tool_calls : [];\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) break;\n\n // Run tools\n onProgress?.({ stage: \"tools\", message: \"Running tools\" });\n if (cancelIfRequested(\"before_tools\")) break;\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n onProgress?.({ stage: \"tools\", message: \"Tools finished\" });\n if (state.ctx?.__awaitingApproval) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n }\n\n // Best-effort: if a structured output schema is active but the model never called `response`,\n // append a force-finalize instruction and allow one more agent turn (without tools ideally).\n // This helps avoid \"completed but no response generated\" situations.\n if (opts.outputSchema && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n // Only nudge if we appear to be done (no pending tool calls) but still no structured finalize.\n if (!lastHasToolCalls) {\n const forceMsg = {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n ].join(\"\\n\"),\n } as any;\n\n // Avoid spamming the same instruction\n const alreadyForced = Boolean((state as any).ctx?.__structuredOutputForceFinalize);\n if (!alreadyForced) {\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, forceMsg], ctx } as AgentState;\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch (err: unknown) {\n // Log structured output force-finalize error so callers can diagnose failures\n const errMsg = err instanceof Error ? err.message : String(err);\n emit?.({ type: \"metadata\", error: `Structured output force-finalize failed: ${errMsg}` });\n }\n }\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n const onEvent = config?.onEvent;\n const onProgress = config?.onProgress;\n const onStream = config?.onStream;\n const streamEnabled = config?.stream === true;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch (err) { console.warn('[agent-sdk] onEvent callback error:', err); } };\n const emitProgress = (progress: { stage?: string; message?: string; percent?: number; detail?: any }) => {\n try { onProgress?.(progress); } catch (err) { console.warn('[agent-sdk] onProgress callback error:', err); }\n emit({ type: \"progress\", ...progress });\n };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = {\n ...(input.ctx || {}),\n __onEvent: onEvent,\n __onProgress: emitProgress,\n __onStream: onStream,\n __streaming: streamEnabled,\n };\n if (traceSession) ctx.__traceSession = traceSession;\n if (config?.cancellationToken) ctx.__cancellationToken = config.cancellationToken;\n if ((config?.cancellationToken as AbortSignal | undefined)?.aborted !== undefined) {\n ctx.__abortSignal = config?.cancellationToken as AbortSignal;\n }\n if (config?.timeoutMs && config.timeoutMs > 0) {\n ctx.__deadline = Date.now() + config.timeoutMs;\n }\n\n const runtimeWithInvokeLimits: AgentRuntimeConfig = config?.limits\n ? { ...runtime, limits: { ...(runtime.limits || {}), ...config.limits } }\n : runtime;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n agent: input.agent || runtimeWithInvokeLimits,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n await startStreamingSession(traceSession, runtimeWithInvokeLimits);\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n throw err;\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n const finalMsg = res.messages[res.messages.length - 1];\n let content = \"\";\n if (typeof finalMsg?.content === \"string\") content = finalMsg.content;\n else if (Array.isArray(finalMsg?.content)) content = finalMsg.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n\n let parsed: TOutput | undefined = undefined;\n const schema = opts.outputSchema as ZodSchema<TOutput> | undefined;\n if (schema && (res as any).ctx?.__structuredOutputParsed) {\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (schema && content) {\n // Fallback: try to parse JSON from assistant message\n let jsonText: string | null = null;\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) jsonText = fenced[1].trim();\n else {\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const start = [braceIdx, bracketIdx].filter(i => i >= 0).sort((a, b) => a - b)[0];\n if (start !== undefined) jsonText = content.slice(start).trim();\n }\n try {\n const raw = JSON.parse(jsonText ?? content);\n parsed = schema.parse(raw) as TOutput;\n } catch {}\n }\n\n emit({ type: \"finalAnswer\", content: typeof finalMsg?.content === 'string' ? finalMsg.content : content });\n if (streamEnabled && content) {\n onStream?.({ text: content, isFinal: true });\n emit({ type: \"stream\", text: content, isFinal: true });\n }\n\n return {\n content,\n output: parsed as TOutput | undefined,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n return createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n const res = await instance.invoke({ messages: [{ role: 'user', content: input } as any] });\n return {\n content: res.content,\n output: res.output,\n summary: res.state?.summaries?.[res.state.summaries.length - 1],\n };\n }\n });\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\",\n runtime.todoListPrompt,\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage || (response as any)?.response_metadata?.token_usage || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type { BaseMessage, MemoryFact, ResolvedSmartAgentConfig, SmartState, StructuredSummary } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\nfunction messageText(message: BaseMessage): string {\n if (typeof message.content === \"string\") return message.content;\n if (Array.isArray(message.content)) {\n return message.content.map((part: any) => (typeof part === \"string\" ? part : part?.text ?? part?.content ?? JSON.stringify(part))).join(\" \");\n }\n return \"\";\n}\n\nfunction collectRecentTurns(messages: BaseMessage[], lastTurnsToKeep: number): BaseMessage[] {\n if (lastTurnsToKeep <= 0) return [];\n const systemPrefix = messages.filter((message, index) => index === 0 && message.role === \"system\");\n const body = systemPrefix.length > 0 ? messages.slice(1) : [...messages];\n let userTurnCount = 0;\n const collected: BaseMessage[] = [];\n\n for (let index = body.length - 1; index >= 0; index -= 1) {\n const message = body[index];\n collected.unshift(message);\n if (message.role === \"user\") {\n userTurnCount += 1;\n if (userTurnCount >= lastTurnsToKeep) break;\n }\n }\n\n return [...systemPrefix, ...collected];\n}\n\nexport function renderStructuredSummary(summary: StructuredSummary | undefined): string {\n if (!summary) return \"\";\n const lines = [\"Context summary:\"];\n if (summary.stable_facts.length > 0) {\n lines.push(\"Stable facts:\");\n lines.push(...summary.stable_facts.map((fact) => `- ${fact.key}: ${fact.value}`));\n }\n if (summary.active_goals.length > 0) {\n lines.push(\"Active goals:\");\n lines.push(...summary.active_goals.map((goal) => `- ${goal}`));\n }\n if (summary.open_questions.length > 0) {\n lines.push(\"Open questions:\");\n lines.push(...summary.open_questions.map((question) => `- ${question}`));\n }\n if (summary.discarded_obsolete.length > 0) {\n lines.push(\"Discarded obsolete:\");\n lines.push(...summary.discarded_obsolete.map((item) => `- ${item}`));\n }\n return lines.join(\"\\n\");\n}\n\nfunction renderMemoryBlock(facts: MemoryFact[] | undefined): string {\n if (!facts || facts.length === 0) return \"\";\n return [\n \"Retrieved memory:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value}`),\n ].join(\"\\n\");\n}\n\nfunction clampToBudget(messages: BaseMessage[], maxContextTokens: number): BaseMessage[] {\n let working = [...messages];\n while (working.length > 2) {\n const tokenCount = countApproxTokens(working.map(messageText).join(\"\\n\"));\n if (tokenCount <= maxContextTokens) return working;\n\n const firstNonSystem = working.findIndex((message, index) => !(index === 0 && message.role === \"system\"));\n if (firstNonSystem < 0) break;\n working.splice(firstNonSystem, 1);\n }\n return working;\n}\n\nexport function buildModelMessages(state: SmartState, config: ResolvedSmartAgentConfig): BaseMessage[] {\n const rawMessages = (state.messages || []) as BaseMessage[];\n if (config.context.policy === \"raw\") {\n return clampToBudget(rawMessages, config.limits.maxContextTokens);\n }\n\n const recentMessages = collectRecentTurns(rawMessages, config.context.lastTurnsToKeep);\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n const summaryText = renderStructuredSummary(latestSummary);\n const memoryText = renderMemoryBlock(state.memoryFacts);\n const systemMessage = recentMessages[0]?.role === \"system\" ? recentMessages[0] : undefined;\n const body = systemMessage ? recentMessages.slice(1) : recentMessages;\n const syntheticContextMessages: BaseMessage[] = [];\n\n if (summaryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"context_summary\", content: summaryText });\n }\n if (memoryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"memory_context\", content: memoryText });\n }\n\n const assembled = [\n ...(systemMessage ? [systemMessage] : []),\n ...syntheticContextMessages,\n ...(config.context.policy === \"summary_only\" ? body.filter((message) => message.role === \"user\" || message.role === \"assistant\").slice(-2) : body),\n ];\n\n return clampToBudget(assembled, config.limits.maxContextTokens);\n}\n\nexport function estimateContextRotScore(state: SmartState): number {\n const summaryCount = state.summaryRecords?.length || 0;\n const archivedCount = state.toolHistoryArchived?.length || 0;\n const messageCount = state.messages?.length || 0;\n const summarizedMessages = state.messages?.filter((message) => (\n message.role === \"tool\"\n && typeof message.content === \"string\"\n && (message.content === \"SUMMARIZED\" || message.content.startsWith(\"SUMMARIZED_TOOL_RESPONSE\"))\n )).length || 0;\n const numerator = (summaryCount * 2) + archivedCount + summarizedMessages;\n const denominator = Math.max(messageCount, 1);\n return Number((numerator / denominator).toFixed(3));\n}","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type {\n SmartAgentOptions,\n SmartState,\n BaseMessage,\n SmartAgentEvent,\n StructuredSummary,\n SummarizationEvent,\n SummaryIntegrityCheck,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { recordTraceEvent, sanitizeTracePayload } from \"../utils/tracing.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { renderStructuredSummary } from \"../smart/contextPolicy.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\nfunction isSyntheticSummaryToolMessage(message: BaseMessage): boolean {\n return message.role === 'tool' && message.name === 'summarize_context';\n}\n\nfunction isSyntheticSummaryAssistantMessage(message: BaseMessage): boolean {\n if (message.role !== 'assistant' || !Array.isArray(message.tool_calls)) {\n return false;\n }\n\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n}\n\n/**\n * Validates message sequence to ensure OpenAI API compatibility.\n * Every tool message must follow an assistant message with a matching tool_call.\n * This prevents \"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'\" errors.\n */\nfunction validateMessageSequence(messages: BaseMessage[]): BaseMessage[] {\n const validated: BaseMessage[] = [];\n const pendingToolCallIds = new Set<string>();\n \n for (const m of messages) {\n if (m.role === 'assistant') {\n // Clear any pending tool calls when we see a new assistant message without tool_calls\n if (!m.tool_calls || m.tool_calls.length === 0) {\n pendingToolCallIds.clear();\n } else {\n // Register new tool calls\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) pendingToolCallIds.add(tc.id);\n });\n }\n validated.push(m);\n } else if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n // Only include tool messages that have a pending (expected) tool_call_id\n if (toolCallId && pendingToolCallIds.has(toolCallId)) {\n pendingToolCallIds.delete(toolCallId);\n validated.push(m);\n }\n // Otherwise, this is an orphan tool message - skip it\n } else {\n // user, system messages - always include\n validated.push(m);\n }\n }\n \n return validated;\n}\n\n/**\n * Gets the summarization configuration normalized\n */\nfunction extractJsonObject(text: string): string | null {\n const fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenced?.[1]) return fenced[1].trim();\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start >= 0 && end > start) {\n return text.slice(start, end + 1);\n }\n return null;\n}\n\nfunction normalizeStructuredSummary(input: any, fallbackText: string): StructuredSummary {\n const summary: StructuredSummary = {\n stable_facts: Array.isArray(input?.stable_facts)\n ? input.stable_facts\n .filter((fact: any) => fact && typeof fact === \"object\")\n .map((fact: any) => ({\n key: String(fact.key || \"unknown\"),\n value: String(fact.value || \"\"),\n confidence: typeof fact.confidence === \"number\" ? fact.confidence : 0.7,\n source: fact.source ? String(fact.source) : undefined,\n }))\n : [],\n active_goals: Array.isArray(input?.active_goals) ? input.active_goals.map((goal: any) => String(goal)) : [],\n open_questions: Array.isArray(input?.open_questions) ? input.open_questions.map((question: any) => String(question)) : [],\n discarded_obsolete: Array.isArray(input?.discarded_obsolete || input?.obsolete_discarded)\n ? (input.discarded_obsolete || input.obsolete_discarded).map((item: any) => String(item))\n : [],\n rawSummary: typeof input?.rawSummary === \"string\" ? input.rawSummary : fallbackText,\n };\n\n if (summary.stable_facts.length === 0 && fallbackText) {\n const importantLines = fallbackText\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(0, 8);\n summary.stable_facts = importantLines.map((line, index) => ({\n key: `fact_${index + 1}`,\n value: line,\n confidence: 0.5,\n }));\n }\n\n return summary;\n}\n\nfunction normalizeFactKeySegment(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n || \"item\";\n}\n\nfunction extractCanonicalFacts(messages: BaseMessage[]): StructuredSummary[\"stable_facts\"] {\n const facts = new Map<string, StructuredSummary[\"stable_facts\"][number]>();\n\n for (const message of messages) {\n const content = typeof message.content === \"string\"\n ? message.content\n : Array.isArray(message.content)\n ? message.content.map((part: any) => part?.text ?? part?.content ?? String(part ?? \"\")).join(\"\\n\")\n : \"\";\n if (!content) continue;\n\n const lines = content.split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n for (const line of lines) {\n if (!/^[A-Z0-9_]+\\|/.test(line) || !line.includes(\"=\")) continue;\n\n const segments = line.split(\"|\").map((segment) => segment.trim()).filter(Boolean);\n const label = segments[0];\n const entries = segments.slice(1)\n .map((segment) => {\n const eqIndex = segment.indexOf(\"=\");\n if (eqIndex <= 0) return null;\n return {\n key: segment.slice(0, eqIndex).trim(),\n value: segment.slice(eqIndex + 1).trim(),\n };\n })\n .filter((entry): entry is { key: string; value: string } => Boolean(entry?.key));\n if (entries.length === 0) continue;\n\n const identifier = entries.find((entry) => [\"code\", \"id\", \"project\", \"name\", \"key\"].includes(entry.key.toLowerCase()))?.value;\n const keyPrefix = [normalizeFactKeySegment(label), identifier ? normalizeFactKeySegment(identifier) : undefined]\n .filter(Boolean)\n .join(\".\");\n\n for (const entry of entries) {\n const normalizedEntryKey = normalizeFactKeySegment(entry.key);\n const factKey = keyPrefix ? `${keyPrefix}.${normalizedEntryKey}` : `${normalizeFactKeySegment(label)}.${normalizedEntryKey}`;\n facts.set(factKey, {\n key: factKey,\n value: entry.value,\n confidence: 0.98,\n source: \"canonical_tool_output\",\n });\n }\n }\n }\n\n return [...facts.values()];\n}\n\nfunction flattenToolMessageContent(message: BaseMessage): string {\n if (typeof message.content === \"string\") {\n return message.content;\n }\n\n if (Array.isArray(message.content)) {\n return message.content\n .map((part: any) => (typeof part === \"string\" ? part : part?.text ?? part?.content ?? String(part ?? \"\")))\n .join(\" \");\n }\n\n return \"\";\n}\n\nfunction isSummarizedToolPlaceholder(content: BaseMessage[\"content\"]): boolean {\n return typeof content === \"string\"\n && (content === \"SUMMARIZED\" || content.startsWith(\"SUMMARIZED_TOOL_RESPONSE\"));\n}\n\nfunction summarizeToolMessagePreview(message: BaseMessage): string {\n const preview = flattenToolMessageContent(message).trim();\n if (!preview) {\n return \"No summary available.\";\n }\n\n return preview.length > 240 ? `${preview.slice(0, 240)}...` : preview;\n}\n\nfunction findToolHistoryEntry(state: SmartState, toolCallId?: string, toolName?: string) {\n const entries = [\n ...(state.toolHistory || []),\n ...(state.toolHistoryArchived || []),\n ];\n\n if (toolCallId) {\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.tool_call_id === toolCallId) {\n return entry;\n }\n }\n }\n\n if (!toolName) {\n return undefined;\n }\n\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.toolName === toolName) {\n return entry;\n }\n }\n\n return undefined;\n}\n\nfunction buildSummarizedToolMessage(message: BaseMessage, state: SmartState): string {\n const toolName = message.name || \"unknown_tool\";\n const toolCallId = message.tool_call_id;\n const historyEntry = findToolHistoryEntry(state, toolCallId, toolName);\n const executionId = historyEntry?.executionId;\n const summary = historyEntry?.summary || summarizeToolMessagePreview(message);\n const references = [\n `toolName=${toolName}`,\n toolCallId ? `toolCallId=${toolCallId}` : null,\n executionId ? `executionId=${executionId}` : null,\n ].filter(Boolean).join(\"; \");\n\n let retrievalHint = \"Use get_tool_response if exact details are still needed.\";\n if (executionId && toolCallId) {\n retrievalHint = `Use get_tool_response with executionId \"${executionId}\" or tool call id \"${toolCallId}\" if exact details are still needed.`;\n } else if (executionId || toolCallId) {\n retrievalHint = `Use get_tool_response with executionId \"${executionId || toolCallId}\" if exact details are still needed.`;\n }\n\n return [\n `SUMMARIZED_TOOL_RESPONSE [${references}]`,\n `Summary: ${summary}`,\n retrievalHint,\n ].join(\"\\n\");\n}\n\nfunction mergeStableFacts(\n summary: StructuredSummary,\n additionalFacts: StructuredSummary[\"stable_facts\"],\n): StructuredSummary {\n if (additionalFacts.length === 0) return summary;\n\n const merged = new Map(summary.stable_facts.map((fact) => [fact.key, fact]));\n for (const fact of additionalFacts) {\n const existing = merged.get(fact.key);\n if (!existing || (fact.confidence || 0) >= (existing.confidence || 0)) {\n merged.set(fact.key, fact);\n }\n }\n\n return {\n ...summary,\n stable_facts: [...merged.values()],\n };\n}\n\nfunction runIntegrityCheck(previous: StructuredSummary | undefined, current: StructuredSummary): SummaryIntegrityCheck {\n const notes: string[] = [];\n const previousKeys = new Set((previous?.stable_facts || []).map((fact) => fact.key));\n const currentKeys = new Set(current.stable_facts.map((fact) => fact.key));\n const obsoleteKeys = new Set(current.discarded_obsolete);\n const criticalFactLoss = [...previousKeys].some((key) => !obsoleteKeys.has(key) && !currentKeys.has(key));\n const obsoleteFactRevived = current.stable_facts.some((fact) => obsoleteKeys.has(fact.key));\n\n if (criticalFactLoss) {\n notes.push(\"Missing previously retained facts; merged forward during integrity repair.\");\n }\n if (obsoleteFactRevived) {\n notes.push(\"Obsolete facts reappeared; removed during integrity repair.\");\n }\n\n return {\n passed: !criticalFactLoss && !obsoleteFactRevived,\n criticalFactLoss,\n obsoleteFactRevived,\n notes,\n };\n}\n\nfunction repairStructuredSummary(previous: StructuredSummary | undefined, current: StructuredSummary, integrity: SummaryIntegrityCheck): StructuredSummary {\n if (!previous) return current;\n const nextFacts = [...current.stable_facts];\n if (integrity.criticalFactLoss) {\n const existingKeys = new Set(nextFacts.map((fact) => fact.key));\n for (const fact of previous.stable_facts) {\n if (!existingKeys.has(fact.key) && !current.discarded_obsolete.includes(fact.key)) {\n nextFacts.push(fact);\n }\n }\n }\n const filteredFacts = integrity.obsoleteFactRevived\n ? nextFacts.filter((fact) => !current.discarded_obsolete.includes(fact.key))\n : nextFacts;\n return { ...current, stable_facts: filteredFacts };\n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n const config = resolved.summarization;\n if (!config.enable) return {};\n\n const model = (opts as any).model;\n const messages = state.messages || [];\n\n // Get onEvent and traceSession from state context\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n // Check if there are any tool messages that can be compressed\n const compressableMessages = messages.filter(\n (m) => m.role === 'tool' && !isSummarizedToolPlaceholder(m.content) && !isSyntheticSummaryToolMessage(m),\n );\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // Calculate token count before summarization\n const allTextBefore = messages\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCountBefore = countApproxTokens(allTextBefore);\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // IMPORTANT: We must truncate the conversation to fit within summaryPromptMaxTokens\n // to avoid \"input too large\" errors from the model.\n \n // Build conversation text from RECENT messages, respecting token budget\n const summaryPromptMaxTokens = config.summaryPromptMaxTokens;\n // Reserve ~500 tokens for the system prompt and instructions\n const availableTokensForConversation = summaryPromptMaxTokens - 500;\n \n // Build messages from newest to oldest, stopping when we hit the budget\n const messageTexts: string[] = [];\n let accumulatedTokens = 0;\n \n // Process messages from end to start (most recent first)\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (isSyntheticSummaryToolMessage(m) || isSyntheticSummaryAssistantMessage(m)) {\n continue;\n }\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n \n // Truncate individual message content if it's too large (e.g., huge tool outputs)\n const maxContentLength = 2000; // ~500 tokens per message max\n if (content.length > maxContentLength) {\n content = content.substring(0, maxContentLength) + \"... [TRUNCATED]\";\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n const messageText = `${prefix}: ${content}`;\n const messageTokens = countApproxTokens(messageText);\n \n if (accumulatedTokens + messageTokens > availableTokensForConversation) {\n // We've hit our budget, stop adding more messages\n // Add a note that earlier messages were omitted\n messageTexts.unshift(\"[Earlier conversation history omitted for brevity]\");\n break;\n }\n \n messageTexts.unshift(messageText);\n accumulatedTokens += messageTokens;\n }\n \n const conversationText = messageTexts.join(\"\\n\\n\");\n const canonicalFacts = extractCanonicalFacts(compressableMessages);\n\n const previousSummary = Array.isArray(state.summaries) && state.summaries.length > 0\n ? state.summaries[state.summaries.length - 1]\n : \"\";\n const previousStructuredSummary = Array.isArray(state.summaryRecords) && state.summaryRecords.length > 0\n ? state.summaryRecords[state.summaryRecords.length - 1]\n : undefined;\n\n const defaultPrompt = `Summarize the conversation into strict JSON.\n\nReturn exactly one JSON object with this schema:\n{\n \"stable_facts\": [{ \"key\": string, \"value\": string, \"confidence\": number }],\n \"active_goals\": [string],\n \"open_questions\": [string],\n \"discarded_obsolete\": [string],\n \"rawSummary\": string\n}\n\nRules:\n- Keep stable_facts only for facts that future turns must remember.\n- Put invalidated or superseded fact keys in discarded_obsolete.\n- Preserve active_goals still relevant to the user.\n- Preserve unresolved questions.\n- Do not include prose outside JSON.\n- Target compression ratio: ${config.summaryCompressionRatioTarget}.\n- Summary mode: ${config.summaryMode}.\n\nPrevious summary text:\n${previousSummary || \"(none)\"}\n\nPrevious structured summary:\n${previousStructuredSummary ? JSON.stringify(previousStructuredSummary) : \"(none)\"}\n\nConversation:\n${conversationText}\n\nCanonical facts extracted from tool outputs:\n${canonicalFacts.length > 0 ? canonicalFacts.map((fact) => `- ${fact.key}: ${fact.value}`).join(\"\\n\") : \"(none)\"}`;\n\n const template = config.promptTemplate || defaultPrompt;\n const promptBody = template\n .replace(/\\{\\{\\s*conversation\\s*\\}\\}/g, conversationText)\n .replace(/\\{\\{\\s*previousSummary\\s*\\}\\}/g, previousSummary || \"\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently. Return strict JSON only.\"),\n humanMessage(promptBody)\n ];\n\n // Estimate input tokens for the summarization prompt (fallback if model doesn't provide usage)\n const inputTokensEstimate = countApproxTokens(summaryPrompt.map(m => m.content).join(\"\\n\"));\n\n let summaryText = \"Summary unavailable.\";\n let structuredSummary: StructuredSummary | undefined;\n let integrity: SummaryIntegrityCheck | undefined;\n let outputTokensEstimate = 0;\n let durationMs = 0;\n let inputTokensActual: number | undefined;\n let outputTokensActual: number | undefined;\n let cachedInputTokens: number | undefined;\n let totalTokensActual: number | undefined;\n \n const startTime = Date.now();\n try {\n if (!model || typeof model.invoke !== \"function\") {\n throw new Error(\"Summarization model is unavailable.\");\n }\n const response = await model.invoke(summaryPrompt);\n durationMs = Date.now() - startTime;\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n outputTokensEstimate = countApproxTokens(summaryText);\n\n const jsonText = extractJsonObject(summaryText);\n const parsed = jsonText ? JSON.parse(jsonText) : undefined;\n structuredSummary = normalizeStructuredSummary(parsed, summaryText);\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = config.integrityCheck\n ? runIntegrityCheck(previousStructuredSummary, structuredSummary)\n : { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [] };\n if (integrity && !integrity.passed) {\n structuredSummary = repairStructuredSummary(previousStructuredSummary, structuredSummary, integrity);\n integrity = { ...integrity, passed: true };\n }\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Extract actual token usage from model response if available\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n if (normalized) {\n inputTokensActual = normalized.prompt_tokens;\n outputTokensActual = normalized.completion_tokens;\n totalTokensActual = normalized.total_tokens;\n cachedInputTokens = normalized.prompt_tokens_details?.cached_tokens;\n }\n } catch (err: any) {\n durationMs = Date.now() - startTime;\n structuredSummary = normalizeStructuredSummary(undefined, previousSummary || conversationText.slice(0, 800));\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [\"Fallback summary generated locally.\"] };\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Emit error event for onEvent\n const errorEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter: tokenCountBefore,\n structuredSummary,\n integrity,\n };\n onEvent?.(errorEvent);\n \n // Record trace event for error\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization Failed\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"error\",\n durationMs,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: sanitizeTracePayload(summaryPrompt),\n });\n // Continue with local fallback summary to avoid losing the compaction step.\n }\n\n // 2. Build a map of tool_call_id -> assistant message index\n // This ensures we only keep tool messages that have a matching assistant with tool_calls\n const toolCallIdToAssistantIdx = new Map<string, number>();\n messages.forEach((m, idx) => {\n if (m.role === 'assistant' && m.tool_calls && Array.isArray(m.tool_calls)) {\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) {\n toolCallIdToAssistantIdx.set(tc.id, idx);\n }\n });\n }\n });\n\n // 3. Modify existing messages\n // Replace content of tool messages with a compact placeholder, but only if they have a matching assistant.\n // Filter out orphan tool messages that don't have a preceding assistant with tool_calls.\n const newMessages = messages.map((m) => {\n if (m.role === 'tool') {\n if (isSyntheticSummaryToolMessage(m)) {\n return m;\n }\n const toolCallId = m.tool_call_id;\n \n // Check if this tool message has a matching assistant with tool_calls\n if (!toolCallId || !toolCallIdToAssistantIdx.has(toolCallId)) {\n // Orphan tool message - mark for removal\n return null;\n }\n \n // Check if it's already summarized to avoid double-processing\n if (isSummarizedToolPlaceholder(m.content)) return m;\n \n return { \n ...m, \n content: buildSummarizedToolMessage(m, state)\n };\n }\n return m;\n }).filter((m): m is NonNullable<typeof m> => m !== null);\n\n // 4. Validate message sequence - ensure every tool message follows an assistant with matching tool_calls\n const validatedMessages = validateMessageSequence(newMessages);\n\n // 5. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n const summaries = Array.isArray(state.summaries) ? [...state.summaries, summaryText] : [summaryText];\n const summaryRecords = Array.isArray(state.summaryRecords)\n ? [...state.summaryRecords, { ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }]\n : [{ ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }];\n\n // Calculate token count after summarization\n const finalMessages = [...validatedMessages, assistantSummaryCall, toolSummaryResponse];\n const allTextAfter = finalMessages\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCountAfter = countApproxTokens(allTextAfter);\n\n // Emit successful summarization event (use actual values from model response if available, fallback to estimates)\n const summarizationEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual ?? ((inputTokensActual ?? inputTokensEstimate) + (outputTokensActual ?? outputTokensEstimate)),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter,\n archivedCount: compressableMessages.length, // deprecated field for backward compatibility\n structuredSummary,\n integrity,\n };\n onEvent?.(summarizationEvent);\n\n // Record trace event for successful summarization\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"success\",\n durationMs,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual,\n messageList: sanitizeTracePayload([\n ...summaryPrompt,\n { role: \"assistant\", content: summaryText, name: \"summarization_result\" }\n ]),\n debug: {\n messagesCompressed: compressableMessages.length,\n tokenCountBefore,\n tokenCountAfter,\n tokensSaved: tokenCountBefore - tokenCountAfter,\n previousSummaryLength: previousSummary?.length || 0,\n usageFromModel: inputTokensActual !== undefined,\n cachedInputTokens: cachedInputTokens,\n integrity,\n },\n });\n\n return {\n messages: finalMessages as any,\n summaries,\n summaryRecords,\n watchdog: {\n ...(state.watchdog || {}),\n compactions: (state.watchdog?.compactions || 0) + 1,\n lastAction: \"summarized\",\n },\n };\n };\n}\n","import { countApproxTokens } from \"./utilTokens.js\";\nimport { Message } from \"../types.js\";\n\nexport type TokenLimits = {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n};\n\nexport async function applyTokenLimits({\n state,\n limits,\n}: {\n state: { messages: Message[]; summaries?: string[] };\n limits: {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n };\n}) {\n const messages = state.messages || [];\n const budget = limits.contextTokenLimit;\n let total = messages.reduce((acc, m) => acc + countApproxTokens(String((m as any).content || \"\")), 0);\n if (total <= budget) return state;\n\n // Trim oldest non-system messages until we're under budget\n const newMessages: Message[] = [...messages];\n while (total > budget && newMessages.length > 1) {\n // Find the first non-system message to remove (preserve system messages)\n const idx = newMessages.findIndex(m => m.role !== 'system');\n if (idx === -1) break; // Only system messages left\n const removed = newMessages.splice(idx, 1)[0];\n total -= countApproxTokens(String((removed as any).content || \"\"));\n }\n\n return { ...state, messages: newMessages };\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\n// no message helpers needed here\n\nconst todoStatusSchema = z.enum([\"not-started\", \"in-progress\", \"completed\", \"blocked\"]);\n\nconst todoWriteItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Sequential id starting from 1\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema,\n evidence: z.string().max(300).optional(),\n});\n\nconst todoUpdateItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Existing todo id to update\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema.optional(),\n evidence: z.string().max(300).optional(),\n});\n\nfunction normalizeTodoItem(item: any, existing?: any) {\n const id = item.id ?? existing?.id;\n const step = item.step || item.title || item.description || existing?.step || existing?.title || existing?.description || `Step ${id}`;\n const title = item.title || item.step || existing?.title || existing?.step || `Step ${id}`;\n const description = item.description || item.step || item.title || existing?.description || existing?.step || existing?.title || `Step ${id}`;\n\n return {\n ...existing,\n ...item,\n id,\n step,\n title,\n description,\n owner: item.owner || existing?.owner || \"agent\",\n exitCriteria: item.exitCriteria || existing?.exitCriteria || description || `Complete step ${id}`,\n status: item.status || existing?.status,\n evidence: item.evidence ?? existing?.evidence,\n };\n}\n\nfunction validatePlanInvariants(todoList: any[], requireSequentialIds: boolean) {\n const ids = todoList.map((item) => item.id);\n const uniqueIds = new Set(ids);\n if (uniqueIds.size !== ids.length) {\n return { ok: false, error: \"Todo ids must be unique.\" } as const;\n }\n\n if (requireSequentialIds) {\n const expectedIds = Array.from({ length: todoList.length }, (_, index) => index + 1);\n const isSequential = ids.every((id, index) => id === expectedIds[index]);\n if (!isSequential) {\n return { ok: false, error: \"Todo ids must be sequential starting from 1 for write operations.\" } as const;\n }\n }\n\n const inProgressCount = todoList.filter((item) => item.status === \"in-progress\").length;\n if (inProgressCount > 1) {\n return { ok: false, error: \"Only one todo item may be in-progress at a time.\" } as const;\n }\n\n return { ok: true } as const;\n}\n\nfunction calculateAdherenceScore(todoList: any[]) {\n const completedCount = todoList.filter((item) => item.status === \"completed\").length;\n return todoList.length === 0 ? 1 : Number((completedCount / todoList.length).toFixed(2));\n}\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: { toolHistory?: any[]; toolHistoryArchived?: any[]; todoList?: any[]; planVersion?: number; adherenceScore?: number },\n opts?: { planningEnabled?: boolean; outputSchema?: any }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session.\\n\\nOperations:\\n- read: return the current plan\\n- write: replace the full plan with a complete ordered todoList\\n- update: patch existing todo items by id without resending the whole plan\\n\\nRules:\\n- Use write only when creating or fully rewriting the plan\\n- After a plan exists, prefer update for status, evidence, or owner changes\\n- Update payloads should contain only the changed items\\n- When using update, pass expectedVersion to avoid overwriting a newer plan\\n- Keep ids unique; write operations must keep ids sequential starting from 1\\n- Keep at most ONE item in-progress at a time\\n- If update fails due to version mismatch, read the latest plan and retry\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\", \"update\"]),\n expectedVersion: z.number().int().min(0).optional(),\n todoList: z.array(z.union([todoWriteItemSchema, todoUpdateItemSchema])).optional()\n }),\n func: async ({ operation, expectedVersion, todoList }) => {\n const onEvent = (manageTodo as any)._stateRef?.__onEvent as undefined | ((e: any) => void);\n const currentVersion = stateRef.planVersion || 0;\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"read\", todoList: list, version: stateRef.planVersion || 1, adherenceScore: stateRef.adherenceScore || 0 });\n return list;\n }\n\n if (typeof expectedVersion === \"number\" && expectedVersion !== currentVersion) {\n return {\n status: \"error\",\n operation,\n error: \"Plan version mismatch. Read the latest plan and retry.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (!Array.isArray(todoList)) {\n return {\n status: \"error\",\n operation,\n error: \"todoList is required for write and update operations.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (operation === \"write\") {\n const parsed = z.array(todoWriteItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for write.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const normalizedList = parsed.data.map((item) => normalizeTodoItem(item));\n const validation = validatePlanInvariants(normalizedList, true);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = normalizedList;\n } else if (operation === \"update\") {\n const parsed = z.array(todoUpdateItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for update.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const currentList = Array.isArray(stateRef.todoList) ? stateRef.todoList : [];\n if (currentList.length === 0) {\n return {\n status: \"error\",\n operation,\n error: \"No existing plan to update. Use write first.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n const patchIds = new Set<number>();\n for (const item of parsed.data) {\n if (patchIds.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: \"Update payload contains duplicate todo ids.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n patchIds.add(item.id);\n }\n\n const currentMap = new Map(currentList.map((item) => [item.id, item]));\n for (const item of parsed.data) {\n if (!currentMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: `Cannot update missing todo id ${item.id}. Use write to replace the plan.`,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n }\n\n const mergedList = currentList.map((item) => {\n const patch = parsed.data.find((candidate) => candidate.id === item.id);\n return patch ? normalizeTodoItem(patch, item) : item;\n });\n const validation = validatePlanInvariants(mergedList, false);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = mergedList;\n }\n\n stateRef.planVersion = currentVersion + 1;\n stateRef.adherenceScore = calculateAdherenceScore(stateRef.todoList || []);\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n version: stateRef.planVersion || 1,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation, todoList: stateRef.todoList, version: stateRef.planVersion || 1, adherenceScore: stateRef.adherenceScore || 0 });\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n tools.push(manageTodo);\n }\n\n // get_tool_response retrieves original raw output by executionId\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE the full output of a tool execution whose response was archived, dropped, or later compacted in conversation history. When a tool response appears as 'ARCHIVED_TOOL_RESPONSE [executionId=xxx]', 'DROPPED_TOOL_RESPONSE [executionId=xxx]', or 'SUMMARIZED_TOOL_RESPONSE [...]', pass the referenced executionId to this tool to get the complete data. You can also pass the original tool_call_id from the tool call.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id or original tool_call_id\") }),\n func: async ({ executionId }) => {\n const matchesExecution = (t: any) => t?.executionId === executionId || t?.tool_call_id === executionId;\n let execution = stateRef.toolHistory?.find((t) => matchesExecution(t));\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => matchesExecution(t));\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n // mark mutable stateRef for toolsNode sync\n (getTool as any)._stateRef = stateRef;\n tools.push(getTool);\n\n // Structured output finalize tool (response) if outputSchema provided\n if (opts?.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema.shape ? opts.outputSchema : z.any(),\n func: async (data: any) => {\n // Validate directly against provided schema\n try {\n const validated = opts.outputSchema.parse ? opts.outputSchema.parse(data) : data;\n // store parsed result for toolsNode to pick up (toolsNode already looks for __finalStructuredOutput?)\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n return { error: 'Schema validation failed', details: e?.message };\n }\n }\n });\n (responseTool as any)._stateRef = stateRef;\n tools.push(responseTool);\n }\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\n\nfunction isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n if ((state.ctx as any)?.__needsSummarization) {\n return true;\n }\n\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n if (!resolved.summarization.enable) {\n return false;\n }\n\n const maxTok = resolved.summarization.summaryTriggerTokens;\n\n try {\n const allText = (state.messages || [])\n .filter((message: any) => !isSyntheticSummaryMessage(message))\n .map((m: any) => {\n if (typeof m.content === \"string\") return m.content;\n if (Array.isArray(m.content)) {\n return m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? JSON.stringify(c))).join('');\n }\n // Handle object content (e.g., tool results)\n if (m.content && typeof m.content === 'object') {\n return JSON.stringify(m.content);\n }\n return '';\n })\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n const contextRotScore = state.watchdog?.contextRotScore || 0;\n const needsSum = tokenCount > maxTok || (\n resolved.watchdog.enabled\n && resolved.watchdog.autoCompaction\n && contextRotScore >= resolved.watchdog.contextRotThreshold\n );\n // Debug log for development - can be removed in production\n if (process.env.DEBUG_SUMMARIZATION) {\n const msgCount = (state.messages || []).length;\n const toolMsgs = (state.messages || []).filter((m: any) => m.role === 'tool');\n const toolDetails = toolMsgs.map((m: any, i: number) => {\n const contentStr = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);\n return `[${i}] id:${m.tool_call_id?.slice(-8) || 'none'} len:${contentStr.length} preview:\"${contentStr.slice(0, 30)}...\"`;\n });\n console.log(`[Summarization] Messages: ${msgCount}, Tool messages: ${toolMsgs.length}`);\n toolDetails.forEach(d => console.log(` ${d}`));\n console.log(`[Summarization] Token count: ${tokenCount}, Max: ${maxTok}, Context rot: ${contextRotScore}, Needs summarization: ${needsSum}`);\n }\n return needsSum;\n } catch {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function finalizeDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function finalizeDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n","import type {\n MemoryFact,\n MemoryReadPolicy,\n MemoryScope,\n MemoryStore,\n ResolvedSmartAgentConfig,\n StructuredSummary,\n} from \"../types.js\";\n\ntype ScopeMap = Map<MemoryScope, MemoryFact[]>;\n\nfunction normalizeFact(scope: MemoryScope, fact: MemoryFact): MemoryFact {\n return {\n ...fact,\n scope,\n obsolete: fact.obsolete ?? false,\n lastUpdatedAt: fact.lastUpdatedAt ?? new Date().toISOString(),\n confidence: Number.isFinite(fact.confidence) ? fact.confidence : 0.5,\n };\n}\n\nexport class InMemoryMemoryStore implements MemoryStore {\n private readonly buckets: ScopeMap = new Map();\n\n async get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]> {\n const includeObsolete = options?.includeObsolete === true;\n const all = [...(this.buckets.get(scope) || [])]\n .filter((fact) => includeObsolete || !fact.obsolete)\n .sort((left, right) => new Date(right.lastUpdatedAt || 0).getTime() - new Date(left.lastUpdatedAt || 0).getTime());\n return typeof options?.limit === \"number\" ? all.slice(0, options.limit) : all;\n }\n\n async upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void> {\n const existing = [...(this.buckets.get(scope) || [])];\n\n for (const fact of facts) {\n const normalized = normalizeFact(scope, fact);\n const sameKey = existing.filter((entry) => entry.key === normalized.key && !entry.obsolete);\n for (const entry of sameKey) {\n if (entry.value !== normalized.value) {\n entry.obsolete = true;\n entry.lastUpdatedAt = new Date().toISOString();\n }\n }\n\n const match = existing.find((entry) => entry.key === normalized.key && entry.value === normalized.value && !entry.obsolete);\n if (match) {\n match.confidence = Math.max(match.confidence, normalized.confidence);\n match.sourceTurn = normalized.sourceTurn;\n match.ttl = normalized.ttl;\n match.tags = normalized.tags;\n match.lastUpdatedAt = normalized.lastUpdatedAt;\n } else {\n existing.push(normalized);\n }\n }\n\n this.buckets.set(scope, existing);\n }\n\n async markObsolete(scope: MemoryScope, keys: string[]): Promise<void> {\n const bucket = this.buckets.get(scope) || [];\n const now = new Date().toISOString();\n for (const fact of bucket) {\n if (keys.includes(fact.key)) {\n fact.obsolete = true;\n fact.lastUpdatedAt = now;\n }\n }\n this.buckets.set(scope, bucket);\n }\n\n async semanticSearch(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]> {\n const normalizedQuery = query.toLowerCase();\n const bucket = (this.buckets.get(scope) || []).filter((fact) => !fact.obsolete);\n const scored = bucket\n .map((fact) => {\n const haystack = `${fact.key} ${fact.value} ${(fact.tags || []).join(\" \")}`.toLowerCase();\n const score = haystack.includes(normalizedQuery) ? 2 : normalizedQuery.split(/\\s+/).filter(Boolean).reduce((acc, token) => acc + (haystack.includes(token) ? 1 : 0), 0);\n return { fact, score };\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.fact.confidence - left.fact.confidence)\n .map((entry) => entry.fact);\n return typeof options?.limit === \"number\" ? scored.slice(0, options.limit) : scored;\n }\n}\n\nexport function resolveMemoryStore(config: ResolvedSmartAgentConfig): MemoryStore | undefined {\n if (config.memory.store) return config.memory.store;\n if (config.memory.provider === \"inMemory\") return new InMemoryMemoryStore();\n return undefined;\n}\n\nexport async function readMemoryFacts(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n query: string,\n): Promise<MemoryFact[]> {\n if (!store) return [];\n const scope = config.memory.scope;\n const limit = config.context.lastTurnsToKeep;\n const policy: MemoryReadPolicy = config.memory.readPolicy;\n\n if (policy === \"recent_only\") {\n return store.get(scope, { limit });\n }\n\n if (policy === \"semantic\" && typeof store.semanticSearch === \"function\") {\n return store.semanticSearch(scope, query, { limit });\n }\n\n if (policy === \"hybrid\") {\n const recent = await store.get(scope, { limit: Math.max(3, Math.ceil(limit / 2)) });\n const semantic = typeof store.semanticSearch === \"function\"\n ? await store.semanticSearch(scope, query, { limit: Math.max(3, Math.ceil(limit / 2)) })\n : [];\n const deduped = new Map<string, MemoryFact>();\n for (const fact of [...semantic, ...recent]) {\n deduped.set(`${fact.key}:${fact.value}`, fact);\n }\n return [...deduped.values()].slice(0, limit);\n }\n\n return store.get(scope, { limit });\n}\n\nexport async function writeSummaryFactsToMemory(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n summary: StructuredSummary | undefined,\n sourceTurn: number,\n): Promise<MemoryFact[]> {\n if (!store || !summary) return [];\n\n const facts: MemoryFact[] = summary.stable_facts.map((fact) => ({\n key: fact.key,\n value: fact.value,\n sourceTurn,\n confidence: fact.confidence ?? 0.8,\n obsolete: false,\n tags: [\"summary_fact\"],\n }));\n\n if (summary.discarded_obsolete.length > 0) {\n await store.markObsolete(config.memory.scope, summary.discarded_obsolete);\n }\n\n if (facts.length > 0) {\n await store.upsert(config.memory.scope, facts);\n }\n\n return store.get(config.memory.scope, { limit: config.context.lastTurnsToKeep + summary.stable_facts.length });\n}\n\nexport function renderMemoryFacts(facts: MemoryFact[]): string {\n if (facts.length === 0) return \"\";\n return [\n \"Memory facts:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value} (confidence ${fact.confidence.toFixed(2)})`),\n ].join(\"\\n\");\n}","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance } from \"../types.js\";\nimport type { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools } from \"../contextTools.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\nimport { normalizeSmartAgentOptions } from \"./runtimeConfig.js\";\nimport { buildModelMessages, estimateContextRotScore } from \"./contextPolicy.js\";\nimport { readMemoryFacts, resolveMemoryStore, writeSummaryFactsToMemory } from \"./memory.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n const resolved = normalizeSmartAgentOptions(opts);\n const planningEnabled = resolved.planning.mode !== 'off';\n const memoryStore = resolveMemoryStore(resolved);\n const runtimeOpts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> } = {\n ...opts,\n runtimeProfile: resolved.runtimeProfile,\n limits: resolved.limits,\n summarization: resolved.summarization,\n context: resolved.context,\n planning: resolved.planning,\n delegation: resolved.delegation,\n memory: { ...resolved.memory, store: memoryStore },\n toolResponses: resolved.toolResponses,\n watchdog: resolved.watchdog,\n useTodoList: planningEnabled,\n };\n\n // Prepare context tools (todo + get_tool_response). Avoid duplicating response tool; base agent will add it if schema provided.\n const stateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const contextTools = createContextTools(stateRef, { planningEnabled, outputSchema: undefined });\n const mergedTools = [...((opts.tools as any) ?? []), ...contextTools];\n\n // Compose base agent\n const base = createAgent<TOutput>({ ...runtimeOpts, tools: mergedTools });\n base.__runtime.runtimeProfile = resolved.runtimeProfile;\n base.__runtime.smart = resolved;\n\n const summarizationEnabled = resolved.summarization.enable !== false;\n const summarizer = summarizationEnabled ? createContextSummarizeNode(runtimeOpts) : undefined;\n const decideBefore = resolverDecisionFactory(runtimeOpts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(runtimeOpts, summarizationEnabled);\n\n const structuredOutputHint = opts.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const runtimeHint = [\n resolved.runtimeProfile === resolved.baseProfile\n ? `Runtime profile: ${resolved.runtimeProfile}.`\n : `Runtime profile: ${resolved.runtimeProfile} (base: ${resolved.baseProfile}).`,\n `Context policy: ${resolved.context.policy}.`,\n `Planning mode: ${resolved.planning.mode}. Replan policy: ${resolved.planning.replanPolicy}.`,\n `Delegation mode: ${resolved.delegation.mode}. Child context policy: ${resolved.delegation.childContextPolicy}.`,\n `Tool response policy: ${resolved.context.toolResponsePolicy}.`,\n ].join('\\n');\n\n function latestUserPrompt(messages: any[]): string {\n const latest = [...messages].reverse().find((message) => message.role === 'user');\n if (!latest) return '';\n return typeof latest.content === 'string'\n ? latest.content\n : Array.isArray(latest.content)\n ? latest.content.map((part: any) => (typeof part === 'string' ? part : part?.text ?? part?.content ?? '')).join(' ')\n : '';\n }\n\n async function syncMemory(state: SmartState): Promise<SmartState> {\n const query = latestUserPrompt(state.messages || []);\n const memoryFacts = await readMemoryFacts(memoryStore, resolved, query);\n return { ...state, memoryFacts };\n }\n\n async function persistLatestSummary(state: SmartState): Promise<SmartState> {\n if (!memoryStore) return state;\n if (resolved.memory.writePolicy === 'manual') return state;\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n if (!latestSummary) return state;\n if (resolved.memory.writePolicy === 'auto_important' && latestSummary.stable_facts.length === 0) {\n return state;\n }\n const memoryFacts = await writeSummaryFactsToMemory(memoryStore, resolved, latestSummary, Math.max(1, (state.messages || []).filter((message) => message.role === 'user').length));\n return { ...state, memoryFacts };\n }\n\n function syncPlanState(state: SmartState): SmartState {\n if (!Array.isArray(stateRef.todoList)) return state;\n return {\n ...state,\n plan: {\n version: stateRef.planVersion || state.planVersion || 1,\n steps: stateRef.todoList,\n lastUpdated: new Date().toISOString(),\n adherenceScore: stateRef.adherenceScore || 0,\n },\n planVersion: stateRef.planVersion || state.planVersion || 1,\n };\n }\n\n function systemMessage(): any {\n const sys = buildSystemPrompt(\n [opts.systemPrompt, runtimeHint, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n planningEnabled,\n opts.name || \"Agent\",\n opts.todoListPrompt,\n );\n return { role: 'system', content: sys } as any;\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // wire stateRef for context tools\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n stateRef.todoList = input.plan?.steps;\n stateRef.planVersion = input.planVersion || input.plan?.version || 0;\n stateRef.adherenceScore = input.plan?.adherenceScore || 0;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(), ...(input.messages || [])];\n let state: SmartState = await syncMemory({ ...input, messages: seedMessages } as SmartState);\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n let rawMessages = [...seedMessages];\n const effectiveMaxToolCalls = (config?.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number;\n const iterationLimit = Math.max(effectiveMaxToolCalls * 3 + 5, 30);\n let previousTokenCount = countApproxTokens(rawMessages.map((message: any) => typeof message.content === 'string' ? message.content : JSON.stringify(message.content)).join('\\n'));\n\n for (let i = 0; i < iterationLimit; i++) {\n state = { ...state, messages: rawMessages } as SmartState;\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n // Prevent infinite loop if summarizer returns no changes (e.g. error or nothing to summarize)\n if (!delta || Object.keys(delta).length === 0) {\n // Summarization failed to produce a change. Proceed to agent to avoid stall, \n // though it might hit token limits.\n } else {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n continue; // run decision again before calling base\n }\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const modelMessages = buildModelMessages(state, resolved);\n const res = await base.invoke({ ...state, messages: modelMessages } as SmartState, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n // Preserve summaries from current state when merging with result state\n const currentSummaries = state.summaries;\n const currentSummaryRecords = state.summaryRecords;\n const currentPlan = state.plan;\n const appendedMessages = res.messages.slice(modelMessages.length);\n rawMessages = [...rawMessages, ...appendedMessages];\n state = ((res.state as SmartState) || { ...state, messages: res.messages }) as SmartState;\n state = { ...state, messages: rawMessages } as SmartState;\n // Restore summaries if they were lost during state merge\n if (currentSummaries && currentSummaries.length > 0 && (!state.summaries || state.summaries.length === 0)) {\n state = { ...state, summaries: currentSummaries };\n }\n if (currentSummaryRecords && currentSummaryRecords.length > 0 && (!state.summaryRecords || state.summaryRecords.length === 0)) {\n state = { ...state, summaryRecords: currentSummaryRecords };\n }\n if (currentPlan && !state.plan) {\n state = { ...state, plan: currentPlan };\n }\n state = syncPlanState(await syncMemory(state));\n stateRef.toolHistory = state.toolHistory;\n stateRef.toolHistoryArchived = state.toolHistoryArchived;\n\n const currentTokenCount = countApproxTokens(rawMessages.map((message: any) => typeof message.content === 'string' ? message.content : JSON.stringify(message.content)).join('\\n'));\n const tokenDrift = Math.max(0, currentTokenCount - previousTokenCount);\n const toolMessagesThisTurn = appendedMessages.filter((message: any) => message.role === 'tool').length;\n const overToolingRate = appendedMessages.length === 0 ? 0 : Number((toolMessagesThisTurn / appendedMessages.length).toFixed(2));\n state = {\n ...state,\n watchdog: {\n tokenDrift,\n contextRotScore: estimateContextRotScore(state),\n overToolingRate,\n compactions: state.watchdog?.compactions || 0,\n lastAction: appendedMessages.length > 0 ? 'agent_turn' : state.watchdog?.lastAction,\n },\n };\n previousTokenCount = currentTokenCount;\n\n if (resolved.watchdog.enabled && resolved.watchdog.autoCompaction) {\n const shouldCompact = tokenDrift >= resolved.watchdog.tokenDriftThreshold\n || (state.watchdog?.overToolingRate || 0) >= resolved.watchdog.overToolingSpikeThreshold\n || (state.watchdog?.contextRotScore || 0) >= resolved.watchdog.contextRotThreshold;\n if (shouldCompact) {\n state = { ...state, ctx: { ...(state.ctx || {}), __needsSummarization: true } };\n }\n }\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n // Clear the flag\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n // Run summarization\n const delta = await summarizer(state);\n // If delta is valid, apply and loop back to retry the agent pass after compaction.\n // If delta is empty, summarization had nothing to compress — fall through to\n // the normal break logic so the loop can terminate.\n if (delta && Object.keys(delta).length > 0) {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n continue; // Loop will attempt another agent pass after summarization\n }\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n if (delta && Object.keys(delta).length > 0) {\n state = await persistLatestSummary(syncPlanState({ ...state, ...delta } as SmartState));\n rawMessages = [...(state.messages || rawMessages)];\n // Loop will attempt another agent pass\n continue;\n }\n }\n }\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n // Ensure summaries are preserved in the final result\n if (state.summaries && state.summaries.length > 0) {\n if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n } else {\n lastResult = { ...lastResult, state: { ...state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n }\n } else if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, watchdog: state.watchdog, messages: rawMessages } };\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import type {\n EvalCase,\n EvalCaseResult,\n EvalHarnessMetrics,\n EvalProfileDescriptor,\n EvalProfileTarget,\n EvalHarnessResult,\n RuntimeProfile,\n SmartAgentEvent,\n SmartAgentInstance,\n SmartState,\n} from \"../types.js\";\n\nexport type EvalHarnessParams = {\n profiles: EvalProfileTarget[];\n cases: EvalCase[];\n createAgent: (profile: RuntimeProfile, descriptor: EvalProfileDescriptor) => SmartAgentInstance<any>;\n};\n\nfunction normalizeProfileTarget(target: EvalProfileTarget): EvalProfileDescriptor {\n if (typeof target === \"string\") {\n return {\n label: target,\n runtimeProfile: target,\n baseProfile: target === \"custom\" ? \"balanced\" : target,\n };\n }\n return {\n label: target.label,\n runtimeProfile: target.runtimeProfile,\n baseProfile: target.baseProfile ?? (target.runtimeProfile === \"custom\" ? target.customProfile?.extends ?? \"balanced\" : target.runtimeProfile),\n customProfile: target.customProfile,\n };\n}\n\nfunction normalizeText(value: string | undefined): string {\n return (value || \"\").toLowerCase();\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 1;\n return Number((numerator / denominator).toFixed(3));\n}\n\nfunction sum(values: number[]): number {\n return values.reduce((acc, value) => acc + value, 0);\n}\n\nfunction mean(values: number[]): number {\n if (values.length === 0) return 0;\n return Number((sum(values) / values.length).toFixed(3));\n}\n\nfunction extractTotalTokens(usage: any): number {\n if (!usage?.totals || typeof usage.totals !== \"object\") return 0;\n return Object.values(usage.totals).reduce((acc: number, entry: any) => acc + (Number(entry?.total) || 0), 0);\n}\n\nfunction caseResultFromRun(\n descriptor: EvalProfileDescriptor,\n testCase: EvalCase,\n content: string,\n events: SmartAgentEvent[],\n state: SmartState | undefined,\n latencyMs: number,\n totalTokens: number,\n): EvalCaseResult {\n const normalizedContent = normalizeText(content);\n const matchedPhrases = (testCase.expectedPhrases || []).filter((phrase) => normalizedContent.includes(normalizeText(phrase)));\n const matchedFacts = (testCase.expectedFacts || []).filter((fact) => {\n const memoryMatch = state?.memoryFacts?.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value)));\n const summaryMatch = state?.summaryRecords?.some((record) => record.stable_facts.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value))));\n return Boolean(memoryMatch || summaryMatch || normalizedContent.includes(normalizeText(fact.value)));\n });\n const forbiddenMisses = (testCase.forbiddenPhrases || []).filter((phrase) => !normalizedContent.includes(normalizeText(phrase)));\n const toolCalls = events.filter((event) => event.type === \"tool_call\" && event.phase === \"success\") as Array<Extract<SmartAgentEvent, { type: \"tool_call\" }>>;\n const expectedToolHits = (testCase.expectedToolNames || []).filter((toolName) => toolCalls.some((event) => event.name === toolName));\n const toolPrecision = ratio(expectedToolHits.length, Math.max(toolCalls.length, 1));\n const recallAccuracy = ratio(matchedPhrases.length + matchedFacts.length, (testCase.expectedPhrases?.length || 0) + (testCase.expectedFacts?.length || 0));\n const obsoleteDropAccuracy = ratio(forbiddenMisses.length, testCase.forbiddenPhrases?.length || 0);\n const trajectoryScore = ratio(expectedToolHits.length, testCase.expectedToolNames?.length || 0);\n const hadRecoverableError = events.some((event) => event.type === \"tool_call\" && event.phase === \"error\");\n const recoveryRate = hadRecoverableError ? Number((normalizedContent.length > 0 ? 1 : 0).toFixed(3)) : 1;\n const overToolingRate = toolCalls.length === 0 ? 0 : Number((Math.max(0, toolCalls.length - Math.max(testCase.expectedToolNames?.length || 0, 1)) / toolCalls.length).toFixed(3));\n const success = recallAccuracy >= 0.8 && obsoleteDropAccuracy >= 0.8;\n\n return {\n id: testCase.id,\n family: testCase.family,\n success,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore: Number(((trajectoryScore + toolPrecision) / 2).toFixed(3)),\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n notes: success ? [] : [\n recallAccuracy < 0.8 ? \"Recall below threshold.\" : \"\",\n obsoleteDropAccuracy < 0.8 ? \"Obsolete filtering below threshold.\" : \"\",\n trajectoryScore < 0.5 ? \"Tool trajectory diverged from expectation.\" : \"\",\n ].filter(Boolean),\n };\n}\n\nfunction aggregateMetrics(caseResults: EvalCaseResult[]): EvalHarnessMetrics {\n const taskSuccess = ratio(caseResults.filter((result) => result.success).length, caseResults.length);\n const recallAccuracy = mean(caseResults.map((result) => result.recallAccuracy));\n const obsoleteDropAccuracy = mean(caseResults.map((result) => result.obsoleteDropAccuracy));\n const trajectoryScore = mean(caseResults.map((result) => result.trajectoryScore));\n const recoveryRate = mean(caseResults.map((result) => result.recoveryRate));\n const overToolingRate = mean(caseResults.map((result) => result.overToolingRate));\n const latencyMs = mean(caseResults.map((result) => result.latencyMs));\n const totalTokens = sum(caseResults.map((result) => result.totalTokens || 0));\n const toolPrecision = trajectoryScore;\n const costScore = totalTokens <= 0 ? 1 : Number((1 / (1 + totalTokens / 10000)).toFixed(3));\n const score = Number((\n (0.45 * taskSuccess)\n + (0.20 * trajectoryScore)\n + (0.15 * toolPrecision)\n + (0.10 * recoveryRate)\n + (0.10 * costScore)\n ).toFixed(3));\n\n return {\n taskSuccess,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore,\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n score,\n };\n}\n\nexport async function runSmartAgentEvalHarness(params: EvalHarnessParams): Promise<EvalHarnessResult[]> {\n const results: EvalHarnessResult[] = [];\n\n for (const profileTarget of params.profiles) {\n const descriptor = normalizeProfileTarget(profileTarget);\n const caseResults: EvalCaseResult[] = [];\n\n for (const testCase of params.cases) {\n const agent = params.createAgent(descriptor.runtimeProfile, descriptor);\n const events: SmartAgentEvent[] = [];\n const startedAt = Date.now();\n const result = await agent.invoke({\n messages: [{ role: \"user\", content: testCase.prompt }],\n } as SmartState, {\n onEvent: (event) => {\n events.push(event);\n },\n });\n\n caseResults.push(caseResultFromRun(\n descriptor,\n testCase,\n result.content,\n events,\n result.state,\n Date.now() - startedAt,\n extractTotalTokens(result.metadata?.usage),\n ));\n }\n\n results.push({\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n metrics: aggregateMetrics(caseResults),\n cases: caseResults,\n });\n }\n\n return results;\n}","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n"]}