china-nbs 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache.ts","../src/catalog-codes.ts","../src/errors.ts","../src/catalog.ts","../src/rate-limiter.ts","../src/client.ts","../src/aliases.ts","../src/cities.ts","../src/regions.ts","../src/curated.ts","../src/resolver.ts","../src/format.ts","../src/series.ts","../src/compare.ts","../src/nbs-provider.ts","../src/index.ts","../src/cli.ts"],"names":["abortError","query","regionNames","CITIES","outcome","year","PERIOD_CODE","parseYear","early","pathToFileURL"],"mappings":"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","file":"cli.cjs","sourcesContent":["interface CacheEntry<T> {\n value: T;\n expiresAt: number;\n}\n\nexport interface CacheOptions {\n maxEntries?: number;\n now?: () => number;\n}\n\n/**\n * Small in-process TTL + LRU cache with in-flight request de-duplication.\n * No disk persistence: stale or private data should not survive process restarts.\n */\nexport class TtlCache {\n private readonly entries = new Map<string, CacheEntry<unknown>>();\n private readonly inFlight = new Map<string, Promise<unknown>>();\n private readonly maxEntries: number;\n private readonly now: () => number;\n\n constructor(options: CacheOptions = {}) {\n this.maxEntries = Math.max(1, options.maxEntries ?? 200);\n this.now = options.now ?? Date.now;\n }\n\n get size(): number {\n return this.entries.size;\n }\n\n get<T>(key: string): T | undefined {\n const entry = this.entries.get(key);\n if (!entry) return undefined;\n if (entry.expiresAt <= this.now()) {\n this.entries.delete(key);\n return undefined;\n }\n // Refresh LRU order.\n this.entries.delete(key);\n this.entries.set(key, entry);\n return entry.value as T;\n }\n\n set<T>(key: string, value: T, ttlMs: number): void {\n if (ttlMs <= 0) return;\n this.entries.delete(key);\n this.entries.set(key, { value, expiresAt: this.now() + ttlMs });\n while (this.entries.size > this.maxEntries) {\n const oldest = this.entries.keys().next().value;\n if (oldest === undefined) break;\n this.entries.delete(oldest);\n }\n }\n\n delete(key: string): void {\n this.entries.delete(key);\n }\n\n clear(): void {\n this.entries.clear();\n this.inFlight.clear();\n }\n\n async getOrLoad<T>(\n key: string,\n ttlMs: number,\n loader: () => Promise<T>,\n options: { noCache?: boolean } = {},\n ): Promise<T> {\n if (!options.noCache) {\n const cached = this.get<T>(key);\n if (cached !== undefined) return cached;\n }\n\n const existing = this.inFlight.get(key);\n if (existing) return existing as Promise<T>;\n\n const promise = loader()\n .then((value) => {\n if (!options.noCache) this.set(key, value, ttlMs);\n return value;\n })\n .finally(() => {\n this.inFlight.delete(key);\n });\n\n this.inFlight.set(key, promise);\n return promise;\n }\n}\n","import type { Period } from './types.js';\n\nexport type RegionScope = 'national' | 'province' | 'city';\n\n/**\n * NBS public-release catalog codes are a scope × frequency matrix, not a\n * frequency alone. Using code=6 for every province query silently returns\n * annual data only, so keep the mapping in one place.\n *\n * | scope | month | quarter | year |\n * |----------|-------|---------|------|\n * | national | 1 | 2 | 3 |\n * | province | 4 | 5 | 6 |\n * | city | — | — | 8 |\n */\nconst CATALOG_CODES: Record<RegionScope, Partial<Record<Period, string>>> = {\n national: { month: '1', quarter: '2', year: '3' },\n province: { month: '4', quarter: '5', year: '6' },\n city: { year: '8' },\n};\n\nexport function catalogCode(scope: RegionScope, period: Period): string | undefined {\n return CATALOG_CODES[scope][period];\n}\n\nexport const CATALOG_CODE_LABELS: Record<string, string> = {\n '1': '全国月度',\n '2': '全国季度',\n '3': '全国年度',\n '4': '分省月度',\n '5': '分省季度',\n '6': '分省年度',\n '7': '主要城市月度价格',\n '8': '主要城市年度',\n '9': '港澳台月度',\n};\n","import type { ErrorCode, QueryError } from './types.js';\n\n/** Error with a stable code and a user-facing hint. */\nexport class NbsError extends Error {\n readonly code: ErrorCode;\n readonly retryable: boolean;\n readonly hint?: string;\n readonly details?: unknown;\n\n constructor(\n code: ErrorCode,\n message: string,\n options: { retryable?: boolean; hint?: string; details?: unknown; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'NbsError';\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.hint = options.hint;\n this.details = options.details;\n }\n}\n\nexport function isNbsError(error: unknown): error is NbsError {\n return error instanceof NbsError;\n}\n\nexport function toQueryError(error: unknown): QueryError {\n if (isNbsError(error)) {\n return {\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n ...(error.hint === undefined ? {} : { hint: error.hint }),\n ...(error.details === undefined ? {} : { details: error.details }),\n };\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n return {\n code: 'ABORTED',\n message: '查询已取消',\n retryable: false,\n hint: '如果这是超时导致的,请增大 totalTimeoutMs 或稍后重试。',\n };\n }\n\n return {\n code: 'UPSTREAM_ERROR',\n message: error instanceof Error ? error.message : String(error),\n retryable: true,\n hint: '这是未预期的错误;请稍后重试,或运行 CLI 时加 --debug 查看详情。',\n };\n}\n\nexport function invalidArgument(message: string, hint?: string): NbsError {\n return new NbsError('INVALID_ARGUMENT', message, { hint });\n}\n\nexport function notFound(message: string, hint?: string, details?: unknown): NbsError {\n return new NbsError('NOT_FOUND', message, { hint, details });\n}\n\nexport function ambiguous(message: string, hint?: string, details?: unknown): NbsError {\n return new NbsError('AMBIGUOUS', message, { hint, details });\n}\n\nexport function invalidRange(message: string, hint?: string): NbsError {\n return new NbsError('INVALID_RANGE', message, { hint });\n}\n\nexport function upstreamBlocked(status: number, bodySnippet?: string): NbsError {\n return new NbsError('UPSTREAM_BLOCKED', `国家统计局接口返回 ${status},可能被 WAF 拦截`, {\n retryable: false,\n hint: '不要循环重试。稍后再试,或改用 web 搜索新闻/解读;不要把旧 EasyQuery 当作 fallback。',\n details: bodySnippet ? { bodySnippet } : undefined,\n });\n}\n\nexport function upstreamError(status: number, message: string, details?: unknown): NbsError {\n return new NbsError('UPSTREAM_ERROR', message || `国家统计局接口返回 ${status}`, {\n retryable: status >= 500 || status === 429,\n hint: '接口可能处于试运行期或不稳定;已自动重试一次,仍失败可稍后再试。',\n details,\n });\n}\n\nexport function parseError(message: string, details?: unknown): NbsError {\n return new NbsError('PARSE_ERROR', message, {\n retryable: false,\n hint: '接口结构可能已改版;请查看 docs/contracts.md 并用最新响应更新解析器。',\n details,\n });\n}\n\nexport function timeoutError(timeoutMs: number): NbsError {\n return new NbsError('TIMEOUT', `请求超时(${timeoutMs}ms)`, {\n retryable: true,\n hint: '国家统计局接口在试运行期可能较慢;可增大 timeoutMs 或稍后重试。',\n });\n}\n\nexport function circuitOpenError(retryAfterMs: number, failures: number, path?: string): NbsError {\n return new NbsError('CIRCUIT_OPEN', '上游连续失败,熔断器已打开', {\n retryable: true,\n hint: `请等待约 ${Math.ceil(retryAfterMs / 1000)} 秒后再试,或检查网络/代理配置。`,\n details: {\n path,\n failures,\n retryAfterMs: Math.max(0, Math.ceil(retryAfterMs)),\n },\n });\n}\n","import { CATALOG_CODE_LABELS } from './catalog-codes.js';\nimport { invalidArgument } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport type { CatalogNode, QueryOptions, TreeRecord } from './types.js';\n\nconst VALID_CODES = new Set(Object.keys(CATALOG_CODE_LABELS));\nconst MAX_NODES = 500;\n\nexport interface CatalogResult {\n nodes: CatalogNode[];\n notes: string[];\n}\n\nfunction toNode(record: TreeRecord): CatalogNode {\n return {\n id: record.id,\n name: record.name,\n level: record.level,\n isLeaf: record.isLeaf,\n parentId: record.parentId,\n startYear: record.startYear,\n endYear: record.endYear,\n };\n}\n\n/** Expand a catalog tree to the requested depth. */\nexport async function fetchCatalog(\n provider: NbsProvider,\n options: QueryOptions,\n code = '3',\n pid = '',\n depth = 1,\n): Promise<CatalogResult> {\n if (!VALID_CODES.has(code)) {\n const available = Object.entries(CATALOG_CODE_LABELS)\n .map(([value, label]) => `${value} ${label}`)\n .join('、');\n throw invalidArgument(`不支持的分类 code:${code}`, `可用值:${available}。`);\n }\n const safeDepth = Math.max(1, Math.min(3, Math.floor(depth)));\n const nodes: CatalogNode[] = [];\n const notes: string[] = [];\n const queue: Array<{ pid: string; level: number }> = [{ pid, level: 1 }];\n\n while (queue.length > 0 && nodes.length < MAX_NODES) {\n const current = queue.shift();\n if (!current) break;\n const children = await provider.getTree({\n pid: current.pid,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n for (const child of children) {\n nodes.push(toNode(child));\n if (!child.isLeaf && current.level < safeDepth) {\n queue.push({ pid: child.id, level: current.level + 1 });\n }\n if (nodes.length >= MAX_NODES) break;\n }\n }\n\n if (nodes.length >= MAX_NODES) {\n notes.push(`分类树节点较多,仅返回前 ${MAX_NODES} 个;请用 pid 继续展开。`);\n }\n\n return { nodes, notes };\n}\n","export interface RateLimiterOptions {\n minIntervalMs?: number;\n jitterMs?: number;\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\nfunction abortError(): DOMException {\n return new DOMException('The operation was aborted.', 'AbortError');\n}\n\n/** Abortable sleep used by the limiter and retry logic. */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError());\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n cleanup();\n reject(abortError());\n };\n const cleanup = () => signal?.removeEventListener('abort', onAbort);\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/**\n * Serialized rate limiter. Every caller joins one queue; request starts are\n * spaced by at least `minIntervalMs` plus jitter.\n */\nexport class RateLimiter {\n private readonly minIntervalMs: number;\n private readonly jitterMs: number;\n private readonly sleepImpl: (ms: number, signal?: AbortSignal) => Promise<void>;\n private queueTail: Promise<void> = Promise.resolve();\n private lastRequestAt = 0;\n\n constructor(options: RateLimiterOptions = {}) {\n this.minIntervalMs = options.minIntervalMs ?? 2_000;\n this.jitterMs = options.jitterMs ?? 250;\n this.sleepImpl = options.sleep ?? sleep;\n }\n\n async run<T>(fn: () => Promise<T>, signal?: AbortSignal): Promise<T> {\n const previous = this.queueTail;\n let release!: () => void;\n this.queueTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await previous;\n try {\n const elapsed = Date.now() - this.lastRequestAt;\n const wait = this.minIntervalMs + Math.floor(Math.random() * this.jitterMs) - elapsed;\n if (wait > 0) await this.sleepImpl(wait, signal);\n this.lastRequestAt = Date.now();\n return await fn();\n } finally {\n release();\n }\n }\n}\n","import { TtlCache } from './cache.js';\nimport {\n circuitOpenError,\n NbsError,\n parseError,\n timeoutError,\n upstreamBlocked,\n upstreamError,\n} from './errors.js';\nimport { RateLimiter, sleep } from './rate-limiter.js';\nimport type { NbsApiResponse } from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://data.stats.gov.cn/dg/website/publicrelease/web/external';\nconst DEFAULT_USER_AGENT =\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36';\nconst DEFAULT_TIMEOUT_MS = 20_000;\nconst DEFAULT_MAX_RETRIES = 1;\nconst DEFAULT_RETRY_DELAY_MS = 5_000;\n\nexport interface CircuitBreakerOptions {\n /** Consecutive retryable failures before the circuit opens. Defaults to 5. */\n failureThreshold?: number;\n /** How long the circuit stays open before a half-open trial. Defaults to 30000 ms. */\n cooldownMs?: number;\n}\n\nexport interface NbsClientOptions {\n baseUrl?: string;\n userAgent?: string;\n timeoutMs?: number;\n minIntervalMs?: number;\n jitterMs?: number;\n maxRetries?: number;\n retryDelayMs?: number;\n cache?: TtlCache;\n limiter?: RateLimiter;\n fetchImpl?: typeof fetch;\n /**\n * Optional undici dispatcher, e.g. `new ProxyAgent('http://127.0.0.1:7890')`.\n * Kept as `unknown` so the core package stays dependency-free.\n */\n dispatcher?: unknown;\n /** Set to false to disable the circuit breaker. */\n circuitBreaker?: CircuitBreakerOptions | false;\n /** Clock override for tests. Defaults to Date.now. */\n now?: () => number;\n logger?: (message: string, detail?: unknown) => void;\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST';\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n cacheKey?: string;\n cacheTtlMs?: number;\n noCache?: boolean;\n signal?: AbortSignal;\n timeoutMs?: number;\n headers?: Record<string, string>;\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n timedOut: () => boolean;\n cleanup: () => void;\n}\n\nfunction abortError(): DOMException {\n return new DOMException('The operation was aborted.', 'AbortError');\n}\n\nfunction createAbortBundle(parent: AbortSignal | undefined, timeoutMs: number): AbortBundle {\n const controller = new AbortController();\n let timedOut = false;\n\n const onParentAbort = () => controller.abort(abortError());\n if (parent) {\n if (parent.aborted) controller.abort(abortError());\n else parent.addEventListener('abort', onParentAbort, { once: true });\n }\n\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort(new DOMException('Request timed out.', 'TimeoutError'));\n }, timeoutMs);\n\n return {\n signal: controller.signal,\n timedOut: () => timedOut,\n cleanup: () => {\n clearTimeout(timer);\n parent?.removeEventListener('abort', onParentAbort);\n },\n };\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query: Record<string, string | number | undefined> | undefined,\n): string {\n const url = new URL(joinUrl(baseUrl, path));\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === '') continue;\n url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n\n/**\n * HTTP client for the NBS public-release API.\n *\n * - serialized rate limiting (default 2s between request starts)\n * - per-request timeout and whole-query abort signal\n * - one retry for retryable upstream errors\n * - TTL+LRU cache with in-flight de-duplication\n * - parses JSON even when the server sends `Content-Type: text/html`\n */\nexport class NbsClient {\n readonly baseUrl: string;\n readonly cache: TtlCache;\n private readonly userAgent: string;\n private readonly timeoutMs: number;\n private readonly jitterMs: number;\n private readonly maxRetries: number;\n private readonly retryDelayMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly dispatcher?: unknown;\n private readonly logger?: (message: string, detail?: unknown) => void;\n private readonly sleepImpl: (ms: number, signal?: AbortSignal) => Promise<void>;\n private readonly limiter: RateLimiter;\n private readonly circuitEnabled: boolean;\n private readonly circuitFailureThreshold: number;\n private readonly circuitCooldownMs: number;\n private readonly now: () => number;\n private consecutiveFailures = 0;\n private circuitOpenedAt: number | null = null;\n\n constructor(options: NbsClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.userAgent = options.userAgent ?? DEFAULT_USER_AGENT;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.jitterMs = options.jitterMs ?? 250;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n this.cache = options.cache ?? new TtlCache();\n this.fetchImpl = options.fetchImpl ?? fetch;\n this.dispatcher = options.dispatcher;\n this.logger = options.logger;\n this.sleepImpl = options.sleep ?? sleep;\n const circuit = options.circuitBreaker === false ? undefined : (options.circuitBreaker ?? {});\n this.circuitEnabled = circuit !== undefined;\n this.circuitFailureThreshold = Math.max(1, circuit?.failureThreshold ?? 5);\n this.circuitCooldownMs = Math.max(0, circuit?.cooldownMs ?? 30_000);\n this.now = options.now ?? Date.now;\n this.limiter =\n options.limiter ??\n new RateLimiter({\n minIntervalMs: options.minIntervalMs,\n jitterMs: options.jitterMs,\n sleep: options.sleep,\n });\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const cacheKey = options.cacheKey;\n const ttl = options.cacheTtlMs ?? 0;\n if (cacheKey && ttl > 0) {\n return this.cache.getOrLoad(cacheKey, ttl, () => this.requestWithRetry<T>(path, options), {\n noCache: options.noCache,\n });\n }\n return this.requestWithRetry<T>(path, options);\n }\n\n private async requestWithRetry<T>(path: string, options: RequestOptions): Promise<T> {\n this.assertCircuitClosed(path);\n let lastError: unknown;\n for (let attempt = 0; attempt <= this.maxRetries; attempt += 1) {\n try {\n const result = await this.limiter.run(\n () => this.requestOnce<T>(path, options),\n options.signal,\n );\n this.consecutiveFailures = 0;\n return result;\n } catch (error) {\n lastError = error;\n const retryable = error instanceof NbsError && error.retryable;\n if (!retryable || attempt >= this.maxRetries || options.signal?.aborted) {\n this.recordFailure(error);\n break;\n }\n const wait = this.retryDelayMs + Math.floor(Math.random() * this.jitterMs);\n this.logger?.('retrying request', { path, attempt: attempt + 1, wait });\n await this.sleepImpl(wait, options.signal);\n }\n }\n throw lastError;\n }\n\n private assertCircuitClosed(path: string): void {\n if (!this.circuitEnabled || this.circuitOpenedAt === null) return;\n const elapsed = this.now() - this.circuitOpenedAt;\n if (elapsed >= this.circuitCooldownMs) {\n // Half-open: allow one trial; a single failure opens the circuit again.\n this.circuitOpenedAt = null;\n this.consecutiveFailures = Math.max(0, this.circuitFailureThreshold - 1);\n return;\n }\n throw circuitOpenError(this.circuitCooldownMs - elapsed, this.consecutiveFailures, path);\n }\n\n private recordFailure(error: unknown): void {\n if (!this.circuitEnabled) return;\n if (!(error instanceof NbsError) || !error.retryable) return;\n this.consecutiveFailures += 1;\n if (this.consecutiveFailures >= this.circuitFailureThreshold && this.circuitOpenedAt === null) {\n this.circuitOpenedAt = this.now();\n this.logger?.('circuit opened', { failures: this.consecutiveFailures });\n }\n }\n\n private async requestOnce<T>(path: string, options: RequestOptions): Promise<T> {\n const url = buildUrl(this.baseUrl, path, options.query);\n const method = options.method ?? 'GET';\n const timeoutMs = options.timeoutMs ?? this.timeoutMs;\n const bundle = createAbortBundle(options.signal, timeoutMs);\n const headers: Record<string, string> = {\n Accept: 'application/json, text/plain, */*',\n Referer: 'https://data.stats.gov.cn/',\n 'User-Agent': this.userAgent,\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Client-Name': 'china-nbs',\n ...options.headers,\n };\n\n let body: string | undefined;\n if (options.body !== undefined) {\n body = JSON.stringify(options.body);\n headers['Content-Type'] = 'application/json;charset=UTF-8';\n }\n\n this.logger?.('request', { method, url, body });\n try {\n let response: Response;\n try {\n const init: RequestInit & { dispatcher?: unknown } = {\n method,\n headers,\n body,\n signal: bundle.signal,\n };\n if (this.dispatcher !== undefined) {\n (init as unknown as { dispatcher?: unknown }).dispatcher = this.dispatcher;\n }\n response = await this.fetchImpl(url, init);\n } catch (error) {\n if (bundle.timedOut()) throw timeoutError(timeoutMs);\n if (options.signal?.aborted) {\n throw new NbsError('ABORTED', '查询已取消', { retryable: false });\n }\n throw error;\n }\n\n const text = await response.text();\n if (response.status === 403) throw upstreamBlocked(response.status, text.slice(0, 300));\n if (response.status === 429) {\n throw new NbsError('UPSTREAM_RATE_LIMITED', '国家统计局接口返回 429', {\n retryable: true,\n hint: '请求过于频繁;请等待后重试。',\n details: { status: response.status },\n });\n }\n if (response.status >= 500) {\n throw upstreamError(response.status, `国家统计局接口返回 ${response.status}`, {\n bodySnippet: text.slice(0, 300),\n });\n }\n if (!response.ok) {\n throw new NbsError('UPSTREAM_ERROR', `国家统计局接口返回 ${response.status}`, {\n retryable: false,\n hint: '接口路径可能已变化;请查看 docs/contracts.md。',\n details: { status: response.status, bodySnippet: text.slice(0, 300) },\n });\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw parseError('接口返回的不是 JSON', {\n status: response.status,\n contentType: response.headers.get('content-type'),\n bodySnippet: text.slice(0, 300),\n });\n }\n\n if (!parsed || typeof parsed !== 'object') {\n throw parseError('接口返回结构不是对象', { bodySnippet: text.slice(0, 300) });\n }\n\n const envelope = parsed as Partial<NbsApiResponse<T>>;\n if (envelope.success === false) {\n throw upstreamError(response.status, envelope.message || '国家统计局接口返回失败', {\n state: envelope.state,\n });\n }\n if (envelope.state !== undefined && envelope.state !== 20000) {\n throw upstreamError(response.status, envelope.message || `接口状态码 ${envelope.state}`, {\n state: envelope.state,\n });\n }\n if (!('data' in envelope)) {\n throw parseError('接口返回缺少 data 字段', { bodySnippet: text.slice(0, 300) });\n }\n return envelope.data as T;\n } catch (error) {\n if (bundle.timedOut()) throw timeoutError(timeoutMs);\n throw error;\n } finally {\n bundle.cleanup();\n }\n }\n}\n","/** Common Chinese abbreviations used by qbot users and analysts. */\nexport const ALIASES: Record<string, string[]> = {\n gdp: ['国内生产总值', '地区生产总值', '经济总量'],\n cpi: ['居民消费价格指数', '消费价格指数'],\n ppi: ['工业生产者出厂价格指数', '生产者价格指数'],\n 社零: ['社会消费品零售总额', '零售总额'],\n 固投: ['固定资产投资', '固定资产投资额'],\n 人口: ['常住人口', '年末总人口', '总人口'],\n 失业率: ['城镇调查失业率', '调查失业率'],\n 收入: ['居民人均可支配收入', '可支配收入'],\n 居民收入: ['居民人均可支配收入', '全体居民人均可支配收入'],\n 工业增加值: ['规模以上工业增加值', '规上工业增加值'],\n 规上工业增加值: ['规模以上工业增加值', '工业增加值'],\n 财政收入: ['一般公共预算收入', '地方财政收入'],\n 一般公共预算收入: ['地方财政一般公共预算收入', '财政收入'],\n 粮食: ['粮食产量', '粮食总产量'],\n 粮食产量: ['粮食总产量'],\n 进出口: ['货物进出口总额', '进出口总额', '外贸总额'],\n 房地产: ['房地产开发投资', '房地产投资'],\n 建筑业: ['建筑业总产值', '建筑业产值'],\n 农业: ['农林牧渔业总产值', '农业总产值'],\n 能源: ['能源生产总量'],\n};\n\n/** Query words that carry no indicator-name signal. */\nconst STOP_WORDS = new Set([\n '中国',\n '全国',\n '国家',\n '统计',\n '统计局',\n '数据',\n '最新',\n '今年',\n '去年',\n '全年',\n '年度',\n '季度',\n '月度',\n '月份',\n '多少',\n '是多少',\n '查询',\n '查',\n '一下',\n '的',\n '了',\n '吗',\n '呢',\n '和',\n '与',\n '及',\n '请',\n '帮我',\n '看看',\n]);\n\n/** Normalize text for matching: lower-case, strip whitespace/punctuation and parentheses content. */\nexport function normalize(text: string): string {\n return text\n .toLowerCase()\n .replace(/[((][^))]*[))]/g, '')\n .replace(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]/g, '')\n .replace(/[年月日]/g, '')\n .trim();\n}\n\n/** Expand a user keyword with known aliases. The original query is always first. */\nexport function expandAliases(query: string): string[] {\n const normalized = normalize(query);\n const result = new Set<string>();\n if (normalized) result.add(normalized);\n\n for (const [key, values] of Object.entries(ALIASES)) {\n const normalizedKey = normalize(key);\n if (\n normalized === normalizedKey ||\n normalized.includes(normalizedKey) ||\n normalizedKey.includes(normalized)\n ) {\n for (const value of values) result.add(normalize(value));\n }\n }\n\n return [...result].filter(Boolean);\n}\n\n/** Split a query into meaningful tokens. */\nexport function queryTokens(query: string): string[] {\n const tokens = new Set<string>();\n for (const part of query.split(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]+/)) {\n const normalized = normalize(part);\n if (normalized.length >= 2 && !STOP_WORDS.has(normalized)) tokens.add(normalized);\n }\n const whole = normalize(query);\n if (whole.length >= 2 && !STOP_WORDS.has(whole)) tokens.add(whole);\n return [...tokens];\n}\n\n/** Remove province/region words from a keyword so \"广东 GDP\" resolves like \"GDP\". */\nexport function stripRegion(query: string, regionNames: string[]): string {\n let result = query;\n for (const name of regionNames) {\n const short = name.replace(/(省|市|自治区|特别行政区|壮族|回族|维吾尔|藏族|蒙古)/g, '');\n for (const candidate of [name, short]) {\n if (candidate.length >= 2) {\n result = result.replace(new RegExp(candidate, 'g'), ' ');\n }\n }\n }\n return result.replace(/\\s+/g, ' ').trim();\n}\n\nexport const MEASURE_TERMS = {\n total: ['总量', '总额', '多少', '产值', '增加值', '亿元', '元'],\n growth: ['增速', '增长', '同比', '环比', '涨幅', '下跌', '下降'],\n index: ['指数', '上年=100', '上年同月=100', '上年同期=100', '定基'],\n perCapita: ['人均', '每人'],\n contribution: ['贡献率', '拉动', '构成', '占比'],\n cumulative: ['累计', '年初至今'],\n current: ['当季', '当月', '单季'],\n constantPrice: ['不变价', '可比价'],\n currentPrice: ['现价', '当年价'],\n} as const;\n\nexport function hasAny(text: string, terms: readonly string[]): boolean {\n const normalized = normalize(text);\n return terms.some((term) => normalized.includes(normalize(term)));\n}\n","/**\n * Official NBS \"主要城市年度\" list (code=8).\n *\n * Source: /external/getDasByDaCatalogId?daCid=5772e42228f948149cf5d6a11d07bce1\n * Verified 2026-11-03. The API covers 36 cities:\n * - 4 municipalities (北京/天津/上海/重庆) are represented as provinces.\n * - 32 prefecture-level cities are listed here.\n *\n * Do not add arbitrary prefecture-level cities: the upstream dataset does not\n * publish city annual data for them.\n */\nexport const CITIES = [\n { text: '石家庄市', value: '130100000000', aliases: ['石家庄'], scope: 'city' },\n { text: '太原市', value: '140100000000', aliases: ['太原'], scope: 'city' },\n { text: '呼和浩特市', value: '150100000000', aliases: ['呼和浩特'], scope: 'city' },\n { text: '沈阳市', value: '210100000000', aliases: ['沈阳'], scope: 'city' },\n { text: '大连市', value: '210200000000', aliases: ['大连'], scope: 'city' },\n { text: '长春市', value: '220100000000', aliases: ['长春'], scope: 'city' },\n { text: '哈尔滨市', value: '230100000000', aliases: ['哈尔滨'], scope: 'city' },\n { text: '南京市', value: '320100000000', aliases: ['南京'], scope: 'city' },\n { text: '杭州市', value: '330100000000', aliases: ['杭州'], scope: 'city' },\n { text: '宁波市', value: '330200000000', aliases: ['宁波'], scope: 'city' },\n { text: '合肥市', value: '340100000000', aliases: ['合肥'], scope: 'city' },\n { text: '福州市', value: '350100000000', aliases: ['福州'], scope: 'city' },\n { text: '厦门市', value: '350200000000', aliases: ['厦门'], scope: 'city' },\n { text: '南昌市', value: '360100000000', aliases: ['南昌'], scope: 'city' },\n { text: '济南市', value: '370100000000', aliases: ['济南'], scope: 'city' },\n { text: '青岛市', value: '370200000000', aliases: ['青岛'], scope: 'city' },\n { text: '郑州市', value: '410100000000', aliases: ['郑州'], scope: 'city' },\n { text: '武汉市', value: '420100000000', aliases: ['武汉'], scope: 'city' },\n { text: '长沙市', value: '430100000000', aliases: ['长沙'], scope: 'city' },\n { text: '广州市', value: '440100000000', aliases: ['广州'], scope: 'city' },\n { text: '深圳市', value: '440300000000', aliases: ['深圳'], scope: 'city' },\n { text: '南宁市', value: '450100000000', aliases: ['南宁'], scope: 'city' },\n { text: '海口市', value: '460100000000', aliases: ['海口'], scope: 'city' },\n { text: '成都市', value: '510100000000', aliases: ['成都'], scope: 'city' },\n { text: '贵阳市', value: '520100000000', aliases: ['贵阳'], scope: 'city' },\n { text: '昆明市', value: '530100000000', aliases: ['昆明'], scope: 'city' },\n { text: '拉萨市', value: '540100000000', aliases: ['拉萨'], scope: 'city' },\n { text: '西安市', value: '610100000000', aliases: ['西安'], scope: 'city' },\n { text: '兰州市', value: '620100000000', aliases: ['兰州'], scope: 'city' },\n { text: '西宁市', value: '630100000000', aliases: ['西宁'], scope: 'city' },\n { text: '银川市', value: '640100000000', aliases: ['银川'], scope: 'city' },\n { text: '乌鲁木齐市', value: '650100000000', aliases: ['乌鲁木齐'], scope: 'city' },\n] as const;\n","import { normalize } from './aliases.js';\nimport { CITIES as GENERATED_CITIES } from './cities.js';\n\nexport interface RegionRecord {\n text: string;\n value: string;\n aliases: string[];\n national?: boolean;\n scope?: 'national' | 'province' | 'city';\n}\n\nexport const NATIONAL_REGION: RegionRecord = {\n text: '全国',\n value: '000000000000',\n aliases: ['全国', '中国', '国家', '全国合计'],\n national: true,\n scope: 'national',\n};\n\nexport const PROVINCES: RegionRecord[] = [\n { text: '北京市', value: '110000000000', aliases: ['北京'] },\n { text: '天津市', value: '120000000000', aliases: ['天津'] },\n { text: '河北省', value: '130000000000', aliases: ['河北'] },\n { text: '山西省', value: '140000000000', aliases: ['山西'] },\n { text: '内蒙古自治区', value: '150000000000', aliases: ['内蒙古', '内蒙'] },\n { text: '辽宁省', value: '210000000000', aliases: ['辽宁'] },\n { text: '吉林省', value: '220000000000', aliases: ['吉林'] },\n { text: '黑龙江省', value: '230000000000', aliases: ['黑龙江'] },\n { text: '上海市', value: '310000000000', aliases: ['上海'] },\n { text: '江苏省', value: '320000000000', aliases: ['江苏'] },\n { text: '浙江省', value: '330000000000', aliases: ['浙江'] },\n { text: '安徽省', value: '340000000000', aliases: ['安徽'] },\n { text: '福建省', value: '350000000000', aliases: ['福建'] },\n { text: '江西省', value: '360000000000', aliases: ['江西'] },\n { text: '山东省', value: '370000000000', aliases: ['山东'] },\n { text: '河南省', value: '410000000000', aliases: ['河南'] },\n { text: '湖北省', value: '420000000000', aliases: ['湖北'] },\n { text: '湖南省', value: '430000000000', aliases: ['湖南'] },\n { text: '广东省', value: '440000000000', aliases: ['广东'] },\n { text: '广西壮族自治区', value: '450000000000', aliases: ['广西'] },\n { text: '海南省', value: '460000000000', aliases: ['海南'] },\n { text: '重庆市', value: '500000000000', aliases: ['重庆'] },\n { text: '四川省', value: '510000000000', aliases: ['四川'] },\n { text: '贵州省', value: '520000000000', aliases: ['贵州'] },\n { text: '云南省', value: '530000000000', aliases: ['云南'] },\n { text: '西藏自治区', value: '540000000000', aliases: ['西藏'] },\n { text: '陕西省', value: '610000000000', aliases: ['陕西'] },\n { text: '甘肃省', value: '620000000000', aliases: ['甘肃'] },\n { text: '青海省', value: '630000000000', aliases: ['青海'] },\n { text: '宁夏回族自治区', value: '640000000000', aliases: ['宁夏'] },\n { text: '新疆维吾尔自治区', value: '650000000000', aliases: ['新疆'] },\n { text: '台湾省', value: '710000000000', aliases: ['台湾'] },\n { text: '香港特别行政区', value: '810000000000', aliases: ['香港'] },\n { text: '澳门特别行政区', value: '820000000000', aliases: ['澳门'] },\n];\n\n/**\n * Official NBS major-city list: 36 cities. Four municipalities are represented\n * as provinces, so 32 city records are listed here. Values use the 12-digit\n * `das` format, e.g. 广州 440100000000. The upstream city annual dataset does\n * not publish other prefecture-level cities.\n */\nexport const CITIES: RegionRecord[] = GENERATED_CITIES.map((city) => ({\n text: city.text,\n value: city.value,\n aliases: [...city.aliases],\n scope: 'city',\n}));\n\nexport const ALL_REGIONS: RegionRecord[] = [NATIONAL_REGION, ...PROVINCES, ...CITIES];\n\nexport function scopeOf(region: RegionRecord): 'national' | 'province' | 'city' {\n return region.scope ?? (region.national ? 'national' : 'province');\n}\n\nexport function regionNames(): string[] {\n return ALL_REGIONS.flatMap((region) => [region.text, ...region.aliases]);\n}\n\n/** Resolve a Chinese region name to the NBS `das` value. */\nexport function resolveRegion(input?: string): RegionRecord | undefined {\n if (!input?.trim()) return NATIONAL_REGION;\n const normalized = normalize(input);\n\n for (const region of ALL_REGIONS) {\n if (normalize(region.text) === normalized) return region;\n if (region.aliases.some((alias) => normalize(alias) === normalized)) return region;\n }\n\n // Allow \"广东省\" vs \"广东\" and \"中国广东省\" style inputs.\n const candidates = ALL_REGIONS.filter((region) => {\n const names = [region.text, ...region.aliases].map(normalize);\n return names.some((name) => normalized.includes(name) || name.includes(normalized));\n });\n\n if (candidates.length === 1) return candidates[0];\n return undefined;\n}\n\nexport function isNationalRegion(input?: string): boolean {\n return resolveRegion(input)?.national === true;\n}\n\n/** Infer a province or major city from free text such as \"广东 GDP\"; national words are ignored. */\nexport function inferRegionFromText(text?: string): RegionRecord | undefined {\n if (!text?.trim()) return undefined;\n const normalized = normalize(text);\n const matches = ALL_REGIONS.filter(\n (region) =>\n !region.national &&\n [region.text, ...region.aliases].some((name) => normalized.includes(normalize(name))),\n );\n const city = matches.find((region) => region.scope === 'city');\n if (city) return city;\n return matches.length === 1 ? matches[0] : undefined;\n}\n\nexport function regionSuggestions(input: string): string[] {\n const normalized = normalize(input);\n return ALL_REGIONS.filter((region) =>\n [region.text, ...region.aliases].some((name) => {\n const candidate = normalize(name);\n return candidate.includes(normalized) || normalized.includes(candidate);\n }),\n )\n .slice(0, 6)\n .map((region) => region.text);\n}\n","import { normalize, stripRegion } from './aliases.js';\nimport { regionNames } from './regions.js';\nimport type { Period, Shard } from './types.js';\n\nexport interface CuratedEntry {\n key: string;\n aliases: string[];\n name: string;\n displayName: string;\n unit?: string;\n frequency: Period;\n regionScope: 'national' | 'province' | 'city' | 'any';\n measure?: string;\n cid: string;\n indicId: string;\n note?: string;\n shards?: Shard[];\n}\n\n/**\n * Curated fast path for the most common indicators.\n *\n * These ids were verified against the live API on 2026-11-03. They are hints,\n * not a hard dependency: if a curated id stops working, the resolver falls back\n * to search/tree.\n */\nexport const CURATED: CuratedEntry[] = [\n {\n key: 'gdp-year-national',\n aliases: [\n 'GDP',\n 'GDP总量',\n 'GDP现价',\n '中国GDP',\n '国内生产总值',\n '中国经济',\n '经济总量',\n '生产总值',\n ],\n name: '国内生产总值',\n displayName: '国内生产总值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '现价总量',\n cid: 'f7fd25aaad184414875632cf2327da60',\n indicId: '7dc6a2ee6c614960b7059991e0cc4d96',\n },\n {\n key: 'gdp-quarter-cumulative',\n aliases: [\n 'GDP累计',\n 'GDP累计值',\n '国内生产总值',\n '国内生产总值累计',\n '国内生产总值累计值',\n '生产总值',\n 'GDP',\n ],\n name: '国内生产总值累计值',\n displayName: '国内生产总值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '28d936104e304aa191e338eb82b6dc09',\n indicId: '8c5fab362d124fa7b91af833b3bd7397',\n },\n {\n key: 'gdp-quarter-province',\n aliases: [\n 'GDP',\n 'GDP累计',\n 'GDP累计值',\n '国内生产总值',\n '地区生产总值',\n '地区生产总值累计',\n '地区生产总值累计值',\n '生产总值',\n '经济总量',\n ],\n name: '地区生产总值累计值',\n displayName: '地区生产总值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '44ecf9ea21884caea5451c35e9c08fff',\n indicId: 'dc168397231c49f391ee9e11966de389',\n },\n {\n key: 'gdp-quarter-current',\n aliases: ['GDP当季', 'GDP当季值', '国内生产总值当季', '国内生产总值当季值'],\n name: '国内生产总值当季值',\n displayName: '国内生产总值当季值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '28d936104e304aa191e338eb82b6dc09',\n indicId: 'd22612f09aeb4241bc557ef0ac61b3ba',\n },\n {\n key: 'cpi-month-national',\n aliases: [\n 'CPI',\n 'CPI同比',\n 'CPI当月',\n 'CPI月度',\n '居民消费价格指数',\n '居民消费价格指数同比',\n '居民消费价格指数当月',\n '消费价格指数',\n '物价',\n ],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年同月=100)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '上年同月=100',\n // The default shard is 2021-2025; shards cover the full monthly history.\n cid: '809d2522b0fe4be89142650341b19083',\n indicId: '4ae9047687934a6390984c21d6ddab96',\n shards: [\n {\n cid: '5c7452825c7c4dcba391db5ca7f335c5',\n indicId: '53180dfb9c14411ba4b762307c85920c',\n startYear: 2026,\n },\n {\n cid: '809d2522b0fe4be89142650341b19083',\n indicId: '4ae9047687934a6390984c21d6ddab96',\n startYear: 2021,\n endYear: 2025,\n },\n {\n cid: '9d4eec43537742a7ab5d63db97fa2f51',\n indicId: 'e5c318ffdbbc4d38898e52b52267eb25',\n startYear: 2016,\n endYear: 2020,\n },\n {\n cid: '954cfd7597e34b919ec71caf6aeead51',\n indicId: '4c1065dd4e984b25a21190c843551697',\n endYear: 2015,\n },\n ],\n },\n {\n key: 'cpi-month-province',\n aliases: [\n 'CPI',\n 'CPI同比',\n 'CPI当月',\n 'CPI月度',\n '居民消费价格指数',\n '居民消费价格指数同比',\n '居民消费价格指数当月',\n '消费价格指数',\n '物价',\n ],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年同月=100)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '上年同月=100',\n // Province shards use different cids and indicator ids from the national\n // series. Verified against Guangdong on 2026-11-03.\n cid: 'c7b31f465b2b4a40b9999090b03b5a37',\n indicId: 'a2713908ee9a4a86a6e1bf90a6c1df68',\n shards: [\n {\n cid: 'b5e122302ad745358ba7415bd4a22c2f',\n indicId: '02d75ee002764e2ea53f263e52109e8f',\n startYear: 2026,\n },\n {\n cid: 'c7b31f465b2b4a40b9999090b03b5a37',\n indicId: 'a2713908ee9a4a86a6e1bf90a6c1df68',\n startYear: 2021,\n endYear: 2025,\n },\n {\n cid: 'f6b9c87376ad4b24b170766f419dc076',\n indicId: '072104df94b749dc8d0aa744718ba09b',\n startYear: 2016,\n endYear: 2020,\n },\n {\n cid: 'd699037b6a894b9ea15d662b5422ce16',\n indicId: '1f9acbec2553450fb5b1804b583833c6',\n endYear: 2015,\n },\n ],\n },\n {\n key: 'cpi-year-national',\n aliases: ['CPI年度', '居民消费价格指数年度', 'CPI', '居民消费价格指数', '消费价格指数', '物价'],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年=100)',\n unit: '上年=100',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'e5f37eced5de4d4c815f7ac5f59fc6c2',\n indicId: '5e3053f110074dcdbcfa3c8428dd1367',\n },\n {\n key: 'ppi-year-national',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年=100)',\n unit: '上年=100',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'e5f37eced5de4d4c815f7ac5f59fc6c2',\n indicId: 'a867836c8fdc4e2dbf06be1dc87fafc6',\n },\n {\n key: 'population-year-national',\n aliases: ['人口', '总人口', '年末总人口', '中国人口'],\n name: '年末总人口',\n displayName: '年末总人口 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '6331ad868e8b4f55b8e9b6e765609ce1',\n indicId: '806083491dbe46a08995783945a30b9d',\n },\n {\n key: 'gdp-year-province',\n aliases: ['GDP', '国内生产总值', '地区生产总值', '生产总值', '经济总量'],\n name: '地区生产总值',\n displayName: '地区生产总值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '现价总量',\n cid: '6f8fbd415cbc40ffa7ecb7fd917f2598',\n indicId: 'aff57de5ee994283974705914fbed246',\n },\n {\n key: 'gdp-year-city',\n aliases: ['GDP', '国内生产总值', '地区生产总值', '生产总值', '经济总量'],\n name: '地区生产总值',\n displayName: '地区生产总值 (当年价格) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'city',\n measure: '当年价格',\n cid: '75a85abe58c749e0ad1d85be343e9056',\n indicId: '35613910b9ad47e19cf79ae041ccb7ed',\n },\n\n // --- National annual: common macro indicators ---\n {\n key: 'retail-year-national',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '消费零售总额'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: 'd5b51c4a56d646b3b3f00f2c9e31a217',\n indicId: '008350880eb14928acc53fe20b295415',\n },\n {\n key: 'fai-year-national',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资额',\n '固定资产投资总额',\n '固定资产投资 (不含农户)',\n ],\n name: '固定资产投资',\n displayName: '固定资产投资 (不含农户) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '607a7cd4b50e4553894472475d1f4273',\n indicId: 'c9bd95b9046e4278a73dfe09aedc4ca3',\n },\n {\n key: 'income-year-national',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全国居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd153132154a549a78363017ef74ca784',\n indicId: '305bba1e881e413b91f32a06a4be65fd',\n },\n {\n key: 'fiscal-revenue-year-national',\n aliases: ['财政收入', '一般公共预算收入', '国家财政收入', '公共预算收入', '财政预算收入'],\n name: '一般公共预算收入',\n displayName: '一般公共预算收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '9ab4eeaba2264792b296b6658b6472dc',\n indicId: '47768ef2d84343468356fcaf26fef62f',\n },\n {\n key: 'grain-year-national',\n aliases: ['粮食产量', '粮食总产量', '粮食'],\n name: '粮食产量',\n displayName: '粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年产量',\n cid: '70551119a5104e13a5a2bbb3f36410f9',\n indicId: 'cea4d9e54f72420883463207c5e7f564',\n },\n {\n key: 'trade-year-national',\n aliases: ['进出口', '进出口总额', '货物进出口总额', '外贸总额', '外贸进出口'],\n name: '进出口总额',\n displayName: '进出口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: 'e9f9299386b34a9f91ef13aa9aebd2be',\n },\n {\n key: 'registered-unemployment-year-national',\n aliases: ['城镇登记失业率', '登记失业率'],\n name: '城镇登记失业率',\n displayName: '城镇登记失业率 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n note: '年度城镇登记失业率数据截至 2021;月度失业率请查“城镇调查失业率”。',\n cid: '19839dbd8e82481b9524f031c6d816c5',\n indicId: '456ef2f3d75f472b930384237bc6100f',\n },\n\n // --- National quarterly ---\n {\n key: 'income-quarter-national',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全国居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: 'ec2d57ed282f456e8d025aff035b4fad',\n indicId: 'bb5699c5ad534b568cca7c946227225a',\n },\n\n // --- National monthly ---\n {\n key: 'ppi-month-national',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年同月=100)',\n unit: '上年同月=100',\n frequency: 'month',\n regionScope: 'national',\n measure: '上年同月=100',\n cid: '60e8b361f11c4a878c652a6487a25561',\n indicId: '150633e52b9a470a9a9fd1b296dd6c5b',\n },\n {\n key: 'retail-month-national',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '社会消费品零售总额当期值'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额当期值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '当期值',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: '1142a3a03e9045959e606a21822641ac',\n },\n {\n key: 'retail-cumulative-month-national',\n aliases: ['社零累计', '社零累计值', '社会消费品零售总额累计', '社会消费品零售总额累计值'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: '260a1794443b43dd93a59928b12f38af',\n },\n {\n key: 'retail-growth-month-national',\n aliases: [\n '社零同比',\n '社零增速',\n '社零增长',\n '社零同比增长',\n '社会消费品零售总额同比',\n '社会消费品零售总额增速',\n '社会消费品零售总额增长',\n '社会消费品零售总额同比增长',\n ],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: 'aaac57d54d2e465d91bc9f3ea1a8618e',\n },\n {\n key: 'fai-growth-month-national',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资增速',\n '固投增速',\n '固定资产投资增长',\n '固定资产投资额累计增长',\n ],\n name: '固定资产投资额',\n displayName: '固定资产投资额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '5129067b149d4ddfbec1ffc478d35bfb',\n indicId: '7e570cf8071c4734a7d78d9f0a70fbe1',\n },\n {\n key: 'industrial-growth-month-national',\n aliases: [\n '工业增加值',\n '规上工业增加值',\n '规模以上工业增加值',\n '工业增加值增速',\n '工业增加值同比',\n '规上工业增加值同比增长',\n '工业增长',\n ],\n name: '规上工业增加值',\n displayName: '规上工业增加值同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比增长',\n cid: '3f2e14f0542348ed9fe02476eca3450b',\n indicId: 'ef1b1765960d45a29b4d7c4ca91be916',\n },\n {\n key: 'industrial-cumulative-month-national',\n aliases: [\n '工业增加值累计',\n '规上工业增加值累计',\n '规模以上工业增加值累计',\n '工业增加值累计增速',\n ],\n name: '规上工业增加值',\n displayName: '规上工业增加值累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '3f2e14f0542348ed9fe02476eca3450b',\n indicId: '21e7072e9f384209aedb56e69a18216e',\n },\n {\n key: 'survey-unemployment-month-national',\n aliases: ['失业率', '城镇调查失业率', '调查失业率', '全国城镇调查失业率'],\n name: '全国城镇调查失业率',\n displayName: '全国城镇调查失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '3888eac6062945a79c8a27e5f13d4953',\n },\n {\n key: 'fiscal-revenue-month-national',\n aliases: ['财政收入', '国家财政收入', '财政预算收入', '国家财政预算收入', '国家财政收入累计值'],\n name: '国家财政收入',\n displayName: '国家财政收入累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: '0083b57bb6b44d4d964b87a89192344e',\n indicId: 'd615e8de42114feb9169f027e6c2dcc6',\n },\n\n // --- Province annual ---\n {\n key: 'retail-year-province',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '消费零售总额'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: '77cb81a53dd9438ab00f6b4f27196ad9',\n indicId: '3512aeee72d74be7b4008817a4dd2d03',\n },\n {\n key: 'fai-year-province',\n aliases: ['固投', '固定资产投资', '固定资产投资增速', '固投增速', '固定资产投资增长'],\n name: '固定资产投资 (不含农户)',\n displayName: '固定资产投资 (不含农户) 比上年增长 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'province',\n measure: '比上年增长',\n note: '分省年度仅发布固定资产投资增速,没有亿元总量。',\n cid: 'fa42ee3b82724a1c972490d7b628811e',\n indicId: 'a8b24c8058d14e069b7ef22600d7a9b5',\n },\n {\n key: 'income-year-province',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全体居民人均可支配收入',\n '可支配收入',\n ],\n name: '全体居民人均可支配收入',\n displayName: '全体居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: 'bda568266e4c445b867d25626e1f6b8a',\n },\n {\n key: 'fiscal-revenue-year-province',\n aliases: ['财政收入', '一般公共预算收入', '地方财政收入', '地方一般公共预算收入'],\n name: '地方财政一般公共预算收入',\n displayName: '地方财政一般公共预算收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'bcd3d7159957431b8f3f5b7d10bdeceb',\n indicId: 'c8dafa31105e4b93850f3820cdd4eae8',\n },\n {\n key: 'grain-year-province',\n aliases: ['粮食产量', '粮食总产量', '粮食'],\n name: '粮食产量',\n displayName: '粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年产量',\n cid: '2ecdbcf038f349f1bd6840e731efbfa2',\n indicId: 'd7d8730d61ff44998281d585e79b94af',\n },\n\n // --- Province quarterly ---\n {\n key: 'income-quarter-province',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全体居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '1065e991d0c84623bf0e0d012f36c0e3',\n indicId: '0f6eafa0055f46bfbe61c3e2eafeb218',\n },\n {\n key: 'retail-growth-quarter-province',\n aliases: [\n '社零',\n '社零增速',\n '社零增长',\n '社会消费品零售总额',\n '社会消费品零售总额增速',\n '社会消费品零售总额增长',\n ],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额累计增长 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计增长',\n note: '分省季度仅发布社会消费品零售总额累计增速。',\n cid: 'b61c26f8f1134aaebc82c31ff5323266',\n indicId: '790a424df4cd4c97beeb8f720e45ff71',\n },\n {\n key: 'construction-output-quarter-province',\n aliases: ['建筑业总产值', '建筑业产值', '建筑业总产值累计值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: 'f20917614b8948e2a558096dbea27614',\n indicId: 'ca4c8c8209604f06932744dbe47657a4',\n },\n {\n key: 'agriculture-output-quarter-province',\n aliases: ['农林牧渔业总产值', '农林牧渔总产值', '农业总产值'],\n name: '农林牧渔业总产值',\n displayName: '农林牧渔业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '0e74a6ba50ed4af5afb83cd1b8335577',\n indicId: '0f03dead8f3d40c2a6978edacdddd8e7',\n },\n\n // --- Province monthly ---\n {\n key: 'ppi-month-province',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年同月=100)',\n unit: '上年同月=100',\n frequency: 'month',\n regionScope: 'province',\n measure: '上年同月=100',\n cid: 'f4978fd800d945989894083a156d94ed',\n indicId: 'd91f353ef582487e916dee235383cf4f',\n },\n {\n key: 'industrial-growth-month-province',\n aliases: [\n '工业增加值',\n '规上工业增加值',\n '规模以上工业增加值',\n '工业增加值增速',\n '工业增加值同比',\n '工业增长',\n ],\n name: '工业增加值',\n displayName: '工业增加值同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '同比增长',\n cid: '9593fb551802499683f758e0f6f45bc7',\n indicId: '6e073cf3b36644e6bee881d312c95681',\n },\n {\n key: 'industrial-cumulative-month-province',\n aliases: [\n '工业增加值累计',\n '规上工业增加值累计',\n '规模以上工业增加值累计',\n '工业增加值累计增速',\n ],\n name: '工业增加值',\n displayName: '工业增加值累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: '9593fb551802499683f758e0f6f45bc7',\n indicId: 'e2da5a05def84138b9d33828951adc59',\n },\n {\n key: 'fai-growth-month-province',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资增速',\n '固投增速',\n '固定资产投资增长',\n '固定资产投资完成额累计增长',\n ],\n name: '固定资产投资完成额',\n displayName: '固定资产投资完成额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: 'e43af1a71b2d4a768569866795ed66e2',\n indicId: '31c20d4e16564c39a3e4d2cc0d2d83bb',\n },\n {\n key: 'real-estate-investment-month-province',\n aliases: [\n '房地产投资',\n '房地产开发投资',\n '房地产投资额',\n '房地产开发投资额',\n '房地产投资累计值',\n ],\n name: '房地产投资',\n displayName: '房地产投资累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: 'b2cdd4aabffc4508b6199209127a6fd8',\n indicId: '6aa7aaa742b7475b8e93af99e8bc528e',\n },\n\n // --- Additional national/province long-tail entries ---\n {\n key: 'fiscal-expenditure-year-national',\n aliases: ['一般公共预算支出', '公共预算支出', '财政支出', '国家财政支出'],\n name: '一般公共预算支出',\n displayName: '一般公共预算支出 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '9ab4eeaba2264792b296b6658b6472dc',\n indicId: 'bd7a970226ff40a8b030c6b9a912560b',\n },\n {\n key: 'summer-grain-year-national',\n aliases: ['夏收粮食产量', '夏粮产量', '夏粮'],\n name: '夏收粮食产量',\n displayName: '夏收粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '夏收产量',\n cid: '70551119a5104e13a5a2bbb3f36410f9',\n indicId: 'a63f12c294e54faa825848afe31b55c9',\n },\n {\n key: 'urban-income-year-national',\n aliases: ['城镇居民人均可支配收入', '城镇居民收入', '城镇人均可支配收入'],\n name: '城镇居民人均可支配收入',\n displayName: '城镇居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd310e3ead14b403d9d10d29391713783',\n indicId: 'c0908d6012a840dca82d2b362f7e2d69',\n },\n {\n key: 'industrial-profit-year-province',\n aliases: ['规模以上工业企业利润总额', '工业企业利润总额', '工业利润总额'],\n name: '规模以上工业企业利润总额',\n displayName: '规模以上工业企业利润总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: '61c228f6ebfe444fa662eea06d7187c5',\n },\n {\n key: 'tax-revenue-year-province',\n aliases: ['地方财政税收收入', '财政税收收入', '税收收入'],\n name: '地方财政税收收入',\n displayName: '地方财政税收收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'bcd3d7159957431b8f3f5b7d10bdeceb',\n indicId: '35afc4290fbe4bb8b37afa91c927edc3',\n },\n {\n key: 'urban-income-year-province',\n aliases: ['城镇居民人均可支配收入', '城镇居民收入', '城镇人均可支配收入'],\n name: '城镇居民人均可支配收入',\n displayName: '城镇居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: 'dd28563a8af84935bc8a010abf8b772c',\n },\n\n // --- Consumption, wages, energy, trade, real estate, employment ---\n {\n key: 'consumption-year-national',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '47e188eb48a840e4b7ee00c1d30a4792',\n indicId: 'aae3499756ee4863a472d1bbf191b471',\n },\n {\n key: 'engel-year-national',\n aliases: ['恩格尔系数', '居民恩格尔系数'],\n name: '居民恩格尔系数',\n displayName: '居民恩格尔系数 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '7cdf71e826d64ff6a64b053009a5bccd',\n indicId: '24659814dbe04a3f84f54e8dae75adba',\n },\n {\n key: 'wage-year-national',\n aliases: ['平均工资', '城镇非私营单位平均工资', '城镇非私营单位就业人员平均工资'],\n name: '城镇非私营单位就业人员平均工资',\n displayName: '城镇非私营单位就业人员平均工资 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '0aed53df47b14e7393a98718a320e238',\n indicId: '759f53b2b5204c3d9dce7683db504576',\n },\n {\n key: 'energy-production-year-national',\n aliases: ['能源生产总量', '一次能源生产总量'],\n name: '一次能源生产总量',\n displayName: '一次能源生产总量 (万吨标准煤)',\n unit: '万吨标准煤',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '48615069f0334639963a48dfbbfc594e',\n indicId: 'bd422ac661504ff2a88b64d02b547d27',\n },\n {\n key: 'export-year-national',\n aliases: ['出口', '出口总额', '出口额'],\n name: '出口总额',\n displayName: '出口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: '3529a0abf1324839942a3ec3a7059bcc',\n },\n {\n key: 'import-year-national',\n aliases: ['进口', '进口总额', '进口额'],\n name: '进口总额',\n displayName: '进口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: '752ae251a0494227b593779a098417c7',\n },\n {\n key: 'real-estate-investment-year-national',\n aliases: ['房地产开发投资', '房地产投资', '房地产开发投资额'],\n name: '房地产开发投资',\n displayName: '房地产开发投资 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '本年完成投资',\n cid: '84fe2e0ffd2f4e99b13ceae5c065e2ac',\n indicId: '49523a91c3234c4bbaaaf6b2be40340d',\n },\n {\n key: 'construction-output-year-national',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '59c698b87ea7473d951de635f20e2078',\n indicId: '2f7d2b5a033048e6bc8712bcc119e126',\n },\n {\n key: 'consumption-quarter-national',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出累计值 (元)',\n unit: '元/人',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '71e8c15775d242b8b212edb4cab6e808',\n indicId: '8e8fb36d72e544658caebd7419900d2a',\n },\n {\n key: 'capacity-utilization-quarter-national',\n aliases: ['工业产能利用率', '产能利用率'],\n name: '工业产能利用率',\n displayName: '工业产能利用率当季值 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '56a7def4ab0749d8800eab2415f90b54',\n indicId: '57ae79552303418087eee8f4f35b4368',\n },\n {\n key: 'construction-output-quarter-national',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '2bd9f3b20250419e9c2247948c77386e',\n indicId: '5991f9ec8ebf47d8ac1098efab14e946',\n },\n {\n key: 'online-retail-month-national',\n aliases: ['网上零售额', '网上零售'],\n name: '网上零售额',\n displayName: '网上零售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'fb09cbc680fe4d348c9d05f535ebf77c',\n indicId: '069baced432b4e1787ad1da50c11e9fc',\n },\n {\n key: 'service-retail-month-national',\n aliases: ['服务零售额', '服务零售'],\n name: '服务零售额',\n displayName: '服务零售额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '28fc474f03e746008ff9fbc2bbb4bf3b',\n indicId: 'b4689b643a27430b9673a192210138d0',\n },\n {\n key: 'big-city-unemployment-month-national',\n aliases: ['31个大城市城镇调查失业率', '大城市失业率', '31城失业率'],\n name: '31个大城市城镇调查失业率',\n displayName: '31个大城市城镇调查失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '1d550f3ec77a463bb607d4a3427e1465',\n },\n {\n key: 'youth-unemployment-month-national',\n aliases: ['16-24岁失业率', '16—24岁失业率', '青年失业率', '16-24岁劳动力失业率'],\n name: '全国城镇16—24岁劳动力失业率',\n displayName: '全国城镇16—24岁劳动力失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: 'bd6da1abb26046c2acb38aa701d90e86',\n },\n {\n key: 'private-fai-growth-month-national',\n aliases: ['民间固定资产投资', '民间投资增速', '民间固投', '民间固定资产投资累计增长'],\n name: '民间固定资产投资',\n displayName: '民间固定资产投资累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '5129067b149d4ddfbec1ffc478d35bfb',\n indicId: '287f55a9520d43a9b3e045860a49fedd',\n },\n {\n key: 'consumption-year-province',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '全体居民人均消费支出',\n displayName: '全体居民人均消费支出 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '7dbebcca62794c4da2b9ef9813d14564',\n indicId: '462f6c41041b4721b78e50397b358af8',\n },\n {\n key: 'fiscal-expenditure-year-province',\n aliases: ['财政支出', '一般公共预算支出', '地方财政支出', '地方一般公共预算支出'],\n name: '地方财政一般公共预算支出',\n displayName: '地方财政一般公共预算支出 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'f38245648b504602b851e27257f09d9b',\n indicId: '1bc776bc77b44671a8f332fa80587fe2',\n },\n {\n key: 'industrial-revenue-year-province',\n aliases: ['规模以上工业企业营业收入', '工业企业营业收入', '工业营业收入', '工业营收'],\n name: '规模以上工业企业营业收入',\n displayName: '规模以上工业企业营业收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: 'bc4fd1bdaca2457e8c22a370cbfef233',\n },\n {\n key: 'real-estate-investment-year-province',\n aliases: ['房地产开发投资', '房地产投资', '房地产开发投资额'],\n name: '房地产开发投资',\n displayName: '房地产开发投资 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '本年完成投资',\n cid: 'd58795588d10411b883fa09af92f3cad',\n indicId: '6b3195bc0a94444f98418d320ee284e3',\n },\n {\n key: 'trade-year-province',\n aliases: ['进出口', '进出口总额', '货物进出口总额', '外贸总额'],\n name: '经营单位所在地进出口总额',\n displayName: '经营单位所在地进出口总额 (千美元)',\n unit: '千美元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n note: '分省年度按经营单位所在地统计,单位为千美元。',\n cid: '9c61eb74ddd346d88749f9881837dbc7',\n indicId: '6219327f109140a691f71ea9d58c4ae5',\n },\n {\n key: 'consumption-quarter-province',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出累计值 (元)',\n unit: '元/人',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: 'cd66144ad151453f932783281aed87a7',\n indicId: '00836f986d1749f5893e40ba8d52618e',\n },\n {\n key: 'home-sales-area-month-province',\n aliases: ['商品房销售面积', '新建商品房销售面积', '商品房销售面积累计值'],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积累计值 (万平方米)',\n unit: '万平方米',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: '91e95a0d0f8244c9a83578cf9862888e',\n indicId: 'b2a4e83212f8401f841df8e4257fe281',\n },\n {\n key: 'home-sales-amount-month-province',\n aliases: ['商品房销售额', '新建商品房销售额', '商品房销售额累计值'],\n name: '新建商品房销售额',\n displayName: '新建商品房销售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: 'c4731a05f2114131a24a4969f1410bea',\n indicId: '155aab193c2e4836853f197e3a4f8ed4',\n },\n\n // --- Energy, housing sales, construction, rural income ---\n {\n key: 'energy-consumption-year-national',\n aliases: ['能源消费总量', '能源消费'],\n name: '能源消费总量',\n displayName: '能源消费总量 (万吨标准煤)',\n unit: '万吨标准煤',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ea81a442991544f984906c2c264d13ca',\n indicId: 'b7efa87515d54d2fa20f9349fbdf9b26',\n },\n {\n key: 'electricity-year-national',\n aliases: ['发电量', '电力产量'],\n name: '发电量',\n displayName: '发电量 (亿千瓦时)',\n unit: '亿千瓦时',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: '6e325390b4784350b753d695c48717a3',\n },\n {\n key: 'coal-output-year-national',\n aliases: ['原煤产量', '煤炭产量'],\n name: '原煤产量',\n displayName: '原煤产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: 'b6ba346ee94f401eb1e9bf4e4de979ed',\n },\n {\n key: 'oil-output-year-national',\n aliases: ['原油产量', '石油产量'],\n name: '原油产量',\n displayName: '原油产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: '5051592ecc8f447daf063f00d582ac41',\n },\n {\n key: 'home-sales-area-year-national',\n aliases: ['商品房销售面积', '新建商品房销售面积'],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积 (万平方米)',\n unit: '万平方米',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '5e8a1ec6366a4fb4a3a1614aac306c0a',\n indicId: '6bb57c9d2b564dc2ac0313e2aaf7cd0c',\n },\n {\n key: 'home-sales-amount-year-national',\n aliases: ['商品房销售额', '新建商品房销售额'],\n name: '新建商品房销售额',\n displayName: '新建商品房销售额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '807d81347d634d2b94cbf6a094eac3ff',\n indicId: '460123eb70df4b0eaaca2fd4c10117fd',\n },\n {\n key: 'construction-output-year-province',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: 'fcdaadb9e74848329e0372a2414d29c2',\n indicId: 'f233c23a85d442aa99e189f66601e873',\n },\n {\n key: 'rural-income-year-province',\n aliases: ['农村居民人均可支配收入', '农村居民收入', '农村人均可支配收入'],\n name: '农村居民人均可支配收入',\n displayName: '农村居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: '5b21e9a08bf74a5c8ba184eb9e9cc195',\n },\n {\n key: 'rural-income-quarter-province',\n aliases: ['农村居民人均可支配收入', '农村居民收入', '农村人均可支配收入'],\n name: '农村居民人均可支配收入',\n displayName: '农村居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '1065e991d0c84623bf0e0d012f36c0e3',\n indicId: 'c6a1a68990ea4d6dafad3dbcf530d5cb',\n },\n {\n key: 'real-estate-investment-month-national',\n aliases: ['房地产投资', '房地产开发投资', '房地产投资累计值'],\n name: '房地产投资',\n displayName: '房地产投资累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: '9206137ccf03460daa74b7799e0f3c31',\n indicId: 'bfb626c0dfa04afab67937c452ca9f50',\n },\n {\n key: 'online-goods-retail-month-national',\n aliases: ['实物商品网上零售额', '实物网上零售额', '实物商品网上零售'],\n name: '实物商品网上零售额',\n displayName: '实物商品网上零售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'fb09cbc680fe4d348c9d05f535ebf77c',\n indicId: '05fbe85e09c842098509c6b29481ab0c',\n },\n {\n key: 'industrial-operating-profit-year-province',\n aliases: ['规模以上工业企业营业利润', '工业企业营业利润', '工业营业利润'],\n name: '规模以上工业企业营业利润',\n displayName: '规模以上工业企业营业利润 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: 'e18ca78062dd4f7a8dc7ab174d6ffdc0',\n },\n {\n key: 'export-year-province',\n aliases: ['经营单位所在地出口总额', '出口总额', '出口额', '出口'],\n name: '经营单位所在地出口总额',\n displayName: '经营单位所在地出口总额 (千美元)',\n unit: '千美元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n note: '分省年度按经营单位所在地统计,单位为千美元。',\n cid: '9c61eb74ddd346d88749f9881837dbc7',\n indicId: '6a455b4128994239ab90e5cac2e7aa25',\n },\n {\n key: 'home-sales-area-growth-month-province',\n aliases: [\n '商品房销售面积增速',\n '商品房销售面积增长',\n '新建商品房销售面积累计增长',\n '商品房销售面积累计增长',\n ],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: '91e95a0d0f8244c9a83578cf9862888e',\n indicId: 'f5e66c49668a4536b3f2680c9cef19a4',\n },\n\n // --- Population structure ---\n {\n key: 'birth-rate-year-national',\n aliases: ['人口出生率', '出生率'],\n name: '人口出生率',\n displayName: '人口出生率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: '3d4006d356d94bdd9d75700b9788e230',\n },\n {\n key: 'death-rate-year-national',\n aliases: ['人口死亡率', '死亡率'],\n name: '人口死亡率',\n displayName: '人口死亡率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: 'ee4b8be1ad68498e81d9ecddf4d4f2de',\n },\n {\n key: 'natural-growth-rate-year-national',\n aliases: ['人口自然增长率', '自然增长率'],\n name: '人口自然增长率',\n displayName: '人口自然增长率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: '3969129b26a846968a7dddff5f326f55',\n },\n {\n key: 'dependency-ratio-year-national',\n aliases: ['总抚养比', '抚养比'],\n name: '总抚养比',\n displayName: '总抚养比 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'c7743eefda9d44b5ad2ab0b4f29ba969',\n indicId: '0d2db39cd5424f5fbca859052413f4ad',\n },\n\n // --- Industrial product output ---\n {\n key: 'cement-output-year-national',\n aliases: ['水泥产量', '水泥'],\n name: '水泥产量',\n displayName: '水泥产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '2cf2aee9e7b34db6ac1afaac0e940104',\n },\n {\n key: 'crude-steel-output-year-national',\n aliases: ['粗钢产量', '粗钢'],\n name: '粗钢产量',\n displayName: '粗钢产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '9a8ee14c26664afa83a25fe39ddcd1c7',\n },\n {\n key: 'steel-output-year-national',\n aliases: ['钢材产量', '钢材'],\n name: '钢材产量',\n displayName: '钢材产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: 'f9276eef033145e0851f878fef58149f',\n },\n {\n key: 'auto-output-year-national',\n aliases: ['汽车产量', '汽车'],\n name: '汽车产量',\n displayName: '汽车产量 (万辆)',\n unit: '万辆',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '6afdb451350c464686b9a778ee0beab5',\n },\n {\n key: 'mobile-phone-output-year-national',\n aliases: ['移动通信手持机产量', '手机产量', '手机'],\n name: '移动通信手持机产量',\n displayName: '移动通信手持机产量 (万台)',\n unit: '万台',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '9733ca87a449439cad4006cb9a92190a',\n },\n {\n key: 'integrated-circuit-output-year-national',\n aliases: ['集成电路产量', '集成电路', '芯片产量'],\n name: '集成电路产量',\n displayName: '集成电路产量 (万块)',\n unit: '万块',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '1aa41510bc174472a6b375abb71f6a4b',\n },\n\n // --- Fallback fixes ---\n {\n key: 'state-wage-year-national',\n aliases: ['国有单位就业人员平均工资', '国有单位平均工资', '国有单位工资'],\n name: '国有单位就业人员平均工资',\n displayName: '国有单位就业人员平均工资 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n note: '国有单位平均工资数据截至 2023。',\n cid: '0aed53df47b14e7393a98718a320e238',\n indicId: '5b4528184c1a44738f7c91811a0ac692',\n },\n {\n key: 'coal-share-energy-year-national',\n aliases: ['原煤占一次能源生产总量比重', '原煤占能源生产总量比重', '煤炭占能源生产总量比重'],\n name: '原煤占一次能源生产总量的比重',\n displayName: '原煤占一次能源生产总量的比重 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '48615069f0334639963a48dfbbfc594e',\n indicId: '4f3e534970aa479dac6651945ed4ba78',\n },\n {\n key: 'age-25-29-unemployment-month-national',\n aliases: [\n '25-29岁失业率',\n '25—29岁失业率',\n '25-29岁劳动力失业率',\n '25—29岁劳动力失业率',\n '城镇25-29岁劳动力失业率',\n '全国城镇25-29岁劳动力失业率',\n ],\n name: '全国城镇25—29岁劳动力失业率',\n displayName: '全国城镇25—29岁劳动力失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '7bc1bd5daeac48ae8bb413c34ece1d08',\n },\n {\n key: 'manufacturing-capacity-quarter-national',\n aliases: [\n '制造业产能利用率',\n '制造业工业产能利用率',\n '制造业产能利用率当季值',\n '工业产能利用率制造业当季值',\n '工业产能利用率制造业',\n ],\n name: '工业产能利用率制造业当季值',\n displayName: '工业产能利用率制造业当季值 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '56a7def4ab0749d8800eab2415f90b54',\n indicId: 'b26d4afe7263486a8573e2d4f55b2f65',\n },\n\n // --- Transport and postal ---\n {\n key: 'passenger-transport-year-national',\n aliases: ['旅客运输量', '客运量'],\n name: '旅客运输量',\n displayName: '旅客运输量 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '283f7c7b317340fe8e5443da77d3dd29',\n indicId: 'cd96dcaddd0c42148276ba61f40651d9',\n },\n {\n key: 'passenger-turnover-year-national',\n aliases: ['旅客周转量'],\n name: '旅客周转量',\n displayName: '旅客周转量 (亿人公里)',\n unit: '亿人公里',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd0b6af034d1c4426be78de4912212744',\n indicId: '866f18ee57404cf6a5521bc9040e5dfc',\n },\n {\n key: 'freight-transport-year-national',\n aliases: ['货物运输量', '货运量'],\n name: '货物运输量',\n displayName: '货物运输量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '1afa59232de34e008c2a6e769cd253ed',\n indicId: 'a4c3461ed6094d91819b35a297f60405',\n },\n {\n key: 'freight-turnover-year-national',\n aliases: ['货物周转量'],\n name: '货物周转量',\n displayName: '货物周转量 (亿吨公里)',\n unit: '亿吨公里',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '9de6c6d7119647a9b591b4e464b95157',\n indicId: 'cf1dd80a560546b9b8938a37caee5eab',\n },\n {\n key: 'express-volume-year-national',\n aliases: ['快递量', '快递业务量'],\n name: '快递量',\n displayName: '快递量 (万件)',\n unit: '万件',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a98d2811e2a94e388119c772d19980c8',\n indicId: '614c9517ff954e909beeaff7fb324dbd',\n },\n {\n key: 'express-revenue-year-national',\n aliases: ['快递业务收入', '快递收入'],\n name: '快递业务收入',\n displayName: '快递业务收入 (万元)',\n unit: '万元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a98d2811e2a94e388119c772d19980c8',\n indicId: '7209f8787c974235bf23a09f786447e5',\n },\n {\n key: 'mobile-phone-users-year-national',\n aliases: ['移动电话用户', '移动电话年末用户', '手机用户'],\n name: '移动电话年末用户',\n displayName: '移动电话年末用户 (万户)',\n unit: '万户',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'aeb6a15df8174f8eaf8ed66fdda629e9',\n indicId: '6a6b090595d048f09f34abb984182214',\n },\n {\n key: 'broadband-users-year-national',\n aliases: ['互联网宽带接入用户', '宽带接入用户', '宽带用户'],\n name: '互联网宽带接入用户',\n displayName: '互联网宽带接入用户 (万户)',\n unit: '万户',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '52b81ec946b74166bfb09b2a70105f78',\n indicId: '4635f9f75639448190338f83e2663371',\n },\n\n // --- Finance ---\n {\n key: 'm2-year-national',\n aliases: ['M2', '货币和准货币M2供应量', '货币供应量M2', '广义货币供应量'],\n name: '货币和准货币(M2)供应量',\n displayName: '货币和准货币 (M2) 供应量 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: 'b4654f05bda2472a9acf7488086971c3',\n indicId: 'f7fe1af1ef3c4046a62fefd5f0c2be6b',\n },\n {\n key: 'deposits-year-national',\n aliases: [\n '各项存款',\n '各项存款余额',\n '金融机构各项存款',\n '金融机构各项存款余额',\n '金融机构资金来源各项存款',\n '存款余额',\n ],\n name: '金融机构资金来源各项存款',\n displayName: '金融机构资金来源各项存款 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: '72d27fd93b834ff28813907c8a80a04b',\n indicId: 'ad0217dc4666437d9148e632c88cbdcd',\n },\n {\n key: 'loans-year-national',\n aliases: [\n '各项贷款',\n '各项贷款余额',\n '金融机构各项贷款',\n '金融机构各项贷款余额',\n '金融机构资金运用各项贷款',\n '贷款余额',\n ],\n name: '金融机构资金运用各项贷款',\n displayName: '金融机构资金运用各项贷款 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: 'da757ba930de4ad78b096c0fe497ba76',\n indicId: '1c1c3a67f80e41cd9ee66ca7e738d735',\n },\n\n // --- Education ---\n {\n key: 'higher-ed-institutions-year-national',\n aliases: ['普通高等学校数', '普通、职业高等学校数', '高等学校数', '高校数'],\n name: '普通、职业高等学校数',\n displayName: '普通、职业高等学校数 (所)',\n unit: '所',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '091cdd1e6a0648be89e944a61a6aea9d',\n indicId: 'ef144502d27a4b7e8bb55c776ca02f50',\n },\n {\n key: 'higher-ed-students-year-national',\n aliases: ['普通本专科在校学生数', '普通、职业本专科在校学生数', '本专科在校生', '在校大学生'],\n name: '普通、职业本专科在校学生数',\n displayName: '普通、职业本专科在校学生数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '66fa7dc25039460d94af99d177bbc512',\n indicId: '4dc890c99a2b4e0f849dd73733295901',\n },\n {\n key: 'higher-ed-teachers-year-national',\n aliases: [\n '普通高等学校专任教师数',\n '普通、职业高等学校专任教师数',\n '高校专任教师数',\n '高校教师数',\n ],\n name: '普通、职业高等学校专任教师数',\n displayName: '普通、职业高等学校专任教师数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '89988f8a4da848f98e7b402e1e781211',\n indicId: '948d9aeef0df4b598732dde268d173fc',\n },\n\n // --- Health ---\n {\n key: 'health-institutions-year-national',\n aliases: ['医疗卫生机构数', '医疗机构数'],\n name: '医疗卫生机构数',\n displayName: '医疗卫生机构数 (个)',\n unit: '个',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'e4a03f31f25c4d20823b6c2aec862df2',\n indicId: 'ecc1c2212e8a4beaa36f503cd602ceea',\n },\n {\n key: 'health-technicians-year-national',\n aliases: ['卫生技术人员数', '卫生技术人员'],\n name: '卫生技术人员数',\n displayName: '卫生技术人员数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '27fd1733fe6f4503aae77fb53d42b871',\n indicId: 'dd2bc0e2596748acb777d625ef38928d',\n },\n {\n key: 'health-beds-year-national',\n aliases: ['医疗卫生机构床位数', '医疗卫生床位数', '医院床位数'],\n name: '医疗卫生机构床位数',\n displayName: '医疗卫生机构床位数 (万张)',\n unit: '万张',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '5eeed2da1ee748a1a035d3a6608ece67',\n indicId: 'bb0d2ff0b33441bbbf023b15803db641',\n },\n {\n key: 'health-expenditure-year-national',\n aliases: ['卫生总费用', '卫生总费用亿元'],\n name: '卫生总费用',\n displayName: '卫生总费用 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'fc2cd81f56644364a359c716b9599748',\n indicId: '1c60e1bb5c834beabf87a595c56b64f5',\n },\n\n // --- Environment ---\n {\n key: 'water-supply-year-national',\n aliases: ['供水总量', '供水总量亿立方米'],\n name: '供水总量',\n displayName: '供水总量 (亿立方米)',\n unit: '亿立方米',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a425cb901c8d4979b87cabbd8a71af48',\n indicId: '002a6e2e7e6345a3be6e4bea79f7ed90',\n },\n {\n key: 'garbage-collected-year-national',\n aliases: ['生活垃圾清运量', '垃圾清运量'],\n name: '生活垃圾清运量',\n displayName: '生活垃圾清运量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ed0b58d0d91f48e388f71550773e746d',\n indicId: '36f00374b7074c32b63e04f1e8922401',\n },\n {\n key: 'garbage-treatment-rate-year-national',\n aliases: ['生活垃圾无害化处理率', '垃圾无害化处理率'],\n name: '生活垃圾无害化处理率',\n displayName: '生活垃圾无害化处理率 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ed0b58d0d91f48e388f71550773e746d',\n indicId: '708b2b06668348baae3aed637e2f2747',\n },\n {\n key: 'afforestation-year-national',\n aliases: ['造林总面积', '造林面积'],\n name: '造林总面积',\n displayName: '造林总面积 (千公顷)',\n unit: '千公顷',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '779819b5052d410ca8ed01ff2a8da775',\n indicId: 'dd698d430b56494093e8317c05cb9076',\n },\n\n // --- Industry PPI ---\n {\n key: 'ppi-coal-year-national',\n aliases: ['煤炭开采和洗选业PPI', '煤炭开采和洗选业工业生产者出厂价格指数', '煤炭PPI'],\n name: '煤炭开采和洗选业工业生产者出厂价格指数',\n displayName: '煤炭开采和洗选业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '345d4dcbd90f4dc4b345c7ce22ba88b1',\n },\n {\n key: 'ppi-oil-gas-year-national',\n aliases: ['石油和天然气开采业PPI', '石油和天然气开采业工业生产者出厂价格指数', '油气开采PPI'],\n name: '石油和天然气开采业工业生产者出厂价格指数',\n displayName: '石油和天然气开采业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: 'e65c3e9357e248ffbc6abfb2623cff54',\n },\n {\n key: 'ppi-ferrous-mining-year-national',\n aliases: ['黑色金属矿采选业PPI', '黑色金属矿采选业工业生产者出厂价格指数', '铁矿石PPI'],\n name: '黑色金属矿采选业工业生产者出厂价格指数',\n displayName: '黑色金属矿采选业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '5fe9e5a93d944b178dc73fe5e0a305e2',\n },\n {\n key: 'ppi-auto-year-national',\n aliases: ['汽车制造业PPI', '汽车制造业工业生产者出厂价格指数', '汽车PPI'],\n name: '汽车制造业工业生产者出厂价格指数',\n displayName: '汽车制造业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: 'ef4e87fb412d4bcda71916f67b49e9b4',\n },\n {\n key: 'ppi-computer-electronics-year-national',\n aliases: [\n '计算机通信和其他电子设备制造业PPI',\n '计算机、通信和其他电子设备制造业PPI',\n '计算机通信和其他电子设备制造业工业生产者出厂价格指数',\n '电子设备制造业PPI',\n ],\n name: '计算机、通信和其他电子设备制造业工业生产者出厂价格指数',\n displayName: '计算机、通信和其他电子设备制造业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '5100ad712cd84b48ab1500d18e83fc73',\n },\n\n // --- Monthly money supply ---\n {\n key: 'm2-month-national',\n aliases: ['M2', 'M2余额', 'M2期末值', '货币和准货币M2供应量期末值'],\n name: '货币和准货币(M2)供应量期末值',\n displayName: '货币和准货币 (M2) 供应量期末值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '期末值',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'f3c0ae453a54424489af41de315ec592',\n },\n {\n key: 'm2-growth-month-national',\n aliases: ['M2同比', 'M2增速', 'M2同比增长', '货币和准货币M2供应量同比增长'],\n name: '货币和准货币(M2)供应量同比增长',\n displayName: '货币和准货币 (M2) 供应量同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比增长',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'e03f2232631f41cd9d754a7d7feb4a81',\n },\n {\n key: 'm1-month-national',\n aliases: ['M1', 'M1余额', 'M1期末值', '货币M1供应量期末值'],\n name: '货币(M1)供应量期末值',\n displayName: '货币 (M1) 供应量期末值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '期末值',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'add08d4a1ca049158166f126e169edde',\n },\n];\n\nexport function cleanQuery(query: string): string {\n let cleaned = stripRegion(query, regionNames());\n cleaned = cleaned\n .replace(/\\d{4}\\s*Q[1-4]/gi, ' ')\n .replace(/\\d{4}\\s*[-/]\\s*\\d{1,2}/g, ' ')\n .replace(/\\d{1,2}\\s*[-–—至]\\s*\\d{1,2}\\s*月/g, ' ')\n .replace(/\\d{4}\\s*年?/g, ' ')\n .replace(/\\d{1,2}\\s*月/g, ' ')\n .replace(/\\d{1,2}\\s*日/g, ' ')\n .replace(/第?[一二三四1234]\\s*季度/g, ' ')\n .replace(/(上半年|下半年|全年|年度)/g, ' ')\n .replace(/(中国|全国|最新|今年|去年|数据|统计|是多少|多少|查询|一下)/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n return normalize(cleaned);\n}\n\nexport function findCurated(\n query: string,\n period: Period,\n regionScope: 'national' | 'province' | 'city',\n): CuratedEntry | undefined {\n const normalized = cleanQuery(query);\n if (!normalized) return undefined;\n\n let best: { entry: CuratedEntry; score: number } | undefined;\n\n for (const entry of CURATED) {\n if (entry.frequency !== period) continue;\n if (entry.regionScope !== 'any' && entry.regionScope !== regionScope) continue;\n\n for (const alias of entry.aliases) {\n const candidate = normalize(alias);\n if (!candidate || normalized !== candidate) continue;\n const score = 100 + candidate.length;\n if (!best || score > best.score) best = { entry, score };\n }\n }\n\n return best?.entry;\n}\n","import { expandAliases, hasAny, MEASURE_TERMS, normalize, queryTokens } from './aliases.js';\nimport { catalogCode } from './catalog-codes.js';\nimport { type CuratedEntry, cleanQuery, findCurated } from './curated.js';\nimport { invalidArgument, NbsError, notFound } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport { type RegionRecord, scopeOf } from './regions.js';\nimport type {\n IndicatorCandidate,\n IndicatorRecord,\n Period,\n QueryOptions,\n ResolvedIndicator,\n SearchRecord,\n Shard,\n TreeRecord,\n} from './types.js';\n\nconst PERIOD_CODE: Record<Period, string> = {\n year: '3',\n quarter: '2',\n month: '1',\n};\n\nconst SUGGESTIONS = [\n 'GDP',\n 'CPI',\n 'PPI',\n '人口',\n '社会消费品零售总额',\n '固定资产投资',\n '城镇调查失业率',\n '居民人均可支配收入',\n];\n\n/** Short words that distinguish otherwise similar indicators. */\nconst QUALIFIER_TERMS = [\n '城镇',\n '农村',\n '夏收',\n '秋收',\n '税收',\n '支出',\n '收入',\n '利润',\n '营业收入',\n '总产量',\n '销售额',\n '销售面积',\n '房地产',\n '进口',\n '出口',\n '国有',\n '民间',\n '新建',\n '扩建',\n '改建',\n '住宅',\n];\n\nexport type ResolveOutcome =\n | { kind: 'resolved'; indicator: ResolvedIndicator }\n | { kind: 'ambiguous'; candidates: IndicatorCandidate[] }\n | { kind: 'notFound'; suggestions: string[] };\n\nfunction rawNormalize(text: string): string {\n return text\n .toLowerCase()\n .replace(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]/g, '')\n .trim();\n}\n\nfunction containsTerm(text: string, term: string): boolean {\n return rawNormalize(text).includes(rawNormalize(term));\n}\n\nfunction containsAny(text: string, terms: readonly string[]): boolean {\n return terms.some((term) => containsTerm(text, term));\n}\n\nfunction periodCode(period: Period): string {\n return PERIOD_CODE[period];\n}\n\nfunction displayNameFor(record: SearchRecord): string {\n return record.showName.trim() || record.name || '';\n}\n\nfunction measureFor(record: SearchRecord): string | undefined {\n const text = record.showName;\n const measures = [\n '累计值',\n '当季值',\n '当月值',\n '上年同月=100',\n '上年同期=100',\n '上年=100',\n '不变价',\n '现价',\n '贡献率',\n '拉动',\n '人均',\n '环比',\n '同比',\n '指数',\n '构成',\n ];\n const found = measures.filter((measure) => text.includes(measure));\n return found.length > 0 ? found.join(' / ') : undefined;\n}\n\nfunction toCandidate(record: SearchRecord, score: number, reasons: string[]): IndicatorCandidate {\n return {\n id: `${record.cid}:${record.indicId}`,\n name: record.name ?? record.showName,\n displayName: displayNameFor(record),\n unit: record.unit,\n frequency: record.frequency,\n region: record.region,\n measure: measureFor(record),\n score,\n reasons,\n };\n}\n\nfunction toResolved(record: SearchRecord, source: ResolvedIndicator['source']): ResolvedIndicator {\n return {\n cid: record.cid,\n indicId: record.indicId,\n name: record.name ?? record.showName,\n displayName: displayNameFor(record),\n unit: record.unit,\n frequency: record.frequency ?? 'year',\n region: record.region,\n regionCode: record.regionCode,\n measure: measureFor(record),\n source,\n };\n}\n\nfunction fromCurated(entry: CuratedEntry, region: RegionRecord): ResolvedIndicator {\n return {\n cid: entry.cid,\n indicId: entry.indicId,\n name: entry.name,\n displayName: entry.displayName,\n unit: entry.unit,\n frequency: entry.frequency,\n region: region.text,\n regionCode: region.value,\n measure: entry.measure,\n note: entry.note,\n shards: entry.shards,\n source: 'curated',\n };\n}\n\nfunction latestFirst(a: SearchRecord, b: SearchRecord): SearchRecord {\n if (a.dt !== b.dt) return a.dt > b.dt ? a : b;\n if (a.name && !b.name) return a;\n if (b.name && !a.name) return b;\n return a;\n}\n\nfunction dedupeRecords(records: SearchRecord[]): SearchRecord[] {\n const map = new Map<string, SearchRecord>();\n for (const record of records) {\n const key = `${record.cid}:${record.indicId}`;\n const existing = map.get(key);\n if (!existing) {\n map.set(key, { ...record });\n continue;\n }\n const latest = latestFirst(existing, record);\n map.set(key, {\n ...latest,\n name: latest.name ?? existing.name ?? record.name,\n unit: latest.unit ?? existing.unit ?? record.unit,\n frequency: latest.frequency ?? existing.frequency ?? record.frequency,\n });\n }\n return [...map.values()];\n}\n\nfunction scoreRecord(\n record: SearchRecord,\n query: string,\n period: Period,\n region: RegionRecord,\n): { score: number; reasons: string[] } {\n const reasons: string[] = [];\n let score = 0;\n\n const text = `${record.name ?? ''} ${record.showName}`;\n const normalizedName = normalize(record.name ?? '');\n const normalizedShow = normalize(record.showName);\n const cleaned = cleanQuery(query);\n const fullQuery = canonicalName(cleaned);\n const aliases = expandAliases(cleaned).map(canonicalName).filter(Boolean);\n const tokens = queryTokens(cleaned);\n\n let exact = false;\n let contains = false;\n if (fullQuery) {\n if (normalizedName === fullQuery || normalizedShow === fullQuery) exact = true;\n else if (normalizedName.includes(fullQuery) || normalizedShow.includes(fullQuery))\n contains = true;\n else if (fullQuery.includes(normalizedName) && normalizedName.length >= 2) contains = true;\n }\n for (const alias of aliases) {\n if (!alias || alias === fullQuery) continue;\n // A shorter alias contained in the full query (e.g. 粮食产量 inside\n // 夏收粮食产量) must not make a less specific indicator look exact.\n if (fullQuery.includes(alias)) continue;\n if (normalizedName === alias || normalizedShow === alias) exact = true;\n else if (normalizedName.includes(alias) || normalizedShow.includes(alias)) contains = true;\n }\n if (exact) {\n score += 50;\n reasons.push('名称完全匹配 +50');\n if (normalizedShow === fullQuery) {\n score += 10;\n reasons.push('展示名完全匹配 +10');\n }\n } else if (contains) {\n score += 25;\n reasons.push('名称包含关键词 +25');\n } else if (normalizedName && fullQuery.includes(normalizedName)) {\n score += 15;\n reasons.push('名称被查询包含 +15');\n }\n\n const tokenHits = tokens.filter(\n (token) => normalizedName.includes(token) || normalizedShow.includes(token),\n );\n if (tokenHits.length > 0) {\n score += tokenHits.length * 6;\n reasons.push(`关键词命中 ${tokenHits.length} 个 +${tokenHits.length * 6}`);\n }\n if (tokens.length > 0 && tokenHits.length === tokens.length) {\n score += 12;\n reasons.push('全部关键词命中 +12');\n }\n\n if (!record.name) {\n score -= 5;\n reasons.push('缺少指标名 -5');\n }\n\n if (record.frequency === period) {\n score += 30;\n reasons.push('频率匹配 +30');\n } else {\n score -= 40;\n reasons.push('频率不匹配 -40');\n }\n if (record.typeValue === periodCode(period)) {\n score += 10;\n reasons.push('数据类型匹配 +10');\n }\n\n if (region.national) {\n if (record.region.includes('全国')) {\n score += 30;\n reasons.push('地区匹配 +30');\n } else {\n score -= 25;\n reasons.push('地区不匹配 -25');\n }\n } else {\n const short = region.text.replace(/(省|市|自治区|特别行政区|壮族|回族|维吾尔|藏族|蒙古)/g, '');\n if (record.region.includes(region.text) || record.region.includes(short)) {\n score += 30;\n reasons.push('地区匹配 +30');\n } else if (record.region.includes('全国')) {\n score -= 20;\n reasons.push('全国数据与分省查询不匹配 -20');\n }\n }\n\n const unit = record.unit ?? '';\n const qGrowth = hasAny(query, MEASURE_TERMS.growth);\n const qIndex = hasAny(query, MEASURE_TERMS.index);\n const qPerCapita = hasAny(query, MEASURE_TERMS.perCapita);\n const qContribution = hasAny(query, MEASURE_TERMS.contribution);\n const qCumulative = hasAny(query, MEASURE_TERMS.cumulative);\n const qCurrent = hasAny(query, MEASURE_TERMS.current);\n const qConstant = hasAny(query, MEASURE_TERMS.constantPrice);\n const isPriceIndex = /价格|CPI|物价|指数/i.test(query) || /价格/.test(text);\n\n if (qGrowth) {\n if (/%|=100/.test(`${unit} ${text}`) || containsAny(text, ['增长', '增速'])) {\n score += 20;\n reasons.push('增速口径 +20');\n }\n if (/亿元|万元/.test(unit)) {\n score -= 15;\n reasons.push('总量单位与增速不符 -15');\n }\n }\n if (qIndex) {\n if (/=100/.test(`${unit} ${text}`) || containsTerm(text, '指数')) {\n score += 20;\n reasons.push('指数口径 +20');\n }\n if (/亿元|万元/.test(unit)) {\n score -= 10;\n reasons.push('总量单位与指数不符 -10');\n }\n if (!containsTerm(text, '指数') && !/=100/.test(`${unit} ${text}`)) {\n score -= 25;\n reasons.push('名称不含指数 -25');\n }\n }\n if (qPerCapita) {\n if (containsTerm(text, '人均')) {\n score += 30;\n reasons.push('人均口径 +30');\n } else {\n score -= 15;\n reasons.push('非人均口径 -15');\n }\n }\n if (qContribution) {\n if (containsAny(text, MEASURE_TERMS.contribution)) {\n score += 25;\n reasons.push('贡献率口径 +25');\n } else {\n score -= 15;\n reasons.push('非贡献率口径 -15');\n }\n }\n if (qCumulative) {\n if (containsTerm(text, '累计')) {\n score += 20;\n reasons.push('累计口径 +20');\n }\n if (containsTerm(text, '当季') || containsTerm(text, '当月')) {\n score -= 10;\n reasons.push('当季口径与累计不符 -10');\n }\n }\n if (qCurrent) {\n if (containsAny(text, ['当季', '当月'])) {\n score += 20;\n reasons.push('当季/当月口径 +20');\n }\n if (containsTerm(text, '累计')) {\n score -= 10;\n reasons.push('累计口径与当季不符 -10');\n }\n }\n if (qConstant) {\n if (containsTerm(text, '不变价')) {\n score += 25;\n reasons.push('不变价口径 +25');\n }\n }\n\n const noMeasure =\n !qGrowth && !qIndex && !qPerCapita && !qContribution && !qCumulative && !qCurrent && !qConstant;\n if (noMeasure) {\n if (isPriceIndex) {\n if (/=100/.test(`${unit} ${text}`)) {\n score += 15;\n reasons.push('价格指数默认同比口径 +15');\n }\n if (unit === '%') {\n score -= 5;\n reasons.push('价格指数默认不选百分比 -5');\n }\n } else {\n if (/亿元|万元|元|万吨|万人|亿人/.test(unit)) {\n score += 15;\n reasons.push('默认总量单位 +15');\n }\n if (unit === '%') {\n score -= 10;\n reasons.push('默认不选百分比 -10');\n }\n if (unit.includes('=100')) {\n score -= 5;\n reasons.push('默认不选定基指数 -5');\n }\n }\n }\n\n if (!qContribution && containsAny(text, MEASURE_TERMS.contribution)) {\n score -= 25;\n reasons.push('未询问贡献率/拉动/构成 -25');\n }\n if (!qIndex && containsTerm(text, '指数')) {\n score -= 15;\n reasons.push('未询问指数 -15');\n }\n if (!qPerCapita && containsTerm(text, '人均')) {\n score -= 25;\n reasons.push('未询问人均 -25');\n }\n if (!qConstant && containsTerm(text, '不变价')) {\n score -= 20;\n reasons.push('未询问不变价 -20');\n }\n if (!qGrowth && containsAny(text, ['增长率', '增长速度'])) {\n score -= 10;\n reasons.push('未询问增速 -10');\n }\n const asksGrowth = qGrowth || /增长|增速|同比|环比/.test(cleaned);\n if (!asksGrowth && containsTerm(text, '增长')) {\n score -= 15;\n reasons.push('未询问增长 -15');\n }\n if (!cleaned.includes('单位面积') && containsTerm(text, '单位面积')) {\n score -= 20;\n reasons.push('未询问单位面积 -20');\n }\n for (const component of ['工资性', '经营净', '财产净', '转移净', '中位数']) {\n if (!cleaned.includes(component) && containsTerm(text, component)) {\n score -= 15;\n reasons.push(`未询问${component}收入 -15`);\n }\n }\n if (!qCumulative && containsTerm(text, '累计')) {\n score -= 5;\n reasons.push('未询问累计 -5');\n }\n if (!qCurrent && containsAny(text, ['当季', '当月'])) {\n score -= 5;\n reasons.push('未询问当季/当月 -5');\n }\n if (containsTerm(text, '环比')) {\n score -= 10;\n reasons.push('环比口径降权 -10');\n }\n if (!query.includes('支出法') && containsTerm(text, '支出法')) {\n score -= 15;\n reasons.push('未询问支出法 -15');\n }\n if (!query.includes('民族自治') && containsTerm(text, '民族自治')) {\n score -= 20;\n reasons.push('未询问民族自治地方 -20');\n }\n if (!query.includes('定基') && /1978年?=100|1985年?=100/.test(`${unit} ${text}`)) {\n score -= 20;\n reasons.push('非定基查询降权 -20');\n }\n if (!query.includes('抽样') && containsTerm(text, '抽样调查')) {\n score -= 15;\n reasons.push('未询问抽样调查 -15');\n }\n if (!query.includes('男') && containsTerm(text, '男性')) {\n score -= 10;\n reasons.push('未询问男性人口 -10');\n }\n if (!query.includes('女') && containsTerm(text, '女性')) {\n score -= 10;\n reasons.push('未询问女性人口 -10');\n }\n if (!query.includes('城镇') && containsTerm(text, '城镇人口')) {\n score -= 10;\n reasons.push('未询问城镇人口 -10');\n }\n if (!query.includes('乡村') && containsTerm(text, '乡村人口')) {\n score -= 10;\n reasons.push('未询问乡村人口 -10');\n }\n\n // Discriminate similar indicators by qualifier words. This is deliberately\n // light-weight: it should break ties, not override a clear name match.\n for (const term of QUALIFIER_TERMS) {\n const inQuery = containsTerm(query, term);\n const inText = containsTerm(text, term);\n if (inQuery && inText) {\n score += 12;\n reasons.push(`限定词 ${term} +12`);\n } else if (inQuery && !inText) {\n score -= 10;\n reasons.push(`缺少限定词 ${term} -10`);\n }\n }\n\n if (record.dt) {\n score += 5;\n reasons.push('有最新数据 +5');\n }\n\n return { score, reasons };\n}\n\nfunction decide(\n scored: Array<{ record: SearchRecord; score: number; reasons: string[] }>,\n source: ResolvedIndicator['source'] = 'search',\n): ResolveOutcome {\n if (scored.length === 0) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const sorted = [...scored].sort((a, b) => b.score - a.score);\n const top = sorted[0];\n if (!top) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const second = sorted[1];\n const gap = second ? top.score - second.score : Number.POSITIVE_INFINITY;\n\n const confident =\n (top.score >= 80 && gap >= 10) ||\n (top.score >= 60 && gap >= 20) ||\n (top.score >= 45 && !second);\n\n if (confident) {\n return { kind: 'resolved', indicator: toResolved(top.record, source) };\n }\n\n if (top.score >= 30) {\n return {\n kind: 'ambiguous',\n candidates: sorted\n .slice(0, 3)\n .map((item) => toCandidate(item.record, item.score, item.reasons)),\n };\n }\n\n return { kind: 'notFound', suggestions: SUGGESTIONS };\n}\n\nasync function resolveFromSearch(\n provider: NbsProvider,\n query: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const result = await provider.search({\n keyword: query,\n period,\n pageSize: 50,\n signal: options.signal,\n noCache: options.noCache,\n });\n\n const records = dedupeRecords(result.records);\n const scored = records\n .map((record) => {\n const { score, reasons } = scoreRecord(record, query, period, region);\n return { record, score, reasons };\n })\n .filter((item) => item.score > 0);\n\n return decide(scored);\n}\n\nfunction categoryHints(query: string): string[] {\n const text = normalize(query);\n const hints: string[] = [];\n if (/gdp|国内生产总值|地区生产总值|经济总量|生产总值/.test(text)) {\n hints.push('国民经济核算', '综合');\n }\n if (/cpi|消费价格|物价|ppi|生产者价格/.test(text)) hints.push('价格指数');\n if (/人口|常住人口/.test(text)) hints.push('人口');\n if (/社零|社会消费品|零售/.test(text)) hints.push('国内贸易', '社会消费品零售总额');\n if (/固投|固定资产投资|房地产/.test(text)) hints.push('固定资产投资', '房地产');\n if (/失业/.test(text)) hints.push('就业', '城镇调查失业率');\n if (/收入/.test(text)) hints.push('人民生活');\n if (/工业|增加值/.test(text)) hints.push('工业');\n if (/粮食|农业|农林牧渔/.test(text)) hints.push('农业');\n if (/进出口|外贸|贸易/.test(text)) hints.push('对外经济贸易', '国内贸易');\n if (/财政|预算/.test(text)) hints.push('财政');\n if (/建筑业/.test(text)) hints.push('建筑业');\n return [...new Set(hints)];\n}\n\n/** Normalize a tree node name so \"居民消费价格分类指数\" matches \"居民消费价格指数\". */\nfunction canonicalName(text: string): string {\n return normalize(text).replace(/分类/g, '');\n}\n\nfunction treeNameMatches(name: string, query: string): boolean {\n const cleaned = cleanQuery(query);\n const normalizedName = canonicalName(name);\n if (!normalizedName) return false;\n const aliases = expandAliases(cleaned).map(canonicalName).filter(Boolean);\n if (aliases.some((alias) => normalizedName.includes(alias) || alias.includes(normalizedName))) {\n return true;\n }\n return queryTokens(cleaned).some((token) => normalizedName.includes(token));\n}\n\n/** Approximate name affinity using overlapping 2-grams, used to rank leaves. */\nfunction nameAffinity(name: string, query: string): number {\n const node = canonicalName(name);\n const target = canonicalName(query);\n if (!node || !target) return 0;\n let score = 0;\n for (let index = 0; index < target.length - 1; index += 1) {\n const gram = target.slice(index, index + 2);\n if (node.includes(gram)) score += 1;\n }\n return score;\n}\n\nfunction treeRecord(\n indicator: IndicatorRecord,\n leaf: TreeRecord,\n period: Period,\n region: RegionRecord,\n): SearchRecord {\n return {\n cid: indicator.cid,\n indicId: indicator.id,\n name: indicator.name,\n showName: indicator.showName,\n unit: indicator.unit,\n frequency: period,\n dt: '',\n dtName: '',\n region: region.text,\n regionCode: region.value,\n value: '',\n typeValue: periodCode(period),\n treePath: leaf.id,\n };\n}\n\n/** Matches a trailing range in a catalog leaf, e.g. \"(2021-)\", \"(2016-2020)\", \"(-2015)\". */\nconst SHARD_LABEL_RE = /\\s*[((]\\s*(\\d{4})?\\s*[-–—至]\\s*(\\d{4})?\\s*[))]\\s*$/;\n\nexport interface ParsedShardLabel {\n base: string;\n startYear?: number;\n endYear?: number;\n}\n\nexport function parseShardLabel(name: string): ParsedShardLabel | undefined {\n const match = SHARD_LABEL_RE.exec(name);\n if (!match) return undefined;\n const startYear = match[1] ? Number(match[1]) : undefined;\n const endYear = match[2] ? Number(match[2]) : undefined;\n if (startYear === undefined && endYear === undefined) return undefined;\n const base = name.slice(0, match.index).trim();\n if (!base) return undefined;\n return {\n base,\n ...(startYear === undefined ? {} : { startYear }),\n ...(endYear === undefined ? {} : { endYear }),\n };\n}\n\nfunction shardComparable(text: string): string {\n return normalize(text.replace(SHARD_LABEL_RE, ''));\n}\n\nfunction isLaterShard(a: ParsedShardLabel, b: ParsedShardLabel): boolean {\n const aEnd = a.endYear ?? Number.POSITIVE_INFINITY;\n const bEnd = b.endYear ?? Number.POSITIVE_INFINITY;\n if (aEnd !== bEnd) return aEnd > bEnd;\n const aStart = a.startYear ?? Number.NEGATIVE_INFINITY;\n const bStart = b.startYear ?? Number.NEGATIVE_INFINITY;\n return aStart > bStart;\n}\n\n/**\n * Discover sibling catalog leaves that represent earlier/later ranges of the\n * same series. The upstream API models long series as separate cids whose leaf\n * names carry a range suffix; without this, a query silently returns only the\n * current shard.\n */\nasync function discoverShards(\n provider: NbsProvider,\n leaf: TreeRecord,\n record: SearchRecord,\n code: string,\n resolved: ResolvedIndicator,\n options: QueryOptions,\n): Promise<Shard[] | undefined> {\n const parsed = parseShardLabel(leaf.name);\n if (!parsed || !leaf.parentId) return undefined;\n\n const siblings = await provider.getTree({\n pid: leaf.parentId,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n const shardLeaves = siblings\n .map((node) => ({ node, range: parseShardLabel(node.name) }))\n .filter(\n (item): item is { node: TreeRecord; range: ParsedShardLabel } =>\n item.node.isLeaf && item.range !== undefined && item.range.base === parsed.base,\n )\n .sort((a, b) => (a.range.startYear ?? -Infinity) - (b.range.startYear ?? -Infinity));\n\n if (shardLeaves.length < 2) return undefined;\n\n const targetShow = shardComparable(record.showName);\n const targetName = shardComparable(record.name ?? '');\n const shards: Shard[] = [];\n for (const item of shardLeaves.slice(0, 8)) {\n const indicators = await provider.getIndicators({\n cid: item.node.id,\n signal: options.signal,\n noCache: options.noCache,\n });\n const match =\n indicators.find((indicator) => shardComparable(indicator.showName) === targetShow) ??\n (targetName\n ? indicators.find((indicator) => shardComparable(indicator.name) === targetName)\n : undefined);\n if (!match) continue;\n shards.push({\n cid: item.node.id,\n indicId: match.id,\n ...(item.range.startYear === undefined ? {} : { startYear: item.range.startYear }),\n ...(item.range.endYear === undefined ? {} : { endYear: item.range.endYear }),\n label: item.node.name,\n });\n }\n\n if (shards.length < 2) return undefined;\n if (!shards.some((shard) => shard.cid === resolved.cid && shard.indicId === resolved.indicId)) {\n shards.push({\n cid: resolved.cid,\n indicId: resolved.indicId,\n ...(parsed.startYear === undefined ? {} : { startYear: parsed.startYear }),\n ...(parsed.endYear === undefined ? {} : { endYear: parsed.endYear }),\n label: leaf.name,\n });\n }\n return shards.sort((a, b) => (a.startYear ?? -Infinity) - (b.startYear ?? -Infinity));\n}\n\n// Short-lived negative cache for NOT_FOUND only. Ambiguous results are not\n// cached because candidate sets can change when upstream adds indicators.\nconst NEGATIVE_TTL_MS = 5 * 60 * 1000;\nconst NEGATIVE_MAX_ENTRIES = 200;\nconst negativeCache = new Map<string, { expiresAt: number; outcome: ResolveOutcome }>();\n\nfunction negativeKey(query: string, period: Period, scope: string): string {\n return `${normalize(cleanQuery(query))}|${period}|${scope}`;\n}\n\nfunction readNegative(key: string): ResolveOutcome | undefined {\n const entry = negativeCache.get(key);\n if (!entry) return undefined;\n if (entry.expiresAt <= Date.now()) {\n negativeCache.delete(key);\n return undefined;\n }\n return entry.outcome;\n}\n\nfunction writeNegative(key: string, outcome: ResolveOutcome): void {\n negativeCache.delete(key);\n negativeCache.set(key, { expiresAt: Date.now() + NEGATIVE_TTL_MS, outcome });\n while (negativeCache.size > NEGATIVE_MAX_ENTRIES) {\n const oldest = negativeCache.keys().next().value;\n if (oldest === undefined) break;\n negativeCache.delete(oldest);\n }\n}\n\n/** Clear the resolver's NOT_FOUND cache (mainly for tests). */\nexport function clearResolverNegativeCache(): void {\n negativeCache.clear();\n}\n\nasync function resolveFromTree(\n provider: NbsProvider,\n query: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const code = catalogCode(scopeOf(region), period);\n if (!code) {\n throw new NbsError('UNSUPPORTED_ACTION', '该地区/频率组合暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8);月度 code=7 是 36/70 城市汇总价格指数,不是单城市数据。',\n });\n }\n const hints = categoryHints(query);\n const queue: Array<{ pid: string; depth: number; hinted: boolean }> = [\n { pid: '', depth: 0, hinted: false },\n ];\n const leaves: Array<{ node: TreeRecord; affinity: number }> = [];\n let treeRequests = 0;\n\n while (queue.length > 0 && treeRequests < 12 && leaves.length < 40) {\n const current = queue.shift();\n if (!current || current.depth > 4) continue;\n const nodes = await provider.getTree({\n pid: current.pid,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n treeRequests += 1;\n\n for (const node of nodes) {\n const matches = treeNameMatches(node.name, query);\n const hinted = hints.some((hint) => node.name.includes(hint));\n const rootLevel = current.pid === '';\n const branchHinted = current.hinted || hinted;\n if (node.isLeaf && (matches || branchHinted)) {\n leaves.push({ node, affinity: nameAffinity(node.name, query) });\n } else if (\n !node.isLeaf &&\n (matches || hinted || rootLevel || current.hinted) &&\n current.depth < 4\n ) {\n queue.push({ pid: node.id, depth: current.depth + 1, hinted: branchHinted });\n }\n }\n }\n\n const scored: Array<{ record: SearchRecord; score: number; reasons: string[] }> = [];\n const leafByKey = new Map<string, TreeRecord>();\n const recordByKey = new Map<string, SearchRecord>();\n const shardGroups = new Map<\n string,\n {\n leaf: TreeRecord;\n record: SearchRecord;\n score: number;\n reasons: string[];\n range: ParsedShardLabel;\n }\n >();\n const selected = [...leaves]\n .sort((a, b) => b.affinity - a.affinity)\n .slice(0, 5)\n .map((item) => item.node);\n for (const leaf of selected) {\n const indicators = await provider.getIndicators({\n cid: leaf.id,\n signal: options.signal,\n noCache: options.noCache,\n });\n const range = parseShardLabel(leaf.name);\n for (const indicator of indicators) {\n const record = treeRecord(indicator, leaf, period, region);\n const { score, reasons } = scoreRecord(record, query, period, region);\n if (!range) {\n scored.push({ record, score, reasons });\n leafByKey.set(`${record.cid}:${record.indicId}`, leaf);\n recordByKey.set(`${record.cid}:${record.indicId}`, record);\n continue;\n }\n // The same long series appears as several sibling leaves, one per year\n // range. Keep the latest range as the representative, then attach all\n // ranges as shards after resolution.\n const groupKey = `${range.base}|${shardComparable(record.showName)}|${record.unit ?? ''}`;\n const existing = shardGroups.get(groupKey);\n if (!existing || isLaterShard(range, existing.range)) {\n shardGroups.set(groupKey, { leaf, record, score, reasons, range });\n }\n }\n }\n for (const group of shardGroups.values()) {\n scored.push({ record: group.record, score: group.score, reasons: group.reasons });\n leafByKey.set(`${group.record.cid}:${group.record.indicId}`, group.leaf);\n recordByKey.set(`${group.record.cid}:${group.record.indicId}`, group.record);\n }\n\n if (scored.length === 0) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const outcome = decide(scored, 'tree');\n if (outcome.kind === 'resolved') {\n const key = `${outcome.indicator.cid}:${outcome.indicator.indicId}`;\n const leaf = leafByKey.get(key);\n const record = recordByKey.get(key);\n if (leaf && record) {\n try {\n const shards = await discoverShards(\n provider,\n leaf,\n record,\n code,\n outcome.indicator,\n options,\n );\n if (shards) outcome.indicator.shards = shards;\n } catch (error) {\n if (options.signal?.aborted) throw error;\n // Shard discovery is best-effort; keep the primary shard on failure.\n }\n }\n }\n return outcome;\n}\n\nfunction parseSelection(indicatorId: string): { cid: string; indicId: string } | undefined {\n const [cid, indicId] = indicatorId.split(':');\n if (!cid || !indicId) return undefined;\n return { cid, indicId };\n}\n\nasync function resolveSelection(\n provider: NbsProvider,\n indicatorId: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const parsed = parseSelection(indicatorId);\n if (!parsed) {\n throw notFound(\n 'indicatorId 格式不正确',\n '请使用 QueryResult.candidates[].id,格式为 cid:indicId。',\n );\n }\n const indicators = await provider.getIndicators({\n cid: parsed.cid,\n signal: options.signal,\n noCache: options.noCache,\n });\n const found = indicators.find((indicator) => indicator.id === parsed.indicId);\n if (!found) {\n throw notFound('找不到指定的指标', '候选可能已过期;请重新搜索并选择新的 candidate id。');\n }\n return {\n kind: 'resolved',\n indicator: {\n cid: found.cid,\n indicId: found.id,\n name: found.name,\n displayName: found.showName,\n unit: found.unit,\n frequency: period,\n region: region.text,\n regionCode: region.value,\n measure: found.measure,\n source: 'selection',\n },\n };\n}\n\n/** Infer the data frequency from explicit period, start/end formats, or query words. */\nexport function inferPeriod(options: QueryOptions): Period {\n if (options.period) return options.period;\n const text = `${options.start ?? ''} ${options.end ?? ''} ${options.query ?? ''}`;\n if (/\\d{4}\\s*-\\s*\\d{1,2}/.test(text) || /月|月度|MM/.test(text)) return 'month';\n if (/\\d{4}\\s*Q[1-4]/i.test(text) || /\\d{4}\\s*SS/.test(text) || /季度|季/.test(text)) {\n return 'quarter';\n }\n return 'year';\n}\n\n/** Resolve a keyword to a concrete cid + indicator id. */\nexport async function resolveIndicator(\n provider: NbsProvider,\n options: QueryOptions,\n period: Period,\n region: RegionRecord,\n): Promise<ResolveOutcome> {\n const query = options.query?.trim();\n if (options.indicatorId) {\n return resolveSelection(provider, options.indicatorId, period, region, options);\n }\n if (!query) {\n throw invalidArgument('缺少 query 参数', '示例:query({ query: \"GDP\", action: \"series\" })');\n }\n\n const scope = scopeOf(region);\n if (scope === 'city' && period !== 'year') {\n throw new NbsError('UNSUPPORTED_ACTION', '主要城市月度/季度数据暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8);月度 code=7 是 36/70 城市汇总价格指数,不是单城市数据。',\n });\n }\n\n const curatedScope =\n scope === 'national' ? 'national' : scope === 'province' ? 'province' : 'city';\n const curated = findCurated(query, period, curatedScope);\n if (curated) {\n return { kind: 'resolved', indicator: fromCurated(curated, region) };\n }\n\n const key = negativeKey(query, period, scope);\n const cachedNegative = readNegative(key);\n if (cachedNegative) return cachedNegative;\n\n if (scope !== 'national') {\n const treeOutcome = await resolveFromTree(provider, query, period, region, options);\n if (treeOutcome.kind !== 'notFound') return treeOutcome;\n const outcome: ResolveOutcome = { kind: 'notFound', suggestions: SUGGESTIONS };\n writeNegative(key, outcome);\n return outcome;\n }\n\n const searchOutcome = await resolveFromSearch(provider, query, period, region, options);\n if (searchOutcome.kind === 'resolved') return searchOutcome;\n\n const hints = categoryHints(query);\n if (searchOutcome.kind === 'notFound' || hints.length > 0) {\n const treeOutcome = await resolveFromTree(provider, query, period, region, options);\n if (treeOutcome.kind === 'resolved') return treeOutcome;\n if (treeOutcome.kind === 'ambiguous') return treeOutcome;\n }\n\n if (searchOutcome.kind !== 'notFound') return searchOutcome;\n const outcome: ResolveOutcome = { kind: 'notFound', suggestions: SUGGESTIONS };\n writeNegative(key, outcome);\n return outcome;\n}\n","import type { DataPoint, Format, QueryResult } from './types.js';\n\nconst EMPTY_VALUES = new Set(['', '—', '--', '-', 'null', 'None', 'nan', 'NaN']);\n\n/** Preserve the raw precision while adding thousands separators to the integer part. */\nexport function formatNumber(raw: string): string {\n const text = raw.trim();\n if (EMPTY_VALUES.has(text)) return '—';\n const match = text.match(/^(-?)(\\d+)(?:\\.(\\d+))?$/);\n if (!match) return text;\n const sign = match[1] ?? '';\n const integer = match[2] ?? '';\n const decimal = match[3];\n const grouped = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return `${sign}${grouped}${decimal === undefined ? '' : `.${decimal}`}`;\n}\n\n/** Display width for terminal alignment; CJK characters count as 2 columns. */\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const char of text) {\n const code = char.codePointAt(0) ?? 0;\n const wide =\n (code >= 0x1100 && code <= 0x115f) ||\n (code >= 0x2e80 && code <= 0xa4cf) ||\n (code >= 0xac00 && code <= 0xd7a3) ||\n (code >= 0xf900 && code <= 0xfaff) ||\n (code >= 0xfe10 && code <= 0xfe19) ||\n (code >= 0xfe30 && code <= 0xfe6f) ||\n (code >= 0xff00 && code <= 0xff60) ||\n (code >= 0xffe0 && code <= 0xffe6) ||\n (code >= 0x1f300 && code <= 0x1f64f) ||\n (code >= 0x1f900 && code <= 0x1f9ff) ||\n (code >= 0x20000 && code <= 0x3fffd);\n width += wide ? 2 : 1;\n }\n return width;\n}\n\nfunction pad(text: string, width: number, align: 'left' | 'right' = 'left'): string {\n const current = displayWidth(text);\n const gap = Math.max(0, width - current);\n return align === 'right' ? `${' '.repeat(gap)}${text}` : `${text}${' '.repeat(gap)}`;\n}\n\nfunction renderPoints(points: DataPoint[], region?: string): string[] {\n return points.map((point) => {\n const where = point.region ?? region ?? '';\n const unit = point.unit ? ` ${point.unit}` : '';\n return `${point.periodName}${where ? ` ${where}` : ''}:${point.display}${unit}`;\n });\n}\n\nfunction renderText(result: QueryResult): string {\n const lines: string[] = [];\n const source = result.source;\n\n if (!result.ok) {\n lines.push(`查询失败:${result.error?.message ?? '未知错误'}`);\n if (result.error?.hint) lines.push(`提示:${result.error.hint}`);\n if (result.candidates && result.candidates.length > 0) {\n lines.push('候选指标:');\n result.candidates.forEach((candidate, index) => {\n const unit = candidate.unit ? ` (${candidate.unit})` : '';\n lines.push(` ${index + 1}. ${candidate.displayName || candidate.name}${unit}`);\n });\n lines.push('用 --json 查看候选 id,或加 --select <序号> 重新查询。');\n }\n return lines.join('\\n');\n }\n\n if (result.action === 'catalog') {\n lines.push('国家统计局 · 分类树');\n for (const node of result.nodes ?? []) {\n lines.push(\n `${' '.repeat(Math.max(0, node.level - 1))}- ${node.name}${node.isLeaf ? '' : ' /'}`,\n );\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n return lines.join('\\n');\n }\n\n if (result.action === 'compare' && result.series?.length) {\n lines.push(\n `国家统计局 · ${result.indicator?.displayName ?? result.indicator?.name ?? '地区对比'}`,\n );\n for (const series of result.series) {\n lines.push('');\n lines.push(`${series.region}:`);\n lines.push(...renderPoints(series.points, series.region));\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push('');\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n return lines.join('\\n');\n }\n\n const title = result.indicator?.displayName ?? result.indicator?.name ?? '查询结果';\n lines.push(`国家统计局 · ${title}`);\n if (result.points?.length) {\n lines.push(...renderPoints(result.points));\n } else {\n lines.push('没有找到数据。');\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n lines.push(`获取时间:${source.retrievedAt}`);\n return lines.join('\\n');\n}\n\nfunction renderTable(result: QueryResult): string {\n const rows: DataPoint[] = [];\n if (result.action === 'compare' && result.series?.length) {\n for (const series of result.series) rows.push(...series.points);\n } else {\n rows.push(...(result.points ?? []));\n }\n\n if (rows.length === 0) return renderText(result);\n\n const headers = ['时间', '地区', '数值', '单位'];\n const table = rows.map((point) => [\n point.periodName || point.period,\n point.region ?? '',\n point.display,\n point.unit ?? '',\n ]);\n const widths = headers.map((header, index) =>\n Math.max(displayWidth(header), ...table.map((row) => displayWidth(row[index] ?? ''))),\n );\n const line = (cells: string[]) =>\n cells\n .map((cell, index) => pad(cell, widths[index] ?? 0, index === 2 ? 'right' : 'left'))\n .join(' ');\n const separator = widths.map((width) => '─'.repeat(width)).join(' ');\n\n return [\n line(headers),\n separator,\n ...table.map((row) => line(row)),\n '',\n `来源:${result.source.name}(data.stats.gov.cn)`,\n ].join('\\n');\n}\n\n/** Render a QueryResult. The core query() always returns structured data. */\nexport function render(result: QueryResult, format: Format = 'text'): string {\n if (format === 'json') return JSON.stringify(result, null, 2);\n if (format === 'table') return renderTable(result);\n return renderText(result);\n}\n","import { invalidRange } from './errors.js';\nimport { formatNumber } from './format.js';\nimport type { NbsProvider } from './provider.js';\nimport type { DataPoint, Period, ResolvedIndicator, SeriesPeriod, Shard } from './types.js';\n\ninterface OrdinalRange {\n start: number;\n end: number;\n}\n\ninterface ShardRange {\n cid: string;\n indicId: string;\n start: number;\n end: number;\n label?: string;\n}\n\nexport interface SeriesResult {\n points: DataPoint[];\n notes: string[];\n partial: boolean;\n}\n\nconst DEFAULT_MAX_POINTS = 240;\n\nfunction ordinalOf(period: Period, year: number, index: number): number {\n if (period === 'year') return year;\n if (period === 'quarter') return year * 4 + (index - 1);\n return year * 12 + (index - 1);\n}\n\nfunction codeOf(period: Period, ordinal: number): string {\n if (period === 'year') return `${ordinal}YY`;\n if (period === 'quarter') {\n const year = Math.floor(ordinal / 4);\n const quarter = (ordinal % 4) + 1;\n return `${year}${String(quarter).padStart(2, '0')}SS`;\n }\n const year = Math.floor(ordinal / 12);\n const month = (ordinal % 12) + 1;\n return `${year}${String(month).padStart(2, '0')}MM`;\n}\n\nfunction currentOrdinal(period: Period, now = new Date()): number {\n const year = now.getFullYear();\n if (period === 'year') return year;\n if (period === 'quarter') return year * 4 + Math.floor(now.getMonth() / 3);\n return year * 12 + now.getMonth();\n}\n\nfunction parseYear(value: string | number): number | undefined {\n const match = String(value).match(/(\\d{4})/);\n return match?.[1] ? Number(match[1]) : undefined;\n}\n\nfunction parseOrdinal(\n period: Period,\n value: string | number,\n edge: 'start' | 'end',\n): number | undefined {\n const text = String(value).trim();\n if (!text) return undefined;\n const year = parseYear(text);\n if (year === undefined) return undefined;\n\n if (period === 'year') return year;\n\n if (period === 'quarter') {\n const qMatch = text.match(/[Qq]\\s*([1-4])/);\n const ssMatch = text.match(/^(\\d{4})\\s*(\\d{2})SS$/);\n const q = qMatch?.[1]\n ? Number(qMatch[1])\n : ssMatch?.[2]\n ? Number(ssMatch[2])\n : edge === 'start'\n ? 1\n : 4;\n if (q < 1 || q > 4) return undefined;\n return ordinalOf('quarter', year, q);\n }\n\n const monthMatch = text.match(/(?:-|\\/|年)\\s*(\\d{1,2})/);\n const mmMatch = text.match(/^(\\d{4})(\\d{2})MM$/);\n const month = monthMatch?.[1]\n ? Number(monthMatch[1])\n : mmMatch?.[2]\n ? Number(mmMatch[2])\n : edge === 'start'\n ? 1\n : 12;\n if (month < 1 || month > 12) return undefined;\n return ordinalOf('month', year, month);\n}\n\nexport function resolveRange(\n period: Period,\n start: string | number | undefined,\n end: string | number | undefined,\n now = new Date(),\n): OrdinalRange {\n const current = currentOrdinal(period, now);\n const endOrdinal = end === undefined ? current : parseOrdinal(period, end, 'end');\n if (endOrdinal === undefined) {\n throw invalidRange(\n `无法解析结束时间:${String(end)}`,\n period === 'year'\n ? '年度请用 2025 或 2015'\n : period === 'quarter'\n ? '季度请用 2025Q1 或 2025'\n : '月度请用 2025-01 或 2025',\n );\n }\n\n let startOrdinal = start === undefined ? undefined : parseOrdinal(period, start, 'start');\n if (startOrdinal === undefined) {\n const span = period === 'year' ? 9 : period === 'quarter' ? 7 : 11;\n startOrdinal = endOrdinal - span;\n }\n\n if (startOrdinal > endOrdinal) {\n throw invalidRange(\n `开始时间晚于结束时间:${String(start)} > ${String(end)}`,\n '请检查 start/end 或 --start/--end。',\n );\n }\n\n return { start: startOrdinal, end: endOrdinal };\n}\n\nfunction shardRange(shard: Shard, period: Period): ShardRange {\n const start =\n shard.startYear === undefined\n ? Number.NEGATIVE_INFINITY\n : ordinalOf(period, shard.startYear, 1);\n const end =\n shard.endYear === undefined\n ? Number.POSITIVE_INFINITY\n : ordinalOf(period, shard.endYear, period === 'year' ? 1 : period === 'quarter' ? 4 : 12);\n return {\n cid: shard.cid,\n indicId: shard.indicId,\n start,\n end,\n label: shard.label,\n };\n}\n\nfunction buildShardRanges(indicator: ResolvedIndicator, range: OrdinalRange): ShardRange[] {\n if (!indicator.shards || indicator.shards.length === 0) {\n return [\n {\n cid: indicator.cid,\n indicId: indicator.indicId,\n start: range.start,\n end: range.end,\n },\n ];\n }\n\n return indicator.shards\n .map((shard) => shardRange(shard, indicator.frequency))\n .map((shard) => ({\n ...shard,\n start: Math.max(shard.start, range.start),\n end: Math.min(shard.end, range.end),\n }))\n .filter((shard) => shard.start <= shard.end)\n .sort((a, b) => a.start - b.start);\n}\n\n/** Convert an API period code into a canonical period and display name. */\nexport function parsePeriodCode(code: string): { period: string; name: string } {\n const year = code.match(/^(\\d{4})YY$/);\n if (year?.[1]) return { period: year[1], name: `${year[1]}年` };\n\n const quarter = code.match(/^(\\d{4})(\\d{2})SS$/);\n if (quarter?.[1] && quarter[2]) {\n const q = Number(quarter[2]);\n if (q >= 1 && q <= 4) {\n return { period: `${quarter[1]}Q${q}`, name: `${quarter[1]}年第${q}季度` };\n }\n }\n\n const month = code.match(/^(\\d{4})(\\d{2})MM$/);\n if (month?.[1] && month[2]) {\n const m = Number(month[2]);\n if (m >= 1 && m <= 12) {\n return { period: `${month[1]}-${String(m).padStart(2, '0')}`, name: `${month[1]}年${m}月` };\n }\n }\n\n return { period: code, name: code };\n}\n\nfunction parseValue(raw: string): number | null {\n const text = raw.trim().replace(/,/g, '');\n if (\n !text ||\n text === '—' ||\n text === '--' ||\n text === '-' ||\n text === 'null' ||\n text === 'None'\n ) {\n return null;\n }\n const value = Number(text);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction pointFromPeriod(\n period: SeriesPeriod,\n indicator: ResolvedIndicator,\n fallbackRegion: string,\n indicId = indicator.indicId,\n): DataPoint | undefined {\n const value = period.values.find((item) => item.id === indicId) ?? period.values[0] ?? undefined;\n if (!value) return undefined;\n const canonical = parsePeriodCode(period.code);\n const rawValue = value.value ?? '';\n return {\n period: canonical.period,\n periodName: period.name || canonical.name,\n value: parseValue(rawValue),\n rawValue,\n display: formatNumber(rawValue),\n unit: value.unit ?? indicator.unit,\n region: value.regionName || indicator.region || fallbackRegion,\n };\n}\n\nfunction sortKey(period: string): number {\n const year = Number(period.slice(0, 4));\n if (period.includes('Q')) {\n const q = Number(period.split('Q')[1] ?? 1);\n return year * 4 + (q - 1);\n }\n if (period.includes('-')) {\n const month = Number(period.split('-')[1] ?? 1);\n return year * 12 + (month - 1);\n }\n return year;\n}\n\nexport interface FetchSeriesOptions {\n start?: string | number;\n end?: string | number;\n maxPoints?: number;\n signal?: AbortSignal;\n noCache?: boolean;\n}\n\n/** Fetch and merge a series, including shard ranges. */\nexport async function fetchSeries(\n provider: NbsProvider,\n indicator: ResolvedIndicator,\n period: Period,\n options: FetchSeriesOptions = {},\n): Promise<SeriesResult> {\n const range = resolveRange(period, options.start, options.end);\n const shardRanges = buildShardRanges(indicator, range);\n const notes: string[] = [];\n let partial = false;\n\n if (shardRanges.length === 0) {\n return {\n points: [],\n notes: [`没有覆盖 ${String(options.start ?? '')}–${String(options.end ?? '')} 的分片`],\n partial: false,\n };\n }\n\n const pointsByPeriod = new Map<string, DataPoint>();\n let successes = 0;\n let firstError: unknown;\n\n for (const shard of shardRanges) {\n const dts =\n shard.start === shard.end\n ? codeOf(period, shard.start)\n : `${codeOf(period, shard.start)}-${codeOf(period, shard.end)}`;\n try {\n const periods = await provider.getSeries({\n cid: shard.cid,\n indicId: shard.indicId,\n dts,\n region: {\n text: indicator.region ?? '全国',\n value: indicator.regionCode ?? '000000000000',\n },\n signal: options.signal,\n noCache: options.noCache,\n });\n successes += 1;\n for (const periodData of periods) {\n const point = pointFromPeriod(\n periodData,\n indicator,\n indicator.region ?? '全国',\n shard.indicId,\n );\n if (!point) continue;\n const existing = pointsByPeriod.get(point.period);\n if (!existing || existing.value === null || point.value !== null) {\n pointsByPeriod.set(point.period, point);\n }\n }\n } catch (error) {\n partial = true;\n firstError ??= error;\n notes.push(`分片 ${dts} 请求失败,已返回其余分片的数据。`);\n }\n }\n\n if (successes === 0 && firstError) throw firstError;\n\n const sorted = [...pointsByPeriod.values()].sort((a, b) => sortKey(a.period) - sortKey(b.period));\n const beforeTrim = sorted.length;\n while (sorted.length > 0 && sorted[sorted.length - 1]?.value === null) {\n sorted.pop();\n }\n if (sorted.length < beforeTrim) {\n notes.push('末尾尚未发布的数据点已省略。');\n }\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const points = sorted.length > maxPoints ? sorted.slice(-maxPoints) : sorted;\n if (points.length < sorted.length) {\n notes.push(`数据点较多,仅返回最近 ${maxPoints} 个。`);\n }\n\n return { points, notes, partial };\n}\n","import { invalidArgument, NbsError } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport { type RegionRecord, regionSuggestions, resolveRegion, scopeOf } from './regions.js';\nimport { type ResolveOutcome, resolveIndicator } from './resolver.js';\nimport { fetchSeries } from './series.js';\nimport type { CompareSeries, Period, QueryOptions, ResolvedIndicator } from './types.js';\n\nexport interface CompareResult {\n indicator: ResolvedIndicator;\n series: CompareSeries[];\n notes: string[];\n partial: boolean;\n}\n\nexport interface CompareOutcome {\n resolution: ResolveOutcome;\n result?: CompareResult;\n}\n\nconst MAX_REGIONS = 8;\n\n/** Compare one indicator across provinces (or across the given regions). */\nexport async function compareRegions(\n provider: NbsProvider,\n options: QueryOptions,\n period: Period,\n): Promise<CompareOutcome> {\n if (!options.regions || options.regions.length === 0) {\n throw invalidArgument('compare 需要 regions 参数', '示例:regions: [\"广东\", \"江苏\", \"浙江\"]');\n }\n if (options.regions.length > MAX_REGIONS) {\n throw invalidArgument(`compare 最多支持 ${MAX_REGIONS} 个地区`, '请减少地区数量或分多次查询。');\n }\n\n const regions: RegionRecord[] = [];\n for (const input of options.regions) {\n const region = resolveRegion(input);\n if (!region) {\n throw invalidArgument(\n `无法识别地区:${input}`,\n `可用地区包括:${regionSuggestions(input).join('、') || '广东、江苏、浙江、山东、河南'}`,\n );\n }\n regions.push(region);\n }\n\n const scopes = new Set(regions.map((region) => scopeOf(region)));\n if (scopes.size > 1) {\n throw invalidArgument('compare 不支持跨范围混比', '请全部使用全国、分省或主要城市,不要混合。');\n }\n if (scopes.has('city') && period !== 'year') {\n throw new NbsError('UNSUPPORTED_ACTION', '主要城市月度/季度对比暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8)。',\n });\n }\n\n const first = regions[0];\n if (!first) throw invalidArgument('compare 需要至少一个地区');\n\n const resolution = await resolveIndicator(provider, options, period, first);\n if (resolution.kind !== 'resolved') return { resolution };\n\n const base = resolution.indicator;\n const series: CompareSeries[] = [];\n const notes: string[] = [];\n let partial = false;\n\n for (const region of regions) {\n const indicator: ResolvedIndicator = {\n ...base,\n region: region.text,\n regionCode: region.value,\n };\n try {\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: options.maxPoints,\n signal: options.signal,\n noCache: options.noCache,\n });\n series.push({\n region: region.text,\n regionCode: region.value,\n points: result.points,\n });\n notes.push(...result.notes.map((note) => `${region.text}:${note}`));\n if (result.partial) partial = true;\n } catch (error) {\n partial = true;\n notes.push(\n `${region.text}:查询失败,${error instanceof Error ? error.message : String(error)}`,\n );\n if (series.length === 0) throw error;\n }\n }\n\n return {\n resolution,\n result: {\n indicator: base,\n series,\n notes,\n partial,\n },\n };\n}\n","import type { NbsClient } from './client.js';\nimport type {\n IndicatorParams,\n NbsProvider,\n SearchParams,\n SearchResult,\n SeriesParams,\n TreeParams,\n} from './provider.js';\nimport type {\n IndicatorRecord,\n NbsDataPeriod,\n NbsIndicatorItem,\n NbsSearchData,\n NbsSearchItem,\n NbsTreeItem,\n Period,\n ProvinceRecord,\n SearchRecord,\n SeriesPeriod,\n TreeRecord,\n} from './types.js';\n\nconst ROOT_ID = '69c574ab128a44e595cc0b24502b771b';\n\nconst TTL = {\n search: 10 * 60 * 1000,\n series: 30 * 60 * 1000,\n tree: 24 * 60 * 60 * 1000,\n indicators: 24 * 60 * 60 * 1000,\n provinces: 7 * 24 * 60 * 60 * 1000,\n};\n\nconst PERIOD_CODE: Record<Period, string> = {\n year: '3',\n quarter: '2',\n month: '1',\n};\n\nfunction periodFromDtType(dtType: string): Period | undefined {\n if (dtType === 'YY') return 'year';\n if (dtType === 'SS') return 'quarter';\n if (dtType === 'MM') return 'month';\n return undefined;\n}\n\nfunction isLikelyUnit(value: string): boolean {\n const text = value.trim();\n if (!text || text.length > 20) return false;\n if (/^\\d{4}(-\\d{4})?$/.test(text)) return false;\n if (/^\\d+$/.test(text)) return false;\n if (text.includes('=')) return true;\n if (/[%%]/.test(text)) return true;\n if (text === '人') return true;\n return /(亿元|万元|千元|元|美元|欧元|港元|百分点|万吨|亿吨|万千瓦|亿千瓦|万千瓦时|亿千瓦时|万人|亿人|人次|万平方米|亿平方米|平方公里|公顷|亩|台|辆|艘|架|张|件|部|所|个|户|头|只|吨|米|公里|升|立方米|年|岁|天|小时|分钟|秒)/.test(\n text,\n );\n}\n\n/** Extract the last plausible unit from a show_name like \"国内生产总值 (亿元) \". */\nexport function extractUnit(showName: string): string | undefined {\n const matches = [...showName.matchAll(/[((]([^()()]*)[))]/g)]\n .map((match) => match[1]?.trim() ?? '')\n .filter(Boolean);\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const candidate = matches[index];\n if (candidate && isLikelyUnit(candidate)) return candidate;\n }\n if (/[%%]\\s*$/.test(showName)) return '%';\n return undefined;\n}\n\nfunction parseYear(value: string | null | undefined): number | undefined {\n if (!value) return undefined;\n const match = value.match(/(\\d{4})/);\n return match?.[1] ? Number(match[1]) : undefined;\n}\n\nfunction mapSearchItem(item: NbsSearchItem): SearchRecord {\n const frequency = periodFromDtType(item.dt_type);\n const showName = item.show_name.trim();\n return {\n cid: item.cid,\n indicId: item.indic_id,\n name: item.i_name?.trim() || item.ek_name?.trim() || showName,\n showName,\n unit: extractUnit(showName),\n ...(frequency === undefined ? {} : { frequency }),\n dt: item.dt,\n dtName: item.dt_name,\n region: item.da_name || '全国',\n regionCode: item.da,\n value: item.value,\n typeValue: item.type_value,\n explain: item.explain,\n treePath: item.treeinfo_globalid,\n };\n}\n\nfunction mapTreeItem(item: NbsTreeItem): TreeRecord {\n return {\n id: item._id,\n name: item.name.trim(),\n parentId: item.treeinfo_pid || undefined,\n level: item.treeinfo_level,\n isLeaf: item.isLeaf,\n startYear: parseYear(item.sdate),\n endYear: parseYear(item.edate),\n };\n}\n\nfunction mapIndicator(item: NbsIndicatorItem, cid: string): IndicatorRecord {\n const measure =\n item.kj1_name?.trim() ||\n item.kj2_name?.trim() ||\n item.kj3_name?.trim() ||\n item.dp_name?.trim() ||\n undefined;\n return {\n id: item._id,\n cid: item.catalogid || cid,\n name: item._name.trim(),\n showName: item.i_showname.trim(),\n unit: item.du_name && item.du_name !== '无' ? item.du_name.trim() : undefined,\n measure,\n startDate: item.daterange_sdate ?? undefined,\n endDate: item.daterange_edate ?? undefined,\n note: item.i_annotation ?? undefined,\n };\n}\n\nfunction mapSeries(periods: NbsDataPeriod[]): SeriesPeriod[] {\n return periods.map((period) => ({\n code: period.code,\n name: period.name,\n values: period.values.map((value) => ({\n id: value._id,\n name: value._name,\n showName: value.i_showname,\n unit: value.du_name && value.du_name !== '无' ? value.du_name : undefined,\n value: value.value,\n region: value.da,\n regionName: value.da_name,\n })),\n }));\n}\n\n/** Default provider backed by data.stats.gov.cn. */\nexport class NbsProviderImpl implements NbsProvider {\n private readonly client: NbsClient;\n\n constructor(client: NbsClient) {\n this.client = client;\n }\n\n async search(params: SearchParams): Promise<SearchResult> {\n const code = params.code ?? (params.period ? PERIOD_CODE[params.period] : '');\n const page = params.page ?? 1;\n const pageSize = params.pageSize ?? 50;\n const cacheKey = `search:${code}:${page}:${pageSize}:${params.keyword}`;\n const data = await this.client.request<NbsSearchData>('/query', {\n query: {\n search: params.keyword,\n pagenum: page,\n pageSize,\n code,\n },\n cacheKey,\n cacheTtlMs: TTL.search,\n noCache: params.noCache,\n signal: params.signal,\n });\n return {\n records: (data.data ?? []).map(mapSearchItem),\n count: data.count ?? 0,\n };\n }\n\n async getTree(params: TreeParams): Promise<TreeRecord[]> {\n const cacheKey = `tree:${params.code}:${params.pid ?? ''}`;\n const data = await this.client.request<NbsTreeItem[]>('/new/queryIndexTreeAsync', {\n query: {\n pid: params.pid ?? '',\n code: params.code,\n },\n cacheKey,\n cacheTtlMs: TTL.tree,\n noCache: params.noCache,\n signal: params.signal,\n });\n return (data ?? []).map(mapTreeItem);\n }\n\n async getIndicators(params: IndicatorParams): Promise<IndicatorRecord[]> {\n const cacheKey = `indicators:${params.cid}`;\n const data = await this.client.request<{ total: number; list: NbsIndicatorItem[] }>(\n '/new/queryIndicatorsByCid',\n {\n query: {\n cid: params.cid,\n dt: '',\n name: '',\n },\n cacheKey,\n cacheTtlMs: TTL.indicators,\n noCache: params.noCache,\n signal: params.signal,\n },\n );\n return (data.list ?? []).map((item) => mapIndicator(item, params.cid));\n }\n\n async getSeries(params: SeriesParams): Promise<SeriesPeriod[]> {\n const cacheKey = `series:${params.cid}:${params.indicId}:${params.dts}:${params.region.value}`;\n const data = await this.client.request<NbsDataPeriod[]>('/stream/esData', {\n method: 'POST',\n body: {\n cid: params.cid,\n indicatorIds: [params.indicId],\n daCatalogId: '',\n das: [{ text: params.region.text, value: params.region.value }],\n showType: '1',\n dts: [params.dts],\n rootId: ROOT_ID,\n },\n cacheKey,\n cacheTtlMs: TTL.series,\n noCache: params.noCache,\n signal: params.signal,\n });\n return mapSeries(data ?? []);\n }\n\n async getProvinces(signal?: AbortSignal): Promise<ProvinceRecord[]> {\n return this.client.request<ProvinceRecord[]>('/getAllProvince', {\n cacheKey: 'provinces',\n cacheTtlMs: TTL.provinces,\n signal,\n });\n }\n}\n\nexport { PERIOD_CODE, ROOT_ID };\n","import { TtlCache } from './cache.js';\nimport { fetchCatalog } from './catalog.js';\nimport { NbsClient, type NbsClientOptions } from './client.js';\nimport { compareRegions } from './compare.js';\nimport { invalidArgument, NbsError, timeoutError, toQueryError } from './errors.js';\nimport { render } from './format.js';\nimport { NbsProviderImpl } from './nbs-provider.js';\nimport type { NbsProvider } from './provider.js';\nimport { RateLimiter } from './rate-limiter.js';\nimport {\n inferRegionFromText,\n NATIONAL_REGION,\n regionSuggestions,\n resolveRegion,\n} from './regions.js';\nimport { inferPeriod, type ResolveOutcome, resolveIndicator } from './resolver.js';\nimport { fetchSeries } from './series.js';\nimport type {\n Action,\n IndicatorCandidate,\n IndicatorMeta,\n Period,\n QueryOptions,\n QueryResult,\n ResolvedIndicator,\n SourceMeta,\n} from './types.js';\n\nconst SOURCE_NAME = '国家统计局' as const;\nconst SOURCE_URL = 'https://data.stats.gov.cn/' as const;\n\n// Shared across query() calls so cache and serialized rate limiting actually\n// apply to a long-lived process (qbot, CLI server, etc.).\nconst SHARED_CACHE = new TtlCache({ maxEntries: 200 });\nconst SHARED_LIMITER = new RateLimiter({ minIntervalMs: 2_000, jitterMs: 250 });\n\nfunction sourceNow(): SourceMeta {\n return {\n name: SOURCE_NAME,\n url: SOURCE_URL,\n retrievedAt: new Date().toISOString(),\n };\n}\n\nfunction indicatorMeta(indicator: ResolvedIndicator): IndicatorMeta {\n return {\n id: `${indicator.cid}:${indicator.indicId}`,\n name: indicator.name,\n displayName: indicator.displayName,\n unit: indicator.unit,\n frequency: indicator.frequency,\n region: indicator.region,\n measure: indicator.measure,\n note: indicator.note,\n };\n}\n\nfunction ambiguousResult(\n action: Action,\n source: SourceMeta,\n candidates: IndicatorCandidate[],\n): QueryResult {\n return {\n ok: false,\n action,\n source,\n candidates,\n error: {\n code: 'AMBIGUOUS',\n message: '找到多个可能的指标,无法确定要查哪一个',\n retryable: false,\n hint: '请从 candidates 中选择一个,把它的 id 作为 indicatorId 再查;CLI 可用 --select <序号> 或 --json 查看 id。',\n },\n };\n}\n\nfunction notFoundResult(\n action: Action,\n source: SourceMeta,\n query: string,\n suggestions: string[],\n): QueryResult {\n return {\n ok: false,\n action,\n source,\n error: {\n code: 'NOT_FOUND',\n message: `没有找到与“${query}”匹配的指标`,\n retryable: false,\n hint: `换一个更具体的指标名,或试试:${suggestions.slice(0, 6).join('、')}`,\n details: { suggestions },\n },\n };\n}\n\nfunction resolutionResult(\n action: Action,\n source: SourceMeta,\n query: string,\n resolution: ResolveOutcome,\n): QueryResult | undefined {\n if (resolution.kind === 'ambiguous')\n return ambiguousResult(action, source, resolution.candidates);\n if (resolution.kind === 'notFound') {\n return notFoundResult(action, source, query, resolution.suggestions);\n }\n return undefined;\n}\n\nasync function dispatch(\n provider: NbsProvider,\n options: QueryOptions,\n action: Action,\n source: SourceMeta,\n): Promise<QueryResult> {\n if (action === 'catalog') {\n const catalog = await fetchCatalog(\n provider,\n options,\n options.code ?? '3',\n options.pid ?? '',\n options.depth ?? 1,\n );\n return {\n ok: true,\n action,\n source,\n nodes: catalog.nodes,\n ...(catalog.notes.length > 0 ? { notes: catalog.notes } : {}),\n };\n }\n\n const query = options.query?.trim();\n if (!query) {\n throw invalidArgument('缺少 query 参数', '示例:query({ query: \"GDP\", action: \"series\" })');\n }\n\n const region = options.region\n ? resolveRegion(options.region)\n : (inferRegionFromText(options.query) ?? NATIONAL_REGION);\n if (!region) {\n throw invalidArgument(\n `无法识别地区:${options.region ?? ''}`,\n `可用地区包括:${regionSuggestions(options.region ?? '').join('、') || '全国、广东、江苏、浙江'}`,\n );\n }\n\n const period: Period = inferPeriod(options);\n\n if (action === 'compare') {\n const compared = await compareRegions(provider, options, period);\n const early = resolutionResult(action, source, query, compared.resolution);\n if (early) return early;\n if (!compared.result) {\n throw new NbsError('UPSTREAM_ERROR', 'compare 没有返回结果', { retryable: true });\n }\n return {\n ok: true,\n action,\n source,\n indicator: indicatorMeta(compared.result.indicator),\n series: compared.result.series,\n ...(compared.result.notes.length > 0 ? { notes: compared.result.notes } : {}),\n ...(compared.result.partial ? { partial: true } : {}),\n };\n }\n\n const resolution = await resolveIndicator(provider, options, period, region);\n const early = resolutionResult(action, source, query, resolution);\n if (early) return early;\n if (resolution.kind !== 'resolved') {\n throw new NbsError('UPSTREAM_ERROR', '指标解析失败', { retryable: true });\n }\n\n const indicator = resolution.indicator;\n const notes: string[] = [];\n if (indicator.note) notes.push(indicator.note);\n\n if (action === 'search') {\n const limit = Math.max(1, Math.min(50, Math.floor(options.limit ?? 5)));\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: Math.min(50, limit + 3),\n signal: options.signal,\n noCache: options.noCache,\n });\n const nonNull = result.points.filter((point) => point.value !== null);\n const points = nonNull.length > 0 ? nonNull.slice(-limit) : result.points.slice(-limit);\n notes.push(\n ...result.notes.filter(\n (note) => !note.startsWith('数据点较多') && !note.startsWith('末尾尚未发布'),\n ),\n );\n return {\n ok: true,\n action,\n source: sourceNow(),\n indicator: indicatorMeta(indicator),\n points,\n ...(notes.length > 0 ? { notes } : {}),\n ...(result.partial ? { partial: true } : {}),\n };\n }\n\n if (action === 'series') {\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: options.maxPoints,\n signal: options.signal,\n noCache: options.noCache,\n });\n notes.push(...result.notes);\n return {\n ok: true,\n action,\n source: sourceNow(),\n indicator: indicatorMeta(indicator),\n points: result.points,\n ...(notes.length > 0 ? { notes } : {}),\n ...(result.partial ? { partial: true } : {}),\n };\n }\n\n throw new NbsError('UNSUPPORTED_ACTION', `不支持的操作:${action}`, {\n retryable: false,\n hint: '可用 action:search、series、compare、catalog。',\n });\n}\n\n/** Create a default client/provider pair. */\nexport function createClient(options: NbsClientOptions = {}): NbsClient {\n return new NbsClient(options);\n}\n\n/** Run a query against an explicit provider (useful for tests and adapters). */\nexport async function queryWithProvider(\n provider: NbsProvider,\n options: QueryOptions = {},\n source: SourceMeta = sourceNow(),\n): Promise<QueryResult> {\n const action = options.action ?? 'search';\n try {\n return await dispatch(provider, options, action, source);\n } catch (error) {\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(error),\n };\n }\n}\n\n/**\n * Query China's National Bureau of Statistics data release database.\n *\n * The return value is always structured. Use `render(result, 'text' | 'table')`\n * for CLI/chat display.\n */\nexport async function query(options: QueryOptions = {}): Promise<QueryResult> {\n const action = options.action ?? 'search';\n const totalTimeoutMs = Math.max(1_000, options.totalTimeoutMs ?? 45_000);\n const controller = new AbortController();\n let totalTimedOut = false;\n\n const onAbort = () => controller.abort(options.signal?.reason);\n if (options.signal) {\n if (options.signal.aborted) controller.abort(options.signal.reason);\n else options.signal.addEventListener('abort', onAbort, { once: true });\n }\n\n const timer = setTimeout(() => {\n totalTimedOut = true;\n controller.abort(new DOMException('Total query timeout', 'TimeoutError'));\n }, totalTimeoutMs);\n\n const client = createClient({\n timeoutMs: options.timeoutMs,\n cache: SHARED_CACHE,\n limiter: SHARED_LIMITER,\n fetchImpl: options.fetchImpl,\n dispatcher: options.dispatcher,\n logger: options.debug\n ? (options.logger ?? ((message, detail) => console.error(message, detail)))\n : undefined,\n });\n const provider = new NbsProviderImpl(client);\n\n try {\n return await dispatch(provider, { ...options, signal: controller.signal }, action, sourceNow());\n } catch (error) {\n if (totalTimedOut) {\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(timeoutError(totalTimeoutMs)),\n };\n }\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(error),\n };\n } finally {\n clearTimeout(timer);\n options.signal?.removeEventListener('abort', onAbort);\n }\n}\n\nexport { TtlCache } from './cache.js';\nexport type { CircuitBreakerOptions, NbsClientOptions } from './client.js';\nexport { NbsClient } from './client.js';\nexport { isNbsError, NbsError } from './errors.js';\nexport { NbsProviderImpl } from './nbs-provider.js';\nexport { RateLimiter } from './rate-limiter.js';\nexport { NATIONAL_REGION, PROVINCES, resolveRegion } from './regions.js';\nexport { inferPeriod } from './resolver.js';\nexport type {\n Action,\n CatalogNode,\n CompareSeries,\n DataPoint,\n ErrorCode,\n Format,\n IndicatorCandidate,\n IndicatorMeta,\n Period,\n QueryError,\n QueryOptions,\n QueryResult,\n SourceMeta,\n} from './types.js';\nexport { render };\n","#!/usr/bin/env node\nimport { pathToFileURL } from 'node:url';\nimport { query, render } from './index.js';\nimport type { Format, QueryOptions, QueryResult } from './types.js';\n\nconst VERSION = '0.3.0';\n\nconst HELP = `china-nbs ${VERSION}\n用一句关键词查询国家统计局官方数据。\n\n用法:\n china-nbs search <指标> [选项]\n china-nbs series <指标> [选项]\n china-nbs compare <指标> --regions 广东,江苏,浙江 [选项]\n china-nbs catalog [选项]\n\n示例:\n china-nbs search GDP --period year --region 全国\n china-nbs series GDP --start 2015 --end 2025\n china-nbs series GDP --period quarter --region 广东 --start 2025Q1 --end 2026Q3\n china-nbs series CPI --start 2025-01 --end 2025-10\n china-nbs series CPI --period month --region 广东 --start 2025-01 --end 2025-10\n china-nbs compare GDP --regions 广东,江苏,浙江 --year 2025\n china-nbs compare GDP --regions 广东,江苏,浙江 --period quarter --start 2025Q1 --end 2025Q4\n china-nbs catalog --code 3 --depth 2\n china-nbs search CPI --json\n\n选项:\n --period <year|quarter|month> 频率;不填则按 start/end/关键词推断\n --region <地区> 单个地区,默认全国\n --regions <a,b,c> compare 用,逗号分隔\n --start <时间> 起始时间,如 2015、2025Q1、2025-01\n --end <时间> 结束时间\n --year <年份> compare 用,等价于 --start/--end 同一年\n --limit <n> search 返回的最新数据点数量,默认 5\n --max-points <n> series 最大数据点,默认 240\n --select <id|序号> 从歧义候选中选择;序号从 1 开始\n --code <1-9> catalog 分类:1 全国月、2 全国季、3 全国年、4 分省月、5 分省季、6 分省年、7 城市月价、8 城市年、9 港澳台月;默认 3\n --pid <节点id> catalog 父节点\n --depth <1|2|3> catalog 展开深度,默认 1\n --json 输出 JSON\n --table 输出表格\n --no-cache 跳过本次缓存\n --debug 输出请求日志到 stderr\n --timeout <ms> 单请求超时,默认 20000\n --total-timeout <ms> 整次查询超时,默认 45000\n --proxy <url> 使用 HTTP(S) 代理;需要额外安装 undici\n -h, --help 显示帮助\n -v, --version 显示版本\n\n退出码:0 成功,1 参数错误,2 未找到,3 上游错误,4 歧义。\n`;\n\ninterface ParsedCli {\n command: string;\n query: string;\n options: QueryOptions;\n format: Format;\n select?: string;\n proxy?: string;\n}\n\nfunction parseInteger(value: string | undefined, name: string): number | undefined {\n if (value === undefined) return undefined;\n const number = Number(value);\n if (!Number.isFinite(number) || !Number.isInteger(number)) {\n throw new Error(`${name} 需要整数,收到:${value}`);\n }\n return number;\n}\n\nfunction parseArgs(argv: string[]): ParsedCli | { help: true } | { version: true } {\n if (argv.length === 0 || argv.includes('--help') || argv.includes('-h')) return { help: true };\n if (argv.includes('--version') || argv.includes('-v')) return { version: true };\n\n const command = argv[0];\n if (!command) return { help: true };\n const known = new Set(['search', 'series', 'compare', 'catalog', 'mcp']);\n if (!known.has(command)) {\n throw new Error(`未知命令:${command}`);\n }\n\n const options: QueryOptions = { action: command as QueryOptions['action'] };\n const positional: string[] = [];\n let format: Format = 'text';\n let select: string | undefined;\n let proxy: string | undefined;\n\n for (let index = 1; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) continue;\n if (!arg.startsWith('-')) {\n positional.push(arg);\n continue;\n }\n\n const next = (): string | undefined => {\n index += 1;\n return argv[index];\n };\n\n switch (arg) {\n case '--period': {\n const value = next();\n if (value !== 'year' && value !== 'quarter' && value !== 'month') {\n throw new Error('--period 只支持 year、quarter、month');\n }\n options.period = value;\n break;\n }\n case '--region':\n options.region = next();\n break;\n case '--regions':\n options.regions = (next() ?? '')\n .split(/[,,]/)\n .map((item) => item.trim())\n .filter(Boolean);\n break;\n case '--start':\n options.start = next();\n break;\n case '--end':\n options.end = next();\n break;\n case '--year': {\n const value = next();\n options.start = value;\n options.end = value;\n break;\n }\n case '--limit':\n options.limit = parseInteger(next(), '--limit');\n break;\n case '--max-points':\n options.maxPoints = parseInteger(next(), '--max-points');\n break;\n case '--select':\n select = next();\n break;\n case '--code':\n options.code = next();\n break;\n case '--pid':\n options.pid = next();\n break;\n case '--depth':\n options.depth = parseInteger(next(), '--depth');\n break;\n case '--timeout':\n options.timeoutMs = parseInteger(next(), '--timeout');\n break;\n case '--total-timeout':\n options.totalTimeoutMs = parseInteger(next(), '--total-timeout');\n break;\n case '--proxy':\n proxy = next();\n break;\n case '--json':\n format = 'json';\n break;\n case '--table':\n format = 'table';\n break;\n case '--text':\n format = 'text';\n break;\n case '--no-cache':\n options.noCache = true;\n break;\n case '--debug':\n options.debug = true;\n break;\n default:\n throw new Error(`未知选项:${arg}`);\n }\n }\n\n const queryText = positional.join(' ').trim();\n if (command !== 'catalog' && command !== 'mcp' && !queryText) {\n throw new Error(`${command} 需要一个指标关键词,例如 GDP、CPI、广东 GDP`);\n }\n\n return {\n command,\n query: queryText,\n options: { ...options, query: queryText || undefined },\n format,\n select,\n ...(proxy === undefined ? {} : { proxy }),\n };\n}\n\nasync function loadProxyDispatcher(proxyUrl: string): Promise<unknown> {\n try {\n const undici = (await import('undici')) as { ProxyAgent: new (url: string) => unknown };\n return new undici.ProxyAgent(proxyUrl);\n } catch (error) {\n throw new Error('使用 --proxy 需要先安装 undici:npm install -g undici(或安装到当前项目)', {\n cause: error,\n });\n }\n}\n\nfunction exitCode(result: QueryResult): number {\n if (result.ok) return 0;\n switch (result.error?.code) {\n case 'INVALID_ARGUMENT':\n case 'INVALID_RANGE':\n case 'UNSUPPORTED_ACTION':\n return 1;\n case 'NOT_FOUND':\n return 2;\n case 'AMBIGUOUS':\n return 4;\n default:\n return 3;\n }\n}\n\nasync function runQuery(parsed: ParsedCli): Promise<QueryResult> {\n if (!parsed.select) return query(parsed.options);\n\n const first = await query(parsed.options);\n if (parsed.select.includes(':')) {\n return query({ ...parsed.options, indicatorId: parsed.select });\n }\n\n const index = Number(parsed.select);\n if (!Number.isInteger(index) || index < 1) {\n throw new Error('--select 需要候选序号(从 1 开始)或 candidate id');\n }\n const candidate = first.candidates?.[index - 1];\n if (!candidate) {\n return first;\n }\n return query({ ...parsed.options, indicatorId: candidate.id });\n}\n\n/** CLI entry point; exported for tests. */\nexport async function run(argv: string[]): Promise<number> {\n let parsed: ParsedCli;\n try {\n const result = parseArgs(argv);\n if ('help' in result) {\n process.stdout.write(HELP);\n return 0;\n }\n if ('version' in result) {\n process.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n parsed = result;\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n\\n${HELP}`);\n return 1;\n }\n\n if (parsed.command === 'mcp') {\n process.stderr.write('MCP server 计划在 v0.3 提供;当前版本请使用 CLI 或 Node API。\\n');\n return 1;\n }\n\n if (parsed.proxy) {\n try {\n parsed.options.dispatcher = await loadProxyDispatcher(parsed.proxy);\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n }\n\n try {\n const result = await runQuery(parsed);\n process.stdout.write(`${render(result, parsed.format)}\\n`);\n return exitCode(result);\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n}\n\nconst isMain =\n process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;\nif (isMain) {\n run(process.argv.slice(2))\n .then((code) => {\n process.exitCode = code;\n })\n .catch((error) => {\n process.stderr.write(\n `${error instanceof Error ? (error.stack ?? error.message) : String(error)}\\n`,\n );\n process.exitCode = 1;\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/cache.ts","../src/catalog-codes.ts","../src/errors.ts","../src/catalog.ts","../src/rate-limiter.ts","../src/client.ts","../src/aliases.ts","../src/cities.ts","../src/regions.ts","../src/curated.ts","../src/resolver.ts","../src/format.ts","../src/series.ts","../src/compare.ts","../src/nbs-provider.ts","../src/index.ts","../src/mcp.ts","../src/cli.ts"],"names":["period","abortError","query","regionNames","region","CITIES","indicatorId","outcome","year","start","end","parseYear","PERIOD_CODE","early","McpServer","z","StdioServerTransport","pathToFileURL","VERSION","startMcpServer","isMain"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAca,QAAA;AAdb,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,cAAA,GAAA;AAcO,IAAM,WAAN,MAAe;AAAA,MACH,OAAA,uBAAc,GAAA,EAAiC;AAAA,MAC/C,QAAA,uBAAe,GAAA,EAA8B;AAAA,MAC7C,UAAA;AAAA,MACA,GAAA;AAAA,MAEjB,WAAA,CAAY,OAAA,GAAwB,EAAC,EAAG;AACtC,QAAA,IAAA,CAAK,aAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,cAAc,GAAG,CAAA;AACvD,QAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,IAAA,CAAK,GAAA;AAAA,MACjC;AAAA,MAEA,IAAI,IAAA,GAAe;AACjB,QAAA,OAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,MACtB;AAAA,MAEA,IAAO,GAAA,EAA4B;AACjC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAClC,QAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,QAAA,IAAI,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,GAAA,EAAI,EAAG;AACjC,UAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,UAAA,OAAO,MAAA;AAAA,QACT;AAEA,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAC3B,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf;AAAA,MAEA,GAAA,CAAO,GAAA,EAAa,KAAA,EAAU,KAAA,EAAqB;AACjD,QAAA,IAAI,SAAS,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,QAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,EAAE,KAAA,EAAO,WAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,EAAO,CAAA;AAC9D,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,GAAO,IAAA,CAAK,UAAA,EAAY;AAC1C,UAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC1C,UAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,UAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,OAAO,GAAA,EAAmB;AACxB,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,MACzB;AAAA,MAEA,KAAA,GAAc;AACZ,QAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,QAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,MACtB;AAAA,MAEA,MAAM,SAAA,CACJ,GAAA,EACA,OACA,MAAA,EACA,OAAA,GAAiC,EAAC,EACtB;AACZ,QAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AACpB,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAO,GAAG,CAAA;AAC9B,UAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AAAA,QACnC;AAEA,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACtC,QAAA,IAAI,UAAU,OAAO,QAAA;AAErB,QAAA,MAAM,OAAA,GAAU,MAAA,EAAO,CACpB,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,UAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,OAAc,GAAA,CAAI,GAAA,EAAK,OAAO,KAAK,CAAA;AAChD,UAAA,OAAO,KAAA;AAAA,QACT,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,UAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,QAC1B,CAAC,CAAA;AAEH,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAC9B,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACnEO,SAAS,WAAA,CAAY,OAAoBA,OAAAA,EAAoC;AAClF,EAAA,OAAO,aAAA,CAAc,KAAK,CAAA,CAAEA,OAAM,CAAA;AACpC;AAvBA,IAeM,aAAA,EAUO,mBAAA;AAzBb,IAAA,kBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,sBAAA,GAAA;AAeA,IAAM,aAAA,GAAsE;AAAA,MAC1E,UAAU,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,GAAA,EAAK,MAAM,GAAA,EAAI;AAAA,MAChD,UAAU,EAAE,KAAA,EAAO,KAAK,OAAA,EAAS,GAAA,EAAK,MAAM,GAAA,EAAI;AAAA,MAChD,IAAA,EAAM,EAAE,IAAA,EAAM,GAAA;AAAI,KACpB;AAMO,IAAM,mBAAA,GAA8C;AAAA,MACzD,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,0BAAA;AAAA,MACL,GAAA,EAAK,kDAAA;AAAA,MACL,GAAA,EAAK,sCAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACZO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OAAO,KAAA,YAAiB,QAAA;AAC1B;AAEO,SAAS,aAAa,KAAA,EAA4B;AACvD,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,GAAI,MAAM,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK;AAAA,MACvD,GAAI,MAAM,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA;AAAQ,KAClE;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,gCAAA;AAAA,MACT,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,IAC9D,SAAA,EAAW,IAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAEO,SAAS,eAAA,CAAgB,SAAiB,IAAA,EAAyB;AACxE,EAAA,OAAO,IAAI,QAAA,CAAS,kBAAA,EAAoB,OAAA,EAAS,EAAE,MAAM,CAAA;AAC3D;AAEO,SAAS,QAAA,CAAS,OAAA,EAAiB,IAAA,EAAe,OAAA,EAA6B;AACpF,EAAA,OAAO,IAAI,QAAA,CAAS,WAAA,EAAa,SAAS,EAAE,IAAA,EAAM,SAAS,CAAA;AAC7D;AAMO,SAAS,YAAA,CAAa,SAAiB,IAAA,EAAyB;AACrE,EAAA,OAAO,IAAI,QAAA,CAAS,eAAA,EAAiB,OAAA,EAAS,EAAE,MAAM,CAAA;AACxD;AAEO,SAAS,eAAA,CAAgB,QAAgB,WAAA,EAAgC;AAC9E,EAAA,OAAO,IAAI,QAAA,CAAS,kBAAA,EAAoB,CAAA,uDAAA,EAAa,MAAM,CAAA,yCAAA,CAAA,EAAe;AAAA,IACxE,SAAA,EAAW,KAAA;AAAA,IACX,IAAA,EAAM,0MAAA;AAAA,IACN,OAAA,EAAS,WAAA,GAAc,EAAE,WAAA,EAAY,GAAI;AAAA,GAC1C,CAAA;AACH;AAEO,SAAS,aAAA,CAAc,MAAA,EAAgB,OAAA,EAAiB,OAAA,EAA6B;AAC1F,EAAA,OAAO,IAAI,QAAA,CAAS,gBAAA,EAAkB,OAAA,IAAW,CAAA,uDAAA,EAAa,MAAM,CAAA,CAAA,EAAI;AAAA,IACtE,SAAA,EAAW,MAAA,IAAU,GAAA,IAAO,MAAA,KAAW,GAAA;AAAA,IACvC,IAAA,EAAM,kMAAA;AAAA,IACN;AAAA,GACD,CAAA;AACH;AAEO,SAAS,UAAA,CAAW,SAAiB,OAAA,EAA6B;AACvE,EAAA,OAAO,IAAI,QAAA,CAAS,aAAA,EAAe,OAAA,EAAS;AAAA,IAC1C,SAAA,EAAW,KAAA;AAAA,IACX,IAAA,EAAM,2KAAA;AAAA,IACN;AAAA,GACD,CAAA;AACH;AAEO,SAAS,aAAa,SAAA,EAA6B;AACxD,EAAA,OAAO,IAAI,QAAA,CAAS,SAAA,EAAW,CAAA,8BAAA,EAAQ,SAAS,CAAA,QAAA,CAAA,EAAO;AAAA,IACrD,SAAA,EAAW,IAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACP,CAAA;AACH;AAEO,SAAS,gBAAA,CAAiB,YAAA,EAAsB,QAAA,EAAkB,IAAA,EAAyB;AAChG,EAAA,OAAO,IAAI,QAAA,CAAS,cAAA,EAAgB,gFAAA,EAAiB;AAAA,IACnD,SAAA,EAAW,IAAA;AAAA,IACX,MAAM,CAAA,yBAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,YAAA,GAAe,GAAI,CAAC,CAAA,4FAAA,CAAA;AAAA,IAC5C,OAAA,EAAS;AAAA,MACP,IAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAc,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,IAAA,CAAK,YAAY,CAAC;AAAA;AACnD,GACD,CAAA;AACH;AAhHA,IAGa,QAAA;AAHb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAGO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,MACzB,IAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MAET,WAAA,CACE,IAAA,EACA,OAAA,EACA,OAAA,GAAsF,EAAC,EACvF;AACA,QAAA,KAAA,CAAM,OAAA,EAAS,QAAQ,KAAA,KAAU,MAAA,GAAY,SAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA;AACjF,QAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AACtC,QAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,QAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AAAA,MACzB;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACRA,SAAS,OAAO,MAAA,EAAiC;AAC/C,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,CAAO,EAAA;AAAA,IACX,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,SAAS,MAAA,CAAO;AAAA,GAClB;AACF;AAGA,eAAsB,YAAA,CACpB,UACA,OAAA,EACA,IAAA,GAAO,KACP,GAAA,GAAM,EAAA,EACN,QAAQ,CAAA,EACgB;AACxB,EAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,YAAY,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,CACjD,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA,KAAM,GAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CAC3C,KAAK,QAAG,CAAA;AACX,IAAA,MAAM,gBAAgB,CAAA,+CAAA,EAAe,IAAI,CAAA,CAAA,EAAI,CAAA,wBAAA,EAAO,SAAS,CAAA,MAAA,CAAG,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAC5D,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,QAA+C,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,GAAG,CAAA;AAEvE,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,SAAA,EAAW;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAM;AAC5B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ;AAAA,MACtC,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,IAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACxB,MAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,OAAA,CAAQ,QAAQ,SAAA,EAAW;AAC9C,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,GAAA,EAAK,KAAA,CAAM,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG,CAAA;AAAA,MACxD;AACA,MAAA,IAAI,KAAA,CAAM,UAAU,SAAA,EAAW;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,UAAU,SAAA,EAAW;AAC7B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,yEAAA,EAAgB,SAAS,CAAA,4DAAA,CAAiB,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AACxB;AAnEA,IAKM,WAAA,EACA,SAAA;AANN,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gBAAA,GAAA;AAAA,IAAA,kBAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAIA,IAAM,cAAc,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAC5D,IAAM,SAAA,GAAY,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAlB,SAAS,UAAA,GAA2B;AAClC,EAAA,OAAO,IAAI,YAAA,CAAa,4BAAA,EAA8B,YAAY,CAAA;AACpE;AAGO,SAAS,KAAA,CAAM,IAAY,MAAA,EAAqC;AACrE,EAAA,IAAI,EAAA,IAAM,CAAA,EAAG,OAAO,OAAA,CAAQ,OAAA,EAAQ;AACpC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,YAAY,CAAA;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAA,EAAQ;AACR,MAAA,MAAA,CAAO,YAAY,CAAA;AAAA,IACrB,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,EAAQ,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAClE,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,OAAA,EAAQ;AACR,MAAA,OAAA,EAAQ;AAAA,IACV,GAAG,EAAE,CAAA;AACL,IAAA,MAAA,EAAQ,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EAC3D,CAAC,CAAA;AACH;AA9BA,IAoCa,WAAA;AApCb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAoCO,IAAM,cAAN,MAAkB;AAAA,MACN,aAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACT,SAAA,GAA2B,QAAQ,OAAA,EAAQ;AAAA,MAC3C,aAAA,GAAgB,CAAA;AAAA,MAExB,WAAA,CAAY,OAAA,GAA8B,EAAC,EAAG;AAC5C,QAAA,IAAA,CAAK,aAAA,GAAgB,QAAQ,aAAA,IAAiB,GAAA;AAC9C,QAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,GAAA;AACpC,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,KAAA,IAAS,KAAA;AAAA,MACpC;AAAA,MAEA,MAAM,GAAA,CAAO,EAAA,EAAsB,MAAA,EAAkC;AACnE,QAAA,MAAM,WAAW,IAAA,CAAK,SAAA;AACtB,QAAA,IAAI,OAAA;AACJ,QAAA,IAAA,CAAK,SAAA,GAAY,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAC9C,UAAA,OAAA,GAAU,OAAA;AAAA,QACZ,CAAC,CAAA;AAED,QAAA,MAAM,QAAA;AACN,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,aAAA;AAClC,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,IAAA,CAAK,QAAQ,CAAA,GAAI,OAAA;AAC9E,UAAA,IAAI,OAAO,CAAA,EAAG,MAAM,IAAA,CAAK,SAAA,CAAU,MAAM,MAAM,CAAA;AAC/C,UAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,GAAA,EAAI;AAC9B,UAAA,OAAO,MAAM,EAAA,EAAG;AAAA,QAClB,CAAA,SAAE;AACA,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACCA,SAASC,WAAAA,GAA2B;AAClC,EAAA,OAAO,IAAI,YAAA,CAAa,4BAAA,EAA8B,YAAY,CAAA;AACpE;AAEA,SAAS,iBAAA,CAAkB,QAAiC,SAAA,EAAgC;AAC1F,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,CAAW,KAAA,CAAMA,aAAY,CAAA;AACzD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,UAAA,CAAW,KAAA,CAAMA,aAAY,CAAA;AAAA,gBACrC,gBAAA,CAAiB,OAAA,EAAS,eAAe,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,UAAA,CAAW,KAAA,CAAM,IAAI,YAAA,CAAa,oBAAA,EAAsB,cAAc,CAAC,CAAA;AAAA,EACzE,GAAG,SAAS,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,UAAU,MAAM,QAAA;AAAA,IAChB,SAAS,MAAM;AACb,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,aAAa,CAAA;AAAA,IACpD;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CAAQ,SAAiB,IAAA,EAAsB;AACtD,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AACnE;AAEA,SAAS,QAAA,CACP,OAAA,EACA,IAAA,EACAC,MAAAA,EACQ;AACR,EAAA,MAAM,MAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAC,CAAA;AAC1C,EAAA,IAAIA,MAAAA,EAAO;AACT,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQA,MAAK,CAAA,EAAG;AAChD,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI;AACzC,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACzC;AAAA,EACF;AACA,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAlHA,IAYM,gBAAA,EACA,kBAAA,EAEA,kBAAA,EACA,mBAAA,EACA,sBAAA,EA4GO,SAAA;AA7Hb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAAA,IAAA,UAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAQA,IAAA,iBAAA,EAAA;AAGA,IAAM,gBAAA,GAAmB,iEAAA;AACzB,IAAM,kBAAA,GACJ,6GAAA;AACF,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,sBAAA,GAAyB,GAAA;AA4GxB,IAAM,YAAN,MAAgB;AAAA,MACZ,OAAA;AAAA,MACA,KAAA;AAAA,MACQ,SAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA,iBAAA;AAAA,MACA,GAAA;AAAA,MACT,mBAAA,GAAsB,CAAA;AAAA,MACtB,eAAA,GAAiC,IAAA;AAAA,MAEzC,WAAA,CAAY,OAAA,GAA4B,EAAC,EAAG;AAC1C,QAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,gBAAA;AAClC,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,kBAAA;AACtC,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,kBAAA;AACtC,QAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,GAAA;AACpC,QAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACxC,QAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,YAAA,IAAgB,sBAAA;AAC5C,QAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,IAAI,QAAA,EAAS;AAC3C,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AACtC,QAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA;AAC1B,QAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,QAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,KAAA,IAAS,KAAA;AAClC,QAAA,MAAM,UAAU,OAAA,CAAQ,cAAA,KAAmB,QAAQ,MAAA,GAAa,OAAA,CAAQ,kBAAkB,EAAC;AAC3F,QAAA,IAAA,CAAK,iBAAiB,OAAA,KAAY,MAAA;AAClC,QAAA,IAAA,CAAK,0BAA0B,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,EAAS,oBAAoB,CAAC,CAAA;AACzE,QAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,EAAS,cAAc,GAAM,CAAA;AAClE,QAAA,IAAA,CAAK,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,IAAA,CAAK,GAAA;AAC/B,QAAA,IAAA,CAAK,OAAA,GACH,OAAA,CAAQ,OAAA,IACR,IAAI,WAAA,CAAY;AAAA,UACd,eAAe,OAAA,CAAQ,aAAA;AAAA,UACvB,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,OAAO,OAAA,CAAQ;AAAA,SAChB,CAAA;AAAA,MACL;AAAA,MAEA,MAAM,OAAA,CAAW,IAAA,EAAc,OAAA,GAA0B,EAAC,EAAe;AACvE,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,QAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,IAAc,CAAA;AAClC,QAAA,IAAI,QAAA,IAAY,MAAM,CAAA,EAAG;AACvB,UAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,QAAA,EAAU,GAAA,EAAK,MAAM,IAAA,CAAK,gBAAA,CAAoB,IAAA,EAAM,OAAO,CAAA,EAAG;AAAA,YACxF,SAAS,OAAA,CAAQ;AAAA,WAClB,CAAA;AAAA,QACH;AACA,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAoB,IAAA,EAAM,OAAO,CAAA;AAAA,MAC/C;AAAA,MAEA,MAAc,gBAAA,CAAoB,IAAA,EAAc,OAAA,EAAqC;AACnF,QAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAC7B,QAAA,IAAI,SAAA;AACJ,QAAA,KAAA,IAAS,UAAU,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,UAAA,EAAY,WAAW,CAAA,EAAG;AAC9D,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA;AAAA,cAChC,MAAM,IAAA,CAAK,WAAA,CAAe,IAAA,EAAM,OAAO,CAAA;AAAA,cACvC,OAAA,CAAQ;AAAA,aACV;AACA,YAAA,IAAA,CAAK,mBAAA,GAAsB,CAAA;AAC3B,YAAA,OAAO,MAAA;AAAA,UACT,SAAS,KAAA,EAAO;AACd,YAAA,SAAA,GAAY,KAAA;AACZ,YAAA,MAAM,SAAA,GAAY,KAAA,YAAiB,QAAA,IAAY,KAAA,CAAM,SAAA;AACrD,YAAA,IAAI,CAAC,SAAA,IAAa,OAAA,IAAW,KAAK,UAAA,IAAc,OAAA,CAAQ,QAAQ,OAAA,EAAS;AACvE,cAAA,IAAA,CAAK,cAAc,KAAK,CAAA;AACxB,cAAA;AAAA,YACF;AACA,YAAA,MAAM,IAAA,GAAO,KAAK,YAAA,GAAe,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,IAAA,CAAK,QAAQ,CAAA;AACzE,YAAA,IAAA,CAAK,MAAA,GAAS,oBAAoB,EAAE,IAAA,EAAM,SAAS,OAAA,GAAU,CAAA,EAAG,MAAM,CAAA;AACtE,YAAA,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,UAC3C;AAAA,QACF;AACA,QAAA,MAAM,SAAA;AAAA,MACR;AAAA,MAEQ,oBAAoB,IAAA,EAAoB;AAC9C,QAAA,IAAI,CAAC,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,oBAAoB,IAAA,EAAM;AAC3D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,eAAA;AAClC,QAAA,IAAI,OAAA,IAAW,KAAK,iBAAA,EAAmB;AAErC,UAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,UAAA,IAAA,CAAK,sBAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,0BAA0B,CAAC,CAAA;AACvE,UAAA;AAAA,QACF;AACA,QAAA,MAAM,iBAAiB,IAAA,CAAK,iBAAA,GAAoB,OAAA,EAAS,IAAA,CAAK,qBAAqB,IAAI,CAAA;AAAA,MACzF;AAAA,MAEQ,cAAc,KAAA,EAAsB;AAC1C,QAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AAC1B,QAAA,IAAI,EAAE,KAAA,YAAiB,QAAA,CAAA,IAAa,CAAC,MAAM,SAAA,EAAW;AACtD,QAAA,IAAA,CAAK,mBAAA,IAAuB,CAAA;AAC5B,QAAA,IAAI,KAAK,mBAAA,IAAuB,IAAA,CAAK,uBAAA,IAA2B,IAAA,CAAK,oBAAoB,IAAA,EAAM;AAC7F,UAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,GAAA,EAAI;AAChC,UAAA,IAAA,CAAK,SAAS,gBAAA,EAAkB,EAAE,QAAA,EAAU,IAAA,CAAK,qBAAqB,CAAA;AAAA,QACxE;AAAA,MACF;AAAA,MAEA,MAAc,WAAA,CAAe,IAAA,EAAc,OAAA,EAAqC;AAC9E,QAAA,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,QAAQ,KAAK,CAAA;AACtD,QAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AACjC,QAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,SAAA;AAC5C,QAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA;AAC1D,QAAA,MAAM,OAAA,GAAkC;AAAA,UACtC,MAAA,EAAQ,mCAAA;AAAA,UACR,OAAA,EAAS,4BAAA;AAAA,UACT,cAAc,IAAA,CAAK,SAAA;AAAA,UACnB,kBAAA,EAAoB,gBAAA;AAAA,UACpB,eAAA,EAAiB,WAAA;AAAA,UACjB,GAAG,OAAA,CAAQ;AAAA,SACb;AAEA,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,UAAA,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA;AAClC,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,gCAAA;AAAA,QAC5B;AAEA,QAAA,IAAA,CAAK,SAAS,SAAA,EAAW,EAAE,MAAA,EAAQ,GAAA,EAAK,MAAM,CAAA;AAC9C,QAAA,IAAI;AACF,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAA+C;AAAA,cACnD,MAAA;AAAA,cACA,OAAA;AAAA,cACA,IAAA;AAAA,cACA,QAAQ,MAAA,CAAO;AAAA,aACjB;AACA,YAAA,IAAI,IAAA,CAAK,eAAe,KAAA,CAAA,EAAW;AACjC,cAAC,IAAA,CAA6C,aAAa,IAAA,CAAK,UAAA;AAAA,YAClE;AACA,YAAA,QAAA,GAAW,MAAM,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAI,CAAA;AAAA,UAC3C,SAAS,KAAA,EAAO;AACd,YAAA,IAAI,MAAA,CAAO,QAAA,EAAS,EAAG,MAAM,aAAa,SAAS,CAAA;AACnD,YAAA,IAAI,OAAA,CAAQ,QAAQ,OAAA,EAAS;AAC3B,cAAA,MAAM,IAAI,QAAA,CAAS,SAAA,EAAW,kCAAS,EAAE,SAAA,EAAW,OAAO,CAAA;AAAA,YAC7D;AACA,YAAA,MAAM,KAAA;AAAA,UACR;AAEA,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK,MAAM,eAAA,CAAgB,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AACtF,UAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,YAAA,MAAM,IAAI,QAAA,CAAS,uBAAA,EAAyB,4DAAA,EAAiB;AAAA,cAC3D,SAAA,EAAW,IAAA;AAAA,cACX,IAAA,EAAM,sFAAA;AAAA,cACN,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA;AAAO,aACpC,CAAA;AAAA,UACH;AACA,UAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAC1B,YAAA,MAAM,cAAc,QAAA,CAAS,MAAA,EAAQ,CAAA,uDAAA,EAAa,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI;AAAA,cACnE,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,aAC/B,CAAA;AAAA,UACH;AACA,UAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,YAAA,MAAM,IAAI,QAAA,CAAS,gBAAA,EAAkB,CAAA,uDAAA,EAAa,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI;AAAA,cACnE,SAAA,EAAW,KAAA;AAAA,cACX,IAAA,EAAM,wGAAA;AAAA,cACN,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,aAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAE,aACrE,CAAA;AAAA,UACH;AAEA,UAAA,IAAI,MAAA;AACJ,UAAA,IAAI;AACF,YAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,UAC1B,CAAA,CAAA,MAAQ;AACN,YAAA,MAAM,WAAW,iDAAA,EAAgB;AAAA,cAC/B,QAAQ,QAAA,CAAS,MAAA;AAAA,cACjB,WAAA,EAAa,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAAA,cAChD,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG;AAAA,aAC/B,CAAA;AAAA,UACH;AAEA,UAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,YAAA,MAAM,UAAA,CAAW,gEAAc,EAAE,WAAA,EAAa,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA;AAAA,UACpE;AAEA,UAAA,MAAM,QAAA,GAAW,MAAA;AACjB,UAAA,IAAI,QAAA,CAAS,YAAY,KAAA,EAAO;AAC9B,YAAA,MAAM,aAAA,CAAc,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,WAAW,oEAAA,EAAe;AAAA,cACtE,OAAO,QAAA,CAAS;AAAA,aACjB,CAAA;AAAA,UACH;AACA,UAAA,IAAI,QAAA,CAAS,KAAA,KAAU,KAAA,CAAA,IAAa,QAAA,CAAS,UAAU,GAAA,EAAO;AAC5D,YAAA,MAAM,aAAA,CAAc,SAAS,MAAA,EAAQ,QAAA,CAAS,WAAW,CAAA,+BAAA,EAAS,QAAA,CAAS,KAAK,CAAA,CAAA,EAAI;AAAA,cAClF,OAAO,QAAA,CAAS;AAAA,aACjB,CAAA;AAAA,UACH;AACA,UAAA,IAAI,EAAE,UAAU,QAAA,CAAA,EAAW;AACzB,YAAA,MAAM,UAAA,CAAW,0DAAkB,EAAE,WAAA,EAAa,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA;AAAA,UACxE;AACA,UAAA,OAAO,QAAA,CAAS,IAAA;AAAA,QAClB,SAAS,KAAA,EAAO;AACd,UAAA,IAAI,MAAA,CAAO,QAAA,EAAS,EAAG,MAAM,aAAa,SAAS,CAAA;AACnD,UAAA,MAAM,KAAA;AAAA,QACR,CAAA,SAAE;AACA,UAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,QACjB;AAAA,MACF;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjRO,SAAS,UAAU,IAAA,EAAsB;AAC9C,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,OAAA,CAAQ,mBAAmB,EAAE,CAAA,CAC7B,OAAA,CAAQ,iCAAA,EAAmC,EAAE,CAAA,CAC7C,OAAA,CAAQ,QAAA,EAAU,EAAE,EACpB,IAAA,EAAK;AACV;AAGO,SAAS,cAAcA,MAAAA,EAAyB;AACrD,EAAA,MAAM,UAAA,GAAa,UAAUA,MAAK,CAAA;AAClC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,IAAI,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAErC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnD,IAAA,MAAM,aAAA,GAAgB,UAAU,GAAG,CAAA;AACnC,IAAA,IACE,UAAA,KAAe,iBACf,UAAA,CAAW,QAAA,CAAS,aAAa,CAAA,IACjC,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA,EACjC;AACA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACnC;AAGO,SAAS,YAAYA,MAAAA,EAAyB;AACnD,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,KAAA,MAAW,IAAA,IAAQA,MAAAA,CAAM,KAAA,CAAM,iCAAiC,CAAA,EAAG;AACjE,IAAA,MAAM,UAAA,GAAa,UAAU,IAAI,CAAA;AACjC,IAAA,IAAI,UAAA,CAAW,MAAA,IAAU,CAAA,IAAK,CAAC,UAAA,CAAW,IAAI,UAAU,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,KAAA,GAAQ,UAAUA,MAAK,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,IAAK,CAAC,UAAA,CAAW,IAAI,KAAK,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACjE,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA;AACnB;AAGO,SAAS,WAAA,CAAYA,QAAeC,YAAAA,EAA+B;AACxE,EAAA,IAAI,MAAA,GAASD,MAAAA;AACb,EAAA,KAAA,MAAW,QAAQC,YAAAA,EAAa;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,kCAAA,EAAoC,EAAE,CAAA;AACjE,IAAA,KAAA,MAAW,SAAA,IAAa,CAAC,IAAA,EAAM,KAAK,CAAA,EAAG;AACrC,MAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACzB,QAAA,MAAA,GAAS,OAAO,OAAA,CAAQ,IAAI,OAAO,SAAA,EAAW,GAAG,GAAG,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAC1C;AAcO,SAAS,MAAA,CAAO,MAAc,KAAA,EAAmC;AACtE,EAAA,MAAM,UAAA,GAAa,UAAU,IAAI,CAAA;AACjC,EAAA,OAAO,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,WAAW,QAAA,CAAS,SAAA,CAAU,IAAI,CAAC,CAAC,CAAA;AAClE;AAhIA,IACa,SAwBP,UAAA,EAwFO,aAAA;AAjHb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gBAAA,GAAA;AACO,IAAM,OAAA,GAAoC;AAAA,MAC/C,GAAA,EAAK,CAAC,sCAAA,EAAU,sCAAA,EAAU,0BAAM,CAAA;AAAA,MAChC,GAAA,EAAK,CAAC,kDAAA,EAAY,sCAAQ,CAAA;AAAA,MAC1B,GAAA,EAAK,CAAC,oEAAA,EAAe,4CAAS,CAAA;AAAA,MAC9B,YAAA,EAAI,CAAC,wDAAA,EAAa,0BAAM,CAAA;AAAA,MACxB,YAAA,EAAI,CAAC,sCAAA,EAAU,4CAAS,CAAA;AAAA,MACxB,YAAA,EAAI,CAAC,0BAAA,EAAQ,gCAAA,EAAS,oBAAK,CAAA;AAAA,MAC3B,kBAAA,EAAK,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,MACxB,YAAA,EAAI,CAAC,wDAAA,EAAa,gCAAO,CAAA;AAAA,MACzB,wBAAA,EAAM,CAAC,wDAAA,EAAa,oEAAa,CAAA;AAAA,MACjC,8BAAA,EAAO,CAAC,wDAAA,EAAa,4CAAS,CAAA;AAAA,MAC9B,0CAAA,EAAS,CAAC,wDAAA,EAAa,gCAAO,CAAA;AAAA,MAC9B,wBAAA,EAAM,CAAC,kDAAA,EAAY,sCAAQ,CAAA;AAAA,MAC3B,gDAAA,EAAU,CAAC,0EAAA,EAAgB,0BAAM,CAAA;AAAA,MACjC,YAAA,EAAI,CAAC,0BAAA,EAAQ,gCAAO,CAAA;AAAA,MACpB,wBAAA,EAAM,CAAC,gCAAO,CAAA;AAAA,MACd,kBAAA,EAAK,CAAC,4CAAA,EAAW,gCAAA,EAAS,0BAAM,CAAA;AAAA,MAChC,kBAAA,EAAK,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,MACxB,kBAAA,EAAK,CAAC,sCAAA,EAAU,gCAAO,CAAA;AAAA,MACvB,YAAA,EAAI,CAAC,kDAAA,EAAY,gCAAO,CAAA;AAAA,MACxB,YAAA,EAAI,CAAC,sCAAQ;AAAA,KACf;AAGA,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,MACzB,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AA0DM,IAAM,aAAA,GAAgB;AAAA,MAC3B,KAAA,EAAO,CAAC,cAAA,EAAM,cAAA,EAAM,gBAAM,cAAA,EAAM,oBAAA,EAAO,gBAAM,QAAG,CAAA;AAAA,MAChD,MAAA,EAAQ,CAAC,cAAA,EAAM,cAAA,EAAM,gBAAM,cAAA,EAAM,cAAA,EAAM,gBAAM,cAAI,CAAA;AAAA,MACjD,OAAO,CAAC,cAAA,EAAM,kBAAA,EAAU,8BAAA,EAAY,gCAAY,cAAI,CAAA;AAAA,MACpD,SAAA,EAAW,CAAC,cAAA,EAAM,cAAI,CAAA;AAAA,MACtB,YAAA,EAAc,CAAC,oBAAA,EAAO,cAAA,EAAM,gBAAM,cAAI,CAAA;AAAA,MACtC,UAAA,EAAY,CAAC,cAAA,EAAM,0BAAM,CAAA;AAAA,MACzB,OAAA,EAAS,CAAC,cAAA,EAAM,cAAA,EAAM,cAAI,CAAA;AAAA,MAC1B,aAAA,EAAe,CAAC,oBAAA,EAAO,oBAAK,CAAA;AAAA,MAC5B,YAAA,EAAc,CAAC,cAAA,EAAM,oBAAK;AAAA,KAC5B;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3HA,IAWa,MAAA;AAXb,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAWO,IAAM,MAAA,GAAS;AAAA,MACpB,EAAE,IAAA,EAAM,0BAAA,EAAQ,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,oBAAK,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACvE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,gCAAA,EAAS,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,0BAAM,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACzE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,0BAAA,EAAQ,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,oBAAK,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACvE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,oBAAA,EAAO,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,cAAI,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAAA,MACrE,EAAE,IAAA,EAAM,gCAAA,EAAS,KAAA,EAAO,cAAA,EAAgB,SAAS,CAAC,0BAAM,CAAA,EAAG,KAAA,EAAO,MAAA;AAAO,KAC3E;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC2BO,SAAS,QAAQC,OAAAA,EAAwD;AAC9E,EAAA,OAAOA,OAAAA,CAAO,KAAA,KAAUA,OAAAA,CAAO,QAAA,GAAW,UAAA,GAAa,UAAA,CAAA;AACzD;AAEO,SAAS,WAAA,GAAwB;AACtC,EAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,CAACA,OAAAA,KAAW,CAACA,QAAO,IAAA,EAAM,GAAGA,OAAAA,CAAO,OAAO,CAAC,CAAA;AACzE;AAGO,SAAS,cAAc,KAAA,EAA0C;AACtE,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,EAAK,EAAG,OAAO,eAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,UAAU,KAAK,CAAA;AAElC,EAAA,KAAA,MAAWA,WAAU,WAAA,EAAa;AAChC,IAAA,IAAI,SAAA,CAAUA,OAAAA,CAAO,IAAI,CAAA,KAAM,YAAY,OAAOA,OAAAA;AAClD,IAAA,IAAIA,OAAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,UAAU,KAAK,CAAA,KAAM,UAAU,CAAA,EAAG,OAAOA,OAAAA;AAAA,EAC9E;AAGA,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,CAACA,OAAAA,KAAW;AAChD,IAAA,MAAM,KAAA,GAAQ,CAACA,OAAAA,CAAO,IAAA,EAAM,GAAGA,OAAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA;AAC5D,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACpF,CAAC,CAAA;AAED,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,WAAW,CAAC,CAAA;AAChD,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,oBAAoB,IAAA,EAAyC;AAC3E,EAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAK,EAAG,OAAO,MAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,UAAU,IAAI,CAAA;AACjC,EAAA,MAAM,UAAU,WAAA,CAAY,MAAA;AAAA,IAC1B,CAACA,YACC,CAACA,OAAAA,CAAO,YACR,CAACA,OAAAA,CAAO,MAAM,GAAGA,OAAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS,UAAA,CAAW,SAAS,SAAA,CAAU,IAAI,CAAC,CAAC;AAAA,GACxF;AACA,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA,CAAK,CAACA,OAAAA,KAAWA,OAAAA,CAAO,UAAU,MAAM,CAAA;AAC7D,EAAA,IAAI,MAAM,OAAO,IAAA;AACjB,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAC7C;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,MAAM,UAAA,GAAa,UAAU,KAAK,CAAA;AAClC,EAAA,OAAO,WAAA,CAAY,MAAA;AAAA,IAAO,CAACA,OAAAA,KACzB,CAACA,OAAAA,CAAO,IAAA,EAAM,GAAGA,OAAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AAC9C,MAAA,MAAM,SAAA,GAAY,UAAU,IAAI,CAAA;AAChC,MAAA,OAAO,UAAU,QAAA,CAAS,UAAU,CAAA,IAAK,UAAA,CAAW,SAAS,SAAS,CAAA;AAAA,IACxE,CAAC;AAAA,GACH,CACG,MAAM,CAAA,EAAG,CAAC,EACV,GAAA,CAAI,CAACA,OAAAA,KAAWA,OAAAA,CAAO,IAAI,CAAA;AAChC;AA/HA,IAWa,eAAA,EAQA,WA2CAC,OAAAA,EAOA,WAAA;AArEb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gBAAA,GAAA;AAAA,IAAA,YAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAUO,IAAM,eAAA,GAAgC;AAAA,MAC3C,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO,cAAA;AAAA,MACP,OAAA,EAAS,CAAC,cAAA,EAAM,cAAA,EAAM,gBAAM,0BAAM,CAAA;AAAA,MAClC,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAEO,IAAM,SAAA,GAA4B;AAAA,MACvC,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,sCAAA,EAAU,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,oBAAA,EAAO,cAAI,CAAA,EAAE;AAAA,MAChE,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,0BAAA,EAAQ,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,oBAAK,CAAA,EAAE;AAAA,MACxD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,4CAAA,EAAW,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MAC1D,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,gCAAA,EAAS,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACxD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,4CAAA,EAAW,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MAC1D,EAAE,MAAM,kDAAA,EAAY,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MAC3D,EAAE,MAAM,oBAAA,EAAO,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MACtD,EAAE,MAAM,4CAAA,EAAW,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA,EAAE;AAAA,MAC1D,EAAE,MAAM,4CAAA,EAAW,KAAA,EAAO,gBAAgB,OAAA,EAAS,CAAC,cAAI,CAAA;AAAE,KAC5D;AAQO,IAAMA,OAAAA,GAAyB,MAAA,CAAiB,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACpE,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAA,EAAS,CAAC,GAAG,IAAA,CAAK,OAAO,CAAA;AAAA,MACzB,KAAA,EAAO;AAAA,KACT,CAAE,CAAA;AAEK,IAAM,cAA8B,CAAC,eAAA,EAAiB,GAAG,SAAA,EAAW,GAAGA,OAAM,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACmwD7E,SAAS,WAAWH,MAAAA,EAAuB;AAChD,EAAA,IAAI,OAAA,GAAU,WAAA,CAAYA,MAAAA,EAAO,WAAA,EAAa,CAAA;AAC9C,EAAA,OAAA,GAAU,QACP,OAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA,CAC/B,OAAA,CAAQ,2BAA2B,GAAG,CAAA,CACtC,OAAA,CAAQ,iCAAA,EAAmC,GAAG,CAAA,CAC9C,OAAA,CAAQ,eAAe,GAAG,CAAA,CAC1B,QAAQ,cAAA,EAAgB,GAAG,CAAA,CAC3B,OAAA,CAAQ,gBAAgB,GAAG,CAAA,CAC3B,QAAQ,oBAAA,EAAsB,GAAG,EACjC,OAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA,CAC/B,OAAA,CAAQ,wCAAwC,GAAG,CAAA,CACnD,QAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACR,EAAA,OAAO,UAAU,OAAO,CAAA;AAC1B;AAEO,SAAS,WAAA,CACdA,MAAAA,EACAF,OAAAA,EACA,WAAA,EAC0B;AAC1B,EAAA,MAAM,UAAA,GAAa,WAAWE,MAAK,CAAA;AACnC,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AAExB,EAAA,IAAI,IAAA;AAEJ,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,cAAcF,OAAAA,EAAQ;AAChC,IAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,KAAA,IAAS,KAAA,CAAM,gBAAgB,WAAA,EAAa;AAEtE,IAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,EAAS;AACjC,MAAA,MAAM,SAAA,GAAY,UAAU,KAAK,CAAA;AACjC,MAAA,IAAI,CAAC,SAAA,IAAa,UAAA,KAAe,SAAA,EAAW;AAC5C,MAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,MAAA;AAC9B,MAAA,IAAI,CAAC,QAAQ,KAAA,GAAQ,IAAA,CAAK,OAAO,IAAA,GAAO,EAAE,OAAO,KAAA,EAAM;AAAA,IACzD;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,EAAM,KAAA;AACf;AAh3DA,IA0Ba,OAAA;AA1Bb,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gBAAA,GAAA;AAAA,IAAA,YAAA,EAAA;AACA,IAAA,YAAA,EAAA;AAyBO,IAAM,OAAA,GAA0B;AAAA,MACrC;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,sCAAA;AAAA,UACA,0BAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,wBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,iBAAA;AAAA,UACA,uBAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,wDAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA,iBAAA;AAAA,UACA,uBAAA;AAAA,UACA,sCAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,wDAAA;AAAA,UACA,0BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS,CAAC,iBAAA,EAAS,uBAAA,EAAU,oDAAY,wDAAW,CAAA;AAAA,QACpD,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,oBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,kDAAA;AAAA,UACA,8DAAA;AAAA,UACA,8DAAA;AAAA,UACA,sCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,8BAAA;AAAA;AAAA,QAET,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,kCAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW;AAAA,WACb;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW,IAAA;AAAA,YACX,OAAA,EAAS;AAAA,WACX;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW,IAAA;AAAA,YACX,OAAA,EAAS;AAAA,WACX;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,OAAA,EAAS;AAAA;AACX;AACF,OACF;AAAA,MACA;AAAA,QACE,GAAA,EAAK,oBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,iBAAA;AAAA,UACA,kDAAA;AAAA,UACA,8DAAA;AAAA,UACA,8DAAA;AAAA,UACA,sCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,8BAAA;AAAA;AAAA;AAAA,QAGT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,kCAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW;AAAA,WACb;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW,IAAA;AAAA,YACX,OAAA,EAAS;AAAA,WACX;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,SAAA,EAAW,IAAA;AAAA,YACX,OAAA,EAAS;AAAA,WACX;AAAA,UACA;AAAA,YACE,GAAA,EAAK,kCAAA;AAAA,YACL,OAAA,EAAS,kCAAA;AAAA,YACT,OAAA,EAAS;AAAA;AACX;AACF,OACF;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,SAAS,CAAC,iBAAA,EAAS,gEAAc,KAAA,EAAO,kDAAA,EAAY,wCAAU,cAAI,CAAA;AAAA,QAClE,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,qEAAA;AAAA,QACb,IAAA,EAAM,kBAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,OAAA,EAAS,CAAC,KAAA,EAAO,oEAAA,EAAe,4CAAS,CAAA;AAAA,QACzC,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,uFAAA;AAAA,QACb,IAAA,EAAM,kBAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,oBAAA,EAAO,kCAAS,0BAAM,CAAA;AAAA,QACtC,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,+CAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,SAAS,CAAC,KAAA,EAAO,sCAAA,EAAU,sCAAA,EAAU,4BAAQ,0BAAM,CAAA;AAAA,QACnD,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,eAAA;AAAA,QACL,SAAS,CAAC,KAAA,EAAO,sCAAA,EAAU,sCAAA,EAAU,4BAAQ,0BAAM,CAAA;AAAA,QACnD,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,gFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,MAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,wDAAA,EAAa,4BAAQ,sCAAQ,CAAA;AAAA,QAC7C,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,cAAA;AAAA,UACA,sCAAA;AAAA,UACA,4CAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,gFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,SAAS,CAAC,0BAAA,EAAQ,kDAAA,EAAY,sCAAA,EAAU,wCAAU,sCAAQ,CAAA;AAAA,QAC1D,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,gCAAA,EAAS,cAAI,CAAA;AAAA,QAC/B,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,SAAS,CAAC,oBAAA,EAAO,gCAAA,EAAS,4CAAA,EAAW,4BAAQ,gCAAO,CAAA;AAAA,QACpD,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,oEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,gDAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,IAAA,EAAM,iMAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,yBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,oBAAA;AAAA,QACL,OAAA,EAAS,CAAC,KAAA,EAAO,oEAAA,EAAe,4CAAS,CAAA;AAAA,QACzC,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,mGAAA;AAAA,QACb,IAAA,EAAM,8BAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,8BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uBAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,wDAAA,EAAa,4BAAQ,0EAAc,CAAA;AAAA,QACnD,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,gCAAA,EAAS,sEAAe,0EAAc,CAAA;AAAA,QACxD,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,0BAAA;AAAA,UACA,0BAAA;AAAA,UACA,sCAAA;AAAA,UACA,oEAAA;AAAA,UACA,oEAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,oFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,cAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,0BAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,wEAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,gCAAA;AAAA,UACA,4CAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,4CAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,wEAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,4CAAA;AAAA,UACA,wDAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,wEAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,oCAAA;AAAA,QACL,OAAA,EAAS,CAAC,oBAAA,EAAO,4CAAA,EAAW,kCAAS,wDAAW,CAAA;AAAA,QAChD,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,4DAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,4CAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,SAAS,CAAC,0BAAA,EAAQ,sCAAA,EAAU,sCAAA,EAAU,oDAAY,wDAAW,CAAA;AAAA,QAC7D,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,wDAAA,EAAa,4BAAQ,sCAAQ,CAAA;AAAA,QAC7C,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,SAAS,CAAC,cAAA,EAAM,sCAAA,EAAU,kDAAA,EAAY,4BAAQ,kDAAU,CAAA;AAAA,QACxD,IAAA,EAAM,iEAAA;AAAA,QACN,WAAA,EAAa,oGAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,gCAAA;AAAA,QACT,IAAA,EAAM,4IAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,kDAAA,EAAY,wCAAU,8DAAY,CAAA;AAAA,QACpD,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,gCAAA,EAAS,cAAI,CAAA;AAAA,QAC/B,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,yBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,gCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,cAAA;AAAA,UACA,0BAAA;AAAA,UACA,0BAAA;AAAA,UACA,wDAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,oFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,IAAA,EAAM,gIAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,gCAAA,EAAS,wDAAW,CAAA;AAAA,QACxC,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qCAAA;AAAA,QACL,OAAA,EAAS,CAAC,kDAAA,EAAY,4CAAA,EAAW,gCAAO,CAAA;AAAA,QACxC,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,oBAAA;AAAA,QACL,OAAA,EAAS,CAAC,KAAA,EAAO,oEAAA,EAAe,4CAAS,CAAA;AAAA,QACzC,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,mGAAA;AAAA,QACb,IAAA,EAAM,8BAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,8BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,gCAAA;AAAA,UACA,4CAAA;AAAA,UACA,wDAAA;AAAA,UACA,4CAAA;AAAA,UACA,4CAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,4DAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,4CAAA;AAAA,UACA,wDAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,4DAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,cAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,0BAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,oFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,gCAAA;AAAA,UACA,4CAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,kDAAA,EAAY,sCAAA,EAAU,4BAAQ,sCAAQ,CAAA;AAAA,QAChD,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,0BAAA,EAAQ,cAAI,CAAA;AAAA,QAChC,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oEAAA,EAAe,sCAAA,EAAU,wDAAW,CAAA;AAAA,QAC9C,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0EAAA,EAAgB,kDAAA,EAAY,sCAAQ,CAAA;AAAA,QAC9C,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,kDAAA,EAAY,sCAAA,EAAU,0BAAM,CAAA;AAAA,QACtC,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oEAAA,EAAe,sCAAA,EAAU,wDAAW,CAAA;AAAA,QAC9C,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,4BAAQ,sCAAQ,CAAA;AAAA,QAChD,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,4CAAS,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,gDAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,oBAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,oEAAA,EAAe,4FAAiB,CAAA;AAAA,QAClD,IAAA,EAAM,4FAAA;AAAA,QACN,WAAA,EAAa,qGAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAU,CAAA;AAAA,QAC9B,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,gCAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,0BAAA,EAAQ,oBAAK,CAAA;AAAA,QAC7B,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,8DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS,CAAC,cAAA,EAAM,0BAAA,EAAQ,oBAAK,CAAA;AAAA,QAC7B,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,8DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAA,EAAS,kDAAU,CAAA;AAAA,QACxC,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,sCAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,gCAAO,CAAA;AAAA,QAC3B,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,4BAAQ,sCAAQ,CAAA;AAAA,QAChD,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,kEAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,gCAAO,CAAA;AAAA,QAC3B,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,0BAAM,CAAA;AAAA,QACzB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,0BAAM,CAAA;AAAA,QACzB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,4DAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sEAAA,EAAiB,sCAAA,EAAU,4BAAQ,CAAA;AAAA,QAC7C,IAAA,EAAM,sEAAA;AAAA,QACN,WAAA,EAAa,0EAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,4CAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,+BAAA,EAAa,oCAAA,EAAa,kCAAS,iDAAc,CAAA;AAAA,QAC3D,IAAA,EAAM,8EAAA;AAAA,QACN,WAAA,EAAa,kFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,4CAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,kDAAA,EAAY,sCAAA,EAAU,4BAAQ,0EAAc,CAAA;AAAA,QACtD,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,8EAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,4BAAQ,sCAAQ,CAAA;AAAA,QAChD,IAAA,EAAM,8DAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,kDAAA,EAAY,wCAAU,8DAAY,CAAA;AAAA,QACpD,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0EAAA,EAAgB,kDAAA,EAAY,wCAAU,0BAAM,CAAA;AAAA,QACtD,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAA,EAAS,kDAAU,CAAA;AAAA,QACxC,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,sCAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS,CAAC,oBAAA,EAAO,gCAAA,EAAS,8CAAW,0BAAM,CAAA;AAAA,QAC3C,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,+FAAA;AAAA,QACb,IAAA,EAAM,oBAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,IAAA,EAAM,sIAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,4BAAQ,sCAAQ,CAAA;AAAA,QAChD,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,gCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,wDAAA,EAAa,8DAAY,CAAA;AAAA,QAC9C,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,qGAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,wDAAW,CAAA;AAAA,QAC3C,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,0BAAM,CAAA;AAAA,QAC1B,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,gCAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oBAAA,EAAO,0BAAM,CAAA;AAAA,QACvB,IAAA,EAAM,oBAAA;AAAA,QACN,WAAA,EAAa,+CAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,0BAAM,CAAA;AAAA,QACxB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,0BAAM,CAAA;AAAA,QACxB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,wDAAW,CAAA;AAAA,QAChC,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAU,CAAA;AAAA,QAC9B,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,gCAAO,CAAA;AAAA,QAC3B,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oEAAA,EAAe,sCAAA,EAAU,wDAAW,CAAA;AAAA,QAC9C,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oEAAA,EAAe,sCAAA,EAAU,wDAAW,CAAA;AAAA,QAC9C,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,+FAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,4CAAA,EAAW,kDAAU,CAAA;AAAA,QACxC,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,oCAAA;AAAA,QACL,OAAA,EAAS,CAAC,wDAAA,EAAa,4CAAA,EAAW,kDAAU,CAAA;AAAA,QAC5C,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2CAAA;AAAA,QACL,OAAA,EAAS,CAAC,0EAAA,EAAgB,kDAAA,EAAY,sCAAQ,CAAA;AAAA,QAC9C,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sBAAA;AAAA,QACL,OAAA,EAAS,CAAC,oEAAA,EAAe,0BAAA,EAAQ,sBAAO,cAAI,CAAA;AAAA,QAC5C,IAAA,EAAM,oEAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,oBAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,IAAA,EAAM,sIAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,wDAAA;AAAA,UACA,wDAAA;AAAA,UACA,gFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,oFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,oBAAK,CAAA;AAAA,QACxB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,oBAAK,CAAA;AAAA,QACxB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,gCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,oBAAK,CAAA;AAAA,QACvB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,8BAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,6BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,cAAI,CAAA;AAAA,QACtB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,cAAI,CAAA;AAAA,QACtB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,cAAI,CAAA;AAAA,QACtB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,cAAI,CAAA;AAAA,QACtB,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,wDAAA,EAAa,0BAAA,EAAQ,cAAI,CAAA;AAAA,QACnC,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,yCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,0BAAA,EAAQ,0BAAM,CAAA;AAAA,QAClC,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0EAAA,EAAgB,kDAAA,EAAY,sCAAQ,CAAA;AAAA,QAC9C,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,mFAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,IAAA,EAAM,qFAAA;AAAA,QACN,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gFAAA,EAAiB,oEAAA,EAAe,oEAAa,CAAA;AAAA,QACvD,IAAA,EAAM,sFAAA;AAAA,QACN,WAAA,EAAa,0FAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,uCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,+BAAA;AAAA,UACA,oCAAA;AAAA,UACA,iDAAA;AAAA,UACA,sDAAA;AAAA,UACA,6DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,8EAAA;AAAA,QACN,WAAA,EAAa,kFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,4CAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,yCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,kDAAA;AAAA,UACA,8DAAA;AAAA,UACA,oEAAA;AAAA,UACA,gFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,gFAAA;AAAA,QACN,WAAA,EAAa,oFAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,SAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,oBAAK,CAAA;AAAA,QACxB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,+CAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAO,CAAA;AAAA,QACjB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,oBAAK,CAAA;AAAA,QACxB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,+CAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,gCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAO,CAAA;AAAA,QACjB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,8BAAA;AAAA,QACL,OAAA,EAAS,CAAC,oBAAA,EAAO,gCAAO,CAAA;AAAA,QACxB,IAAA,EAAM,oBAAA;AAAA,QACN,WAAA,EAAa,mCAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,0BAAM,CAAA;AAAA,QAC1B,IAAA,EAAM,sCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,sCAAA,EAAU,kDAAA,EAAY,0BAAM,CAAA;AAAA,QACtC,IAAA,EAAM,kDAAA;AAAA,QACN,WAAA,EAAa,iEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,+BAAA;AAAA,QACL,OAAA,EAAS,CAAC,wDAAA,EAAa,sCAAA,EAAU,0BAAM,CAAA;AAAA,QACvC,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,kBAAA;AAAA,QACL,OAAA,EAAS,CAAC,IAAA,EAAM,0DAAA,EAAe,oCAAW,4CAAS,CAAA;AAAA,QACnD,IAAA,EAAM,4DAAA;AAAA,QACN,WAAA,EAAa,6EAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,wBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,8DAAA;AAAA,UACA,0EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,qBAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,0BAAA;AAAA,UACA,sCAAA;AAAA,UACA,kDAAA;AAAA,UACA,8DAAA;AAAA,UACA,0EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,0EAAA;AAAA,QACN,WAAA,EAAa,yFAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,8DAAA,EAAc,kCAAS,oBAAK,CAAA;AAAA,QACjD,IAAA,EAAM,8DAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,8DAAA,EAAc,gFAAA,EAAiB,wCAAU,gCAAO,CAAA;AAAA,QAC1D,IAAA,EAAM,gFAAA;AAAA,QACN,WAAA,EAAa,+FAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,oEAAA;AAAA,UACA,sFAAA;AAAA,UACA,4CAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,sFAAA;AAAA,QACN,WAAA,EAAa,qGAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,mCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,sCAAQ,CAAA;AAAA,QAC7B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,wDAAA,EAAa,4CAAA,EAAW,gCAAO,CAAA;AAAA,QACzC,IAAA,EAAM,wDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,4CAAS,CAAA;AAAA,QAC5B,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,+CAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,4BAAA;AAAA,QACL,OAAA,EAAS,CAAC,0BAAA,EAAQ,kDAAU,CAAA;AAAA,QAC5B,IAAA,EAAM,0BAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,0BAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,iCAAA;AAAA,QACL,OAAA,EAAS,CAAC,4CAAA,EAAW,gCAAO,CAAA;AAAA,QAC5B,IAAA,EAAM,4CAAA;AAAA,QACN,WAAA,EAAa,2DAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,sCAAA;AAAA,QACL,OAAA,EAAS,CAAC,8DAAA,EAAc,kDAAU,CAAA;AAAA,QAClC,IAAA,EAAM,8DAAA;AAAA,QACN,WAAA,EAAa,kEAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,6BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gCAAA,EAAS,0BAAM,CAAA;AAAA,QACzB,IAAA,EAAM,gCAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,oBAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,wBAAA;AAAA,QACL,OAAA,EAAS,CAAC,qDAAA,EAAe,oHAAA,EAAuB,iBAAO,CAAA;AAAA,QACvD,IAAA,EAAM,oHAAA;AAAA,QACN,WAAA,EAAa,uIAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,2BAAA;AAAA,QACL,OAAA,EAAS,CAAC,2DAAA,EAAgB,0HAAA,EAAwB,6BAAS,CAAA;AAAA,QAC3D,IAAA,EAAM,0HAAA;AAAA,QACN,WAAA,EAAa,6IAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS,CAAC,qDAAA,EAAe,oHAAA,EAAuB,uBAAQ,CAAA;AAAA,QACxD,IAAA,EAAM,oHAAA;AAAA,QACN,WAAA,EAAa,uIAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,wBAAA;AAAA,QACL,OAAA,EAAS,CAAC,mCAAA,EAAY,kGAAA,EAAoB,iBAAO,CAAA;AAAA,QACjD,IAAA,EAAM,kGAAA;AAAA,QACN,WAAA,EAAa,qHAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,wCAAA;AAAA,QACL,OAAA,EAAS;AAAA,UACP,+FAAA;AAAA,UACA,qGAAA;AAAA,UACA,8JAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAM,oKAAA;AAAA,QACN,WAAA,EAAa,uLAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,MAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,kBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA;AAAA,MAGA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,OAAA,EAAS,CAAC,IAAA,EAAM,gBAAA,EAAQ,wBAAS,4EAAgB,CAAA;AAAA,QACjD,IAAA,EAAM,8EAAA;AAAA,QACN,WAAA,EAAa,+FAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,0BAAA;AAAA,QACL,OAAA,EAAS,CAAC,gBAAA,EAAQ,gBAAA,EAAQ,8BAAU,kFAAiB,CAAA;AAAA,QACrD,IAAA,EAAM,oFAAA;AAAA,QACN,WAAA,EAAa,0FAAA;AAAA,QACb,IAAA,EAAM,GAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,0BAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA,OACX;AAAA,MACA;AAAA,QACE,GAAA,EAAK,mBAAA;AAAA,QACL,OAAA,EAAS,CAAC,IAAA,EAAM,gBAAA,EAAQ,wBAAS,oDAAY,CAAA;AAAA,QAC7C,IAAA,EAAM,sDAAA;AAAA,QACN,WAAA,EAAa,uEAAA;AAAA,QACb,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,OAAA;AAAA,QACX,WAAA,EAAa,UAAA;AAAA,QACb,OAAA,EAAS,oBAAA;AAAA,QACT,GAAA,EAAK,kCAAA;AAAA,QACL,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtwDA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,OAAO,KACJ,WAAA,EAAY,CACZ,QAAQ,iCAAA,EAAmC,EAAE,EAC7C,IAAA,EAAK;AACV;AAEA,SAAS,YAAA,CAAa,MAAc,IAAA,EAAuB;AACzD,EAAA,OAAO,aAAa,IAAI,CAAA,CAAE,QAAA,CAAS,YAAA,CAAa,IAAI,CAAC,CAAA;AACvD;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAmC;AACpE,EAAA,OAAO,MAAM,IAAA,CAAK,CAAC,SAAS,YAAA,CAAa,IAAA,EAAM,IAAI,CAAC,CAAA;AACtD;AAEA,SAAS,WAAWA,OAAAA,EAAwB;AAC1C,EAAA,OAAO,YAAYA,OAAM,CAAA;AAC3B;AAEA,SAAS,eAAe,MAAA,EAA8B;AACpD,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAK,IAAK,OAAO,IAAA,IAAQ,EAAA;AAClD;AAEA,SAAS,WAAW,MAAA,EAA0C;AAC5D,EAAA,MAAM,OAAO,MAAA,CAAO,QAAA;AACpB,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,8BAAA;AAAA,IACA,8BAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ,SAAS,MAAA,CAAO,CAAC,YAAY,IAAA,CAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AACjE,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA;AAChD;AAEA,SAAS,WAAA,CAAY,MAAA,EAAsB,KAAA,EAAe,OAAA,EAAuC;AAC/F,EAAA,OAAO;AAAA,IACL,IAAI,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,OAAO,OAAO,CAAA,CAAA;AAAA,IACnC,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAA;AAAA,IAC5B,WAAA,EAAa,eAAe,MAAM,CAAA;AAAA,IAClC,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAA,EAAS,WAAW,MAAM,CAAA;AAAA,IAC1B,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,UAAA,CAAW,QAAsB,MAAA,EAAwD;AAChG,EAAA,OAAO;AAAA,IACL,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,QAAA;AAAA,IAC5B,WAAA,EAAa,eAAe,MAAM,CAAA;AAAA,IAClC,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAA,EAAW,OAAO,SAAA,IAAa,MAAA;AAAA,IAC/B,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,OAAA,EAAS,WAAW,MAAM,CAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEA,SAAS,WAAA,CAAY,OAAqBI,OAAAA,EAAyC;AACjF,EAAA,OAAO;AAAA,IACL,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,QAAQA,OAAAA,CAAO,IAAA;AAAA,IACf,YAAYA,OAAAA,CAAO,KAAA;AAAA,IACnB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,WAAA,CAAY,GAAiB,CAAA,EAA+B;AACnE,EAAA,IAAI,CAAA,CAAE,OAAO,CAAA,CAAE,EAAA,SAAW,CAAA,CAAE,EAAA,GAAK,CAAA,CAAE,EAAA,GAAK,CAAA,GAAI,CAAA;AAC5C,EAAA,IAAI,CAAA,CAAE,IAAA,IAAQ,CAAC,CAAA,CAAE,MAAM,OAAO,CAAA;AAC9B,EAAA,IAAI,CAAA,CAAE,IAAA,IAAQ,CAAC,CAAA,CAAE,MAAM,OAAO,CAAA;AAC9B,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,cAAc,OAAA,EAAyC;AAC9D,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAC1C,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,MAAM,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,OAAO,OAAO,CAAA,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC5B,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,EAAE,GAAG,QAAQ,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAU,MAAM,CAAA;AAC3C,IAAA,GAAA,CAAI,IAAI,GAAA,EAAK;AAAA,MACX,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,QAAA,CAAS,QAAQ,MAAA,CAAO,IAAA;AAAA,MAC7C,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,QAAA,CAAS,QAAQ,MAAA,CAAO,IAAA;AAAA,MAC7C,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,QAAA,CAAS,aAAa,MAAA,CAAO;AAAA,KAC7D,CAAA;AAAA,EACH;AACA,EAAA,OAAO,CAAC,GAAG,GAAA,CAAI,MAAA,EAAQ,CAAA;AACzB;AAEA,SAAS,WAAA,CACP,MAAA,EACAF,MAAAA,EACAF,OAAAA,EACAI,OAAAA,EACsC;AACtC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,MAAM,OAAO,CAAA,EAAG,MAAA,CAAO,QAAQ,EAAE,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AACpD,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA;AAClD,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,WAAWF,MAAK,CAAA;AAChC,EAAA,MAAM,SAAA,GAAY,cAAc,OAAO,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,cAAc,OAAO,CAAA,CAAE,IAAI,aAAa,CAAA,CAAE,OAAO,OAAO,CAAA;AACxE,EAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAElC,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,cAAA,KAAmB,SAAA,IAAa,cAAA,KAAmB,SAAA,EAAW,KAAA,GAAQ,IAAA;AAAA,SAAA,IACjE,eAAe,QAAA,CAAS,SAAS,CAAA,IAAK,cAAA,CAAe,SAAS,SAAS,CAAA;AAC9E,MAAA,QAAA,GAAW,IAAA;AAAA,SAAA,IACJ,UAAU,QAAA,CAAS,cAAc,KAAK,cAAA,CAAe,MAAA,IAAU,GAAG,QAAA,GAAW,IAAA;AAAA,EACxF;AACA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,KAAU,SAAA,EAAW;AAGnC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,cAAA,KAAmB,KAAA,IAAS,cAAA,KAAmB,KAAA,EAAO,KAAA,GAAQ,IAAA;AAAA,SAAA,IACzD,cAAA,CAAe,SAAS,KAAK,CAAA,IAAK,eAAe,QAAA,CAAS,KAAK,GAAG,QAAA,GAAW,IAAA;AAAA,EACxF;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AACzB,IAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,IAC5B;AAAA,EACF,WAAW,QAAA,EAAU;AACnB,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,cAAA,IAAkB,SAAA,CAAU,QAAA,CAAS,cAAc,CAAA,EAAG;AAC/D,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,YAAY,MAAA,CAAO,MAAA;AAAA,IACvB,CAAC,UAAU,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,IAAK,cAAA,CAAe,SAAS,KAAK;AAAA,GAC5E;AACA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,KAAA,IAAS,UAAU,MAAA,GAAS,CAAA;AAC5B,IAAA,OAAA,CAAQ,IAAA,CAAK,kCAAS,SAAA,CAAU,MAAM,YAAO,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,CAAE,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,OAAO,MAAA,GAAS,CAAA,IAAK,SAAA,CAAU,MAAA,KAAW,OAAO,MAAA,EAAQ;AAC3D,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,OAAA,CAAQ,KAAK,mCAAU,CAAA;AAAA,EACzB;AAEA,EAAA,IAAI,MAAA,CAAO,cAAcF,OAAAA,EAAQ;AAC/B,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,MAAA,CAAO,SAAA,KAAc,UAAA,CAAWA,OAAM,CAAA,EAAG;AAC3C,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,EAC3B;AAEA,EAAA,IAAII,QAAO,QAAA,EAAU;AACnB,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,cAAI,CAAA,EAAG;AAChC,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,KAAA,GAAQA,OAAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,oCAAoC,EAAE,CAAA;AACxE,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,QAAA,CAASA,OAAAA,CAAO,IAAI,KAAK,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACxE,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,cAAI,CAAA,EAAG;AACvC,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8EAAkB,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,EAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAOF,MAAAA,EAAO,aAAA,CAAc,MAAM,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,SAAS,CAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,YAAY,CAAA;AAC9D,EAAA,MAAM,WAAA,GAAc,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,UAAU,CAAA;AAC1D,EAAA,MAAM,QAAA,GAAW,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,OAAO,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAOA,MAAAA,EAAO,aAAA,CAAc,aAAa,CAAA;AAC3D,EAAA,MAAM,eAAe,eAAA,CAAgB,IAAA,CAAKA,MAAK,CAAA,IAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AAElE,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,IAAI,IAAI,IAAI,CAAA,CAAE,CAAA,IAAK,WAAA,CAAY,IAAA,EAAM,CAAC,cAAA,EAAM,cAAI,CAAC,CAAA,EAAG;AACvE,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,4DAAe,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,IAAK,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC9D,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,4DAAe,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,EAAG;AAChE,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC5B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,IAC1B;AAAA,EACF;AACA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,IAAI,WAAA,CAAY,IAAA,EAAM,aAAA,CAAc,YAAY,CAAA,EAAG;AACjD,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,IAAI,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC5B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,8BAAU,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,aAAa,IAAA,EAAM,cAAI,KAAK,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AACxD,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,4DAAe,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,YAAY,IAAA,EAAM,CAAC,cAAA,EAAM,cAAI,CAAC,CAAA,EAAG;AACnC,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,2CAAa,CAAA;AAAA,IAC5B;AACA,IAAA,IAAI,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC5B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,4DAAe,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,YAAA,CAAa,IAAA,EAAM,oBAAK,CAAA,EAAG;AAC7B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GACJ,CAAC,OAAA,IAAW,CAAC,MAAA,IAAU,CAAC,UAAA,IAAc,CAAC,aAAA,IAAiB,CAAC,WAAA,IAAe,CAAC,YAAY,CAAC,SAAA;AACxF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,OAAO,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,EAAG;AAClC,QAAA,KAAA,IAAS,EAAA;AACT,QAAA,OAAA,CAAQ,KAAK,kEAAgB,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,KAAA,IAAS,CAAA;AACT,QAAA,OAAA,CAAQ,KAAK,uEAAgB,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AACjC,QAAA,KAAA,IAAS,EAAA;AACT,QAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,MAC3B;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,KAAA,IAAS,EAAA;AACT,QAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,MAC5B;AACA,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACzB,QAAA,KAAA,IAAS,CAAA;AACT,QAAA,OAAA,CAAQ,KAAK,qDAAa,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,aAAA,IAAiB,WAAA,CAAY,IAAA,EAAM,aAAA,CAAc,YAAY,CAAA,EAAG;AACnE,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oEAAkB,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,CAAC,MAAA,IAAU,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AACvC,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAC,UAAA,IAAc,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC3C,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAC,SAAA,IAAa,YAAA,CAAa,IAAA,EAAM,oBAAK,CAAA,EAAG;AAC3C,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,CAAC,WAAW,WAAA,CAAY,IAAA,EAAM,CAAC,oBAAA,EAAO,0BAAM,CAAC,CAAA,EAAG;AAClD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,UAAA,GAAa,OAAA,IAAW,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA;AACxD,EAAA,IAAI,CAAC,UAAA,IAAc,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC3C,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,oCAAW,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAC,QAAQ,QAAA,CAAS,0BAAM,KAAK,YAAA,CAAa,IAAA,EAAM,0BAAM,CAAA,EAAG;AAC3D,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,KAAA,MAAW,aAAa,CAAC,oBAAA,EAAO,sBAAO,oBAAA,EAAO,oBAAA,EAAO,oBAAK,CAAA,EAAG;AAC3D,IAAA,IAAI,CAAC,QAAQ,QAAA,CAAS,SAAS,KAAK,YAAA,CAAa,IAAA,EAAM,SAAS,CAAA,EAAG;AACjE,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kBAAA,EAAM,SAAS,CAAA,gBAAA,CAAQ,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,WAAA,IAAe,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC5C,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,OAAA,CAAQ,KAAK,mCAAU,CAAA;AAAA,EACzB;AACA,EAAA,IAAI,CAAC,YAAY,WAAA,CAAY,IAAA,EAAM,CAAC,cAAA,EAAM,cAAI,CAAC,CAAA,EAAG;AAChD,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AAC5B,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,oBAAK,KAAK,YAAA,CAAa,IAAA,EAAM,oBAAK,CAAA,EAAG;AACvD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,0CAAY,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,0BAAM,KAAK,YAAA,CAAa,IAAA,EAAM,0BAAM,CAAA,EAAG;AACzD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,4DAAe,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,CAACA,MAAAA,CAAM,QAAA,CAAS,cAAI,CAAA,IAAK,uBAAA,CAAwB,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,EAAG;AAC5E,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,cAAI,KAAK,YAAA,CAAa,IAAA,EAAM,0BAAM,CAAA,EAAG;AACvD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,QAAG,KAAK,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AACpD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,QAAG,KAAK,YAAA,CAAa,IAAA,EAAM,cAAI,CAAA,EAAG;AACpD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,cAAI,KAAK,YAAA,CAAa,IAAA,EAAM,0BAAM,CAAA,EAAG;AACvD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,CAACA,OAAM,QAAA,CAAS,cAAI,KAAK,YAAA,CAAa,IAAA,EAAM,0BAAM,CAAA,EAAG;AACvD,IAAA,KAAA,IAAS,EAAA;AACT,IAAA,OAAA,CAAQ,KAAK,gDAAa,CAAA;AAAA,EAC5B;AAIA,EAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAClC,IAAA,MAAM,OAAA,GAAU,YAAA,CAAaA,MAAAA,EAAO,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,EAAM,IAAI,CAAA;AACtC,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mBAAA,EAAO,IAAI,CAAA,IAAA,CAAM,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,OAAA,IAAW,CAAC,MAAA,EAAQ;AAC7B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAS,IAAI,CAAA,IAAA,CAAM,CAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,OAAA,CAAQ,KAAK,mCAAU,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B;AAEA,SAAS,MAAA,CACP,MAAA,EACA,MAAA,GAAsC,QAAA,EACtB;AAChB,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,aAAa,WAAA,EAAY;AAC7E,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,aAAa,WAAA,EAAY;AAC9D,EAAA,MAAM,MAAA,GAAS,OAAO,CAAC,CAAA;AACvB,EAAA,MAAM,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,GAAQ,MAAA,CAAO,QAAQ,MAAA,CAAO,iBAAA;AAEvD,EAAA,MAAM,SAAA,GACH,GAAA,CAAI,KAAA,IAAS,EAAA,IAAM,OAAO,EAAA,IAC1B,GAAA,CAAI,KAAA,IAAS,EAAA,IAAM,GAAA,IAAO,EAAA,IAC1B,GAAA,CAAI,KAAA,IAAS,MAAM,CAAC,MAAA;AAEvB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,EAAE,MAAM,UAAA,EAAY,SAAA,EAAW,WAAW,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA,EAAE;AAAA,EACvE;AAEA,EAAA,IAAI,GAAA,CAAI,SAAS,EAAA,EAAI;AACnB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,YAAY,MAAA,CACT,KAAA,CAAM,CAAA,EAAG,CAAC,EACV,GAAA,CAAI,CAAC,IAAA,KAAS,WAAA,CAAY,KAAK,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC;AAAA,KACrE;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,WAAA,EAAa,WAAA,EAAY;AACtD;AAEA,eAAe,iBAAA,CACb,QAAA,EACAA,MAAAA,EACAF,OAAAA,EACAI,SACA,OAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,IACnC,OAAA,EAASF,MAAAA;AAAA,IACT,MAAA,EAAAF,OAAAA;AAAA,IACA,QAAA,EAAU,EAAA;AAAA,IACV,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,OAAA,CACZ,GAAA,CAAI,CAAC,MAAA,KAAW;AACf,IAAA,MAAM,EAAE,OAAO,OAAA,EAAQ,GAAI,YAAY,MAAA,EAAQE,MAAAA,EAAOF,SAAQI,OAAM,CAAA;AACpE,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAQ;AAAA,EAClC,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,CAAC,CAAA;AAElC,EAAA,OAAO,OAAO,MAAM,CAAA;AACtB;AAEA,SAAS,cAAcF,MAAAA,EAAyB;AAC9C,EAAA,MAAM,IAAA,GAAO,UAAUA,MAAK,CAAA;AAC5B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,6BAAA,CAA8B,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5C,IAAA,KAAA,CAAM,IAAA,CAAK,wCAAU,cAAI,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,wBAAwB,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,0BAAM,CAAA;AACzD,EAAA,IAAI,UAAU,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,cAAI,CAAA;AACzC,EAAA,IAAI,cAAc,IAAA,CAAK,IAAI,GAAG,KAAA,CAAM,IAAA,CAAK,4BAAQ,wDAAW,CAAA;AAC5D,EAAA,IAAI,gBAAgB,IAAA,CAAK,IAAI,GAAG,KAAA,CAAM,IAAA,CAAK,wCAAU,oBAAK,CAAA;AAC1D,EAAA,IAAI,KAAK,IAAA,CAAK,IAAI,GAAG,KAAA,CAAM,IAAA,CAAK,gBAAM,4CAAS,CAAA;AAC/C,EAAA,IAAI,KAAK,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,0BAAM,CAAA;AACtC,EAAA,IAAI,SAAS,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,cAAI,CAAA;AACxC,EAAA,IAAI,aAAa,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,cAAI,CAAA;AAC5C,EAAA,IAAI,YAAY,IAAA,CAAK,IAAI,GAAG,KAAA,CAAM,IAAA,CAAK,wCAAU,0BAAM,CAAA;AACvD,EAAA,IAAI,QAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,cAAI,CAAA;AACvC,EAAA,IAAI,MAAM,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,oBAAK,CAAA;AACtC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAGA,SAAS,cAAc,IAAA,EAAsB;AAC3C,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC1C;AAEA,SAAS,eAAA,CAAgB,MAAcA,MAAAA,EAAwB;AAC7D,EAAA,MAAM,OAAA,GAAU,WAAWA,MAAK,CAAA;AAChC,EAAA,MAAM,cAAA,GAAiB,cAAc,IAAI,CAAA;AACzC,EAAA,IAAI,CAAC,gBAAgB,OAAO,KAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,cAAc,OAAO,CAAA,CAAE,IAAI,aAAa,CAAA,CAAE,OAAO,OAAO,CAAA;AACxE,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,cAAc,CAAC,CAAA,EAAG;AAC7F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA,CAAY,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,cAAA,CAAe,QAAA,CAAS,KAAK,CAAC,CAAA;AAC5E;AAGA,SAAS,YAAA,CAAa,MAAcA,MAAAA,EAAuB;AACzD,EAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,cAAcA,MAAK,CAAA;AAClC,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,EAAQ,OAAO,CAAA;AAC7B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAO,MAAA,GAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACzD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,KAAA,IAAS,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAA,CACP,SAAA,EACA,IAAA,EACAF,OAAAA,EACAI,OAAAA,EACc;AACd,EAAA,OAAO;AAAA,IACL,KAAK,SAAA,CAAU,GAAA;AAAA,IACf,SAAS,SAAA,CAAU,EAAA;AAAA,IACnB,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,UAAU,SAAA,CAAU,QAAA;AAAA,IACpB,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,SAAA,EAAWJ,OAAAA;AAAA,IACX,EAAA,EAAI,EAAA;AAAA,IACJ,MAAA,EAAQ,EAAA;AAAA,IACR,QAAQI,OAAAA,CAAO,IAAA;AAAA,IACf,YAAYA,OAAAA,CAAO,KAAA;AAAA,IACnB,KAAA,EAAO,EAAA;AAAA,IACP,SAAA,EAAW,WAAWJ,OAAM,CAAA;AAAA,IAC5B,UAAU,IAAA,CAAK;AAAA,GACjB;AACF;AAWO,SAAS,gBAAgB,IAAA,EAA4C;AAC1E,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AACtC,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,MAAA;AAChD,EAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,MAAA;AAC9C,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW,OAAO,MAAA;AAC7D,EAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,KAAA,CAAM,KAAK,EAAE,IAAA,EAAK;AAC7C,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAU;AAAA,IAC/C,GAAI,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA;AAAQ,GAC7C;AACF;AAEA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAC,CAAA;AACnD;AAEA,SAAS,YAAA,CAAa,GAAqB,CAAA,EAA8B;AACvE,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,IAAW,MAAA,CAAO,iBAAA;AACjC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,IAAW,MAAA,CAAO,iBAAA;AACjC,EAAA,IAAI,IAAA,KAAS,IAAA,EAAM,OAAO,IAAA,GAAO,IAAA;AACjC,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,SAAA,IAAa,MAAA,CAAO,iBAAA;AACrC,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,SAAA,IAAa,MAAA,CAAO,iBAAA;AACrC,EAAA,OAAO,MAAA,GAAS,MAAA;AAClB;AAQA,eAAe,eACb,QAAA,EACA,IAAA,EACA,MAAA,EACA,IAAA,EACA,UACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACxC,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,CAAK,UAAU,OAAO,MAAA;AAEtC,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,OAAA,CAAQ;AAAA,IACtC,KAAK,IAAA,CAAK,QAAA;AAAA,IACV,IAAA;AAAA,IACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ;AAAA,GAClB,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,QAAA,CACjB,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,KAAA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,CAC3D,MAAA;AAAA,IACC,CAAC,IAAA,KACC,IAAA,CAAK,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,MAAA,CAAO;AAAA,GAC/E,CACC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,KAAA,CAAM,SAAA,IAAa,CAAA,QAAA,KAAc,CAAA,CAAE,KAAA,CAAM,SAAA,IAAa,CAAA,QAAA,CAAU,CAAA;AAErF,EAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,OAAO,MAAA;AAEnC,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA;AACpD,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC1C,IAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,aAAA,CAAc;AAAA,MAC9C,GAAA,EAAK,KAAK,IAAA,CAAK,EAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,KAAA,GACJ,WAAW,IAAA,CAAK,CAAC,cAAc,eAAA,CAAgB,SAAA,CAAU,QAAQ,CAAA,KAAM,UAAU,MAChF,UAAA,GACG,UAAA,CAAW,KAAK,CAAC,SAAA,KAAc,gBAAgB,SAAA,CAAU,IAAI,CAAA,KAAM,UAAU,CAAA,GAC7E,MAAA,CAAA;AACN,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,GAAA,EAAK,KAAK,IAAA,CAAK,EAAA;AAAA,MACf,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAU;AAAA,MAChF,GAAI,IAAA,CAAK,KAAA,CAAM,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,OAAA,EAAQ;AAAA,MAC1E,KAAA,EAAO,KAAK,IAAA,CAAK;AAAA,KAClB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,MAAA;AAC9B,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,GAAA,KAAQ,QAAA,CAAS,GAAA,IAAO,KAAA,CAAM,OAAA,KAAY,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7F,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAK,QAAA,CAAS,GAAA;AAAA,MACd,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU;AAAA,MACxE,GAAI,OAAO,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,MAAA,CAAO,OAAA,EAAQ;AAAA,MAClE,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,SAAA,IAAa,CAAA,QAAA,KAAc,CAAA,CAAE,SAAA,IAAa,CAAA,QAAA,CAAU,CAAA;AACtF;AAQA,SAAS,WAAA,CAAYE,MAAAA,EAAeF,OAAAA,EAAgB,KAAA,EAAuB;AACzE,EAAA,OAAO,CAAA,EAAG,UAAU,UAAA,CAAWE,MAAK,CAAC,CAAC,CAAA,CAAA,EAAIF,OAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAC3D;AAEA,SAAS,aAAa,GAAA,EAAyC;AAC7D,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA;AACnC,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,IAAI,KAAA,CAAM,SAAA,IAAa,IAAA,CAAK,GAAA,EAAI,EAAG;AACjC,IAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,OAAA;AACf;AAEA,SAAS,aAAA,CAAc,KAAa,OAAA,EAA+B;AACjE,EAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,EAAA,aAAA,CAAc,GAAA,CAAI,KAAK,EAAE,SAAA,EAAW,KAAK,GAAA,EAAI,GAAI,eAAA,EAAiB,OAAA,EAAS,CAAA;AAC3E,EAAA,OAAO,aAAA,CAAc,OAAO,oBAAA,EAAsB;AAChD,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC3C,IAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,IAAA,aAAA,CAAc,OAAO,MAAM,CAAA;AAAA,EAC7B;AACF;AAOA,eAAe,eAAA,CACb,QAAA,EACAE,MAAAA,EACAF,OAAAA,EACAI,SACA,OAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,OAAA,CAAQA,OAAM,GAAGJ,OAAM,CAAA;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,QAAA,CAAS,oBAAA,EAAsB,qEAAA,EAAgB;AAAA,MACvD,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAQ,cAAcE,MAAK,CAAA;AACjC,EAAA,MAAM,KAAA,GAAgE;AAAA,IACpE,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,CAAA,EAAG,QAAQ,KAAA;AAAM,GACrC;AACA,EAAA,MAAM,SAAwD,EAAC;AAC/D,EAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,IAAK,eAAe,EAAA,IAAM,MAAA,CAAO,SAAS,EAAA,EAAI;AAClE,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,EAAM;AAC5B,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,OAAA,CAAQ;AAAA,MACnC,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,IAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,YAAA,IAAgB,CAAA;AAEhB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAMA,MAAK,CAAA;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AAC5D,MAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,KAAQ,EAAA;AAClC,MAAA,MAAM,YAAA,GAAe,QAAQ,MAAA,IAAU,MAAA;AACvC,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,OAAA,IAAW,YAAA,CAAA,EAAe;AAC5C,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,IAAA,CAAK,IAAA,EAAMA,MAAK,CAAA,EAAG,CAAA;AAAA,MAChE,CAAA,MAAA,IACE,CAAC,IAAA,CAAK,MAAA,KACL,OAAA,IAAW,MAAA,IAAU,SAAA,IAAa,OAAA,CAAQ,MAAA,CAAA,IAC3C,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAChB;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG,MAAA,EAAQ,YAAA,EAAc,CAAA;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAA4E,EAAC;AACnF,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAwB;AAC9C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAA0B;AAClD,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAStB;AACF,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,MAAM,EACxB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA,CACtC,MAAM,CAAA,EAAG,CAAC,EACV,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA;AAC1B,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,aAAA,CAAc;AAAA,MAC9C,KAAK,IAAA,CAAK,EAAA;AAAA,MACV,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACvC,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,SAAA,EAAW,IAAA,EAAMF,SAAQI,OAAM,CAAA;AACzD,MAAA,MAAM,EAAE,OAAO,OAAA,EAAQ,GAAI,YAAY,MAAA,EAAQF,MAAAA,EAAOF,SAAQI,OAAM,CAAA;AACpE,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAA;AACtC,QAAA,SAAA,CAAU,GAAA,CAAI,GAAG,MAAA,CAAO,GAAG,IAAI,MAAA,CAAO,OAAO,IAAI,IAAI,CAAA;AACrD,QAAA,WAAA,CAAY,GAAA,CAAI,GAAG,MAAA,CAAO,GAAG,IAAI,MAAA,CAAO,OAAO,IAAI,MAAM,CAAA;AACzD,QAAA;AAAA,MACF;AAIA,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA,CAAA;AACvF,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAA;AACzC,MAAA,IAAI,CAAC,QAAA,IAAY,YAAA,CAAa,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACpD,QAAA,WAAA,CAAY,GAAA,CAAI,UAAU,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,WAAA,CAAY,MAAA,EAAO,EAAG;AACxC,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAChF,IAAA,SAAA,CAAU,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AACvE,IAAA,WAAA,CAAY,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,aAAa,WAAA,EAAY;AAC7E,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,IAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,SAAA,CAAU,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,UAAU,OAAO,CAAA,CAAA;AACjE,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,MAAM,cAAA;AAAA,UACnB,QAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAA,CAAQ,SAAA;AAAA,UACR;AAAA,SACF;AACA,QAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,MACzC,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,EAAS,MAAM,KAAA;AAAA,MAErC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAeE,YAAAA,EAAmE;AACzF,EAAA,MAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAIA,YAAAA,CAAY,MAAM,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,OAAA,EAAS,OAAO,MAAA;AAC7B,EAAA,OAAO,EAAE,KAAK,OAAA,EAAQ;AACxB;AAEA,eAAe,gBAAA,CACb,QAAA,EACAA,YAAAA,EACAN,OAAAA,EACAI,SACA,OAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,eAAeE,YAAW,CAAA;AACzC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,QAAA;AAAA,MACJ,4CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,aAAA,CAAc;AAAA,IAC9C,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ;AAAA,GAClB,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,WAAW,IAAA,CAAK,CAAC,cAAc,SAAA,CAAU,EAAA,KAAO,OAAO,OAAO,CAAA;AAC5E,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,QAAA,CAAS,oDAAY,iIAAkC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,SAAA,EAAW;AAAA,MACT,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,aAAa,KAAA,CAAM,QAAA;AAAA,MACnB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAWN,OAAAA;AAAA,MACX,QAAQI,OAAAA,CAAO,IAAA;AAAA,MACf,YAAYA,OAAAA,CAAO,KAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,MAAA,EAAQ;AAAA;AACV,GACF;AACF;AAGO,SAAS,YAAY,OAAA,EAA+B;AACzD,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAO,OAAA,CAAQ,MAAA;AACnC,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,OAAA,CAAQ,KAAA,IAAS,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAA,IAAO,EAAE,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAA,IAAS,EAAE,CAAA,CAAA;AAC/E,EAAA,IAAI,qBAAA,CAAsB,KAAK,IAAI,CAAA,IAAK,UAAU,IAAA,CAAK,IAAI,GAAG,OAAO,OAAA;AACrE,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,IAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAChF,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAGA,eAAsB,gBAAA,CACpB,QAAA,EACA,OAAA,EACAJ,OAAAA,EACAI,OAAAA,EACyB;AACzB,EAAA,MAAMF,MAAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK;AAClC,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,OAAO,iBAAiB,QAAA,EAAU,OAAA,CAAQ,WAAA,EAAaF,OAAAA,EAAQI,SAAQ,OAAO,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,CAACF,MAAAA,EAAO;AACV,IAAA,MAAM,eAAA,CAAgB,mCAAe,6DAA8C,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAQE,OAAM,CAAA;AAC5B,EAAA,IAAI,KAAA,KAAU,MAAA,IAAUJ,OAAAA,KAAW,MAAA,EAAQ;AACzC,IAAA,MAAM,IAAI,QAAA,CAAS,oBAAA,EAAsB,uFAAA,EAAmB;AAAA,MAC1D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,eACJ,KAAA,KAAU,UAAA,GAAa,UAAA,GAAa,KAAA,KAAU,aAAa,UAAA,GAAa,MAAA;AAC1E,EAAA,MAAM,OAAA,GAAU,WAAA,CAAYE,MAAAA,EAAOF,OAAAA,EAAQ,YAAY,CAAA;AACvD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,WAAW,WAAA,CAAY,OAAA,EAASI,OAAM,CAAA,EAAE;AAAA,EACrE;AAEA,EAAA,MAAM,GAAA,GAAM,WAAA,CAAYF,MAAAA,EAAOF,OAAAA,EAAQ,KAAK,CAAA;AAC5C,EAAA,MAAM,cAAA,GAAiB,aAAa,GAAG,CAAA;AACvC,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAE3B,EAAA,IAAI,UAAU,UAAA,EAAY;AACxB,IAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,UAAUE,MAAAA,EAAOF,OAAAA,EAAQI,SAAQ,OAAO,CAAA;AAClF,IAAA,IAAI,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY,OAAO,WAAA;AAC5C,IAAA,MAAMG,QAAAA,GAA0B,EAAE,IAAA,EAAM,UAAA,EAAY,aAAa,WAAA,EAAY;AAC7E,IAAA,aAAA,CAAc,KAAKA,QAAO,CAAA;AAC1B,IAAA,OAAOA,QAAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAgB,MAAM,iBAAA,CAAkB,UAAUL,MAAAA,EAAOF,OAAAA,EAAQI,SAAQ,OAAO,CAAA;AACtF,EAAA,IAAI,aAAA,CAAc,IAAA,KAAS,UAAA,EAAY,OAAO,aAAA;AAE9C,EAAA,MAAM,KAAA,GAAQ,cAAcF,MAAK,CAAA;AACjC,EAAA,IAAI,aAAA,CAAc,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,SAAS,CAAA,EAAG;AACzD,IAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,UAAUA,MAAAA,EAAOF,OAAAA,EAAQI,SAAQ,OAAO,CAAA;AAClF,IAAA,IAAI,WAAA,CAAY,IAAA,KAAS,UAAA,EAAY,OAAO,WAAA;AAC5C,IAAA,IAAI,WAAA,CAAY,IAAA,KAAS,WAAA,EAAa,OAAO,WAAA;AAAA,EAC/C;AAEA,EAAA,IAAI,aAAA,CAAc,IAAA,KAAS,UAAA,EAAY,OAAO,aAAA;AAC9C,EAAA,MAAM,OAAA,GAA0B,EAAE,IAAA,EAAM,UAAA,EAAY,aAAa,WAAA,EAAY;AAC7E,EAAA,aAAA,CAAc,KAAK,OAAO,CAAA;AAC1B,EAAA,OAAO,OAAA;AACT;AAr+BA,IAiBM,WAAA,EAMA,WAAA,EAYA,eAAA,EAwkBA,cAAA,EA4GA,iBACA,oBAAA,EACA,aAAA;AAztBN,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,iBAAA,GAAA;AAAA,IAAA,YAAA,EAAA;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAEA,IAAA,YAAA,EAAA;AAYA,IAAM,WAAA,GAAsC;AAAA,MAC1C,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,GAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAEA,IAAM,WAAA,GAAc;AAAA,MAClB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,cAAA;AAAA,MACA,wDAAA;AAAA,MACA,sCAAA;AAAA,MACA,4CAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAM,eAAA,GAAkB;AAAA,MACtB,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,0BAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,0BAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAkjBA,IAAM,cAAA,GAAiB,mDAAA;AA4GvB,IAAM,eAAA,GAAkB,IAAI,EAAA,GAAK,GAAA;AACjC,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,aAAA,uBAAoB,GAAA,EAA4D;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACptB/E,SAAS,aAAa,GAAA,EAAqB;AAChD,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK;AACtB,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA,EAAG,OAAO,QAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,yBAAyB,CAAA;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACzB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AACvB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,uBAAA,EAAyB,GAAG,CAAA;AAC5D,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,OAAO,CAAA,EAAG,YAAY,MAAA,GAAY,EAAA,GAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,CAAA;AACvE;AAGO,SAAS,aAAa,IAAA,EAAsB;AACjD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,IAAK,CAAA;AACpC,IAAA,MAAM,OACH,IAAA,IAAQ,IAAA,IAAU,QAAQ,IAAA,IAC1B,IAAA,IAAQ,SAAU,IAAA,IAAQ,KAAA,IAC1B,QAAQ,KAAA,IAAU,IAAA,IAAQ,SAC1B,IAAA,IAAQ,KAAA,IAAU,QAAQ,KAAA,IAC1B,IAAA,IAAQ,SAAU,IAAA,IAAQ,KAAA,IAC1B,QAAQ,KAAA,IAAU,IAAA,IAAQ,SAC1B,IAAA,IAAQ,KAAA,IAAU,QAAQ,KAAA,IAC1B,IAAA,IAAQ,SAAU,IAAA,IAAQ,KAAA,IAC1B,QAAQ,MAAA,IAAW,IAAA,IAAQ,UAC3B,IAAA,IAAQ,MAAA,IAAW,QAAQ,MAAA,IAC3B,IAAA,IAAQ,UAAW,IAAA,IAAQ,MAAA;AAC9B,IAAA,KAAA,IAAS,OAAO,CAAA,GAAI,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,GAAA,CAAI,IAAA,EAAc,KAAA,EAAe,KAAA,GAA0B,MAAA,EAAgB;AAClF,EAAA,MAAM,OAAA,GAAU,aAAa,IAAI,CAAA;AACjC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,OAAO,CAAA;AACvC,EAAA,OAAO,UAAU,OAAA,GAAU,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,GAAK,GAAG,IAAI,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACpF;AAEA,SAAS,YAAA,CAAa,QAAqBA,OAAAA,EAA2B;AACpE,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,IAAUA,OAAAA,IAAU,EAAA;AACxC,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,GAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAA,GAAK,EAAA;AAC7C,IAAA,OAAO,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAG,KAAA,GAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAAK,EAAE,CAAA,MAAA,EAAI,KAAA,CAAM,OAAO,GAAG,IAAI,CAAA,CAAA;AAAA,EAC/E,CAAC,CAAA;AACH;AAEA,SAAS,WAAW,MAAA,EAA6B;AAC/C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAEtB,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,KAAA,CAAM,KAAK,CAAA,8BAAA,EAAQ,MAAA,CAAO,KAAA,EAAO,OAAA,IAAW,0BAAM,CAAA,CAAE,CAAA;AACpD,IAAA,IAAI,MAAA,CAAO,OAAO,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAC5D,IAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,KAAA,CAAM,KAAK,gCAAO,CAAA;AAClB,MAAA,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAC9C,QAAA,MAAM,OAAO,SAAA,CAAU,IAAA,GAAO,CAAA,EAAA,EAAK,SAAA,CAAU,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AACvD,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,WAAA,IAAe,SAAA,CAAU,IAAI,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,MAChF,CAAC,CAAA;AACD,MAAA,KAAA,CAAM,KAAK,oHAAyC,CAAA;AAAA,IACtD;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,KAAK,wDAAa,CAAA;AACxB,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG;AACrC,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,GAAG,IAAA,CAAK,MAAA,CAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,GAAQ,CAAC,CAAC,CAAC,KAAK,IAAA,CAAK,IAAI,GAAG,IAAA,CAAK,MAAA,GAAS,KAAK,IAAI,CAAA;AAAA,OACrF;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,CAAM,KAAK,GAAG,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,YAAA,EAAK,IAAI,EAAE,CAAC,CAAA;AAC/E,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAM,MAAA,CAAO,IAAI,CAAA,6BAAA,CAAqB,CAAA;AACjD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,SAAA,IAAa,MAAA,CAAO,QAAQ,MAAA,EAAQ;AACxD,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,uCAAW,MAAA,CAAO,SAAA,EAAW,eAAe,MAAA,CAAO,SAAA,EAAW,QAAQ,0BAAM,CAAA;AAAA,KAC9E;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,MAAA,EAAQ;AAClC,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,MAAA,CAAG,CAAA;AAC9B,MAAA,KAAA,CAAM,KAAK,GAAG,YAAA,CAAa,OAAO,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,CAAM,KAAK,GAAG,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,YAAA,EAAK,IAAI,EAAE,CAAC,CAAA;AAC/E,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAM,MAAA,CAAO,IAAI,CAAA,6BAAA,CAAqB,CAAA;AACjD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,MAAM,QAAQ,MAAA,CAAO,SAAA,EAAW,WAAA,IAAe,MAAA,CAAO,WAAW,IAAA,IAAQ,0BAAA;AACzE,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oCAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAC7B,EAAA,IAAI,MAAA,CAAO,QAAQ,MAAA,EAAQ;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,YAAA,CAAa,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAC3C,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,4CAAS,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,KAAA,CAAM,KAAK,GAAG,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,YAAA,EAAK,IAAI,EAAE,CAAC,CAAA;AAC/E,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAM,MAAA,CAAO,IAAI,CAAA,6BAAA,CAAqB,CAAA;AACjD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,8BAAA,EAAQ,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AACvC,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,YAAY,MAAA,EAA6B;AAChD,EAAA,MAAM,OAAoB,EAAC;AAC3B,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,SAAA,IAAa,MAAA,CAAO,QAAQ,MAAA,EAAQ;AACxD,IAAA,KAAA,MAAW,UAAU,MAAA,CAAO,MAAA,OAAa,IAAA,CAAK,GAAG,OAAO,MAAM,CAAA;AAAA,EAChE,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,IAAA,CAAK,GAAI,MAAA,CAAO,MAAA,IAAU,EAAG,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,WAAW,MAAM,CAAA;AAE/C,EAAA,MAAM,OAAA,GAAU,CAAC,cAAA,EAAM,cAAA,EAAM,gBAAM,cAAI,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,IAChC,KAAA,CAAM,cAAc,KAAA,CAAM,MAAA;AAAA,IAC1B,MAAM,MAAA,IAAU,EAAA;AAAA,IAChB,KAAA,CAAM,OAAA;AAAA,IACN,MAAM,IAAA,IAAQ;AAAA,GACf,CAAA;AACD,EAAA,MAAM,SAAS,OAAA,CAAQ,GAAA;AAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,KAClC,KAAK,GAAA,CAAI,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,MAAM,GAAA,CAAI,CAAC,QAAQ,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,IAAK,EAAE,CAAC,CAAC;AAAA,GACtF;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KACZ,KAAA,CACG,IAAI,CAAC,IAAA,EAAM,UAAU,GAAA,CAAI,IAAA,EAAM,OAAO,KAAK,CAAA,IAAK,GAAG,KAAA,KAAU,CAAA,GAAI,UAAU,MAAM,CAAC,CAAA,CAClF,IAAA,CAAK,IAAI,CAAA;AACd,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,QAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAEpE,EAAA,OAAO;AAAA,IACL,KAAK,OAAO,CAAA;AAAA,IACZ,SAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAC/B,EAAA;AAAA,IACA,CAAA,kBAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,6BAAA;AAAA,GAC1B,CAAE,KAAK,IAAI,CAAA;AACb;AAGO,SAAS,MAAA,CAAO,MAAA,EAAqB,MAAA,GAAiB,MAAA,EAAgB;AAC3E,EAAA,IAAI,WAAW,MAAA,EAAQ,OAAO,KAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC5D,EAAA,IAAI,MAAA,KAAW,OAAA,EAAS,OAAO,WAAA,CAAY,MAAM,CAAA;AACjD,EAAA,OAAO,WAAW,MAAM,CAAA;AAC1B;AAvJA,IAEM,YAAA;AAFN,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAEA,IAAM,YAAA,mBAAe,IAAI,GAAA,CAAI,CAAC,EAAA,EAAI,QAAA,EAAK,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACwB/E,SAAS,SAAA,CAAUJ,OAAAA,EAAgB,IAAA,EAAc,KAAA,EAAuB;AACtE,EAAA,IAAIA,OAAAA,KAAW,QAAQ,OAAO,IAAA;AAC9B,EAAA,IAAIA,OAAAA,KAAW,SAAA,EAAW,OAAO,IAAA,GAAO,KAAK,KAAA,GAAQ,CAAA,CAAA;AACrD,EAAA,OAAO,IAAA,GAAO,MAAM,KAAA,GAAQ,CAAA,CAAA;AAC9B;AAEA,SAAS,MAAA,CAAOA,SAAgB,OAAA,EAAyB;AACvD,EAAA,IAAIA,OAAAA,KAAW,MAAA,EAAQ,OAAO,CAAA,EAAG,OAAO,CAAA,EAAA,CAAA;AACxC,EAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,IAAA,MAAMQ,KAAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA;AACnC,IAAA,MAAM,OAAA,GAAW,UAAU,CAAA,GAAK,CAAA;AAChC,IAAA,OAAO,CAAA,EAAGA,KAAI,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,EACnD;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACpC,EAAA,MAAM,KAAA,GAAS,UAAU,EAAA,GAAM,CAAA;AAC/B,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,EAAA,CAAA;AACjD;AAEA,SAAS,cAAA,CAAeR,OAAAA,EAAgB,GAAA,mBAAM,IAAI,MAAK,EAAW;AAChE,EAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY;AAC7B,EAAA,IAAIA,OAAAA,KAAW,QAAQ,OAAO,IAAA;AAC9B,EAAA,IAAIA,OAAAA,KAAW,SAAA,EAAW,OAAO,IAAA,GAAO,CAAA,GAAI,KAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAS,GAAI,CAAC,CAAA;AACzE,EAAA,OAAO,IAAA,GAAO,EAAA,GAAK,GAAA,CAAI,QAAA,EAAS;AAClC;AAEA,SAAS,UAAU,KAAA,EAA4C;AAC7D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,MAAM,SAAS,CAAA;AAC3C,EAAA,OAAO,QAAQ,CAAC,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,MAAA;AACzC;AAEA,SAAS,YAAA,CACPA,OAAAA,EACA,KAAA,EACA,IAAA,EACoB;AACpB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,EAAK;AAChC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,IAAA,GAAO,UAAU,IAAI,CAAA;AAC3B,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,MAAA;AAE/B,EAAA,IAAIA,OAAAA,KAAW,QAAQ,OAAO,IAAA;AAE9B,EAAA,IAAIA,YAAW,SAAA,EAAW;AACxB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,uBAAuB,CAAA;AAClD,IAAA,MAAM,IAAI,MAAA,GAAS,CAAC,IAChB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,GAChB,UAAU,CAAC,CAAA,GACT,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GACjB,IAAA,KAAS,UACP,CAAA,GACA,CAAA;AACR,IAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG,OAAO,MAAA;AAC3B,IAAA,OAAO,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA;AAAA,EACrC;AAEA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,wBAAwB,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AAC/C,EAAA,MAAM,QAAQ,UAAA,GAAa,CAAC,IACxB,MAAA,CAAO,UAAA,CAAW,CAAC,CAAC,CAAA,GACpB,UAAU,CAAC,CAAA,GACT,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GACjB,IAAA,KAAS,UACP,CAAA,GACA,EAAA;AACR,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,EAAA,EAAI,OAAO,MAAA;AACpC,EAAA,OAAO,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,KAAK,CAAA;AACvC;AAEO,SAAS,aACdA,OAAAA,EACAS,MAAAA,EACAC,MACA,GAAA,mBAAM,IAAI,MAAK,EACD;AACd,EAAA,MAAM,OAAA,GAAU,cAAA,CAAeV,OAAAA,EAAQ,GAAG,CAAA;AAC1C,EAAA,MAAM,aAAaU,IAAAA,KAAQ,MAAA,GAAY,UAAU,YAAA,CAAaV,OAAAA,EAAQU,MAAK,KAAK,CAAA;AAChF,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,MAAM,YAAA;AAAA,MACJ,CAAA,sDAAA,EAAY,MAAA,CAAOA,IAAG,CAAC,CAAA,CAAA;AAAA,MACvBV,OAAAA,KAAW,MAAA,GACP,2CAAA,GACAA,OAAAA,KAAW,YACT,6CAAA,GACA;AAAA,KACR;AAAA,EACF;AAEA,EAAA,IAAI,eAAeS,MAAAA,KAAU,MAAA,GAAY,SAAY,YAAA,CAAaT,OAAAA,EAAQS,QAAO,OAAO,CAAA;AACxF,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAA,MAAM,OAAOT,OAAAA,KAAW,MAAA,GAAS,CAAA,GAAIA,OAAAA,KAAW,YAAY,CAAA,GAAI,EAAA;AAChE,IAAA,YAAA,GAAe,UAAA,GAAa,IAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,IAAA,MAAM,YAAA;AAAA,MACJ,qEAAc,MAAA,CAAOS,MAAK,CAAC,CAAA,GAAA,EAAM,MAAA,CAAOC,IAAG,CAAC,CAAA,CAAA;AAAA,MAC5C;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,UAAA,EAAW;AAChD;AAEA,SAAS,UAAA,CAAW,OAAcV,OAAAA,EAA4B;AAC5D,EAAA,MAAMS,MAAAA,GACJ,KAAA,CAAM,SAAA,KAAc,MAAA,GAChB,MAAA,CAAO,oBACP,SAAA,CAAUT,OAAAA,EAAQ,KAAA,CAAM,SAAA,EAAW,CAAC,CAAA;AAC1C,EAAA,MAAMU,OACJ,KAAA,CAAM,OAAA,KAAY,MAAA,GACd,MAAA,CAAO,oBACP,SAAA,CAAUV,OAAAA,EAAQ,KAAA,CAAM,OAAA,EAASA,YAAW,MAAA,GAAS,CAAA,GAAIA,OAAAA,KAAW,SAAA,GAAY,IAAI,EAAE,CAAA;AAC5F,EAAA,OAAO;AAAA,IACL,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,KAAA,EAAAS,MAAAA;AAAA,IACA,GAAA,EAAAC,IAAAA;AAAA,IACA,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEA,SAAS,gBAAA,CAAiB,WAA8B,KAAA,EAAmC;AACzF,EAAA,IAAI,CAAC,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA,EAAG;AACtD,IAAA,OAAO;AAAA,MACL;AAAA,QACE,KAAK,SAAA,CAAU,GAAA;AAAA,QACf,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,KAAK,KAAA,CAAM;AAAA;AACb,KACF;AAAA,EACF;AAEA,EAAA,OAAO,SAAA,CAAU,MAAA,CACd,GAAA,CAAI,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO,SAAA,CAAU,SAAS,CAAC,CAAA,CACrD,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACf,GAAG,KAAA;AAAA,IACH,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,IACxC,KAAK,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,MAAM,GAAG;AAAA,IAClC,CAAA,CACD,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,KAAA,IAAS,KAAA,CAAM,GAAG,CAAA,CAC1C,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACrC;AAGO,SAAS,gBAAgB,IAAA,EAAgD;AAC9E,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA;AACrC,EAAA,IAAI,IAAA,GAAO,CAAC,CAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA,MAAA,CAAA,EAAI;AAE7D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AAC/C,EAAA,IAAI,OAAA,GAAU,CAAC,CAAA,IAAK,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC9B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC3B,IAAA,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,CAAA,EAAG;AACpB,MAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAA,EAAM,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,YAAA,EAAK,CAAC,CAAA,YAAA,CAAA,EAAK;AAAA,IACvE;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,oBAAoB,CAAA;AAC7C,EAAA,IAAI,KAAA,GAAQ,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAC1B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACzB,IAAA,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA,IAAK,EAAA,EAAI;AACrB,MAAA,OAAO,EAAE,QAAQ,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAC,IAAI,IAAA,EAAM,CAAA,EAAG,MAAM,CAAC,CAAC,CAAA,MAAA,EAAI,CAAC,CAAA,MAAA,CAAA,EAAI;AAAA,IAC1F;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK;AACpC;AAEA,SAAS,WAAW,GAAA,EAA4B;AAC9C,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA,EAAK,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACxC,EAAA,IACE,CAAC,IAAA,IACD,IAAA,KAAS,QAAA,IACT,IAAA,KAAS,IAAA,IACT,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,MAAA,EACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAC1C;AAEA,SAAS,gBACPV,OAAAA,EACA,SAAA,EACA,cAAA,EACA,OAAA,GAAU,UAAU,OAAA,EACG;AACvB,EAAA,MAAM,KAAA,GAAQA,OAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,OAAO,CAAA,IAAKA,OAAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,MAAA;AACvF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgBA,OAAAA,CAAO,IAAI,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,IAAS,EAAA;AAChC,EAAA,OAAO;AAAA,IACL,QAAQ,SAAA,CAAU,MAAA;AAAA,IAClB,UAAA,EAAYA,OAAAA,CAAO,IAAA,IAAQ,SAAA,CAAU,IAAA;AAAA,IACrC,KAAA,EAAO,WAAW,QAAQ,CAAA;AAAA,IAC1B,QAAA;AAAA,IACA,OAAA,EAAS,aAAa,QAAQ,CAAA;AAAA,IAC9B,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,SAAA,CAAU,IAAA;AAAA,IAC9B,MAAA,EAAQ,KAAA,CAAM,UAAA,IAAc,SAAA,CAAU,MAAA,IAAU;AAAA,GAClD;AACF;AAEA,SAAS,QAAQA,OAAAA,EAAwB;AACvC,EAAA,MAAM,OAAO,MAAA,CAAOA,OAAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AACtC,EAAA,IAAIA,OAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,IAAA,MAAM,CAAA,GAAI,OAAOA,OAAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,KAAK,CAAC,CAAA;AAC1C,IAAA,OAAO,IAAA,GAAO,KAAK,CAAA,GAAI,CAAA,CAAA;AAAA,EACzB;AACA,EAAA,IAAIA,OAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,OAAOA,OAAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,KAAK,CAAC,CAAA;AAC9C,IAAA,OAAO,IAAA,GAAO,MAAM,KAAA,GAAQ,CAAA,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACT;AAWA,eAAsB,YACpB,QAAA,EACA,SAAA,EACAA,OAAAA,EACA,OAAA,GAA8B,EAAC,EACR;AACvB,EAAA,MAAM,QAAQ,YAAA,CAAaA,OAAAA,EAAQ,OAAA,CAAQ,KAAA,EAAO,QAAQ,GAAG,CAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,SAAA,EAAW,KAAK,CAAA;AACrD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,QAAQ,EAAC;AAAA,MACT,KAAA,EAAO,CAAC,CAAA,yBAAA,EAAQ,MAAA,CAAO,QAAQ,KAAA,IAAS,EAAE,CAAC,CAAA,MAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,GAAA,IAAO,EAAE,CAAC,CAAA,mBAAA,CAAM,CAAA;AAAA,MAC9E,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAuB;AAClD,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,UAAA;AAEJ,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,IAAA,MAAM,GAAA,GACJ,MAAM,KAAA,KAAU,KAAA,CAAM,MAClB,MAAA,CAAOA,OAAAA,EAAQ,MAAM,KAAK,CAAA,GAC1B,GAAG,MAAA,CAAOA,OAAAA,EAAQ,MAAM,KAAK,CAAC,IAAI,MAAA,CAAOA,OAAAA,EAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,SAAA,CAAU;AAAA,QACvC,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,GAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,UAAU,MAAA,IAAU,cAAA;AAAA,UAC1B,KAAA,EAAO,UAAU,UAAA,IAAc;AAAA,SACjC;AAAA,QACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAS,OAAA,CAAQ;AAAA,OAClB,CAAA;AACD,MAAA,SAAA,IAAa,CAAA;AACb,MAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,QAAA,MAAM,KAAA,GAAQ,eAAA;AAAA,UACZ,UAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAU,MAAA,IAAU,cAAA;AAAA,UACpB,KAAA,CAAM;AAAA,SACR;AACA,QAAA,IAAI,CAAC,KAAA,EAAO;AACZ,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA;AAChD,QAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,UAAU,IAAA,IAAQ,KAAA,CAAM,UAAU,IAAA,EAAM;AAChE,UAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,UAAA,KAAe,KAAA;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAM,GAAG,CAAA,iGAAA,CAAmB,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,KAAc,CAAA,IAAK,UAAA,EAAY,MAAM,UAAA;AAEzC,EAAA,MAAM,SAAS,CAAC,GAAG,eAAe,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,QAAQ,CAAA,CAAE,MAAM,IAAI,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAC,CAAA;AAChG,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAC1B,EAAA,OAAO,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA,CAAO,OAAO,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,KAAU,IAAA,EAAM;AACrE,IAAA,MAAA,CAAO,GAAA,EAAI;AAAA,EACb;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,KAAA,CAAM,KAAK,sFAAgB,CAAA;AAAA,EAC7B;AACA,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,kBAAA;AACvC,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,GAAS,SAAA,GAAY,OAAO,KAAA,CAAM,CAAC,SAAS,CAAA,GAAI,MAAA;AACtE,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mEAAA,EAAe,SAAS,CAAA,aAAA,CAAK,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAQ;AAClC;AA5UA,IAwBM,kBAAA;AAxBN,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,eAAA,GAAA;AAAA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAuBA,IAAM,kBAAA,GAAqB,GAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACF3B,eAAsB,cAAA,CACpB,QAAA,EACA,OAAA,EACAA,OAAAA,EACyB;AACzB,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,EAAG;AACpD,IAAA,MAAM,eAAA,CAAgB,6CAAyB,6EAAgC,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,WAAA,EAAa;AACxC,IAAA,MAAM,eAAA,CAAgB,CAAA,iCAAA,EAAgB,WAAW,CAAA,mBAAA,CAAA,EAAQ,sFAAgB,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,UAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,OAAA,EAAS;AACnC,IAAA,MAAMI,OAAAA,GAAS,cAAc,KAAK,CAAA;AAClC,IAAA,IAAI,CAACA,OAAAA,EAAQ;AACX,MAAA,MAAM,eAAA;AAAA,QACJ,6CAAU,KAAK,CAAA,CAAA;AAAA,QACf,6CAAU,iBAAA,CAAkB,KAAK,EAAE,IAAA,CAAK,QAAG,KAAK,sFAAgB,CAAA;AAAA,OAClE;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AAAA,EACrB;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAACA,OAAAA,KAAW,OAAA,CAAQA,OAAM,CAAC,CAAC,CAAA;AAC/D,EAAA,IAAI,MAAA,CAAO,OAAO,CAAA,EAAG;AACnB,IAAA,MAAM,eAAA,CAAgB,4DAAoB,gIAAuB,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAKJ,YAAW,MAAA,EAAQ;AAC3C,IAAA,MAAM,IAAI,QAAA,CAAS,oBAAA,EAAsB,uFAAA,EAAmB;AAAA,MAC1D,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAQ,CAAC,CAAA;AACvB,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,eAAA,CAAgB,0DAAkB,CAAA;AAEpD,EAAA,MAAM,aAAa,MAAM,gBAAA,CAAiB,QAAA,EAAU,OAAA,EAASA,SAAQ,KAAK,CAAA;AAC1E,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,UAAA,EAAY,OAAO,EAAE,UAAA,EAAW;AAExD,EAAA,MAAM,OAAO,UAAA,CAAW,SAAA;AACxB,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,KAAA,MAAWI,WAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,SAAA,GAA+B;AAAA,MACnC,GAAG,IAAA;AAAA,MACH,QAAQA,OAAAA,CAAO,IAAA;AAAA,MACf,YAAYA,OAAAA,CAAO;AAAA,KACrB;AACA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,EAAU,WAAWJ,OAAAA,EAAQ;AAAA,QAC5D,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAS,OAAA,CAAQ;AAAA,OAClB,CAAA;AACD,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,QAAQI,OAAAA,CAAO,IAAA;AAAA,QACf,YAAYA,OAAAA,CAAO,KAAA;AAAA,QACnB,QAAQ,MAAA,CAAO;AAAA,OAChB,CAAA;AACD,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAGA,OAAAA,CAAO,IAAI,CAAA,MAAA,EAAI,IAAI,EAAE,CAAC,CAAA;AAClE,MAAA,IAAI,MAAA,CAAO,SAAS,OAAA,GAAU,IAAA;AAAA,IAChC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,EAAGA,OAAAA,CAAO,IAAI,CAAA,oCAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC/E;AACA,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,MAAM,KAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,MAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AA3GA,IAmBM,WAAA;AAnBN,IAAA,YAAA,GAAA,KAAA,CAAA;AAAA,EAAA,gBAAA,GAAA;AAAA,IAAA,WAAA,EAAA;AAEA,IAAA,YAAA,EAAA;AACA,IAAA,aAAA,EAAA;AACA,IAAA,WAAA,EAAA;AAeA,IAAM,WAAA,GAAc,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACoBpB,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,IAAI,MAAA,KAAW,MAAM,OAAO,MAAA;AAC5B,EAAA,IAAI,MAAA,KAAW,MAAM,OAAO,SAAA;AAC5B,EAAA,IAAI,MAAA,KAAW,MAAM,OAAO,OAAA;AAC5B,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,EAAK;AACxB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,IAAI,OAAO,KAAA;AACtC,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AAC1C,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,KAAA;AAC/B,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,IAAI,IAAA,KAAS,UAAK,OAAO,IAAA;AACzB,EAAA,OAAO,mIAAA,CAAoI,IAAA;AAAA,IACzI;AAAA,GACF;AACF;AAGO,SAAS,YAAY,QAAA,EAAsC;AAChE,EAAA,MAAM,UAAU,CAAC,GAAG,SAAS,QAAA,CAAS,qBAAqB,CAAC,CAAA,CACzD,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,MAAU,EAAE,CAAA,CACrC,OAAO,OAAO,CAAA;AACjB,EAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AAC3D,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAK,CAAA;AAC/B,IAAA,IAAI,SAAA,IAAa,YAAA,CAAa,SAAS,CAAA,EAAG,OAAO,SAAA;AAAA,EACnD;AACA,EAAA,IAAI,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,GAAA;AACtC,EAAA,OAAO,MAAA;AACT;AAEA,SAASO,WAAU,KAAA,EAAsD;AACvE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA;AACnC,EAAA,OAAO,QAAQ,CAAC,CAAA,GAAI,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,MAAA;AACzC;AAEA,SAAS,cAAc,IAAA,EAAmC;AACxD,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK;AACrC,EAAA,OAAO;AAAA,IACL,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,SAAS,IAAA,CAAK,QAAA;AAAA,IACd,IAAA,EAAM,KAAK,MAAA,EAAQ,IAAA,MAAU,IAAA,CAAK,OAAA,EAAS,MAAK,IAAK,QAAA;AAAA,IACrD,QAAA;AAAA,IACA,IAAA,EAAM,YAAY,QAAQ,CAAA;AAAA,IAC1B,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAU;AAAA,IAC/C,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,QAAQ,IAAA,CAAK,OAAA;AAAA,IACb,MAAA,EAAQ,KAAK,OAAA,IAAW,cAAA;AAAA,IACxB,YAAY,IAAA,CAAK,EAAA;AAAA,IACjB,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK,UAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,UAAU,IAAA,CAAK;AAAA,GACjB;AACF;AAEA,SAAS,YAAY,IAAA,EAA+B;AAClD,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,GAAA;AAAA,IACT,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK;AAAA,IACrB,QAAA,EAAU,KAAK,YAAA,IAAgB,MAAA;AAAA,IAC/B,OAAO,IAAA,CAAK,cAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAA,EAAWA,UAAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAAA,IAC/B,OAAA,EAASA,UAAAA,CAAU,IAAA,CAAK,KAAK;AAAA,GAC/B;AACF;AAEA,SAAS,YAAA,CAAa,MAAwB,GAAA,EAA8B;AAC1E,EAAA,MAAM,UACJ,IAAA,CAAK,QAAA,EAAU,IAAA,EAAK,IACpB,KAAK,QAAA,EAAU,IAAA,EAAK,IACpB,IAAA,CAAK,UAAU,IAAA,EAAK,IACpB,IAAA,CAAK,OAAA,EAAS,MAAK,IACnB,MAAA;AACF,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,GAAA;AAAA,IACT,GAAA,EAAK,KAAK,SAAA,IAAa,GAAA;AAAA,IACvB,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAAA,IACtB,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,IAAA,EAAK;AAAA,IAC/B,IAAA,EAAM,KAAK,OAAA,IAAW,IAAA,CAAK,YAAY,QAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK,GAAI,MAAA;AAAA,IACnE,OAAA;AAAA,IACA,SAAA,EAAW,KAAK,eAAA,IAAmB,MAAA;AAAA,IACnC,OAAA,EAAS,KAAK,eAAA,IAAmB,MAAA;AAAA,IACjC,IAAA,EAAM,KAAK,YAAA,IAAgB;AAAA,GAC7B;AACF;AAEA,SAAS,UAAU,OAAA,EAA0C;AAC3D,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAACX,OAAAA,MAAY;AAAA,IAC9B,MAAMA,OAAAA,CAAO,IAAA;AAAA,IACb,MAAMA,OAAAA,CAAO,IAAA;AAAA,IACb,MAAA,EAAQA,OAAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACpC,IAAI,KAAA,CAAM,GAAA;AAAA,MACV,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,UAAU,KAAA,CAAM,UAAA;AAAA,MAChB,MAAM,KAAA,CAAM,OAAA,IAAW,MAAM,OAAA,KAAY,QAAA,GAAM,MAAM,OAAA,GAAU,MAAA;AAAA,MAC/D,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,EAAA;AAAA,MACd,YAAY,KAAA,CAAM;AAAA,KACpB,CAAE;AAAA,GACJ,CAAE,CAAA;AACJ;AAjJA,IAuBM,OAAA,EAEA,KAQAY,YAAAA,EAmHO,eAAA;AApJb,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,qBAAA,GAAA;AAuBA,IAAM,OAAA,GAAU,kCAAA;AAEhB,IAAM,GAAA,GAAM;AAAA,MACV,MAAA,EAAQ,KAAK,EAAA,GAAK,GAAA;AAAA,MAClB,MAAA,EAAQ,KAAK,EAAA,GAAK,GAAA;AAAA,MAClB,IAAA,EAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA,MACrB,UAAA,EAAY,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA,MAC3B,SAAA,EAAW,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK;AAAA,KAChC;AAEA,IAAMA,YAAAA,GAAsC;AAAA,MAC1C,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,GAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AA+GO,IAAM,kBAAN,MAA6C;AAAA,MACjC,MAAA;AAAA,MAEjB,YAAY,MAAA,EAAmB;AAC7B,QAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,MAChB;AAAA,MAEA,MAAM,OAAO,MAAA,EAA6C;AACxD,QAAA,MAAM,IAAA,GAAO,OAAO,IAAA,KAAS,MAAA,CAAO,SAASA,YAAAA,CAAY,MAAA,CAAO,MAAM,CAAA,GAAI,EAAA,CAAA;AAC1E,QAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,CAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,QAAA,MAAM,QAAA,GAAW,UAAU,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA,CAAA;AACrE,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,QAAuB,QAAA,EAAU;AAAA,UAC9D,KAAA,EAAO;AAAA,YACL,QAAQ,MAAA,CAAO,OAAA;AAAA,YACf,OAAA,EAAS,IAAA;AAAA,YACT,QAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,QAAA;AAAA,UACA,YAAY,GAAA,CAAI,MAAA;AAAA,UAChB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AACD,QAAA,OAAO;AAAA,UACL,UAAU,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,IAAI,aAAa,CAAA;AAAA,UAC5C,KAAA,EAAO,KAAK,KAAA,IAAS;AAAA,SACvB;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ,MAAA,EAA2C;AACvD,QAAA,MAAM,WAAW,CAAA,KAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,EAAE,CAAA,CAAA;AACxD,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,QAAuB,0BAAA,EAA4B;AAAA,UAChF,KAAA,EAAO;AAAA,YACL,GAAA,EAAK,OAAO,GAAA,IAAO,EAAA;AAAA,YACnB,MAAM,MAAA,CAAO;AAAA,WACf;AAAA,UACA,QAAA;AAAA,UACA,YAAY,GAAA,CAAI,IAAA;AAAA,UAChB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AACD,QAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,WAAW,CAAA;AAAA,MACrC;AAAA,MAEA,MAAM,cAAc,MAAA,EAAqD;AACvE,QAAA,MAAM,QAAA,GAAW,CAAA,WAAA,EAAc,MAAA,CAAO,GAAG,CAAA,CAAA;AACzC,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,UAC7B,2BAAA;AAAA,UACA;AAAA,YACE,KAAA,EAAO;AAAA,cACL,KAAK,MAAA,CAAO,GAAA;AAAA,cACZ,EAAA,EAAI,EAAA;AAAA,cACJ,IAAA,EAAM;AAAA,aACR;AAAA,YACA,QAAA;AAAA,YACA,YAAY,GAAA,CAAI,UAAA;AAAA,YAChB,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,QAAQ,MAAA,CAAO;AAAA;AACjB,SACF;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAa,IAAA,EAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACvE;AAAA,MAEA,MAAM,UAAU,MAAA,EAA+C;AAC7D,QAAA,MAAM,QAAA,GAAW,CAAA,OAAA,EAAU,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,KAAK,CAAA,CAAA;AAC5F,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,QAAyB,gBAAA,EAAkB;AAAA,UACxE,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM;AAAA,YACJ,KAAK,MAAA,CAAO,GAAA;AAAA,YACZ,YAAA,EAAc,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,YAC7B,WAAA,EAAa,EAAA;AAAA,YACb,GAAA,EAAK,CAAC,EAAE,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,YAC9D,QAAA,EAAU,GAAA;AAAA,YACV,GAAA,EAAK,CAAC,MAAA,CAAO,GAAG,CAAA;AAAA,YAChB,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAA;AAAA,UACA,YAAY,GAAA,CAAI,MAAA;AAAA,UAChB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,QAAQ,MAAA,CAAO;AAAA,SAChB,CAAA;AACD,QAAA,OAAO,SAAA,CAAU,IAAA,IAAQ,EAAE,CAAA;AAAA,MAC7B;AAAA,MAEA,MAAM,aAAa,MAAA,EAAiD;AAClE,QAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAA0B,iBAAA,EAAmB;AAAA,UAC9D,QAAA,EAAU,WAAA;AAAA,UACV,YAAY,GAAA,CAAI,SAAA;AAAA,UAChB;AAAA,SACD,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC5MA,SAAS,SAAA,GAAwB;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,UAAA;AAAA,IACL,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AACF;AAEA,SAAS,cAAc,SAAA,EAA6C;AAClE,EAAA,OAAO;AAAA,IACL,IAAI,CAAA,EAAG,SAAA,CAAU,GAAG,CAAA,CAAA,EAAI,UAAU,OAAO,CAAA,CAAA;AAAA,IACzC,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,aAAa,SAAA,CAAU,WAAA;AAAA,IACvB,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,WAAW,SAAA,CAAU,SAAA;AAAA,IACrB,QAAQ,SAAA,CAAU,MAAA;AAAA,IAClB,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,MAAM,SAAA,CAAU;AAAA,GAClB;AACF;AAEA,SAAS,eAAA,CACP,MAAA,EACA,MAAA,EACA,UAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,oHAAA;AAAA,MACT,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM;AAAA;AACR,GACF;AACF;AAEA,SAAS,cAAA,CACP,MAAA,EACA,MAAA,EACAV,MAAAA,EACA,WAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,uCAASA,MAAK,CAAA,oCAAA,CAAA;AAAA,MACvB,SAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAM,6FAAkB,WAAA,CAAY,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA;AAAA,MACzD,OAAA,EAAS,EAAE,WAAA;AAAY;AACzB,GACF;AACF;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,MAAA,EACAA,MAAAA,EACA,UAAA,EACyB;AACzB,EAAA,IAAI,WAAW,IAAA,KAAS,WAAA;AACtB,IAAA,OAAO,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,UAAA,CAAW,UAAU,CAAA;AAC9D,EAAA,IAAI,UAAA,CAAW,SAAS,UAAA,EAAY;AAClC,IAAA,OAAO,cAAA,CAAe,MAAA,EAAQ,MAAA,EAAQA,MAAAA,EAAO,WAAW,WAAW,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,QAAA,CACb,QAAA,EACA,OAAA,EACA,MAAA,EACA,MAAA,EACsB;AACtB,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,MAAM,UAAU,MAAM,YAAA;AAAA,MACpB,QAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAQ,IAAA,IAAQ,GAAA;AAAA,MAChB,QAAQ,GAAA,IAAO,EAAA;AAAA,MACf,QAAQ,KAAA,IAAS;AAAA,KACnB;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,GAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI;AAAC,KAC7D;AAAA,EACF;AAEA,EAAA,MAAMA,MAAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK;AAClC,EAAA,IAAI,CAACA,MAAAA,EAAO;AACV,IAAA,MAAM,eAAA,CAAgB,mCAAe,6DAA8C,CAAA;AAAA,EACrF;AAEA,EAAA,MAAME,OAAAA,GAAS,OAAA,CAAQ,MAAA,GACnB,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,GAC3B,mBAAA,CAAoB,OAAA,CAAQ,KAAK,CAAA,IAAK,eAAA;AAC3C,EAAA,IAAI,CAACA,OAAAA,EAAQ;AACX,IAAA,MAAM,eAAA;AAAA,MACJ,CAAA,0CAAA,EAAU,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAA;AAAA,MAC9B,CAAA,0CAAA,EAAU,kBAAkB,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,CAAE,IAAA,CAAK,QAAG,CAAA,IAAK,oEAAa,CAAA;AAAA,KAC9E;AAAA,EACF;AAEA,EAAA,MAAMJ,OAAAA,GAAiB,YAAY,OAAO,CAAA;AAE1C,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,QAAA,EAAU,SAASA,OAAM,CAAA;AAC/D,IAAA,MAAMa,SAAQ,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQX,MAAAA,EAAO,SAAS,UAAU,CAAA;AACzE,IAAA,IAAIW,QAAO,OAAOA,MAAAA;AAClB,IAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,MAAA,MAAM,IAAI,QAAA,CAAS,gBAAA,EAAkB,gDAAkB,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,aAAA,CAAc,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAAA,MAClD,MAAA,EAAQ,SAAS,MAAA,CAAO,MAAA;AAAA,MACxB,GAAI,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAM,GAAI,EAAC;AAAA,MAC3E,GAAI,SAAS,MAAA,CAAO,OAAA,GAAU,EAAE,OAAA,EAAS,IAAA,KAAS;AAAC,KACrD;AAAA,EACF;AAEA,EAAA,MAAM,aAAa,MAAM,gBAAA,CAAiB,QAAA,EAAU,OAAA,EAASb,SAAQI,OAAM,CAAA;AAC3E,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQF,QAAO,UAAU,CAAA;AAChE,EAAA,IAAI,OAAO,OAAO,KAAA;AAClB,EAAA,IAAI,UAAA,CAAW,SAAS,UAAA,EAAY;AAClC,IAAA,MAAM,IAAI,QAAA,CAAS,gBAAA,EAAkB,wCAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,SAAA,CAAU,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AAE7C,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAA,IAAS,CAAC,CAAC,CAAC,CAAA;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,EAAU,WAAWF,OAAAA,EAAQ;AAAA,MAC5D,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,SAAA,EAAW,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,MACjC,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,UAAU,IAAI,CAAA;AACpE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAC,KAAK,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,CAAC,KAAK,CAAA;AACtF,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,OAAO,KAAA,CAAM,MAAA;AAAA,QACd,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,UAAA,CAAW,gCAAO,CAAA,IAAK,CAAC,IAAA,CAAK,UAAA,CAAW,sCAAQ;AAAA;AAClE,KACF;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,MAAA;AAAA,MACA,QAAQ,SAAA,EAAU;AAAA,MAClB,SAAA,EAAW,cAAc,SAAS,CAAA;AAAA,MAClC,MAAA;AAAA,MACA,GAAI,KAAA,CAAM,MAAA,GAAS,IAAI,EAAE,KAAA,KAAU,EAAC;AAAA,MACpC,GAAI,MAAA,CAAO,OAAA,GAAU,EAAE,OAAA,EAAS,IAAA,KAAS;AAAC,KAC5C;AAAA,EACF;AAEA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,EAAU,WAAWA,OAAAA,EAAQ;AAAA,MAC5D,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACD,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAA,CAAO,KAAK,CAAA;AAC1B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA;AAAA,MACJ,MAAA;AAAA,MACA,QAAQ,SAAA,EAAU;AAAA,MAClB,SAAA,EAAW,cAAc,SAAS,CAAA;AAAA,MAClC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,GAAI,KAAA,CAAM,MAAA,GAAS,IAAI,EAAE,KAAA,KAAU,EAAC;AAAA,MACpC,GAAI,MAAA,CAAO,OAAA,GAAU,EAAE,OAAA,EAAS,IAAA,KAAS;AAAC,KAC5C;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,QAAA,CAAS,oBAAA,EAAsB,CAAA,0CAAA,EAAU,MAAM,CAAA,CAAA,EAAI;AAAA,IAC3D,SAAA,EAAW,KAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACP,CAAA;AACH;AAGO,SAAS,YAAA,CAAa,OAAA,GAA4B,EAAC,EAAc;AACtE,EAAA,OAAO,IAAI,UAAU,OAAO,CAAA;AAC9B;AA2BA,eAAsB,KAAA,CAAM,OAAA,GAAwB,EAAC,EAAyB;AAC5E,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,QAAA;AACjC,EAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAO,OAAA,CAAQ,kBAAkB,IAAM,CAAA;AACvE,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,MAAM,UAAU,MAAM,UAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAC7D,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAI,QAAQ,MAAA,CAAO,OAAA,aAAoB,KAAA,CAAM,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,SAC7D,OAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,IAAA,aAAA,GAAgB,IAAA;AAChB,IAAA,UAAA,CAAW,KAAA,CAAM,IAAI,YAAA,CAAa,qBAAA,EAAuB,cAAc,CAAC,CAAA;AAAA,EAC1E,GAAG,cAAc,CAAA;AAEjB,EAAA,MAAM,SAAS,YAAA,CAAa;AAAA,IAC1B,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,KAAA,EAAO,YAAA;AAAA,IACP,OAAA,EAAS,cAAA;AAAA,IACT,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,MAAA,EAAQ,OAAA,CAAQ,KAAA,GACX,OAAA,CAAQ,MAAA,KAAW,CAAC,OAAA,EAAS,MAAA,KAAW,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,MAAM,CAAA,CAAA,GACtE;AAAA,GACL,CAAA;AACD,EAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB,MAAM,CAAA;AAE3C,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAA,CAAS,QAAA,EAAU,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO,EAAG,MAAA,EAAQ,SAAA,EAAW,CAAA;AAAA,EAChG,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA;AAAA,QACA,QAAQ,SAAA,EAAU;AAAA,QAClB,KAAA,EAAO,YAAA,CAAa,YAAA,CAAa,cAAc,CAAC;AAAA,OAClD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA;AAAA,MACA,QAAQ,SAAA,EAAU;AAAA,MAClB,KAAA,EAAO,aAAa,KAAK;AAAA,KAC3B;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,EACtD;AACF;AAxTA,IA4BM,WAAA,EACA,YAIA,YAAA,EACA,cAAA;AAlCN,IAAA,UAAA,GAAA,KAAA,CAAA;AAAA,EAAA,cAAA,GAAA;AAAA,IAAA,UAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AAEA,IAAA,iBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AAMA,IAAA,aAAA,EAAA;AACA,IAAA,WAAA,EAAA;AA0SA,IAAA,UAAA,EAAA;AAEA,IAAA,WAAA,EAAA;AACA,IAAA,WAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,iBAAA,EAAA;AACA,IAAA,YAAA,EAAA;AACA,IAAA,aAAA,EAAA;AArSA,IAAM,WAAA,GAAc,gCAAA;AACpB,IAAM,UAAA,GAAa,4BAAA;AAInB,IAAM,eAAe,IAAI,QAAA,CAAS,EAAE,UAAA,EAAY,KAAK,CAAA;AACrD,IAAM,cAAA,GAAiB,IAAI,WAAA,CAAY,EAAE,eAAe,GAAA,EAAO,QAAA,EAAU,KAAK,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClC9E,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA8BA,SAAS,WAAW,MAAA,EAAqB;AACvC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA;AAAA,IAC1E,OAAA,EAAS,CAAC,MAAA,CAAO;AAAA,GACnB;AACF;AAGO,SAAS,eAAA,CAAgB,UAAmB,KAAA,EAAyB;AAC1E,EAAA,MAAM,SAAS,IAAIc,gBAAA;AAAA,IACjB,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,OAAA,EAAQ;AAAA,IACtC;AAAA,MACE,YAAA,EACE;AAAA;AAGJ,GACF;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,YAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,kGAAA;AAAA,MACP,WAAA,EACE,wPAAA;AAAA,MACF,WAAA,EAAa;AAAA,QACX,KAAA,EAAOC,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,mHAA8B,CAAA;AAAA,QACzD,MAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,kFAAiB;AAAA;AAC9E,KACF;AAAA,IACA,OAAO,EAAE,KAAA,EAAAb,MAAAA,EAAO,MAAA,EAAAE,SAAQ,MAAA,EAAAJ,OAAAA,EAAQ,KAAA,EAAM,KACpC,UAAA,CAAW,MAAM,QAAQ,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAAE,MAAAA,EAAO,MAAA,EAAAE,SAAQ,MAAA,EAAAJ,OAAAA,EAAQ,KAAA,EAAO,CAAC;AAAA,GAChF;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,YAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,gFAAA;AAAA,MACP,WAAA,EACE,0RAAA;AAAA,MACF,WAAA,EAAa;AAAA,QACX,KAAA,EAAOe,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+EAAwB,CAAA;AAAA,QACnD,MAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,sDAAc,CAAA;AAAA,QAC/E;AAAA;AACF,KACF;AAAA,IACA,OAAO,EAAE,KAAA,EAAAb,MAAAA,EAAO,QAAAE,OAAAA,EAAQ,MAAA,EAAAJ,OAAAA,EAAQ,KAAA,EAAAS,QAAO,GAAA,EAAAC,IAAAA,EAAK,SAAA,EAAW,WAAA,EAAAJ,cAAY,KACjE,UAAA;AAAA,MACE,MAAM,OAAA,CAAQ;AAAA,QACZ,MAAA,EAAQ,QAAA;AAAA,QACR,KAAA,EAAAJ,MAAAA;AAAA,QACA,MAAA,EAAAE,OAAAA;AAAA,QACA,MAAA,EAAAJ,OAAAA;AAAA,QACA,KAAA,EAAAS,MAAAA;AAAA,QACA,GAAA,EAAAC,IAAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA,EAAAJ;AAAA,OACD;AAAA;AACH,GACJ;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,aAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,oEAAA;AAAA,MACP,WAAA,EACE,2PAAA;AAAA,MACF,WAAA,EAAa;AAAA,QACX,KAAA,EAAOS,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yDAAiB,CAAA;AAAA,QAC5C,OAAA,EAASA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,SAAS,qFAAyB,CAAA;AAAA,QAC7E,MAAA;AAAA,QACA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,GAAI,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,wDAAW,CAAA;AAAA,QAC5E;AAAA;AACF,KACF;AAAA,IACA,OAAO,EAAE,KAAA,EAAAb,MAAAA,EAAO,SAAS,MAAA,EAAAF,OAAAA,EAAQ,KAAA,EAAAS,MAAAA,EAAO,GAAA,EAAAC,IAAAA,EAAK,SAAA,EAAW,WAAA,EAAAJ,cAAY,KAClE,UAAA;AAAA,MACE,MAAM,OAAA,CAAQ;AAAA,QACZ,MAAA,EAAQ,SAAA;AAAA,QACR,KAAA,EAAAJ,MAAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA,EAAAF,OAAAA;AAAA,QACA,KAAA,EAAAS,MAAAA;AAAA,QACA,GAAA,EAAAC,IAAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA,EAAAJ;AAAA,OACD;AAAA;AACH,GACJ;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,aAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,8DAAA;AAAA,MACP,WAAA,EACE,oXAAA;AAAA,MACF,WAAA,EAAa;AAAA,QACX,MAAMS,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,2EAAoB,CAAA;AAAA,QACzD,KAAKA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,iEAAe,CAAA;AAAA,QACnD,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,8CAAW;AAAA;AACvE,KACF;AAAA,IACA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,OAClB,UAAA,CAAW,MAAM,OAAA,CAAQ,EAAE,QAAQ,SAAA,EAAW,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,CAAC;AAAA,GACrE;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,cAAA,GAAgC;AACpD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,MAAM,SAAA,GAAY,IAAIC,6BAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAC9B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,EAAwB,OAAO,CAAA;AAAA,CAAqB,CAAA;AAC3E;AAxJA,IAQM,OAAA,EAIA,MAAA,EACA,MAAA,EAIA,KAAA,EAIA,KAIA,WAAA,EAiIA,MAAA;AA1JN,IAAA,QAAA,GAAA,KAAA,CAAA;AAAA,EAAA,YAAA,GAAA;AAKA,IAAA,UAAA,EAAA;AAGA,IAAM,OAAA,GAAU,OAAA;AAIhB,IAAM,SAASD,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qHAAsB,CAAA;AACpE,IAAM,MAAA,GAASA,KAAA,CACZ,IAAA,CAAK,CAAC,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAC,CAAA,CACjC,QAAA,EAAS,CACT,QAAA,CAAS,uGAA4B,CAAA;AACxC,IAAM,KAAA,GAAQA,KAAA,CACX,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAC9B,QAAA,EAAS,CACT,SAAS,oEAA4B,CAAA;AACxC,IAAM,GAAA,GAAMA,KAAA,CACT,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAC9B,QAAA,EAAS,CACT,SAAS,oEAA4B,CAAA;AACxC,IAAM,cAAcA,KAAA,CACjB,MAAA,GACA,QAAA,EAAS,CACT,SAAS,6GAAuC,CAAA;AA8HnD,IAAM,MAAA,GACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,IAAa,yPAAY,KAAQE,iBAAA,CAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,IAAA;AACtF,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,cAAA,EAAe,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAChC,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UACb,CAAA,EAAG,iBAAiB,KAAA,GAAS,KAAA,CAAM,SAAS,KAAA,CAAM,OAAA,GAAW,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,SAC5E;AACA,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,MACrB,CAAC,CAAA;AAAA,IACH;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjKA,UAAA,EAAA;AAGA,IAAMC,QAAAA,GAAU,OAAA;AAEhB,IAAM,IAAA,GAAO,aAAaA,QAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAyDjC,SAAS,YAAA,CAAa,OAA2B,IAAA,EAAkC;AACjF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,MAAM,KAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AACzD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,iDAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAU,IAAA,EAAgE;AACjF,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,SAAS,QAAQ,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,EAAE,MAAM,IAAA,EAAK;AAC7F,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,IAAA,EAAK;AAE9E,EAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,MAAM,IAAA,EAAK;AAClC,EAAA,MAAM,KAAA,uBAAY,GAAA,CAAI,CAAC,UAAU,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,KAAK,CAAC,CAAA;AACvE,EAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,OAAA,GAAwB,EAAE,MAAA,EAAQ,OAAA,EAAkC;AAC1E,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,MAAA,GAAiB,MAAA;AACrB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAA;AAEJ,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,GAAA,GAAM,KAAK,KAAK,CAAA;AACtB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,MAA0B;AACrC,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,OAAO,KAAK,KAAK,CAAA;AAAA,IACnB,CAAA;AAEA,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,QAAQ,IAAA,EAAK;AACnB,QAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,SAAA,IAAa,UAAU,OAAA,EAAS;AAChE,UAAA,MAAM,IAAI,MAAM,0DAAiC,CAAA;AAAA,QACnD;AACA,QAAA,OAAA,CAAQ,MAAA,GAAS,KAAA;AACjB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,UAAA;AACH,QAAA,OAAA,CAAQ,SAAS,IAAA,EAAK;AACtB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,CAAQ,OAAA,GAAA,CAAW,IAAA,EAAK,IAAK,EAAA,EAC1B,MAAM,MAAM,CAAA,CACZ,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,OAAO,OAAO,CAAA;AACjB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,OAAA,CAAQ,QAAQ,IAAA,EAAK;AACrB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,OAAA,CAAQ,MAAM,IAAA,EAAK;AACnB,QAAA;AAAA,MACF,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,QAAQ,IAAA,EAAK;AACnB,QAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAChB,QAAA,OAAA,CAAQ,GAAA,GAAM,KAAA;AACd,QAAA;AAAA,MACF;AAAA,MACA,KAAK,SAAA;AACH,QAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAK,EAAG,SAAS,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,cAAA;AACH,QAAA,OAAA,CAAQ,SAAA,GAAY,YAAA,CAAa,IAAA,EAAK,EAAG,cAAc,CAAA;AACvD,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,MAAA,GAAS,IAAA,EAAK;AACd,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,OAAA,CAAQ,OAAO,IAAA,EAAK;AACpB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,OAAA,CAAQ,MAAM,IAAA,EAAK;AACnB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAK,EAAG,SAAS,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,CAAQ,SAAA,GAAY,YAAA,CAAa,IAAA,EAAK,EAAG,WAAW,CAAA;AACpD,QAAA;AAAA,MACF,KAAK,iBAAA;AACH,QAAA,OAAA,CAAQ,cAAA,GAAiB,YAAA,CAAa,IAAA,EAAK,EAAG,iBAAiB,CAAA;AAC/D,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,KAAA,GAAQ,IAAA,EAAK;AACb,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAA,GAAS,MAAA;AACT,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,MAAA,GAAS,OAAA;AACT,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAA,GAAS,MAAA;AACT,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAChB,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAAA;AACjC,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AAC5C,EAAA,IAAI,OAAA,KAAY,SAAA,IAAa,OAAA,KAAY,KAAA,IAAS,CAAC,SAAA,EAAW;AAC5D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,4GAAA,CAA8B,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,SAAS,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,aAAa,MAAA,EAAU;AAAA,IACrD,MAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAI,KAAA,KAAU,MAAA,GAAY,EAAC,GAAI,EAAE,KAAA;AAAM,GACzC;AACF;AAEA,eAAe,oBAAoB,QAAA,EAAoC;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAU,MAAM,OAAO,QAAQ,CAAA;AACrC,IAAA,OAAO,IAAI,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAA;AAAA,EACvC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,MAAM,mJAAA,EAA2D;AAAA,MACzE,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACF;AAEA,SAAS,SAAS,MAAA,EAA6B;AAC7C,EAAA,IAAI,MAAA,CAAO,IAAI,OAAO,CAAA;AACtB,EAAA,QAAQ,MAAA,CAAO,OAAO,IAAA;AAAM,IAC1B,KAAK,kBAAA;AAAA,IACL,KAAK,eAAA;AAAA,IACL,KAAK,oBAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,CAAA;AAAA,IACT;AACE,MAAA,OAAO,CAAA;AAAA;AAEb;AAEA,eAAe,SAAS,MAAA,EAAyC;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,OAAO,KAAA,CAAM,OAAO,OAAO,CAAA;AAE/C,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AACxC,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/B,IAAA,OAAO,KAAA,CAAM,EAAE,GAAG,MAAA,CAAO,SAAS,WAAA,EAAa,MAAA,CAAO,QAAQ,CAAA;AAAA,EAChE;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,MAAM,mGAAuC,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,GAAa,KAAA,GAAQ,CAAC,CAAA;AAC9C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,EAAE,GAAG,MAAA,CAAO,SAAS,WAAA,EAAa,SAAA,CAAU,IAAI,CAAA;AAC/D;AAGA,eAAsB,IAAI,IAAA,EAAiC;AACzD,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AACzB,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGA,QAAO;AAAA,CAAI,CAAA;AACnC,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAA,GAAS,MAAA;AAAA,EACX,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;;AAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAC3F,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,YAAY,KAAA,EAAO;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,cAAA,EAAAC,eAAAA,EAAe,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,QAAA,EAAA,EAAA,WAAA,CAAA,CAAA;AACjC,MAAA,MAAMA,eAAAA,EAAe;AACrB,MAAA,OAAO,CAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,IAAS,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,SAAS,sBAAA,EAAwB;AACtF,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,6GAA2D,CAAA;AAChF,QAAA,OAAO,CAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,MAAM,mBAAA,CAAoB,OAAO,KAAK,CAAA;AAAA,IACpE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,CAAI,CAAA;AAClF,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AACpC,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,OAAO,MAAA,EAAQ,MAAA,CAAO,MAAM,CAAC;AAAA,CAAI,CAAA;AACzD,IAAA,OAAO,SAAS,MAAM,CAAA;AAAA,EACxB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,CAAI,CAAA;AAClF,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEA,IAAMC,OAAAA,GACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,IAAa,yPAAY,KAAQH,iBAAAA,CAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,IAAA;AACtF,IAAIG,OAAAA,EAAQ;AACV,EAAA,GAAA,CAAI,OAAA,CAAQ,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACtB,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,IAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AAAA,EACrB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,EAAG,iBAAiB,KAAA,GAAS,KAAA,CAAM,SAAS,KAAA,CAAM,OAAA,GAAW,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,KAC5E;AACA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,CAAC,CAAA;AACL","file":"cli.cjs","sourcesContent":["interface CacheEntry<T> {\n value: T;\n expiresAt: number;\n}\n\nexport interface CacheOptions {\n maxEntries?: number;\n now?: () => number;\n}\n\n/**\n * Small in-process TTL + LRU cache with in-flight request de-duplication.\n * No disk persistence: stale or private data should not survive process restarts.\n */\nexport class TtlCache {\n private readonly entries = new Map<string, CacheEntry<unknown>>();\n private readonly inFlight = new Map<string, Promise<unknown>>();\n private readonly maxEntries: number;\n private readonly now: () => number;\n\n constructor(options: CacheOptions = {}) {\n this.maxEntries = Math.max(1, options.maxEntries ?? 200);\n this.now = options.now ?? Date.now;\n }\n\n get size(): number {\n return this.entries.size;\n }\n\n get<T>(key: string): T | undefined {\n const entry = this.entries.get(key);\n if (!entry) return undefined;\n if (entry.expiresAt <= this.now()) {\n this.entries.delete(key);\n return undefined;\n }\n // Refresh LRU order.\n this.entries.delete(key);\n this.entries.set(key, entry);\n return entry.value as T;\n }\n\n set<T>(key: string, value: T, ttlMs: number): void {\n if (ttlMs <= 0) return;\n this.entries.delete(key);\n this.entries.set(key, { value, expiresAt: this.now() + ttlMs });\n while (this.entries.size > this.maxEntries) {\n const oldest = this.entries.keys().next().value;\n if (oldest === undefined) break;\n this.entries.delete(oldest);\n }\n }\n\n delete(key: string): void {\n this.entries.delete(key);\n }\n\n clear(): void {\n this.entries.clear();\n this.inFlight.clear();\n }\n\n async getOrLoad<T>(\n key: string,\n ttlMs: number,\n loader: () => Promise<T>,\n options: { noCache?: boolean } = {},\n ): Promise<T> {\n if (!options.noCache) {\n const cached = this.get<T>(key);\n if (cached !== undefined) return cached;\n }\n\n const existing = this.inFlight.get(key);\n if (existing) return existing as Promise<T>;\n\n const promise = loader()\n .then((value) => {\n if (!options.noCache) this.set(key, value, ttlMs);\n return value;\n })\n .finally(() => {\n this.inFlight.delete(key);\n });\n\n this.inFlight.set(key, promise);\n return promise;\n }\n}\n","import type { Period } from './types.js';\n\nexport type RegionScope = 'national' | 'province' | 'city';\n\n/**\n * NBS public-release catalog codes are a scope × frequency matrix, not a\n * frequency alone. Using code=6 for every province query silently returns\n * annual data only, so keep the mapping in one place.\n *\n * | scope | month | quarter | year |\n * |----------|-------|---------|------|\n * | national | 1 | 2 | 3 |\n * | province | 4 | 5 | 6 |\n * | city | — | — | 8 |\n */\nconst CATALOG_CODES: Record<RegionScope, Partial<Record<Period, string>>> = {\n national: { month: '1', quarter: '2', year: '3' },\n province: { month: '4', quarter: '5', year: '6' },\n city: { year: '8' },\n};\n\nexport function catalogCode(scope: RegionScope, period: Period): string | undefined {\n return CATALOG_CODES[scope][period];\n}\n\nexport const CATALOG_CODE_LABELS: Record<string, string> = {\n '1': '全国月度',\n '2': '全国季度',\n '3': '全国年度',\n '4': '分省月度',\n '5': '分省季度',\n '6': '分省年度',\n '7': '主要城市月度价格',\n '8': '主要城市年度',\n '9': '港澳台月度',\n};\n","import type { ErrorCode, QueryError } from './types.js';\n\n/** Error with a stable code and a user-facing hint. */\nexport class NbsError extends Error {\n readonly code: ErrorCode;\n readonly retryable: boolean;\n readonly hint?: string;\n readonly details?: unknown;\n\n constructor(\n code: ErrorCode,\n message: string,\n options: { retryable?: boolean; hint?: string; details?: unknown; cause?: unknown } = {},\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'NbsError';\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.hint = options.hint;\n this.details = options.details;\n }\n}\n\nexport function isNbsError(error: unknown): error is NbsError {\n return error instanceof NbsError;\n}\n\nexport function toQueryError(error: unknown): QueryError {\n if (isNbsError(error)) {\n return {\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n ...(error.hint === undefined ? {} : { hint: error.hint }),\n ...(error.details === undefined ? {} : { details: error.details }),\n };\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n return {\n code: 'ABORTED',\n message: '查询已取消',\n retryable: false,\n hint: '如果这是超时导致的,请增大 totalTimeoutMs 或稍后重试。',\n };\n }\n\n return {\n code: 'UPSTREAM_ERROR',\n message: error instanceof Error ? error.message : String(error),\n retryable: true,\n hint: '这是未预期的错误;请稍后重试,或运行 CLI 时加 --debug 查看详情。',\n };\n}\n\nexport function invalidArgument(message: string, hint?: string): NbsError {\n return new NbsError('INVALID_ARGUMENT', message, { hint });\n}\n\nexport function notFound(message: string, hint?: string, details?: unknown): NbsError {\n return new NbsError('NOT_FOUND', message, { hint, details });\n}\n\nexport function ambiguous(message: string, hint?: string, details?: unknown): NbsError {\n return new NbsError('AMBIGUOUS', message, { hint, details });\n}\n\nexport function invalidRange(message: string, hint?: string): NbsError {\n return new NbsError('INVALID_RANGE', message, { hint });\n}\n\nexport function upstreamBlocked(status: number, bodySnippet?: string): NbsError {\n return new NbsError('UPSTREAM_BLOCKED', `国家统计局接口返回 ${status},可能被 WAF 拦截`, {\n retryable: false,\n hint: '不要循环重试。稍后再试,或改用 web 搜索新闻/解读;不要把旧 EasyQuery 当作 fallback。',\n details: bodySnippet ? { bodySnippet } : undefined,\n });\n}\n\nexport function upstreamError(status: number, message: string, details?: unknown): NbsError {\n return new NbsError('UPSTREAM_ERROR', message || `国家统计局接口返回 ${status}`, {\n retryable: status >= 500 || status === 429,\n hint: '接口可能处于试运行期或不稳定;已自动重试一次,仍失败可稍后再试。',\n details,\n });\n}\n\nexport function parseError(message: string, details?: unknown): NbsError {\n return new NbsError('PARSE_ERROR', message, {\n retryable: false,\n hint: '接口结构可能已改版;请查看 docs/contracts.md 并用最新响应更新解析器。',\n details,\n });\n}\n\nexport function timeoutError(timeoutMs: number): NbsError {\n return new NbsError('TIMEOUT', `请求超时(${timeoutMs}ms)`, {\n retryable: true,\n hint: '国家统计局接口在试运行期可能较慢;可增大 timeoutMs 或稍后重试。',\n });\n}\n\nexport function circuitOpenError(retryAfterMs: number, failures: number, path?: string): NbsError {\n return new NbsError('CIRCUIT_OPEN', '上游连续失败,熔断器已打开', {\n retryable: true,\n hint: `请等待约 ${Math.ceil(retryAfterMs / 1000)} 秒后再试,或检查网络/代理配置。`,\n details: {\n path,\n failures,\n retryAfterMs: Math.max(0, Math.ceil(retryAfterMs)),\n },\n });\n}\n","import { CATALOG_CODE_LABELS } from './catalog-codes.js';\nimport { invalidArgument } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport type { CatalogNode, QueryOptions, TreeRecord } from './types.js';\n\nconst VALID_CODES = new Set(Object.keys(CATALOG_CODE_LABELS));\nconst MAX_NODES = 500;\n\nexport interface CatalogResult {\n nodes: CatalogNode[];\n notes: string[];\n}\n\nfunction toNode(record: TreeRecord): CatalogNode {\n return {\n id: record.id,\n name: record.name,\n level: record.level,\n isLeaf: record.isLeaf,\n parentId: record.parentId,\n startYear: record.startYear,\n endYear: record.endYear,\n };\n}\n\n/** Expand a catalog tree to the requested depth. */\nexport async function fetchCatalog(\n provider: NbsProvider,\n options: QueryOptions,\n code = '3',\n pid = '',\n depth = 1,\n): Promise<CatalogResult> {\n if (!VALID_CODES.has(code)) {\n const available = Object.entries(CATALOG_CODE_LABELS)\n .map(([value, label]) => `${value} ${label}`)\n .join('、');\n throw invalidArgument(`不支持的分类 code:${code}`, `可用值:${available}。`);\n }\n const safeDepth = Math.max(1, Math.min(3, Math.floor(depth)));\n const nodes: CatalogNode[] = [];\n const notes: string[] = [];\n const queue: Array<{ pid: string; level: number }> = [{ pid, level: 1 }];\n\n while (queue.length > 0 && nodes.length < MAX_NODES) {\n const current = queue.shift();\n if (!current) break;\n const children = await provider.getTree({\n pid: current.pid,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n for (const child of children) {\n nodes.push(toNode(child));\n if (!child.isLeaf && current.level < safeDepth) {\n queue.push({ pid: child.id, level: current.level + 1 });\n }\n if (nodes.length >= MAX_NODES) break;\n }\n }\n\n if (nodes.length >= MAX_NODES) {\n notes.push(`分类树节点较多,仅返回前 ${MAX_NODES} 个;请用 pid 继续展开。`);\n }\n\n return { nodes, notes };\n}\n","export interface RateLimiterOptions {\n minIntervalMs?: number;\n jitterMs?: number;\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\nfunction abortError(): DOMException {\n return new DOMException('The operation was aborted.', 'AbortError');\n}\n\n/** Abortable sleep used by the limiter and retry logic. */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError());\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n cleanup();\n reject(abortError());\n };\n const cleanup = () => signal?.removeEventListener('abort', onAbort);\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/**\n * Serialized rate limiter. Every caller joins one queue; request starts are\n * spaced by at least `minIntervalMs` plus jitter.\n */\nexport class RateLimiter {\n private readonly minIntervalMs: number;\n private readonly jitterMs: number;\n private readonly sleepImpl: (ms: number, signal?: AbortSignal) => Promise<void>;\n private queueTail: Promise<void> = Promise.resolve();\n private lastRequestAt = 0;\n\n constructor(options: RateLimiterOptions = {}) {\n this.minIntervalMs = options.minIntervalMs ?? 2_000;\n this.jitterMs = options.jitterMs ?? 250;\n this.sleepImpl = options.sleep ?? sleep;\n }\n\n async run<T>(fn: () => Promise<T>, signal?: AbortSignal): Promise<T> {\n const previous = this.queueTail;\n let release!: () => void;\n this.queueTail = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await previous;\n try {\n const elapsed = Date.now() - this.lastRequestAt;\n const wait = this.minIntervalMs + Math.floor(Math.random() * this.jitterMs) - elapsed;\n if (wait > 0) await this.sleepImpl(wait, signal);\n this.lastRequestAt = Date.now();\n return await fn();\n } finally {\n release();\n }\n }\n}\n","import { TtlCache } from './cache.js';\nimport {\n circuitOpenError,\n NbsError,\n parseError,\n timeoutError,\n upstreamBlocked,\n upstreamError,\n} from './errors.js';\nimport { RateLimiter, sleep } from './rate-limiter.js';\nimport type { NbsApiResponse } from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://data.stats.gov.cn/dg/website/publicrelease/web/external';\nconst DEFAULT_USER_AGENT =\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36';\nconst DEFAULT_TIMEOUT_MS = 20_000;\nconst DEFAULT_MAX_RETRIES = 1;\nconst DEFAULT_RETRY_DELAY_MS = 5_000;\n\nexport interface CircuitBreakerOptions {\n /** Consecutive retryable failures before the circuit opens. Defaults to 5. */\n failureThreshold?: number;\n /** How long the circuit stays open before a half-open trial. Defaults to 30000 ms. */\n cooldownMs?: number;\n}\n\nexport interface NbsClientOptions {\n baseUrl?: string;\n userAgent?: string;\n timeoutMs?: number;\n minIntervalMs?: number;\n jitterMs?: number;\n maxRetries?: number;\n retryDelayMs?: number;\n cache?: TtlCache;\n limiter?: RateLimiter;\n fetchImpl?: typeof fetch;\n /**\n * Optional undici dispatcher, e.g. `new ProxyAgent('http://127.0.0.1:7890')`.\n * Kept as `unknown` so the core package stays dependency-free.\n */\n dispatcher?: unknown;\n /** Set to false to disable the circuit breaker. */\n circuitBreaker?: CircuitBreakerOptions | false;\n /** Clock override for tests. Defaults to Date.now. */\n now?: () => number;\n logger?: (message: string, detail?: unknown) => void;\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST';\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n cacheKey?: string;\n cacheTtlMs?: number;\n noCache?: boolean;\n signal?: AbortSignal;\n timeoutMs?: number;\n headers?: Record<string, string>;\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n timedOut: () => boolean;\n cleanup: () => void;\n}\n\nfunction abortError(): DOMException {\n return new DOMException('The operation was aborted.', 'AbortError');\n}\n\nfunction createAbortBundle(parent: AbortSignal | undefined, timeoutMs: number): AbortBundle {\n const controller = new AbortController();\n let timedOut = false;\n\n const onParentAbort = () => controller.abort(abortError());\n if (parent) {\n if (parent.aborted) controller.abort(abortError());\n else parent.addEventListener('abort', onParentAbort, { once: true });\n }\n\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort(new DOMException('Request timed out.', 'TimeoutError'));\n }, timeoutMs);\n\n return {\n signal: controller.signal,\n timedOut: () => timedOut,\n cleanup: () => {\n clearTimeout(timer);\n parent?.removeEventListener('abort', onParentAbort);\n },\n };\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`;\n}\n\nfunction buildUrl(\n baseUrl: string,\n path: string,\n query: Record<string, string | number | undefined> | undefined,\n): string {\n const url = new URL(joinUrl(baseUrl, path));\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === '') continue;\n url.searchParams.set(key, String(value));\n }\n }\n return url.toString();\n}\n\n/**\n * HTTP client for the NBS public-release API.\n *\n * - serialized rate limiting (default 2s between request starts)\n * - per-request timeout and whole-query abort signal\n * - one retry for retryable upstream errors\n * - TTL+LRU cache with in-flight de-duplication\n * - parses JSON even when the server sends `Content-Type: text/html`\n */\nexport class NbsClient {\n readonly baseUrl: string;\n readonly cache: TtlCache;\n private readonly userAgent: string;\n private readonly timeoutMs: number;\n private readonly jitterMs: number;\n private readonly maxRetries: number;\n private readonly retryDelayMs: number;\n private readonly fetchImpl: typeof fetch;\n private readonly dispatcher?: unknown;\n private readonly logger?: (message: string, detail?: unknown) => void;\n private readonly sleepImpl: (ms: number, signal?: AbortSignal) => Promise<void>;\n private readonly limiter: RateLimiter;\n private readonly circuitEnabled: boolean;\n private readonly circuitFailureThreshold: number;\n private readonly circuitCooldownMs: number;\n private readonly now: () => number;\n private consecutiveFailures = 0;\n private circuitOpenedAt: number | null = null;\n\n constructor(options: NbsClientOptions = {}) {\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.userAgent = options.userAgent ?? DEFAULT_USER_AGENT;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.jitterMs = options.jitterMs ?? 250;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n this.cache = options.cache ?? new TtlCache();\n this.fetchImpl = options.fetchImpl ?? fetch;\n this.dispatcher = options.dispatcher;\n this.logger = options.logger;\n this.sleepImpl = options.sleep ?? sleep;\n const circuit = options.circuitBreaker === false ? undefined : (options.circuitBreaker ?? {});\n this.circuitEnabled = circuit !== undefined;\n this.circuitFailureThreshold = Math.max(1, circuit?.failureThreshold ?? 5);\n this.circuitCooldownMs = Math.max(0, circuit?.cooldownMs ?? 30_000);\n this.now = options.now ?? Date.now;\n this.limiter =\n options.limiter ??\n new RateLimiter({\n minIntervalMs: options.minIntervalMs,\n jitterMs: options.jitterMs,\n sleep: options.sleep,\n });\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const cacheKey = options.cacheKey;\n const ttl = options.cacheTtlMs ?? 0;\n if (cacheKey && ttl > 0) {\n return this.cache.getOrLoad(cacheKey, ttl, () => this.requestWithRetry<T>(path, options), {\n noCache: options.noCache,\n });\n }\n return this.requestWithRetry<T>(path, options);\n }\n\n private async requestWithRetry<T>(path: string, options: RequestOptions): Promise<T> {\n this.assertCircuitClosed(path);\n let lastError: unknown;\n for (let attempt = 0; attempt <= this.maxRetries; attempt += 1) {\n try {\n const result = await this.limiter.run(\n () => this.requestOnce<T>(path, options),\n options.signal,\n );\n this.consecutiveFailures = 0;\n return result;\n } catch (error) {\n lastError = error;\n const retryable = error instanceof NbsError && error.retryable;\n if (!retryable || attempt >= this.maxRetries || options.signal?.aborted) {\n this.recordFailure(error);\n break;\n }\n const wait = this.retryDelayMs + Math.floor(Math.random() * this.jitterMs);\n this.logger?.('retrying request', { path, attempt: attempt + 1, wait });\n await this.sleepImpl(wait, options.signal);\n }\n }\n throw lastError;\n }\n\n private assertCircuitClosed(path: string): void {\n if (!this.circuitEnabled || this.circuitOpenedAt === null) return;\n const elapsed = this.now() - this.circuitOpenedAt;\n if (elapsed >= this.circuitCooldownMs) {\n // Half-open: allow one trial; a single failure opens the circuit again.\n this.circuitOpenedAt = null;\n this.consecutiveFailures = Math.max(0, this.circuitFailureThreshold - 1);\n return;\n }\n throw circuitOpenError(this.circuitCooldownMs - elapsed, this.consecutiveFailures, path);\n }\n\n private recordFailure(error: unknown): void {\n if (!this.circuitEnabled) return;\n if (!(error instanceof NbsError) || !error.retryable) return;\n this.consecutiveFailures += 1;\n if (this.consecutiveFailures >= this.circuitFailureThreshold && this.circuitOpenedAt === null) {\n this.circuitOpenedAt = this.now();\n this.logger?.('circuit opened', { failures: this.consecutiveFailures });\n }\n }\n\n private async requestOnce<T>(path: string, options: RequestOptions): Promise<T> {\n const url = buildUrl(this.baseUrl, path, options.query);\n const method = options.method ?? 'GET';\n const timeoutMs = options.timeoutMs ?? this.timeoutMs;\n const bundle = createAbortBundle(options.signal, timeoutMs);\n const headers: Record<string, string> = {\n Accept: 'application/json, text/plain, */*',\n Referer: 'https://data.stats.gov.cn/',\n 'User-Agent': this.userAgent,\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Client-Name': 'china-nbs',\n ...options.headers,\n };\n\n let body: string | undefined;\n if (options.body !== undefined) {\n body = JSON.stringify(options.body);\n headers['Content-Type'] = 'application/json;charset=UTF-8';\n }\n\n this.logger?.('request', { method, url, body });\n try {\n let response: Response;\n try {\n const init: RequestInit & { dispatcher?: unknown } = {\n method,\n headers,\n body,\n signal: bundle.signal,\n };\n if (this.dispatcher !== undefined) {\n (init as unknown as { dispatcher?: unknown }).dispatcher = this.dispatcher;\n }\n response = await this.fetchImpl(url, init);\n } catch (error) {\n if (bundle.timedOut()) throw timeoutError(timeoutMs);\n if (options.signal?.aborted) {\n throw new NbsError('ABORTED', '查询已取消', { retryable: false });\n }\n throw error;\n }\n\n const text = await response.text();\n if (response.status === 403) throw upstreamBlocked(response.status, text.slice(0, 300));\n if (response.status === 429) {\n throw new NbsError('UPSTREAM_RATE_LIMITED', '国家统计局接口返回 429', {\n retryable: true,\n hint: '请求过于频繁;请等待后重试。',\n details: { status: response.status },\n });\n }\n if (response.status >= 500) {\n throw upstreamError(response.status, `国家统计局接口返回 ${response.status}`, {\n bodySnippet: text.slice(0, 300),\n });\n }\n if (!response.ok) {\n throw new NbsError('UPSTREAM_ERROR', `国家统计局接口返回 ${response.status}`, {\n retryable: false,\n hint: '接口路径可能已变化;请查看 docs/contracts.md。',\n details: { status: response.status, bodySnippet: text.slice(0, 300) },\n });\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw parseError('接口返回的不是 JSON', {\n status: response.status,\n contentType: response.headers.get('content-type'),\n bodySnippet: text.slice(0, 300),\n });\n }\n\n if (!parsed || typeof parsed !== 'object') {\n throw parseError('接口返回结构不是对象', { bodySnippet: text.slice(0, 300) });\n }\n\n const envelope = parsed as Partial<NbsApiResponse<T>>;\n if (envelope.success === false) {\n throw upstreamError(response.status, envelope.message || '国家统计局接口返回失败', {\n state: envelope.state,\n });\n }\n if (envelope.state !== undefined && envelope.state !== 20000) {\n throw upstreamError(response.status, envelope.message || `接口状态码 ${envelope.state}`, {\n state: envelope.state,\n });\n }\n if (!('data' in envelope)) {\n throw parseError('接口返回缺少 data 字段', { bodySnippet: text.slice(0, 300) });\n }\n return envelope.data as T;\n } catch (error) {\n if (bundle.timedOut()) throw timeoutError(timeoutMs);\n throw error;\n } finally {\n bundle.cleanup();\n }\n }\n}\n","/** Common Chinese abbreviations used by qbot users and analysts. */\nexport const ALIASES: Record<string, string[]> = {\n gdp: ['国内生产总值', '地区生产总值', '经济总量'],\n cpi: ['居民消费价格指数', '消费价格指数'],\n ppi: ['工业生产者出厂价格指数', '生产者价格指数'],\n 社零: ['社会消费品零售总额', '零售总额'],\n 固投: ['固定资产投资', '固定资产投资额'],\n 人口: ['常住人口', '年末总人口', '总人口'],\n 失业率: ['城镇调查失业率', '调查失业率'],\n 收入: ['居民人均可支配收入', '可支配收入'],\n 居民收入: ['居民人均可支配收入', '全体居民人均可支配收入'],\n 工业增加值: ['规模以上工业增加值', '规上工业增加值'],\n 规上工业增加值: ['规模以上工业增加值', '工业增加值'],\n 财政收入: ['一般公共预算收入', '地方财政收入'],\n 一般公共预算收入: ['地方财政一般公共预算收入', '财政收入'],\n 粮食: ['粮食产量', '粮食总产量'],\n 粮食产量: ['粮食总产量'],\n 进出口: ['货物进出口总额', '进出口总额', '外贸总额'],\n 房地产: ['房地产开发投资', '房地产投资'],\n 建筑业: ['建筑业总产值', '建筑业产值'],\n 农业: ['农林牧渔业总产值', '农业总产值'],\n 能源: ['能源生产总量'],\n};\n\n/** Query words that carry no indicator-name signal. */\nconst STOP_WORDS = new Set([\n '中国',\n '全国',\n '国家',\n '统计',\n '统计局',\n '数据',\n '最新',\n '今年',\n '去年',\n '全年',\n '年度',\n '季度',\n '月度',\n '月份',\n '多少',\n '是多少',\n '查询',\n '查',\n '一下',\n '的',\n '了',\n '吗',\n '呢',\n '和',\n '与',\n '及',\n '请',\n '帮我',\n '看看',\n]);\n\n/** Normalize text for matching: lower-case, strip whitespace/punctuation and parentheses content. */\nexport function normalize(text: string): string {\n return text\n .toLowerCase()\n .replace(/[((][^))]*[))]/g, '')\n .replace(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]/g, '')\n .replace(/[年月日]/g, '')\n .trim();\n}\n\n/** Expand a user keyword with known aliases. The original query is always first. */\nexport function expandAliases(query: string): string[] {\n const normalized = normalize(query);\n const result = new Set<string>();\n if (normalized) result.add(normalized);\n\n for (const [key, values] of Object.entries(ALIASES)) {\n const normalizedKey = normalize(key);\n if (\n normalized === normalizedKey ||\n normalized.includes(normalizedKey) ||\n normalizedKey.includes(normalized)\n ) {\n for (const value of values) result.add(normalize(value));\n }\n }\n\n return [...result].filter(Boolean);\n}\n\n/** Split a query into meaningful tokens. */\nexport function queryTokens(query: string): string[] {\n const tokens = new Set<string>();\n for (const part of query.split(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]+/)) {\n const normalized = normalize(part);\n if (normalized.length >= 2 && !STOP_WORDS.has(normalized)) tokens.add(normalized);\n }\n const whole = normalize(query);\n if (whole.length >= 2 && !STOP_WORDS.has(whole)) tokens.add(whole);\n return [...tokens];\n}\n\n/** Remove province/region words from a keyword so \"广东 GDP\" resolves like \"GDP\". */\nexport function stripRegion(query: string, regionNames: string[]): string {\n let result = query;\n for (const name of regionNames) {\n const short = name.replace(/(省|市|自治区|特别行政区|壮族|回族|维吾尔|藏族|蒙古)/g, '');\n for (const candidate of [name, short]) {\n if (candidate.length >= 2) {\n result = result.replace(new RegExp(candidate, 'g'), ' ');\n }\n }\n }\n return result.replace(/\\s+/g, ' ').trim();\n}\n\nexport const MEASURE_TERMS = {\n total: ['总量', '总额', '多少', '产值', '增加值', '亿元', '元'],\n growth: ['增速', '增长', '同比', '环比', '涨幅', '下跌', '下降'],\n index: ['指数', '上年=100', '上年同月=100', '上年同期=100', '定基'],\n perCapita: ['人均', '每人'],\n contribution: ['贡献率', '拉动', '构成', '占比'],\n cumulative: ['累计', '年初至今'],\n current: ['当季', '当月', '单季'],\n constantPrice: ['不变价', '可比价'],\n currentPrice: ['现价', '当年价'],\n} as const;\n\nexport function hasAny(text: string, terms: readonly string[]): boolean {\n const normalized = normalize(text);\n return terms.some((term) => normalized.includes(normalize(term)));\n}\n","/**\n * Official NBS \"主要城市年度\" list (code=8).\n *\n * Source: /external/getDasByDaCatalogId?daCid=5772e42228f948149cf5d6a11d07bce1\n * Verified 2026-11-03. The API covers 36 cities:\n * - 4 municipalities (北京/天津/上海/重庆) are represented as provinces.\n * - 32 prefecture-level cities are listed here.\n *\n * Do not add arbitrary prefecture-level cities: the upstream dataset does not\n * publish city annual data for them.\n */\nexport const CITIES = [\n { text: '石家庄市', value: '130100000000', aliases: ['石家庄'], scope: 'city' },\n { text: '太原市', value: '140100000000', aliases: ['太原'], scope: 'city' },\n { text: '呼和浩特市', value: '150100000000', aliases: ['呼和浩特'], scope: 'city' },\n { text: '沈阳市', value: '210100000000', aliases: ['沈阳'], scope: 'city' },\n { text: '大连市', value: '210200000000', aliases: ['大连'], scope: 'city' },\n { text: '长春市', value: '220100000000', aliases: ['长春'], scope: 'city' },\n { text: '哈尔滨市', value: '230100000000', aliases: ['哈尔滨'], scope: 'city' },\n { text: '南京市', value: '320100000000', aliases: ['南京'], scope: 'city' },\n { text: '杭州市', value: '330100000000', aliases: ['杭州'], scope: 'city' },\n { text: '宁波市', value: '330200000000', aliases: ['宁波'], scope: 'city' },\n { text: '合肥市', value: '340100000000', aliases: ['合肥'], scope: 'city' },\n { text: '福州市', value: '350100000000', aliases: ['福州'], scope: 'city' },\n { text: '厦门市', value: '350200000000', aliases: ['厦门'], scope: 'city' },\n { text: '南昌市', value: '360100000000', aliases: ['南昌'], scope: 'city' },\n { text: '济南市', value: '370100000000', aliases: ['济南'], scope: 'city' },\n { text: '青岛市', value: '370200000000', aliases: ['青岛'], scope: 'city' },\n { text: '郑州市', value: '410100000000', aliases: ['郑州'], scope: 'city' },\n { text: '武汉市', value: '420100000000', aliases: ['武汉'], scope: 'city' },\n { text: '长沙市', value: '430100000000', aliases: ['长沙'], scope: 'city' },\n { text: '广州市', value: '440100000000', aliases: ['广州'], scope: 'city' },\n { text: '深圳市', value: '440300000000', aliases: ['深圳'], scope: 'city' },\n { text: '南宁市', value: '450100000000', aliases: ['南宁'], scope: 'city' },\n { text: '海口市', value: '460100000000', aliases: ['海口'], scope: 'city' },\n { text: '成都市', value: '510100000000', aliases: ['成都'], scope: 'city' },\n { text: '贵阳市', value: '520100000000', aliases: ['贵阳'], scope: 'city' },\n { text: '昆明市', value: '530100000000', aliases: ['昆明'], scope: 'city' },\n { text: '拉萨市', value: '540100000000', aliases: ['拉萨'], scope: 'city' },\n { text: '西安市', value: '610100000000', aliases: ['西安'], scope: 'city' },\n { text: '兰州市', value: '620100000000', aliases: ['兰州'], scope: 'city' },\n { text: '西宁市', value: '630100000000', aliases: ['西宁'], scope: 'city' },\n { text: '银川市', value: '640100000000', aliases: ['银川'], scope: 'city' },\n { text: '乌鲁木齐市', value: '650100000000', aliases: ['乌鲁木齐'], scope: 'city' },\n] as const;\n","import { normalize } from './aliases.js';\nimport { CITIES as GENERATED_CITIES } from './cities.js';\n\nexport interface RegionRecord {\n text: string;\n value: string;\n aliases: string[];\n national?: boolean;\n scope?: 'national' | 'province' | 'city';\n}\n\nexport const NATIONAL_REGION: RegionRecord = {\n text: '全国',\n value: '000000000000',\n aliases: ['全国', '中国', '国家', '全国合计'],\n national: true,\n scope: 'national',\n};\n\nexport const PROVINCES: RegionRecord[] = [\n { text: '北京市', value: '110000000000', aliases: ['北京'] },\n { text: '天津市', value: '120000000000', aliases: ['天津'] },\n { text: '河北省', value: '130000000000', aliases: ['河北'] },\n { text: '山西省', value: '140000000000', aliases: ['山西'] },\n { text: '内蒙古自治区', value: '150000000000', aliases: ['内蒙古', '内蒙'] },\n { text: '辽宁省', value: '210000000000', aliases: ['辽宁'] },\n { text: '吉林省', value: '220000000000', aliases: ['吉林'] },\n { text: '黑龙江省', value: '230000000000', aliases: ['黑龙江'] },\n { text: '上海市', value: '310000000000', aliases: ['上海'] },\n { text: '江苏省', value: '320000000000', aliases: ['江苏'] },\n { text: '浙江省', value: '330000000000', aliases: ['浙江'] },\n { text: '安徽省', value: '340000000000', aliases: ['安徽'] },\n { text: '福建省', value: '350000000000', aliases: ['福建'] },\n { text: '江西省', value: '360000000000', aliases: ['江西'] },\n { text: '山东省', value: '370000000000', aliases: ['山东'] },\n { text: '河南省', value: '410000000000', aliases: ['河南'] },\n { text: '湖北省', value: '420000000000', aliases: ['湖北'] },\n { text: '湖南省', value: '430000000000', aliases: ['湖南'] },\n { text: '广东省', value: '440000000000', aliases: ['广东'] },\n { text: '广西壮族自治区', value: '450000000000', aliases: ['广西'] },\n { text: '海南省', value: '460000000000', aliases: ['海南'] },\n { text: '重庆市', value: '500000000000', aliases: ['重庆'] },\n { text: '四川省', value: '510000000000', aliases: ['四川'] },\n { text: '贵州省', value: '520000000000', aliases: ['贵州'] },\n { text: '云南省', value: '530000000000', aliases: ['云南'] },\n { text: '西藏自治区', value: '540000000000', aliases: ['西藏'] },\n { text: '陕西省', value: '610000000000', aliases: ['陕西'] },\n { text: '甘肃省', value: '620000000000', aliases: ['甘肃'] },\n { text: '青海省', value: '630000000000', aliases: ['青海'] },\n { text: '宁夏回族自治区', value: '640000000000', aliases: ['宁夏'] },\n { text: '新疆维吾尔自治区', value: '650000000000', aliases: ['新疆'] },\n { text: '台湾省', value: '710000000000', aliases: ['台湾'] },\n { text: '香港特别行政区', value: '810000000000', aliases: ['香港'] },\n { text: '澳门特别行政区', value: '820000000000', aliases: ['澳门'] },\n];\n\n/**\n * Official NBS major-city list: 36 cities. Four municipalities are represented\n * as provinces, so 32 city records are listed here. Values use the 12-digit\n * `das` format, e.g. 广州 440100000000. The upstream city annual dataset does\n * not publish other prefecture-level cities.\n */\nexport const CITIES: RegionRecord[] = GENERATED_CITIES.map((city) => ({\n text: city.text,\n value: city.value,\n aliases: [...city.aliases],\n scope: 'city',\n}));\n\nexport const ALL_REGIONS: RegionRecord[] = [NATIONAL_REGION, ...PROVINCES, ...CITIES];\n\nexport function scopeOf(region: RegionRecord): 'national' | 'province' | 'city' {\n return region.scope ?? (region.national ? 'national' : 'province');\n}\n\nexport function regionNames(): string[] {\n return ALL_REGIONS.flatMap((region) => [region.text, ...region.aliases]);\n}\n\n/** Resolve a Chinese region name to the NBS `das` value. */\nexport function resolveRegion(input?: string): RegionRecord | undefined {\n if (!input?.trim()) return NATIONAL_REGION;\n const normalized = normalize(input);\n\n for (const region of ALL_REGIONS) {\n if (normalize(region.text) === normalized) return region;\n if (region.aliases.some((alias) => normalize(alias) === normalized)) return region;\n }\n\n // Allow \"广东省\" vs \"广东\" and \"中国广东省\" style inputs.\n const candidates = ALL_REGIONS.filter((region) => {\n const names = [region.text, ...region.aliases].map(normalize);\n return names.some((name) => normalized.includes(name) || name.includes(normalized));\n });\n\n if (candidates.length === 1) return candidates[0];\n return undefined;\n}\n\nexport function isNationalRegion(input?: string): boolean {\n return resolveRegion(input)?.national === true;\n}\n\n/** Infer a province or major city from free text such as \"广东 GDP\"; national words are ignored. */\nexport function inferRegionFromText(text?: string): RegionRecord | undefined {\n if (!text?.trim()) return undefined;\n const normalized = normalize(text);\n const matches = ALL_REGIONS.filter(\n (region) =>\n !region.national &&\n [region.text, ...region.aliases].some((name) => normalized.includes(normalize(name))),\n );\n const city = matches.find((region) => region.scope === 'city');\n if (city) return city;\n return matches.length === 1 ? matches[0] : undefined;\n}\n\nexport function regionSuggestions(input: string): string[] {\n const normalized = normalize(input);\n return ALL_REGIONS.filter((region) =>\n [region.text, ...region.aliases].some((name) => {\n const candidate = normalize(name);\n return candidate.includes(normalized) || normalized.includes(candidate);\n }),\n )\n .slice(0, 6)\n .map((region) => region.text);\n}\n","import { normalize, stripRegion } from './aliases.js';\nimport { regionNames } from './regions.js';\nimport type { Period, Shard } from './types.js';\n\nexport interface CuratedEntry {\n key: string;\n aliases: string[];\n name: string;\n displayName: string;\n unit?: string;\n frequency: Period;\n regionScope: 'national' | 'province' | 'city' | 'any';\n measure?: string;\n cid: string;\n indicId: string;\n note?: string;\n shards?: Shard[];\n}\n\n/**\n * Curated fast path for the most common indicators.\n *\n * These ids were verified against the live API on 2026-11-03. They are hints,\n * not a hard dependency: if a curated id stops working, the resolver falls back\n * to search/tree.\n */\nexport const CURATED: CuratedEntry[] = [\n {\n key: 'gdp-year-national',\n aliases: [\n 'GDP',\n 'GDP总量',\n 'GDP现价',\n '中国GDP',\n '国内生产总值',\n '中国经济',\n '经济总量',\n '生产总值',\n ],\n name: '国内生产总值',\n displayName: '国内生产总值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '现价总量',\n cid: 'f7fd25aaad184414875632cf2327da60',\n indicId: '7dc6a2ee6c614960b7059991e0cc4d96',\n },\n {\n key: 'gdp-quarter-cumulative',\n aliases: [\n 'GDP累计',\n 'GDP累计值',\n '国内生产总值',\n '国内生产总值累计',\n '国内生产总值累计值',\n '生产总值',\n 'GDP',\n ],\n name: '国内生产总值累计值',\n displayName: '国内生产总值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '28d936104e304aa191e338eb82b6dc09',\n indicId: '8c5fab362d124fa7b91af833b3bd7397',\n },\n {\n key: 'gdp-quarter-province',\n aliases: [\n 'GDP',\n 'GDP累计',\n 'GDP累计值',\n '国内生产总值',\n '地区生产总值',\n '地区生产总值累计',\n '地区生产总值累计值',\n '生产总值',\n '经济总量',\n ],\n name: '地区生产总值累计值',\n displayName: '地区生产总值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '44ecf9ea21884caea5451c35e9c08fff',\n indicId: 'dc168397231c49f391ee9e11966de389',\n },\n {\n key: 'gdp-quarter-current',\n aliases: ['GDP当季', 'GDP当季值', '国内生产总值当季', '国内生产总值当季值'],\n name: '国内生产总值当季值',\n displayName: '国内生产总值当季值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '28d936104e304aa191e338eb82b6dc09',\n indicId: 'd22612f09aeb4241bc557ef0ac61b3ba',\n },\n {\n key: 'cpi-month-national',\n aliases: [\n 'CPI',\n 'CPI同比',\n 'CPI当月',\n 'CPI月度',\n '居民消费价格指数',\n '居民消费价格指数同比',\n '居民消费价格指数当月',\n '消费价格指数',\n '物价',\n ],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年同月=100)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '上年同月=100',\n // The default shard is 2021-2025; shards cover the full monthly history.\n cid: '809d2522b0fe4be89142650341b19083',\n indicId: '4ae9047687934a6390984c21d6ddab96',\n shards: [\n {\n cid: '5c7452825c7c4dcba391db5ca7f335c5',\n indicId: '53180dfb9c14411ba4b762307c85920c',\n startYear: 2026,\n },\n {\n cid: '809d2522b0fe4be89142650341b19083',\n indicId: '4ae9047687934a6390984c21d6ddab96',\n startYear: 2021,\n endYear: 2025,\n },\n {\n cid: '9d4eec43537742a7ab5d63db97fa2f51',\n indicId: 'e5c318ffdbbc4d38898e52b52267eb25',\n startYear: 2016,\n endYear: 2020,\n },\n {\n cid: '954cfd7597e34b919ec71caf6aeead51',\n indicId: '4c1065dd4e984b25a21190c843551697',\n endYear: 2015,\n },\n ],\n },\n {\n key: 'cpi-month-province',\n aliases: [\n 'CPI',\n 'CPI同比',\n 'CPI当月',\n 'CPI月度',\n '居民消费价格指数',\n '居民消费价格指数同比',\n '居民消费价格指数当月',\n '消费价格指数',\n '物价',\n ],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年同月=100)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '上年同月=100',\n // Province shards use different cids and indicator ids from the national\n // series. Verified against Guangdong on 2026-11-03.\n cid: 'c7b31f465b2b4a40b9999090b03b5a37',\n indicId: 'a2713908ee9a4a86a6e1bf90a6c1df68',\n shards: [\n {\n cid: 'b5e122302ad745358ba7415bd4a22c2f',\n indicId: '02d75ee002764e2ea53f263e52109e8f',\n startYear: 2026,\n },\n {\n cid: 'c7b31f465b2b4a40b9999090b03b5a37',\n indicId: 'a2713908ee9a4a86a6e1bf90a6c1df68',\n startYear: 2021,\n endYear: 2025,\n },\n {\n cid: 'f6b9c87376ad4b24b170766f419dc076',\n indicId: '072104df94b749dc8d0aa744718ba09b',\n startYear: 2016,\n endYear: 2020,\n },\n {\n cid: 'd699037b6a894b9ea15d662b5422ce16',\n indicId: '1f9acbec2553450fb5b1804b583833c6',\n endYear: 2015,\n },\n ],\n },\n {\n key: 'cpi-year-national',\n aliases: ['CPI年度', '居民消费价格指数年度', 'CPI', '居民消费价格指数', '消费价格指数', '物价'],\n name: '居民消费价格指数',\n displayName: '居民消费价格指数 (上年=100)',\n unit: '上年=100',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'e5f37eced5de4d4c815f7ac5f59fc6c2',\n indicId: '5e3053f110074dcdbcfa3c8428dd1367',\n },\n {\n key: 'ppi-year-national',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年=100)',\n unit: '上年=100',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'e5f37eced5de4d4c815f7ac5f59fc6c2',\n indicId: 'a867836c8fdc4e2dbf06be1dc87fafc6',\n },\n {\n key: 'population-year-national',\n aliases: ['人口', '总人口', '年末总人口', '中国人口'],\n name: '年末总人口',\n displayName: '年末总人口 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '6331ad868e8b4f55b8e9b6e765609ce1',\n indicId: '806083491dbe46a08995783945a30b9d',\n },\n {\n key: 'gdp-year-province',\n aliases: ['GDP', '国内生产总值', '地区生产总值', '生产总值', '经济总量'],\n name: '地区生产总值',\n displayName: '地区生产总值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '现价总量',\n cid: '6f8fbd415cbc40ffa7ecb7fd917f2598',\n indicId: 'aff57de5ee994283974705914fbed246',\n },\n {\n key: 'gdp-year-city',\n aliases: ['GDP', '国内生产总值', '地区生产总值', '生产总值', '经济总量'],\n name: '地区生产总值',\n displayName: '地区生产总值 (当年价格) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'city',\n measure: '当年价格',\n cid: '75a85abe58c749e0ad1d85be343e9056',\n indicId: '35613910b9ad47e19cf79ae041ccb7ed',\n },\n\n // --- National annual: common macro indicators ---\n {\n key: 'retail-year-national',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '消费零售总额'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: 'd5b51c4a56d646b3b3f00f2c9e31a217',\n indicId: '008350880eb14928acc53fe20b295415',\n },\n {\n key: 'fai-year-national',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资额',\n '固定资产投资总额',\n '固定资产投资 (不含农户)',\n ],\n name: '固定资产投资',\n displayName: '固定资产投资 (不含农户) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '607a7cd4b50e4553894472475d1f4273',\n indicId: 'c9bd95b9046e4278a73dfe09aedc4ca3',\n },\n {\n key: 'income-year-national',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全国居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd153132154a549a78363017ef74ca784',\n indicId: '305bba1e881e413b91f32a06a4be65fd',\n },\n {\n key: 'fiscal-revenue-year-national',\n aliases: ['财政收入', '一般公共预算收入', '国家财政收入', '公共预算收入', '财政预算收入'],\n name: '一般公共预算收入',\n displayName: '一般公共预算收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '9ab4eeaba2264792b296b6658b6472dc',\n indicId: '47768ef2d84343468356fcaf26fef62f',\n },\n {\n key: 'grain-year-national',\n aliases: ['粮食产量', '粮食总产量', '粮食'],\n name: '粮食产量',\n displayName: '粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年产量',\n cid: '70551119a5104e13a5a2bbb3f36410f9',\n indicId: 'cea4d9e54f72420883463207c5e7f564',\n },\n {\n key: 'trade-year-national',\n aliases: ['进出口', '进出口总额', '货物进出口总额', '外贸总额', '外贸进出口'],\n name: '进出口总额',\n displayName: '进出口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: 'e9f9299386b34a9f91ef13aa9aebd2be',\n },\n {\n key: 'registered-unemployment-year-national',\n aliases: ['城镇登记失业率', '登记失业率'],\n name: '城镇登记失业率',\n displayName: '城镇登记失业率 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n note: '年度城镇登记失业率数据截至 2021;月度失业率请查“城镇调查失业率”。',\n cid: '19839dbd8e82481b9524f031c6d816c5',\n indicId: '456ef2f3d75f472b930384237bc6100f',\n },\n\n // --- National quarterly ---\n {\n key: 'income-quarter-national',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全国居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: 'ec2d57ed282f456e8d025aff035b4fad',\n indicId: 'bb5699c5ad534b568cca7c946227225a',\n },\n\n // --- National monthly ---\n {\n key: 'ppi-month-national',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年同月=100)',\n unit: '上年同月=100',\n frequency: 'month',\n regionScope: 'national',\n measure: '上年同月=100',\n cid: '60e8b361f11c4a878c652a6487a25561',\n indicId: '150633e52b9a470a9a9fd1b296dd6c5b',\n },\n {\n key: 'retail-month-national',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '社会消费品零售总额当期值'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额当期值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '当期值',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: '1142a3a03e9045959e606a21822641ac',\n },\n {\n key: 'retail-cumulative-month-national',\n aliases: ['社零累计', '社零累计值', '社会消费品零售总额累计', '社会消费品零售总额累计值'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: '260a1794443b43dd93a59928b12f38af',\n },\n {\n key: 'retail-growth-month-national',\n aliases: [\n '社零同比',\n '社零增速',\n '社零增长',\n '社零同比增长',\n '社会消费品零售总额同比',\n '社会消费品零售总额增速',\n '社会消费品零售总额增长',\n '社会消费品零售总额同比增长',\n ],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比',\n cid: 'd0cb882c7f27443ab6b3ef9421901961',\n indicId: 'aaac57d54d2e465d91bc9f3ea1a8618e',\n },\n {\n key: 'fai-growth-month-national',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资增速',\n '固投增速',\n '固定资产投资增长',\n '固定资产投资额累计增长',\n ],\n name: '固定资产投资额',\n displayName: '固定资产投资额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '5129067b149d4ddfbec1ffc478d35bfb',\n indicId: '7e570cf8071c4734a7d78d9f0a70fbe1',\n },\n {\n key: 'industrial-growth-month-national',\n aliases: [\n '工业增加值',\n '规上工业增加值',\n '规模以上工业增加值',\n '工业增加值增速',\n '工业增加值同比',\n '规上工业增加值同比增长',\n '工业增长',\n ],\n name: '规上工业增加值',\n displayName: '规上工业增加值同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比增长',\n cid: '3f2e14f0542348ed9fe02476eca3450b',\n indicId: 'ef1b1765960d45a29b4d7c4ca91be916',\n },\n {\n key: 'industrial-cumulative-month-national',\n aliases: [\n '工业增加值累计',\n '规上工业增加值累计',\n '规模以上工业增加值累计',\n '工业增加值累计增速',\n ],\n name: '规上工业增加值',\n displayName: '规上工业增加值累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '3f2e14f0542348ed9fe02476eca3450b',\n indicId: '21e7072e9f384209aedb56e69a18216e',\n },\n {\n key: 'survey-unemployment-month-national',\n aliases: ['失业率', '城镇调查失业率', '调查失业率', '全国城镇调查失业率'],\n name: '全国城镇调查失业率',\n displayName: '全国城镇调查失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '3888eac6062945a79c8a27e5f13d4953',\n },\n {\n key: 'fiscal-revenue-month-national',\n aliases: ['财政收入', '国家财政收入', '财政预算收入', '国家财政预算收入', '国家财政收入累计值'],\n name: '国家财政收入',\n displayName: '国家财政收入累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: '0083b57bb6b44d4d964b87a89192344e',\n indicId: 'd615e8de42114feb9169f027e6c2dcc6',\n },\n\n // --- Province annual ---\n {\n key: 'retail-year-province',\n aliases: ['社零', '社会消费品零售总额', '零售总额', '消费零售总额'],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: '77cb81a53dd9438ab00f6b4f27196ad9',\n indicId: '3512aeee72d74be7b4008817a4dd2d03',\n },\n {\n key: 'fai-year-province',\n aliases: ['固投', '固定资产投资', '固定资产投资增速', '固投增速', '固定资产投资增长'],\n name: '固定资产投资 (不含农户)',\n displayName: '固定资产投资 (不含农户) 比上年增长 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'province',\n measure: '比上年增长',\n note: '分省年度仅发布固定资产投资增速,没有亿元总量。',\n cid: 'fa42ee3b82724a1c972490d7b628811e',\n indicId: 'a8b24c8058d14e069b7ef22600d7a9b5',\n },\n {\n key: 'income-year-province',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全体居民人均可支配收入',\n '可支配收入',\n ],\n name: '全体居民人均可支配收入',\n displayName: '全体居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: 'bda568266e4c445b867d25626e1f6b8a',\n },\n {\n key: 'fiscal-revenue-year-province',\n aliases: ['财政收入', '一般公共预算收入', '地方财政收入', '地方一般公共预算收入'],\n name: '地方财政一般公共预算收入',\n displayName: '地方财政一般公共预算收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'bcd3d7159957431b8f3f5b7d10bdeceb',\n indicId: 'c8dafa31105e4b93850f3820cdd4eae8',\n },\n {\n key: 'grain-year-province',\n aliases: ['粮食产量', '粮食总产量', '粮食'],\n name: '粮食产量',\n displayName: '粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年产量',\n cid: '2ecdbcf038f349f1bd6840e731efbfa2',\n indicId: 'd7d8730d61ff44998281d585e79b94af',\n },\n\n // --- Province quarterly ---\n {\n key: 'income-quarter-province',\n aliases: [\n '居民收入',\n '居民人均可支配收入',\n '人均可支配收入',\n '全体居民人均可支配收入',\n '可支配收入',\n ],\n name: '居民人均可支配收入',\n displayName: '居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '1065e991d0c84623bf0e0d012f36c0e3',\n indicId: '0f6eafa0055f46bfbe61c3e2eafeb218',\n },\n {\n key: 'retail-growth-quarter-province',\n aliases: [\n '社零',\n '社零增速',\n '社零增长',\n '社会消费品零售总额',\n '社会消费品零售总额增速',\n '社会消费品零售总额增长',\n ],\n name: '社会消费品零售总额',\n displayName: '社会消费品零售总额累计增长 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计增长',\n note: '分省季度仅发布社会消费品零售总额累计增速。',\n cid: 'b61c26f8f1134aaebc82c31ff5323266',\n indicId: '790a424df4cd4c97beeb8f720e45ff71',\n },\n {\n key: 'construction-output-quarter-province',\n aliases: ['建筑业总产值', '建筑业产值', '建筑业总产值累计值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: 'f20917614b8948e2a558096dbea27614',\n indicId: 'ca4c8c8209604f06932744dbe47657a4',\n },\n {\n key: 'agriculture-output-quarter-province',\n aliases: ['农林牧渔业总产值', '农林牧渔总产值', '农业总产值'],\n name: '农林牧渔业总产值',\n displayName: '农林牧渔业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '0e74a6ba50ed4af5afb83cd1b8335577',\n indicId: '0f03dead8f3d40c2a6978edacdddd8e7',\n },\n\n // --- Province monthly ---\n {\n key: 'ppi-month-province',\n aliases: ['PPI', '工业生产者出厂价格指数', '生产者价格指数'],\n name: '工业生产者出厂价格指数',\n displayName: '工业生产者出厂价格指数 (上年同月=100)',\n unit: '上年同月=100',\n frequency: 'month',\n regionScope: 'province',\n measure: '上年同月=100',\n cid: 'f4978fd800d945989894083a156d94ed',\n indicId: 'd91f353ef582487e916dee235383cf4f',\n },\n {\n key: 'industrial-growth-month-province',\n aliases: [\n '工业增加值',\n '规上工业增加值',\n '规模以上工业增加值',\n '工业增加值增速',\n '工业增加值同比',\n '工业增长',\n ],\n name: '工业增加值',\n displayName: '工业增加值同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '同比增长',\n cid: '9593fb551802499683f758e0f6f45bc7',\n indicId: '6e073cf3b36644e6bee881d312c95681',\n },\n {\n key: 'industrial-cumulative-month-province',\n aliases: [\n '工业增加值累计',\n '规上工业增加值累计',\n '规模以上工业增加值累计',\n '工业增加值累计增速',\n ],\n name: '工业增加值',\n displayName: '工业增加值累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: '9593fb551802499683f758e0f6f45bc7',\n indicId: 'e2da5a05def84138b9d33828951adc59',\n },\n {\n key: 'fai-growth-month-province',\n aliases: [\n '固投',\n '固定资产投资',\n '固定资产投资增速',\n '固投增速',\n '固定资产投资增长',\n '固定资产投资完成额累计增长',\n ],\n name: '固定资产投资完成额',\n displayName: '固定资产投资完成额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: 'e43af1a71b2d4a768569866795ed66e2',\n indicId: '31c20d4e16564c39a3e4d2cc0d2d83bb',\n },\n {\n key: 'real-estate-investment-month-province',\n aliases: [\n '房地产投资',\n '房地产开发投资',\n '房地产投资额',\n '房地产开发投资额',\n '房地产投资累计值',\n ],\n name: '房地产投资',\n displayName: '房地产投资累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: 'b2cdd4aabffc4508b6199209127a6fd8',\n indicId: '6aa7aaa742b7475b8e93af99e8bc528e',\n },\n\n // --- Additional national/province long-tail entries ---\n {\n key: 'fiscal-expenditure-year-national',\n aliases: ['一般公共预算支出', '公共预算支出', '财政支出', '国家财政支出'],\n name: '一般公共预算支出',\n displayName: '一般公共预算支出 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '9ab4eeaba2264792b296b6658b6472dc',\n indicId: 'bd7a970226ff40a8b030c6b9a912560b',\n },\n {\n key: 'summer-grain-year-national',\n aliases: ['夏收粮食产量', '夏粮产量', '夏粮'],\n name: '夏收粮食产量',\n displayName: '夏收粮食产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '夏收产量',\n cid: '70551119a5104e13a5a2bbb3f36410f9',\n indicId: 'a63f12c294e54faa825848afe31b55c9',\n },\n {\n key: 'urban-income-year-national',\n aliases: ['城镇居民人均可支配收入', '城镇居民收入', '城镇人均可支配收入'],\n name: '城镇居民人均可支配收入',\n displayName: '城镇居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd310e3ead14b403d9d10d29391713783',\n indicId: 'c0908d6012a840dca82d2b362f7e2d69',\n },\n {\n key: 'industrial-profit-year-province',\n aliases: ['规模以上工业企业利润总额', '工业企业利润总额', '工业利润总额'],\n name: '规模以上工业企业利润总额',\n displayName: '规模以上工业企业利润总额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: '61c228f6ebfe444fa662eea06d7187c5',\n },\n {\n key: 'tax-revenue-year-province',\n aliases: ['地方财政税收收入', '财政税收收入', '税收收入'],\n name: '地方财政税收收入',\n displayName: '地方财政税收收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'bcd3d7159957431b8f3f5b7d10bdeceb',\n indicId: '35afc4290fbe4bb8b37afa91c927edc3',\n },\n {\n key: 'urban-income-year-province',\n aliases: ['城镇居民人均可支配收入', '城镇居民收入', '城镇人均可支配收入'],\n name: '城镇居民人均可支配收入',\n displayName: '城镇居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: 'dd28563a8af84935bc8a010abf8b772c',\n },\n\n // --- Consumption, wages, energy, trade, real estate, employment ---\n {\n key: 'consumption-year-national',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '47e188eb48a840e4b7ee00c1d30a4792',\n indicId: 'aae3499756ee4863a472d1bbf191b471',\n },\n {\n key: 'engel-year-national',\n aliases: ['恩格尔系数', '居民恩格尔系数'],\n name: '居民恩格尔系数',\n displayName: '居民恩格尔系数 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '7cdf71e826d64ff6a64b053009a5bccd',\n indicId: '24659814dbe04a3f84f54e8dae75adba',\n },\n {\n key: 'wage-year-national',\n aliases: ['平均工资', '城镇非私营单位平均工资', '城镇非私营单位就业人员平均工资'],\n name: '城镇非私营单位就业人员平均工资',\n displayName: '城镇非私营单位就业人员平均工资 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '0aed53df47b14e7393a98718a320e238',\n indicId: '759f53b2b5204c3d9dce7683db504576',\n },\n {\n key: 'energy-production-year-national',\n aliases: ['能源生产总量', '一次能源生产总量'],\n name: '一次能源生产总量',\n displayName: '一次能源生产总量 (万吨标准煤)',\n unit: '万吨标准煤',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '48615069f0334639963a48dfbbfc594e',\n indicId: 'bd422ac661504ff2a88b64d02b547d27',\n },\n {\n key: 'export-year-national',\n aliases: ['出口', '出口总额', '出口额'],\n name: '出口总额',\n displayName: '出口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: '3529a0abf1324839942a3ec3a7059bcc',\n },\n {\n key: 'import-year-national',\n aliases: ['进口', '进口总额', '进口额'],\n name: '进口总额',\n displayName: '进口总额 (人民币) (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年总额',\n cid: '333332810f574043bc40553902c2f385',\n indicId: '752ae251a0494227b593779a098417c7',\n },\n {\n key: 'real-estate-investment-year-national',\n aliases: ['房地产开发投资', '房地产投资', '房地产开发投资额'],\n name: '房地产开发投资',\n displayName: '房地产开发投资 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '本年完成投资',\n cid: '84fe2e0ffd2f4e99b13ceae5c065e2ac',\n indicId: '49523a91c3234c4bbaaaf6b2be40340d',\n },\n {\n key: 'construction-output-year-national',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '59c698b87ea7473d951de635f20e2078',\n indicId: '2f7d2b5a033048e6bc8712bcc119e126',\n },\n {\n key: 'consumption-quarter-national',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出累计值 (元)',\n unit: '元/人',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '71e8c15775d242b8b212edb4cab6e808',\n indicId: '8e8fb36d72e544658caebd7419900d2a',\n },\n {\n key: 'capacity-utilization-quarter-national',\n aliases: ['工业产能利用率', '产能利用率'],\n name: '工业产能利用率',\n displayName: '工业产能利用率当季值 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '56a7def4ab0749d8800eab2415f90b54',\n indicId: '57ae79552303418087eee8f4f35b4368',\n },\n {\n key: 'construction-output-quarter-national',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值累计值 (亿元)',\n unit: '亿元',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '累计值',\n cid: '2bd9f3b20250419e9c2247948c77386e',\n indicId: '5991f9ec8ebf47d8ac1098efab14e946',\n },\n {\n key: 'online-retail-month-national',\n aliases: ['网上零售额', '网上零售'],\n name: '网上零售额',\n displayName: '网上零售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'fb09cbc680fe4d348c9d05f535ebf77c',\n indicId: '069baced432b4e1787ad1da50c11e9fc',\n },\n {\n key: 'service-retail-month-national',\n aliases: ['服务零售额', '服务零售'],\n name: '服务零售额',\n displayName: '服务零售额累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '28fc474f03e746008ff9fbc2bbb4bf3b',\n indicId: 'b4689b643a27430b9673a192210138d0',\n },\n {\n key: 'big-city-unemployment-month-national',\n aliases: ['31个大城市城镇调查失业率', '大城市失业率', '31城失业率'],\n name: '31个大城市城镇调查失业率',\n displayName: '31个大城市城镇调查失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '1d550f3ec77a463bb607d4a3427e1465',\n },\n {\n key: 'youth-unemployment-month-national',\n aliases: ['16-24岁失业率', '16—24岁失业率', '青年失业率', '16-24岁劳动力失业率'],\n name: '全国城镇16—24岁劳动力失业率',\n displayName: '全国城镇16—24岁劳动力失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: 'bd6da1abb26046c2acb38aa701d90e86',\n },\n {\n key: 'private-fai-growth-month-national',\n aliases: ['民间固定资产投资', '民间投资增速', '民间固投', '民间固定资产投资累计增长'],\n name: '民间固定资产投资',\n displayName: '民间固定资产投资累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计增长',\n cid: '5129067b149d4ddfbec1ffc478d35bfb',\n indicId: '287f55a9520d43a9b3e045860a49fedd',\n },\n {\n key: 'consumption-year-province',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '全体居民人均消费支出',\n displayName: '全体居民人均消费支出 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '7dbebcca62794c4da2b9ef9813d14564',\n indicId: '462f6c41041b4721b78e50397b358af8',\n },\n {\n key: 'fiscal-expenditure-year-province',\n aliases: ['财政支出', '一般公共预算支出', '地方财政支出', '地方一般公共预算支出'],\n name: '地方财政一般公共预算支出',\n displayName: '地方财政一般公共预算支出 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'f38245648b504602b851e27257f09d9b',\n indicId: '1bc776bc77b44671a8f332fa80587fe2',\n },\n {\n key: 'industrial-revenue-year-province',\n aliases: ['规模以上工业企业营业收入', '工业企业营业收入', '工业营业收入', '工业营收'],\n name: '规模以上工业企业营业收入',\n displayName: '规模以上工业企业营业收入 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: 'bc4fd1bdaca2457e8c22a370cbfef233',\n },\n {\n key: 'real-estate-investment-year-province',\n aliases: ['房地产开发投资', '房地产投资', '房地产开发投资额'],\n name: '房地产开发投资',\n displayName: '房地产开发投资 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '本年完成投资',\n cid: 'd58795588d10411b883fa09af92f3cad',\n indicId: '6b3195bc0a94444f98418d320ee284e3',\n },\n {\n key: 'trade-year-province',\n aliases: ['进出口', '进出口总额', '货物进出口总额', '外贸总额'],\n name: '经营单位所在地进出口总额',\n displayName: '经营单位所在地进出口总额 (千美元)',\n unit: '千美元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n note: '分省年度按经营单位所在地统计,单位为千美元。',\n cid: '9c61eb74ddd346d88749f9881837dbc7',\n indicId: '6219327f109140a691f71ea9d58c4ae5',\n },\n {\n key: 'consumption-quarter-province',\n aliases: ['居民消费支出', '居民人均消费支出', '消费支出', '人均消费支出'],\n name: '居民人均消费支出',\n displayName: '居民人均消费支出累计值 (元)',\n unit: '元/人',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: 'cd66144ad151453f932783281aed87a7',\n indicId: '00836f986d1749f5893e40ba8d52618e',\n },\n {\n key: 'home-sales-area-month-province',\n aliases: ['商品房销售面积', '新建商品房销售面积', '商品房销售面积累计值'],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积累计值 (万平方米)',\n unit: '万平方米',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: '91e95a0d0f8244c9a83578cf9862888e',\n indicId: 'b2a4e83212f8401f841df8e4257fe281',\n },\n {\n key: 'home-sales-amount-month-province',\n aliases: ['商品房销售额', '新建商品房销售额', '商品房销售额累计值'],\n name: '新建商品房销售额',\n displayName: '新建商品房销售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计值',\n cid: 'c4731a05f2114131a24a4969f1410bea',\n indicId: '155aab193c2e4836853f197e3a4f8ed4',\n },\n\n // --- Energy, housing sales, construction, rural income ---\n {\n key: 'energy-consumption-year-national',\n aliases: ['能源消费总量', '能源消费'],\n name: '能源消费总量',\n displayName: '能源消费总量 (万吨标准煤)',\n unit: '万吨标准煤',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ea81a442991544f984906c2c264d13ca',\n indicId: 'b7efa87515d54d2fa20f9349fbdf9b26',\n },\n {\n key: 'electricity-year-national',\n aliases: ['发电量', '电力产量'],\n name: '发电量',\n displayName: '发电量 (亿千瓦时)',\n unit: '亿千瓦时',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: '6e325390b4784350b753d695c48717a3',\n },\n {\n key: 'coal-output-year-national',\n aliases: ['原煤产量', '煤炭产量'],\n name: '原煤产量',\n displayName: '原煤产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: 'b6ba346ee94f401eb1e9bf4e4de979ed',\n },\n {\n key: 'oil-output-year-national',\n aliases: ['原油产量', '石油产量'],\n name: '原油产量',\n displayName: '原油产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'b3e5b73b887a46a0a13caf5ee238a194',\n indicId: '5051592ecc8f447daf063f00d582ac41',\n },\n {\n key: 'home-sales-area-year-national',\n aliases: ['商品房销售面积', '新建商品房销售面积'],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积 (万平方米)',\n unit: '万平方米',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '5e8a1ec6366a4fb4a3a1614aac306c0a',\n indicId: '6bb57c9d2b564dc2ac0313e2aaf7cd0c',\n },\n {\n key: 'home-sales-amount-year-national',\n aliases: ['商品房销售额', '新建商品房销售额'],\n name: '新建商品房销售额',\n displayName: '新建商品房销售额 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '807d81347d634d2b94cbf6a094eac3ff',\n indicId: '460123eb70df4b0eaaca2fd4c10117fd',\n },\n {\n key: 'construction-output-year-province',\n aliases: ['建筑业总产值', '建筑业产值'],\n name: '建筑业总产值',\n displayName: '建筑业总产值 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: 'fcdaadb9e74848329e0372a2414d29c2',\n indicId: 'f233c23a85d442aa99e189f66601e873',\n },\n {\n key: 'rural-income-year-province',\n aliases: ['农村居民人均可支配收入', '农村居民收入', '农村人均可支配收入'],\n name: '农村居民人均可支配收入',\n displayName: '农村居民人均可支配收入 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年',\n cid: '5c072e1073514e448de4132760308fcf',\n indicId: '5b21e9a08bf74a5c8ba184eb9e9cc195',\n },\n {\n key: 'rural-income-quarter-province',\n aliases: ['农村居民人均可支配收入', '农村居民收入', '农村人均可支配收入'],\n name: '农村居民人均可支配收入',\n displayName: '农村居民人均可支配收入累计值 (元)',\n unit: '元',\n frequency: 'quarter',\n regionScope: 'province',\n measure: '累计值',\n cid: '1065e991d0c84623bf0e0d012f36c0e3',\n indicId: 'c6a1a68990ea4d6dafad3dbcf530d5cb',\n },\n {\n key: 'real-estate-investment-month-national',\n aliases: ['房地产投资', '房地产开发投资', '房地产投资累计值'],\n name: '房地产投资',\n displayName: '房地产投资累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: '9206137ccf03460daa74b7799e0f3c31',\n indicId: 'bfb626c0dfa04afab67937c452ca9f50',\n },\n {\n key: 'online-goods-retail-month-national',\n aliases: ['实物商品网上零售额', '实物网上零售额', '实物商品网上零售'],\n name: '实物商品网上零售额',\n displayName: '实物商品网上零售额累计值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '累计值',\n cid: 'fb09cbc680fe4d348c9d05f535ebf77c',\n indicId: '05fbe85e09c842098509c6b29481ab0c',\n },\n {\n key: 'industrial-operating-profit-year-province',\n aliases: ['规模以上工业企业营业利润', '工业企业营业利润', '工业营业利润'],\n name: '规模以上工业企业营业利润',\n displayName: '规模以上工业企业营业利润 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n cid: 'e5f47e5583a54e4b88993bd7f3fb453b',\n indicId: 'e18ca78062dd4f7a8dc7ab174d6ffdc0',\n },\n {\n key: 'export-year-province',\n aliases: ['经营单位所在地出口总额', '出口总额', '出口额', '出口'],\n name: '经营单位所在地出口总额',\n displayName: '经营单位所在地出口总额 (千美元)',\n unit: '千美元',\n frequency: 'year',\n regionScope: 'province',\n measure: '全年总额',\n note: '分省年度按经营单位所在地统计,单位为千美元。',\n cid: '9c61eb74ddd346d88749f9881837dbc7',\n indicId: '6a455b4128994239ab90e5cac2e7aa25',\n },\n {\n key: 'home-sales-area-growth-month-province',\n aliases: [\n '商品房销售面积增速',\n '商品房销售面积增长',\n '新建商品房销售面积累计增长',\n '商品房销售面积累计增长',\n ],\n name: '新建商品房销售面积',\n displayName: '新建商品房销售面积累计增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'province',\n measure: '累计增长',\n cid: '91e95a0d0f8244c9a83578cf9862888e',\n indicId: 'f5e66c49668a4536b3f2680c9cef19a4',\n },\n\n // --- Population structure ---\n {\n key: 'birth-rate-year-national',\n aliases: ['人口出生率', '出生率'],\n name: '人口出生率',\n displayName: '人口出生率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: '3d4006d356d94bdd9d75700b9788e230',\n },\n {\n key: 'death-rate-year-national',\n aliases: ['人口死亡率', '死亡率'],\n name: '人口死亡率',\n displayName: '人口死亡率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: 'ee4b8be1ad68498e81d9ecddf4d4f2de',\n },\n {\n key: 'natural-growth-rate-year-national',\n aliases: ['人口自然增长率', '自然增长率'],\n name: '人口自然增长率',\n displayName: '人口自然增长率 (‰)',\n unit: '‰',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ffed4267bba24830beea5991d4c9bcfc',\n indicId: '3969129b26a846968a7dddff5f326f55',\n },\n {\n key: 'dependency-ratio-year-national',\n aliases: ['总抚养比', '抚养比'],\n name: '总抚养比',\n displayName: '总抚养比 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'c7743eefda9d44b5ad2ab0b4f29ba969',\n indicId: '0d2db39cd5424f5fbca859052413f4ad',\n },\n\n // --- Industrial product output ---\n {\n key: 'cement-output-year-national',\n aliases: ['水泥产量', '水泥'],\n name: '水泥产量',\n displayName: '水泥产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '2cf2aee9e7b34db6ac1afaac0e940104',\n },\n {\n key: 'crude-steel-output-year-national',\n aliases: ['粗钢产量', '粗钢'],\n name: '粗钢产量',\n displayName: '粗钢产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '9a8ee14c26664afa83a25fe39ddcd1c7',\n },\n {\n key: 'steel-output-year-national',\n aliases: ['钢材产量', '钢材'],\n name: '钢材产量',\n displayName: '钢材产量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: 'f9276eef033145e0851f878fef58149f',\n },\n {\n key: 'auto-output-year-national',\n aliases: ['汽车产量', '汽车'],\n name: '汽车产量',\n displayName: '汽车产量 (万辆)',\n unit: '万辆',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '6afdb451350c464686b9a778ee0beab5',\n },\n {\n key: 'mobile-phone-output-year-national',\n aliases: ['移动通信手持机产量', '手机产量', '手机'],\n name: '移动通信手持机产量',\n displayName: '移动通信手持机产量 (万台)',\n unit: '万台',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '9733ca87a449439cad4006cb9a92190a',\n },\n {\n key: 'integrated-circuit-output-year-national',\n aliases: ['集成电路产量', '集成电路', '芯片产量'],\n name: '集成电路产量',\n displayName: '集成电路产量 (万块)',\n unit: '万块',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '3da0cb2e9c1a4097a8af9fd825093aee',\n indicId: '1aa41510bc174472a6b375abb71f6a4b',\n },\n\n // --- Fallback fixes ---\n {\n key: 'state-wage-year-national',\n aliases: ['国有单位就业人员平均工资', '国有单位平均工资', '国有单位工资'],\n name: '国有单位就业人员平均工资',\n displayName: '国有单位就业人员平均工资 (元)',\n unit: '元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n note: '国有单位平均工资数据截至 2023。',\n cid: '0aed53df47b14e7393a98718a320e238',\n indicId: '5b4528184c1a44738f7c91811a0ac692',\n },\n {\n key: 'coal-share-energy-year-national',\n aliases: ['原煤占一次能源生产总量比重', '原煤占能源生产总量比重', '煤炭占能源生产总量比重'],\n name: '原煤占一次能源生产总量的比重',\n displayName: '原煤占一次能源生产总量的比重 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '48615069f0334639963a48dfbbfc594e',\n indicId: '4f3e534970aa479dac6651945ed4ba78',\n },\n {\n key: 'age-25-29-unemployment-month-national',\n aliases: [\n '25-29岁失业率',\n '25—29岁失业率',\n '25-29岁劳动力失业率',\n '25—29岁劳动力失业率',\n '城镇25-29岁劳动力失业率',\n '全国城镇25-29岁劳动力失业率',\n ],\n name: '全国城镇25—29岁劳动力失业率',\n displayName: '全国城镇25—29岁劳动力失业率 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '城镇调查失业率',\n cid: 'ee3b7046b390415b9b7745e3d16f6052',\n indicId: '7bc1bd5daeac48ae8bb413c34ece1d08',\n },\n {\n key: 'manufacturing-capacity-quarter-national',\n aliases: [\n '制造业产能利用率',\n '制造业工业产能利用率',\n '制造业产能利用率当季值',\n '工业产能利用率制造业当季值',\n '工业产能利用率制造业',\n ],\n name: '工业产能利用率制造业当季值',\n displayName: '工业产能利用率制造业当季值 (%)',\n unit: '%',\n frequency: 'quarter',\n regionScope: 'national',\n measure: '当季值',\n cid: '56a7def4ab0749d8800eab2415f90b54',\n indicId: 'b26d4afe7263486a8573e2d4f55b2f65',\n },\n\n // --- Transport and postal ---\n {\n key: 'passenger-transport-year-national',\n aliases: ['旅客运输量', '客运量'],\n name: '旅客运输量',\n displayName: '旅客运输量 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '283f7c7b317340fe8e5443da77d3dd29',\n indicId: 'cd96dcaddd0c42148276ba61f40651d9',\n },\n {\n key: 'passenger-turnover-year-national',\n aliases: ['旅客周转量'],\n name: '旅客周转量',\n displayName: '旅客周转量 (亿人公里)',\n unit: '亿人公里',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'd0b6af034d1c4426be78de4912212744',\n indicId: '866f18ee57404cf6a5521bc9040e5dfc',\n },\n {\n key: 'freight-transport-year-national',\n aliases: ['货物运输量', '货运量'],\n name: '货物运输量',\n displayName: '货物运输量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '1afa59232de34e008c2a6e769cd253ed',\n indicId: 'a4c3461ed6094d91819b35a297f60405',\n },\n {\n key: 'freight-turnover-year-national',\n aliases: ['货物周转量'],\n name: '货物周转量',\n displayName: '货物周转量 (亿吨公里)',\n unit: '亿吨公里',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '9de6c6d7119647a9b591b4e464b95157',\n indicId: 'cf1dd80a560546b9b8938a37caee5eab',\n },\n {\n key: 'express-volume-year-national',\n aliases: ['快递量', '快递业务量'],\n name: '快递量',\n displayName: '快递量 (万件)',\n unit: '万件',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a98d2811e2a94e388119c772d19980c8',\n indicId: '614c9517ff954e909beeaff7fb324dbd',\n },\n {\n key: 'express-revenue-year-national',\n aliases: ['快递业务收入', '快递收入'],\n name: '快递业务收入',\n displayName: '快递业务收入 (万元)',\n unit: '万元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a98d2811e2a94e388119c772d19980c8',\n indicId: '7209f8787c974235bf23a09f786447e5',\n },\n {\n key: 'mobile-phone-users-year-national',\n aliases: ['移动电话用户', '移动电话年末用户', '手机用户'],\n name: '移动电话年末用户',\n displayName: '移动电话年末用户 (万户)',\n unit: '万户',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'aeb6a15df8174f8eaf8ed66fdda629e9',\n indicId: '6a6b090595d048f09f34abb984182214',\n },\n {\n key: 'broadband-users-year-national',\n aliases: ['互联网宽带接入用户', '宽带接入用户', '宽带用户'],\n name: '互联网宽带接入用户',\n displayName: '互联网宽带接入用户 (万户)',\n unit: '万户',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '52b81ec946b74166bfb09b2a70105f78',\n indicId: '4635f9f75639448190338f83e2663371',\n },\n\n // --- Finance ---\n {\n key: 'm2-year-national',\n aliases: ['M2', '货币和准货币M2供应量', '货币供应量M2', '广义货币供应量'],\n name: '货币和准货币(M2)供应量',\n displayName: '货币和准货币 (M2) 供应量 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: 'b4654f05bda2472a9acf7488086971c3',\n indicId: 'f7fe1af1ef3c4046a62fefd5f0c2be6b',\n },\n {\n key: 'deposits-year-national',\n aliases: [\n '各项存款',\n '各项存款余额',\n '金融机构各项存款',\n '金融机构各项存款余额',\n '金融机构资金来源各项存款',\n '存款余额',\n ],\n name: '金融机构资金来源各项存款',\n displayName: '金融机构资金来源各项存款 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: '72d27fd93b834ff28813907c8a80a04b',\n indicId: 'ad0217dc4666437d9148e632c88cbdcd',\n },\n {\n key: 'loans-year-national',\n aliases: [\n '各项贷款',\n '各项贷款余额',\n '金融机构各项贷款',\n '金融机构各项贷款余额',\n '金融机构资金运用各项贷款',\n '贷款余额',\n ],\n name: '金融机构资金运用各项贷款',\n displayName: '金融机构资金运用各项贷款 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '年底余额',\n cid: 'da757ba930de4ad78b096c0fe497ba76',\n indicId: '1c1c3a67f80e41cd9ee66ca7e738d735',\n },\n\n // --- Education ---\n {\n key: 'higher-ed-institutions-year-national',\n aliases: ['普通高等学校数', '普通、职业高等学校数', '高等学校数', '高校数'],\n name: '普通、职业高等学校数',\n displayName: '普通、职业高等学校数 (所)',\n unit: '所',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '091cdd1e6a0648be89e944a61a6aea9d',\n indicId: 'ef144502d27a4b7e8bb55c776ca02f50',\n },\n {\n key: 'higher-ed-students-year-national',\n aliases: ['普通本专科在校学生数', '普通、职业本专科在校学生数', '本专科在校生', '在校大学生'],\n name: '普通、职业本专科在校学生数',\n displayName: '普通、职业本专科在校学生数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '66fa7dc25039460d94af99d177bbc512',\n indicId: '4dc890c99a2b4e0f849dd73733295901',\n },\n {\n key: 'higher-ed-teachers-year-national',\n aliases: [\n '普通高等学校专任教师数',\n '普通、职业高等学校专任教师数',\n '高校专任教师数',\n '高校教师数',\n ],\n name: '普通、职业高等学校专任教师数',\n displayName: '普通、职业高等学校专任教师数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '89988f8a4da848f98e7b402e1e781211',\n indicId: '948d9aeef0df4b598732dde268d173fc',\n },\n\n // --- Health ---\n {\n key: 'health-institutions-year-national',\n aliases: ['医疗卫生机构数', '医疗机构数'],\n name: '医疗卫生机构数',\n displayName: '医疗卫生机构数 (个)',\n unit: '个',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: 'e4a03f31f25c4d20823b6c2aec862df2',\n indicId: 'ecc1c2212e8a4beaa36f503cd602ceea',\n },\n {\n key: 'health-technicians-year-national',\n aliases: ['卫生技术人员数', '卫生技术人员'],\n name: '卫生技术人员数',\n displayName: '卫生技术人员数 (万人)',\n unit: '万人',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '27fd1733fe6f4503aae77fb53d42b871',\n indicId: 'dd2bc0e2596748acb777d625ef38928d',\n },\n {\n key: 'health-beds-year-national',\n aliases: ['医疗卫生机构床位数', '医疗卫生床位数', '医院床位数'],\n name: '医疗卫生机构床位数',\n displayName: '医疗卫生机构床位数 (万张)',\n unit: '万张',\n frequency: 'year',\n regionScope: 'national',\n measure: '年末',\n cid: '5eeed2da1ee748a1a035d3a6608ece67',\n indicId: 'bb0d2ff0b33441bbbf023b15803db641',\n },\n {\n key: 'health-expenditure-year-national',\n aliases: ['卫生总费用', '卫生总费用亿元'],\n name: '卫生总费用',\n displayName: '卫生总费用 (亿元)',\n unit: '亿元',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'fc2cd81f56644364a359c716b9599748',\n indicId: '1c60e1bb5c834beabf87a595c56b64f5',\n },\n\n // --- Environment ---\n {\n key: 'water-supply-year-national',\n aliases: ['供水总量', '供水总量亿立方米'],\n name: '供水总量',\n displayName: '供水总量 (亿立方米)',\n unit: '亿立方米',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'a425cb901c8d4979b87cabbd8a71af48',\n indicId: '002a6e2e7e6345a3be6e4bea79f7ed90',\n },\n {\n key: 'garbage-collected-year-national',\n aliases: ['生活垃圾清运量', '垃圾清运量'],\n name: '生活垃圾清运量',\n displayName: '生活垃圾清运量 (万吨)',\n unit: '万吨',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ed0b58d0d91f48e388f71550773e746d',\n indicId: '36f00374b7074c32b63e04f1e8922401',\n },\n {\n key: 'garbage-treatment-rate-year-national',\n aliases: ['生活垃圾无害化处理率', '垃圾无害化处理率'],\n name: '生活垃圾无害化处理率',\n displayName: '生活垃圾无害化处理率 (%)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: 'ed0b58d0d91f48e388f71550773e746d',\n indicId: '708b2b06668348baae3aed637e2f2747',\n },\n {\n key: 'afforestation-year-national',\n aliases: ['造林总面积', '造林面积'],\n name: '造林总面积',\n displayName: '造林总面积 (千公顷)',\n unit: '千公顷',\n frequency: 'year',\n regionScope: 'national',\n measure: '全年',\n cid: '779819b5052d410ca8ed01ff2a8da775',\n indicId: 'dd698d430b56494093e8317c05cb9076',\n },\n\n // --- Industry PPI ---\n {\n key: 'ppi-coal-year-national',\n aliases: ['煤炭开采和洗选业PPI', '煤炭开采和洗选业工业生产者出厂价格指数', '煤炭PPI'],\n name: '煤炭开采和洗选业工业生产者出厂价格指数',\n displayName: '煤炭开采和洗选业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '345d4dcbd90f4dc4b345c7ce22ba88b1',\n },\n {\n key: 'ppi-oil-gas-year-national',\n aliases: ['石油和天然气开采业PPI', '石油和天然气开采业工业生产者出厂价格指数', '油气开采PPI'],\n name: '石油和天然气开采业工业生产者出厂价格指数',\n displayName: '石油和天然气开采业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: 'e65c3e9357e248ffbc6abfb2623cff54',\n },\n {\n key: 'ppi-ferrous-mining-year-national',\n aliases: ['黑色金属矿采选业PPI', '黑色金属矿采选业工业生产者出厂价格指数', '铁矿石PPI'],\n name: '黑色金属矿采选业工业生产者出厂价格指数',\n displayName: '黑色金属矿采选业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '5fe9e5a93d944b178dc73fe5e0a305e2',\n },\n {\n key: 'ppi-auto-year-national',\n aliases: ['汽车制造业PPI', '汽车制造业工业生产者出厂价格指数', '汽车PPI'],\n name: '汽车制造业工业生产者出厂价格指数',\n displayName: '汽车制造业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: 'ef4e87fb412d4bcda71916f67b49e9b4',\n },\n {\n key: 'ppi-computer-electronics-year-national',\n aliases: [\n '计算机通信和其他电子设备制造业PPI',\n '计算机、通信和其他电子设备制造业PPI',\n '计算机通信和其他电子设备制造业工业生产者出厂价格指数',\n '电子设备制造业PPI',\n ],\n name: '计算机、通信和其他电子设备制造业工业生产者出厂价格指数',\n displayName: '计算机、通信和其他电子设备制造业工业生产者出厂价格指数 (上年=100)',\n unit: '%',\n frequency: 'year',\n regionScope: 'national',\n measure: '上年=100',\n cid: 'cf69eaa876494700a818339a13ef207b',\n indicId: '5100ad712cd84b48ab1500d18e83fc73',\n },\n\n // --- Monthly money supply ---\n {\n key: 'm2-month-national',\n aliases: ['M2', 'M2余额', 'M2期末值', '货币和准货币M2供应量期末值'],\n name: '货币和准货币(M2)供应量期末值',\n displayName: '货币和准货币 (M2) 供应量期末值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '期末值',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'f3c0ae453a54424489af41de315ec592',\n },\n {\n key: 'm2-growth-month-national',\n aliases: ['M2同比', 'M2增速', 'M2同比增长', '货币和准货币M2供应量同比增长'],\n name: '货币和准货币(M2)供应量同比增长',\n displayName: '货币和准货币 (M2) 供应量同比增长 (%)',\n unit: '%',\n frequency: 'month',\n regionScope: 'national',\n measure: '同比增长',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'e03f2232631f41cd9d754a7d7feb4a81',\n },\n {\n key: 'm1-month-national',\n aliases: ['M1', 'M1余额', 'M1期末值', '货币M1供应量期末值'],\n name: '货币(M1)供应量期末值',\n displayName: '货币 (M1) 供应量期末值 (亿元)',\n unit: '亿元',\n frequency: 'month',\n regionScope: 'national',\n measure: '期末值',\n cid: '82130c6621a745cda3d64b090e733383',\n indicId: 'add08d4a1ca049158166f126e169edde',\n },\n];\n\nexport function cleanQuery(query: string): string {\n let cleaned = stripRegion(query, regionNames());\n cleaned = cleaned\n .replace(/\\d{4}\\s*Q[1-4]/gi, ' ')\n .replace(/\\d{4}\\s*[-/]\\s*\\d{1,2}/g, ' ')\n .replace(/\\d{1,2}\\s*[-–—至]\\s*\\d{1,2}\\s*月/g, ' ')\n .replace(/\\d{4}\\s*年?/g, ' ')\n .replace(/\\d{1,2}\\s*月/g, ' ')\n .replace(/\\d{1,2}\\s*日/g, ' ')\n .replace(/第?[一二三四1234]\\s*季度/g, ' ')\n .replace(/(上半年|下半年|全年|年度)/g, ' ')\n .replace(/(中国|全国|最新|今年|去年|数据|统计|是多少|多少|查询|一下)/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n return normalize(cleaned);\n}\n\nexport function findCurated(\n query: string,\n period: Period,\n regionScope: 'national' | 'province' | 'city',\n): CuratedEntry | undefined {\n const normalized = cleanQuery(query);\n if (!normalized) return undefined;\n\n let best: { entry: CuratedEntry; score: number } | undefined;\n\n for (const entry of CURATED) {\n if (entry.frequency !== period) continue;\n if (entry.regionScope !== 'any' && entry.regionScope !== regionScope) continue;\n\n for (const alias of entry.aliases) {\n const candidate = normalize(alias);\n if (!candidate || normalized !== candidate) continue;\n const score = 100 + candidate.length;\n if (!best || score > best.score) best = { entry, score };\n }\n }\n\n return best?.entry;\n}\n","import { expandAliases, hasAny, MEASURE_TERMS, normalize, queryTokens } from './aliases.js';\nimport { catalogCode } from './catalog-codes.js';\nimport { type CuratedEntry, cleanQuery, findCurated } from './curated.js';\nimport { invalidArgument, NbsError, notFound } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport { type RegionRecord, scopeOf } from './regions.js';\nimport type {\n IndicatorCandidate,\n IndicatorRecord,\n Period,\n QueryOptions,\n ResolvedIndicator,\n SearchRecord,\n Shard,\n TreeRecord,\n} from './types.js';\n\nconst PERIOD_CODE: Record<Period, string> = {\n year: '3',\n quarter: '2',\n month: '1',\n};\n\nconst SUGGESTIONS = [\n 'GDP',\n 'CPI',\n 'PPI',\n '人口',\n '社会消费品零售总额',\n '固定资产投资',\n '城镇调查失业率',\n '居民人均可支配收入',\n];\n\n/** Short words that distinguish otherwise similar indicators. */\nconst QUALIFIER_TERMS = [\n '城镇',\n '农村',\n '夏收',\n '秋收',\n '税收',\n '支出',\n '收入',\n '利润',\n '营业收入',\n '总产量',\n '销售额',\n '销售面积',\n '房地产',\n '进口',\n '出口',\n '国有',\n '民间',\n '新建',\n '扩建',\n '改建',\n '住宅',\n];\n\nexport type ResolveOutcome =\n | { kind: 'resolved'; indicator: ResolvedIndicator }\n | { kind: 'ambiguous'; candidates: IndicatorCandidate[] }\n | { kind: 'notFound'; suggestions: string[] };\n\nfunction rawNormalize(text: string): string {\n return text\n .toLowerCase()\n .replace(/[\\s,,.。;;::、!?!?\"'“”‘’\\-_/\\\\|]/g, '')\n .trim();\n}\n\nfunction containsTerm(text: string, term: string): boolean {\n return rawNormalize(text).includes(rawNormalize(term));\n}\n\nfunction containsAny(text: string, terms: readonly string[]): boolean {\n return terms.some((term) => containsTerm(text, term));\n}\n\nfunction periodCode(period: Period): string {\n return PERIOD_CODE[period];\n}\n\nfunction displayNameFor(record: SearchRecord): string {\n return record.showName.trim() || record.name || '';\n}\n\nfunction measureFor(record: SearchRecord): string | undefined {\n const text = record.showName;\n const measures = [\n '累计值',\n '当季值',\n '当月值',\n '上年同月=100',\n '上年同期=100',\n '上年=100',\n '不变价',\n '现价',\n '贡献率',\n '拉动',\n '人均',\n '环比',\n '同比',\n '指数',\n '构成',\n ];\n const found = measures.filter((measure) => text.includes(measure));\n return found.length > 0 ? found.join(' / ') : undefined;\n}\n\nfunction toCandidate(record: SearchRecord, score: number, reasons: string[]): IndicatorCandidate {\n return {\n id: `${record.cid}:${record.indicId}`,\n name: record.name ?? record.showName,\n displayName: displayNameFor(record),\n unit: record.unit,\n frequency: record.frequency,\n region: record.region,\n measure: measureFor(record),\n score,\n reasons,\n };\n}\n\nfunction toResolved(record: SearchRecord, source: ResolvedIndicator['source']): ResolvedIndicator {\n return {\n cid: record.cid,\n indicId: record.indicId,\n name: record.name ?? record.showName,\n displayName: displayNameFor(record),\n unit: record.unit,\n frequency: record.frequency ?? 'year',\n region: record.region,\n regionCode: record.regionCode,\n measure: measureFor(record),\n source,\n };\n}\n\nfunction fromCurated(entry: CuratedEntry, region: RegionRecord): ResolvedIndicator {\n return {\n cid: entry.cid,\n indicId: entry.indicId,\n name: entry.name,\n displayName: entry.displayName,\n unit: entry.unit,\n frequency: entry.frequency,\n region: region.text,\n regionCode: region.value,\n measure: entry.measure,\n note: entry.note,\n shards: entry.shards,\n source: 'curated',\n };\n}\n\nfunction latestFirst(a: SearchRecord, b: SearchRecord): SearchRecord {\n if (a.dt !== b.dt) return a.dt > b.dt ? a : b;\n if (a.name && !b.name) return a;\n if (b.name && !a.name) return b;\n return a;\n}\n\nfunction dedupeRecords(records: SearchRecord[]): SearchRecord[] {\n const map = new Map<string, SearchRecord>();\n for (const record of records) {\n const key = `${record.cid}:${record.indicId}`;\n const existing = map.get(key);\n if (!existing) {\n map.set(key, { ...record });\n continue;\n }\n const latest = latestFirst(existing, record);\n map.set(key, {\n ...latest,\n name: latest.name ?? existing.name ?? record.name,\n unit: latest.unit ?? existing.unit ?? record.unit,\n frequency: latest.frequency ?? existing.frequency ?? record.frequency,\n });\n }\n return [...map.values()];\n}\n\nfunction scoreRecord(\n record: SearchRecord,\n query: string,\n period: Period,\n region: RegionRecord,\n): { score: number; reasons: string[] } {\n const reasons: string[] = [];\n let score = 0;\n\n const text = `${record.name ?? ''} ${record.showName}`;\n const normalizedName = normalize(record.name ?? '');\n const normalizedShow = normalize(record.showName);\n const cleaned = cleanQuery(query);\n const fullQuery = canonicalName(cleaned);\n const aliases = expandAliases(cleaned).map(canonicalName).filter(Boolean);\n const tokens = queryTokens(cleaned);\n\n let exact = false;\n let contains = false;\n if (fullQuery) {\n if (normalizedName === fullQuery || normalizedShow === fullQuery) exact = true;\n else if (normalizedName.includes(fullQuery) || normalizedShow.includes(fullQuery))\n contains = true;\n else if (fullQuery.includes(normalizedName) && normalizedName.length >= 2) contains = true;\n }\n for (const alias of aliases) {\n if (!alias || alias === fullQuery) continue;\n // A shorter alias contained in the full query (e.g. 粮食产量 inside\n // 夏收粮食产量) must not make a less specific indicator look exact.\n if (fullQuery.includes(alias)) continue;\n if (normalizedName === alias || normalizedShow === alias) exact = true;\n else if (normalizedName.includes(alias) || normalizedShow.includes(alias)) contains = true;\n }\n if (exact) {\n score += 50;\n reasons.push('名称完全匹配 +50');\n if (normalizedShow === fullQuery) {\n score += 10;\n reasons.push('展示名完全匹配 +10');\n }\n } else if (contains) {\n score += 25;\n reasons.push('名称包含关键词 +25');\n } else if (normalizedName && fullQuery.includes(normalizedName)) {\n score += 15;\n reasons.push('名称被查询包含 +15');\n }\n\n const tokenHits = tokens.filter(\n (token) => normalizedName.includes(token) || normalizedShow.includes(token),\n );\n if (tokenHits.length > 0) {\n score += tokenHits.length * 6;\n reasons.push(`关键词命中 ${tokenHits.length} 个 +${tokenHits.length * 6}`);\n }\n if (tokens.length > 0 && tokenHits.length === tokens.length) {\n score += 12;\n reasons.push('全部关键词命中 +12');\n }\n\n if (!record.name) {\n score -= 5;\n reasons.push('缺少指标名 -5');\n }\n\n if (record.frequency === period) {\n score += 30;\n reasons.push('频率匹配 +30');\n } else {\n score -= 40;\n reasons.push('频率不匹配 -40');\n }\n if (record.typeValue === periodCode(period)) {\n score += 10;\n reasons.push('数据类型匹配 +10');\n }\n\n if (region.national) {\n if (record.region.includes('全国')) {\n score += 30;\n reasons.push('地区匹配 +30');\n } else {\n score -= 25;\n reasons.push('地区不匹配 -25');\n }\n } else {\n const short = region.text.replace(/(省|市|自治区|特别行政区|壮族|回族|维吾尔|藏族|蒙古)/g, '');\n if (record.region.includes(region.text) || record.region.includes(short)) {\n score += 30;\n reasons.push('地区匹配 +30');\n } else if (record.region.includes('全国')) {\n score -= 20;\n reasons.push('全国数据与分省查询不匹配 -20');\n }\n }\n\n const unit = record.unit ?? '';\n const qGrowth = hasAny(query, MEASURE_TERMS.growth);\n const qIndex = hasAny(query, MEASURE_TERMS.index);\n const qPerCapita = hasAny(query, MEASURE_TERMS.perCapita);\n const qContribution = hasAny(query, MEASURE_TERMS.contribution);\n const qCumulative = hasAny(query, MEASURE_TERMS.cumulative);\n const qCurrent = hasAny(query, MEASURE_TERMS.current);\n const qConstant = hasAny(query, MEASURE_TERMS.constantPrice);\n const isPriceIndex = /价格|CPI|物价|指数/i.test(query) || /价格/.test(text);\n\n if (qGrowth) {\n if (/%|=100/.test(`${unit} ${text}`) || containsAny(text, ['增长', '增速'])) {\n score += 20;\n reasons.push('增速口径 +20');\n }\n if (/亿元|万元/.test(unit)) {\n score -= 15;\n reasons.push('总量单位与增速不符 -15');\n }\n }\n if (qIndex) {\n if (/=100/.test(`${unit} ${text}`) || containsTerm(text, '指数')) {\n score += 20;\n reasons.push('指数口径 +20');\n }\n if (/亿元|万元/.test(unit)) {\n score -= 10;\n reasons.push('总量单位与指数不符 -10');\n }\n if (!containsTerm(text, '指数') && !/=100/.test(`${unit} ${text}`)) {\n score -= 25;\n reasons.push('名称不含指数 -25');\n }\n }\n if (qPerCapita) {\n if (containsTerm(text, '人均')) {\n score += 30;\n reasons.push('人均口径 +30');\n } else {\n score -= 15;\n reasons.push('非人均口径 -15');\n }\n }\n if (qContribution) {\n if (containsAny(text, MEASURE_TERMS.contribution)) {\n score += 25;\n reasons.push('贡献率口径 +25');\n } else {\n score -= 15;\n reasons.push('非贡献率口径 -15');\n }\n }\n if (qCumulative) {\n if (containsTerm(text, '累计')) {\n score += 20;\n reasons.push('累计口径 +20');\n }\n if (containsTerm(text, '当季') || containsTerm(text, '当月')) {\n score -= 10;\n reasons.push('当季口径与累计不符 -10');\n }\n }\n if (qCurrent) {\n if (containsAny(text, ['当季', '当月'])) {\n score += 20;\n reasons.push('当季/当月口径 +20');\n }\n if (containsTerm(text, '累计')) {\n score -= 10;\n reasons.push('累计口径与当季不符 -10');\n }\n }\n if (qConstant) {\n if (containsTerm(text, '不变价')) {\n score += 25;\n reasons.push('不变价口径 +25');\n }\n }\n\n const noMeasure =\n !qGrowth && !qIndex && !qPerCapita && !qContribution && !qCumulative && !qCurrent && !qConstant;\n if (noMeasure) {\n if (isPriceIndex) {\n if (/=100/.test(`${unit} ${text}`)) {\n score += 15;\n reasons.push('价格指数默认同比口径 +15');\n }\n if (unit === '%') {\n score -= 5;\n reasons.push('价格指数默认不选百分比 -5');\n }\n } else {\n if (/亿元|万元|元|万吨|万人|亿人/.test(unit)) {\n score += 15;\n reasons.push('默认总量单位 +15');\n }\n if (unit === '%') {\n score -= 10;\n reasons.push('默认不选百分比 -10');\n }\n if (unit.includes('=100')) {\n score -= 5;\n reasons.push('默认不选定基指数 -5');\n }\n }\n }\n\n if (!qContribution && containsAny(text, MEASURE_TERMS.contribution)) {\n score -= 25;\n reasons.push('未询问贡献率/拉动/构成 -25');\n }\n if (!qIndex && containsTerm(text, '指数')) {\n score -= 15;\n reasons.push('未询问指数 -15');\n }\n if (!qPerCapita && containsTerm(text, '人均')) {\n score -= 25;\n reasons.push('未询问人均 -25');\n }\n if (!qConstant && containsTerm(text, '不变价')) {\n score -= 20;\n reasons.push('未询问不变价 -20');\n }\n if (!qGrowth && containsAny(text, ['增长率', '增长速度'])) {\n score -= 10;\n reasons.push('未询问增速 -10');\n }\n const asksGrowth = qGrowth || /增长|增速|同比|环比/.test(cleaned);\n if (!asksGrowth && containsTerm(text, '增长')) {\n score -= 15;\n reasons.push('未询问增长 -15');\n }\n if (!cleaned.includes('单位面积') && containsTerm(text, '单位面积')) {\n score -= 20;\n reasons.push('未询问单位面积 -20');\n }\n for (const component of ['工资性', '经营净', '财产净', '转移净', '中位数']) {\n if (!cleaned.includes(component) && containsTerm(text, component)) {\n score -= 15;\n reasons.push(`未询问${component}收入 -15`);\n }\n }\n if (!qCumulative && containsTerm(text, '累计')) {\n score -= 5;\n reasons.push('未询问累计 -5');\n }\n if (!qCurrent && containsAny(text, ['当季', '当月'])) {\n score -= 5;\n reasons.push('未询问当季/当月 -5');\n }\n if (containsTerm(text, '环比')) {\n score -= 10;\n reasons.push('环比口径降权 -10');\n }\n if (!query.includes('支出法') && containsTerm(text, '支出法')) {\n score -= 15;\n reasons.push('未询问支出法 -15');\n }\n if (!query.includes('民族自治') && containsTerm(text, '民族自治')) {\n score -= 20;\n reasons.push('未询问民族自治地方 -20');\n }\n if (!query.includes('定基') && /1978年?=100|1985年?=100/.test(`${unit} ${text}`)) {\n score -= 20;\n reasons.push('非定基查询降权 -20');\n }\n if (!query.includes('抽样') && containsTerm(text, '抽样调查')) {\n score -= 15;\n reasons.push('未询问抽样调查 -15');\n }\n if (!query.includes('男') && containsTerm(text, '男性')) {\n score -= 10;\n reasons.push('未询问男性人口 -10');\n }\n if (!query.includes('女') && containsTerm(text, '女性')) {\n score -= 10;\n reasons.push('未询问女性人口 -10');\n }\n if (!query.includes('城镇') && containsTerm(text, '城镇人口')) {\n score -= 10;\n reasons.push('未询问城镇人口 -10');\n }\n if (!query.includes('乡村') && containsTerm(text, '乡村人口')) {\n score -= 10;\n reasons.push('未询问乡村人口 -10');\n }\n\n // Discriminate similar indicators by qualifier words. This is deliberately\n // light-weight: it should break ties, not override a clear name match.\n for (const term of QUALIFIER_TERMS) {\n const inQuery = containsTerm(query, term);\n const inText = containsTerm(text, term);\n if (inQuery && inText) {\n score += 12;\n reasons.push(`限定词 ${term} +12`);\n } else if (inQuery && !inText) {\n score -= 10;\n reasons.push(`缺少限定词 ${term} -10`);\n }\n }\n\n if (record.dt) {\n score += 5;\n reasons.push('有最新数据 +5');\n }\n\n return { score, reasons };\n}\n\nfunction decide(\n scored: Array<{ record: SearchRecord; score: number; reasons: string[] }>,\n source: ResolvedIndicator['source'] = 'search',\n): ResolveOutcome {\n if (scored.length === 0) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const sorted = [...scored].sort((a, b) => b.score - a.score);\n const top = sorted[0];\n if (!top) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const second = sorted[1];\n const gap = second ? top.score - second.score : Number.POSITIVE_INFINITY;\n\n const confident =\n (top.score >= 80 && gap >= 10) ||\n (top.score >= 60 && gap >= 20) ||\n (top.score >= 45 && !second);\n\n if (confident) {\n return { kind: 'resolved', indicator: toResolved(top.record, source) };\n }\n\n if (top.score >= 30) {\n return {\n kind: 'ambiguous',\n candidates: sorted\n .slice(0, 3)\n .map((item) => toCandidate(item.record, item.score, item.reasons)),\n };\n }\n\n return { kind: 'notFound', suggestions: SUGGESTIONS };\n}\n\nasync function resolveFromSearch(\n provider: NbsProvider,\n query: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const result = await provider.search({\n keyword: query,\n period,\n pageSize: 50,\n signal: options.signal,\n noCache: options.noCache,\n });\n\n const records = dedupeRecords(result.records);\n const scored = records\n .map((record) => {\n const { score, reasons } = scoreRecord(record, query, period, region);\n return { record, score, reasons };\n })\n .filter((item) => item.score > 0);\n\n return decide(scored);\n}\n\nfunction categoryHints(query: string): string[] {\n const text = normalize(query);\n const hints: string[] = [];\n if (/gdp|国内生产总值|地区生产总值|经济总量|生产总值/.test(text)) {\n hints.push('国民经济核算', '综合');\n }\n if (/cpi|消费价格|物价|ppi|生产者价格/.test(text)) hints.push('价格指数');\n if (/人口|常住人口/.test(text)) hints.push('人口');\n if (/社零|社会消费品|零售/.test(text)) hints.push('国内贸易', '社会消费品零售总额');\n if (/固投|固定资产投资|房地产/.test(text)) hints.push('固定资产投资', '房地产');\n if (/失业/.test(text)) hints.push('就业', '城镇调查失业率');\n if (/收入/.test(text)) hints.push('人民生活');\n if (/工业|增加值/.test(text)) hints.push('工业');\n if (/粮食|农业|农林牧渔/.test(text)) hints.push('农业');\n if (/进出口|外贸|贸易/.test(text)) hints.push('对外经济贸易', '国内贸易');\n if (/财政|预算/.test(text)) hints.push('财政');\n if (/建筑业/.test(text)) hints.push('建筑业');\n return [...new Set(hints)];\n}\n\n/** Normalize a tree node name so \"居民消费价格分类指数\" matches \"居民消费价格指数\". */\nfunction canonicalName(text: string): string {\n return normalize(text).replace(/分类/g, '');\n}\n\nfunction treeNameMatches(name: string, query: string): boolean {\n const cleaned = cleanQuery(query);\n const normalizedName = canonicalName(name);\n if (!normalizedName) return false;\n const aliases = expandAliases(cleaned).map(canonicalName).filter(Boolean);\n if (aliases.some((alias) => normalizedName.includes(alias) || alias.includes(normalizedName))) {\n return true;\n }\n return queryTokens(cleaned).some((token) => normalizedName.includes(token));\n}\n\n/** Approximate name affinity using overlapping 2-grams, used to rank leaves. */\nfunction nameAffinity(name: string, query: string): number {\n const node = canonicalName(name);\n const target = canonicalName(query);\n if (!node || !target) return 0;\n let score = 0;\n for (let index = 0; index < target.length - 1; index += 1) {\n const gram = target.slice(index, index + 2);\n if (node.includes(gram)) score += 1;\n }\n return score;\n}\n\nfunction treeRecord(\n indicator: IndicatorRecord,\n leaf: TreeRecord,\n period: Period,\n region: RegionRecord,\n): SearchRecord {\n return {\n cid: indicator.cid,\n indicId: indicator.id,\n name: indicator.name,\n showName: indicator.showName,\n unit: indicator.unit,\n frequency: period,\n dt: '',\n dtName: '',\n region: region.text,\n regionCode: region.value,\n value: '',\n typeValue: periodCode(period),\n treePath: leaf.id,\n };\n}\n\n/** Matches a trailing range in a catalog leaf, e.g. \"(2021-)\", \"(2016-2020)\", \"(-2015)\". */\nconst SHARD_LABEL_RE = /\\s*[((]\\s*(\\d{4})?\\s*[-–—至]\\s*(\\d{4})?\\s*[))]\\s*$/;\n\nexport interface ParsedShardLabel {\n base: string;\n startYear?: number;\n endYear?: number;\n}\n\nexport function parseShardLabel(name: string): ParsedShardLabel | undefined {\n const match = SHARD_LABEL_RE.exec(name);\n if (!match) return undefined;\n const startYear = match[1] ? Number(match[1]) : undefined;\n const endYear = match[2] ? Number(match[2]) : undefined;\n if (startYear === undefined && endYear === undefined) return undefined;\n const base = name.slice(0, match.index).trim();\n if (!base) return undefined;\n return {\n base,\n ...(startYear === undefined ? {} : { startYear }),\n ...(endYear === undefined ? {} : { endYear }),\n };\n}\n\nfunction shardComparable(text: string): string {\n return normalize(text.replace(SHARD_LABEL_RE, ''));\n}\n\nfunction isLaterShard(a: ParsedShardLabel, b: ParsedShardLabel): boolean {\n const aEnd = a.endYear ?? Number.POSITIVE_INFINITY;\n const bEnd = b.endYear ?? Number.POSITIVE_INFINITY;\n if (aEnd !== bEnd) return aEnd > bEnd;\n const aStart = a.startYear ?? Number.NEGATIVE_INFINITY;\n const bStart = b.startYear ?? Number.NEGATIVE_INFINITY;\n return aStart > bStart;\n}\n\n/**\n * Discover sibling catalog leaves that represent earlier/later ranges of the\n * same series. The upstream API models long series as separate cids whose leaf\n * names carry a range suffix; without this, a query silently returns only the\n * current shard.\n */\nasync function discoverShards(\n provider: NbsProvider,\n leaf: TreeRecord,\n record: SearchRecord,\n code: string,\n resolved: ResolvedIndicator,\n options: QueryOptions,\n): Promise<Shard[] | undefined> {\n const parsed = parseShardLabel(leaf.name);\n if (!parsed || !leaf.parentId) return undefined;\n\n const siblings = await provider.getTree({\n pid: leaf.parentId,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n const shardLeaves = siblings\n .map((node) => ({ node, range: parseShardLabel(node.name) }))\n .filter(\n (item): item is { node: TreeRecord; range: ParsedShardLabel } =>\n item.node.isLeaf && item.range !== undefined && item.range.base === parsed.base,\n )\n .sort((a, b) => (a.range.startYear ?? -Infinity) - (b.range.startYear ?? -Infinity));\n\n if (shardLeaves.length < 2) return undefined;\n\n const targetShow = shardComparable(record.showName);\n const targetName = shardComparable(record.name ?? '');\n const shards: Shard[] = [];\n for (const item of shardLeaves.slice(0, 8)) {\n const indicators = await provider.getIndicators({\n cid: item.node.id,\n signal: options.signal,\n noCache: options.noCache,\n });\n const match =\n indicators.find((indicator) => shardComparable(indicator.showName) === targetShow) ??\n (targetName\n ? indicators.find((indicator) => shardComparable(indicator.name) === targetName)\n : undefined);\n if (!match) continue;\n shards.push({\n cid: item.node.id,\n indicId: match.id,\n ...(item.range.startYear === undefined ? {} : { startYear: item.range.startYear }),\n ...(item.range.endYear === undefined ? {} : { endYear: item.range.endYear }),\n label: item.node.name,\n });\n }\n\n if (shards.length < 2) return undefined;\n if (!shards.some((shard) => shard.cid === resolved.cid && shard.indicId === resolved.indicId)) {\n shards.push({\n cid: resolved.cid,\n indicId: resolved.indicId,\n ...(parsed.startYear === undefined ? {} : { startYear: parsed.startYear }),\n ...(parsed.endYear === undefined ? {} : { endYear: parsed.endYear }),\n label: leaf.name,\n });\n }\n return shards.sort((a, b) => (a.startYear ?? -Infinity) - (b.startYear ?? -Infinity));\n}\n\n// Short-lived negative cache for NOT_FOUND only. Ambiguous results are not\n// cached because candidate sets can change when upstream adds indicators.\nconst NEGATIVE_TTL_MS = 5 * 60 * 1000;\nconst NEGATIVE_MAX_ENTRIES = 200;\nconst negativeCache = new Map<string, { expiresAt: number; outcome: ResolveOutcome }>();\n\nfunction negativeKey(query: string, period: Period, scope: string): string {\n return `${normalize(cleanQuery(query))}|${period}|${scope}`;\n}\n\nfunction readNegative(key: string): ResolveOutcome | undefined {\n const entry = negativeCache.get(key);\n if (!entry) return undefined;\n if (entry.expiresAt <= Date.now()) {\n negativeCache.delete(key);\n return undefined;\n }\n return entry.outcome;\n}\n\nfunction writeNegative(key: string, outcome: ResolveOutcome): void {\n negativeCache.delete(key);\n negativeCache.set(key, { expiresAt: Date.now() + NEGATIVE_TTL_MS, outcome });\n while (negativeCache.size > NEGATIVE_MAX_ENTRIES) {\n const oldest = negativeCache.keys().next().value;\n if (oldest === undefined) break;\n negativeCache.delete(oldest);\n }\n}\n\n/** Clear the resolver's NOT_FOUND cache (mainly for tests). */\nexport function clearResolverNegativeCache(): void {\n negativeCache.clear();\n}\n\nasync function resolveFromTree(\n provider: NbsProvider,\n query: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const code = catalogCode(scopeOf(region), period);\n if (!code) {\n throw new NbsError('UNSUPPORTED_ACTION', '该地区/频率组合暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8);月度 code=7 是 36/70 城市汇总价格指数,不是单城市数据。',\n });\n }\n const hints = categoryHints(query);\n const queue: Array<{ pid: string; depth: number; hinted: boolean }> = [\n { pid: '', depth: 0, hinted: false },\n ];\n const leaves: Array<{ node: TreeRecord; affinity: number }> = [];\n let treeRequests = 0;\n\n while (queue.length > 0 && treeRequests < 12 && leaves.length < 40) {\n const current = queue.shift();\n if (!current || current.depth > 4) continue;\n const nodes = await provider.getTree({\n pid: current.pid,\n code,\n signal: options.signal,\n noCache: options.noCache,\n });\n treeRequests += 1;\n\n for (const node of nodes) {\n const matches = treeNameMatches(node.name, query);\n const hinted = hints.some((hint) => node.name.includes(hint));\n const rootLevel = current.pid === '';\n const branchHinted = current.hinted || hinted;\n if (node.isLeaf && (matches || branchHinted)) {\n leaves.push({ node, affinity: nameAffinity(node.name, query) });\n } else if (\n !node.isLeaf &&\n (matches || hinted || rootLevel || current.hinted) &&\n current.depth < 4\n ) {\n queue.push({ pid: node.id, depth: current.depth + 1, hinted: branchHinted });\n }\n }\n }\n\n const scored: Array<{ record: SearchRecord; score: number; reasons: string[] }> = [];\n const leafByKey = new Map<string, TreeRecord>();\n const recordByKey = new Map<string, SearchRecord>();\n const shardGroups = new Map<\n string,\n {\n leaf: TreeRecord;\n record: SearchRecord;\n score: number;\n reasons: string[];\n range: ParsedShardLabel;\n }\n >();\n const selected = [...leaves]\n .sort((a, b) => b.affinity - a.affinity)\n .slice(0, 5)\n .map((item) => item.node);\n for (const leaf of selected) {\n const indicators = await provider.getIndicators({\n cid: leaf.id,\n signal: options.signal,\n noCache: options.noCache,\n });\n const range = parseShardLabel(leaf.name);\n for (const indicator of indicators) {\n const record = treeRecord(indicator, leaf, period, region);\n const { score, reasons } = scoreRecord(record, query, period, region);\n if (!range) {\n scored.push({ record, score, reasons });\n leafByKey.set(`${record.cid}:${record.indicId}`, leaf);\n recordByKey.set(`${record.cid}:${record.indicId}`, record);\n continue;\n }\n // The same long series appears as several sibling leaves, one per year\n // range. Keep the latest range as the representative, then attach all\n // ranges as shards after resolution.\n const groupKey = `${range.base}|${shardComparable(record.showName)}|${record.unit ?? ''}`;\n const existing = shardGroups.get(groupKey);\n if (!existing || isLaterShard(range, existing.range)) {\n shardGroups.set(groupKey, { leaf, record, score, reasons, range });\n }\n }\n }\n for (const group of shardGroups.values()) {\n scored.push({ record: group.record, score: group.score, reasons: group.reasons });\n leafByKey.set(`${group.record.cid}:${group.record.indicId}`, group.leaf);\n recordByKey.set(`${group.record.cid}:${group.record.indicId}`, group.record);\n }\n\n if (scored.length === 0) return { kind: 'notFound', suggestions: SUGGESTIONS };\n const outcome = decide(scored, 'tree');\n if (outcome.kind === 'resolved') {\n const key = `${outcome.indicator.cid}:${outcome.indicator.indicId}`;\n const leaf = leafByKey.get(key);\n const record = recordByKey.get(key);\n if (leaf && record) {\n try {\n const shards = await discoverShards(\n provider,\n leaf,\n record,\n code,\n outcome.indicator,\n options,\n );\n if (shards) outcome.indicator.shards = shards;\n } catch (error) {\n if (options.signal?.aborted) throw error;\n // Shard discovery is best-effort; keep the primary shard on failure.\n }\n }\n }\n return outcome;\n}\n\nfunction parseSelection(indicatorId: string): { cid: string; indicId: string } | undefined {\n const [cid, indicId] = indicatorId.split(':');\n if (!cid || !indicId) return undefined;\n return { cid, indicId };\n}\n\nasync function resolveSelection(\n provider: NbsProvider,\n indicatorId: string,\n period: Period,\n region: RegionRecord,\n options: QueryOptions,\n): Promise<ResolveOutcome> {\n const parsed = parseSelection(indicatorId);\n if (!parsed) {\n throw notFound(\n 'indicatorId 格式不正确',\n '请使用 QueryResult.candidates[].id,格式为 cid:indicId。',\n );\n }\n const indicators = await provider.getIndicators({\n cid: parsed.cid,\n signal: options.signal,\n noCache: options.noCache,\n });\n const found = indicators.find((indicator) => indicator.id === parsed.indicId);\n if (!found) {\n throw notFound('找不到指定的指标', '候选可能已过期;请重新搜索并选择新的 candidate id。');\n }\n return {\n kind: 'resolved',\n indicator: {\n cid: found.cid,\n indicId: found.id,\n name: found.name,\n displayName: found.showName,\n unit: found.unit,\n frequency: period,\n region: region.text,\n regionCode: region.value,\n measure: found.measure,\n source: 'selection',\n },\n };\n}\n\n/** Infer the data frequency from explicit period, start/end formats, or query words. */\nexport function inferPeriod(options: QueryOptions): Period {\n if (options.period) return options.period;\n const text = `${options.start ?? ''} ${options.end ?? ''} ${options.query ?? ''}`;\n if (/\\d{4}\\s*-\\s*\\d{1,2}/.test(text) || /月|月度|MM/.test(text)) return 'month';\n if (/\\d{4}\\s*Q[1-4]/i.test(text) || /\\d{4}\\s*SS/.test(text) || /季度|季/.test(text)) {\n return 'quarter';\n }\n return 'year';\n}\n\n/** Resolve a keyword to a concrete cid + indicator id. */\nexport async function resolveIndicator(\n provider: NbsProvider,\n options: QueryOptions,\n period: Period,\n region: RegionRecord,\n): Promise<ResolveOutcome> {\n const query = options.query?.trim();\n if (options.indicatorId) {\n return resolveSelection(provider, options.indicatorId, period, region, options);\n }\n if (!query) {\n throw invalidArgument('缺少 query 参数', '示例:query({ query: \"GDP\", action: \"series\" })');\n }\n\n const scope = scopeOf(region);\n if (scope === 'city' && period !== 'year') {\n throw new NbsError('UNSUPPORTED_ACTION', '主要城市月度/季度数据暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8);月度 code=7 是 36/70 城市汇总价格指数,不是单城市数据。',\n });\n }\n\n const curatedScope =\n scope === 'national' ? 'national' : scope === 'province' ? 'province' : 'city';\n const curated = findCurated(query, period, curatedScope);\n if (curated) {\n return { kind: 'resolved', indicator: fromCurated(curated, region) };\n }\n\n const key = negativeKey(query, period, scope);\n const cachedNegative = readNegative(key);\n if (cachedNegative) return cachedNegative;\n\n if (scope !== 'national') {\n const treeOutcome = await resolveFromTree(provider, query, period, region, options);\n if (treeOutcome.kind !== 'notFound') return treeOutcome;\n const outcome: ResolveOutcome = { kind: 'notFound', suggestions: SUGGESTIONS };\n writeNegative(key, outcome);\n return outcome;\n }\n\n const searchOutcome = await resolveFromSearch(provider, query, period, region, options);\n if (searchOutcome.kind === 'resolved') return searchOutcome;\n\n const hints = categoryHints(query);\n if (searchOutcome.kind === 'notFound' || hints.length > 0) {\n const treeOutcome = await resolveFromTree(provider, query, period, region, options);\n if (treeOutcome.kind === 'resolved') return treeOutcome;\n if (treeOutcome.kind === 'ambiguous') return treeOutcome;\n }\n\n if (searchOutcome.kind !== 'notFound') return searchOutcome;\n const outcome: ResolveOutcome = { kind: 'notFound', suggestions: SUGGESTIONS };\n writeNegative(key, outcome);\n return outcome;\n}\n","import type { DataPoint, Format, QueryResult } from './types.js';\n\nconst EMPTY_VALUES = new Set(['', '—', '--', '-', 'null', 'None', 'nan', 'NaN']);\n\n/** Preserve the raw precision while adding thousands separators to the integer part. */\nexport function formatNumber(raw: string): string {\n const text = raw.trim();\n if (EMPTY_VALUES.has(text)) return '—';\n const match = text.match(/^(-?)(\\d+)(?:\\.(\\d+))?$/);\n if (!match) return text;\n const sign = match[1] ?? '';\n const integer = match[2] ?? '';\n const decimal = match[3];\n const grouped = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return `${sign}${grouped}${decimal === undefined ? '' : `.${decimal}`}`;\n}\n\n/** Display width for terminal alignment; CJK characters count as 2 columns. */\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const char of text) {\n const code = char.codePointAt(0) ?? 0;\n const wide =\n (code >= 0x1100 && code <= 0x115f) ||\n (code >= 0x2e80 && code <= 0xa4cf) ||\n (code >= 0xac00 && code <= 0xd7a3) ||\n (code >= 0xf900 && code <= 0xfaff) ||\n (code >= 0xfe10 && code <= 0xfe19) ||\n (code >= 0xfe30 && code <= 0xfe6f) ||\n (code >= 0xff00 && code <= 0xff60) ||\n (code >= 0xffe0 && code <= 0xffe6) ||\n (code >= 0x1f300 && code <= 0x1f64f) ||\n (code >= 0x1f900 && code <= 0x1f9ff) ||\n (code >= 0x20000 && code <= 0x3fffd);\n width += wide ? 2 : 1;\n }\n return width;\n}\n\nfunction pad(text: string, width: number, align: 'left' | 'right' = 'left'): string {\n const current = displayWidth(text);\n const gap = Math.max(0, width - current);\n return align === 'right' ? `${' '.repeat(gap)}${text}` : `${text}${' '.repeat(gap)}`;\n}\n\nfunction renderPoints(points: DataPoint[], region?: string): string[] {\n return points.map((point) => {\n const where = point.region ?? region ?? '';\n const unit = point.unit ? ` ${point.unit}` : '';\n return `${point.periodName}${where ? ` ${where}` : ''}:${point.display}${unit}`;\n });\n}\n\nfunction renderText(result: QueryResult): string {\n const lines: string[] = [];\n const source = result.source;\n\n if (!result.ok) {\n lines.push(`查询失败:${result.error?.message ?? '未知错误'}`);\n if (result.error?.hint) lines.push(`提示:${result.error.hint}`);\n if (result.candidates && result.candidates.length > 0) {\n lines.push('候选指标:');\n result.candidates.forEach((candidate, index) => {\n const unit = candidate.unit ? ` (${candidate.unit})` : '';\n lines.push(` ${index + 1}. ${candidate.displayName || candidate.name}${unit}`);\n });\n lines.push('用 --json 查看候选 id,或加 --select <序号> 重新查询。');\n }\n return lines.join('\\n');\n }\n\n if (result.action === 'catalog') {\n lines.push('国家统计局 · 分类树');\n for (const node of result.nodes ?? []) {\n lines.push(\n `${' '.repeat(Math.max(0, node.level - 1))}- ${node.name}${node.isLeaf ? '' : ' /'}`,\n );\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n return lines.join('\\n');\n }\n\n if (result.action === 'compare' && result.series?.length) {\n lines.push(\n `国家统计局 · ${result.indicator?.displayName ?? result.indicator?.name ?? '地区对比'}`,\n );\n for (const series of result.series) {\n lines.push('');\n lines.push(`${series.region}:`);\n lines.push(...renderPoints(series.points, series.region));\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push('');\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n return lines.join('\\n');\n }\n\n const title = result.indicator?.displayName ?? result.indicator?.name ?? '查询结果';\n lines.push(`国家统计局 · ${title}`);\n if (result.points?.length) {\n lines.push(...renderPoints(result.points));\n } else {\n lines.push('没有找到数据。');\n }\n if (result.notes?.length) lines.push(...result.notes.map((note) => `注:${note}`));\n lines.push(`来源:${source.name}(data.stats.gov.cn)`);\n lines.push(`获取时间:${source.retrievedAt}`);\n return lines.join('\\n');\n}\n\nfunction renderTable(result: QueryResult): string {\n const rows: DataPoint[] = [];\n if (result.action === 'compare' && result.series?.length) {\n for (const series of result.series) rows.push(...series.points);\n } else {\n rows.push(...(result.points ?? []));\n }\n\n if (rows.length === 0) return renderText(result);\n\n const headers = ['时间', '地区', '数值', '单位'];\n const table = rows.map((point) => [\n point.periodName || point.period,\n point.region ?? '',\n point.display,\n point.unit ?? '',\n ]);\n const widths = headers.map((header, index) =>\n Math.max(displayWidth(header), ...table.map((row) => displayWidth(row[index] ?? ''))),\n );\n const line = (cells: string[]) =>\n cells\n .map((cell, index) => pad(cell, widths[index] ?? 0, index === 2 ? 'right' : 'left'))\n .join(' ');\n const separator = widths.map((width) => '─'.repeat(width)).join(' ');\n\n return [\n line(headers),\n separator,\n ...table.map((row) => line(row)),\n '',\n `来源:${result.source.name}(data.stats.gov.cn)`,\n ].join('\\n');\n}\n\n/** Render a QueryResult. The core query() always returns structured data. */\nexport function render(result: QueryResult, format: Format = 'text'): string {\n if (format === 'json') return JSON.stringify(result, null, 2);\n if (format === 'table') return renderTable(result);\n return renderText(result);\n}\n","import { invalidRange } from './errors.js';\nimport { formatNumber } from './format.js';\nimport type { NbsProvider } from './provider.js';\nimport type { DataPoint, Period, ResolvedIndicator, SeriesPeriod, Shard } from './types.js';\n\ninterface OrdinalRange {\n start: number;\n end: number;\n}\n\ninterface ShardRange {\n cid: string;\n indicId: string;\n start: number;\n end: number;\n label?: string;\n}\n\nexport interface SeriesResult {\n points: DataPoint[];\n notes: string[];\n partial: boolean;\n}\n\nconst DEFAULT_MAX_POINTS = 240;\n\nfunction ordinalOf(period: Period, year: number, index: number): number {\n if (period === 'year') return year;\n if (period === 'quarter') return year * 4 + (index - 1);\n return year * 12 + (index - 1);\n}\n\nfunction codeOf(period: Period, ordinal: number): string {\n if (period === 'year') return `${ordinal}YY`;\n if (period === 'quarter') {\n const year = Math.floor(ordinal / 4);\n const quarter = (ordinal % 4) + 1;\n return `${year}${String(quarter).padStart(2, '0')}SS`;\n }\n const year = Math.floor(ordinal / 12);\n const month = (ordinal % 12) + 1;\n return `${year}${String(month).padStart(2, '0')}MM`;\n}\n\nfunction currentOrdinal(period: Period, now = new Date()): number {\n const year = now.getFullYear();\n if (period === 'year') return year;\n if (period === 'quarter') return year * 4 + Math.floor(now.getMonth() / 3);\n return year * 12 + now.getMonth();\n}\n\nfunction parseYear(value: string | number): number | undefined {\n const match = String(value).match(/(\\d{4})/);\n return match?.[1] ? Number(match[1]) : undefined;\n}\n\nfunction parseOrdinal(\n period: Period,\n value: string | number,\n edge: 'start' | 'end',\n): number | undefined {\n const text = String(value).trim();\n if (!text) return undefined;\n const year = parseYear(text);\n if (year === undefined) return undefined;\n\n if (period === 'year') return year;\n\n if (period === 'quarter') {\n const qMatch = text.match(/[Qq]\\s*([1-4])/);\n const ssMatch = text.match(/^(\\d{4})\\s*(\\d{2})SS$/);\n const q = qMatch?.[1]\n ? Number(qMatch[1])\n : ssMatch?.[2]\n ? Number(ssMatch[2])\n : edge === 'start'\n ? 1\n : 4;\n if (q < 1 || q > 4) return undefined;\n return ordinalOf('quarter', year, q);\n }\n\n const monthMatch = text.match(/(?:-|\\/|年)\\s*(\\d{1,2})/);\n const mmMatch = text.match(/^(\\d{4})(\\d{2})MM$/);\n const month = monthMatch?.[1]\n ? Number(monthMatch[1])\n : mmMatch?.[2]\n ? Number(mmMatch[2])\n : edge === 'start'\n ? 1\n : 12;\n if (month < 1 || month > 12) return undefined;\n return ordinalOf('month', year, month);\n}\n\nexport function resolveRange(\n period: Period,\n start: string | number | undefined,\n end: string | number | undefined,\n now = new Date(),\n): OrdinalRange {\n const current = currentOrdinal(period, now);\n const endOrdinal = end === undefined ? current : parseOrdinal(period, end, 'end');\n if (endOrdinal === undefined) {\n throw invalidRange(\n `无法解析结束时间:${String(end)}`,\n period === 'year'\n ? '年度请用 2025 或 2015'\n : period === 'quarter'\n ? '季度请用 2025Q1 或 2025'\n : '月度请用 2025-01 或 2025',\n );\n }\n\n let startOrdinal = start === undefined ? undefined : parseOrdinal(period, start, 'start');\n if (startOrdinal === undefined) {\n const span = period === 'year' ? 9 : period === 'quarter' ? 7 : 11;\n startOrdinal = endOrdinal - span;\n }\n\n if (startOrdinal > endOrdinal) {\n throw invalidRange(\n `开始时间晚于结束时间:${String(start)} > ${String(end)}`,\n '请检查 start/end 或 --start/--end。',\n );\n }\n\n return { start: startOrdinal, end: endOrdinal };\n}\n\nfunction shardRange(shard: Shard, period: Period): ShardRange {\n const start =\n shard.startYear === undefined\n ? Number.NEGATIVE_INFINITY\n : ordinalOf(period, shard.startYear, 1);\n const end =\n shard.endYear === undefined\n ? Number.POSITIVE_INFINITY\n : ordinalOf(period, shard.endYear, period === 'year' ? 1 : period === 'quarter' ? 4 : 12);\n return {\n cid: shard.cid,\n indicId: shard.indicId,\n start,\n end,\n label: shard.label,\n };\n}\n\nfunction buildShardRanges(indicator: ResolvedIndicator, range: OrdinalRange): ShardRange[] {\n if (!indicator.shards || indicator.shards.length === 0) {\n return [\n {\n cid: indicator.cid,\n indicId: indicator.indicId,\n start: range.start,\n end: range.end,\n },\n ];\n }\n\n return indicator.shards\n .map((shard) => shardRange(shard, indicator.frequency))\n .map((shard) => ({\n ...shard,\n start: Math.max(shard.start, range.start),\n end: Math.min(shard.end, range.end),\n }))\n .filter((shard) => shard.start <= shard.end)\n .sort((a, b) => a.start - b.start);\n}\n\n/** Convert an API period code into a canonical period and display name. */\nexport function parsePeriodCode(code: string): { period: string; name: string } {\n const year = code.match(/^(\\d{4})YY$/);\n if (year?.[1]) return { period: year[1], name: `${year[1]}年` };\n\n const quarter = code.match(/^(\\d{4})(\\d{2})SS$/);\n if (quarter?.[1] && quarter[2]) {\n const q = Number(quarter[2]);\n if (q >= 1 && q <= 4) {\n return { period: `${quarter[1]}Q${q}`, name: `${quarter[1]}年第${q}季度` };\n }\n }\n\n const month = code.match(/^(\\d{4})(\\d{2})MM$/);\n if (month?.[1] && month[2]) {\n const m = Number(month[2]);\n if (m >= 1 && m <= 12) {\n return { period: `${month[1]}-${String(m).padStart(2, '0')}`, name: `${month[1]}年${m}月` };\n }\n }\n\n return { period: code, name: code };\n}\n\nfunction parseValue(raw: string): number | null {\n const text = raw.trim().replace(/,/g, '');\n if (\n !text ||\n text === '—' ||\n text === '--' ||\n text === '-' ||\n text === 'null' ||\n text === 'None'\n ) {\n return null;\n }\n const value = Number(text);\n return Number.isFinite(value) ? value : null;\n}\n\nfunction pointFromPeriod(\n period: SeriesPeriod,\n indicator: ResolvedIndicator,\n fallbackRegion: string,\n indicId = indicator.indicId,\n): DataPoint | undefined {\n const value = period.values.find((item) => item.id === indicId) ?? period.values[0] ?? undefined;\n if (!value) return undefined;\n const canonical = parsePeriodCode(period.code);\n const rawValue = value.value ?? '';\n return {\n period: canonical.period,\n periodName: period.name || canonical.name,\n value: parseValue(rawValue),\n rawValue,\n display: formatNumber(rawValue),\n unit: value.unit ?? indicator.unit,\n region: value.regionName || indicator.region || fallbackRegion,\n };\n}\n\nfunction sortKey(period: string): number {\n const year = Number(period.slice(0, 4));\n if (period.includes('Q')) {\n const q = Number(period.split('Q')[1] ?? 1);\n return year * 4 + (q - 1);\n }\n if (period.includes('-')) {\n const month = Number(period.split('-')[1] ?? 1);\n return year * 12 + (month - 1);\n }\n return year;\n}\n\nexport interface FetchSeriesOptions {\n start?: string | number;\n end?: string | number;\n maxPoints?: number;\n signal?: AbortSignal;\n noCache?: boolean;\n}\n\n/** Fetch and merge a series, including shard ranges. */\nexport async function fetchSeries(\n provider: NbsProvider,\n indicator: ResolvedIndicator,\n period: Period,\n options: FetchSeriesOptions = {},\n): Promise<SeriesResult> {\n const range = resolveRange(period, options.start, options.end);\n const shardRanges = buildShardRanges(indicator, range);\n const notes: string[] = [];\n let partial = false;\n\n if (shardRanges.length === 0) {\n return {\n points: [],\n notes: [`没有覆盖 ${String(options.start ?? '')}–${String(options.end ?? '')} 的分片`],\n partial: false,\n };\n }\n\n const pointsByPeriod = new Map<string, DataPoint>();\n let successes = 0;\n let firstError: unknown;\n\n for (const shard of shardRanges) {\n const dts =\n shard.start === shard.end\n ? codeOf(period, shard.start)\n : `${codeOf(period, shard.start)}-${codeOf(period, shard.end)}`;\n try {\n const periods = await provider.getSeries({\n cid: shard.cid,\n indicId: shard.indicId,\n dts,\n region: {\n text: indicator.region ?? '全国',\n value: indicator.regionCode ?? '000000000000',\n },\n signal: options.signal,\n noCache: options.noCache,\n });\n successes += 1;\n for (const periodData of periods) {\n const point = pointFromPeriod(\n periodData,\n indicator,\n indicator.region ?? '全国',\n shard.indicId,\n );\n if (!point) continue;\n const existing = pointsByPeriod.get(point.period);\n if (!existing || existing.value === null || point.value !== null) {\n pointsByPeriod.set(point.period, point);\n }\n }\n } catch (error) {\n partial = true;\n firstError ??= error;\n notes.push(`分片 ${dts} 请求失败,已返回其余分片的数据。`);\n }\n }\n\n if (successes === 0 && firstError) throw firstError;\n\n const sorted = [...pointsByPeriod.values()].sort((a, b) => sortKey(a.period) - sortKey(b.period));\n const beforeTrim = sorted.length;\n while (sorted.length > 0 && sorted[sorted.length - 1]?.value === null) {\n sorted.pop();\n }\n if (sorted.length < beforeTrim) {\n notes.push('末尾尚未发布的数据点已省略。');\n }\n const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;\n const points = sorted.length > maxPoints ? sorted.slice(-maxPoints) : sorted;\n if (points.length < sorted.length) {\n notes.push(`数据点较多,仅返回最近 ${maxPoints} 个。`);\n }\n\n return { points, notes, partial };\n}\n","import { invalidArgument, NbsError } from './errors.js';\nimport type { NbsProvider } from './provider.js';\nimport { type RegionRecord, regionSuggestions, resolveRegion, scopeOf } from './regions.js';\nimport { type ResolveOutcome, resolveIndicator } from './resolver.js';\nimport { fetchSeries } from './series.js';\nimport type { CompareSeries, Period, QueryOptions, ResolvedIndicator } from './types.js';\n\nexport interface CompareResult {\n indicator: ResolvedIndicator;\n series: CompareSeries[];\n notes: string[];\n partial: boolean;\n}\n\nexport interface CompareOutcome {\n resolution: ResolveOutcome;\n result?: CompareResult;\n}\n\nconst MAX_REGIONS = 8;\n\n/** Compare one indicator across provinces (or across the given regions). */\nexport async function compareRegions(\n provider: NbsProvider,\n options: QueryOptions,\n period: Period,\n): Promise<CompareOutcome> {\n if (!options.regions || options.regions.length === 0) {\n throw invalidArgument('compare 需要 regions 参数', '示例:regions: [\"广东\", \"江苏\", \"浙江\"]');\n }\n if (options.regions.length > MAX_REGIONS) {\n throw invalidArgument(`compare 最多支持 ${MAX_REGIONS} 个地区`, '请减少地区数量或分多次查询。');\n }\n\n const regions: RegionRecord[] = [];\n for (const input of options.regions) {\n const region = resolveRegion(input);\n if (!region) {\n throw invalidArgument(\n `无法识别地区:${input}`,\n `可用地区包括:${regionSuggestions(input).join('、') || '广东、江苏、浙江、山东、河南'}`,\n );\n }\n regions.push(region);\n }\n\n const scopes = new Set(regions.map((region) => scopeOf(region)));\n if (scopes.size > 1) {\n throw invalidArgument('compare 不支持跨范围混比', '请全部使用全国、分省或主要城市,不要混合。');\n }\n if (scopes.has('city') && period !== 'year') {\n throw new NbsError('UNSUPPORTED_ACTION', '主要城市月度/季度对比暂未支持', {\n retryable: false,\n hint: '主要城市目前只有年度数据(code=8)。',\n });\n }\n\n const first = regions[0];\n if (!first) throw invalidArgument('compare 需要至少一个地区');\n\n const resolution = await resolveIndicator(provider, options, period, first);\n if (resolution.kind !== 'resolved') return { resolution };\n\n const base = resolution.indicator;\n const series: CompareSeries[] = [];\n const notes: string[] = [];\n let partial = false;\n\n for (const region of regions) {\n const indicator: ResolvedIndicator = {\n ...base,\n region: region.text,\n regionCode: region.value,\n };\n try {\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: options.maxPoints,\n signal: options.signal,\n noCache: options.noCache,\n });\n series.push({\n region: region.text,\n regionCode: region.value,\n points: result.points,\n });\n notes.push(...result.notes.map((note) => `${region.text}:${note}`));\n if (result.partial) partial = true;\n } catch (error) {\n partial = true;\n notes.push(\n `${region.text}:查询失败,${error instanceof Error ? error.message : String(error)}`,\n );\n if (series.length === 0) throw error;\n }\n }\n\n return {\n resolution,\n result: {\n indicator: base,\n series,\n notes,\n partial,\n },\n };\n}\n","import type { NbsClient } from './client.js';\nimport type {\n IndicatorParams,\n NbsProvider,\n SearchParams,\n SearchResult,\n SeriesParams,\n TreeParams,\n} from './provider.js';\nimport type {\n IndicatorRecord,\n NbsDataPeriod,\n NbsIndicatorItem,\n NbsSearchData,\n NbsSearchItem,\n NbsTreeItem,\n Period,\n ProvinceRecord,\n SearchRecord,\n SeriesPeriod,\n TreeRecord,\n} from './types.js';\n\nconst ROOT_ID = '69c574ab128a44e595cc0b24502b771b';\n\nconst TTL = {\n search: 10 * 60 * 1000,\n series: 30 * 60 * 1000,\n tree: 24 * 60 * 60 * 1000,\n indicators: 24 * 60 * 60 * 1000,\n provinces: 7 * 24 * 60 * 60 * 1000,\n};\n\nconst PERIOD_CODE: Record<Period, string> = {\n year: '3',\n quarter: '2',\n month: '1',\n};\n\nfunction periodFromDtType(dtType: string): Period | undefined {\n if (dtType === 'YY') return 'year';\n if (dtType === 'SS') return 'quarter';\n if (dtType === 'MM') return 'month';\n return undefined;\n}\n\nfunction isLikelyUnit(value: string): boolean {\n const text = value.trim();\n if (!text || text.length > 20) return false;\n if (/^\\d{4}(-\\d{4})?$/.test(text)) return false;\n if (/^\\d+$/.test(text)) return false;\n if (text.includes('=')) return true;\n if (/[%%]/.test(text)) return true;\n if (text === '人') return true;\n return /(亿元|万元|千元|元|美元|欧元|港元|百分点|万吨|亿吨|万千瓦|亿千瓦|万千瓦时|亿千瓦时|万人|亿人|人次|万平方米|亿平方米|平方公里|公顷|亩|台|辆|艘|架|张|件|部|所|个|户|头|只|吨|米|公里|升|立方米|年|岁|天|小时|分钟|秒)/.test(\n text,\n );\n}\n\n/** Extract the last plausible unit from a show_name like \"国内生产总值 (亿元) \". */\nexport function extractUnit(showName: string): string | undefined {\n const matches = [...showName.matchAll(/[((]([^()()]*)[))]/g)]\n .map((match) => match[1]?.trim() ?? '')\n .filter(Boolean);\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const candidate = matches[index];\n if (candidate && isLikelyUnit(candidate)) return candidate;\n }\n if (/[%%]\\s*$/.test(showName)) return '%';\n return undefined;\n}\n\nfunction parseYear(value: string | null | undefined): number | undefined {\n if (!value) return undefined;\n const match = value.match(/(\\d{4})/);\n return match?.[1] ? Number(match[1]) : undefined;\n}\n\nfunction mapSearchItem(item: NbsSearchItem): SearchRecord {\n const frequency = periodFromDtType(item.dt_type);\n const showName = item.show_name.trim();\n return {\n cid: item.cid,\n indicId: item.indic_id,\n name: item.i_name?.trim() || item.ek_name?.trim() || showName,\n showName,\n unit: extractUnit(showName),\n ...(frequency === undefined ? {} : { frequency }),\n dt: item.dt,\n dtName: item.dt_name,\n region: item.da_name || '全国',\n regionCode: item.da,\n value: item.value,\n typeValue: item.type_value,\n explain: item.explain,\n treePath: item.treeinfo_globalid,\n };\n}\n\nfunction mapTreeItem(item: NbsTreeItem): TreeRecord {\n return {\n id: item._id,\n name: item.name.trim(),\n parentId: item.treeinfo_pid || undefined,\n level: item.treeinfo_level,\n isLeaf: item.isLeaf,\n startYear: parseYear(item.sdate),\n endYear: parseYear(item.edate),\n };\n}\n\nfunction mapIndicator(item: NbsIndicatorItem, cid: string): IndicatorRecord {\n const measure =\n item.kj1_name?.trim() ||\n item.kj2_name?.trim() ||\n item.kj3_name?.trim() ||\n item.dp_name?.trim() ||\n undefined;\n return {\n id: item._id,\n cid: item.catalogid || cid,\n name: item._name.trim(),\n showName: item.i_showname.trim(),\n unit: item.du_name && item.du_name !== '无' ? item.du_name.trim() : undefined,\n measure,\n startDate: item.daterange_sdate ?? undefined,\n endDate: item.daterange_edate ?? undefined,\n note: item.i_annotation ?? undefined,\n };\n}\n\nfunction mapSeries(periods: NbsDataPeriod[]): SeriesPeriod[] {\n return periods.map((period) => ({\n code: period.code,\n name: period.name,\n values: period.values.map((value) => ({\n id: value._id,\n name: value._name,\n showName: value.i_showname,\n unit: value.du_name && value.du_name !== '无' ? value.du_name : undefined,\n value: value.value,\n region: value.da,\n regionName: value.da_name,\n })),\n }));\n}\n\n/** Default provider backed by data.stats.gov.cn. */\nexport class NbsProviderImpl implements NbsProvider {\n private readonly client: NbsClient;\n\n constructor(client: NbsClient) {\n this.client = client;\n }\n\n async search(params: SearchParams): Promise<SearchResult> {\n const code = params.code ?? (params.period ? PERIOD_CODE[params.period] : '');\n const page = params.page ?? 1;\n const pageSize = params.pageSize ?? 50;\n const cacheKey = `search:${code}:${page}:${pageSize}:${params.keyword}`;\n const data = await this.client.request<NbsSearchData>('/query', {\n query: {\n search: params.keyword,\n pagenum: page,\n pageSize,\n code,\n },\n cacheKey,\n cacheTtlMs: TTL.search,\n noCache: params.noCache,\n signal: params.signal,\n });\n return {\n records: (data.data ?? []).map(mapSearchItem),\n count: data.count ?? 0,\n };\n }\n\n async getTree(params: TreeParams): Promise<TreeRecord[]> {\n const cacheKey = `tree:${params.code}:${params.pid ?? ''}`;\n const data = await this.client.request<NbsTreeItem[]>('/new/queryIndexTreeAsync', {\n query: {\n pid: params.pid ?? '',\n code: params.code,\n },\n cacheKey,\n cacheTtlMs: TTL.tree,\n noCache: params.noCache,\n signal: params.signal,\n });\n return (data ?? []).map(mapTreeItem);\n }\n\n async getIndicators(params: IndicatorParams): Promise<IndicatorRecord[]> {\n const cacheKey = `indicators:${params.cid}`;\n const data = await this.client.request<{ total: number; list: NbsIndicatorItem[] }>(\n '/new/queryIndicatorsByCid',\n {\n query: {\n cid: params.cid,\n dt: '',\n name: '',\n },\n cacheKey,\n cacheTtlMs: TTL.indicators,\n noCache: params.noCache,\n signal: params.signal,\n },\n );\n return (data.list ?? []).map((item) => mapIndicator(item, params.cid));\n }\n\n async getSeries(params: SeriesParams): Promise<SeriesPeriod[]> {\n const cacheKey = `series:${params.cid}:${params.indicId}:${params.dts}:${params.region.value}`;\n const data = await this.client.request<NbsDataPeriod[]>('/stream/esData', {\n method: 'POST',\n body: {\n cid: params.cid,\n indicatorIds: [params.indicId],\n daCatalogId: '',\n das: [{ text: params.region.text, value: params.region.value }],\n showType: '1',\n dts: [params.dts],\n rootId: ROOT_ID,\n },\n cacheKey,\n cacheTtlMs: TTL.series,\n noCache: params.noCache,\n signal: params.signal,\n });\n return mapSeries(data ?? []);\n }\n\n async getProvinces(signal?: AbortSignal): Promise<ProvinceRecord[]> {\n return this.client.request<ProvinceRecord[]>('/getAllProvince', {\n cacheKey: 'provinces',\n cacheTtlMs: TTL.provinces,\n signal,\n });\n }\n}\n\nexport { PERIOD_CODE, ROOT_ID };\n","import { TtlCache } from './cache.js';\nimport { fetchCatalog } from './catalog.js';\nimport { NbsClient, type NbsClientOptions } from './client.js';\nimport { compareRegions } from './compare.js';\nimport { invalidArgument, NbsError, timeoutError, toQueryError } from './errors.js';\nimport { render } from './format.js';\nimport { NbsProviderImpl } from './nbs-provider.js';\nimport type { NbsProvider } from './provider.js';\nimport { RateLimiter } from './rate-limiter.js';\nimport {\n inferRegionFromText,\n NATIONAL_REGION,\n regionSuggestions,\n resolveRegion,\n} from './regions.js';\nimport { inferPeriod, type ResolveOutcome, resolveIndicator } from './resolver.js';\nimport { fetchSeries } from './series.js';\nimport type {\n Action,\n IndicatorCandidate,\n IndicatorMeta,\n Period,\n QueryOptions,\n QueryResult,\n ResolvedIndicator,\n SourceMeta,\n} from './types.js';\n\nconst SOURCE_NAME = '国家统计局' as const;\nconst SOURCE_URL = 'https://data.stats.gov.cn/' as const;\n\n// Shared across query() calls so cache and serialized rate limiting actually\n// apply to a long-lived process (qbot, CLI server, etc.).\nconst SHARED_CACHE = new TtlCache({ maxEntries: 200 });\nconst SHARED_LIMITER = new RateLimiter({ minIntervalMs: 2_000, jitterMs: 250 });\n\nfunction sourceNow(): SourceMeta {\n return {\n name: SOURCE_NAME,\n url: SOURCE_URL,\n retrievedAt: new Date().toISOString(),\n };\n}\n\nfunction indicatorMeta(indicator: ResolvedIndicator): IndicatorMeta {\n return {\n id: `${indicator.cid}:${indicator.indicId}`,\n name: indicator.name,\n displayName: indicator.displayName,\n unit: indicator.unit,\n frequency: indicator.frequency,\n region: indicator.region,\n measure: indicator.measure,\n note: indicator.note,\n };\n}\n\nfunction ambiguousResult(\n action: Action,\n source: SourceMeta,\n candidates: IndicatorCandidate[],\n): QueryResult {\n return {\n ok: false,\n action,\n source,\n candidates,\n error: {\n code: 'AMBIGUOUS',\n message: '找到多个可能的指标,无法确定要查哪一个',\n retryable: false,\n hint: '请从 candidates 中选择一个,把它的 id 作为 indicatorId 再查;CLI 可用 --select <序号> 或 --json 查看 id。',\n },\n };\n}\n\nfunction notFoundResult(\n action: Action,\n source: SourceMeta,\n query: string,\n suggestions: string[],\n): QueryResult {\n return {\n ok: false,\n action,\n source,\n error: {\n code: 'NOT_FOUND',\n message: `没有找到与“${query}”匹配的指标`,\n retryable: false,\n hint: `换一个更具体的指标名,或试试:${suggestions.slice(0, 6).join('、')}`,\n details: { suggestions },\n },\n };\n}\n\nfunction resolutionResult(\n action: Action,\n source: SourceMeta,\n query: string,\n resolution: ResolveOutcome,\n): QueryResult | undefined {\n if (resolution.kind === 'ambiguous')\n return ambiguousResult(action, source, resolution.candidates);\n if (resolution.kind === 'notFound') {\n return notFoundResult(action, source, query, resolution.suggestions);\n }\n return undefined;\n}\n\nasync function dispatch(\n provider: NbsProvider,\n options: QueryOptions,\n action: Action,\n source: SourceMeta,\n): Promise<QueryResult> {\n if (action === 'catalog') {\n const catalog = await fetchCatalog(\n provider,\n options,\n options.code ?? '3',\n options.pid ?? '',\n options.depth ?? 1,\n );\n return {\n ok: true,\n action,\n source,\n nodes: catalog.nodes,\n ...(catalog.notes.length > 0 ? { notes: catalog.notes } : {}),\n };\n }\n\n const query = options.query?.trim();\n if (!query) {\n throw invalidArgument('缺少 query 参数', '示例:query({ query: \"GDP\", action: \"series\" })');\n }\n\n const region = options.region\n ? resolveRegion(options.region)\n : (inferRegionFromText(options.query) ?? NATIONAL_REGION);\n if (!region) {\n throw invalidArgument(\n `无法识别地区:${options.region ?? ''}`,\n `可用地区包括:${regionSuggestions(options.region ?? '').join('、') || '全国、广东、江苏、浙江'}`,\n );\n }\n\n const period: Period = inferPeriod(options);\n\n if (action === 'compare') {\n const compared = await compareRegions(provider, options, period);\n const early = resolutionResult(action, source, query, compared.resolution);\n if (early) return early;\n if (!compared.result) {\n throw new NbsError('UPSTREAM_ERROR', 'compare 没有返回结果', { retryable: true });\n }\n return {\n ok: true,\n action,\n source,\n indicator: indicatorMeta(compared.result.indicator),\n series: compared.result.series,\n ...(compared.result.notes.length > 0 ? { notes: compared.result.notes } : {}),\n ...(compared.result.partial ? { partial: true } : {}),\n };\n }\n\n const resolution = await resolveIndicator(provider, options, period, region);\n const early = resolutionResult(action, source, query, resolution);\n if (early) return early;\n if (resolution.kind !== 'resolved') {\n throw new NbsError('UPSTREAM_ERROR', '指标解析失败', { retryable: true });\n }\n\n const indicator = resolution.indicator;\n const notes: string[] = [];\n if (indicator.note) notes.push(indicator.note);\n\n if (action === 'search') {\n const limit = Math.max(1, Math.min(50, Math.floor(options.limit ?? 5)));\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: Math.min(50, limit + 3),\n signal: options.signal,\n noCache: options.noCache,\n });\n const nonNull = result.points.filter((point) => point.value !== null);\n const points = nonNull.length > 0 ? nonNull.slice(-limit) : result.points.slice(-limit);\n notes.push(\n ...result.notes.filter(\n (note) => !note.startsWith('数据点较多') && !note.startsWith('末尾尚未发布'),\n ),\n );\n return {\n ok: true,\n action,\n source: sourceNow(),\n indicator: indicatorMeta(indicator),\n points,\n ...(notes.length > 0 ? { notes } : {}),\n ...(result.partial ? { partial: true } : {}),\n };\n }\n\n if (action === 'series') {\n const result = await fetchSeries(provider, indicator, period, {\n start: options.start,\n end: options.end,\n maxPoints: options.maxPoints,\n signal: options.signal,\n noCache: options.noCache,\n });\n notes.push(...result.notes);\n return {\n ok: true,\n action,\n source: sourceNow(),\n indicator: indicatorMeta(indicator),\n points: result.points,\n ...(notes.length > 0 ? { notes } : {}),\n ...(result.partial ? { partial: true } : {}),\n };\n }\n\n throw new NbsError('UNSUPPORTED_ACTION', `不支持的操作:${action}`, {\n retryable: false,\n hint: '可用 action:search、series、compare、catalog。',\n });\n}\n\n/** Create a default client/provider pair. */\nexport function createClient(options: NbsClientOptions = {}): NbsClient {\n return new NbsClient(options);\n}\n\n/** Run a query against an explicit provider (useful for tests and adapters). */\nexport async function queryWithProvider(\n provider: NbsProvider,\n options: QueryOptions = {},\n source: SourceMeta = sourceNow(),\n): Promise<QueryResult> {\n const action = options.action ?? 'search';\n try {\n return await dispatch(provider, options, action, source);\n } catch (error) {\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(error),\n };\n }\n}\n\n/**\n * Query China's National Bureau of Statistics data release database.\n *\n * The return value is always structured. Use `render(result, 'text' | 'table')`\n * for CLI/chat display.\n */\nexport async function query(options: QueryOptions = {}): Promise<QueryResult> {\n const action = options.action ?? 'search';\n const totalTimeoutMs = Math.max(1_000, options.totalTimeoutMs ?? 45_000);\n const controller = new AbortController();\n let totalTimedOut = false;\n\n const onAbort = () => controller.abort(options.signal?.reason);\n if (options.signal) {\n if (options.signal.aborted) controller.abort(options.signal.reason);\n else options.signal.addEventListener('abort', onAbort, { once: true });\n }\n\n const timer = setTimeout(() => {\n totalTimedOut = true;\n controller.abort(new DOMException('Total query timeout', 'TimeoutError'));\n }, totalTimeoutMs);\n\n const client = createClient({\n timeoutMs: options.timeoutMs,\n cache: SHARED_CACHE,\n limiter: SHARED_LIMITER,\n fetchImpl: options.fetchImpl,\n dispatcher: options.dispatcher,\n logger: options.debug\n ? (options.logger ?? ((message, detail) => console.error(message, detail)))\n : undefined,\n });\n const provider = new NbsProviderImpl(client);\n\n try {\n return await dispatch(provider, { ...options, signal: controller.signal }, action, sourceNow());\n } catch (error) {\n if (totalTimedOut) {\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(timeoutError(totalTimeoutMs)),\n };\n }\n return {\n ok: false,\n action,\n source: sourceNow(),\n error: toQueryError(error),\n };\n } finally {\n clearTimeout(timer);\n options.signal?.removeEventListener('abort', onAbort);\n }\n}\n\nexport { TtlCache } from './cache.js';\nexport type { CircuitBreakerOptions, NbsClientOptions } from './client.js';\nexport { NbsClient } from './client.js';\nexport { isNbsError, NbsError } from './errors.js';\nexport { NbsProviderImpl } from './nbs-provider.js';\nexport { RateLimiter } from './rate-limiter.js';\nexport { NATIONAL_REGION, PROVINCES, resolveRegion } from './regions.js';\nexport { inferPeriod } from './resolver.js';\nexport type {\n Action,\n CatalogNode,\n CompareSeries,\n DataPoint,\n ErrorCode,\n Format,\n IndicatorCandidate,\n IndicatorMeta,\n Period,\n QueryError,\n QueryOptions,\n QueryResult,\n SourceMeta,\n} from './types.js';\nexport { render };\n","#!/usr/bin/env node\nimport { pathToFileURL } from 'node:url';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { query as defaultQuery } from './index.js';\nimport type { QueryOptions, QueryResult } from './types.js';\n\nconst VERSION = '0.4.0';\n\nexport type QueryFn = (options: QueryOptions) => Promise<QueryResult>;\n\nconst region = z.string().optional().describe('地区名称,如 全国、广东、广州;默认全国');\nconst period = z\n .enum(['year', 'quarter', 'month'])\n .optional()\n .describe('数据频率;不填则根据 start/end/关键词推断');\nconst start = z\n .union([z.string(), z.number()])\n .optional()\n .describe('起始时间,如 2015、2025Q1、2025-01');\nconst end = z\n .union([z.string(), z.number()])\n .optional()\n .describe('结束时间,如 2025、2025Q4、2025-10');\nconst indicatorId = z\n .string()\n .optional()\n .describe('候选指标的 cid:indicId,用于 AMBIGUOUS 后的精确回查');\n\nfunction toolResult(result: QueryResult) {\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n isError: !result.ok,\n };\n}\n\n/** Create the MCP server without connecting a transport (useful for tests). */\nexport function createMcpServer(queryFn: QueryFn = defaultQuery): McpServer {\n const server = new McpServer(\n { name: 'china-nbs', version: VERSION },\n {\n instructions:\n '查询中国国家统计局数据发布库。优先用 nbs_series 取时间序列,nbs_search 取最新值。' +\n '如果返回 AMBIGUOUS,把 candidates 展示给用户,选定后用 indicatorId 再查。' +\n '不要编造数值;所有结果都带 source.retrievedAt,引用时注明查询时间。',\n },\n );\n\n server.registerTool(\n 'nbs_search',\n {\n title: '搜索国家统计局指标并返回最新数据',\n description:\n '按关键词搜索指标,返回解析后的指标信息与最近几个数据点。适合回答“最新值是多少”。',\n inputSchema: {\n query: z.string().describe('指标关键词,如 GDP、CPI、广东 GDP、快递业务量'),\n region,\n period,\n limit: z.number().int().min(1).max(50).optional().describe('返回的最新数据点数量,默认 5'),\n },\n },\n async ({ query, region, period, limit }) =>\n toolResult(await queryFn({ action: 'search', query, region, period, limit })),\n );\n\n server.registerTool(\n 'nbs_series',\n {\n title: '查询国家统计局指标时间序列',\n description:\n '按关键词查询一个指标的时间序列,支持全国/分省/主要城市与年/季/月频率。适合趋势、同比、历史对比。',\n inputSchema: {\n query: z.string().describe('指标关键词,如 GDP、CPI、广东 GDP'),\n region,\n period,\n start,\n end,\n maxPoints: z.number().int().min(1).max(1000).optional().describe('最大数据点,默认 240'),\n indicatorId,\n },\n },\n async ({ query, region, period, start, end, maxPoints, indicatorId }) =>\n toolResult(\n await queryFn({\n action: 'series',\n query,\n region,\n period,\n start,\n end,\n maxPoints,\n indicatorId,\n }),\n ),\n );\n\n server.registerTool(\n 'nbs_compare',\n {\n title: '对比多个地区的同一指标',\n description:\n '比较一个指标在多个地区的序列。只支持单指标多地区;多指标请分多次调用。最多 8 个地区。',\n inputSchema: {\n query: z.string().describe('指标关键词,如 GDP、CPI'),\n regions: z.array(z.string()).min(1).max(8).describe('地区列表,如 [\"广东\",\"江苏\",\"浙江\"]'),\n period,\n start,\n end,\n maxPoints: z.number().int().min(1).max(1000).optional().describe('每个地区最大数据点'),\n indicatorId,\n },\n },\n async ({ query, regions, period, start, end, maxPoints, indicatorId }) =>\n toolResult(\n await queryFn({\n action: 'compare',\n query,\n regions,\n period,\n start,\n end,\n maxPoints,\n indicatorId,\n }),\n ),\n );\n\n server.registerTool(\n 'nbs_catalog',\n {\n title: '浏览国家统计局分类树',\n description:\n '展开分类树节点,用于发现指标所在分类。code:1 全国月、2 全国季、3 全国年、4 分省月、5 分省季、6 分省年、7 城市月价、8 城市年、9 港澳台月。',\n inputSchema: {\n code: z.string().optional().describe('分类 code,默认 3(全国年度)'),\n pid: z.string().optional().describe('父节点 id;空表示根节点'),\n depth: z.number().int().min(1).max(3).optional().describe('展开深度,默认 1'),\n },\n },\n async ({ code, pid, depth }) =>\n toolResult(await queryFn({ action: 'catalog', code, pid, depth })),\n );\n\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n process.stderr.write(`china-nbs MCP server ${VERSION} running on stdio\\n`);\n}\n\nconst isMain =\n process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;\nif (isMain) {\n startMcpServer().catch((error) => {\n process.stderr.write(\n `${error instanceof Error ? (error.stack ?? error.message) : String(error)}\\n`,\n );\n process.exitCode = 1;\n });\n}\n","#!/usr/bin/env node\nimport { pathToFileURL } from 'node:url';\nimport { query, render } from './index.js';\nimport type { Format, QueryOptions, QueryResult } from './types.js';\n\nconst VERSION = '0.4.0';\n\nconst HELP = `china-nbs ${VERSION}\n用一句关键词查询国家统计局官方数据。\n\n用法:\n china-nbs search <指标> [选项]\n china-nbs series <指标> [选项]\n china-nbs compare <指标> --regions 广东,江苏,浙江 [选项]\n china-nbs catalog [选项]\n china-nbs mcp\n\n示例:\n china-nbs search GDP --period year --region 全国\n china-nbs series GDP --start 2015 --end 2025\n china-nbs series GDP --period quarter --region 广东 --start 2025Q1 --end 2026Q3\n china-nbs series CPI --start 2025-01 --end 2025-10\n china-nbs series CPI --period month --region 广东 --start 2025-01 --end 2025-10\n china-nbs compare GDP --regions 广东,江苏,浙江 --year 2025\n china-nbs compare GDP --regions 广东,江苏,浙江 --period quarter --start 2025Q1 --end 2025Q4\n china-nbs catalog --code 3 --depth 2\n china-nbs mcp\n china-nbs search CPI --json\n\n选项:\n --period <year|quarter|month> 频率;不填则按 start/end/关键词推断\n --region <地区> 单个地区,默认全国\n --regions <a,b,c> compare 用,逗号分隔\n --start <时间> 起始时间,如 2015、2025Q1、2025-01\n --end <时间> 结束时间\n --year <年份> compare 用,等价于 --start/--end 同一年\n --limit <n> search 返回的最新数据点数量,默认 5\n --max-points <n> series 最大数据点,默认 240\n --select <id|序号> 从歧义候选中选择;序号从 1 开始\n --code <1-9> catalog 分类:1 全国月、2 全国季、3 全国年、4 分省月、5 分省季、6 分省年、7 城市月价、8 城市年、9 港澳台月;默认 3\n --pid <节点id> catalog 父节点\n --depth <1|2|3> catalog 展开深度,默认 1\n --json 输出 JSON\n --table 输出表格\n --no-cache 跳过本次缓存\n --debug 输出请求日志到 stderr\n --timeout <ms> 单请求超时,默认 20000\n --total-timeout <ms> 整次查询超时,默认 45000\n --proxy <url> 使用 HTTP(S) 代理;需要额外安装 undici\n -h, --help 显示帮助\n -v, --version 显示版本\n\n退出码:0 成功,1 参数错误,2 未找到,3 上游错误,4 歧义。\n`;\n\ninterface ParsedCli {\n command: string;\n query: string;\n options: QueryOptions;\n format: Format;\n select?: string;\n proxy?: string;\n}\n\nfunction parseInteger(value: string | undefined, name: string): number | undefined {\n if (value === undefined) return undefined;\n const number = Number(value);\n if (!Number.isFinite(number) || !Number.isInteger(number)) {\n throw new Error(`${name} 需要整数,收到:${value}`);\n }\n return number;\n}\n\nfunction parseArgs(argv: string[]): ParsedCli | { help: true } | { version: true } {\n if (argv.length === 0 || argv.includes('--help') || argv.includes('-h')) return { help: true };\n if (argv.includes('--version') || argv.includes('-v')) return { version: true };\n\n const command = argv[0];\n if (!command) return { help: true };\n const known = new Set(['search', 'series', 'compare', 'catalog', 'mcp']);\n if (!known.has(command)) {\n throw new Error(`未知命令:${command}`);\n }\n\n const options: QueryOptions = { action: command as QueryOptions['action'] };\n const positional: string[] = [];\n let format: Format = 'text';\n let select: string | undefined;\n let proxy: string | undefined;\n\n for (let index = 1; index < argv.length; index += 1) {\n const arg = argv[index];\n if (!arg) continue;\n if (!arg.startsWith('-')) {\n positional.push(arg);\n continue;\n }\n\n const next = (): string | undefined => {\n index += 1;\n return argv[index];\n };\n\n switch (arg) {\n case '--period': {\n const value = next();\n if (value !== 'year' && value !== 'quarter' && value !== 'month') {\n throw new Error('--period 只支持 year、quarter、month');\n }\n options.period = value;\n break;\n }\n case '--region':\n options.region = next();\n break;\n case '--regions':\n options.regions = (next() ?? '')\n .split(/[,,]/)\n .map((item) => item.trim())\n .filter(Boolean);\n break;\n case '--start':\n options.start = next();\n break;\n case '--end':\n options.end = next();\n break;\n case '--year': {\n const value = next();\n options.start = value;\n options.end = value;\n break;\n }\n case '--limit':\n options.limit = parseInteger(next(), '--limit');\n break;\n case '--max-points':\n options.maxPoints = parseInteger(next(), '--max-points');\n break;\n case '--select':\n select = next();\n break;\n case '--code':\n options.code = next();\n break;\n case '--pid':\n options.pid = next();\n break;\n case '--depth':\n options.depth = parseInteger(next(), '--depth');\n break;\n case '--timeout':\n options.timeoutMs = parseInteger(next(), '--timeout');\n break;\n case '--total-timeout':\n options.totalTimeoutMs = parseInteger(next(), '--total-timeout');\n break;\n case '--proxy':\n proxy = next();\n break;\n case '--json':\n format = 'json';\n break;\n case '--table':\n format = 'table';\n break;\n case '--text':\n format = 'text';\n break;\n case '--no-cache':\n options.noCache = true;\n break;\n case '--debug':\n options.debug = true;\n break;\n default:\n throw new Error(`未知选项:${arg}`);\n }\n }\n\n const queryText = positional.join(' ').trim();\n if (command !== 'catalog' && command !== 'mcp' && !queryText) {\n throw new Error(`${command} 需要一个指标关键词,例如 GDP、CPI、广东 GDP`);\n }\n\n return {\n command,\n query: queryText,\n options: { ...options, query: queryText || undefined },\n format,\n select,\n ...(proxy === undefined ? {} : { proxy }),\n };\n}\n\nasync function loadProxyDispatcher(proxyUrl: string): Promise<unknown> {\n try {\n const undici = (await import('undici')) as { ProxyAgent: new (url: string) => unknown };\n return new undici.ProxyAgent(proxyUrl);\n } catch (error) {\n throw new Error('使用 --proxy 需要先安装 undici:npm install -g undici(或安装到当前项目)', {\n cause: error,\n });\n }\n}\n\nfunction exitCode(result: QueryResult): number {\n if (result.ok) return 0;\n switch (result.error?.code) {\n case 'INVALID_ARGUMENT':\n case 'INVALID_RANGE':\n case 'UNSUPPORTED_ACTION':\n return 1;\n case 'NOT_FOUND':\n return 2;\n case 'AMBIGUOUS':\n return 4;\n default:\n return 3;\n }\n}\n\nasync function runQuery(parsed: ParsedCli): Promise<QueryResult> {\n if (!parsed.select) return query(parsed.options);\n\n const first = await query(parsed.options);\n if (parsed.select.includes(':')) {\n return query({ ...parsed.options, indicatorId: parsed.select });\n }\n\n const index = Number(parsed.select);\n if (!Number.isInteger(index) || index < 1) {\n throw new Error('--select 需要候选序号(从 1 开始)或 candidate id');\n }\n const candidate = first.candidates?.[index - 1];\n if (!candidate) {\n return first;\n }\n return query({ ...parsed.options, indicatorId: candidate.id });\n}\n\n/** CLI entry point; exported for tests. */\nexport async function run(argv: string[]): Promise<number> {\n let parsed: ParsedCli;\n try {\n const result = parseArgs(argv);\n if ('help' in result) {\n process.stdout.write(HELP);\n return 0;\n }\n if ('version' in result) {\n process.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n parsed = result;\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n\\n${HELP}`);\n return 1;\n }\n\n if (parsed.command === 'mcp') {\n try {\n const { startMcpServer } = await import('./mcp.js');\n await startMcpServer();\n return 0;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ERR_MODULE_NOT_FOUND') {\n process.stderr.write('MCP 依赖未安装。请运行:npm install @modelcontextprotocol/sdk zod\\n');\n return 1;\n }\n throw error;\n }\n }\n\n if (parsed.proxy) {\n try {\n parsed.options.dispatcher = await loadProxyDispatcher(parsed.proxy);\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n }\n\n try {\n const result = await runQuery(parsed);\n process.stdout.write(`${render(result, parsed.format)}\\n`);\n return exitCode(result);\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n}\n\nconst isMain =\n process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;\nif (isMain) {\n run(process.argv.slice(2))\n .then((code) => {\n process.exitCode = code;\n })\n .catch((error) => {\n process.stderr.write(\n `${error instanceof Error ? (error.stack ?? error.message) : String(error)}\\n`,\n );\n process.exitCode = 1;\n });\n}\n"]}