@agentforge/tools 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/web/http-client.ts","../src/web/scraper.ts","../src/web/html-parser.ts","../src/web/url-validator.ts","../src/web/web-search/schemas.ts","../src/web/web-search/utils.ts","../src/web/web-search/providers/duckduckgo.ts","../src/web/web-search/providers/serper.ts","../src/web/web-search/index.ts","../src/data/json-processor.ts","../src/data/csv-parser.ts","../src/data/xml-parser.ts","../src/data/transformer.ts","../src/file/file-operations.ts","../src/file/directory-operations.ts","../src/file/path-utilities.ts","../src/utility/date-time.ts","../src/utility/string-utilities.ts","../src/utility/math-operations.ts","../src/utility/validation.ts"],"names":["toolBuilder","ToolCategory","z","axios","cheerio","resolve","path","fs","files","path2","matches","basename","dirname","relative","parse"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * HTTP Client Tool\n * \n * Make HTTP requests with support for GET, POST, PUT, DELETE, PATCH methods.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport axios, { AxiosRequestConfig } from 'axios';\n\n/**\n * HTTP method enum\n */\nconst HttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n/**\n * HTTP request schema\n */\nconst httpRequestSchema = z.object({\n url: z.string().url().describe('The URL to make the request to'),\n method: HttpMethod.default('GET').describe('HTTP method to use'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n body: z.any().optional().describe('Optional request body (for POST, PUT, PATCH)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP response type\n */\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n url: string;\n method: string;\n}\n\n/**\n * Create HTTP client tool\n * \n * @example\n * ```ts\n * const result = await httpClient.execute({\n * url: 'https://api.example.com/data',\n * method: 'GET',\n * headers: { 'Authorization': 'Bearer token' }\n * });\n * ```\n */\nexport const httpClient = toolBuilder()\n .name('http-client')\n .description('Make HTTP requests to web APIs and services. Supports GET, POST, PUT, DELETE, PATCH methods with custom headers and body.')\n .category(ToolCategory.WEB)\n .tags(['http', 'api', 'request', 'web'])\n .schema(httpRequestSchema)\n .implement(async (input): Promise<HttpResponse> => {\n const config: AxiosRequestConfig = {\n method: input.method,\n url: input.url,\n headers: input.headers,\n data: input.body,\n timeout: input.timeout,\n params: input.params,\n validateStatus: () => true, // Don't throw on any status code\n };\n\n const response = await axios(config);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers as Record<string, string>,\n data: response.data,\n url: input.url,\n method: input.method ?? 'GET',\n };\n })\n .build();\n\n/**\n * Create a simple GET request tool\n */\nexport const httpGet = toolBuilder()\n .name('http-get')\n .description('Make a simple HTTP GET request to a URL and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'get', 'fetch', 'web'])\n .schema(z.object({\n url: z.string().url().describe('The URL to fetch'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n }))\n .implement(async (input) => {\n const response = await axios.get(input.url, {\n headers: input.headers,\n params: input.params,\n timeout: 30000,\n });\n return response.data;\n })\n .build();\n\n/**\n * Create a simple POST request tool\n */\nexport const httpPost = toolBuilder()\n .name('http-post')\n .description('Make a simple HTTP POST request with JSON body and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'post', 'api', 'web'])\n .schema(z.object({\n url: z.string().url().describe('The URL to post to'),\n body: z.any().describe('The request body (will be sent as JSON)'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n }))\n .implement(async (input) => {\n const response = await axios.post(input.url, input.body, {\n headers: {\n 'Content-Type': 'application/json',\n ...input.headers,\n },\n timeout: 30000,\n });\n return response.data;\n })\n .build();\n\n","/**\n * Web Scraper Tool\n * \n * Scrape and extract data from web pages using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport axios from 'axios';\nimport * as cheerio from 'cheerio';\n\n/**\n * Scraper result type\n */\nexport interface ScraperResult {\n url: string;\n title?: string;\n text?: string;\n html?: string;\n links?: string[];\n images?: string[];\n metadata?: Record<string, string>;\n selected?: any;\n}\n\n/**\n * Web scraper tool\n * \n * @example\n * ```ts\n * const result = await webScraper.execute({\n * url: 'https://example.com',\n * selector: 'article h1',\n * extractText: true\n * });\n * ```\n */\nexport const webScraper = toolBuilder()\n .name('web-scraper')\n .description('Scrape and extract data from web pages. Can extract text, HTML, links, images, and use CSS selectors to target specific elements.')\n .category(ToolCategory.WEB)\n .tags(['scraper', 'web', 'html', 'extract', 'parse'])\n .schema(z.object({\n url: z.string().url().describe('The URL of the web page to scrape'),\n selector: z.string().optional().describe('Optional CSS selector to extract specific elements'),\n extractText: z.boolean().default(true).describe('Extract text content from the page'),\n extractHtml: z.boolean().default(false).describe('Extract raw HTML content'),\n extractLinks: z.boolean().default(false).describe('Extract all links from the page'),\n extractImages: z.boolean().default(false).describe('Extract all image URLs from the page'),\n extractMetadata: z.boolean().default(false).describe('Extract meta tags (title, description, etc.)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n }))\n .implement(async (input): Promise<ScraperResult> => {\n // Fetch the page\n const response = await axios.get(input.url, {\n timeout: input.timeout,\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)',\n },\n });\n\n const html = response.data;\n const $ = cheerio.load(html);\n\n const result: ScraperResult = {\n url: input.url,\n };\n\n // Apply selector if provided\n const $selected = input.selector ? $(input.selector) : $('body');\n\n // Extract text\n if (input.extractText) {\n result.text = $selected.text().trim();\n }\n\n // Extract HTML\n if (input.extractHtml) {\n result.html = $selected.html() || '';\n }\n\n // Extract links\n if (input.extractLinks) {\n result.links = [];\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href');\n if (href) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(href, input.url).href;\n result.links!.push(absoluteUrl);\n } catch {\n result.links!.push(href);\n }\n }\n });\n }\n\n // Extract images\n if (input.extractImages) {\n result.images = [];\n $('img[src]').each((_, el) => {\n const src = $(el).attr('src');\n if (src) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(src, input.url).href;\n result.images!.push(absoluteUrl);\n } catch {\n result.images!.push(src);\n }\n }\n });\n }\n\n // Extract metadata\n if (input.extractMetadata) {\n result.metadata = {};\n \n // Title\n const title = $('title').text() || $('meta[property=\"og:title\"]').attr('content');\n if (title) result.metadata.title = title;\n\n // Description\n const description = $('meta[name=\"description\"]').attr('content') || \n $('meta[property=\"og:description\"]').attr('content');\n if (description) result.metadata.description = description;\n\n // Other meta tags\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) {\n result.metadata![name] = content;\n }\n });\n }\n\n // If selector was provided, return the selected elements\n if (input.selector) {\n result.selected = $selected.map((_, el) => ({\n text: $(el).text().trim(),\n html: $(el).html(),\n })).get();\n }\n\n return result;\n })\n .build();\n\n","/**\n * HTML Parser Tool\n * \n * Parse HTML content and extract data using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as cheerio from 'cheerio';\n\n/**\n * HTML parser tool\n * \n * @example\n * ```ts\n * const result = await htmlParser.execute({\n * html: '<div class=\"content\"><h1>Title</h1><p>Text</p></div>',\n * selector: '.content h1'\n * });\n * ```\n */\nexport const htmlParser = toolBuilder()\n .name('html-parser')\n .description('Parse HTML content and extract data using CSS selectors. Returns text, attributes, and structure of selected elements.')\n .category(ToolCategory.WEB)\n .tags(['html', 'parser', 'css', 'selector', 'extract'])\n .schema(z.object({\n html: z.string().describe('The HTML content to parse'),\n selector: z.string().describe('CSS selector to find elements'),\n extractText: z.boolean().default(true).describe('Extract text content from selected elements'),\n extractHtml: z.boolean().default(false).describe('Extract inner HTML of selected elements'),\n extractAttributes: z.array(z.string().describe(\"String value\")).optional().describe('List of attributes to extract (e.g., [\"href\", \"src\", \"class\"])'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const $selected = $(input.selector);\n\n const results = $selected.map((_, el) => {\n const $el = $(el);\n const item: any = {};\n\n if (input.extractText) {\n item.text = $el.text().trim();\n }\n\n if (input.extractHtml) {\n item.html = $el.html();\n }\n\n if (input.extractAttributes && input.extractAttributes.length > 0) {\n item.attributes = {};\n for (const attr of input.extractAttributes) {\n const value = $el.attr(attr);\n if (value !== undefined) {\n item.attributes[attr] = value;\n }\n }\n }\n\n return item;\n }).get();\n\n return {\n count: results.length,\n results,\n };\n })\n .build();\n\n/**\n * Extract links from HTML\n */\nexport const extractLinks = toolBuilder()\n .name('extract-links')\n .description('Extract all links (anchor tags) from HTML content with their text and href attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'links', 'extract', 'anchor'])\n .schema(z.object({\n html: z.string().describe('The HTML content to extract links from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative links'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const links: Array<{ text: string; href: string; title?: string }> = [];\n\n $('a[href]').each((_, el) => {\n const $el = $(el);\n let href = $el.attr('href') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && href) {\n try {\n href = new URL(href, input.baseUrl).href;\n } catch {\n // Keep original href if URL parsing fails\n }\n }\n\n links.push({\n text: $el.text().trim(),\n href,\n title: $el.attr('title'),\n });\n });\n\n return {\n count: links.length,\n links,\n };\n })\n .build();\n\n/**\n * Extract images from HTML\n */\nexport const extractImages = toolBuilder()\n .name('extract-images')\n .description('Extract all images from HTML content with their src, alt, and other attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'images', 'extract', 'img'])\n .schema(z.object({\n html: z.string().describe('The HTML content to extract images from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative image URLs'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const images: Array<{ src: string; alt?: string; title?: string; width?: string; height?: string }> = [];\n\n $('img[src]').each((_, el) => {\n const $el = $(el);\n let src = $el.attr('src') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && src) {\n try {\n src = new URL(src, input.baseUrl).href;\n } catch {\n // Keep original src if URL parsing fails\n }\n }\n\n images.push({\n src,\n alt: $el.attr('alt'),\n title: $el.attr('title'),\n width: $el.attr('width'),\n height: $el.attr('height'),\n });\n });\n\n return {\n count: images.length,\n images,\n };\n })\n .build();\n\n","/**\n * URL Validator and Parser Tool\n * \n * Validate, parse, and manipulate URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * URL validation result\n */\nexport interface UrlValidationResult {\n valid: boolean;\n url?: string;\n protocol?: string;\n hostname?: string;\n port?: string;\n pathname?: string;\n search?: string;\n hash?: string;\n origin?: string;\n error?: string;\n}\n\n/**\n * URL validator tool\n * \n * @example\n * ```ts\n * const result = await urlValidator.execute({\n * url: 'https://example.com/path?query=value#hash'\n * });\n * ```\n */\nexport const urlValidator = toolBuilder()\n .name('url-validator')\n .description('Validate and parse URLs. Returns detailed information about the URL structure including protocol, hostname, path, query parameters, and hash.')\n .category(ToolCategory.WEB)\n .tags(['url', 'validator', 'parse', 'validate'])\n .schema(z.object({\n url: z.string().describe('The URL to validate and parse'),\n }))\n .implement(async (input): Promise<UrlValidationResult> => {\n try {\n const parsed = new URL(input.url);\n \n return {\n valid: true,\n url: parsed.href,\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n origin: parsed.origin,\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Invalid URL',\n };\n }\n })\n .build();\n\n/**\n * URL builder tool\n */\nexport const urlBuilder = toolBuilder()\n .name('url-builder')\n .description('Build a URL from components (protocol, hostname, path, query parameters, hash).')\n .category(ToolCategory.WEB)\n .tags(['url', 'builder', 'construct'])\n .schema(z.object({\n protocol: z.string().default('https').describe('Protocol (http, https, etc.)'),\n hostname: z.string().describe('Hostname or domain name'),\n port: z.string().optional().describe('Optional port number'),\n pathname: z.string().default('/').describe('URL path'),\n query: z.record(z.string()).optional().describe('Query parameters as key-value pairs'),\n hash: z.string().optional().describe('URL hash/fragment'),\n }))\n .implement(async (input) => {\n const url = new URL(`${input.protocol}://${input.hostname}`);\n\n if (input.port) {\n url.port = input.port;\n }\n\n url.pathname = input.pathname ?? '/';\n \n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n \n if (input.hash) {\n url.hash = input.hash;\n }\n \n return {\n url: url.href,\n components: {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n origin: url.origin,\n },\n };\n })\n .build();\n\n/**\n * URL query parser tool\n */\nexport const urlQueryParser = toolBuilder()\n .name('url-query-parser')\n .description('Parse query parameters from a URL or query string into a key-value object.')\n .category(ToolCategory.WEB)\n .tags(['url', 'query', 'parse', 'params'])\n .schema(z.object({\n input: z.string().describe('URL or query string to parse (e.g., \"?foo=bar&baz=qux\" or full URL)'),\n }))\n .implement(async (input) => {\n let searchParams: URLSearchParams;\n \n try {\n // Try to parse as full URL first\n const url = new URL(input.input);\n searchParams = url.searchParams;\n } catch {\n // If that fails, treat as query string\n const queryString = input.input.startsWith('?') ? input.input.slice(1) : input.input;\n searchParams = new URLSearchParams(queryString);\n }\n \n const params: Record<string, string | string[]> = {};\n \n searchParams.forEach((value, key) => {\n if (params[key]) {\n // Handle multiple values for same key\n if (Array.isArray(params[key])) {\n (params[key] as string[]).push(value);\n } else {\n params[key] = [params[key] as string, value];\n }\n } else {\n params[key] = value;\n }\n });\n \n return {\n params,\n count: Object.keys(params).length,\n };\n })\n .build();\n\n","/**\n * Web Search Tool - Zod Schemas\n */\n\nimport { z } from 'zod';\n\n/**\n * Web search input schema\n */\nexport const webSearchSchema = z.object({\n query: z.string().min(1).describe('The search query'),\n maxResults: z\n .number()\n .min(1)\n .max(50)\n .default(10)\n .describe('Maximum number of results to return (1-50)'),\n preferSerper: z\n .boolean()\n .default(false)\n .describe('Prefer Serper API if available (requires SERPER_API_KEY)'),\n timeout: z\n .number()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe('Request timeout in milliseconds (1000-60000, default: 30000)'),\n});\n\n/**\n * Search result schema\n */\nexport const searchResultSchema = z.object({\n title: z.string(),\n link: z.string().url(),\n snippet: z.string(),\n position: z.number().optional(),\n});\n\n/**\n * Web search output schema\n */\nexport const webSearchOutputSchema = z.object({\n success: z.boolean(),\n source: z.enum(['duckduckgo', 'serper']),\n query: z.string(),\n results: z.array(searchResultSchema),\n totalResults: z.number().optional(),\n error: z.string().optional(),\n metadata: z\n .object({\n responseTime: z.number().optional(),\n fallbackUsed: z.boolean().optional(),\n })\n .optional(),\n});\n\n","/**\n * Web Search Tool - Utility Functions\n */\n\nimport type { RetryConfig } from './types.js';\n\n/**\n * Get Serper API key from environment\n */\nexport function getSerperApiKey(): string | undefined {\n return process.env.SERPER_API_KEY;\n}\n\n/**\n * Check if Serper API is available\n */\nexport function isSerperAvailable(): boolean {\n return !!getSerperApiKey();\n}\n\n/**\n * Measure execution time of an async function\n */\nexport async function measureTime<T>(\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = Date.now();\n const result = await fn();\n const duration = Date.now() - start;\n return { result, duration };\n}\n\n/**\n * Sanitize search query\n */\nexport function sanitizeQuery(query: string): string {\n return query.trim().replace(/\\s+/g, ' ');\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelay: 1000, // 1 second\n maxDelay: 10000, // 10 seconds\n backoffMultiplier: 2,\n};\n\n/**\n * Default timeout for search requests (30 seconds)\n */\nexport const DEFAULT_TIMEOUT = 30000;\n\n/**\n * Check if error is retryable (network errors, timeouts, 5xx errors)\n */\nexport function isRetryableError(error: any): boolean {\n // Network errors\n if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {\n return true;\n }\n\n // Timeout errors\n if (error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {\n return true;\n }\n\n // 5xx server errors (but not 4xx client errors)\n if (error.response?.status >= 500 && error.response?.status < 600) {\n return true;\n }\n\n // Rate limiting (429) - retryable with backoff\n if (error.response?.status === 429) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n config: RetryConfig = DEFAULT_RETRY_CONFIG\n): Promise<T> {\n let lastError: any;\n let delay = config.initialDelay;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: any) {\n lastError = error;\n\n // Don't retry if error is not retryable\n if (!isRetryableError(error)) {\n throw error;\n }\n\n // Don't retry if we've exhausted all attempts\n if (attempt === config.maxRetries) {\n break;\n }\n\n // Wait before retrying\n await sleep(delay);\n\n // Increase delay for next attempt (exponential backoff)\n delay = Math.min(delay * config.backoffMultiplier, config.maxDelay);\n }\n }\n\n // All retries exhausted\n throw lastError;\n}\n\n","/**\n * DuckDuckGo Search Provider\n * \n * Free search provider using DuckDuckGo's Instant Answer API.\n * No API key required.\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * DuckDuckGo API response structure\n */\ninterface DuckDuckGoResponse {\n Abstract?: string;\n AbstractText?: string;\n AbstractSource?: string;\n AbstractURL?: string;\n Heading?: string;\n RelatedTopics?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n Results?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n}\n\n/**\n * DuckDuckGo search provider implementation\n */\nexport class DuckDuckGoProvider implements SearchProvider {\n name = 'duckduckgo' as const;\n\n /**\n * DuckDuckGo is always available (no API key required)\n */\n isAvailable(): boolean {\n return true;\n }\n\n /**\n * Search using DuckDuckGo Instant Answer API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n return retryWithBackoff(async () => {\n try {\n const response = await axios.get<DuckDuckGoResponse>(\n 'https://api.duckduckgo.com/',\n {\n params: {\n q: query,\n format: 'json',\n },\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://github.com/agentforge)',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n throw new Error(`DuckDuckGo search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize DuckDuckGo response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: DuckDuckGoResponse,\n maxResults: number\n ): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Early return if maxResults is 0\n if (maxResults <= 0) {\n return results;\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n results.push({\n title: data.Heading || 'Result',\n link: data.AbstractURL,\n snippet: data.Abstract,\n position: 1,\n });\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add related topics (optimized: only process what we need)\n if (data.RelatedTopics && data.RelatedTopics.length > 0) {\n const remaining = maxResults - results.length;\n const topicsToProcess = data.RelatedTopics.slice(0, remaining);\n\n for (const topic of topicsToProcess) {\n if (topic.Text && topic.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = topic.Text.split(' - ');\n results.push({\n title: titleParts[0] || topic.Text,\n link: topic.FirstURL,\n snippet: topic.Text,\n position: results.length + 1,\n });\n }\n }\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add regular results (optimized: only process what we need)\n if (data.Results && data.Results.length > 0) {\n const remaining = maxResults - results.length;\n const resultsToProcess = data.Results.slice(0, remaining);\n\n for (const result of resultsToProcess) {\n if (result.Text && result.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = result.Text.split(' - ');\n results.push({\n title: titleParts[0] || result.Text,\n link: result.FirstURL,\n snippet: result.Text,\n position: results.length + 1,\n });\n }\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new DuckDuckGo provider instance\n */\nexport function createDuckDuckGoProvider(): DuckDuckGoProvider {\n return new DuckDuckGoProvider();\n}\n\n","/**\n * Serper Search Provider\n * \n * Premium search provider using Serper API (Google results).\n * Requires SERPER_API_KEY environment variable.\n * Get your API key at: https://serper.dev\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { getSerperApiKey, retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * Serper API response structure\n */\ninterface SerperResponse {\n organic?: Array<{\n title?: string;\n link?: string;\n snippet?: string;\n position?: number;\n }>;\n searchParameters?: {\n q?: string;\n num?: number;\n };\n}\n\n/**\n * Serper search provider implementation\n */\nexport class SerperProvider implements SearchProvider {\n name = 'serper' as const;\n private apiKey: string | undefined;\n\n constructor() {\n this.apiKey = getSerperApiKey();\n }\n\n /**\n * Serper is available if API key is set\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n /**\n * Search using Serper API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n if (!this.apiKey) {\n throw new Error(\n 'Serper API key not found. Set SERPER_API_KEY environment variable. Get your key at https://serper.dev'\n );\n }\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<SerperResponse>(\n 'https://google.serper.dev/search',\n {\n q: query,\n num: maxResults,\n },\n {\n headers: {\n 'X-API-KEY': this.apiKey,\n 'Content-Type': 'application/json',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n if (error.response?.status === 401) {\n throw new Error(\n 'Invalid Serper API key. Get your key at https://serper.dev'\n );\n }\n if (error.response?.status === 429) {\n throw new Error(\n 'Serper API rate limit exceeded. Please try again later or upgrade your plan at https://serper.dev'\n );\n }\n throw new Error(`Serper search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize Serper response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: SerperResponse,\n maxResults: number\n ): SearchResult[] {\n // Early return for empty results\n if (!data.organic || data.organic.length === 0 || maxResults <= 0) {\n return [];\n }\n\n // Pre-allocate array with expected size for better performance\n const results: SearchResult[] = [];\n\n // Only process the number of items we need (avoid processing entire array)\n const itemsToProcess = Math.min(data.organic.length, maxResults);\n\n for (let i = 0; i < itemsToProcess; i++) {\n const item = data.organic[i];\n\n // Skip items with missing required fields\n if (!item.title || !item.link || !item.snippet) {\n continue;\n }\n\n results.push({\n title: item.title,\n link: item.link,\n snippet: item.snippet,\n position: item.position ?? i + 1,\n });\n\n // Stop if we've collected enough results\n if (results.length >= maxResults) {\n break;\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new Serper provider instance\n */\nexport function createSerperProvider(): SerperProvider {\n return new SerperProvider();\n}\n\n","/**\n * Web Search Tool\n * \n * Search the web using DuckDuckGo (free) or Serper (optional upgrade).\n * Provides smart fallback and normalized results.\n * \n * @example\n * ```ts\n * // Basic usage (no API key needed)\n * const result = await webSearch.invoke({\n * query: 'What is TypeScript?'\n * });\n * \n * // With Serper API key (set SERPER_API_KEY env var)\n * const result = await webSearch.invoke({\n * query: 'Best restaurants in SF 2026',\n * preferSerper: true\n * });\n * ```\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { webSearchSchema } from './schemas.js';\nimport { createDuckDuckGoProvider } from './providers/duckduckgo.js';\nimport { createSerperProvider } from './providers/serper.js';\nimport { measureTime, sanitizeQuery, DEFAULT_TIMEOUT } from './utils.js';\nimport type { WebSearchInput, WebSearchOutput, SearchProvider } from './types.js';\n\n/**\n * Web search tool implementation\n */\nexport const webSearch = toolBuilder()\n .name('web-search')\n .description(\n 'Search the web for information using DuckDuckGo (free) or Serper API (optional). ' +\n 'Returns structured search results with titles, links, and snippets. ' +\n 'Automatically falls back to Serper if DuckDuckGo returns no results and API key is available.'\n )\n .category(ToolCategory.WEB)\n .tags(['search', 'web', 'google', 'duckduckgo', 'serper', 'internet'])\n .schema(webSearchSchema)\n .implement(async (input: WebSearchInput): Promise<WebSearchOutput> => {\n const {\n query,\n maxResults = 10,\n preferSerper = false,\n timeout = DEFAULT_TIMEOUT\n } = input;\n\n // Sanitize query\n const sanitizedQuery = sanitizeQuery(query);\n\n // Initialize providers\n const duckduckgo = createDuckDuckGoProvider();\n const serper = createSerperProvider();\n\n // Determine which provider to use\n let primaryProvider: SearchProvider;\n let fallbackProvider: SearchProvider | null = null;\n\n if (preferSerper && serper.isAvailable()) {\n primaryProvider = serper;\n fallbackProvider = duckduckgo;\n } else {\n primaryProvider = duckduckgo;\n fallbackProvider = serper.isAvailable() ? serper : null;\n }\n\n try {\n // Try primary provider\n const { result: results, duration } = await measureTime(() =>\n primaryProvider.search(sanitizedQuery, maxResults, timeout)\n );\n\n // If primary provider returns results, return them\n if (results.length > 0) {\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results,\n totalResults: results.length,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n }\n\n // If no results and fallback is available, try fallback\n if (fallbackProvider) {\n const { result: fallbackResults, duration: fallbackDuration } =\n await measureTime(() =>\n fallbackProvider!.search(sanitizedQuery, maxResults, timeout)\n );\n\n return {\n success: true,\n source: fallbackProvider.name,\n query: sanitizedQuery,\n results: fallbackResults,\n totalResults: fallbackResults.length,\n metadata: {\n responseTime: fallbackDuration,\n fallbackUsed: true,\n },\n };\n }\n\n // No results from either provider\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n totalResults: 0,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n } catch (error: any) {\n // Error occurred\n return {\n success: false,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n error: error.message,\n };\n }\n })\n .build();\n\n// Export types and schemas for external use\nexport * from './types.js';\nexport * from './schemas.js';\nexport * from './providers/duckduckgo.js';\nexport * from './providers/serper.js';\n\n","/**\n * JSON Processor Tool\n * \n * Parse, validate, transform, and query JSON data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * JSON parser tool\n */\nexport const jsonParser = toolBuilder()\n .name('json-parser')\n .description('Parse JSON string into an object. Validates JSON syntax and returns parsed data or error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'parse', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to parse'),\n strict: z.boolean().default(true).describe('Use strict JSON parsing (no trailing commas, etc.)'),\n }))\n .implement(async (input) => {\n try {\n const parsed = JSON.parse(input.json);\n return {\n success: true,\n data: parsed,\n type: Array.isArray(parsed) ? 'array' : typeof parsed,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON stringifier tool\n */\nexport const jsonStringify = toolBuilder()\n .name('json-stringify')\n .description('Convert an object to a JSON string with optional formatting (pretty print).')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'stringify', 'format', 'data'])\n .schema(z.object({\n data: z.any().describe('Data to convert to JSON string'),\n pretty: z.boolean().default(false).describe('Format with indentation for readability'),\n indent: z.number().default(2).describe('Number of spaces for indentation (when pretty is true)'),\n }))\n .implement(async (input) => {\n try {\n const json = input.pretty \n ? JSON.stringify(input.data, null, input.indent)\n : JSON.stringify(input.data);\n \n return {\n success: true,\n json,\n length: json.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to stringify data',\n };\n }\n })\n .build();\n\n/**\n * JSON query tool (using JSONPath-like syntax)\n */\nexport const jsonQuery = toolBuilder()\n .name('json-query')\n .description('Query JSON data using dot notation path (e.g., \"user.address.city\"). Supports array indexing.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'query', 'path', 'data'])\n .schema(z.object({\n data: z.any().describe('JSON data to query'),\n path: z.string().describe('Dot notation path to query (e.g., \"user.name\" or \"items[0].id\")'),\n }))\n .implement(async (input) => {\n try {\n const parts = input.path.split('.');\n let current = input.data;\n \n for (const part of parts) {\n // Handle array indexing: items[0]\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n current = current[key][parseInt(index, 10)];\n } else {\n current = current[part];\n }\n \n if (current === undefined) {\n return {\n success: false,\n error: `Path not found: ${input.path}`,\n };\n }\n }\n \n return {\n success: true,\n value: current,\n type: Array.isArray(current) ? 'array' : typeof current,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to query JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON validator tool\n */\nexport const jsonValidator = toolBuilder()\n .name('json-validator')\n .description('Validate JSON string syntax without parsing. Returns whether the JSON is valid and any error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'validate', 'check', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to validate'),\n }))\n .implement(async (input) => {\n try {\n JSON.parse(input.json);\n return {\n valid: true,\n message: 'Valid JSON',\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Invalid JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON merge tool\n */\nexport const jsonMerge = toolBuilder()\n .name('json-merge')\n .description('Merge two or more JSON objects. Later objects override earlier ones for conflicting keys.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'merge', 'combine', 'data'])\n .schema(z.object({\n objects: z.array(z.any().describe('Object to merge')).describe('Array of objects to merge'),\n deep: z.boolean().default(false).describe('Perform deep merge (nested objects)'),\n }))\n .implement(async (input) => {\n if (input.deep) {\n // Deep merge\n const deepMerge = (target: any, source: any): any => {\n const output = { ...target };\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n output[key] = deepMerge(output[key] || {}, source[key]);\n } else {\n output[key] = source[key];\n }\n }\n return output;\n };\n \n return input.objects.reduce((acc, obj) => deepMerge(acc, obj), {});\n } else {\n // Shallow merge\n return Object.assign({}, ...input.objects);\n }\n })\n .build();\n\n","/**\n * CSV Parser Tool\n * \n * Parse and generate CSV data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { parse } from 'csv-parse/sync';\nimport { stringify } from 'csv-stringify/sync';\n\n/**\n * CSV parser tool\n */\nexport const csvParser = toolBuilder()\n .name('csv-parser')\n .description('Parse CSV string into an array of objects. Supports custom delimiters, headers, and options.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'parse', 'data', 'table'])\n .schema(z.object({\n csv: z.string().describe('CSV string to parse'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n hasHeaders: z.boolean().default(true).describe('First row contains column headers'),\n skipEmptyLines: z.boolean().default(true).describe('Skip empty lines in the CSV'),\n trim: z.boolean().default(true).describe('Trim whitespace from values'),\n }))\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\n columns: input.hasHeaders,\n skip_empty_lines: input.skipEmptyLines,\n trim: input.trim,\n relax_column_count: true,\n });\n\n return {\n success: true,\n data: records,\n rowCount: records.length,\n columnCount: records.length > 0 ? Object.keys(records[0]).length : 0,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse CSV',\n };\n }\n })\n .build();\n\n/**\n * CSV generator tool\n */\nexport const csvGenerator = toolBuilder()\n .name('csv-generator')\n .description('Convert an array of objects to CSV string. Automatically extracts headers from object keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'generate', 'stringify', 'data'])\n .schema(z.object({\n data: z.array(z.record(z.any().describe('Column value'))).describe('Array of objects to convert to CSV'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n includeHeaders: z.boolean().default(true).describe('Include header row with column names'),\n columns: z.array(z.string().describe(\"String value\")).optional().describe('Optional list of columns to include (in order)'),\n }))\n .implement(async (input) => {\n try {\n const csv = stringify(input.data, {\n delimiter: input.delimiter,\n header: input.includeHeaders,\n columns: input.columns,\n });\n\n return {\n success: true,\n csv,\n rowCount: input.data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate CSV',\n };\n }\n })\n .build();\n\n/**\n * CSV to JSON converter\n */\nexport const csvToJson = toolBuilder()\n .name('csv-to-json')\n .description('Convert CSV string to JSON array. Each row becomes an object with column headers as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'json', 'convert', 'data'])\n .schema(z.object({\n csv: z.string().describe('CSV string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n }))\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\n columns: true,\n skip_empty_lines: true,\n trim: true,\n });\n\n const json = input.pretty \n ? JSON.stringify(records, null, 2)\n : JSON.stringify(records);\n\n return {\n success: true,\n json,\n recordCount: records.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert CSV to JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON to CSV converter\n */\nexport const jsonToCsv = toolBuilder()\n .name('json-to-csv')\n .description('Convert JSON array to CSV string. Each object becomes a row with keys as column headers.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'csv', 'convert', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON array string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n }))\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n \n if (!Array.isArray(data)) {\n return {\n success: false,\n error: 'Input must be a JSON array',\n };\n }\n\n const csv = stringify(data, {\n delimiter: input.delimiter,\n header: true,\n });\n\n return {\n success: true,\n csv,\n rowCount: data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to CSV',\n };\n }\n })\n .build();\n\n","/**\n * XML Parser Tool\n * \n * Parse and generate XML data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\n/**\n * XML parser tool\n */\nexport const xmlParser = toolBuilder()\n .name('xml-parser')\n .description('Parse XML string into a JavaScript object. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'parse', 'data'])\n .schema(z.object({\n xml: z.string().describe('XML string to parse'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes'),\n parseAttributeValue: z.boolean().default(true).describe('Parse attribute values (numbers, booleans)'),\n trimValues: z.boolean().default(true).describe('Trim whitespace from text values'),\n }))\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: input.parseAttributeValue,\n trimValues: input.trimValues,\n parseTagValue: true,\n });\n\n const result = parser.parse(input.xml);\n\n return {\n success: true,\n data: result,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse XML',\n };\n }\n })\n .build();\n\n/**\n * XML generator tool\n */\nexport const xmlGenerator = toolBuilder()\n .name('xml-generator')\n .description('Convert a JavaScript object to XML string. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'generate', 'stringify', 'data'])\n .schema(z.object({\n data: z.any().describe('Object to convert to XML'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n indentSize: z.number().default(2).describe('Number of spaces for indentation (when format is true)'),\n }))\n .implement(async (input) => {\n try {\n const indentSize = input.indentSize ?? 2;\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\n indentBy: ' '.repeat(indentSize),\n ignoreAttributes: false,\n });\n\n // Wrap data in root element if not already wrapped\n const dataToConvert = input.data[rootName] ? input.data : { [rootName]: input.data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate XML',\n };\n }\n })\n .build();\n\n/**\n * XML to JSON converter\n */\nexport const xmlToJson = toolBuilder()\n .name('xml-to-json')\n .description('Convert XML string to JSON. Preserves structure and can include or exclude attributes.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'json', 'convert', 'data'])\n .schema(z.object({\n xml: z.string().describe('XML string to convert'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes in conversion'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n }))\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: true,\n trimValues: true,\n });\n\n const result = parser.parse(input.xml);\n const json = input.pretty \n ? JSON.stringify(result, null, 2)\n : JSON.stringify(result);\n\n return {\n success: true,\n json,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert XML to JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON to XML converter\n */\nexport const jsonToXml = toolBuilder()\n .name('json-to-xml')\n .description('Convert JSON string to XML. Each object key becomes an XML element.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'xml', 'convert', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to convert'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n }))\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\n indentBy: ' ',\n ignoreAttributes: false,\n });\n\n const dataToConvert = data[rootName] ? data : { [rootName]: data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to XML',\n };\n }\n })\n .build();\n\n","/**\n * Data Transformer Tool\n * \n * Transform, filter, map, and manipulate data structures.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Array filter tool\n */\nexport const arrayFilter = toolBuilder()\n .name('array-filter')\n .description('Filter an array based on a property value. Supports equality, comparison, and contains operations.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'filter', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to filter'),\n property: z.string().describe('Property name to filter by (use dot notation for nested properties)'),\n operator: z.enum(['equals', 'not-equals', 'greater-than', 'less-than', 'contains', 'starts-with', 'ends-with']).describe('Comparison operator'),\n value: z.any().describe('Value to compare against'),\n }))\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const filtered = input.array.filter((item) => {\n const itemValue = getNestedValue(item, input.property);\n \n switch (input.operator) {\n case 'equals':\n return itemValue === input.value;\n case 'not-equals':\n return itemValue !== input.value;\n case 'greater-than':\n return itemValue > input.value;\n case 'less-than':\n return itemValue < input.value;\n case 'contains':\n return String(itemValue).includes(String(input.value));\n case 'starts-with':\n return String(itemValue).startsWith(String(input.value));\n case 'ends-with':\n return String(itemValue).endsWith(String(input.value));\n default:\n return false;\n }\n });\n\n return {\n filtered,\n originalCount: input.array.length,\n filteredCount: filtered.length,\n };\n })\n .build();\n\n/**\n * Array map tool\n */\nexport const arrayMap = toolBuilder()\n .name('array-map')\n .description('Extract specific properties from each object in an array. Creates a new array with only the selected properties.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'map', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to map'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to extract from each object'),\n }))\n .implement(async (input) => {\n const mapped = input.array.map((item) => {\n const result: any = {};\n for (const prop of input.properties) {\n // Support dot notation\n const value = prop.split('.').reduce((current, key) => current?.[key], item);\n result[prop] = value;\n }\n return result;\n });\n\n return {\n mapped,\n count: mapped.length,\n };\n })\n .build();\n\n/**\n * Array sort tool\n */\nexport const arraySort = toolBuilder()\n .name('array-sort')\n .description('Sort an array by a property value. Supports ascending and descending order.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'sort', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to sort'),\n property: z.string().describe('Property name to sort by (use dot notation for nested properties)'),\n order: z.enum(['asc', 'desc']).default('asc').describe('Sort order: ascending or descending'),\n }))\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const sorted = [...input.array].sort((a, b) => {\n const aValue = getNestedValue(a, input.property);\n const bValue = getNestedValue(b, input.property);\n \n if (aValue < bValue) return input.order === 'asc' ? -1 : 1;\n if (aValue > bValue) return input.order === 'asc' ? 1 : -1;\n return 0;\n });\n\n return {\n sorted,\n count: sorted.length,\n };\n })\n .build();\n\n/**\n * Array group by tool\n */\nexport const arrayGroupBy = toolBuilder()\n .name('array-group-by')\n .description('Group an array of objects by a property value. Returns an object with groups as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'group', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to group'),\n property: z.string().describe('Property name to group by'),\n }))\n .implement(async (input) => {\n const groups: Record<string, any[]> = {};\n \n for (const item of input.array) {\n const key = String(item[input.property]);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n }\n\n return {\n groups,\n groupCount: Object.keys(groups).length,\n totalItems: input.array.length,\n };\n })\n .build();\n\n/**\n * Object pick tool\n */\nexport const objectPick = toolBuilder()\n .name('object-pick')\n .description('Create a new object with only the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'pick', 'data', 'transform'])\n .schema(z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to pick'),\n }))\n .implement(async (input) => {\n const picked: Record<string, any> = {};\n \n for (const prop of input.properties) {\n if (prop in input.object) {\n picked[prop] = input.object[prop];\n }\n }\n\n return picked;\n })\n .build();\n\n/**\n * Object omit tool\n */\nexport const objectOmit = toolBuilder()\n .name('object-omit')\n .description('Create a new object excluding the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'omit', 'data', 'transform'])\n .schema(z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to omit'),\n }))\n .implement(async (input) => {\n const omitted: Record<string, any> = { ...input.object };\n \n for (const prop of input.properties) {\n delete omitted[prop];\n }\n\n return omitted;\n })\n .build();\n\n","/**\n * File Operations Tools\n * \n * Tools for reading, writing, and manipulating files.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * File reader tool\n */\nexport const fileReader = toolBuilder()\n .name('file-reader')\n .description('Read the contents of a file from the file system. Supports text and binary files with various encodings.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'read', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to read'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex', 'binary']).default('utf8').describe('File encoding'),\n }))\n .implement(async (input) => {\n try {\n const content = await fs.readFile(input.path, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n content,\n size: stats.size,\n path: input.path,\n encoding: input.encoding,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to read file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File writer tool\n */\nexport const fileWriter = toolBuilder()\n .name('file-writer')\n .description('Write content to a file. Creates the file if it doesn\\'t exist, or overwrites it if it does.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'write', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex']).default('utf8').describe('File encoding'),\n createDirs: z.boolean().default(false).describe('Create parent directories if they don\\'t exist'),\n }))\n .implement(async (input) => {\n try {\n // Create parent directories if requested\n if (input.createDirs) {\n const dir = path.dirname(input.path);\n await fs.mkdir(dir, { recursive: true });\n }\n \n await fs.writeFile(input.path, input.content, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n path: input.path,\n size: stats.size,\n encoding: input.encoding,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to write file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File append tool\n */\nexport const fileAppend = toolBuilder()\n .name('file-append')\n .description('Append content to the end of a file. Creates the file if it doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'append', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to append to'),\n content: z.string().describe('Content to append to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii']).default('utf8').describe('File encoding'),\n }))\n .implement(async (input) => {\n try {\n await fs.appendFile(input.path, input.content, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n path: input.path,\n size: stats.size,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to append to file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File delete tool\n */\nexport const fileDelete = toolBuilder()\n .name('file-delete')\n .description('Delete a file from the file system. Returns an error if the file doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'delete', 'remove', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to delete'),\n }))\n .implement(async (input) => {\n try {\n await fs.unlink(input.path);\n \n return {\n success: true,\n path: input.path,\n message: 'File deleted successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to delete file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File exists tool\n */\nexport const fileExists = toolBuilder()\n .name('file-exists')\n .description('Check if a file or directory exists at the specified path.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'exists', 'check', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to check'),\n }))\n .implement(async (input) => {\n try {\n await fs.access(input.path);\n const stats = await fs.stat(input.path);\n \n return {\n exists: true,\n path: input.path,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n };\n } catch {\n return {\n exists: false,\n path: input.path,\n };\n }\n })\n .build();\n\n","/**\n * Directory Operations Tools\n * \n * Tools for working with directories and file listings.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Directory listing tool\n */\nexport const directoryList = toolBuilder()\n .name('directory-list')\n .description('List all files and directories in a directory. Can optionally include file details and filter by extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'list', 'files', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to list'),\n recursive: z.boolean().default(false).describe('List files recursively in subdirectories'),\n includeDetails: z.boolean().default(false).describe('Include file size, type, and modification date'),\n extension: z.string().optional().describe('Optional file extension filter (e.g., \".txt\", \".js\")'),\n }))\n .implement(async (input) => {\n try {\n const listFiles = async (dir: string, recursive: boolean): Promise<any[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const files: any[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(input.path, fullPath);\n\n // Apply extension filter if specified\n if (input.extension && !entry.name.endsWith(input.extension)) {\n if (!entry.isDirectory() || !recursive) {\n continue;\n }\n }\n\n if (input.includeDetails) {\n const stats = await fs.stat(fullPath);\n files.push({\n name: entry.name,\n path: relativePath,\n fullPath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n });\n } else {\n files.push({\n name: entry.name,\n path: relativePath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n });\n }\n\n // Recurse into subdirectories if requested\n if (recursive && entry.isDirectory()) {\n const subFiles = await listFiles(fullPath, true);\n files.push(...subFiles);\n }\n }\n\n return files;\n };\n\n const files = await listFiles(input.path, input.recursive ?? false);\n\n return {\n success: true,\n path: input.path,\n files,\n count: files.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to list directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * Directory create tool\n */\nexport const directoryCreate = toolBuilder()\n .name('directory-create')\n .description('Create a new directory. Can optionally create parent directories if they don\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'create', 'mkdir', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to create'),\n recursive: z.boolean().default(true).describe('Create parent directories if they don\\'t exist'),\n }))\n .implement(async (input) => {\n try {\n await fs.mkdir(input.path, { recursive: input.recursive });\n \n return {\n success: true,\n path: input.path,\n message: 'Directory created successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to create directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * Directory delete tool\n */\nexport const directoryDelete = toolBuilder()\n .name('directory-delete')\n .description('Delete a directory. Can optionally delete non-empty directories recursively.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'delete', 'remove', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to delete'),\n recursive: z.boolean().default(false).describe('Delete directory and all its contents'),\n }))\n .implement(async (input) => {\n try {\n await fs.rm(input.path, { recursive: input.recursive, force: false });\n \n return {\n success: true,\n path: input.path,\n message: 'Directory deleted successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to delete directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File search tool\n */\nexport const fileSearch = toolBuilder()\n .name('file-search')\n .description('Search for files by name pattern in a directory. Supports wildcards and recursive search.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'search', 'find', 'filesystem'])\n .schema(z.object({\n directory: z.string().describe('Directory to search in'),\n pattern: z.string().describe('File name pattern to search for (supports * wildcard)'),\n recursive: z.boolean().default(true).describe('Search in subdirectories'),\n caseSensitive: z.boolean().default(false).describe('Case-sensitive pattern matching'),\n }))\n .implement(async (input) => {\n try {\n const searchFiles = async (dir: string): Promise<string[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const matches: string[] = [];\n\n // Convert pattern to regex\n const regexPattern = input.pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`, input.caseSensitive ? '' : 'i');\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isFile() && regex.test(entry.name)) {\n matches.push(fullPath);\n }\n\n if (input.recursive && entry.isDirectory()) {\n const subMatches = await searchFiles(fullPath);\n matches.push(...subMatches);\n }\n }\n\n return matches;\n };\n\n const matches = await searchFiles(input.directory);\n\n return {\n success: true,\n directory: input.directory,\n pattern: input.pattern,\n matches,\n count: matches.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to search files',\n directory: input.directory,\n };\n }\n })\n .build();\n\n","/**\n * Path Utilities Tools\n * \n * Tools for working with file paths.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as path from 'path';\n\n/**\n * Path join tool\n */\nexport const pathJoin = toolBuilder()\n .name('path-join')\n .description('Join multiple path segments into a single path. Handles platform-specific separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'join', 'filesystem'])\n .schema(z.object({\n segments: z.array(z.string().describe(\"String value\")).describe('Path segments to join'),\n }))\n .implement(async (input) => {\n const joined = path.join(...input.segments);\n \n return {\n path: joined,\n segments: input.segments,\n };\n })\n .build();\n\n/**\n * Path resolve tool\n */\nexport const pathResolve = toolBuilder()\n .name('path-resolve')\n .description('Resolve a sequence of paths into an absolute path. Resolves relative paths from the current working directory.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'resolve', 'absolute', 'filesystem'])\n .schema(z.object({\n paths: z.array(z.string().describe(\"String value\")).describe('Paths to resolve'),\n }))\n .implement(async (input) => {\n const resolved = path.resolve(...input.paths);\n \n return {\n path: resolved,\n isAbsolute: path.isAbsolute(resolved),\n };\n })\n .build();\n\n/**\n * Path parse tool\n */\nexport const pathParse = toolBuilder()\n .name('path-parse')\n .description('Parse a file path into its components (directory, filename, extension, etc.).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'parse', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path to parse'),\n }))\n .implement(async (input) => {\n const parsed = path.parse(input.path);\n \n return {\n root: parsed.root,\n dir: parsed.dir,\n base: parsed.base,\n name: parsed.name,\n ext: parsed.ext,\n isAbsolute: path.isAbsolute(input.path),\n };\n })\n .build();\n\n/**\n * Path basename tool\n */\nexport const pathBasename = toolBuilder()\n .name('path-basename')\n .description('Get the last portion of a path (filename with extension). Optionally remove the extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'basename', 'filename', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n removeExtension: z.boolean().default(false).describe('Remove the file extension'),\n }))\n .implement(async (input) => {\n const basename = input.removeExtension \n ? path.basename(input.path, path.extname(input.path))\n : path.basename(input.path);\n \n return {\n basename,\n extension: path.extname(input.path),\n };\n })\n .build();\n\n/**\n * Path dirname tool\n */\nexport const pathDirname = toolBuilder()\n .name('path-dirname')\n .description('Get the directory name of a path (everything except the last portion).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'dirname', 'directory', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n }))\n .implement(async (input) => {\n const dirname = path.dirname(input.path);\n \n return {\n dirname,\n basename: path.basename(input.path),\n };\n })\n .build();\n\n/**\n * Path extension tool\n */\nexport const pathExtension = toolBuilder()\n .name('path-extension')\n .description('Get the file extension from a path (including the dot, e.g., \".txt\").')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'extension', 'ext', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n }))\n .implement(async (input) => {\n const ext = path.extname(input.path);\n \n return {\n extension: ext,\n hasExtension: ext.length > 0,\n filename: path.basename(input.path, ext),\n };\n })\n .build();\n\n/**\n * Path relative tool\n */\nexport const pathRelative = toolBuilder()\n .name('path-relative')\n .description('Get the relative path from one path to another.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'relative', 'filesystem'])\n .schema(z.object({\n from: z.string().describe('Source path'),\n to: z.string().describe('Destination path'),\n }))\n .implement(async (input) => {\n const relative = path.relative(input.from, input.to);\n \n return {\n relativePath: relative,\n from: input.from,\n to: input.to,\n };\n })\n .build();\n\n/**\n * Path normalize tool\n */\nexport const pathNormalize = toolBuilder()\n .name('path-normalize')\n .description('Normalize a path by resolving \"..\" and \".\" segments and removing duplicate separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'normalize', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to normalize'),\n }))\n .implement(async (input) => {\n const normalized = path.normalize(input.path);\n \n return {\n normalized,\n original: input.path,\n };\n })\n .build();\n\n","/**\n * Date and Time Utility Tools\n * \n * Tools for working with dates, times, and timestamps.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { format, parse, add, sub, differenceInDays, differenceInHours, differenceInMinutes, isAfter, isBefore, isValid } from 'date-fns';\n\n/**\n * Current date/time tool\n */\nexport const currentDateTime = toolBuilder()\n .name('current-date-time')\n .description('Get the current date and time in various formats (ISO, Unix timestamp, formatted string).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'now', 'current'])\n .schema(z.object({\n format: z.enum(['iso', 'unix', 'custom']).default('iso').describe('Output format'),\n customFormat: z.string().optional().describe('Custom format string (e.g., \"yyyy-MM-dd HH:mm:ss\") when format is \"custom\"'),\n timezone: z.string().optional().describe('Timezone (e.g., \"America/New_York\")'),\n }))\n .implement(async (input) => {\n const now = new Date();\n \n let formatted: string | number;\n if (input.format === 'iso') {\n formatted = now.toISOString();\n } else if (input.format === 'unix') {\n formatted = Math.floor(now.getTime() / 1000);\n } else if (input.format === 'custom' && input.customFormat) {\n formatted = format(now, input.customFormat);\n } else {\n formatted = now.toISOString();\n }\n \n return {\n formatted,\n iso: now.toISOString(),\n unix: Math.floor(now.getTime() / 1000),\n year: now.getFullYear(),\n month: now.getMonth() + 1,\n day: now.getDate(),\n hour: now.getHours(),\n minute: now.getMinutes(),\n second: now.getSeconds(),\n };\n })\n .build();\n\n/**\n * Date formatter tool\n */\nexport const dateFormatter = toolBuilder()\n .name('date-formatter')\n .description('Format a date string or timestamp into a different format. Supports ISO, Unix timestamps, and custom formats.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'format', 'time'])\n .schema(z.object({\n date: z.string().describe('Date string or Unix timestamp to format'),\n outputFormat: z.string().describe('Output format string (e.g., \"yyyy-MM-dd\", \"MMM dd, yyyy\")'),\n inputFormat: z.string().optional().describe('Input format string (optional, auto-detected if not provided)'),\n }))\n .implement(async (input) => {\n try {\n let date: Date;\n \n // Try to parse the input\n if (input.inputFormat) {\n date = parse(input.date, input.inputFormat, new Date());\n } else if (!isNaN(Number(input.date))) {\n // Unix timestamp\n date = new Date(Number(input.date) * 1000);\n } else {\n // ISO or other standard format\n date = new Date(input.date);\n }\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const formatted = format(date, input.outputFormat);\n \n return {\n success: true,\n formatted,\n iso: date.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to format date',\n };\n }\n })\n .build();\n\n/**\n * Date arithmetic tool\n */\nexport const dateArithmetic = toolBuilder()\n .name('date-arithmetic')\n .description('Add or subtract time from a date. Supports years, months, weeks, days, hours, minutes, and seconds.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'add', 'subtract', 'arithmetic'])\n .schema(z.object({\n date: z.string().describe('Starting date (ISO string or Unix timestamp)'),\n operation: z.enum(['add', 'subtract']).describe('Operation to perform'),\n amount: z.number().describe('Amount to add or subtract'),\n unit: z.enum(['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']).describe('Time unit'),\n }))\n .implement(async (input) => {\n try {\n const date = new Date(input.date);\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const duration = { [input.unit]: input.amount };\n const result = input.operation === 'add' \n ? add(date, duration)\n : sub(date, duration);\n \n return {\n success: true,\n result: result.toISOString(),\n unix: Math.floor(result.getTime() / 1000),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to perform date arithmetic',\n };\n }\n })\n .build();\n\n/**\n * Date difference tool\n */\nexport const dateDifference = toolBuilder()\n .name('date-difference')\n .description('Calculate the difference between two dates in various units (days, hours, minutes).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'difference', 'duration'])\n .schema(z.object({\n startDate: z.string().describe('Start date (ISO string or Unix timestamp)'),\n endDate: z.string().describe('End date (ISO string or Unix timestamp)'),\n unit: z.enum(['days', 'hours', 'minutes']).default('days').describe('Unit for the difference'),\n }))\n .implement(async (input) => {\n try {\n const start = new Date(input.startDate);\n const end = new Date(input.endDate);\n \n if (!isValid(start) || !isValid(end)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n let difference: number;\n if (input.unit === 'days') {\n difference = differenceInDays(end, start);\n } else if (input.unit === 'hours') {\n difference = differenceInHours(end, start);\n } else {\n difference = differenceInMinutes(end, start);\n }\n \n return {\n success: true,\n difference,\n unit: input.unit,\n startDate: start.toISOString(),\n endDate: end.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate date difference',\n };\n }\n })\n .build();\n\n/**\n * Date comparison tool\n */\nexport const dateComparison = toolBuilder()\n .name('date-comparison')\n .description('Compare two dates to determine if one is before, after, or equal to the other.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'compare', 'comparison'])\n .schema(z.object({\n date1: z.string().describe('First date to compare'),\n date2: z.string().describe('Second date to compare'),\n }))\n .implement(async (input) => {\n try {\n const d1 = new Date(input.date1);\n const d2 = new Date(input.date2);\n \n if (!isValid(d1) || !isValid(d2)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n return {\n success: true,\n date1IsBefore: isBefore(d1, d2),\n date1IsAfter: isAfter(d1, d2),\n datesAreEqual: d1.getTime() === d2.getTime(),\n date1: d1.toISOString(),\n date2: d2.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to compare dates',\n };\n }\n })\n .build();\n\n","/**\n * String Utility Tools\n * \n * Tools for string manipulation and transformation.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * String case converter tool\n */\nexport const stringCaseConverter = toolBuilder()\n .name('string-case-converter')\n .description('Convert string to different cases: lowercase, uppercase, title case, camel case, snake case, kebab case.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'case', 'convert', 'transform'])\n .schema(z.object({\n text: z.string().describe('Text to convert'),\n targetCase: z.enum(['lowercase', 'uppercase', 'title', 'camel', 'snake', 'kebab', 'pascal']).describe('Target case format'),\n }))\n .implement(async (input) => {\n let result: string;\n \n switch (input.targetCase) {\n case 'lowercase':\n result = input.text.toLowerCase();\n break;\n case 'uppercase':\n result = input.text.toUpperCase();\n break;\n case 'title':\n result = input.text.toLowerCase().replace(/\\b\\w/g, (char) => char.toUpperCase());\n break;\n case 'camel':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase());\n break;\n case 'snake':\n result = input.text\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n break;\n case 'kebab':\n result = input.text\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n break;\n case 'pascal':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n break;\n default:\n result = input.text;\n }\n \n return {\n original: input.text,\n converted: result,\n targetCase: input.targetCase,\n };\n })\n .build();\n\n/**\n * String trim tool\n */\nexport const stringTrim = toolBuilder()\n .name('string-trim')\n .description('Remove whitespace from the beginning and/or end of a string. Supports trim, trim start, and trim end.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'trim', 'whitespace'])\n .schema(z.object({\n text: z.string().describe('Text to trim'),\n mode: z.enum(['both', 'start', 'end']).default('both').describe('Which side to trim'),\n characters: z.string().optional().describe('Optional custom characters to trim (default: whitespace)'),\n }))\n .implement(async (input) => {\n let result: string;\n \n if (input.characters) {\n const chars = input.characters.split('').map(c => c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const regex = input.mode === 'both' \n ? new RegExp(`^[${chars}]+|[${chars}]+$`, 'g')\n : input.mode === 'start'\n ? new RegExp(`^[${chars}]+`, 'g')\n : new RegExp(`[${chars}]+$`, 'g');\n result = input.text.replace(regex, '');\n } else {\n result = input.mode === 'both' \n ? input.text.trim()\n : input.mode === 'start'\n ? input.text.trimStart()\n : input.text.trimEnd();\n }\n \n return {\n original: input.text,\n trimmed: result,\n removed: input.text.length - result.length,\n };\n })\n .build();\n\n/**\n * String replace tool\n */\nexport const stringReplace = toolBuilder()\n .name('string-replace')\n .description('Replace occurrences of a substring or pattern in a string. Supports regex patterns and global replacement.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'replace', 'substitute'])\n .schema(z.object({\n text: z.string().describe('Text to search in'),\n search: z.string().describe('String or regex pattern to search for'),\n replace: z.string().describe('Replacement string'),\n global: z.boolean().default(true).describe('Replace all occurrences (true) or just the first (false)'),\n caseInsensitive: z.boolean().default(false).describe('Case-insensitive search'),\n }))\n .implement(async (input) => {\n const flags = (input.global ? 'g' : '') + (input.caseInsensitive ? 'i' : '');\n const regex = new RegExp(input.search, flags);\n const result = input.text.replace(regex, input.replace);\n \n // Count replacements\n const matches = input.text.match(regex);\n const count = matches ? matches.length : 0;\n \n return {\n original: input.text,\n result,\n replacements: count,\n };\n })\n .build();\n\n/**\n * String split tool\n */\nexport const stringSplit = toolBuilder()\n .name('string-split')\n .description('Split a string into an array of substrings using a delimiter. Supports regex delimiters and limit.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'split', 'array'])\n .schema(z.object({\n text: z.string().describe('Text to split'),\n delimiter: z.string().describe('Delimiter to split on (can be a regex pattern)'),\n limit: z.number().optional().describe('Maximum number of splits'),\n }))\n .implement(async (input) => {\n const parts = input.text.split(input.delimiter, input.limit);\n \n return {\n parts,\n count: parts.length,\n };\n })\n .build();\n\n/**\n * String join tool\n */\nexport const stringJoin = toolBuilder()\n .name('string-join')\n .description('Join an array of strings into a single string with a separator.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'join', 'array'])\n .schema(z.object({\n parts: z.array(z.string().describe(\"String value\")).describe('Array of strings to join'),\n separator: z.string().default('').describe('Separator to use between parts'),\n }))\n .implement(async (input) => {\n const result = input.parts.join(input.separator);\n \n return {\n result,\n partCount: input.parts.length,\n length: result.length,\n };\n })\n .build();\n\n/**\n * String substring tool\n */\nexport const stringSubstring = toolBuilder()\n .name('string-substring')\n .description('Extract a substring from a string using start and end positions.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'substring', 'slice'])\n .schema(z.object({\n text: z.string().describe('Source text'),\n start: z.number().describe('Start position (0-based)'),\n end: z.number().optional().describe('End position (optional, defaults to end of string)'),\n }))\n .implement(async (input) => {\n const result = input.text.substring(input.start, input.end);\n \n return {\n result,\n length: result.length,\n start: input.start,\n end: input.end ?? input.text.length,\n };\n })\n .build();\n\n/**\n * String length tool\n */\nexport const stringLength = toolBuilder()\n .name('string-length')\n .description('Get the length of a string in characters, words, or lines.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'length', 'count'])\n .schema(z.object({\n text: z.string().describe('Text to measure'),\n }))\n .implement(async (input) => {\n const words = input.text.trim().split(/\\s+/).filter(w => w.length > 0);\n const lines = input.text.split('\\n');\n \n return {\n characters: input.text.length,\n words: words.length,\n lines: lines.length,\n };\n })\n .build();\n\n","/**\n * Math Operations Tools\n * \n * Tools for mathematical calculations and operations.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Calculator tool\n */\nexport const calculator = toolBuilder()\n .name('calculator')\n .description('Perform basic arithmetic operations: add, subtract, multiply, divide, power, modulo.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'calculator', 'arithmetic'])\n .schema(z.object({\n operation: z.enum(['add', 'subtract', 'multiply', 'divide', 'power', 'modulo']).describe('Mathematical operation to perform'),\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n }))\n .implement(async (input) => {\n let result: number;\n \n switch (input.operation) {\n case 'add':\n result = input.a + input.b;\n break;\n case 'subtract':\n result = input.a - input.b;\n break;\n case 'multiply':\n result = input.a * input.b;\n break;\n case 'divide':\n if (input.b === 0) {\n return {\n success: false,\n error: 'Division by zero',\n };\n }\n result = input.a / input.b;\n break;\n case 'power':\n result = Math.pow(input.a, input.b);\n break;\n case 'modulo':\n result = input.a % input.b;\n break;\n default:\n return {\n success: false,\n error: 'Unknown operation',\n };\n }\n \n return {\n success: true,\n result,\n operation: input.operation,\n a: input.a,\n b: input.b,\n };\n })\n .build();\n\n/**\n * Math functions tool\n */\nexport const mathFunctions = toolBuilder()\n .name('math-functions')\n .description('Apply mathematical functions: sqrt, abs, round, floor, ceil, sin, cos, tan, log, exp.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'functions', 'trigonometry'])\n .schema(z.object({\n function: z.enum(['sqrt', 'abs', 'round', 'floor', 'ceil', 'sin', 'cos', 'tan', 'log', 'exp']).describe('Mathematical function to apply'),\n value: z.number().describe('Input value'),\n }))\n .implement(async (input) => {\n let result: number;\n \n try {\n switch (input.function) {\n case 'sqrt':\n result = Math.sqrt(input.value);\n break;\n case 'abs':\n result = Math.abs(input.value);\n break;\n case 'round':\n result = Math.round(input.value);\n break;\n case 'floor':\n result = Math.floor(input.value);\n break;\n case 'ceil':\n result = Math.ceil(input.value);\n break;\n case 'sin':\n result = Math.sin(input.value);\n break;\n case 'cos':\n result = Math.cos(input.value);\n break;\n case 'tan':\n result = Math.tan(input.value);\n break;\n case 'log':\n result = Math.log(input.value);\n break;\n case 'exp':\n result = Math.exp(input.value);\n break;\n default:\n return {\n success: false,\n error: 'Unknown function',\n };\n }\n \n if (isNaN(result) || !isFinite(result)) {\n return {\n success: false,\n error: 'Invalid result (NaN or Infinity)',\n };\n }\n \n return {\n success: true,\n result,\n function: input.function,\n input: input.value,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Math operation failed',\n };\n }\n })\n .build();\n\n/**\n * Random number generator tool\n */\nexport const randomNumber = toolBuilder()\n .name('random-number')\n .description('Generate a random number within a specified range. Supports integers and decimals.')\n .category(ToolCategory.UTILITY)\n .tags(['random', 'number', 'generator'])\n .schema(z.object({\n min: z.number().default(0).describe('Minimum value (inclusive)'),\n max: z.number().default(1).describe('Maximum value (exclusive for decimals, inclusive for integers)'),\n integer: z.boolean().default(false).describe('Generate an integer (true) or decimal (false)'),\n }))\n .implement(async (input) => {\n const min = input.min ?? 0;\n const max = input.max ?? 1;\n const integer = input.integer ?? false;\n\n let result: number;\n\n if (integer) {\n result = Math.floor(Math.random() * (max - min + 1)) + min;\n } else {\n result = Math.random() * (max - min) + min;\n }\n\n return {\n result,\n min,\n max,\n integer,\n };\n })\n .build();\n\n/**\n * Statistics tool\n */\nexport const statistics = toolBuilder()\n .name('statistics')\n .description('Calculate statistics for an array of numbers: sum, average, min, max, median, standard deviation.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'statistics', 'average', 'sum'])\n .schema(z.object({\n numbers: z.array(z.number().describe(\"Number value\")).describe('Array of numbers to analyze'),\n }))\n .implement(async (input) => {\n if (input.numbers.length === 0) {\n return {\n success: false,\n error: 'Empty array',\n };\n }\n \n const sorted = [...input.numbers].sort((a, b) => a - b);\n const sum = input.numbers.reduce((acc, n) => acc + n, 0);\n const average = sum / input.numbers.length;\n const min = sorted[0];\n const max = sorted[sorted.length - 1];\n \n // Median\n const mid = Math.floor(sorted.length / 2);\n const median = sorted.length % 2 === 0\n ? (sorted[mid - 1] + sorted[mid]) / 2\n : sorted[mid];\n \n // Standard deviation\n const variance = input.numbers.reduce((acc, n) => acc + Math.pow(n - average, 2), 0) / input.numbers.length;\n const stdDev = Math.sqrt(variance);\n \n return {\n success: true,\n count: input.numbers.length,\n sum,\n average,\n min,\n max,\n median,\n standardDeviation: stdDev,\n variance,\n };\n })\n .build();\n\n","/**\n * Validation Utility Tools\n * \n * Tools for validating data formats and types.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Email validator tool\n */\nexport const emailValidator = toolBuilder()\n .name('email-validator')\n .description('Validate if a string is a valid email address format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'email', 'validate'])\n .schema(z.object({\n email: z.string().describe('Email address to validate'),\n }))\n .implement(async (input) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const valid = emailRegex.test(input.email);\n \n return {\n valid,\n email: input.email,\n message: valid ? 'Valid email address' : 'Invalid email address format',\n };\n })\n .build();\n\n/**\n * URL validator tool (already exists in web tools, but adding here for completeness)\n */\nexport const urlValidatorSimple = toolBuilder()\n .name('url-validator-simple')\n .description('Validate if a string is a valid URL format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'url', 'validate'])\n .schema(z.object({\n url: z.string().describe('URL to validate'),\n }))\n .implement(async (input) => {\n try {\n new URL(input.url);\n return {\n valid: true,\n url: input.url,\n message: 'Valid URL',\n };\n } catch {\n return {\n valid: false,\n url: input.url,\n message: 'Invalid URL format',\n };\n }\n })\n .build();\n\n/**\n * Phone number validator tool\n */\nexport const phoneValidator = toolBuilder()\n .name('phone-validator')\n .description('Validate if a string is a valid phone number format. Supports various international formats.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'phone', 'validate'])\n .schema(z.object({\n phone: z.string().describe('Phone number to validate'),\n strict: z.boolean().default(false).describe('Use strict validation (requires country code)'),\n }))\n .implement(async (input) => {\n // Basic phone validation - matches common formats\n // eslint-disable-next-line no-useless-escape\n const basicRegex = /^[\\d\\s\\-\\+\\(\\)]+$/;\n const strictRegex = /^\\+?[1-9]\\d{1,14}$/; // E.164 format\n \n const regex = input.strict ? strictRegex : basicRegex;\n const valid = regex.test(input.phone.replace(/\\s/g, ''));\n \n return {\n valid,\n phone: input.phone,\n message: valid ? 'Valid phone number format' : 'Invalid phone number format',\n };\n })\n .build();\n\n/**\n * Credit card validator tool\n */\nexport const creditCardValidator = toolBuilder()\n .name('credit-card-validator')\n .description('Validate if a string is a valid credit card number using the Luhn algorithm.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'credit-card', 'validate', 'luhn'])\n .schema(z.object({\n cardNumber: z.string().describe('Credit card number to validate'),\n }))\n .implement(async (input) => {\n // Remove spaces and dashes\n // eslint-disable-next-line no-useless-escape\n const cleaned = input.cardNumber.replace(/[\\s\\-]/g, '');\n \n // Check if it's all digits\n if (!/^\\d+$/.test(cleaned)) {\n return {\n valid: false,\n message: 'Card number must contain only digits',\n };\n }\n \n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n \n for (let i = cleaned.length - 1; i >= 0; i--) {\n let digit = parseInt(cleaned[i], 10);\n \n if (isEven) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n \n sum += digit;\n isEven = !isEven;\n }\n \n const valid = sum % 10 === 0;\n \n return {\n valid,\n cardNumber: input.cardNumber,\n message: valid ? 'Valid credit card number' : 'Invalid credit card number (failed Luhn check)',\n };\n })\n .build();\n\n/**\n * IP address validator tool\n */\nexport const ipValidator = toolBuilder()\n .name('ip-validator')\n .description('Validate if a string is a valid IPv4 or IPv6 address.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'ip', 'validate', 'network'])\n .schema(z.object({\n ip: z.string().describe('IP address to validate'),\n version: z.enum(['v4', 'v6', 'any']).default('any').describe('IP version to validate against'),\n }))\n .implement(async (input) => {\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\n \n let valid = false;\n let detectedVersion: string | undefined;\n \n if (input.version === 'v4' || input.version === 'any') {\n if (ipv4Regex.test(input.ip)) {\n // Additional check for valid ranges (0-255)\n const parts = input.ip.split('.');\n valid = parts.every(part => {\n const num = parseInt(part, 10);\n return num >= 0 && num <= 255;\n });\n if (valid) detectedVersion = 'IPv4';\n }\n }\n \n if (!valid && (input.version === 'v6' || input.version === 'any')) {\n if (ipv6Regex.test(input.ip)) {\n valid = true;\n detectedVersion = 'IPv6';\n }\n }\n \n return {\n valid,\n ip: input.ip,\n version: detectedVersion,\n message: valid ? `Valid ${detectedVersion} address` : 'Invalid IP address format',\n };\n })\n .build();\n\n/**\n * UUID validator tool\n */\nexport const uuidValidator = toolBuilder()\n .name('uuid-validator')\n .description('Validate if a string is a valid UUID (v1, v3, v4, or v5).')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'uuid', 'validate', 'guid'])\n .schema(z.object({\n uuid: z.string().describe('UUID to validate'),\n }))\n .implement(async (input) => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n const valid = uuidRegex.test(input.uuid);\n \n let version: number | undefined;\n if (valid) {\n version = parseInt(input.uuid[14], 10);\n }\n \n return {\n valid,\n uuid: input.uuid,\n version,\n message: valid ? `Valid UUID v${version}` : 'Invalid UUID format',\n };\n })\n .build();\n\n"]}
1
+ {"version":3,"sources":["../src/web/http-client.ts","../src/web/scraper.ts","../src/web/html-parser.ts","../src/web/url-validator.ts","../src/web/web-search/schemas.ts","../src/web/web-search/utils.ts","../src/web/web-search/providers/duckduckgo.ts","../src/web/web-search/providers/serper.ts","../src/web/web-search/index.ts","../src/data/json-processor.ts","../src/data/csv-parser.ts","../src/data/xml-parser.ts","../src/data/transformer.ts","../src/file/file-operations.ts","../src/file/directory-operations.ts","../src/file/path-utilities.ts","../src/utility/date-time.ts","../src/utility/string-utilities.ts","../src/utility/math-operations.ts","../src/utility/validation.ts","../src/agent/ask-human/types.ts","../src/agent/ask-human/tool.ts"],"names":["toolBuilder","ToolCategory","z","axios","cheerio","resolve","path","fs","files","path2","matches","basename","dirname","relative","parse"],"mappings":";;;;;;;;;;;;;AAaA,IAAM,UAAA,GAAa,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,SAAS,CAAC,CAAA;AAKtF,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACjC,KAAK,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,gCAAgC,CAAA;AAAA,EAC/D,QAAQ,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA,CAAE,SAAS,oBAAoB,CAAA;AAAA,EAC/D,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uBAAuB,CAAA;AAAA,EACzE,MAAM,CAAA,CAAE,GAAA,GAAM,QAAA,EAAS,CAAE,SAAS,8CAA8C,CAAA;AAAA,EAChF,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAK,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA,EAC7E,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B;AAClF,CAAC,CAAA;AA0BM,IAAM,UAAA,GAAa,WAAA,EAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,2HAA2H,CAAA,CACvI,QAAA,CAAS,YAAA,CAAa,GAAG,CAAA,CACzB,KAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,KAAK,CAAC,CAAA,CACtC,MAAA,CAAO,iBAAiB,CAAA,CACxB,SAAA,CAAU,OAAO,KAAA,KAAiC;AACjD,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,gBAAgB,MAAM;AAAA;AAAA,GACxB;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAM,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,MAAM,QAAA,CAAS,IAAA;AAAA,IACf,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,MAAA,EAAQ,MAAM,MAAA,IAAU;AAAA,GAC1B;AACF,CAAC,EACA,KAAA;AAKI,IAAM,OAAA,GAAU,aAAY,CAChC,IAAA,CAAK,UAAU,CAAA,CACf,WAAA,CAAY,uEAAuE,CAAA,CACnF,QAAA,CAAS,YAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,KAAK,CAAC,CAAA,CACpC,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAK,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,kBAAkB,CAAA;AAAA,EACjD,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uBAAuB,CAAA;AAAA,EACzE,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B;AAClF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,CAAI,MAAM,GAAA,EAAK;AAAA,IAC1C,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,OAAO,QAAA,CAAS,IAAA;AAClB,CAAC,EACA,KAAA;AAKI,IAAM,QAAA,GAAW,aAAY,CACjC,IAAA,CAAK,WAAW,CAAA,CAChB,WAAA,CAAY,8EAA8E,CAAA,CAC1F,QAAA,CAAS,YAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAC,CAAA,CACnC,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAK,CAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,oBAAoB,CAAA;AAAA,EACnD,IAAA,EAAM,CAAA,CAAE,GAAA,EAAI,CAAE,SAAS,yCAAyC,CAAA;AAAA,EAChE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uBAAuB;AAC3E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,WAAW,MAAM,KAAA,CAAM,KAAK,KAAA,CAAM,GAAA,EAAK,MAAM,IAAA,EAAM;AAAA,IACvD,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAG,KAAA,CAAM;AAAA,KACX;AAAA,IACA,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,OAAO,QAAA,CAAS,IAAA;AAClB,CAAC,EACA,KAAA;AC1FI,IAAM,UAAA,GAAaA,WAAAA,EAAY,CACnC,IAAA,CAAK,aAAa,EAClB,WAAA,CAAY,mIAAmI,CAAA,CAC/I,QAAA,CAASC,YAAAA,CAAa,GAAG,EACzB,IAAA,CAAK,CAAC,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAC,CAAA,CACnD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAKA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oDAAoD,CAAA;AAAA,EAC7F,WAAA,EAAaA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,EACpF,WAAA,EAAaA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,0BAA0B,CAAA;AAAA,EAC3E,YAAA,EAAcA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA,EACnF,aAAA,EAAeA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACzF,eAAA,EAAiBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,8CAA8C,CAAA;AAAA,EACnG,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAK,CAAA,CAAE,SAAS,iCAAiC;AAC/E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAkC;AAElD,EAAA,MAAM,QAAA,GAAW,MAAMC,KAAAA,CAAM,GAAA,CAAI,MAAM,GAAA,EAAK;AAAA,IAC1C,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,OAAA,EAAS;AAAA,MACP,YAAA,EAAc;AAAA;AAChB,GACD,CAAA;AAED,EAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,EAAA,MAAM,CAAA,GAAYC,cAAK,IAAI,CAAA;AAE3B,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,KAAK,KAAA,CAAM;AAAA,GACb;AAGA,EAAA,MAAM,SAAA,GAAY,MAAM,QAAA,GAAW,CAAA,CAAE,MAAM,QAAQ,CAAA,GAAI,EAAE,MAAM,CAAA;AAG/D,EAAA,IAAI,MAAM,WAAA,EAAa;AACrB,IAAA,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,IAAA,EAAK,CAAE,IAAA,EAAK;AAAA,EACtC;AAGA,EAAA,IAAI,MAAM,WAAA,EAAa;AACrB,IAAA,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,IAAA,EAAK,IAAK,EAAA;AAAA,EACpC;AAGA,EAAA,IAAI,MAAM,YAAA,EAAc;AACtB,IAAA,MAAA,CAAO,QAAQ,EAAC;AAChB,IAAA,CAAA,CAAE,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,EAAA,KAAO;AAC3B,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,EAAE,CAAA,CAAE,KAAK,MAAM,CAAA;AAC9B,MAAA,IAAI,IAAA,EAAM;AAER,QAAA,IAAI;AACF,UAAA,MAAM,cAAc,IAAI,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAC7C,UAAA,MAAA,CAAO,KAAA,CAAO,KAAK,WAAW,CAAA;AAAA,QAChC,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,CAAO,KAAA,CAAO,KAAK,IAAI,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAM,aAAA,EAAe;AACvB,IAAA,MAAA,CAAO,SAAS,EAAC;AACjB,IAAA,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,EAAA,KAAO;AAC5B,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,EAAE,CAAA,CAAE,KAAK,KAAK,CAAA;AAC5B,MAAA,IAAI,GAAA,EAAK;AAEP,QAAA,IAAI;AACF,UAAA,MAAM,cAAc,IAAI,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAC5C,UAAA,MAAA,CAAO,MAAA,CAAQ,KAAK,WAAW,CAAA;AAAA,QACjC,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,CAAO,MAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAM,eAAA,EAAiB;AACzB,IAAA,MAAA,CAAO,WAAW,EAAC;AAGnB,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA,MAAU,CAAA,CAAE,2BAA2B,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AAChF,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,GAAQ,KAAA;AAGnC,IAAA,MAAM,WAAA,GAAc,CAAA,CAAE,0BAA0B,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA,IAC7C,CAAA,CAAE,iCAAiC,CAAA,CAAE,IAAA,CAAK,SAAS,CAAA;AACtE,IAAA,IAAI,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,WAAA;AAG/C,IAAA,CAAA,CAAE,4BAA4B,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,EAAA,KAAO;AAC9C,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,IAAK,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,UAAU,CAAA;AACxD,MAAA,MAAM,OAAA,GAAU,CAAA,CAAE,EAAE,CAAA,CAAE,KAAK,SAAS,CAAA;AACpC,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,MAAA,CAAO,QAAA,CAAU,IAAI,CAAA,GAAI,OAAA;AAAA,MAC3B;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,MAAA,CAAO,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,CAAC,GAAG,EAAA,MAAQ;AAAA,MAC1C,MAAM,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,GAAO,IAAA,EAAK;AAAA,MACxB,IAAA,EAAM,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA;AAAK,KACnB,CAAE,EAAE,GAAA,EAAI;AAAA,EACV;AAEA,EAAA,OAAO,MAAA;AACT,CAAC,EACA,KAAA;AC/HI,IAAM,UAAA,GAAaJ,WAAAA,EAAY,CACnC,IAAA,CAAK,aAAa,EAClB,WAAA,CAAY,wHAAwH,CAAA,CACpI,QAAA,CAASC,YAAAA,CAAa,GAAG,EACzB,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,SAAS,CAAC,CAAA,CACrD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,EACrD,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+BAA+B,CAAA;AAAA,EAC7D,WAAA,EAAaA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6CAA6C,CAAA;AAAA,EAC7F,WAAA,EAAaA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,yCAAyC,CAAA;AAAA,EAC1F,iBAAA,EAAmBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gEAAgE;AACtJ,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,CAAA,GAAY,QAAA,CAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAA;AAElC,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,CAAC,GAAG,EAAA,KAAO;AACvC,IAAA,MAAM,GAAA,GAAM,EAAE,EAAE,CAAA;AAChB,IAAA,MAAM,OAAY,EAAC;AAEnB,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,IAAA,GAAO,GAAA,CAAI,IAAA,EAAK,CAAE,IAAA,EAAK;AAAA,IAC9B;AAEA,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,IAAA,GAAO,IAAI,IAAA,EAAK;AAAA,IACvB;AAEA,IAAA,IAAI,KAAA,CAAM,iBAAA,IAAqB,KAAA,CAAM,iBAAA,CAAkB,SAAS,CAAA,EAAG;AACjE,MAAA,IAAA,CAAK,aAAa,EAAC;AACnB,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,iBAAA,EAAmB;AAC1C,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC3B,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,GAAI,KAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,EAAE,GAAA,EAAI;AAEP,EAAA,OAAO;AAAA,IACL,OAAO,OAAA,CAAQ,MAAA;AAAA,IACf;AAAA,GACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,wFAAwF,CAAA,CACpG,QAAA,CAASC,YAAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,QAAQ,CAAC,CAAA,CAC3C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wCAAwC,CAAA;AAAA,EAClE,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6CAA6C;AAC7F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,CAAA,GAAY,QAAA,CAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,QAA+D,EAAC;AAEtE,EAAA,CAAA,CAAE,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,EAAA,KAAO;AAC3B,IAAA,MAAM,GAAA,GAAM,EAAE,EAAE,CAAA;AAChB,IAAA,IAAI,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,IAAK,EAAA;AAG/B,IAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,GAAA,CAAI,IAAA,EAAK,CAAE,IAAA,EAAK;AAAA,MACtB,IAAA;AAAA,MACA,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,OAAO;AAAA,KACxB,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,MAAA;AAAA,IACb;AAAA,GACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,iFAAiF,CAAA,CAC7F,QAAA,CAASC,YAAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,KAAK,CAAC,CAAA,CACzC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yCAAyC,CAAA;AAAA,EACnE,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,kDAAkD;AAClG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,CAAA,GAAY,QAAA,CAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,SAAgG,EAAC;AAEvG,EAAA,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,EAAA,KAAO;AAC5B,IAAA,MAAM,GAAA,GAAM,EAAE,EAAE,CAAA;AAChB,IAAA,IAAI,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AAG7B,IAAA,IAAI,KAAA,CAAM,WAAW,GAAA,EAAK;AACxB,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,IAAI,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA;AAAA,MACpC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,GAAA;AAAA,MACA,GAAA,EAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,MACnB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AAAA,MACvB,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AAAA,MACvB,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,QAAQ;AAAA,KAC1B,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,MAAA;AAAA,IACd;AAAA,GACF;AACF,CAAC,EACA,KAAA;ACxHI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,+IAA+I,CAAA,CAC3J,QAAA,CAASC,YAAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,UAAU,CAAC,CAAA,CAC9C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+BAA+B;AAC1D,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAwC;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAEhC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,KAAK,MAAA,CAAO,IAAA;AAAA,MACZ,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAQ,MAAA,CAAO;AAAA,KACjB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,iFAAiF,CAAA,CAC7F,QAAA,CAASC,YAAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,KAAA,EAAO,SAAA,EAAW,WAAW,CAAC,CAAA,CACpC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,QAAA,EAAUA,EAAE,MAAA,EAAO,CAAE,QAAQ,OAAO,CAAA,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC7E,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB,CAAA;AAAA,EACvD,MAAMA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,sBAAsB,CAAA;AAAA,EAC3D,QAAA,EAAUA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAG,CAAA,CAAE,SAAS,UAAU,CAAA;AAAA,EACrD,KAAA,EAAOA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qCAAqC,CAAA;AAAA,EACrF,MAAMA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mBAAmB;AAC1D,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,EAAG,MAAM,QAAQ,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,CAAA,CAAE,CAAA;AAE3D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,IAAA;AAAA,EACnB;AAEA,EAAA,GAAA,CAAI,QAAA,GAAW,MAAM,QAAA,IAAY,GAAA;AAEjC,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACpD,MAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,IAAA;AAAA,EACnB;AAEA,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,CAAI,IAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,QAAQ,GAAA,CAAI;AAAA;AACd,GACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,cAAA,GAAiBF,aAAY,CACvC,IAAA,CAAK,kBAAkB,CAAA,CACvB,WAAA,CAAY,4EAA4E,CAAA,CACxF,QAAA,CAASC,YAAAA,CAAa,GAAG,CAAA,CACzB,IAAA,CAAK,CAAC,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC,CAAA,CACxC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qEAAqE;AAClG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,YAAA;AAEJ,EAAA,IAAI;AAEF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,YAAA,GAAe,GAAA,CAAI,YAAA;AAAA,EACrB,CAAA,CAAA,MAAQ;AAEN,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA;AAC/E,IAAA,YAAA,GAAe,IAAI,gBAAgB,WAAW,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,SAA4C,EAAC;AAEnD,EAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACnC,IAAA,IAAI,MAAA,CAAO,GAAG,CAAA,EAAG;AAEf,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AAC9B,QAAC,MAAA,CAAO,GAAG,CAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,CAAC,MAAA,CAAO,GAAG,GAAa,KAAK,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE;AAAA,GAC7B;AACF,CAAC,EACA,KAAA;ACxJI,IAAM,eAAA,GAAkBA,EAAE,MAAA,CAAO;AAAA,EACtC,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,kBAAkB,CAAA;AAAA,EACpD,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,IAAI,CAAC,CAAA,CACL,GAAA,CAAI,EAAE,CAAA,CACN,OAAA,CAAQ,EAAE,CAAA,CACV,SAAS,4CAA4C,CAAA;AAAA,EACxD,YAAA,EAAcA,EACX,OAAA,EAAQ,CACR,QAAQ,KAAK,CAAA,CACb,SAAS,0DAA0D,CAAA;AAAA,EACtE,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,IAAI,GAAI,CAAA,CACR,GAAA,CAAI,GAAK,CAAA,CACT,OAAA,CAAQ,GAAK,CAAA,CACb,SAAS,8DAA8D;AAC5E,CAAC;AAKM,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI;AAAA,EACrB,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,OAAA,EAASA,EAAE,OAAA,EAAQ;AAAA,EACnB,QAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,YAAA,EAAc,QAAQ,CAAC,CAAA;AAAA,EACvC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,kBAAkB,CAAA;AAAA,EACnC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,EACP,MAAA,CAAO;AAAA,IACN,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAClC,YAAA,EAAcA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAAS,GACpC,EACA,QAAA;AACL,CAAC;;;AC9CM,SAAS,eAAA,GAAsC;AACpD,EAAA,OAAO,QAAQ,GAAA,CAAI,cAAA;AACrB;AAYA,eAAsB,YACpB,EAAA,EAC0C;AAC1C,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,EAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAC9B,EAAA,OAAO,EAAE,QAAQ,QAAA,EAAS;AAC5B;AAKO,SAAS,cAAc,KAAA,EAAuB;AACnD,EAAA,OAAO,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACzC;AAKO,IAAM,oBAAA,GAAoC;AAAA,EAC/C,UAAA,EAAY,CAAA;AAAA,EACZ,YAAA,EAAc,GAAA;AAAA;AAAA,EACd,QAAA,EAAU,GAAA;AAAA;AAAA,EACV,iBAAA,EAAmB;AACrB,CAAA;AAKO,IAAM,eAAA,GAAkB,GAAA;AAKxB,SAAS,iBAAiB,KAAA,EAAqB;AAEpD,EAAA,IAAI,KAAA,CAAM,SAAS,YAAA,IAAgB,KAAA,CAAM,SAAS,WAAA,IAAe,KAAA,CAAM,SAAS,WAAA,EAAa;AAC3F,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,IAAA,KAAS,cAAA,IAAkB,MAAM,OAAA,EAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AACvE,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAM,QAAA,EAAU,MAAA,IAAU,OAAO,KAAA,CAAM,QAAA,EAAU,SAAS,GAAA,EAAK;AACjE,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACG,aAAY,UAAA,CAAWA,QAAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAKA,eAAsB,gBAAA,CACpB,EAAA,EACA,MAAA,GAAsB,oBAAA,EACV;AACZ,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,QAAQ,MAAA,CAAO,YAAA;AAEnB,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,MAAA,CAAO,YAAY,OAAA,EAAA,EAAW;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,SAAA,GAAY,KAAA;AAGZ,MAAA,IAAI,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC5B,QAAA,MAAM,KAAA;AAAA,MACR;AAGA,MAAA,IAAI,OAAA,KAAY,OAAO,UAAA,EAAY;AACjC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,MAAM,KAAK,CAAA;AAGjB,MAAA,KAAA,GAAQ,KAAK,GAAA,CAAI,KAAA,GAAQ,MAAA,CAAO,iBAAA,EAAmB,OAAO,QAAQ,CAAA;AAAA,IACpE;AAAA,EACF;AAGA,EAAA,MAAM,SAAA;AACR;;;AC3FO,IAAM,qBAAN,MAAmD;AAAA,EACxD,IAAA,GAAO,YAAA;AAAA;AAAA;AAAA;AAAA,EAKP,WAAA,GAAuB;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CACJ,KAAA,EACA,UAAA,EACA,UAAkB,eAAA,EACO;AACzB,IAAA,OAAO,iBAAiB,YAAY;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAMF,KAAAA,CAAM,GAAA;AAAA,UAC3B,6BAAA;AAAA,UACA;AAAA,YACE,MAAA,EAAQ;AAAA,cACN,CAAA,EAAG,KAAA;AAAA,cACH,MAAA,EAAQ;AAAA,aACV;AAAA,YACA,OAAA,EAAS;AAAA,cACP,YAAA,EACE;AAAA,aACJ;AAAA,YACA;AAAA;AACF,SACF;AAEA,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,IAAA,EAAM,UAAU,CAAA;AAAA,MACxD,SAAS,KAAA,EAAY;AACnB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC9D;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAA,CACN,MACA,UAAA,EACgB;AAChB,IAAA,MAAM,UAA0B,EAAC;AAGjC,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,OAAO,OAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,WAAA,EAAa;AACrC,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,KAAK,OAAA,IAAW,QAAA;AAAA,QACvB,MAAM,IAAA,CAAK,WAAA;AAAA,QACX,SAAS,IAAA,CAAK,QAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AAGD,MAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AACvD,MAAA,MAAM,SAAA,GAAY,aAAa,OAAA,CAAQ,MAAA;AACvC,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,GAAG,SAAS,CAAA;AAE7D,MAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,QAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,QAAA,EAAU;AAEhC,UAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACzC,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,UAAA,CAAW,CAAC,CAAA,IAAK,KAAA,CAAM,IAAA;AAAA,YAC9B,MAAM,KAAA,CAAM,QAAA;AAAA,YACZ,SAAS,KAAA,CAAM,IAAA;AAAA,YACf,QAAA,EAAU,QAAQ,MAAA,GAAS;AAAA,WAC5B,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,MAAA,MAAM,SAAA,GAAY,aAAa,OAAA,CAAQ,MAAA;AACvC,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,GAAG,SAAS,CAAA;AAExD,MAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,QAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAA,EAAU;AAElC,UAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,KAAA,EAAO,UAAA,CAAW,CAAC,CAAA,IAAK,MAAA,CAAO,IAAA;AAAA,YAC/B,MAAM,MAAA,CAAO,QAAA;AAAA,YACb,SAAS,MAAA,CAAO,IAAA;AAAA,YAChB,QAAA,EAAU,QAAQ,MAAA,GAAS;AAAA,WAC5B,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAKO,SAAS,wBAAA,GAA+C;AAC7D,EAAA,OAAO,IAAI,kBAAA,EAAmB;AAChC;ACjIO,IAAM,iBAAN,MAA+C;AAAA,EACpD,IAAA,GAAO,QAAA;AAAA,EACC,MAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAS,eAAA,EAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAuB;AACrB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CACJ,KAAA,EACA,UAAA,EACA,UAAkB,eAAA,EACO;AACzB,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,iBAAiB,YAAY;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAMA,KAAAA,CAAM,IAAA;AAAA,UAC3B,kCAAA;AAAA,UACA;AAAA,YACE,CAAA,EAAG,KAAA;AAAA,YACH,GAAA,EAAK;AAAA,WACP;AAAA,UACA;AAAA,YACE,OAAA,EAAS;AAAA,cACP,aAAa,IAAA,CAAK,MAAA;AAAA,cAClB,cAAA,EAAgB;AAAA,aAClB;AAAA,YACA;AAAA;AACF,SACF;AAEA,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,QAAA,CAAS,IAAA,EAAM,UAAU,CAAA;AAAA,MACxD,SAAS,KAAA,EAAY;AACnB,QAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AAClC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AAClC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC1D;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAA,CACN,MACA,UAAA,EACgB;AAEhB,IAAA,IAAI,CAAC,KAAK,OAAA,IAAW,IAAA,CAAK,QAAQ,MAAA,KAAW,CAAA,IAAK,cAAc,CAAA,EAAG;AACjE,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,MAAM,UAA0B,EAAC;AAGjC,IAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,UAAU,CAAA;AAE/D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,EAAgB,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAG3B,MAAA,IAAI,CAAC,KAAK,KAAA,IAAS,CAAC,KAAK,IAAA,IAAQ,CAAC,KAAK,OAAA,EAAS;AAC9C,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,CAAA,GAAI;AAAA,OAChC,CAAA;AAGD,MAAA,IAAI,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChC,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAKO,SAAS,oBAAA,GAAuC;AACrD,EAAA,OAAO,IAAI,cAAA,EAAe;AAC5B;;;ACnHO,IAAM,SAAA,GAAYH,WAAAA,EAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA;AAAA,EACC;AAGF,CAAA,CACC,SAASC,YAAAA,CAAa,GAAG,EACzB,IAAA,CAAK,CAAC,UAAU,KAAA,EAAO,QAAA,EAAU,cAAc,QAAA,EAAU,UAAU,CAAC,CAAA,CACpE,MAAA,CAAO,eAAe,CAAA,CACtB,SAAA,CAAU,OAAO,KAAA,KAAoD;AACpE,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,UAAA,GAAa,EAAA;AAAA,IACb,YAAA,GAAe,KAAA;AAAA,IACf,OAAA,GAAU;AAAA,GACZ,GAAI,KAAA;AAGJ,EAAA,MAAM,cAAA,GAAiB,cAAc,KAAK,CAAA;AAG1C,EAAA,MAAM,aAAa,wBAAA,EAAyB;AAC5C,EAAA,MAAM,SAAS,oBAAA,EAAqB;AAGpC,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,gBAAA,GAA0C,IAAA;AAE9C,EAAA,IAAI,YAAA,IAAgB,MAAA,CAAO,WAAA,EAAY,EAAG;AACxC,IAAA,eAAA,GAAkB,MAAA;AAClB,IAAA,gBAAA,GAAmB,UAAA;AAAA,EACrB,CAAA,MAAO;AACL,IAAA,eAAA,GAAkB,UAAA;AAClB,IAAA,gBAAA,GAAmB,MAAA,CAAO,WAAA,EAAY,GAAI,MAAA,GAAS,IAAA;AAAA,EACrD;AAEA,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,KAAa,MAAM,WAAA;AAAA,MAAY,MACtD,eAAA,CAAgB,MAAA,CAAO,cAAA,EAAgB,YAAY,OAAO;AAAA,KAC5D;AAGA,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,QAAQ,eAAA,CAAgB,IAAA;AAAA,QACxB,KAAA,EAAO,cAAA;AAAA,QACP,OAAA;AAAA,QACA,cAAc,OAAA,CAAQ,MAAA;AAAA,QACtB,QAAA,EAAU;AAAA,UACR,YAAA,EAAc,QAAA;AAAA,UACd,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,IACF;AAGA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAiB,QAAA,EAAU,gBAAA,KACzC,MAAM,WAAA;AAAA,QAAY,MAChB,gBAAA,CAAkB,MAAA,CAAO,cAAA,EAAgB,YAAY,OAAO;AAAA,OAC9D;AAEF,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,QAAQ,gBAAA,CAAiB,IAAA;AAAA,QACzB,KAAA,EAAO,cAAA;AAAA,QACP,OAAA,EAAS,eAAA;AAAA,QACT,cAAc,eAAA,CAAgB,MAAA;AAAA,QAC9B,QAAA,EAAU;AAAA,UACR,YAAA,EAAc,gBAAA;AAAA,UACd,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,QAAQ,eAAA,CAAgB,IAAA;AAAA,MACxB,KAAA,EAAO,cAAA;AAAA,MACP,SAAS,EAAC;AAAA,MACV,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU;AAAA,QACR,YAAA,EAAc,QAAA;AAAA,QACd,YAAA,EAAc;AAAA;AAChB,KACF;AAAA,EACF,SAAS,KAAA,EAAY;AAEnB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,QAAQ,eAAA,CAAgB,IAAA;AAAA,MACxB,KAAA,EAAO,cAAA;AAAA,MACP,SAAS,EAAC;AAAA,MACV,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF;AACF,CAAC,EACA,KAAA;ACxHI,IAAM,UAAA,GAAaD,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,mGAAmG,CAAA,CAC/G,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAC,CAAA,CAC9B,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sBAAsB,CAAA;AAAA,EAChD,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,oDAAoD;AACjG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACpC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM,MAAA;AAAA,MACN,MAAM,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,UAAU,OAAO;AAAA,KACjD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,6EAA6E,CAAA,CACzF,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,MAAM,CAAC,CAAA,CAC5C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,SAAS,gCAAgC,CAAA;AAAA,EACvD,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,yCAAyC,CAAA;AAAA,EACrF,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,wDAAwD;AACjG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GACf,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA,GAC7C,IAAA,CAAK,SAAA,CAAU,MAAM,IAAI,CAAA;AAE7B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,+FAA+F,CAAA,CAC3G,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAC,CAAA,CACtC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,SAAS,oBAAoB,CAAA;AAAA,EAC3C,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iEAAiE;AAC7F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAClC,IAAA,IAAI,UAAU,KAAA,CAAM,IAAA;AAEpB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AAChD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,GAAG,GAAA,EAAK,KAAK,CAAA,GAAI,UAAA;AACvB,QAAA,OAAA,GAAU,QAAQ,GAAG,CAAA,CAAE,QAAA,CAAS,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,MAC5C,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,QAAQ,IAAI,CAAA;AAAA,MACxB;AAEA,MAAA,IAAI,YAAY,KAAA,CAAA,EAAW;AACzB,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO,CAAA,gBAAA,EAAmB,KAAA,CAAM,IAAI,CAAA;AAAA,SACtC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,OAAA;AAAA,MACP,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,UAAU,OAAO;AAAA,KAClD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,uGAAuG,CAAA,CACnH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,MAAM,CAAC,CAAA,CAC1C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB;AACrD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,IAAI,CAAA;AACrB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACX;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,2FAA2F,CAAA,CACvG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,MAAM,CAAC,CAAA,CACzC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,iBAAiB,CAAC,CAAA,CAAE,QAAA,CAAS,2BAA2B,CAAA;AAAA,EAC1F,IAAA,EAAMA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,qCAAqC;AACjF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,MAAM,IAAA,EAAM;AAEd,IAAA,MAAM,SAAA,GAAY,CAAC,MAAA,EAAa,MAAA,KAAqB;AACnD,MAAA,MAAM,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAC3B,MAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,QAAA,IAAI,MAAA,CAAO,GAAG,CAAA,IAAK,OAAO,OAAO,GAAG,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AACjF,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,GAAG,KAAK,EAAC,EAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QACxD,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,QAC1B;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,SAAA,CAAU,GAAA,EAAK,GAAG,CAAA,EAAG,EAAE,CAAA;AAAA,EACnE,CAAA,MAAO;AAEL,IAAA,OAAO,OAAO,MAAA,CAAO,EAAC,EAAG,GAAG,MAAM,OAAO,CAAA;AAAA,EAC3C;AACF,CAAC,EACA,KAAA;ACtKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,8FAA8F,CAAA,CAC1G,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAC,CAAA,CACtC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC9C,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAG,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,EACxE,UAAA,EAAYA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClF,cAAA,EAAgBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,EAChF,IAAA,EAAMA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6BAA6B;AACxE,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC/B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,UAAA;AAAA,MACf,kBAAkB,KAAA,CAAM,cAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,kBAAA,EAAoB;AAAA,KACrB,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM,OAAA;AAAA,MACN,UAAU,OAAA,CAAQ,MAAA;AAAA,MAClB,WAAA,EAAa,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,MAAA,GAAS;AAAA,KACrE;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,6FAA6F,CAAA,CACzG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,MAAM,CAAC,CAAA,CAC7C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAOA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,cAAc,CAAC,CAAC,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,EACvG,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAG,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,EACxE,cAAA,EAAgBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACzF,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,gDAAgD;AAC5H,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM;AAAA,MAChC,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,cAAA;AAAA,MACd,SAAS,KAAA,CAAM;AAAA,KAChB,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,GAAA;AAAA,MACA,QAAA,EAAU,MAAM,IAAA,CAAK;AAAA,KACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,2FAA2F,CAAA,CACvG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uBAAuB,CAAA;AAAA,EAChD,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAG,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,EACxE,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,8BAA8B;AAC5E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC/B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB,IAAA;AAAA,MAClB,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GACf,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,GAC/B,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAE1B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,aAAa,OAAA,CAAQ;AAAA,KACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,0FAA0F,CAAA,CACtG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,MAAM,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B,CAAA;AAAA,EACxD,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,QAAQ,GAAG,CAAA,CAAE,SAAS,4BAA4B;AAC1E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAElC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,UAAU,IAAA,EAAM;AAAA,MAC1B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,GAAA;AAAA,MACA,UAAU,IAAA,CAAK;AAAA,KACjB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AC1JI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,6FAA6F,CAAA,CACzG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,OAAA,EAAS,MAAM,CAAC,CAAA,CAC7B,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC9C,gBAAA,EAAkBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,uBAAuB,CAAA;AAAA,EAC7E,mBAAA,EAAqBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,4CAA4C,CAAA;AAAA,EACpG,UAAA,EAAYA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,kCAAkC;AACnF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,MAC3B,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,qBAAqB,KAAA,CAAM,mBAAA;AAAA,MAC3B,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,aAAA,EAAe;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAErC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,6FAA6F,CAAA,CACzG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,MAAM,CAAC,CAAA,CAC7C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,SAAS,0BAA0B,CAAA;AAAA,EACjD,QAAA,EAAUA,EAAE,MAAA,EAAO,CAAE,QAAQ,MAAM,CAAA,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC5E,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACzE,UAAA,EAAYA,EAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,wDAAwD;AACrG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,MAAA;AAEnC,IAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW;AAAA,MAC7B,MAAA,EAAQ,MAAM,MAAA,IAAU,KAAA;AAAA,MACxB,QAAA,EAAU,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAAA,MAC/B,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAGD,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,KAAA,CAAM,IAAA,GAAO,EAAE,CAAC,QAAQ,GAAG,KAAA,CAAM,IAAA,EAAK;AACnF,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA;AAEvC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,wFAAwF,CAAA,CACpG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uBAAuB,CAAA;AAAA,EAChD,gBAAA,EAAkBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,qCAAqC,CAAA;AAAA,EAC3F,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,8BAA8B;AAC5E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,MAC3B,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,mBAAA,EAAqB,IAAA;AAAA,MACrB,UAAA,EAAY;AAAA,KACb,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GACf,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,GAC9B,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEzB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,qEAAqE,CAAA,CACjF,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,MAAM,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB,CAAA;AAAA,EAClD,QAAA,EAAUA,EAAE,MAAA,EAAO,CAAE,QAAQ,MAAM,CAAA,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC5E,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,6BAA6B;AAC3E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,MAAA;AAEnC,IAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW;AAAA,MAC7B,MAAA,EAAQ,MAAM,MAAA,IAAU,KAAA;AAAA,MACxB,QAAA,EAAU,IAAA;AAAA,MACV,gBAAA,EAAkB;AAAA,KACnB,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB,KAAK,QAAQ,CAAA,GAAI,OAAO,EAAE,CAAC,QAAQ,GAAG,IAAA,EAAK;AACjE,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA;AAEvC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AC3JI,IAAM,WAAA,GAAcF,aAAY,CACpC,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,oGAAoG,CAAA,CAChH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC7C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,EAC5E,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qEAAqE,CAAA;AAAA,EACnG,QAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,UAAU,YAAA,EAAc,cAAA,EAAgB,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,WAAW,CAAC,CAAA,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC9I,KAAA,EAAOA,CAAAA,CAAE,GAAA,EAAI,CAAE,SAAS,0BAA0B;AACpD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAUI,KAAAA,KAAsB;AACtD,IAAA,OAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EACrE,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS;AAC5C,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,IAAA,EAAM,KAAA,CAAM,QAAQ,CAAA;AAErD,IAAA,QAAQ,MAAM,QAAA;AAAU,MACtB,KAAK,QAAA;AACH,QAAA,OAAO,cAAc,KAAA,CAAM,KAAA;AAAA,MAC7B,KAAK,YAAA;AACH,QAAA,OAAO,cAAc,KAAA,CAAM,KAAA;AAAA,MAC7B,KAAK,cAAA;AACH,QAAA,OAAO,YAAY,KAAA,CAAM,KAAA;AAAA,MAC3B,KAAK,WAAA;AACH,QAAA,OAAO,YAAY,KAAA,CAAM,KAAA;AAAA,MAC3B,KAAK,UAAA;AACH,QAAA,OAAO,OAAO,SAAS,CAAA,CAAE,SAAS,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACvD,KAAK,aAAA;AACH,QAAA,OAAO,OAAO,SAAS,CAAA,CAAE,WAAW,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACzD,KAAK,WAAA;AACH,QAAA,OAAO,OAAO,SAAS,CAAA,CAAE,SAAS,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACvD;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,aAAA,EAAe,MAAM,KAAA,CAAM,MAAA;AAAA,IAC3B,eAAe,QAAA,CAAS;AAAA,GAC1B;AACF,CAAC,EACA,KAAA;AAKI,IAAM,QAAA,GAAWN,aAAY,CACjC,IAAA,CAAK,WAAW,CAAA,CAChB,WAAA,CAAY,kHAAkH,CAAA,CAC9H,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC1C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,EACzE,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,oDAAoD;AACxH,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACvC,IAAA,MAAM,SAAc,EAAC;AACrB,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,UAAA,EAAY;AAEnC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,IAAI,CAAA;AAC3E,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,IACjB;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAO,MAAA,CAAO;AAAA,GAChB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,6EAA6E,CAAA,CACzF,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC3C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA,CAAE,QAAA,CAAS,eAAe,CAAA;AAAA,EAC1E,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mEAAmE,CAAA;AAAA,EACjG,KAAA,EAAOA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,qCAAqC;AAC9F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAUI,KAAAA,KAAsB;AACtD,IAAA,OAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EACrE,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAC7C,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA;AAE/C,IAAA,IAAI,SAAS,MAAA,EAAQ,OAAO,KAAA,CAAM,KAAA,KAAU,QAAQ,EAAA,GAAK,CAAA;AACzD,IAAA,IAAI,SAAS,MAAA,EAAQ,OAAO,KAAA,CAAM,KAAA,KAAU,QAAQ,CAAA,GAAI,EAAA;AACxD,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAO,MAAA,CAAO;AAAA,GAChB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeN,aAAY,CACrC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,uFAAuF,CAAA,CACnG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC5C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA,CAAE,QAAA,CAAS,gBAAgB,CAAA;AAAA,EAC3E,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B;AAC3D,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAAgC,EAAC;AAEvC,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AACvC,IAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG;AAChB,MAAA,MAAA,CAAO,GAAG,IAAI,EAAC;AAAA,IACjB;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,UAAA,EAAY,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA;AAAA,IAChC,UAAA,EAAY,MAAM,KAAA,CAAM;AAAA,GAC1B;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,gFAAgF,CAAA,CAC5F,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC5C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,gBAAgB,CAAC,CAAA,CAAE,QAAA,CAAS,eAAe,CAAA;AAAA,EAC7E,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,gCAAgC;AACpG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,UAAA,EAAY;AACnC,IAAA,IAAI,IAAA,IAAQ,MAAM,MAAA,EAAQ;AACxB,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,gFAAgF,CAAA,CAC5F,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAC,CAAA,CAC5C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,GAAA,EAAI,CAAE,QAAA,CAAS,gBAAgB,CAAC,CAAA,CAAE,QAAA,CAAS,eAAe,CAAA;AAAA,EAC7E,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,gCAAgC;AACpG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,OAAA,GAA+B,EAAE,GAAG,KAAA,CAAM,MAAA,EAAO;AAEvD,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,UAAA,EAAY;AACnC,IAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,EACrB;AAEA,EAAA,OAAO,OAAA;AACT,CAAC,EACA,KAAA;AC1LI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,0GAA0G,CAAA,CACtH,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAC,CAAA,CACzC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,0BAA0B,CAAA;AAAA,EACpD,UAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,SAAS,OAAA,EAAS,QAAA,EAAU,KAAA,EAAO,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,SAAS,eAAe;AAClH,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,MAAMK,QAAA,CAAG,SAAS,KAAA,CAAM,IAAA,EAAM,MAAM,QAA0B,CAAA;AAC9E,IAAA,MAAM,KAAA,GAAQ,MAAMA,QAAA,CAAG,IAAA,CAAK,MAAM,IAAI,CAAA;AAEtC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,OAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAU,KAAA,CAAM;AAAA,KAClB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,qBAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaP,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,6FAA8F,CAAA,CAC1G,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,YAAY,CAAC,CAAA,CAC1C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,EACrD,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC3D,QAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAQ,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,KAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,SAAS,eAAe,CAAA;AAAA,EACtG,UAAA,EAAYA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,+CAAgD;AAClG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AAEF,IAAA,IAAI,MAAM,UAAA,EAAY;AACpB,MAAA,MAAM,GAAA,GAAWI,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,MAAA,MAAMC,SAAG,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IACzC;AAEA,IAAA,MAAMA,SAAG,SAAA,CAAU,KAAA,CAAM,MAAM,KAAA,CAAM,OAAA,EAAS,MAAM,QAA0B,CAAA;AAC9E,IAAA,MAAM,KAAA,GAAQ,MAAMA,QAAA,CAAG,IAAA,CAAK,MAAM,IAAI,CAAA;AAEtC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAU,KAAA,CAAM;AAAA,KAClB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,sBAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaP,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,4EAA6E,CAAA,CACzF,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,YAAY,CAAC,CAAA,CAC3C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+BAA+B,CAAA;AAAA,EACzD,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+BAA+B,CAAA;AAAA,EAC5D,QAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,SAAS,eAAe;AACvF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAMK,SAAG,UAAA,CAAW,KAAA,CAAM,MAAM,KAAA,CAAM,OAAA,EAAS,MAAM,QAA0B,CAAA;AAC/E,IAAA,MAAM,KAAA,GAAQ,MAAMA,QAAA,CAAG,IAAA,CAAK,MAAM,IAAI,CAAA;AAEtC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaP,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,iFAAkF,CAAA,CAC9F,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,YAAY,CAAC,CAAA,CAC/C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,4BAA4B;AACxD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAMK,QAAA,CAAG,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAE1B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,uBAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaP,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,4DAA4D,CAAA,CACxE,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,YAAY,CAAC,CAAA,CAC9C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,eAAe;AAC3C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAMK,QAAA,CAAG,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,MAAMA,QAAA,CAAG,IAAA,CAAK,MAAM,IAAI,CAAA;AAEtC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,MACrB,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,MAC/B,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAA,EAAU,KAAA,CAAM,KAAA,CAAM,WAAA;AAAY,KACpC;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;ACtKI,IAAM,aAAA,GAAgBP,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,6GAA6G,CAAA,CACzH,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,WAAA,EAAa,MAAA,EAAQ,OAAA,EAAS,YAAY,CAAC,CAAA,CACjD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+BAA+B,CAAA;AAAA,EACzD,SAAA,EAAWA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,0CAA0C,CAAA;AAAA,EACzF,cAAA,EAAgBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,gDAAgD,CAAA;AAAA,EACpG,WAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,sDAAsD;AAClG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,EAAa,SAAA,KAAuC;AAC3E,MAAA,MAAM,OAAA,GAAU,MAAMK,QAAAA,CAAG,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC7D,MAAA,MAAMC,SAAe,EAAC;AAEtB,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AAC1C,QAAA,MAAM,YAAA,GAAoBA,KAAA,CAAA,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,QAAQ,CAAA;AAGvD,QAAA,IAAI,KAAA,CAAM,aAAa,CAAC,KAAA,CAAM,KAAK,QAAA,CAAS,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5D,UAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,IAAK,CAAC,SAAA,EAAW;AACtC,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,UAAA,MAAM,KAAA,GAAQ,MAAMF,QAAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AACpC,UAAAC,OAAM,IAAA,CAAK;AAAA,YACT,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,IAAA,EAAM,YAAA;AAAA,YACN,QAAA;AAAA,YACA,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,YACrB,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,YAC/B,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,QAAA,EAAU,KAAA,CAAM,KAAA,CAAM,WAAA;AAAY,WACnC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAAA,OAAM,IAAA,CAAK;AAAA,YACT,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,IAAA,EAAM,YAAA;AAAA,YACN,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,YACrB,WAAA,EAAa,MAAM,WAAA;AAAY,WAChC,CAAA;AAAA,QACH;AAGA,QAAA,IAAI,SAAA,IAAa,KAAA,CAAM,WAAA,EAAY,EAAG;AACpC,UAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAC/C,UAAAA,MAAAA,CAAM,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,QACxB;AAAA,MACF;AAEA,MAAA,OAAOA,MAAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,QAAQ,MAAM,SAAA,CAAU,MAAM,IAAA,EAAM,KAAA,CAAM,aAAa,KAAK,CAAA;AAElE,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA;AAAA,MACA,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,eAAA,GAAkBR,aAAY,CACxC,IAAA,CAAK,kBAAkB,CAAA,CACvB,WAAA,CAAY,uFAAwF,CAAA,CACpG,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,YAAY,CAAC,CAAA,CACnD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iCAAiC,CAAA;AAAA,EAC3D,SAAA,EAAWA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,+CAAgD;AAChG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAMK,QAAAA,CAAG,MAAM,KAAA,CAAM,IAAA,EAAM,EAAE,SAAA,EAAW,KAAA,CAAM,WAAW,CAAA;AAEzD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,4BAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,eAAA,GAAkBP,aAAY,CACxC,IAAA,CAAK,kBAAkB,CAAA,CACvB,WAAA,CAAY,8EAA8E,CAAA,CAC1F,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,YAAY,CAAC,CAAA,CACpD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iCAAiC,CAAA;AAAA,EAC3D,SAAA,EAAWA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,uCAAuC;AACxF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAMK,QAAAA,CAAG,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,EAAE,WAAW,KAAA,CAAM,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,CAAA;AAEpE,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAA,EAAS;AAAA,KACX;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,4BAAA;AAAA,MAChD,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaP,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,2FAA2F,CAAA,CACvG,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAC,CAAA,CAC7C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB,CAAA;AAAA,EACvD,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uDAAuD,CAAA;AAAA,EACpF,SAAA,EAAWA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,0BAA0B,CAAA;AAAA,EACxE,aAAA,EAAeA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,iCAAiC;AACtF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,OAAO,GAAA,KAAmC;AAC5D,MAAA,MAAM,OAAA,GAAU,MAAMK,QAAAA,CAAG,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC7D,MAAA,MAAMG,WAAoB,EAAC;AAG3B,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CACxB,OAAA,CAAQ,OAAO,KAAK,CAAA,CACpB,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA;AACtB,MAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,aAAA,GAAgB,EAAA,GAAK,GAAG,CAAA;AAE5E,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AAE1C,QAAA,IAAI,MAAM,MAAA,EAAO,IAAK,MAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AAC5C,UAAAC,QAAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,QACvB;AAEA,QAAA,IAAI,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,WAAA,EAAY,EAAG;AAC1C,UAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,QAAQ,CAAA;AAC7C,UAAAA,QAAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,QAC5B;AAAA,MACF;AAEA,MAAA,OAAOA,QAAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,KAAA,CAAM,SAAS,CAAA;AAEjD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,OAAA;AAAA,MACA,OAAO,OAAA,CAAQ;AAAA,KACjB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,wBAAA;AAAA,MAChD,WAAW,KAAA,CAAM;AAAA,KACnB;AAAA,EACF;AACF,CAAC,EACA,KAAA;ACtMI,IAAM,QAAA,GAAWV,aAAY,CACjC,IAAA,CAAK,WAAW,CAAA,CAChB,WAAA,CAAY,uFAAuF,CAAA,CACnG,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,YAAY,CAAC,CAAA,CACnC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,QAAA,EAAUA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,uBAAuB;AACzF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,MAAA,GAAc,KAAA,CAAA,IAAA,CAAK,GAAG,KAAA,CAAM,QAAQ,CAAA;AAE1C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,UAAU,KAAA,CAAM;AAAA,GAClB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,WAAA,GAAcF,aAAY,CACpC,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,gHAAgH,CAAA,CAC5H,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,YAAY,CAAC,CAAA,CAClD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,kBAAkB;AACjF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,OAAA,CAAQ,GAAG,KAAA,CAAM,KAAK,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAiB,iBAAW,QAAQ;AAAA,GACtC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,SAAA,GAAYF,aAAY,CAClC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,+EAA+E,CAAA,CAC3F,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAY,CAAC,CAAA,CACpC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oBAAoB;AAChD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,MAAA,GAAc,KAAA,CAAA,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAEpC,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,UAAA,EAAiB,KAAA,CAAA,UAAA,CAAW,KAAA,CAAM,IAAI;AAAA,GACxC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,4FAA4F,CAAA,CACxG,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,UAAA,EAAY,YAAY,CAAC,CAAA,CACnD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,WAAW,CAAA;AAAA,EACrC,eAAA,EAAiBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,2BAA2B;AAClF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAMS,SAAAA,GAAW,KAAA,CAAM,eAAA,GACd,KAAA,CAAA,QAAA,CAAS,KAAA,CAAM,IAAA,EAAW,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA,GAC7C,KAAA,CAAA,QAAA,CAAS,MAAM,IAAI,CAAA;AAE5B,EAAA,OAAO;AAAA,IACL,QAAA,EAAAA,SAAAA;AAAA,IACA,SAAA,EAAgB,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI;AAAA,GACpC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,WAAA,GAAcX,aAAY,CACpC,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,wEAAwE,CAAA,CACpF,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,SAAA,EAAW,WAAA,EAAa,YAAY,CAAC,CAAA,CACnD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,WAAW;AACvC,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAMU,QAAAA,GAAe,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAAA,QAAAA;AAAA,IACA,QAAA,EAAe,KAAA,CAAA,QAAA,CAAS,KAAA,CAAM,IAAI;AAAA,GACpC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBZ,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,uEAAuE,CAAA,CACnF,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,WAAA,EAAa,KAAA,EAAO,YAAY,CAAC,CAAA,CAC/C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,WAAW;AACvC,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,GAAA,GAAW,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,GAAA;AAAA,IACX,YAAA,EAAc,IAAI,MAAA,GAAS,CAAA;AAAA,IAC3B,QAAA,EAAe,KAAA,CAAA,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,GAAG;AAAA,GACzC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,YAAY,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,aAAa,CAAA;AAAA,EACvC,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB;AAC5C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAMW,SAAAA,GAAgB,KAAA,CAAA,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,MAAM,EAAE,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,YAAA,EAAcA,SAAAA;AAAA,IACd,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,IAAI,KAAA,CAAM;AAAA,GACZ;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBb,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,wFAAwF,CAAA,CACpG,QAAA,CAASC,YAAAA,CAAa,WAAW,CAAA,CACjC,IAAA,CAAK,CAAC,MAAA,EAAQ,WAAA,EAAa,YAAY,CAAC,CAAA,CACxC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mBAAmB;AAC/C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,UAAA,GAAkB,KAAA,CAAA,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAU,KAAA,CAAM;AAAA,GAClB;AACF,CAAC,EACA,KAAA;AC7KI,IAAM,eAAA,GAAkBF,aAAY,CACxC,IAAA,CAAK,mBAAmB,CAAA,CACxB,WAAA,CAAY,2FAA2F,CAAA,CACvG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAC,CAAA,CACvC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,SAAS,eAAe,CAAA;AAAA,EACjF,cAAcA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4EAA4E,CAAA;AAAA,EACzH,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qCAAqC;AAChF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AAErB,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,KAAA,CAAM,WAAW,KAAA,EAAO;AAC1B,IAAA,SAAA,GAAY,IAAI,WAAA,EAAY;AAAA,EAC9B,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,MAAA,EAAQ;AAClC,IAAA,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,KAAY,GAAI,CAAA;AAAA,EAC7C,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY,MAAM,YAAA,EAAc;AAC1D,IAAA,SAAA,GAAY,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,YAAY,CAAA;AAAA,EAC5C,CAAA,MAAO;AACL,IAAA,SAAA,GAAY,IAAI,WAAA,EAAY;AAAA,EAC9B;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,GAAA,EAAK,IAAI,WAAA,EAAY;AAAA,IACrB,MAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,KAAY,GAAI,CAAA;AAAA,IACrC,IAAA,EAAM,IAAI,WAAA,EAAY;AAAA,IACtB,KAAA,EAAO,GAAA,CAAI,QAAA,EAAS,GAAI,CAAA;AAAA,IACxB,GAAA,EAAK,IAAI,OAAA,EAAQ;AAAA,IACjB,IAAA,EAAM,IAAI,QAAA,EAAS;AAAA,IACnB,MAAA,EAAQ,IAAI,UAAA,EAAW;AAAA,IACvB,MAAA,EAAQ,IAAI,UAAA;AAAW,GACzB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,+GAA+G,CAAA,CAC3H,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAC,CAAA,CAC/B,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yCAAyC,CAAA;AAAA,EACnE,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2DAA2D,CAAA;AAAA,EAC7F,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,+DAA+D;AAC7G,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,IAAI,IAAA;AAGJ,IAAA,IAAI,MAAM,WAAA,EAAa;AACrB,MAAA,IAAA,GAAOY,QAAM,KAAA,CAAM,IAAA,EAAM,MAAM,WAAA,kBAAa,IAAI,MAAM,CAAA;AAAA,IACxD,WAAW,CAAC,KAAA,CAAM,OAAO,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG;AAErC,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,IAAI,GAAI,CAAA;AAAA,IAC3C,CAAA,MAAO;AAEL,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,YAAY,CAAA;AAEjD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,SAAA;AAAA,MACA,GAAA,EAAK,KAAK,WAAA;AAAY,KACxB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,cAAA,GAAiBd,WAAAA,EAAY,CACvC,IAAA,CAAK,iBAAiB,EACtB,WAAA,CAAY,qGAAqG,CAAA,CACjH,QAAA,CAASC,YAAAA,CAAa,OAAO,EAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,YAAY,CAAC,CAAA,CACtD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8CAA8C,CAAA;AAAA,EACxE,SAAA,EAAWA,EAAE,IAAA,CAAK,CAAC,OAAO,UAAU,CAAC,CAAA,CAAE,QAAA,CAAS,sBAAsB,CAAA;AAAA,EACtE,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B,CAAA;AAAA,EACvD,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,SAAS,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,SAAS,CAAC,CAAA,CAAE,SAAS,WAAW;AACxG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAEhC,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,MAAA,EAAO;AAC9C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,KAAc,KAAA,GAC/B,GAAA,CAAI,MAAM,QAAQ,CAAA,GAClB,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA;AAEtB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ,OAAO,WAAA,EAAY;AAAA,MAC3B,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAA,KAAY,GAAI;AAAA,KAC1C;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,cAAA,GAAiBF,aAAY,CACvC,IAAA,CAAK,iBAAiB,CAAA,CACtB,WAAA,CAAY,qFAAqF,CAAA,CACjG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,UAAU,CAAC,CAAA,CAC/C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2CAA2C,CAAA;AAAA,EAC1E,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yCAAyC,CAAA;AAAA,EACtE,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,SAAS,yBAAyB;AAC/F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAElC,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAK,KAAK,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG;AACpC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,UAAA,GAAa,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS;AACjC,MAAA,UAAA,GAAa,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,UAAA,GAAa,mBAAA,CAAoB,KAAK,KAAK,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,UAAA;AAAA,MACA,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAW,MAAM,WAAA,EAAY;AAAA,MAC7B,OAAA,EAAS,IAAI,WAAA;AAAY,KAC3B;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,cAAA,GAAiBF,aAAY,CACvC,IAAA,CAAK,iBAAiB,CAAA,CACtB,WAAA,CAAY,gFAAgF,CAAA,CAC5F,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,YAAY,CAAC,CAAA,CAC9C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uBAAuB,CAAA;AAAA,EAClD,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB;AACrD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAE/B,IAAA,IAAI,CAAC,OAAA,CAAQ,EAAE,KAAK,CAAC,OAAA,CAAQ,EAAE,CAAA,EAAG;AAChC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,aAAA,EAAe,QAAA,CAAS,EAAA,EAAI,EAAE,CAAA;AAAA,MAC9B,YAAA,EAAc,OAAA,CAAQ,EAAA,EAAI,EAAE,CAAA;AAAA,MAC5B,aAAA,EAAe,EAAA,CAAG,OAAA,EAAQ,KAAM,GAAG,OAAA,EAAQ;AAAA,MAC3C,KAAA,EAAO,GAAG,WAAA,EAAY;AAAA,MACtB,KAAA,EAAO,GAAG,WAAA;AAAY,KACxB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AC/NI,IAAM,mBAAA,GAAsBF,aAAY,CAC5C,IAAA,CAAK,uBAAuB,CAAA,CAC5B,WAAA,CAAY,0GAA0G,CAAA,CACtH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,WAAW,CAAC,CAAA,CAC/C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB,CAAA;AAAA,EAC3C,UAAA,EAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,aAAa,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC,CAAA,CAAE,SAAS,oBAAoB;AAC5H,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,MAAA;AAEJ,EAAA,QAAQ,MAAM,UAAA;AAAY,IACxB,KAAK,WAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,KAAK,WAAA,EAAY;AAChC,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,KAAK,WAAA,EAAY;AAChC,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,SAAS,CAAC,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AAC/E,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAA,CACZ,WAAA,EAAY,CACZ,OAAA,CAAQ,mBAAA,EAAqB,CAAC,CAAA,EAAG,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AAC/D,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAA,CACZ,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAU,EAAE,CAAA;AACvB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAA,CACZ,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAU,EAAE,CAAA;AACvB,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,MAAA,GAAS,MAAM,IAAA,CACZ,WAAA,GACA,OAAA,CAAQ,mBAAA,EAAqB,CAAC,CAAA,EAAG,IAAA,KAAS,KAAK,WAAA,EAAa,EAC5D,OAAA,CAAQ,IAAA,EAAM,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,CAAA;AAC7C,MAAA;AAAA,IACF;AACE,MAAA,MAAA,GAAS,KAAA,CAAM,IAAA;AAAA;AAGnB,EAAA,OAAO;AAAA,IACL,UAAU,KAAA,CAAM,IAAA;AAAA,IAChB,SAAA,EAAW,MAAA;AAAA,IACX,YAAY,KAAA,CAAM;AAAA,GACpB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,uGAAuG,CAAA,CACnH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,YAAY,CAAC,CAAA,CACrC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,cAAc,CAAA;AAAA,EACxC,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,SAAS,oBAAoB,CAAA;AAAA,EACpF,YAAYA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0DAA0D;AACvG,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,MAAA;AAEJ,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,qBAAA,EAAuB,MAAM,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACnG,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,KAAS,MAAA,GACzB,IAAI,MAAA,CAAO,CAAA,EAAA,EAAK,KAAK,CAAA,IAAA,EAAO,KAAK,CAAA,GAAA,CAAA,EAAO,GAAG,CAAA,GAC3C,KAAA,CAAM,IAAA,KAAS,OAAA,GACf,IAAI,MAAA,CAAO,CAAA,EAAA,EAAK,KAAK,CAAA,EAAA,CAAA,EAAM,GAAG,CAAA,GAC9B,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,CAAA,EAAO,GAAG,CAAA;AAClC,IAAA,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EACvC,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,MAAM,IAAA,KAAS,MAAA,GACpB,KAAA,CAAM,IAAA,CAAK,MAAK,GAChB,KAAA,CAAM,IAAA,KAAS,OAAA,GACf,MAAM,IAAA,CAAK,SAAA,EAAU,GACrB,KAAA,CAAM,KAAK,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,KAAA,CAAM,IAAA;AAAA,IAChB,OAAA,EAAS,MAAA;AAAA,IACT,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO;AAAA,GACtC;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,4GAA4G,CAAA,CACxH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,SAAA,EAAW,YAAY,CAAC,CAAA,CACxC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mBAAmB,CAAA;AAAA,EAC7C,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uCAAuC,CAAA;AAAA,EACnE,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oBAAoB,CAAA;AAAA,EACjD,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,0DAA0D,CAAA;AAAA,EACrG,eAAA,EAAiBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,yBAAyB;AAChF,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,GAAS,MAAM,EAAA,KAAO,KAAA,CAAM,kBAAkB,GAAA,GAAM,EAAA,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,MAAM,OAAO,CAAA;AAGtD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,UAAU,KAAA,CAAM,IAAA;AAAA,IAChB,MAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,WAAA,GAAcF,aAAY,CACpC,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,oGAAoG,CAAA,CAChH,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,OAAA,EAAS,OAAO,CAAC,CAAA,CACjC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,eAAe,CAAA;AAAA,EACzC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gDAAgD,CAAA;AAAA,EAC/E,OAAOA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B;AAClE,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,MAAM,KAAA,CAAM,SAAA,EAAW,MAAM,KAAK,CAAA;AAE3D,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAO,KAAA,CAAM;AAAA,GACf;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,aAAa,CAAA,CAClB,WAAA,CAAY,iEAAiE,CAAA,CAC7E,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAC,CAAA,CAChC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,0BAA0B,CAAA;AAAA,EACvF,SAAA,EAAWA,EAAE,MAAA,EAAO,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,gCAAgC;AAC7E,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAM,SAAS,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA,EAAW,MAAM,KAAA,CAAM,MAAA;AAAA,IACvB,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF,CAAC,EACA,KAAA;AAKI,IAAM,eAAA,GAAkBF,aAAY,CACxC,IAAA,CAAK,kBAAkB,CAAA,CACvB,WAAA,CAAY,kEAAkE,CAAA,CAC9E,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,WAAA,EAAa,OAAO,CAAC,CAAA,CACrC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,aAAa,CAAA;AAAA,EACvC,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,0BAA0B,CAAA;AAAA,EACrD,KAAKA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oDAAoD;AAC1F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,UAAU,KAAA,CAAM,KAAA,EAAO,MAAM,GAAG,CAAA;AAE1D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,GAAA,EAAK,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,IAAA,CAAK;AAAA,GAC/B;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,4DAA4D,CAAA,CACxE,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,OAAO,CAAC,CAAA,CAClC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB;AAC7C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAM,IAAA,CAAK,MAAA;AAAA,IACvB,OAAO,KAAA,CAAM,MAAA;AAAA,IACb,OAAO,KAAA,CAAM;AAAA,GACf;AACF,CAAC,EACA,KAAA;AC/NI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,sFAAsF,CAAA,CAClG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,YAAA,EAAc,YAAY,CAAC,CAAA,CACzC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAC5H,CAAA,EAAGA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,cAAc,CAAA;AAAA,EACrC,CAAA,EAAGA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,eAAe;AACxC,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,MAAA;AAEJ,EAAA,QAAQ,MAAM,SAAA;AAAW,IACvB,KAAK,KAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA;AACzB,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA;AACzB,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA;AACzB,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,IAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,MACF;AACA,MAAA,MAAA,GAAS,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA;AACzB,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AAClC,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,MAAA,GAAS,KAAA,CAAM,IAAI,KAAA,CAAM,CAAA;AACzB,MAAA;AAAA,IACF;AACE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA;AAGJ,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,MAAA;AAAA,IACA,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,GAAG,KAAA,CAAM,CAAA;AAAA,IACT,GAAG,KAAA,CAAM;AAAA,GACX;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,uFAAuF,CAAA,CACnG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,WAAA,EAAa,cAAc,CAAC,CAAA,CAC1C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,UAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAO,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAC,CAAA,CAAE,SAAS,gCAAgC,CAAA;AAAA,EACxI,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,aAAa;AAC1C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,MAAA;AAEJ,EAAA,IAAI;AACF,IAAA,QAAQ,MAAM,QAAA;AAAU,MACtB,KAAK,MAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AAC7B,QAAA;AAAA,MACF;AACE,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA;AAGJ,IAAA,IAAI,MAAM,MAAM,CAAA,IAAK,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;AACtC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAA;AAAA,MACA,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAClD;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,YAAA,GAAeF,aAAY,CACrC,IAAA,CAAK,eAAe,CAAA,CACpB,WAAA,CAAY,oFAAoF,CAAA,CAChG,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA,CACtC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,2BAA2B,CAAA;AAAA,EAC/D,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,gEAAgE,CAAA;AAAA,EACpG,OAAA,EAASA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,+CAA+C;AAC9F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,CAAA;AACzB,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,CAAA;AACzB,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,IAAW,KAAA;AAEjC,EAAA,IAAI,MAAA;AAEJ,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,MAAY,GAAA,GAAM,GAAA,GAAM,EAAE,CAAA,GAAI,GAAA;AAAA,EACzD,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,IAAK,GAAA,GAAM,GAAA,CAAA,GAAO,GAAA;AAAA,EACzC;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,UAAA,GAAaF,aAAY,CACnC,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,mGAAmG,CAAA,CAC/G,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,MAAA,EAAQ,YAAA,EAAc,SAAA,EAAW,KAAK,CAAC,CAAA,CAC7C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,cAAc,CAAC,CAAA,CAAE,QAAA,CAAS,6BAA6B;AAC9F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,EAAG,CAAC,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,MAAA;AACpC,EAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAGpC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,CAAA,KAAM,KAChC,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,GAClC,OAAO,GAAG,CAAA;AAGd,EAAA,MAAM,WAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,IAAI,OAAA,EAAS,CAAC,GAAG,CAAC,CAAA,GAAI,MAAM,OAAA,CAAQ,MAAA;AACrG,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAEjC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,KAAA,EAAO,MAAM,OAAA,CAAQ,MAAA;AAAA,IACrB,GAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB;AAAA,GACF;AACF,CAAC,EACA,KAAA;ACrNI,IAAM,cAAA,GAAiBF,aAAY,CACvC,IAAA,CAAK,iBAAiB,CAAA,CACtB,WAAA,CAAY,uDAAuD,CAAA,CACnE,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,OAAA,EAAS,UAAU,CAAC,CAAA,CACxC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2BAA2B;AACxD,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,UAAA,GAAa,4BAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAA,EAAS,QAAQ,qBAAA,GAAwB;AAAA,GAC3C;AACF,CAAC,EACA,KAAA;AAKI,IAAM,kBAAA,GAAqBF,aAAY,CAC3C,IAAA,CAAK,sBAAsB,CAAA,CAC3B,WAAA,CAAY,6CAA6C,CAAA,CACzD,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,KAAA,EAAO,UAAU,CAAC,CAAA,CACtC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,GAAA,EAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,iBAAiB;AAC5C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,IAAI;AACF,IAAA,IAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACjB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACF,CAAC,EACA,KAAA;AAKI,IAAM,cAAA,GAAiBF,aAAY,CACvC,IAAA,CAAK,iBAAiB,CAAA,CACtB,WAAA,CAAY,8FAA8F,CAAA,CAC1G,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,OAAA,EAAS,UAAU,CAAC,CAAA,CACxC,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,0BAA0B,CAAA;AAAA,EACrD,MAAA,EAAQA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,+CAA+C;AAC7F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAG1B,EAAA,MAAM,UAAA,GAAa,mBAAA;AACnB,EAAA,MAAM,WAAA,GAAc,oBAAA;AAEpB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,GAAS,WAAA,GAAc,UAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAEvD,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAA,EAAS,QAAQ,2BAAA,GAA8B;AAAA,GACjD;AACF,CAAC,EACA,KAAA;AAKI,IAAM,mBAAA,GAAsBF,aAAY,CAC5C,IAAA,CAAK,uBAAuB,CAAA,CAC5B,WAAA,CAAY,8EAA8E,CAAA,CAC1F,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,aAAA,EAAe,UAAA,EAAY,MAAM,CAAC,CAAA,CACtD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC;AAClE,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAG1B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,UAAA,CAAW,OAAA,CAAQ,WAAW,EAAE,CAAA;AAGtD,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAGA,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAA,GAAS,KAAA;AAEb,EAAA,KAAA,IAAS,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC5C,IAAA,IAAI,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,CAAC,GAAG,EAAE,CAAA;AAEnC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,GAAA,IAAO,KAAA;AACP,IAAA,MAAA,GAAS,CAAC,MAAA;AAAA,EACZ;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,KAAO,CAAA;AAE3B,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,OAAA,EAAS,QAAQ,0BAAA,GAA6B;AAAA,GAChD;AACF,CAAC,EACA,KAAA;AAKI,IAAM,WAAA,GAAcF,aAAY,CACpC,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,uDAAuD,CAAA,CACnE,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,IAAA,EAAM,UAAA,EAAY,SAAS,CAAC,CAAA,CAChD,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,EAAA,EAAIA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB,CAAA;AAAA,EAChD,OAAA,EAASA,CAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,IAAA,EAAM,KAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,SAAS,gCAAgC;AAC/F,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAAA,GAAY,yBAAA;AAClB,EAAA,MAAM,SAAA,GAAY,0CAAA;AAElB,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAI,eAAA;AAEJ,EAAA,IAAI,KAAA,CAAM,OAAA,KAAY,IAAA,IAAQ,KAAA,CAAM,YAAY,KAAA,EAAO;AACrD,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,EAAG;AAE5B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAChC,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAA,IAAA,KAAQ;AAC1B,QAAA,MAAM,GAAA,GAAM,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AAC7B,QAAA,OAAO,GAAA,IAAO,KAAK,GAAA,IAAO,GAAA;AAAA,MAC5B,CAAC,CAAA;AACD,MAAA,IAAI,OAAO,eAAA,GAAkB,MAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,YAAY,IAAA,IAAQ,KAAA,CAAM,YAAY,KAAA,CAAA,EAAQ;AACjE,IAAA,IAAI,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,EAAG;AAC5B,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,eAAA,GAAkB,MAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,IAAI,KAAA,CAAM,EAAA;AAAA,IACV,OAAA,EAAS,eAAA;AAAA,IACT,OAAA,EAAS,KAAA,GAAQ,CAAA,MAAA,EAAS,eAAe,CAAA,QAAA,CAAA,GAAa;AAAA,GACxD;AACF,CAAC,EACA,KAAA;AAKI,IAAM,aAAA,GAAgBF,aAAY,CACtC,IAAA,CAAK,gBAAgB,CAAA,CACrB,WAAA,CAAY,2DAA2D,CAAA,CACvE,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,IAAA,CAAK,CAAC,YAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAC,CAAA,CAC/C,MAAA,CAAOC,CAAAA,CAAE,MAAA,CAAO;AAAA,EACf,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB;AAC9C,CAAC,CAAC,CAAA,CACD,SAAA,CAAU,OAAO,KAAA,KAAU;AAC1B,EAAA,MAAM,SAAA,GAAY,4EAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAEvC,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,EAAE,GAAG,EAAE,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,OAAA;AAAA,IACA,OAAA,EAAS,KAAA,GAAQ,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA,GAAK;AAAA,GAC9C;AACF,CAAC,EACA,KAAA;AC7MI,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA,EAI1C,QAAA,EAAUA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA;AAAA;AAAA;AAAA,EAKpE,OAAA,EAASA,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,GAAA,EAAK,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qCAAqC,CAAA;AAAA;AAAA;AAAA;AAAA,EAKpF,QAAA,EAAUA,CAAAA,CAAE,IAAA,CAAK,CAAC,OAAO,QAAA,EAAU,MAAA,EAAQ,UAAU,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA;AAAA;AAAA;AAAA,EAKpH,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzF,iBAAiBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA;AAAA;AAAA;AAAA,EAKpF,WAAA,EAAaA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,mCAAmC;AAC1F,CAAC;ACXM,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAOF,WAAAA,EAAY,CAChB,IAAA,CAAK,WAAW,CAAA,CAChB,WAAA;AAAA,IACC;AAAA,GAGF,CACC,QAAA,CAASC,YAAAA,CAAa,OAAO,CAAA,CAC7B,OAAO,mBAAmB,CAAA,CAC1B,SAAA,CAAU,OAAO,KAAA,KAAmC;AAEnD,IAAA,MAAM,cAAA,GAAiB,KAAA;AACvB,IAAA,MAAM,YAAY,UAAA,EAAW;AAC7B,IAAA,MAAM,WAAA,GAAc,KAAK,GAAA,EAAI;AAI7B,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,OAAO,sBAAsB,CAAA;AACrD,MAAA,SAAA,GAAa,SAAA,CAAkB,SAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAEF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAEF;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,EAAA,EAAI,SAAA;AAAA,MACJ,UAAU,cAAA,CAAe,QAAA;AAAA,MACzB,SAAS,cAAA,CAAe,OAAA;AAAA,MACxB,UAAU,cAAA,CAAe,QAAA;AAAA,MACzB,SAAA,EAAW,WAAA;AAAA,MACX,SAAS,cAAA,CAAe,OAAA;AAAA,MACxB,iBAAiB,cAAA,CAAe,eAAA;AAAA,MAChC,aAAa,cAAA,CAAe,WAAA;AAAA,MAC5B,MAAA,EAAQ;AAAA,KACV;AAKA,IAAA,MAAM,QAAA,GAAW,UAAU,YAAY,CAAA;AAEvC,IAAA,MAAM,WAAA,GAAc,KAAK,GAAA,EAAI;AAC7B,IAAA,MAAM,WAAW,WAAA,GAAc,WAAA;AAG/B,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,OAAA,GAAU,CAAA,IAAK,YAAY,cAAA,CAAe,OAAA;AAG1E,IAAA,MAAM,gBAAgB,QAAA,IAAY,cAAA,CAAe,eAAA,GAC7C,cAAA,CAAe,kBACd,QAAA,IAAY,EAAA;AAEjB,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,aAAA;AAAA,MACV,QAAA,EAAU;AAAA,QACR,SAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAU,cAAA,CAAe;AAAA;AAC3B,KACF;AAAA,EACF,CAAC,EACA,KAAA,EAAM;AACX;AAeO,IAAM,eAAe,kBAAA","file":"index.js","sourcesContent":["/**\n * HTTP Client Tool\n * \n * Make HTTP requests with support for GET, POST, PUT, DELETE, PATCH methods.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport axios, { AxiosRequestConfig } from 'axios';\n\n/**\n * HTTP method enum\n */\nconst HttpMethod = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n/**\n * HTTP request schema\n */\nconst httpRequestSchema = z.object({\n url: z.string().url().describe('The URL to make the request to'),\n method: HttpMethod.default('GET').describe('HTTP method to use'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n body: z.any().optional().describe('Optional request body (for POST, PUT, PATCH)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n});\n\n/**\n * HTTP response type\n */\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n url: string;\n method: string;\n}\n\n/**\n * Create HTTP client tool\n * \n * @example\n * ```ts\n * const result = await httpClient.execute({\n * url: 'https://api.example.com/data',\n * method: 'GET',\n * headers: { 'Authorization': 'Bearer token' }\n * });\n * ```\n */\nexport const httpClient = toolBuilder()\n .name('http-client')\n .description('Make HTTP requests to web APIs and services. Supports GET, POST, PUT, DELETE, PATCH methods with custom headers and body.')\n .category(ToolCategory.WEB)\n .tags(['http', 'api', 'request', 'web'])\n .schema(httpRequestSchema)\n .implement(async (input): Promise<HttpResponse> => {\n const config: AxiosRequestConfig = {\n method: input.method,\n url: input.url,\n headers: input.headers,\n data: input.body,\n timeout: input.timeout,\n params: input.params,\n validateStatus: () => true, // Don't throw on any status code\n };\n\n const response = await axios(config);\n\n return {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers as Record<string, string>,\n data: response.data,\n url: input.url,\n method: input.method ?? 'GET',\n };\n })\n .build();\n\n/**\n * Create a simple GET request tool\n */\nexport const httpGet = toolBuilder()\n .name('http-get')\n .description('Make a simple HTTP GET request to a URL and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'get', 'fetch', 'web'])\n .schema(z.object({\n url: z.string().url().describe('The URL to fetch'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n params: z.record(z.string()).optional().describe('Optional URL query parameters'),\n }))\n .implement(async (input) => {\n const response = await axios.get(input.url, {\n headers: input.headers,\n params: input.params,\n timeout: 30000,\n });\n return response.data;\n })\n .build();\n\n/**\n * Create a simple POST request tool\n */\nexport const httpPost = toolBuilder()\n .name('http-post')\n .description('Make a simple HTTP POST request with JSON body and return the response data.')\n .category(ToolCategory.WEB)\n .tags(['http', 'post', 'api', 'web'])\n .schema(z.object({\n url: z.string().url().describe('The URL to post to'),\n body: z.any().describe('The request body (will be sent as JSON)'),\n headers: z.record(z.string()).optional().describe('Optional HTTP headers'),\n }))\n .implement(async (input) => {\n const response = await axios.post(input.url, input.body, {\n headers: {\n 'Content-Type': 'application/json',\n ...input.headers,\n },\n timeout: 30000,\n });\n return response.data;\n })\n .build();\n\n","/**\n * Web Scraper Tool\n * \n * Scrape and extract data from web pages using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport axios from 'axios';\nimport * as cheerio from 'cheerio';\n\n/**\n * Scraper result type\n */\nexport interface ScraperResult {\n url: string;\n title?: string;\n text?: string;\n html?: string;\n links?: string[];\n images?: string[];\n metadata?: Record<string, string>;\n selected?: any;\n}\n\n/**\n * Web scraper tool\n * \n * @example\n * ```ts\n * const result = await webScraper.execute({\n * url: 'https://example.com',\n * selector: 'article h1',\n * extractText: true\n * });\n * ```\n */\nexport const webScraper = toolBuilder()\n .name('web-scraper')\n .description('Scrape and extract data from web pages. Can extract text, HTML, links, images, and use CSS selectors to target specific elements.')\n .category(ToolCategory.WEB)\n .tags(['scraper', 'web', 'html', 'extract', 'parse'])\n .schema(z.object({\n url: z.string().url().describe('The URL of the web page to scrape'),\n selector: z.string().optional().describe('Optional CSS selector to extract specific elements'),\n extractText: z.boolean().default(true).describe('Extract text content from the page'),\n extractHtml: z.boolean().default(false).describe('Extract raw HTML content'),\n extractLinks: z.boolean().default(false).describe('Extract all links from the page'),\n extractImages: z.boolean().default(false).describe('Extract all image URLs from the page'),\n extractMetadata: z.boolean().default(false).describe('Extract meta tags (title, description, etc.)'),\n timeout: z.number().default(30000).describe('Request timeout in milliseconds'),\n }))\n .implement(async (input): Promise<ScraperResult> => {\n // Fetch the page\n const response = await axios.get(input.url, {\n timeout: input.timeout,\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://agentforge.dev)',\n },\n });\n\n const html = response.data;\n const $ = cheerio.load(html);\n\n const result: ScraperResult = {\n url: input.url,\n };\n\n // Apply selector if provided\n const $selected = input.selector ? $(input.selector) : $('body');\n\n // Extract text\n if (input.extractText) {\n result.text = $selected.text().trim();\n }\n\n // Extract HTML\n if (input.extractHtml) {\n result.html = $selected.html() || '';\n }\n\n // Extract links\n if (input.extractLinks) {\n result.links = [];\n $('a[href]').each((_, el) => {\n const href = $(el).attr('href');\n if (href) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(href, input.url).href;\n result.links!.push(absoluteUrl);\n } catch {\n result.links!.push(href);\n }\n }\n });\n }\n\n // Extract images\n if (input.extractImages) {\n result.images = [];\n $('img[src]').each((_, el) => {\n const src = $(el).attr('src');\n if (src) {\n // Convert relative URLs to absolute\n try {\n const absoluteUrl = new URL(src, input.url).href;\n result.images!.push(absoluteUrl);\n } catch {\n result.images!.push(src);\n }\n }\n });\n }\n\n // Extract metadata\n if (input.extractMetadata) {\n result.metadata = {};\n \n // Title\n const title = $('title').text() || $('meta[property=\"og:title\"]').attr('content');\n if (title) result.metadata.title = title;\n\n // Description\n const description = $('meta[name=\"description\"]').attr('content') || \n $('meta[property=\"og:description\"]').attr('content');\n if (description) result.metadata.description = description;\n\n // Other meta tags\n $('meta[name], meta[property]').each((_, el) => {\n const name = $(el).attr('name') || $(el).attr('property');\n const content = $(el).attr('content');\n if (name && content) {\n result.metadata![name] = content;\n }\n });\n }\n\n // If selector was provided, return the selected elements\n if (input.selector) {\n result.selected = $selected.map((_, el) => ({\n text: $(el).text().trim(),\n html: $(el).html(),\n })).get();\n }\n\n return result;\n })\n .build();\n\n","/**\n * HTML Parser Tool\n * \n * Parse HTML content and extract data using CSS selectors.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as cheerio from 'cheerio';\n\n/**\n * HTML parser tool\n * \n * @example\n * ```ts\n * const result = await htmlParser.execute({\n * html: '<div class=\"content\"><h1>Title</h1><p>Text</p></div>',\n * selector: '.content h1'\n * });\n * ```\n */\nexport const htmlParser = toolBuilder()\n .name('html-parser')\n .description('Parse HTML content and extract data using CSS selectors. Returns text, attributes, and structure of selected elements.')\n .category(ToolCategory.WEB)\n .tags(['html', 'parser', 'css', 'selector', 'extract'])\n .schema(z.object({\n html: z.string().describe('The HTML content to parse'),\n selector: z.string().describe('CSS selector to find elements'),\n extractText: z.boolean().default(true).describe('Extract text content from selected elements'),\n extractHtml: z.boolean().default(false).describe('Extract inner HTML of selected elements'),\n extractAttributes: z.array(z.string().describe(\"String value\")).optional().describe('List of attributes to extract (e.g., [\"href\", \"src\", \"class\"])'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const $selected = $(input.selector);\n\n const results = $selected.map((_, el) => {\n const $el = $(el);\n const item: any = {};\n\n if (input.extractText) {\n item.text = $el.text().trim();\n }\n\n if (input.extractHtml) {\n item.html = $el.html();\n }\n\n if (input.extractAttributes && input.extractAttributes.length > 0) {\n item.attributes = {};\n for (const attr of input.extractAttributes) {\n const value = $el.attr(attr);\n if (value !== undefined) {\n item.attributes[attr] = value;\n }\n }\n }\n\n return item;\n }).get();\n\n return {\n count: results.length,\n results,\n };\n })\n .build();\n\n/**\n * Extract links from HTML\n */\nexport const extractLinks = toolBuilder()\n .name('extract-links')\n .description('Extract all links (anchor tags) from HTML content with their text and href attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'links', 'extract', 'anchor'])\n .schema(z.object({\n html: z.string().describe('The HTML content to extract links from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative links'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const links: Array<{ text: string; href: string; title?: string }> = [];\n\n $('a[href]').each((_, el) => {\n const $el = $(el);\n let href = $el.attr('href') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && href) {\n try {\n href = new URL(href, input.baseUrl).href;\n } catch {\n // Keep original href if URL parsing fails\n }\n }\n\n links.push({\n text: $el.text().trim(),\n href,\n title: $el.attr('title'),\n });\n });\n\n return {\n count: links.length,\n links,\n };\n })\n .build();\n\n/**\n * Extract images from HTML\n */\nexport const extractImages = toolBuilder()\n .name('extract-images')\n .description('Extract all images from HTML content with their src, alt, and other attributes.')\n .category(ToolCategory.WEB)\n .tags(['html', 'images', 'extract', 'img'])\n .schema(z.object({\n html: z.string().describe('The HTML content to extract images from'),\n baseUrl: z.string().url().optional().describe('Optional base URL to resolve relative image URLs'),\n }))\n .implement(async (input) => {\n const $ = cheerio.load(input.html);\n const images: Array<{ src: string; alt?: string; title?: string; width?: string; height?: string }> = [];\n\n $('img[src]').each((_, el) => {\n const $el = $(el);\n let src = $el.attr('src') || '';\n \n // Resolve relative URLs if baseUrl is provided\n if (input.baseUrl && src) {\n try {\n src = new URL(src, input.baseUrl).href;\n } catch {\n // Keep original src if URL parsing fails\n }\n }\n\n images.push({\n src,\n alt: $el.attr('alt'),\n title: $el.attr('title'),\n width: $el.attr('width'),\n height: $el.attr('height'),\n });\n });\n\n return {\n count: images.length,\n images,\n };\n })\n .build();\n\n","/**\n * URL Validator and Parser Tool\n * \n * Validate, parse, and manipulate URLs.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * URL validation result\n */\nexport interface UrlValidationResult {\n valid: boolean;\n url?: string;\n protocol?: string;\n hostname?: string;\n port?: string;\n pathname?: string;\n search?: string;\n hash?: string;\n origin?: string;\n error?: string;\n}\n\n/**\n * URL validator tool\n * \n * @example\n * ```ts\n * const result = await urlValidator.execute({\n * url: 'https://example.com/path?query=value#hash'\n * });\n * ```\n */\nexport const urlValidator = toolBuilder()\n .name('url-validator')\n .description('Validate and parse URLs. Returns detailed information about the URL structure including protocol, hostname, path, query parameters, and hash.')\n .category(ToolCategory.WEB)\n .tags(['url', 'validator', 'parse', 'validate'])\n .schema(z.object({\n url: z.string().describe('The URL to validate and parse'),\n }))\n .implement(async (input): Promise<UrlValidationResult> => {\n try {\n const parsed = new URL(input.url);\n \n return {\n valid: true,\n url: parsed.href,\n protocol: parsed.protocol,\n hostname: parsed.hostname,\n port: parsed.port,\n pathname: parsed.pathname,\n search: parsed.search,\n hash: parsed.hash,\n origin: parsed.origin,\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Invalid URL',\n };\n }\n })\n .build();\n\n/**\n * URL builder tool\n */\nexport const urlBuilder = toolBuilder()\n .name('url-builder')\n .description('Build a URL from components (protocol, hostname, path, query parameters, hash).')\n .category(ToolCategory.WEB)\n .tags(['url', 'builder', 'construct'])\n .schema(z.object({\n protocol: z.string().default('https').describe('Protocol (http, https, etc.)'),\n hostname: z.string().describe('Hostname or domain name'),\n port: z.string().optional().describe('Optional port number'),\n pathname: z.string().default('/').describe('URL path'),\n query: z.record(z.string()).optional().describe('Query parameters as key-value pairs'),\n hash: z.string().optional().describe('URL hash/fragment'),\n }))\n .implement(async (input) => {\n const url = new URL(`${input.protocol}://${input.hostname}`);\n\n if (input.port) {\n url.port = input.port;\n }\n\n url.pathname = input.pathname ?? '/';\n \n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n \n if (input.hash) {\n url.hash = input.hash;\n }\n \n return {\n url: url.href,\n components: {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port,\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n origin: url.origin,\n },\n };\n })\n .build();\n\n/**\n * URL query parser tool\n */\nexport const urlQueryParser = toolBuilder()\n .name('url-query-parser')\n .description('Parse query parameters from a URL or query string into a key-value object.')\n .category(ToolCategory.WEB)\n .tags(['url', 'query', 'parse', 'params'])\n .schema(z.object({\n input: z.string().describe('URL or query string to parse (e.g., \"?foo=bar&baz=qux\" or full URL)'),\n }))\n .implement(async (input) => {\n let searchParams: URLSearchParams;\n \n try {\n // Try to parse as full URL first\n const url = new URL(input.input);\n searchParams = url.searchParams;\n } catch {\n // If that fails, treat as query string\n const queryString = input.input.startsWith('?') ? input.input.slice(1) : input.input;\n searchParams = new URLSearchParams(queryString);\n }\n \n const params: Record<string, string | string[]> = {};\n \n searchParams.forEach((value, key) => {\n if (params[key]) {\n // Handle multiple values for same key\n if (Array.isArray(params[key])) {\n (params[key] as string[]).push(value);\n } else {\n params[key] = [params[key] as string, value];\n }\n } else {\n params[key] = value;\n }\n });\n \n return {\n params,\n count: Object.keys(params).length,\n };\n })\n .build();\n\n","/**\n * Web Search Tool - Zod Schemas\n */\n\nimport { z } from 'zod';\n\n/**\n * Web search input schema\n */\nexport const webSearchSchema = z.object({\n query: z.string().min(1).describe('The search query'),\n maxResults: z\n .number()\n .min(1)\n .max(50)\n .default(10)\n .describe('Maximum number of results to return (1-50)'),\n preferSerper: z\n .boolean()\n .default(false)\n .describe('Prefer Serper API if available (requires SERPER_API_KEY)'),\n timeout: z\n .number()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe('Request timeout in milliseconds (1000-60000, default: 30000)'),\n});\n\n/**\n * Search result schema\n */\nexport const searchResultSchema = z.object({\n title: z.string(),\n link: z.string().url(),\n snippet: z.string(),\n position: z.number().optional(),\n});\n\n/**\n * Web search output schema\n */\nexport const webSearchOutputSchema = z.object({\n success: z.boolean(),\n source: z.enum(['duckduckgo', 'serper']),\n query: z.string(),\n results: z.array(searchResultSchema),\n totalResults: z.number().optional(),\n error: z.string().optional(),\n metadata: z\n .object({\n responseTime: z.number().optional(),\n fallbackUsed: z.boolean().optional(),\n })\n .optional(),\n});\n\n","/**\n * Web Search Tool - Utility Functions\n */\n\nimport type { RetryConfig } from './types.js';\n\n/**\n * Get Serper API key from environment\n */\nexport function getSerperApiKey(): string | undefined {\n return process.env.SERPER_API_KEY;\n}\n\n/**\n * Check if Serper API is available\n */\nexport function isSerperAvailable(): boolean {\n return !!getSerperApiKey();\n}\n\n/**\n * Measure execution time of an async function\n */\nexport async function measureTime<T>(\n fn: () => Promise<T>\n): Promise<{ result: T; duration: number }> {\n const start = Date.now();\n const result = await fn();\n const duration = Date.now() - start;\n return { result, duration };\n}\n\n/**\n * Sanitize search query\n */\nexport function sanitizeQuery(query: string): string {\n return query.trim().replace(/\\s+/g, ' ');\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelay: 1000, // 1 second\n maxDelay: 10000, // 10 seconds\n backoffMultiplier: 2,\n};\n\n/**\n * Default timeout for search requests (30 seconds)\n */\nexport const DEFAULT_TIMEOUT = 30000;\n\n/**\n * Check if error is retryable (network errors, timeouts, 5xx errors)\n */\nexport function isRetryableError(error: any): boolean {\n // Network errors\n if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {\n return true;\n }\n\n // Timeout errors\n if (error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {\n return true;\n }\n\n // 5xx server errors (but not 4xx client errors)\n if (error.response?.status >= 500 && error.response?.status < 600) {\n return true;\n }\n\n // Rate limiting (429) - retryable with backoff\n if (error.response?.status === 429) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n config: RetryConfig = DEFAULT_RETRY_CONFIG\n): Promise<T> {\n let lastError: any;\n let delay = config.initialDelay;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: any) {\n lastError = error;\n\n // Don't retry if error is not retryable\n if (!isRetryableError(error)) {\n throw error;\n }\n\n // Don't retry if we've exhausted all attempts\n if (attempt === config.maxRetries) {\n break;\n }\n\n // Wait before retrying\n await sleep(delay);\n\n // Increase delay for next attempt (exponential backoff)\n delay = Math.min(delay * config.backoffMultiplier, config.maxDelay);\n }\n }\n\n // All retries exhausted\n throw lastError;\n}\n\n","/**\n * DuckDuckGo Search Provider\n * \n * Free search provider using DuckDuckGo's Instant Answer API.\n * No API key required.\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * DuckDuckGo API response structure\n */\ninterface DuckDuckGoResponse {\n Abstract?: string;\n AbstractText?: string;\n AbstractSource?: string;\n AbstractURL?: string;\n Heading?: string;\n RelatedTopics?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n Results?: Array<{\n Text?: string;\n FirstURL?: string;\n }>;\n}\n\n/**\n * DuckDuckGo search provider implementation\n */\nexport class DuckDuckGoProvider implements SearchProvider {\n name = 'duckduckgo' as const;\n\n /**\n * DuckDuckGo is always available (no API key required)\n */\n isAvailable(): boolean {\n return true;\n }\n\n /**\n * Search using DuckDuckGo Instant Answer API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n return retryWithBackoff(async () => {\n try {\n const response = await axios.get<DuckDuckGoResponse>(\n 'https://api.duckduckgo.com/',\n {\n params: {\n q: query,\n format: 'json',\n },\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (compatible; AgentForge/1.0; +https://github.com/agentforge)',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n throw new Error(`DuckDuckGo search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize DuckDuckGo response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: DuckDuckGoResponse,\n maxResults: number\n ): SearchResult[] {\n const results: SearchResult[] = [];\n\n // Early return if maxResults is 0\n if (maxResults <= 0) {\n return results;\n }\n\n // Add abstract as first result if available\n if (data.Abstract && data.AbstractURL) {\n results.push({\n title: data.Heading || 'Result',\n link: data.AbstractURL,\n snippet: data.Abstract,\n position: 1,\n });\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add related topics (optimized: only process what we need)\n if (data.RelatedTopics && data.RelatedTopics.length > 0) {\n const remaining = maxResults - results.length;\n const topicsToProcess = data.RelatedTopics.slice(0, remaining);\n\n for (const topic of topicsToProcess) {\n if (topic.Text && topic.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = topic.Text.split(' - ');\n results.push({\n title: titleParts[0] || topic.Text,\n link: topic.FirstURL,\n snippet: topic.Text,\n position: results.length + 1,\n });\n }\n }\n\n // Early return if we've reached maxResults\n if (results.length >= maxResults) {\n return results;\n }\n }\n\n // Add regular results (optimized: only process what we need)\n if (data.Results && data.Results.length > 0) {\n const remaining = maxResults - results.length;\n const resultsToProcess = data.Results.slice(0, remaining);\n\n for (const result of resultsToProcess) {\n if (result.Text && result.FirstURL) {\n // Cache split result to avoid redundant operations\n const titleParts = result.Text.split(' - ');\n results.push({\n title: titleParts[0] || result.Text,\n link: result.FirstURL,\n snippet: result.Text,\n position: results.length + 1,\n });\n }\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new DuckDuckGo provider instance\n */\nexport function createDuckDuckGoProvider(): DuckDuckGoProvider {\n return new DuckDuckGoProvider();\n}\n\n","/**\n * Serper Search Provider\n * \n * Premium search provider using Serper API (Google results).\n * Requires SERPER_API_KEY environment variable.\n * Get your API key at: https://serper.dev\n */\n\nimport axios from 'axios';\nimport type { SearchProvider, SearchResult } from '../types.js';\nimport { getSerperApiKey, retryWithBackoff, DEFAULT_TIMEOUT } from '../utils.js';\n\n/**\n * Serper API response structure\n */\ninterface SerperResponse {\n organic?: Array<{\n title?: string;\n link?: string;\n snippet?: string;\n position?: number;\n }>;\n searchParameters?: {\n q?: string;\n num?: number;\n };\n}\n\n/**\n * Serper search provider implementation\n */\nexport class SerperProvider implements SearchProvider {\n name = 'serper' as const;\n private apiKey: string | undefined;\n\n constructor() {\n this.apiKey = getSerperApiKey();\n }\n\n /**\n * Serper is available if API key is set\n */\n isAvailable(): boolean {\n return !!this.apiKey;\n }\n\n /**\n * Search using Serper API\n * @param query - Search query\n * @param maxResults - Maximum number of results to return\n * @param timeout - Request timeout in milliseconds (default: 30000)\n */\n async search(\n query: string,\n maxResults: number,\n timeout: number = DEFAULT_TIMEOUT\n ): Promise<SearchResult[]> {\n if (!this.apiKey) {\n throw new Error(\n 'Serper API key not found. Set SERPER_API_KEY environment variable. Get your key at https://serper.dev'\n );\n }\n\n return retryWithBackoff(async () => {\n try {\n const response = await axios.post<SerperResponse>(\n 'https://google.serper.dev/search',\n {\n q: query,\n num: maxResults,\n },\n {\n headers: {\n 'X-API-KEY': this.apiKey,\n 'Content-Type': 'application/json',\n },\n timeout,\n }\n );\n\n return this.normalizeResults(response.data, maxResults);\n } catch (error: any) {\n if (error.response?.status === 401) {\n throw new Error(\n 'Invalid Serper API key. Get your key at https://serper.dev'\n );\n }\n if (error.response?.status === 429) {\n throw new Error(\n 'Serper API rate limit exceeded. Please try again later or upgrade your plan at https://serper.dev'\n );\n }\n throw new Error(`Serper search failed: ${error.message}`);\n }\n });\n }\n\n /**\n * Normalize Serper response to SearchResult[]\n * Optimized for performance with large result sets\n */\n private normalizeResults(\n data: SerperResponse,\n maxResults: number\n ): SearchResult[] {\n // Early return for empty results\n if (!data.organic || data.organic.length === 0 || maxResults <= 0) {\n return [];\n }\n\n // Pre-allocate array with expected size for better performance\n const results: SearchResult[] = [];\n\n // Only process the number of items we need (avoid processing entire array)\n const itemsToProcess = Math.min(data.organic.length, maxResults);\n\n for (let i = 0; i < itemsToProcess; i++) {\n const item = data.organic[i];\n\n // Skip items with missing required fields\n if (!item.title || !item.link || !item.snippet) {\n continue;\n }\n\n results.push({\n title: item.title,\n link: item.link,\n snippet: item.snippet,\n position: item.position ?? i + 1,\n });\n\n // Stop if we've collected enough results\n if (results.length >= maxResults) {\n break;\n }\n }\n\n return results;\n }\n}\n\n/**\n * Create a new Serper provider instance\n */\nexport function createSerperProvider(): SerperProvider {\n return new SerperProvider();\n}\n\n","/**\n * Web Search Tool\n * \n * Search the web using DuckDuckGo (free) or Serper (optional upgrade).\n * Provides smart fallback and normalized results.\n * \n * @example\n * ```ts\n * // Basic usage (no API key needed)\n * const result = await webSearch.invoke({\n * query: 'What is TypeScript?'\n * });\n * \n * // With Serper API key (set SERPER_API_KEY env var)\n * const result = await webSearch.invoke({\n * query: 'Best restaurants in SF 2026',\n * preferSerper: true\n * });\n * ```\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { webSearchSchema } from './schemas.js';\nimport { createDuckDuckGoProvider } from './providers/duckduckgo.js';\nimport { createSerperProvider } from './providers/serper.js';\nimport { measureTime, sanitizeQuery, DEFAULT_TIMEOUT } from './utils.js';\nimport type { WebSearchInput, WebSearchOutput, SearchProvider } from './types.js';\n\n/**\n * Web search tool implementation\n */\nexport const webSearch = toolBuilder()\n .name('web-search')\n .description(\n 'Search the web for information using DuckDuckGo (free) or Serper API (optional). ' +\n 'Returns structured search results with titles, links, and snippets. ' +\n 'Automatically falls back to Serper if DuckDuckGo returns no results and API key is available.'\n )\n .category(ToolCategory.WEB)\n .tags(['search', 'web', 'google', 'duckduckgo', 'serper', 'internet'])\n .schema(webSearchSchema)\n .implement(async (input: WebSearchInput): Promise<WebSearchOutput> => {\n const {\n query,\n maxResults = 10,\n preferSerper = false,\n timeout = DEFAULT_TIMEOUT\n } = input;\n\n // Sanitize query\n const sanitizedQuery = sanitizeQuery(query);\n\n // Initialize providers\n const duckduckgo = createDuckDuckGoProvider();\n const serper = createSerperProvider();\n\n // Determine which provider to use\n let primaryProvider: SearchProvider;\n let fallbackProvider: SearchProvider | null = null;\n\n if (preferSerper && serper.isAvailable()) {\n primaryProvider = serper;\n fallbackProvider = duckduckgo;\n } else {\n primaryProvider = duckduckgo;\n fallbackProvider = serper.isAvailable() ? serper : null;\n }\n\n try {\n // Try primary provider\n const { result: results, duration } = await measureTime(() =>\n primaryProvider.search(sanitizedQuery, maxResults, timeout)\n );\n\n // If primary provider returns results, return them\n if (results.length > 0) {\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results,\n totalResults: results.length,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n }\n\n // If no results and fallback is available, try fallback\n if (fallbackProvider) {\n const { result: fallbackResults, duration: fallbackDuration } =\n await measureTime(() =>\n fallbackProvider!.search(sanitizedQuery, maxResults, timeout)\n );\n\n return {\n success: true,\n source: fallbackProvider.name,\n query: sanitizedQuery,\n results: fallbackResults,\n totalResults: fallbackResults.length,\n metadata: {\n responseTime: fallbackDuration,\n fallbackUsed: true,\n },\n };\n }\n\n // No results from either provider\n return {\n success: true,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n totalResults: 0,\n metadata: {\n responseTime: duration,\n fallbackUsed: false,\n },\n };\n } catch (error: any) {\n // Error occurred\n return {\n success: false,\n source: primaryProvider.name,\n query: sanitizedQuery,\n results: [],\n error: error.message,\n };\n }\n })\n .build();\n\n// Export types and schemas for external use\nexport * from './types.js';\nexport * from './schemas.js';\nexport * from './providers/duckduckgo.js';\nexport * from './providers/serper.js';\n\n","/**\n * JSON Processor Tool\n * \n * Parse, validate, transform, and query JSON data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * JSON parser tool\n */\nexport const jsonParser = toolBuilder()\n .name('json-parser')\n .description('Parse JSON string into an object. Validates JSON syntax and returns parsed data or error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'parse', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to parse'),\n strict: z.boolean().default(true).describe('Use strict JSON parsing (no trailing commas, etc.)'),\n }))\n .implement(async (input) => {\n try {\n const parsed = JSON.parse(input.json);\n return {\n success: true,\n data: parsed,\n type: Array.isArray(parsed) ? 'array' : typeof parsed,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON stringifier tool\n */\nexport const jsonStringify = toolBuilder()\n .name('json-stringify')\n .description('Convert an object to a JSON string with optional formatting (pretty print).')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'stringify', 'format', 'data'])\n .schema(z.object({\n data: z.any().describe('Data to convert to JSON string'),\n pretty: z.boolean().default(false).describe('Format with indentation for readability'),\n indent: z.number().default(2).describe('Number of spaces for indentation (when pretty is true)'),\n }))\n .implement(async (input) => {\n try {\n const json = input.pretty \n ? JSON.stringify(input.data, null, input.indent)\n : JSON.stringify(input.data);\n \n return {\n success: true,\n json,\n length: json.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to stringify data',\n };\n }\n })\n .build();\n\n/**\n * JSON query tool (using JSONPath-like syntax)\n */\nexport const jsonQuery = toolBuilder()\n .name('json-query')\n .description('Query JSON data using dot notation path (e.g., \"user.address.city\"). Supports array indexing.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'query', 'path', 'data'])\n .schema(z.object({\n data: z.any().describe('JSON data to query'),\n path: z.string().describe('Dot notation path to query (e.g., \"user.name\" or \"items[0].id\")'),\n }))\n .implement(async (input) => {\n try {\n const parts = input.path.split('.');\n let current = input.data;\n \n for (const part of parts) {\n // Handle array indexing: items[0]\n const arrayMatch = part.match(/^(\\w+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n current = current[key][parseInt(index, 10)];\n } else {\n current = current[part];\n }\n \n if (current === undefined) {\n return {\n success: false,\n error: `Path not found: ${input.path}`,\n };\n }\n }\n \n return {\n success: true,\n value: current,\n type: Array.isArray(current) ? 'array' : typeof current,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to query JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON validator tool\n */\nexport const jsonValidator = toolBuilder()\n .name('json-validator')\n .description('Validate JSON string syntax without parsing. Returns whether the JSON is valid and any error details.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'validate', 'check', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to validate'),\n }))\n .implement(async (input) => {\n try {\n JSON.parse(input.json);\n return {\n valid: true,\n message: 'Valid JSON',\n };\n } catch (error) {\n return {\n valid: false,\n error: error instanceof Error ? error.message : 'Invalid JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON merge tool\n */\nexport const jsonMerge = toolBuilder()\n .name('json-merge')\n .description('Merge two or more JSON objects. Later objects override earlier ones for conflicting keys.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'merge', 'combine', 'data'])\n .schema(z.object({\n objects: z.array(z.any().describe('Object to merge')).describe('Array of objects to merge'),\n deep: z.boolean().default(false).describe('Perform deep merge (nested objects)'),\n }))\n .implement(async (input) => {\n if (input.deep) {\n // Deep merge\n const deepMerge = (target: any, source: any): any => {\n const output = { ...target };\n for (const key in source) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n output[key] = deepMerge(output[key] || {}, source[key]);\n } else {\n output[key] = source[key];\n }\n }\n return output;\n };\n \n return input.objects.reduce((acc, obj) => deepMerge(acc, obj), {});\n } else {\n // Shallow merge\n return Object.assign({}, ...input.objects);\n }\n })\n .build();\n\n","/**\n * CSV Parser Tool\n * \n * Parse and generate CSV data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { parse } from 'csv-parse/sync';\nimport { stringify } from 'csv-stringify/sync';\n\n/**\n * CSV parser tool\n */\nexport const csvParser = toolBuilder()\n .name('csv-parser')\n .description('Parse CSV string into an array of objects. Supports custom delimiters, headers, and options.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'parse', 'data', 'table'])\n .schema(z.object({\n csv: z.string().describe('CSV string to parse'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n hasHeaders: z.boolean().default(true).describe('First row contains column headers'),\n skipEmptyLines: z.boolean().default(true).describe('Skip empty lines in the CSV'),\n trim: z.boolean().default(true).describe('Trim whitespace from values'),\n }))\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\n columns: input.hasHeaders,\n skip_empty_lines: input.skipEmptyLines,\n trim: input.trim,\n relax_column_count: true,\n });\n\n return {\n success: true,\n data: records,\n rowCount: records.length,\n columnCount: records.length > 0 ? Object.keys(records[0]).length : 0,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse CSV',\n };\n }\n })\n .build();\n\n/**\n * CSV generator tool\n */\nexport const csvGenerator = toolBuilder()\n .name('csv-generator')\n .description('Convert an array of objects to CSV string. Automatically extracts headers from object keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'generate', 'stringify', 'data'])\n .schema(z.object({\n data: z.array(z.record(z.any().describe('Column value'))).describe('Array of objects to convert to CSV'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n includeHeaders: z.boolean().default(true).describe('Include header row with column names'),\n columns: z.array(z.string().describe(\"String value\")).optional().describe('Optional list of columns to include (in order)'),\n }))\n .implement(async (input) => {\n try {\n const csv = stringify(input.data, {\n delimiter: input.delimiter,\n header: input.includeHeaders,\n columns: input.columns,\n });\n\n return {\n success: true,\n csv,\n rowCount: input.data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate CSV',\n };\n }\n })\n .build();\n\n/**\n * CSV to JSON converter\n */\nexport const csvToJson = toolBuilder()\n .name('csv-to-json')\n .description('Convert CSV string to JSON array. Each row becomes an object with column headers as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['csv', 'json', 'convert', 'data'])\n .schema(z.object({\n csv: z.string().describe('CSV string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n }))\n .implement(async (input) => {\n try {\n const records = parse(input.csv, {\n delimiter: input.delimiter,\n columns: true,\n skip_empty_lines: true,\n trim: true,\n });\n\n const json = input.pretty \n ? JSON.stringify(records, null, 2)\n : JSON.stringify(records);\n\n return {\n success: true,\n json,\n recordCount: records.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert CSV to JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON to CSV converter\n */\nexport const jsonToCsv = toolBuilder()\n .name('json-to-csv')\n .description('Convert JSON array to CSV string. Each object becomes a row with keys as column headers.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'csv', 'convert', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON array string to convert'),\n delimiter: z.string().default(',').describe('Column delimiter character'),\n }))\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n \n if (!Array.isArray(data)) {\n return {\n success: false,\n error: 'Input must be a JSON array',\n };\n }\n\n const csv = stringify(data, {\n delimiter: input.delimiter,\n header: true,\n });\n\n return {\n success: true,\n csv,\n rowCount: data.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to CSV',\n };\n }\n })\n .build();\n\n","/**\n * XML Parser Tool\n * \n * Parse and generate XML data.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\n/**\n * XML parser tool\n */\nexport const xmlParser = toolBuilder()\n .name('xml-parser')\n .description('Parse XML string into a JavaScript object. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'parse', 'data'])\n .schema(z.object({\n xml: z.string().describe('XML string to parse'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes'),\n parseAttributeValue: z.boolean().default(true).describe('Parse attribute values (numbers, booleans)'),\n trimValues: z.boolean().default(true).describe('Trim whitespace from text values'),\n }))\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: input.parseAttributeValue,\n trimValues: input.trimValues,\n parseTagValue: true,\n });\n\n const result = parser.parse(input.xml);\n\n return {\n success: true,\n data: result,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to parse XML',\n };\n }\n })\n .build();\n\n/**\n * XML generator tool\n */\nexport const xmlGenerator = toolBuilder()\n .name('xml-generator')\n .description('Convert a JavaScript object to XML string. Supports attributes, CDATA, and nested elements.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'generate', 'stringify', 'data'])\n .schema(z.object({\n data: z.any().describe('Object to convert to XML'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n indentSize: z.number().default(2).describe('Number of spaces for indentation (when format is true)'),\n }))\n .implement(async (input) => {\n try {\n const indentSize = input.indentSize ?? 2;\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\n indentBy: ' '.repeat(indentSize),\n ignoreAttributes: false,\n });\n\n // Wrap data in root element if not already wrapped\n const dataToConvert = input.data[rootName] ? input.data : { [rootName]: input.data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate XML',\n };\n }\n })\n .build();\n\n/**\n * XML to JSON converter\n */\nexport const xmlToJson = toolBuilder()\n .name('xml-to-json')\n .description('Convert XML string to JSON. Preserves structure and can include or exclude attributes.')\n .category(ToolCategory.UTILITY)\n .tags(['xml', 'json', 'convert', 'data'])\n .schema(z.object({\n xml: z.string().describe('XML string to convert'),\n ignoreAttributes: z.boolean().default(false).describe('Ignore XML attributes in conversion'),\n pretty: z.boolean().default(false).describe('Format JSON with indentation'),\n }))\n .implement(async (input) => {\n try {\n const parser = new XMLParser({\n ignoreAttributes: input.ignoreAttributes,\n parseAttributeValue: true,\n trimValues: true,\n });\n\n const result = parser.parse(input.xml);\n const json = input.pretty \n ? JSON.stringify(result, null, 2)\n : JSON.stringify(result);\n\n return {\n success: true,\n json,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert XML to JSON',\n };\n }\n })\n .build();\n\n/**\n * JSON to XML converter\n */\nexport const jsonToXml = toolBuilder()\n .name('json-to-xml')\n .description('Convert JSON string to XML. Each object key becomes an XML element.')\n .category(ToolCategory.UTILITY)\n .tags(['json', 'xml', 'convert', 'data'])\n .schema(z.object({\n json: z.string().describe('JSON string to convert'),\n rootName: z.string().default('root').describe('Name of the root XML element'),\n format: z.boolean().default(false).describe('Format XML with indentation'),\n }))\n .implement(async (input) => {\n try {\n const data = JSON.parse(input.json);\n const rootName = input.rootName ?? 'root';\n\n const builder = new XMLBuilder({\n format: input.format ?? false,\n indentBy: ' ',\n ignoreAttributes: false,\n });\n\n const dataToConvert = data[rootName] ? data : { [rootName]: data };\n const xml = builder.build(dataToConvert);\n\n return {\n success: true,\n xml,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to convert JSON to XML',\n };\n }\n })\n .build();\n\n","/**\n * Data Transformer Tool\n * \n * Transform, filter, map, and manipulate data structures.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Array filter tool\n */\nexport const arrayFilter = toolBuilder()\n .name('array-filter')\n .description('Filter an array based on a property value. Supports equality, comparison, and contains operations.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'filter', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to filter'),\n property: z.string().describe('Property name to filter by (use dot notation for nested properties)'),\n operator: z.enum(['equals', 'not-equals', 'greater-than', 'less-than', 'contains', 'starts-with', 'ends-with']).describe('Comparison operator'),\n value: z.any().describe('Value to compare against'),\n }))\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const filtered = input.array.filter((item) => {\n const itemValue = getNestedValue(item, input.property);\n \n switch (input.operator) {\n case 'equals':\n return itemValue === input.value;\n case 'not-equals':\n return itemValue !== input.value;\n case 'greater-than':\n return itemValue > input.value;\n case 'less-than':\n return itemValue < input.value;\n case 'contains':\n return String(itemValue).includes(String(input.value));\n case 'starts-with':\n return String(itemValue).startsWith(String(input.value));\n case 'ends-with':\n return String(itemValue).endsWith(String(input.value));\n default:\n return false;\n }\n });\n\n return {\n filtered,\n originalCount: input.array.length,\n filteredCount: filtered.length,\n };\n })\n .build();\n\n/**\n * Array map tool\n */\nexport const arrayMap = toolBuilder()\n .name('array-map')\n .description('Extract specific properties from each object in an array. Creates a new array with only the selected properties.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'map', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to map'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to extract from each object'),\n }))\n .implement(async (input) => {\n const mapped = input.array.map((item) => {\n const result: any = {};\n for (const prop of input.properties) {\n // Support dot notation\n const value = prop.split('.').reduce((current, key) => current?.[key], item);\n result[prop] = value;\n }\n return result;\n });\n\n return {\n mapped,\n count: mapped.length,\n };\n })\n .build();\n\n/**\n * Array sort tool\n */\nexport const arraySort = toolBuilder()\n .name('array-sort')\n .description('Sort an array by a property value. Supports ascending and descending order.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'sort', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to sort'),\n property: z.string().describe('Property name to sort by (use dot notation for nested properties)'),\n order: z.enum(['asc', 'desc']).default('asc').describe('Sort order: ascending or descending'),\n }))\n .implement(async (input) => {\n const getNestedValue = (obj: any, path: string): any => {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n };\n\n const sorted = [...input.array].sort((a, b) => {\n const aValue = getNestedValue(a, input.property);\n const bValue = getNestedValue(b, input.property);\n \n if (aValue < bValue) return input.order === 'asc' ? -1 : 1;\n if (aValue > bValue) return input.order === 'asc' ? 1 : -1;\n return 0;\n });\n\n return {\n sorted,\n count: sorted.length,\n };\n })\n .build();\n\n/**\n * Array group by tool\n */\nexport const arrayGroupBy = toolBuilder()\n .name('array-group-by')\n .description('Group an array of objects by a property value. Returns an object with groups as keys.')\n .category(ToolCategory.UTILITY)\n .tags(['array', 'group', 'data', 'transform'])\n .schema(z.object({\n array: z.array(z.any().describe('Array element')).describe('Array to group'),\n property: z.string().describe('Property name to group by'),\n }))\n .implement(async (input) => {\n const groups: Record<string, any[]> = {};\n \n for (const item of input.array) {\n const key = String(item[input.property]);\n if (!groups[key]) {\n groups[key] = [];\n }\n groups[key].push(item);\n }\n\n return {\n groups,\n groupCount: Object.keys(groups).length,\n totalItems: input.array.length,\n };\n })\n .build();\n\n/**\n * Object pick tool\n */\nexport const objectPick = toolBuilder()\n .name('object-pick')\n .description('Create a new object with only the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'pick', 'data', 'transform'])\n .schema(z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to pick'),\n }))\n .implement(async (input) => {\n const picked: Record<string, any> = {};\n \n for (const prop of input.properties) {\n if (prop in input.object) {\n picked[prop] = input.object[prop];\n }\n }\n\n return picked;\n })\n .build();\n\n/**\n * Object omit tool\n */\nexport const objectOmit = toolBuilder()\n .name('object-omit')\n .description('Create a new object excluding the specified properties from the source object.')\n .category(ToolCategory.UTILITY)\n .tags(['object', 'omit', 'data', 'transform'])\n .schema(z.object({\n object: z.record(z.any().describe('Property value')).describe('Source object'),\n properties: z.array(z.string().describe(\"String value\")).describe('List of property names to omit'),\n }))\n .implement(async (input) => {\n const omitted: Record<string, any> = { ...input.object };\n \n for (const prop of input.properties) {\n delete omitted[prop];\n }\n\n return omitted;\n })\n .build();\n\n","/**\n * File Operations Tools\n * \n * Tools for reading, writing, and manipulating files.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * File reader tool\n */\nexport const fileReader = toolBuilder()\n .name('file-reader')\n .description('Read the contents of a file from the file system. Supports text and binary files with various encodings.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'read', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to read'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex', 'binary']).default('utf8').describe('File encoding'),\n }))\n .implement(async (input) => {\n try {\n const content = await fs.readFile(input.path, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n content,\n size: stats.size,\n path: input.path,\n encoding: input.encoding,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to read file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File writer tool\n */\nexport const fileWriter = toolBuilder()\n .name('file-writer')\n .description('Write content to a file. Creates the file if it doesn\\'t exist, or overwrites it if it does.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'write', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to write'),\n content: z.string().describe('Content to write to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii', 'base64', 'hex']).default('utf8').describe('File encoding'),\n createDirs: z.boolean().default(false).describe('Create parent directories if they don\\'t exist'),\n }))\n .implement(async (input) => {\n try {\n // Create parent directories if requested\n if (input.createDirs) {\n const dir = path.dirname(input.path);\n await fs.mkdir(dir, { recursive: true });\n }\n \n await fs.writeFile(input.path, input.content, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n path: input.path,\n size: stats.size,\n encoding: input.encoding,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to write file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File append tool\n */\nexport const fileAppend = toolBuilder()\n .name('file-append')\n .description('Append content to the end of a file. Creates the file if it doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'append', 'io', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to append to'),\n content: z.string().describe('Content to append to the file'),\n encoding: z.enum(['utf8', 'utf-8', 'ascii']).default('utf8').describe('File encoding'),\n }))\n .implement(async (input) => {\n try {\n await fs.appendFile(input.path, input.content, input.encoding as BufferEncoding);\n const stats = await fs.stat(input.path);\n \n return {\n success: true,\n path: input.path,\n size: stats.size,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to append to file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File delete tool\n */\nexport const fileDelete = toolBuilder()\n .name('file-delete')\n .description('Delete a file from the file system. Returns an error if the file doesn\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'delete', 'remove', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the file to delete'),\n }))\n .implement(async (input) => {\n try {\n await fs.unlink(input.path);\n \n return {\n success: true,\n path: input.path,\n message: 'File deleted successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to delete file',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File exists tool\n */\nexport const fileExists = toolBuilder()\n .name('file-exists')\n .description('Check if a file or directory exists at the specified path.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'exists', 'check', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to check'),\n }))\n .implement(async (input) => {\n try {\n await fs.access(input.path);\n const stats = await fs.stat(input.path);\n \n return {\n exists: true,\n path: input.path,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n };\n } catch {\n return {\n exists: false,\n path: input.path,\n };\n }\n })\n .build();\n\n","/**\n * Directory Operations Tools\n * \n * Tools for working with directories and file listings.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Directory listing tool\n */\nexport const directoryList = toolBuilder()\n .name('directory-list')\n .description('List all files and directories in a directory. Can optionally include file details and filter by extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'list', 'files', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to list'),\n recursive: z.boolean().default(false).describe('List files recursively in subdirectories'),\n includeDetails: z.boolean().default(false).describe('Include file size, type, and modification date'),\n extension: z.string().optional().describe('Optional file extension filter (e.g., \".txt\", \".js\")'),\n }))\n .implement(async (input) => {\n try {\n const listFiles = async (dir: string, recursive: boolean): Promise<any[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const files: any[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(input.path, fullPath);\n\n // Apply extension filter if specified\n if (input.extension && !entry.name.endsWith(input.extension)) {\n if (!entry.isDirectory() || !recursive) {\n continue;\n }\n }\n\n if (input.includeDetails) {\n const stats = await fs.stat(fullPath);\n files.push({\n name: entry.name,\n path: relativePath,\n fullPath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n size: stats.size,\n modified: stats.mtime.toISOString(),\n });\n } else {\n files.push({\n name: entry.name,\n path: relativePath,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n });\n }\n\n // Recurse into subdirectories if requested\n if (recursive && entry.isDirectory()) {\n const subFiles = await listFiles(fullPath, true);\n files.push(...subFiles);\n }\n }\n\n return files;\n };\n\n const files = await listFiles(input.path, input.recursive ?? false);\n\n return {\n success: true,\n path: input.path,\n files,\n count: files.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to list directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * Directory create tool\n */\nexport const directoryCreate = toolBuilder()\n .name('directory-create')\n .description('Create a new directory. Can optionally create parent directories if they don\\'t exist.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'create', 'mkdir', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to create'),\n recursive: z.boolean().default(true).describe('Create parent directories if they don\\'t exist'),\n }))\n .implement(async (input) => {\n try {\n await fs.mkdir(input.path, { recursive: input.recursive });\n \n return {\n success: true,\n path: input.path,\n message: 'Directory created successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to create directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * Directory delete tool\n */\nexport const directoryDelete = toolBuilder()\n .name('directory-delete')\n .description('Delete a directory. Can optionally delete non-empty directories recursively.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['directory', 'delete', 'remove', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to the directory to delete'),\n recursive: z.boolean().default(false).describe('Delete directory and all its contents'),\n }))\n .implement(async (input) => {\n try {\n await fs.rm(input.path, { recursive: input.recursive, force: false });\n \n return {\n success: true,\n path: input.path,\n message: 'Directory deleted successfully',\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to delete directory',\n path: input.path,\n };\n }\n })\n .build();\n\n/**\n * File search tool\n */\nexport const fileSearch = toolBuilder()\n .name('file-search')\n .description('Search for files by name pattern in a directory. Supports wildcards and recursive search.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['file', 'search', 'find', 'filesystem'])\n .schema(z.object({\n directory: z.string().describe('Directory to search in'),\n pattern: z.string().describe('File name pattern to search for (supports * wildcard)'),\n recursive: z.boolean().default(true).describe('Search in subdirectories'),\n caseSensitive: z.boolean().default(false).describe('Case-sensitive pattern matching'),\n }))\n .implement(async (input) => {\n try {\n const searchFiles = async (dir: string): Promise<string[]> => {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n const matches: string[] = [];\n\n // Convert pattern to regex\n const regexPattern = input.pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`, input.caseSensitive ? '' : 'i');\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isFile() && regex.test(entry.name)) {\n matches.push(fullPath);\n }\n\n if (input.recursive && entry.isDirectory()) {\n const subMatches = await searchFiles(fullPath);\n matches.push(...subMatches);\n }\n }\n\n return matches;\n };\n\n const matches = await searchFiles(input.directory);\n\n return {\n success: true,\n directory: input.directory,\n pattern: input.pattern,\n matches,\n count: matches.length,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to search files',\n directory: input.directory,\n };\n }\n })\n .build();\n\n","/**\n * Path Utilities Tools\n * \n * Tools for working with file paths.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport * as path from 'path';\n\n/**\n * Path join tool\n */\nexport const pathJoin = toolBuilder()\n .name('path-join')\n .description('Join multiple path segments into a single path. Handles platform-specific separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'join', 'filesystem'])\n .schema(z.object({\n segments: z.array(z.string().describe(\"String value\")).describe('Path segments to join'),\n }))\n .implement(async (input) => {\n const joined = path.join(...input.segments);\n \n return {\n path: joined,\n segments: input.segments,\n };\n })\n .build();\n\n/**\n * Path resolve tool\n */\nexport const pathResolve = toolBuilder()\n .name('path-resolve')\n .description('Resolve a sequence of paths into an absolute path. Resolves relative paths from the current working directory.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'resolve', 'absolute', 'filesystem'])\n .schema(z.object({\n paths: z.array(z.string().describe(\"String value\")).describe('Paths to resolve'),\n }))\n .implement(async (input) => {\n const resolved = path.resolve(...input.paths);\n \n return {\n path: resolved,\n isAbsolute: path.isAbsolute(resolved),\n };\n })\n .build();\n\n/**\n * Path parse tool\n */\nexport const pathParse = toolBuilder()\n .name('path-parse')\n .description('Parse a file path into its components (directory, filename, extension, etc.).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'parse', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path to parse'),\n }))\n .implement(async (input) => {\n const parsed = path.parse(input.path);\n \n return {\n root: parsed.root,\n dir: parsed.dir,\n base: parsed.base,\n name: parsed.name,\n ext: parsed.ext,\n isAbsolute: path.isAbsolute(input.path),\n };\n })\n .build();\n\n/**\n * Path basename tool\n */\nexport const pathBasename = toolBuilder()\n .name('path-basename')\n .description('Get the last portion of a path (filename with extension). Optionally remove the extension.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'basename', 'filename', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n removeExtension: z.boolean().default(false).describe('Remove the file extension'),\n }))\n .implement(async (input) => {\n const basename = input.removeExtension \n ? path.basename(input.path, path.extname(input.path))\n : path.basename(input.path);\n \n return {\n basename,\n extension: path.extname(input.path),\n };\n })\n .build();\n\n/**\n * Path dirname tool\n */\nexport const pathDirname = toolBuilder()\n .name('path-dirname')\n .description('Get the directory name of a path (everything except the last portion).')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'dirname', 'directory', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n }))\n .implement(async (input) => {\n const dirname = path.dirname(input.path);\n \n return {\n dirname,\n basename: path.basename(input.path),\n };\n })\n .build();\n\n/**\n * Path extension tool\n */\nexport const pathExtension = toolBuilder()\n .name('path-extension')\n .description('Get the file extension from a path (including the dot, e.g., \".txt\").')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'extension', 'ext', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('File path'),\n }))\n .implement(async (input) => {\n const ext = path.extname(input.path);\n \n return {\n extension: ext,\n hasExtension: ext.length > 0,\n filename: path.basename(input.path, ext),\n };\n })\n .build();\n\n/**\n * Path relative tool\n */\nexport const pathRelative = toolBuilder()\n .name('path-relative')\n .description('Get the relative path from one path to another.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'relative', 'filesystem'])\n .schema(z.object({\n from: z.string().describe('Source path'),\n to: z.string().describe('Destination path'),\n }))\n .implement(async (input) => {\n const relative = path.relative(input.from, input.to);\n \n return {\n relativePath: relative,\n from: input.from,\n to: input.to,\n };\n })\n .build();\n\n/**\n * Path normalize tool\n */\nexport const pathNormalize = toolBuilder()\n .name('path-normalize')\n .description('Normalize a path by resolving \"..\" and \".\" segments and removing duplicate separators.')\n .category(ToolCategory.FILE_SYSTEM)\n .tags(['path', 'normalize', 'filesystem'])\n .schema(z.object({\n path: z.string().describe('Path to normalize'),\n }))\n .implement(async (input) => {\n const normalized = path.normalize(input.path);\n \n return {\n normalized,\n original: input.path,\n };\n })\n .build();\n\n","/**\n * Date and Time Utility Tools\n * \n * Tools for working with dates, times, and timestamps.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\nimport { format, parse, add, sub, differenceInDays, differenceInHours, differenceInMinutes, isAfter, isBefore, isValid } from 'date-fns';\n\n/**\n * Current date/time tool\n */\nexport const currentDateTime = toolBuilder()\n .name('current-date-time')\n .description('Get the current date and time in various formats (ISO, Unix timestamp, formatted string).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'now', 'current'])\n .schema(z.object({\n format: z.enum(['iso', 'unix', 'custom']).default('iso').describe('Output format'),\n customFormat: z.string().optional().describe('Custom format string (e.g., \"yyyy-MM-dd HH:mm:ss\") when format is \"custom\"'),\n timezone: z.string().optional().describe('Timezone (e.g., \"America/New_York\")'),\n }))\n .implement(async (input) => {\n const now = new Date();\n \n let formatted: string | number;\n if (input.format === 'iso') {\n formatted = now.toISOString();\n } else if (input.format === 'unix') {\n formatted = Math.floor(now.getTime() / 1000);\n } else if (input.format === 'custom' && input.customFormat) {\n formatted = format(now, input.customFormat);\n } else {\n formatted = now.toISOString();\n }\n \n return {\n formatted,\n iso: now.toISOString(),\n unix: Math.floor(now.getTime() / 1000),\n year: now.getFullYear(),\n month: now.getMonth() + 1,\n day: now.getDate(),\n hour: now.getHours(),\n minute: now.getMinutes(),\n second: now.getSeconds(),\n };\n })\n .build();\n\n/**\n * Date formatter tool\n */\nexport const dateFormatter = toolBuilder()\n .name('date-formatter')\n .description('Format a date string or timestamp into a different format. Supports ISO, Unix timestamps, and custom formats.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'format', 'time'])\n .schema(z.object({\n date: z.string().describe('Date string or Unix timestamp to format'),\n outputFormat: z.string().describe('Output format string (e.g., \"yyyy-MM-dd\", \"MMM dd, yyyy\")'),\n inputFormat: z.string().optional().describe('Input format string (optional, auto-detected if not provided)'),\n }))\n .implement(async (input) => {\n try {\n let date: Date;\n \n // Try to parse the input\n if (input.inputFormat) {\n date = parse(input.date, input.inputFormat, new Date());\n } else if (!isNaN(Number(input.date))) {\n // Unix timestamp\n date = new Date(Number(input.date) * 1000);\n } else {\n // ISO or other standard format\n date = new Date(input.date);\n }\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const formatted = format(date, input.outputFormat);\n \n return {\n success: true,\n formatted,\n iso: date.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to format date',\n };\n }\n })\n .build();\n\n/**\n * Date arithmetic tool\n */\nexport const dateArithmetic = toolBuilder()\n .name('date-arithmetic')\n .description('Add or subtract time from a date. Supports years, months, weeks, days, hours, minutes, and seconds.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'add', 'subtract', 'arithmetic'])\n .schema(z.object({\n date: z.string().describe('Starting date (ISO string or Unix timestamp)'),\n operation: z.enum(['add', 'subtract']).describe('Operation to perform'),\n amount: z.number().describe('Amount to add or subtract'),\n unit: z.enum(['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds']).describe('Time unit'),\n }))\n .implement(async (input) => {\n try {\n const date = new Date(input.date);\n \n if (!isValid(date)) {\n return {\n success: false,\n error: 'Invalid date',\n };\n }\n \n const duration = { [input.unit]: input.amount };\n const result = input.operation === 'add' \n ? add(date, duration)\n : sub(date, duration);\n \n return {\n success: true,\n result: result.toISOString(),\n unix: Math.floor(result.getTime() / 1000),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to perform date arithmetic',\n };\n }\n })\n .build();\n\n/**\n * Date difference tool\n */\nexport const dateDifference = toolBuilder()\n .name('date-difference')\n .description('Calculate the difference between two dates in various units (days, hours, minutes).')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'difference', 'duration'])\n .schema(z.object({\n startDate: z.string().describe('Start date (ISO string or Unix timestamp)'),\n endDate: z.string().describe('End date (ISO string or Unix timestamp)'),\n unit: z.enum(['days', 'hours', 'minutes']).default('days').describe('Unit for the difference'),\n }))\n .implement(async (input) => {\n try {\n const start = new Date(input.startDate);\n const end = new Date(input.endDate);\n \n if (!isValid(start) || !isValid(end)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n let difference: number;\n if (input.unit === 'days') {\n difference = differenceInDays(end, start);\n } else if (input.unit === 'hours') {\n difference = differenceInHours(end, start);\n } else {\n difference = differenceInMinutes(end, start);\n }\n \n return {\n success: true,\n difference,\n unit: input.unit,\n startDate: start.toISOString(),\n endDate: end.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to calculate date difference',\n };\n }\n })\n .build();\n\n/**\n * Date comparison tool\n */\nexport const dateComparison = toolBuilder()\n .name('date-comparison')\n .description('Compare two dates to determine if one is before, after, or equal to the other.')\n .category(ToolCategory.UTILITY)\n .tags(['date', 'time', 'compare', 'comparison'])\n .schema(z.object({\n date1: z.string().describe('First date to compare'),\n date2: z.string().describe('Second date to compare'),\n }))\n .implement(async (input) => {\n try {\n const d1 = new Date(input.date1);\n const d2 = new Date(input.date2);\n \n if (!isValid(d1) || !isValid(d2)) {\n return {\n success: false,\n error: 'Invalid date(s)',\n };\n }\n \n return {\n success: true,\n date1IsBefore: isBefore(d1, d2),\n date1IsAfter: isAfter(d1, d2),\n datesAreEqual: d1.getTime() === d2.getTime(),\n date1: d1.toISOString(),\n date2: d2.toISOString(),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to compare dates',\n };\n }\n })\n .build();\n\n","/**\n * String Utility Tools\n * \n * Tools for string manipulation and transformation.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * String case converter tool\n */\nexport const stringCaseConverter = toolBuilder()\n .name('string-case-converter')\n .description('Convert string to different cases: lowercase, uppercase, title case, camel case, snake case, kebab case.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'case', 'convert', 'transform'])\n .schema(z.object({\n text: z.string().describe('Text to convert'),\n targetCase: z.enum(['lowercase', 'uppercase', 'title', 'camel', 'snake', 'kebab', 'pascal']).describe('Target case format'),\n }))\n .implement(async (input) => {\n let result: string;\n \n switch (input.targetCase) {\n case 'lowercase':\n result = input.text.toLowerCase();\n break;\n case 'uppercase':\n result = input.text.toUpperCase();\n break;\n case 'title':\n result = input.text.toLowerCase().replace(/\\b\\w/g, (char) => char.toUpperCase());\n break;\n case 'camel':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase());\n break;\n case 'snake':\n result = input.text\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n break;\n case 'kebab':\n result = input.text\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n break;\n case 'pascal':\n result = input.text\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+(.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n break;\n default:\n result = input.text;\n }\n \n return {\n original: input.text,\n converted: result,\n targetCase: input.targetCase,\n };\n })\n .build();\n\n/**\n * String trim tool\n */\nexport const stringTrim = toolBuilder()\n .name('string-trim')\n .description('Remove whitespace from the beginning and/or end of a string. Supports trim, trim start, and trim end.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'trim', 'whitespace'])\n .schema(z.object({\n text: z.string().describe('Text to trim'),\n mode: z.enum(['both', 'start', 'end']).default('both').describe('Which side to trim'),\n characters: z.string().optional().describe('Optional custom characters to trim (default: whitespace)'),\n }))\n .implement(async (input) => {\n let result: string;\n \n if (input.characters) {\n const chars = input.characters.split('').map(c => c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('');\n const regex = input.mode === 'both' \n ? new RegExp(`^[${chars}]+|[${chars}]+$`, 'g')\n : input.mode === 'start'\n ? new RegExp(`^[${chars}]+`, 'g')\n : new RegExp(`[${chars}]+$`, 'g');\n result = input.text.replace(regex, '');\n } else {\n result = input.mode === 'both' \n ? input.text.trim()\n : input.mode === 'start'\n ? input.text.trimStart()\n : input.text.trimEnd();\n }\n \n return {\n original: input.text,\n trimmed: result,\n removed: input.text.length - result.length,\n };\n })\n .build();\n\n/**\n * String replace tool\n */\nexport const stringReplace = toolBuilder()\n .name('string-replace')\n .description('Replace occurrences of a substring or pattern in a string. Supports regex patterns and global replacement.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'replace', 'substitute'])\n .schema(z.object({\n text: z.string().describe('Text to search in'),\n search: z.string().describe('String or regex pattern to search for'),\n replace: z.string().describe('Replacement string'),\n global: z.boolean().default(true).describe('Replace all occurrences (true) or just the first (false)'),\n caseInsensitive: z.boolean().default(false).describe('Case-insensitive search'),\n }))\n .implement(async (input) => {\n const flags = (input.global ? 'g' : '') + (input.caseInsensitive ? 'i' : '');\n const regex = new RegExp(input.search, flags);\n const result = input.text.replace(regex, input.replace);\n \n // Count replacements\n const matches = input.text.match(regex);\n const count = matches ? matches.length : 0;\n \n return {\n original: input.text,\n result,\n replacements: count,\n };\n })\n .build();\n\n/**\n * String split tool\n */\nexport const stringSplit = toolBuilder()\n .name('string-split')\n .description('Split a string into an array of substrings using a delimiter. Supports regex delimiters and limit.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'split', 'array'])\n .schema(z.object({\n text: z.string().describe('Text to split'),\n delimiter: z.string().describe('Delimiter to split on (can be a regex pattern)'),\n limit: z.number().optional().describe('Maximum number of splits'),\n }))\n .implement(async (input) => {\n const parts = input.text.split(input.delimiter, input.limit);\n \n return {\n parts,\n count: parts.length,\n };\n })\n .build();\n\n/**\n * String join tool\n */\nexport const stringJoin = toolBuilder()\n .name('string-join')\n .description('Join an array of strings into a single string with a separator.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'join', 'array'])\n .schema(z.object({\n parts: z.array(z.string().describe(\"String value\")).describe('Array of strings to join'),\n separator: z.string().default('').describe('Separator to use between parts'),\n }))\n .implement(async (input) => {\n const result = input.parts.join(input.separator);\n \n return {\n result,\n partCount: input.parts.length,\n length: result.length,\n };\n })\n .build();\n\n/**\n * String substring tool\n */\nexport const stringSubstring = toolBuilder()\n .name('string-substring')\n .description('Extract a substring from a string using start and end positions.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'substring', 'slice'])\n .schema(z.object({\n text: z.string().describe('Source text'),\n start: z.number().describe('Start position (0-based)'),\n end: z.number().optional().describe('End position (optional, defaults to end of string)'),\n }))\n .implement(async (input) => {\n const result = input.text.substring(input.start, input.end);\n \n return {\n result,\n length: result.length,\n start: input.start,\n end: input.end ?? input.text.length,\n };\n })\n .build();\n\n/**\n * String length tool\n */\nexport const stringLength = toolBuilder()\n .name('string-length')\n .description('Get the length of a string in characters, words, or lines.')\n .category(ToolCategory.UTILITY)\n .tags(['string', 'length', 'count'])\n .schema(z.object({\n text: z.string().describe('Text to measure'),\n }))\n .implement(async (input) => {\n const words = input.text.trim().split(/\\s+/).filter(w => w.length > 0);\n const lines = input.text.split('\\n');\n \n return {\n characters: input.text.length,\n words: words.length,\n lines: lines.length,\n };\n })\n .build();\n\n","/**\n * Math Operations Tools\n * \n * Tools for mathematical calculations and operations.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Calculator tool\n */\nexport const calculator = toolBuilder()\n .name('calculator')\n .description('Perform basic arithmetic operations: add, subtract, multiply, divide, power, modulo.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'calculator', 'arithmetic'])\n .schema(z.object({\n operation: z.enum(['add', 'subtract', 'multiply', 'divide', 'power', 'modulo']).describe('Mathematical operation to perform'),\n a: z.number().describe('First number'),\n b: z.number().describe('Second number'),\n }))\n .implement(async (input) => {\n let result: number;\n \n switch (input.operation) {\n case 'add':\n result = input.a + input.b;\n break;\n case 'subtract':\n result = input.a - input.b;\n break;\n case 'multiply':\n result = input.a * input.b;\n break;\n case 'divide':\n if (input.b === 0) {\n return {\n success: false,\n error: 'Division by zero',\n };\n }\n result = input.a / input.b;\n break;\n case 'power':\n result = Math.pow(input.a, input.b);\n break;\n case 'modulo':\n result = input.a % input.b;\n break;\n default:\n return {\n success: false,\n error: 'Unknown operation',\n };\n }\n \n return {\n success: true,\n result,\n operation: input.operation,\n a: input.a,\n b: input.b,\n };\n })\n .build();\n\n/**\n * Math functions tool\n */\nexport const mathFunctions = toolBuilder()\n .name('math-functions')\n .description('Apply mathematical functions: sqrt, abs, round, floor, ceil, sin, cos, tan, log, exp.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'functions', 'trigonometry'])\n .schema(z.object({\n function: z.enum(['sqrt', 'abs', 'round', 'floor', 'ceil', 'sin', 'cos', 'tan', 'log', 'exp']).describe('Mathematical function to apply'),\n value: z.number().describe('Input value'),\n }))\n .implement(async (input) => {\n let result: number;\n \n try {\n switch (input.function) {\n case 'sqrt':\n result = Math.sqrt(input.value);\n break;\n case 'abs':\n result = Math.abs(input.value);\n break;\n case 'round':\n result = Math.round(input.value);\n break;\n case 'floor':\n result = Math.floor(input.value);\n break;\n case 'ceil':\n result = Math.ceil(input.value);\n break;\n case 'sin':\n result = Math.sin(input.value);\n break;\n case 'cos':\n result = Math.cos(input.value);\n break;\n case 'tan':\n result = Math.tan(input.value);\n break;\n case 'log':\n result = Math.log(input.value);\n break;\n case 'exp':\n result = Math.exp(input.value);\n break;\n default:\n return {\n success: false,\n error: 'Unknown function',\n };\n }\n \n if (isNaN(result) || !isFinite(result)) {\n return {\n success: false,\n error: 'Invalid result (NaN or Infinity)',\n };\n }\n \n return {\n success: true,\n result,\n function: input.function,\n input: input.value,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Math operation failed',\n };\n }\n })\n .build();\n\n/**\n * Random number generator tool\n */\nexport const randomNumber = toolBuilder()\n .name('random-number')\n .description('Generate a random number within a specified range. Supports integers and decimals.')\n .category(ToolCategory.UTILITY)\n .tags(['random', 'number', 'generator'])\n .schema(z.object({\n min: z.number().default(0).describe('Minimum value (inclusive)'),\n max: z.number().default(1).describe('Maximum value (exclusive for decimals, inclusive for integers)'),\n integer: z.boolean().default(false).describe('Generate an integer (true) or decimal (false)'),\n }))\n .implement(async (input) => {\n const min = input.min ?? 0;\n const max = input.max ?? 1;\n const integer = input.integer ?? false;\n\n let result: number;\n\n if (integer) {\n result = Math.floor(Math.random() * (max - min + 1)) + min;\n } else {\n result = Math.random() * (max - min) + min;\n }\n\n return {\n result,\n min,\n max,\n integer,\n };\n })\n .build();\n\n/**\n * Statistics tool\n */\nexport const statistics = toolBuilder()\n .name('statistics')\n .description('Calculate statistics for an array of numbers: sum, average, min, max, median, standard deviation.')\n .category(ToolCategory.UTILITY)\n .tags(['math', 'statistics', 'average', 'sum'])\n .schema(z.object({\n numbers: z.array(z.number().describe(\"Number value\")).describe('Array of numbers to analyze'),\n }))\n .implement(async (input) => {\n if (input.numbers.length === 0) {\n return {\n success: false,\n error: 'Empty array',\n };\n }\n \n const sorted = [...input.numbers].sort((a, b) => a - b);\n const sum = input.numbers.reduce((acc, n) => acc + n, 0);\n const average = sum / input.numbers.length;\n const min = sorted[0];\n const max = sorted[sorted.length - 1];\n \n // Median\n const mid = Math.floor(sorted.length / 2);\n const median = sorted.length % 2 === 0\n ? (sorted[mid - 1] + sorted[mid]) / 2\n : sorted[mid];\n \n // Standard deviation\n const variance = input.numbers.reduce((acc, n) => acc + Math.pow(n - average, 2), 0) / input.numbers.length;\n const stdDev = Math.sqrt(variance);\n \n return {\n success: true,\n count: input.numbers.length,\n sum,\n average,\n min,\n max,\n median,\n standardDeviation: stdDev,\n variance,\n };\n })\n .build();\n\n","/**\n * Validation Utility Tools\n * \n * Tools for validating data formats and types.\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { z } from 'zod';\n\n/**\n * Email validator tool\n */\nexport const emailValidator = toolBuilder()\n .name('email-validator')\n .description('Validate if a string is a valid email address format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'email', 'validate'])\n .schema(z.object({\n email: z.string().describe('Email address to validate'),\n }))\n .implement(async (input) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const valid = emailRegex.test(input.email);\n \n return {\n valid,\n email: input.email,\n message: valid ? 'Valid email address' : 'Invalid email address format',\n };\n })\n .build();\n\n/**\n * URL validator tool (already exists in web tools, but adding here for completeness)\n */\nexport const urlValidatorSimple = toolBuilder()\n .name('url-validator-simple')\n .description('Validate if a string is a valid URL format.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'url', 'validate'])\n .schema(z.object({\n url: z.string().describe('URL to validate'),\n }))\n .implement(async (input) => {\n try {\n new URL(input.url);\n return {\n valid: true,\n url: input.url,\n message: 'Valid URL',\n };\n } catch {\n return {\n valid: false,\n url: input.url,\n message: 'Invalid URL format',\n };\n }\n })\n .build();\n\n/**\n * Phone number validator tool\n */\nexport const phoneValidator = toolBuilder()\n .name('phone-validator')\n .description('Validate if a string is a valid phone number format. Supports various international formats.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'phone', 'validate'])\n .schema(z.object({\n phone: z.string().describe('Phone number to validate'),\n strict: z.boolean().default(false).describe('Use strict validation (requires country code)'),\n }))\n .implement(async (input) => {\n // Basic phone validation - matches common formats\n // eslint-disable-next-line no-useless-escape\n const basicRegex = /^[\\d\\s\\-\\+\\(\\)]+$/;\n const strictRegex = /^\\+?[1-9]\\d{1,14}$/; // E.164 format\n \n const regex = input.strict ? strictRegex : basicRegex;\n const valid = regex.test(input.phone.replace(/\\s/g, ''));\n \n return {\n valid,\n phone: input.phone,\n message: valid ? 'Valid phone number format' : 'Invalid phone number format',\n };\n })\n .build();\n\n/**\n * Credit card validator tool\n */\nexport const creditCardValidator = toolBuilder()\n .name('credit-card-validator')\n .description('Validate if a string is a valid credit card number using the Luhn algorithm.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'credit-card', 'validate', 'luhn'])\n .schema(z.object({\n cardNumber: z.string().describe('Credit card number to validate'),\n }))\n .implement(async (input) => {\n // Remove spaces and dashes\n // eslint-disable-next-line no-useless-escape\n const cleaned = input.cardNumber.replace(/[\\s\\-]/g, '');\n \n // Check if it's all digits\n if (!/^\\d+$/.test(cleaned)) {\n return {\n valid: false,\n message: 'Card number must contain only digits',\n };\n }\n \n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n \n for (let i = cleaned.length - 1; i >= 0; i--) {\n let digit = parseInt(cleaned[i], 10);\n \n if (isEven) {\n digit *= 2;\n if (digit > 9) {\n digit -= 9;\n }\n }\n \n sum += digit;\n isEven = !isEven;\n }\n \n const valid = sum % 10 === 0;\n \n return {\n valid,\n cardNumber: input.cardNumber,\n message: valid ? 'Valid credit card number' : 'Invalid credit card number (failed Luhn check)',\n };\n })\n .build();\n\n/**\n * IP address validator tool\n */\nexport const ipValidator = toolBuilder()\n .name('ip-validator')\n .description('Validate if a string is a valid IPv4 or IPv6 address.')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'ip', 'validate', 'network'])\n .schema(z.object({\n ip: z.string().describe('IP address to validate'),\n version: z.enum(['v4', 'v6', 'any']).default('any').describe('IP version to validate against'),\n }))\n .implement(async (input) => {\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\n \n let valid = false;\n let detectedVersion: string | undefined;\n \n if (input.version === 'v4' || input.version === 'any') {\n if (ipv4Regex.test(input.ip)) {\n // Additional check for valid ranges (0-255)\n const parts = input.ip.split('.');\n valid = parts.every(part => {\n const num = parseInt(part, 10);\n return num >= 0 && num <= 255;\n });\n if (valid) detectedVersion = 'IPv4';\n }\n }\n \n if (!valid && (input.version === 'v6' || input.version === 'any')) {\n if (ipv6Regex.test(input.ip)) {\n valid = true;\n detectedVersion = 'IPv6';\n }\n }\n \n return {\n valid,\n ip: input.ip,\n version: detectedVersion,\n message: valid ? `Valid ${detectedVersion} address` : 'Invalid IP address format',\n };\n })\n .build();\n\n/**\n * UUID validator tool\n */\nexport const uuidValidator = toolBuilder()\n .name('uuid-validator')\n .description('Validate if a string is a valid UUID (v1, v3, v4, or v5).')\n .category(ToolCategory.UTILITY)\n .tags(['validation', 'uuid', 'validate', 'guid'])\n .schema(z.object({\n uuid: z.string().describe('UUID to validate'),\n }))\n .implement(async (input) => {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n const valid = uuidRegex.test(input.uuid);\n \n let version: number | undefined;\n if (valid) {\n version = parseInt(input.uuid[14], 10);\n }\n \n return {\n valid,\n uuid: input.uuid,\n version,\n message: valid ? `Valid UUID v${version}` : 'Invalid UUID format',\n };\n })\n .build();\n\n","/**\n * Types for askHuman tool and human-in-the-loop workflows\n * @module tools/agent/ask-human/types\n */\n\nimport { z } from 'zod';\nimport type { HumanRequest, HumanRequestPriority, HumanRequestStatus } from '@agentforge/core';\n\n/**\n * Input schema for askHuman tool\n */\nexport const AskHumanInputSchema = z.object({\n /**\n * The question to ask the human\n */\n question: z.string().min(1).describe('The question to ask the human'),\n\n /**\n * Optional context to help the human understand the question\n */\n context: z.record(z.any()).optional().describe('Additional context for the question'),\n\n /**\n * Priority level for this request\n */\n priority: z.enum(['low', 'normal', 'high', 'critical']).default('normal').describe('Priority level for this request'),\n\n /**\n * Timeout in milliseconds (0 = no timeout)\n */\n timeout: z.number().min(0).default(0).describe('Timeout in milliseconds (0 = no timeout)'),\n\n /**\n * Default response if timeout occurs\n */\n defaultResponse: z.string().optional().describe('Default response if timeout occurs'),\n\n /**\n * Suggested responses (for UI to show as options)\n */\n suggestions: z.array(z.string()).optional().describe('Suggested responses for the human'),\n});\n\n/**\n * Input type for askHuman tool\n */\nexport type AskHumanInput = z.infer<typeof AskHumanInputSchema>;\n\n/**\n * Output from askHuman tool\n */\nexport interface AskHumanOutput {\n /**\n * The human's response\n */\n response: string;\n\n /**\n * Metadata about the interaction\n */\n metadata: {\n /**\n * Unique ID for this request\n */\n requestId: string;\n\n /**\n * When the request was created\n */\n requestedAt: number;\n\n /**\n * When the response was received\n */\n respondedAt: number;\n\n /**\n * How long it took to get a response (ms)\n */\n duration: number;\n\n /**\n * Whether this was a timeout response\n */\n timedOut: boolean;\n\n /**\n * Priority level\n */\n priority: HumanRequestPriority;\n };\n}\n\n// HumanRequest, HumanRequestPriority, and HumanRequestStatus are now imported from @agentforge/core\n// They are defined in packages/core/src/langgraph/interrupts/types.ts\n\n","/**\n * askHuman tool implementation\n * @module tools/agent/ask-human/tool\n */\n\nimport { toolBuilder, ToolCategory } from '@agentforge/core';\nimport { AskHumanInputSchema, type AskHumanInput, type AskHumanOutput } from './types.js';\nimport { randomUUID } from 'crypto';\n\n/**\n * Create the askHuman tool\n * \n * This tool enables human-in-the-loop workflows by pausing agent execution\n * and waiting for human input. It uses LangGraph's interrupt mechanism.\n * \n * @example\n * ```typescript\n * import { createAskHumanTool } from '@agentforge/tools';\n *\n * const askHuman = createAskHumanTool();\n *\n * // In your agent\n * const tools = [askHuman, ...otherTools];\n *\n * // The agent can call this tool to ask for human input\n * // When called, it will pause execution and wait for a response\n * ```\n * \n * @returns The askHuman tool\n */\nexport function createAskHumanTool() {\n return toolBuilder()\n .name('ask-human')\n .description(\n 'Ask a human for input or approval. Use this when you need human guidance, ' +\n 'approval for a critical action, or clarification on ambiguous requirements. ' +\n 'The agent execution will pause until the human responds.'\n )\n .category(ToolCategory.UTILITY)\n .schema(AskHumanInputSchema)\n .implement(async (input): Promise<AskHumanOutput> => {\n // Type assertion after Zod validation\n const validatedInput = input as AskHumanInput;\n const requestId = randomUUID();\n const requestedAt = Date.now();\n\n // Import interrupt dynamically to avoid circular dependencies\n // and to allow this tool to work even if LangGraph is not installed\n let interrupt: ((value: any) => any) | undefined;\n \n try {\n const langgraph = await import('@langchain/langgraph');\n interrupt = (langgraph as any).interrupt;\n } catch (error) {\n throw new Error(\n 'askHuman tool requires @langchain/langgraph to be installed. ' +\n 'Install it with: npm install @langchain/langgraph'\n );\n }\n\n if (!interrupt) {\n throw new Error(\n 'interrupt function not found in @langchain/langgraph. ' +\n 'Make sure you are using a compatible version of LangGraph.'\n );\n }\n\n // Create the human request object\n const humanRequest = {\n id: requestId,\n question: validatedInput.question,\n context: validatedInput.context,\n priority: validatedInput.priority,\n createdAt: requestedAt,\n timeout: validatedInput.timeout,\n defaultResponse: validatedInput.defaultResponse,\n suggestions: validatedInput.suggestions,\n status: 'pending' as const,\n };\n\n // Use LangGraph's interrupt to pause execution\n // This will save the request to the checkpoint and pause the graph\n // The application can then resume with the human's response\n const response = interrupt(humanRequest);\n\n const respondedAt = Date.now();\n const duration = respondedAt - requestedAt;\n\n // Check if we got a timeout response\n const timedOut = validatedInput.timeout > 0 && duration >= validatedInput.timeout;\n\n // If timeout occurred and we have a default response, use it\n const finalResponse = timedOut && validatedInput.defaultResponse\n ? validatedInput.defaultResponse\n : (response || '');\n\n return {\n response: finalResponse,\n metadata: {\n requestId,\n requestedAt,\n respondedAt,\n duration,\n timedOut,\n priority: validatedInput.priority,\n },\n };\n })\n .build();\n}\n\n/**\n * Default instance of the askHuman tool\n * \n * @example\n * ```typescript\n * import { askHumanTool } from '@agentforge/core';\n * \n * const agent = createReActAgent({\n * llm,\n * tools: [askHumanTool, ...otherTools],\n * });\n * ```\n */\nexport const askHumanTool = createAskHumanTool();\n\n"]}