{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../packages/domain/shared/src/trace.ts","../packages/domain/shared/src/index.ts","../src/umbrella/devtools.ts","../packages/infrastructure/devtools/src/index.tsx","../packages/infrastructure/devtools/src/classInspector.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * Shared trace utilities for CLI, devtools, and dashboard\n * \n * Provides reusable trace snapshot handling, formatting, and analysis\n * across the tailwind-styled-v4 ecosystem without introducing coupling.\n */\n\nexport interface TraceSnapshot {\n  generatedAt: string\n  buildMs: number | null\n  scanMs: number | null\n  analyzeMs: number | null\n  compileMs: number | null\n  memoryMb: { rss: number; heapUsed: number; heapTotal: number } | null\n  classCount: number | null\n  fileCount: number | null\n  cssBytes: number | null\n  mode: string | null\n  eventsReceived?: number\n  eventsProcessed?: number\n  batchesProcessed?: number\n  incrementalUpdates?: number\n  fullRescans?: number\n}\n\nexport interface TraceSummary {\n  workspace: {\n    totalPackages: number\n    totalFiles: number\n    totalClasses: number\n    lastScanDurationMs: number\n    lastBuildDurationMs: number\n  }\n  cache: {\n    hitRate: number\n    totalEntries: number\n    memoryUsageMb: number\n  }\n  pipeline: {\n    scanDurationMs: number\n    analyzeDurationMs: number\n    compileDurationMs: number\n    totalDurationMs: number\n  }\n  health: {\n    status: \"healthy\" | \"degraded\" | \"unhealthy\"\n    issues: Array<{ severity: string; message: string }>\n  }\n}\n\n/**\n * Get health status color for UI rendering\n */\nexport function getHealthColor(status?: string): string {\n  switch (status) {\n    case \"healthy\":\n      return \"#34d399\"\n    case \"degraded\":\n      return \"#fbbf24\"\n    case \"unhealthy\":\n      return \"#f87171\"\n    default:\n      return \"#52525b\"\n  }\n}\n\n/**\n * Get mode color for UI rendering\n */\nexport function getModeColor(mode?: string | null): string {\n  switch (mode) {\n    case \"build\":\n      return \"#fbbf24\"\n    case \"watch\":\n      return \"#34d399\"\n    case \"jit\":\n      return \"#60a5fa\"\n    case \"error\":\n      return \"#f87171\"\n    case \"idle\":\n      return \"#71717a\"\n    default:\n      return \"#52525b\"\n  }\n}\n\n/**\n * Format memory in human-readable format\n */\nexport function formatMemory(bytes: number): string {\n  if (bytes < 1024) return `${Math.round(bytes)}B`\n  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\n  return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\n}\n\n/**\n * Format duration in human-readable format\n */\nexport function formatDuration(ms: number | null): string {\n  if (ms === null) return \"—\"\n  if (ms < 1000) return `${ms}ms`\n  return `${(ms / 1000).toFixed(1)}s`\n}\n\n/**\n * Calculate health status from metrics\n */\nexport function calculateHealth(\n  metrics: TraceSnapshot,\n  summary?: TraceSummary\n): \"healthy\" | \"degraded\" | \"unhealthy\" {\n  if (summary?.health?.status) return summary.health.status\n\n  // Fallback to simple heuristics\n  if (metrics.mode === \"error\") return \"unhealthy\"\n  if ((metrics.buildMs ?? 0) > 5000) return \"degraded\"\n  if (metrics.memoryMb && metrics.memoryMb.heapUsed > 500) return \"degraded\"\n  return \"healthy\"\n}\n\n/**\n * Get color for build time indicator\n */\nexport function getBuildTimeColor(ms: number | null): string {\n  if (ms === null) return \"#52525b\"\n  if (ms > 1000) return \"#f87171\" // red - very slow\n  if (ms > 500) return \"#fbbf24\" // amber - acceptable\n  return \"#34d399\" // green - fast\n}\n\n/**\n * Get color for memory usage indicator\n */\nexport function getMemoryColor(mb: number): string {\n  if (mb > 500) return \"#f87171\" // red - high\n  if (mb > 250) return \"#fbbf24\" // amber - moderate\n  return \"#34d399\" // green - low\n}\n\n/**\n * Create trace snapshot from dashboard data\n */\nexport function createTraceSnapshot(data: Record<string, unknown>): TraceSnapshot {\n  return {\n    generatedAt: (data.generatedAt as string) || new Date().toISOString(),\n    buildMs: (data.buildMs as number) ?? null,\n    scanMs: (data.scanMs as number) ?? null,\n    analyzeMs: (data.analyzeMs as number) ?? null,\n    compileMs: (data.compileMs as number) ?? null,\n    memoryMb: (data.memoryMb as { rss: number; heapUsed: number; heapTotal: number } | null) ?? null,\n    classCount: (data.classCount as number) ?? null,\n    fileCount: (data.fileCount as number) ?? null,\n    cssBytes: (data.cssBytes as number) ?? null,\n    mode: (data.mode as string) ?? null,\n    eventsReceived: (data.eventsReceived as number | undefined) ?? undefined,\n    eventsProcessed: (data.eventsProcessed as number | undefined) ?? undefined,\n    batchesProcessed: (data.batchesProcessed as number | undefined) ?? undefined,\n    incrementalUpdates: (data.incrementalUpdates as number | undefined) ?? undefined,\n    fullRescans: (data.fullRescans as number | undefined) ?? undefined,\n  }\n}\n\n/**\n * Calculate pipeline time distribution\n */\nexport function getPipelinePercentages(metrics: TraceSnapshot): {\n  scanPct: number\n  analyzePct: number\n  compilePct: number\n} {\n  const scan = metrics.scanMs ?? 0\n  const analyze = metrics.analyzeMs ?? 0\n  const compile = metrics.compileMs ?? 0\n  const total = scan + analyze + compile\n\n  if (total === 0) {\n    return { scanPct: 0, analyzePct: 0, compilePct: 0 }\n  }\n\n  return {\n    scanPct: (scan / total) * 100,\n    analyzePct: (analyze / total) * 100,\n    compilePct: (compile / total) * 100,\n  }\n}\n","import { createHash } from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { createRequire } from \"node:module\"\n\n// Native-only: Node.js is always available. No browser fallback.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type TokenMap = Record<string, string>\n\nexport type VariantValue = string | number | boolean | undefined\n\nexport type VariantProps = Record<string, VariantValue>\n\nexport type HtmlTagName = keyof HTMLElementTagNameMap\n\nexport type CompoundCondition = Record<string, string | number | boolean>\n\nexport type VariantMatrix = Record<string, Array<string | number | boolean>>\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface Logger {\n  warn(...args: unknown[]): void\n  debug(...args: unknown[]): void\n  error(...args: unknown[]): void\n  log(...args: unknown[]): void\n}\n\nexport function createLogger(namespace: string): Logger {\n  const prefix = `[${namespace}]`\n  return {\n    warn(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    debug(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    error(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n    log(...args: unknown[]) {\n      process.stderr.write(`${prefix} ${args.map(a => typeof a === \"string\" ? a : String(a)).join(\" \")}\\n`)\n    },\n  }\n}\n\nexport function createDebugLogger(namespace: string, label?: string): (msg: string) => void {\n  const prefix = label ? `[${namespace}:${label}]` : `[${namespace}]`\n  return (msg: string) => {\n    if (process.env.DEBUG?.includes(namespace) || process.env.TW_DEBUG) {\n      console.debug(prefix, msg)\n    }\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error handling\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ErrorSource = \"rust\" | \"validation\" | \"compile\" | \"io\" | \"config\" | \"unknown\"\n\ntype ZodLikeIssue = {\n  path?: readonly PropertyKey[]\n  message?: string\n}\n\nfunction formatIssuePath(path?: readonly PropertyKey[]): string {\n  if (!path || path.length === 0) return \"(root)\"\n  return path\n    .map((segment) =>\n      typeof segment === \"symbol\" ? segment.description ?? segment.toString() : String(segment)\n    )\n    .join(\".\")\n}\n\nexport class TwError extends Error {\n  /** @deprecated Gunakan source */\n  public readonly domain: string\n  public readonly source: ErrorSource\n  public readonly code: string\n  public readonly originalCause?: unknown\n\n  constructor(domainOrSource: string, code: string, message: string, cause?: unknown) {\n    super(message)\n    this.name = \"TwError\"\n    this.domain = domainOrSource\n    this.source = domainOrSource as ErrorSource\n    this.code = code\n    this.originalCause = cause\n    if (Error.captureStackTrace) Error.captureStackTrace(this, TwError)\n  }\n\n  static fromIo(code: string, message: string): TwError {\n    return new TwError(\"io\", code, message)\n  }\n\n  static fromCompile(code: string, message: string): TwError {\n    return new TwError(\"compile\", code, message)\n  }\n\n  static fromRust(err: { code?: string; message?: string } | Error | unknown): TwError {\n    if (err instanceof TwError) return err\n    if (err instanceof Error) return new TwError(\"rust\", \"RUST_ERROR\", err.message, err)\n    if (err && typeof err === \"object\") {\n      const e = err as { code?: string; message?: string }\n      return new TwError(\"rust\", e.code ?? \"RUST_ERROR\", e.message ?? String(err), err)\n    }\n    return new TwError(\"rust\", \"RUST_ERROR\", String(err), err)\n  }\n\n  /** Buat TwError dari ZodError — dukung shape Zod v3 (`errors`) dan v4 (`issues`). */\n  static fromZod(err: { issues?: ZodLikeIssue[]; errors?: ZodLikeIssue[] }): TwError {\n    const first = err.issues?.[0] ?? err.errors?.[0]\n    const path = formatIssuePath(first?.path)\n    const message = first ? `${path}: ${first.message}` : \"Schema validation failed\"\n    return new TwError(\"validation\", \"SCHEMA_VALIDATION_FAILED\", message, err)\n  }\n\n  static wrap(source: string, code: string, err: unknown): TwError {\n    if (err instanceof TwError) return err\n    if (err instanceof Error) return new TwError(source, code, err.message, err)\n    return new TwError(source, code, String(err), err)\n  }\n\n  override toString(): string {\n    return `TwError [${this.source}:${this.code}] ${this.message}`\n  }\n\n  toJSON(): { name: string; source: string; code: string; message: string } {\n    return { name: this.name, source: this.source, code: this.code, message: this.message }\n  }\n\n  toCliMessage(): string {\n    return `[${this.source.toUpperCase()}:${this.code}] ${this.message}`\n  }\n}\n\nexport function wrapUnknownError(domain: string, code: string, error: unknown): TwError {\n  return TwError.wrap(domain, code, error)\n}\n\nexport function isTwError(err: unknown): err is TwError {\n  return err instanceof TwError\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Native binding resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface LoadNativeBindingOptions<T> {\n  runtimeDir: string\n  candidates: string[]\n  isValid: (module: unknown) => module is T\n  invalidExportMessage: string\n}\n\nexport interface LoadNativeBindingResult<T> {\n  binding: T | null\n  loadErrors: Array<{ path: string; message: string }>\n  loadedPath?: string\n}\n\nexport function loadNativeBinding<T>(options: LoadNativeBindingOptions<T>): LoadNativeBindingResult<T> {\n  const { runtimeDir, candidates, isValid } = options\n  const loadErrors: Array<{ path: string; message: string }> = []\n\n  for (const candidate of candidates) {\n    const candidatePath = path.resolve(runtimeDir, candidate)\n    try {\n      if (!fs.existsSync(candidatePath) && !fs.existsSync(candidatePath + \".node\")) {\n        continue\n      }\n      const mod = requireNativeModule(candidatePath)\n      if (mod && isValid(mod)) {\n        return { binding: mod, loadErrors, loadedPath: candidatePath }\n      }\n      loadErrors.push({ path: candidatePath, message: options.invalidExportMessage })\n    } catch (e) {\n      loadErrors.push({ path: candidatePath, message: e instanceof Error ? e.message : String(e) })\n    }\n  }\n\n  return { binding: null, loadErrors }\n}\n\nconst _require = createRequire(\n  typeof __filename !== \"undefined\"\n    ? `file://${__filename}`\n    : (import.meta.url ?? \"file://unknown\")\n)\n\nfunction requireNativeModule(p: string): unknown {\n  return _require(p)\n}\n\nexport interface ResolveCandidatesOptions {\n  runtimeDir?: string\n  envVarNames?: string[]\n  includeDefaultCandidates?: boolean\n  enforceNodeExtensionForEnvPath?: boolean\n  /** @deprecated — ignored, kept for backward compat */\n  packageName?: string\n}\n\nexport function resolveNativeBindingCandidates(options: ResolveCandidatesOptions): string[] {\n  const {\n    envVarNames = [\"TW_NATIVE_PATH\", \"TWS_NATIVE_PATH\"],\n    includeDefaultCandidates = true,\n    enforceNodeExtensionForEnvPath = false,\n  } = options\n  // Default ke cwd kalau runtimeDir tidak disediakan\n  const runtimeDir = options.runtimeDir || process.cwd()\n  const candidates: string[] = []\n\n  for (const envVar of envVarNames) {\n    const envPath = process.env[envVar]\n    if (envPath) {\n      candidates.push(enforceNodeExtensionForEnvPath && !envPath.endsWith(\".node\") ? envPath + \".node\" : envPath)\n    }\n  }\n\n  if (!includeDefaultCandidates) return candidates\n\n  if (fs.existsSync(runtimeDir)) {\n    try {\n      for (const entry of fs.readdirSync(runtimeDir)) {\n        if (entry.endsWith(\".node\")) candidates.push(entry)\n      }\n    } catch { /* ignore read errors */ }\n  }\n\n  const BINARY_NAMES = [\"tailwind-styled-native\", \"tailwind_styled_parser\"]\n  const napiPlatform = process.platform === \"linux\" && process.arch === \"x64\" ? \"linux-x64-gnu\"\n    : process.platform === \"linux\" && process.arch === \"arm64\" ? \"linux-arm64-gnu\"\n      : `${process.platform}-${process.arch}`\n\n  for (const bin of BINARY_NAMES) {\n    candidates.push(path.resolve(runtimeDir, `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, `${bin}.${napiPlatform}.node`))\n    // 1 level: dist/ → package-root/native/ (published npm package)\n    candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n    // cwd fallback (user project root)\n    candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.node`))\n    candidates.push(path.resolve(process.cwd(), \"native\", `${bin}.${napiPlatform}.node`))\n    // 4 level: dist/ → package/ → domain/ → packages/ → repo-root/ (monorepo dev)\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"..\", \"native\", `${bin}.${napiPlatform}.node`))\n    // 3 level fallback\n    candidates.push(path.resolve(runtimeDir, \"..\", \"..\", \"..\", \"native\", `${bin}.node`))\n  }\n\n  return Array.from(new Set(candidates))\n}\n\nexport function resolveRuntimeDir(dir: string | undefined, importMetaUrl: string): string {\n  if (dir) return path.resolve(dir)\n  try {\n    return path.dirname(fileURLToPath(importMetaUrl))\n  } catch {\n    return process.cwd()\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hashing\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function hashContent(content: string, algorithm: string = \"md5\", length?: number): string {\n  const hash = createHash(algorithm).update(content).digest(\"hex\")\n  return length ? hash.slice(0, length) : hash\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error formatting\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatErrorMessage(error: unknown): string {\n  if (error instanceof TwError) return error.toString()\n  if (error instanceof Error) return error.message\n  return String(error)\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// LRU Cache\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class LRUCache<K, V> {\n  private capacity: number\n  private cache: Map<K, V>\n\n  constructor(capacity: number) {\n    this.capacity = capacity\n    this.cache = new Map()\n  }\n\n  get(key: K): V | undefined {\n    if (!this.cache.has(key)) return undefined\n    const value = this.cache.get(key)!\n    this.cache.delete(key)\n    this.cache.set(key, value)\n    return value\n  }\n\n  set(key: K, value: V): void {\n    if (this.cache.has(key)) {\n      this.cache.delete(key)\n    } else if (this.cache.size >= this.capacity) {\n      const firstKey = this.cache.keys().next().value\n      if (firstKey !== undefined) {\n        this.cache.delete(firstKey)\n      }\n    }\n    this.cache.set(key, value)\n  }\n\n  delete(key: K): boolean {\n    return this.cache.delete(key)\n  }\n\n  has(key: K): boolean {\n    return this.cache.has(key)\n  }\n\n  clear(): void {\n    this.cache.clear()\n  }\n\n  entries(): IterableIterator<[K, V]> {\n    return this.cache.entries()\n  }\n\n  get size(): number {\n    return this.cache.size\n  }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Trace Utilities\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TraceSnapshot, TraceSummary } from \"./trace\"\nexport {\n  getHealthColor,\n  getModeColor,\n  formatMemory,\n  formatDuration,\n  calculateHealth,\n  getBuildTimeColor,\n  getMemoryColor,\n  createTraceSnapshot,\n  getPipelinePercentages,\n} from \"./trace\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Performance Telemetry\n// ─────────────────────────────────────────────────────────────────────────────\n\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Error Codes\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { ErrorCode } from \"./error-codes\"\nexport { ERROR_CODES, getSuggestion, formatErrorCode } from \"./error-codes\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tailwind Compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type { TailwindInfo } from \"./compatibility\"\nexport { detectTailwind, assertTailwindV4, getTailwindVersion, isTailwindV4 } from \"./compatibility\"\n\n// ── Native binding schemas (Zod boundary validation)\nexport {\n  NativeScanFileSchema, NativeScanResultSchema,\n  NativeAnalyzerReportSchema, NativeTransformResultSchema,\n  NativeCssCompileResultSchema, NativeWatchResultSchema,\n  NativeCacheEntrySchema, NativeCacheReadResultSchema,\n  safeParseNative, parseNative,\n} from './native-schemas'\n\n// ── ESM-safe runtime helpers ──────────────────────────────────────────────\nexport {\n  createEsmRequire,\n  getDirname,\n  getFilename,\n  resolveFromRoot,\n  tryRequire,\n  resolveNativeNodePath,\n} from \"./esmHelpers\"\n\n// ── Performance telemetry ────────────────────────────────────────────────────\nexport {\n  TelemetryCollector,\n  getGlobalTelemetry,\n  resetGlobalTelemetry,\n  createBuildTimer,\n  type BuildTelemetry,\n  type TelemetrySummary,\n  type BuildPhases,\n} from \"./telemetry\"\n\n// ── Config/JSON schema validation ─────────────────────────────────────────────\nexport {\n  ScanCacheSchema,\n  ScanCacheClassEntrySchema,\n  TailwindConfigSchema,\n  RegistryPluginEntrySchema,\n  RegistryFileSchema,\n  PackageJsonSchema,\n  parseJsonWithSchema,\n  parseJsonFileWithSchema,\n  type ScanCache,\n  type ScanCacheClassEntry,\n  type TailwindConfig,\n  type RegistryPluginEntry,\n  type RegistryFile,\n  type PackageJson,\n} from \"./configSchemas\"\n\n// ── Worker/bootstrap path resolution ─────────────────────────────────────────\nexport {\n  resolveWorkerPath,\n  resolveLoaderPath,\n  type WorkerPathOptions,\n  type WorkerPathResult,\n} from \"./workerResolver\"\n\n// ── Codegen helpers ───────────────────────────────────────────────────────────\nexport {\n  generateComponentCode,\n  generateStorybookStory,\n  generateClassRenameCodemod,\n  generateBarrelFile,\n  type ComponentCodegenOptions,\n} from \"./codegen\"\n\n// ── Native binary resolution (QA #1) ─────────────────────────────────────────\nexport {\n  resolveNativeBinary,\n  formatNativeNotFoundError,\n  type NativeResolutionResult,\n} from \"./native-resolution\"\n\n// ── Shared observability contract ────────────────────────────────────────────\nexport {\n  createObservabilityClient,\n  type ClassInspection,\n  type ClassProperty,\n  type ClassUsageLocation,\n  type BuildTrace,\n  type BuildPhaseTrace,\n  type DashboardMetrics,\n  type DashboardSummary,\n  type ObservabilityClient,\n} from \"./observability\"\n\nexport {\n  TW_STATE_STATIC_FILENAME,\n  extractStaticStateCss,\n  appendStaticStateCssToSafelist,\n  type TwStateConfigEntry,\n  type StaticStateCssInput,\n  type GeneratedStateRule,\n  type StaticStateExtractionResult,\n} from \"./staticStateExtractor\"\nexport { setGlobalLogFile } from \"./logger\"","export * from \"@tailwind-styled/devtools\"\n","/**\n * tailwind-styled-v4 — DevTools v4\n *\n * Panels:\n *   🔍 Inspector  — hover element, see classes + variants\n *   ⚡ State      — list all reactive state components + active states\n *   📦 Container  — list container query components + active breakpoints\n *   🎨 Tokens     — live token editor with instant preview\n *   📊 Analyzer   — duplicate patterns + unused variants (runtime scan)\n *   🔬 Trace      — build timeline, pipeline events, memory profile\n *\n * Keyboard shortcuts:\n *   Ctrl+Shift+D  → toggle devtools\n *   Escape        → close\n *   1-6           → switch panels\n */\n\n\"use client\"\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\nimport {\n  formatMemory,\n  formatDuration,\n  getBuildTimeColor,\n  getModeColor,\n  getHealthColor,\n  getMemoryColor,\n  getPipelinePercentages,\n  type TraceSnapshot,\n  type TraceSummary,\n} from \"@tailwind-styled/shared\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface InspectedElement {\n  componentName: string\n  element: HTMLElement\n  rect: DOMRect\n  twClasses: string[]\n  variantProps: Record<string, string>\n  atomicMap: Record<string, string>\n  rawClassName: string\n  stateNames: string[]\n  activeStates: Record<string, string>\n  containerBps: string[]\n}\n\ntype Panel = \"inspector\" | \"state\" | \"container\" | \"tokens\" | \"analyzer\" | \"trace\"\n\ninterface DevToolsState {\n  open: boolean\n  panel: Panel\n  pinned: boolean\n  inspected: InspectedElement | null\n  position: { x: number; y: number }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction parseDataTw(dataTw: string | null): { name: string; classes: string[] } {\n  if (!dataTw) return { name: \"Unknown\", classes: [] }\n  const colonIdx = dataTw.indexOf(\":\")\n  if (colonIdx === -1) return { name: dataTw, classes: [] }\n  const name = dataTw.slice(0, colonIdx)\n  const classes = dataTw\n    .slice(colonIdx + 1)\n    .split(/\\s+/)\n    .filter(Boolean)\n  return { name, classes }\n}\n\nfunction parseVariantAttr(v: string | null): Record<string, string> {\n  if (!v) return {}\n  try {\n    return JSON.parse(v)\n  } catch {\n    return {}\n  }\n}\n\nfunction findNearestTwElement(el: HTMLElement): HTMLElement | null {\n  const cur = { el: el as HTMLElement | null }\n  while (cur.el) {\n    if (cur.el.dataset?.tw) return cur.el\n    cur.el = cur.el.parentElement\n  }\n  return null\n}\n\nfunction getAtomicMap(classes: string[]): Record<string, string> {\n  const registry = window.__TW_REGISTRY__\n  if (!registry) return {}\n  const map: Record<string, string> = {}\n  for (const cls of classes) {\n    if (registry[cls]) map[cls] = registry[cls]\n  }\n  return map\n}\n\nfunction getActiveStates(el: HTMLElement): Record<string, string> {\n  const states: Record<string, string> = {}\n  for (const attr of el.attributes) {\n    if (attr.name.startsWith(\"data-\")) {\n      states[attr.name.replace(\"data-\", \"\")] = attr.value\n    }\n  }\n  return states\n}\n\nfunction getStateNames(el: HTMLElement): string[] {\n  const registry = window.__TW_STATE_REGISTRY__ as Map<string, { states: string[] }> | undefined\n  if (!registry) return []\n  for (const [id, entry] of registry) {\n    if (el.classList.contains(id)) return entry.states\n  }\n  return []\n}\n\nfunction getContainerBps(el: HTMLElement): string[] {\n  const registry = window.__TW_CONTAINER_REGISTRY__ as Map<string, { breakpoints: Array<{ minWidth: string }> }> | undefined\n  if (!registry) return []\n  for (const [id, entry] of registry) {\n    if (el.classList.contains(id)) {\n      return entry.breakpoints.map((bp) => bp.minWidth)\n    }\n  }\n  return []\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Inspector\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction InspectorPanel({\n  inspected,\n  position: _position,\n  pinned: _pinned,\n}: {\n  inspected: InspectedElement | null\n  position: { x: number; y: number }\n  pinned: boolean\n}) {\n  if (!inspected) {\n    return React.createElement(\n      \"div\",\n      { style: S.emptyPanel },\n      React.createElement(\"span\", { style: { opacity: 0.4 } }, \"Hover an element to inspect\")\n    )\n  }\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n    // Variant props\n    Object.keys(inspected.variantProps).length > 0 &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: S.sectionTitle }, \"Variants\"),\n        Object.entries(inspected.variantProps).map(([k, v]) =>\n          React.createElement(\n            \"div\",\n            { key: k, style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, k),\n            React.createElement(\"span\", { style: S.varValue }, `\"${v}\"`)\n          )\n        )\n      ),\n\n    // Active states\n    Object.keys(inspected.activeStates).length > 0 &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: S.sectionTitle }, \"Active Data Attrs\"),\n        Object.entries(inspected.activeStates).map(([k, v]) =>\n          React.createElement(\n            \"div\",\n            { key: k, style: S.row },\n            React.createElement(\"code\", { style: { ...S.varKey, color: \"#f59e0b\" } }, `data-${k}`),\n            React.createElement(\"span\", { style: { ...S.varValue, color: \"#34d399\" } }, `\"${v}\"`)\n          )\n        )\n      ),\n\n    // State names\n    inspected.stateNames.length > 0 &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: S.sectionTitle }, \"Reactive States\"),\n        React.createElement(\n          \"div\",\n          { style: S.classGrid },\n          inspected.stateNames.map((s) =>\n            React.createElement(\n              \"code\",\n              {\n                key: s,\n                style: {\n                  ...S.classChip,\n                  background: inspected.activeStates[s] === \"true\" ? \"#065f46\" : \"#18181b\",\n                  borderColor: inspected.activeStates[s] === \"true\" ? \"#34d399\" : \"#27272a\",\n                },\n              },\n              s\n            )\n          )\n        )\n      ),\n\n    // Container breakpoints\n    inspected.containerBps.length > 0 &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: S.sectionTitle }, \"Container Breakpoints\"),\n        React.createElement(\n          \"div\",\n          { style: S.classGrid },\n          inspected.containerBps.map((bp) =>\n            React.createElement(\n              \"code\",\n              { key: bp, style: { ...S.classChip, color: \"#818cf8\" } },\n              bp\n            )\n          )\n        )\n      ),\n\n    // Tailwind classes\n    inspected.twClasses.length > 0 &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: S.sectionTitle }, \"Classes\"),\n        React.createElement(\n          \"div\",\n          { style: S.classGrid },\n          inspected.twClasses.map((cls) =>\n            React.createElement(\n              \"code\",\n              { key: cls, style: S.classChip, title: inspected.atomicMap[cls] },\n              cls\n            )\n          )\n        )\n      ),\n\n    // Copy\n    React.createElement(\n      \"button\",\n      {\n        style: S.copyBtn,\n        onClick: () => {\n          navigator.clipboard?.writeText(\n            JSON.stringify(\n              {\n                component: inspected.componentName,\n                variants: inspected.variantProps,\n                states: inspected.activeStates,\n                classes: inspected.twClasses,\n              },\n              null,\n              2\n            )\n          )\n        },\n      },\n      \"Copy to clipboard\"\n    )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: State Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction StatePanel() {\n  const [entries, setEntries] = useState<any[]>([])\n\n  useEffect(() => {\n    const refresh = () => {\n      const reg = window.__TW_STATE_REGISTRY__\n      setEntries(reg ? Array.from(reg.values()) : [])\n    }\n    refresh()\n    const interval = setInterval(refresh, 1000)\n    return () => clearInterval(interval)\n  }, [])\n\n  if (entries.length === 0) {\n    return React.createElement(\n      \"div\",\n      { style: S.emptyPanel },\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.4 } },\n        \"No state-enabled components found.\"\n      ),\n      React.createElement(\"br\", null),\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.3, fontSize: \"11px\" } },\n        'Use tw.button({ state: { active: \"...\" } }) to register.'\n      )\n    )\n  }\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n    entries.map((entry) =>\n      React.createElement(\n        \"div\",\n        { key: entry.id, style: S.section },\n        React.createElement(\n          \"div\",\n          { style: S.sectionTitle },\n          React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\n          React.createElement(\n            \"span\",\n            { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\n            entry.id\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.classGrid },\n          entry.states.map((s: string) =>\n            React.createElement(\n              \"code\",\n              { key: s, style: { ...S.classChip, color: \"#f59e0b\" } },\n              `data-${s}`\n            )\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: { ...S.row, marginTop: \"4px\" } },\n          React.createElement(\n            \"span\",\n            {\n              style: {\n                ...S.sectionTitle,\n                marginBottom: 0,\n                color: entry.cssInjected ? \"#34d399\" : \"#ef4444\",\n              },\n            },\n            entry.cssInjected ? \"● CSS injected\" : \"○ CSS pending\"\n          )\n        )\n      )\n    )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Container Query Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ContainerPanel() {\n  const [entries, setEntries] = useState<any[]>([])\n\n  useEffect(() => {\n    const refresh = () => {\n      const reg = window.__TW_CONTAINER_REGISTRY__\n      setEntries(reg ? Array.from(reg.values()) : [])\n    }\n    refresh()\n    const interval = setInterval(refresh, 1000)\n    return () => clearInterval(interval)\n  }, [])\n\n  if (entries.length === 0) {\n    return React.createElement(\n      \"div\",\n      { style: S.emptyPanel },\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.4 } },\n        \"No container query components found.\"\n      ),\n      React.createElement(\"br\", null),\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.3, fontSize: \"11px\" } },\n        'Use tw.div({ container: { md: \"flex-row\" } }) to register.'\n      )\n    )\n  }\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n    entries.map((entry) =>\n      React.createElement(\n        \"div\",\n        { key: entry.id, style: S.section },\n        React.createElement(\n          \"div\",\n          { style: S.sectionTitle },\n          React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\n          entry.containerName &&\n            React.createElement(\n              \"span\",\n              { style: { marginLeft: \"6px\", color: \"#818cf8\" } },\n              `[${entry.containerName}]`\n            ),\n          React.createElement(\n            \"span\",\n            { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\n            entry.id\n          )\n        ),\n        React.createElement(\n          \"div\",\n          null,\n          entry.breakpoints.map(\n            (bp: { minWidth: string; classes: string; label?: string }, i: number) =>\n            React.createElement(\n              \"div\",\n              { key: i, style: { ...S.row, marginBottom: \"2px\" } },\n              React.createElement(\n                \"code\",\n                { style: { color: \"#818cf8\", fontSize: \"11px\" } },\n                `≥ ${bp.minWidth}`\n              ),\n              React.createElement(\n                \"span\",\n                { style: { color: \"#6b7280\", fontSize: \"11px\" } },\n                bp.classes\n              )\n            )\n          )\n        )\n      )\n    )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Live Token Editor\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction TokensPanel() {\n  const [tokens, setTokens_] = useState<Record<string, string>>({})\n\n  useEffect(() => {\n    const engine = window.__TW_TOKEN_ENGINE__\n    if (!engine) return\n\n    setTokens_(engine.getTokens())\n    if (!engine.subscribe) return\n    const unsub = engine.subscribe((t: Record<string, string>) => setTokens_({ ...t }))\n    return unsub\n  }, [])\n\n  const entries = Object.entries(tokens)\n\n  if (entries.length === 0) {\n    return React.createElement(\n      \"div\",\n      { style: S.emptyPanel },\n      React.createElement(\"span\", { style: { opacity: 0.4 } }, \"No live tokens registered.\"),\n      React.createElement(\"br\", null),\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.3, fontSize: \"11px\" } },\n        'Use liveToken({ primary: \"#3b82f6\" }) to register tokens.'\n      )\n    )\n  }\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n    React.createElement(\n      \"div\",\n      { style: { ...S.sectionTitle, padding: \"8px 12px 4px\", color: \"#52525b\" } },\n      \"Click color to edit · Changes apply instantly\"\n    ),\n    entries.map(([name, value]) => {\n      const isColor = value.startsWith(\"#\") || value.startsWith(\"rgb\") || value.startsWith(\"hsl\")\n      return React.createElement(\n        \"div\",\n        { key: name, style: { ...S.row, padding: \"6px 12px\", borderBottom: \"1px solid #18181b\" } },\n        React.createElement(\n          \"div\",\n          { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\n          isColor &&\n            React.createElement(\"div\", {\n              style: {\n                width: \"16px\",\n                height: \"16px\",\n                borderRadius: \"3px\",\n                background: value,\n                border: \"1px solid #27272a\",\n                flexShrink: 0,\n              },\n            }),\n          React.createElement(\"span\", { style: { color: \"#a1a1aa\", fontSize: \"12px\" } }, name)\n        ),\n        isColor\n          ? React.createElement(\"input\", {\n              type: \"color\",\n              defaultValue: value.startsWith(\"#\") ? value : \"#000000\",\n              style: {\n                width: \"52px\",\n                height: \"22px\",\n                border: \"none\",\n                background: \"none\",\n                cursor: \"pointer\",\n              },\n              onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n                const engine = window.__TW_TOKEN_ENGINE__\n                if (engine) engine.setToken(name, e.target.value)\n              },\n            })\n          : React.createElement(\"input\", {\n              type: \"text\",\n              defaultValue: value,\n              style: {\n                background: \"#18181b\",\n                border: \"1px solid #27272a\",\n                borderRadius: \"3px\",\n                color: \"#e4e4e7\",\n                fontSize: \"11px\",\n                padding: \"2px 6px\",\n                width: \"100px\",\n                fontFamily: \"monospace\",\n              },\n              onBlur: (e: React.FocusEvent<HTMLInputElement>) => {\n                const engine = window.__TW_TOKEN_ENGINE__\n                if (engine) engine.setToken(name, e.target.value)\n              },\n            })\n      )\n    })\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Runtime Analyzer\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction AnalyzerPanel() {\n  const [scanning, setScanning] = useState(false)\n  const [results, setResults] = useState<{\n    duplicates: Array<{ pattern: string; count: number; names: string[] }>\n    stateCount: number\n    containerCount: number\n    tokenCount: number\n  } | null>(null)\n  // Engine metrics — fetched dari dashboard server (http://localhost:3000/metrics)\n  const [engineMetrics, setEngineMetrics] = useState<Record<string, unknown> | null>(null)\n  const [metricsFetching, setMetricsFetching] = useState(false)\n  const [metricsError, setMetricsError] = useState<string | null>(null)\n\n  const loadEngineMetrics = useCallback(async () => {\n    setMetricsFetching(true)\n    setMetricsError(null)\n    try {\n      const res = await fetch(\"http://localhost:3000/metrics\", {\n        signal: AbortSignal.timeout(2000),\n      })\n      if (!res.ok) throw new Error(`HTTP ${res.status}`)\n      const data = await res.json()\n      setEngineMetrics(data)\n    } catch (e: unknown) {\n      const msg = e instanceof Error ? e.message : String(e)\n      setMetricsError(\n        msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\n          ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\n          : msg\n      )\n      setEngineMetrics(null)\n    } finally {\n      setMetricsFetching(false)\n    }\n  }, [])\n\n  const runScan = useCallback(() => {\n    setScanning(true)\n\n    setTimeout(() => {\n      const twEls = document.querySelectorAll(\"[data-tw]\")\n      const classMap = new Map<string, string[]>()\n\n      for (const el of twEls) {\n        const { name, classes } = (() => {\n          const dTw = (el as HTMLElement).dataset.tw ?? null\n          if (!dTw) return { name: \"?\", classes: [] }\n          const ci = dTw.indexOf(\":\")\n          return {\n            name: ci >= 0 ? dTw.slice(0, ci) : dTw,\n            classes:\n              ci >= 0\n                ? dTw\n                    .slice(ci + 1)\n                    .split(/\\s+/)\n                    .filter(Boolean)\n                : [],\n          }\n        })()\n\n        const key = classes.sort().join(\" \")\n        if (!classMap.has(key)) classMap.set(key, [])\n        classMap.get(key)!.push(name)\n      }\n\n      const duplicates = Array.from(classMap.entries())\n        .filter(([, names]) => names.length > 1)\n        .map(([pattern, names]) => ({ pattern, count: names.length, names }))\n        .sort((a, b) => b.count - a.count)\n        .slice(0, 10)\n\n      const stateReg = window.__TW_STATE_REGISTRY__\n      const containerReg = window.__TW_CONTAINER_REGISTRY__\n      const tokenEngine = window.__TW_TOKEN_ENGINE__\n\n      setResults({\n        duplicates,\n        stateCount: stateReg?.size ?? 0,\n        containerCount: containerReg?.size ?? 0,\n        tokenCount: Object.keys(tokenEngine?.getTokens?.() ?? {}).length,\n      })\n      setScanning(false)\n    }, 100)\n  }, [])\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n    React.createElement(\n      \"div\",\n      { style: { padding: \"10px 12px\" } },\n\n      // ── DOM Scan ──────────────────────────────────────────────────────────\n      React.createElement(\n        \"button\",\n        {\n          style: { ...S.copyBtn, borderTop: \"none\", color: \"#60a5fa\", fontWeight: \"600\" },\n          onClick: runScan,\n          disabled: scanning,\n        },\n        scanning ? \"Scanning DOM...\" : \"▶ Run DOM Scan\"\n      ),\n\n      // ── Engine Metrics (dari dashboard) ───────────────────────────────────\n      React.createElement(\n        \"div\",\n        { style: { ...S.section, marginTop: \"8px\" } },\n        React.createElement(\n          \"div\",\n          { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n          \"⚡ Engine Metrics\"\n        ),\n        engineMetrics\n          ? React.createElement(\n              \"div\",\n              null,\n              React.createElement(\n                \"div\",\n                { style: S.row },\n                React.createElement(\"span\", { style: S.varKey }, \"Build\"),\n                React.createElement(\n                  \"span\",\n                  { style: { ...S.varValue, color: \"#34d399\" } },\n                  engineMetrics.buildMs !== null ? `${engineMetrics.buildMs}ms` : \"—\"\n                )\n              ),\n              React.createElement(\n                \"div\",\n                { style: S.row },\n                React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\n                React.createElement(\n                  \"span\",\n                  { style: { ...S.varValue, color: \"#34d399\" } },\n                  String(engineMetrics.classCount ?? \"—\")\n                )\n              ),\n              React.createElement(\n                \"div\",\n                { style: S.row },\n                React.createElement(\"span\", { style: S.varKey }, \"Files\"),\n                React.createElement(\n                  \"span\",\n                  { style: { ...S.varValue, color: \"#34d399\" } },\n                  String(engineMetrics.fileCount ?? \"—\")\n                )\n              ),\n              React.createElement(\n                \"div\",\n                { style: S.row },\n                React.createElement(\"span\", { style: S.varKey }, \"Mode\"),\n                React.createElement(\n                  \"span\",\n                  { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n                  String(engineMetrics.mode ?? \"—\")\n                )\n              ),\n              React.createElement(\n                \"button\",\n                {\n                  style: {\n                    ...S.copyBtn,\n                    borderTop: \"none\",\n                    color: \"#52525b\",\n                    fontSize: \"10px\",\n                    padding: \"4px 0\",\n                  },\n                  onClick: loadEngineMetrics,\n                  disabled: metricsFetching,\n                },\n                \"↻ Refresh\"\n              )\n            )\n          : metricsError\n            ? React.createElement(\n                \"div\",\n                null,\n                React.createElement(\n                  \"div\",\n                  { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"6px\" } },\n                  metricsError\n                ),\n                React.createElement(\n                  \"button\",\n                  {\n                    style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\n                    onClick: loadEngineMetrics,\n                    disabled: metricsFetching,\n                  },\n                  metricsFetching ? \"Connecting...\" : \"↻ Retry\"\n                )\n              )\n            : React.createElement(\n                \"div\",\n                null,\n                React.createElement(\n                  \"div\",\n                  {\n                    style: {\n                      color: \"#71717a\",\n                      fontSize: \"11px\",\n                      lineHeight: 1.6,\n                      marginBottom: \"6px\",\n                    },\n                  },\n                  \"Rust analyzer hanya tersedia via CLI atau dashboard.\",\n                  React.createElement(\"br\", null),\n                  React.createElement(\n                    \"code\",\n                    { style: { color: \"#52525b\", fontSize: \"10px\" } },\n                    \"tw analyze . | tw dashboard\"\n                  )\n                ),\n                React.createElement(\n                  \"button\",\n                  {\n                    style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\n                    onClick: loadEngineMetrics,\n                    disabled: metricsFetching,\n                  },\n                  metricsFetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\n                )\n              )\n      ),\n\n      // ── DOM Scan Results ──────────────────────────────────────────────────\n      results &&\n        React.createElement(\n          \"div\",\n          null,\n          React.createElement(\n            \"div\",\n            { style: S.section },\n            React.createElement(\"div\", { style: S.sectionTitle }, \"Summary\"),\n            React.createElement(\n              \"div\",\n              { style: S.row },\n              React.createElement(\"span\", { style: S.varKey }, \"State components\"),\n              React.createElement(\"span\", { style: S.varValue }, String(results.stateCount))\n            ),\n            React.createElement(\n              \"div\",\n              { style: S.row },\n              React.createElement(\"span\", { style: S.varKey }, \"Container components\"),\n              React.createElement(\"span\", { style: S.varValue }, String(results.containerCount))\n            ),\n            React.createElement(\n              \"div\",\n              { style: S.row },\n              React.createElement(\"span\", { style: S.varKey }, \"Live tokens\"),\n              React.createElement(\"span\", { style: S.varValue }, String(results.tokenCount))\n            )\n          ),\n\n          results.duplicates.length > 0\n            ? React.createElement(\n                \"div\",\n                { style: S.section },\n                React.createElement(\"div\", { style: S.sectionTitle }, \"Duplicate Class Sets\"),\n                results.duplicates.map((d, i) =>\n                  React.createElement(\n                    \"div\",\n                    { key: i, style: { marginBottom: \"8px\" } },\n                    React.createElement(\n                      \"div\",\n                      { style: { color: \"#f59e0b\", fontSize: \"11px\", marginBottom: \"2px\" } },\n                      d.names.join(\", \")\n                    ),\n                    React.createElement(\n                      \"code\",\n                      {\n                        style: {\n                          color: \"#52525b\",\n                          fontSize: \"10px\",\n                          wordBreak: \"break-all\" as const,\n                        },\n                      },\n                      d.pattern.split(\" \").slice(0, 8).join(\" \") +\n                        (d.pattern.split(\" \").length > 8 ? \"...\" : \"\")\n                    )\n                  )\n                )\n              )\n            : React.createElement(\n                \"div\",\n                { style: S.section },\n                React.createElement(\n                  \"span\",\n                  { style: { color: \"#34d399\", fontSize: \"12px\" } },\n                  \"✓ No duplicate class sets in current DOM\"\n                )\n              )\n        )\n    )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Trace — build timeline, pipeline events, memory profile\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst DASHBOARD_BASE = \"http://localhost:3000\"\n\nfunction TracePanel() {\n  const [metrics, setMetrics] = useState<TraceSnapshot | null>(null)\n  const [history, setHistory] = useState<TraceSnapshot[]>([])\n  const [summary, setSummary] = useState<TraceSummary | null>(null)\n  const [error, setError] = useState<string | null>(null)\n  const [fetching, setFetching] = useState(false)\n  const [autoRefresh, setAutoRefresh] = useState(false)\n  const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n  const fetchAll = useCallback(async () => {\n    setFetching(true)\n    setError(null)\n    try {\n      const [mRes, hRes, sRes] = await Promise.all([\n        fetch(`${DASHBOARD_BASE}/metrics`, { signal: AbortSignal.timeout(2000) }),\n        fetch(`${DASHBOARD_BASE}/history`, { signal: AbortSignal.timeout(2000) }),\n        fetch(`${DASHBOARD_BASE}/summary`, { signal: AbortSignal.timeout(2000) }),\n      ])\n      if (!mRes.ok) throw new Error(`metrics: HTTP ${mRes.status}`)\n      if (!hRes.ok) throw new Error(`history: HTTP ${hRes.status}`)\n      if (!sRes.ok) throw new Error(`summary: HTTP ${sRes.status}`)\n\n      const m = await mRes.json()\n      const h = await hRes.json()\n      const s = await sRes.json()\n\n      setMetrics(m)\n      setHistory(Array.isArray(h) ? h : [])\n      setSummary(s)\n    } catch (e: unknown) {\n      const msg = e instanceof Error ? e.message : String(e)\n      setError(\n        msg.includes(\"Failed to fetch\") || msg.includes(\"NetworkError\")\n          ? \"Dashboard tidak berjalan. Jalankan: tw dashboard\"\n          : msg\n      )\n    } finally {\n      setFetching(false)\n    }\n  }, [])\n\n  // Auto-refresh effect\n  useEffect(() => {\n    if (autoRefresh) {\n      fetchAll()\n      intervalRef.current = setInterval(fetchAll, 3000)\n    } else if (intervalRef.current) {\n      clearInterval(intervalRef.current)\n      intervalRef.current = null\n    }\n    return () => {\n      if (intervalRef.current) clearInterval(intervalRef.current)\n    }\n  }, [autoRefresh, fetchAll])\n\n  // Render bar chart for build time history\n  const renderHistoryChart = () => {\n    const vals = history.map((h) => h.buildMs ?? 0).filter((v) => v > 0)\n    if (vals.length === 0) {\n      return React.createElement(\n        \"div\",\n        {\n          style: {\n            color: \"#52525b\",\n            fontSize: \"11px\",\n            textAlign: \"center\" as const,\n            padding: \"12px\",\n          },\n        },\n        \"No build history available\"\n      )\n    }\n    const max = Math.max(...vals)\n    const chartWidth = 296\n    const barWidth = Math.max(3, Math.floor(chartWidth / vals.length) - 1)\n\n    return React.createElement(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          alignItems: \"flex-end\" as const,\n          gap: \"1px\",\n          height: \"60px\",\n          padding: \"0 2px\",\n        },\n      },\n      vals.map((v, i) => {\n        const h = max > 0 ? Math.max(3, Math.round((v / max) * 56)) : 3\n        return React.createElement(\"div\", {\n          key: i,\n          style: {\n            width: `${barWidth}px`,\n            height: `${h}px`,\n            background: getBuildTimeColor(v),\n            borderRadius: \"2px 2px 0 0\",\n            opacity: i === vals.length - 1 ? 1 : 0.5,\n            flexShrink: 0,\n          },\n          title: `${v}ms`,\n        })\n      })\n    )\n  }\n\n  // Render pipeline breakdown bar\n  const renderPipelineBar = () => {\n    if (!metrics) return null\n    const { scanPct, analyzePct, compilePct } = getPipelinePercentages(metrics)\n    const scan = metrics.scanMs ?? 0\n    const analyze = metrics.analyzeMs ?? 0\n    const compile = metrics.compileMs ?? 0\n\n    if (scanPct === 0 && analyzePct === 0 && compilePct === 0) return null\n\n    return React.createElement(\n      \"div\",\n      null,\n      React.createElement(\n        \"div\",\n        { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n        \"Pipeline Breakdown\"\n      ),\n      React.createElement(\n        \"div\",\n        {\n          style: {\n            display: \"flex\",\n            height: \"12px\",\n            borderRadius: \"4px\",\n            overflow: \"hidden\",\n            marginBottom: \"6px\",\n          },\n        },\n        scanPct > 0 &&\n          React.createElement(\"div\", {\n            style: { width: `${scanPct}%`, background: \"#60a5fa\", minWidth: \"2px\" },\n            title: `Scan: ${scan}ms`,\n          }),\n        analyzePct > 0 &&\n          React.createElement(\"div\", {\n            style: { width: `${analyzePct}%`, background: \"#818cf8\", minWidth: \"2px\" },\n            title: `Analyze: ${analyze}ms`,\n          }),\n        compilePct > 0 &&\n          React.createElement(\"div\", {\n            style: { width: `${compilePct}%`, background: \"#34d399\", minWidth: \"2px\" },\n            title: `Compile: ${compile}ms`,\n          })\n      ),\n      React.createElement(\n        \"div\",\n        { style: { display: \"flex\", gap: \"12px\", fontSize: \"10px\" } },\n        React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, `Scan ${scan}ms`),\n        React.createElement(\"span\", { style: { color: \"#818cf8\" } }, `Analyze ${analyze}ms`),\n        React.createElement(\"span\", { style: { color: \"#34d399\" } }, `Compile ${compile}ms`)\n      )\n    )\n  }\n\n  // Error state\n  if (error && !metrics) {\n    return React.createElement(\n      \"div\",\n      { style: S.scrollArea },\n      React.createElement(\n        \"div\",\n        { style: { padding: \"12px\" } },\n        React.createElement(\n          \"div\",\n          { style: { color: \"#f87171\", fontSize: \"11px\", marginBottom: \"8px\" } },\n          error\n        ),\n        React.createElement(\n          \"button\",\n          {\n            style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\n            onClick: fetchAll,\n            disabled: fetching,\n          },\n          fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\n        )\n      )\n    )\n  }\n\n  // Initial load state\n  if (!metrics) {\n    return React.createElement(\n      \"div\",\n      { style: S.scrollArea },\n      React.createElement(\n        \"div\",\n        { style: { padding: \"12px\" } },\n        React.createElement(\n          \"div\",\n          {\n            style: {\n              color: \"#71717a\",\n              fontSize: \"11px\",\n              lineHeight: 1.6,\n              marginBottom: \"8px\",\n            },\n          },\n          \"Build timeline dan pipeline events dari engine.\",\n          React.createElement(\"br\", null),\n          React.createElement(\n            \"code\",\n            { style: { color: \"#52525b\", fontSize: \"10px\" } },\n            \"tw dashboard\"\n          )\n        ),\n        React.createElement(\n          \"button\",\n          {\n            style: { ...S.copyBtn, borderTop: \"none\", color: \"#34d399\", fontWeight: \"600\" },\n            onClick: fetchAll,\n            disabled: fetching,\n          },\n          fetching ? \"Connecting...\" : \"⚡ Load from Dashboard\"\n        )\n      )\n    )\n  }\n\n  return React.createElement(\n    \"div\",\n    { style: S.scrollArea },\n\n    // ── Mode & Health ────────────────────────────────────────────────────\n    React.createElement(\n      \"div\",\n      { style: { padding: \"10px 12px 6px\" } },\n      React.createElement(\n        \"div\",\n        {\n          style: {\n            display: \"flex\",\n            justifyContent: \"space-between\",\n            alignItems: \"center\",\n            marginBottom: \"8px\",\n          },\n        },\n        React.createElement(\n          \"div\",\n          { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\n          React.createElement(\"div\", {\n            style: {\n              width: \"8px\",\n              height: \"8px\",\n              borderRadius: \"50%\",\n              background: getModeColor(metrics.mode),\n              boxShadow: `0 0 6px ${getModeColor(metrics.mode)}`,\n            },\n          }),\n          React.createElement(\n            \"span\",\n            {\n              style: {\n                color: getModeColor(metrics.mode),\n                fontWeight: \"600\",\n                fontSize: \"12px\",\n                textTransform: \"uppercase\" as const,\n              },\n            },\n            metrics.mode ?? \"unknown\"\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: { display: \"flex\", gap: \"4px\" } },\n          React.createElement(\n            \"button\",\n            {\n              style: {\n                background: autoRefresh ? \"#1e3a5f\" : \"none\",\n                border: `1px solid ${autoRefresh ? \"#3b82f6\" : \"#27272a\"}`,\n                borderRadius: \"4px\",\n                color: autoRefresh ? \"#60a5fa\" : \"#52525b\",\n                cursor: \"pointer\",\n                fontSize: \"10px\",\n                padding: \"2px 6px\",\n                fontFamily: \"inherit\",\n                pointerEvents: \"all\" as const,\n              },\n              onClick: () => setAutoRefresh(!autoRefresh),\n              title: autoRefresh ? \"Stop auto-refresh\" : \"Auto-refresh every 3s\",\n            },\n            autoRefresh ? \"● Live\" : \"○ Live\"\n          ),\n          React.createElement(\n            \"button\",\n            {\n              style: {\n                background: \"none\",\n                border: \"1px solid #27272a\",\n                borderRadius: \"4px\",\n                color: \"#52525b\",\n                cursor: \"pointer\",\n                fontSize: \"10px\",\n                padding: \"2px 6px\",\n                fontFamily: \"inherit\",\n                pointerEvents: \"all\" as const,\n              },\n              onClick: fetchAll,\n              disabled: fetching,\n              title: \"Refresh now\",\n            },\n            \"↻\"\n          )\n        )\n      )\n    ),\n\n    // ── Health Status ────────────────────────────────────────────────────\n    summary &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Health\"),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Status\"),\n          React.createElement(\n            \"span\",\n            { style: { color: getHealthColor(summary.health?.status), fontWeight: \"600\" } },\n            summary.health?.status ?? \"unknown\"\n          )\n        ),\n        summary.health?.issues &&\n          summary.health.issues.length > 0 &&\n          React.createElement(\n            \"div\",\n            { style: { marginTop: \"4px\" } },\n            summary.health.issues.map((issue, i) =>\n              React.createElement(\n                \"div\",\n                {\n                  key: i,\n                  style: {\n                    fontSize: \"10px\",\n                    color:\n                      issue.severity === \"high\"\n                        ? \"#f87171\"\n                        : issue.severity === \"medium\"\n                          ? \"#fbbf24\"\n                          : \"#71717a\",\n                    marginBottom: \"2px\",\n                  },\n                },\n                `• ${issue.message}`\n              )\n            )\n          )\n      ),\n\n    // ── Build Metrics ────────────────────────────────────────────────────\n    React.createElement(\n      \"div\",\n      { style: S.section },\n      React.createElement(\n        \"div\",\n        { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n        \"Build Metrics\"\n      ),\n      React.createElement(\n        \"div\",\n        { style: S.row },\n        React.createElement(\"span\", { style: S.varKey }, \"Build\"),\n        React.createElement(\n          \"span\",\n          {\n            style: {\n              ...S.varValue,\n              color: getBuildTimeColor(metrics.buildMs),\n            },\n          },\n          metrics.buildMs !== null ? `${metrics.buildMs}ms` : \"—\"\n        )\n      ),\n      React.createElement(\n        \"div\",\n        { style: S.row },\n        React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\n        React.createElement(\"span\", { style: S.varValue }, String(metrics.classCount ?? \"—\"))\n      ),\n      React.createElement(\n        \"div\",\n        { style: S.row },\n        React.createElement(\"span\", { style: S.varKey }, \"Files\"),\n        React.createElement(\"span\", { style: S.varValue }, String(metrics.fileCount ?? \"—\"))\n      ),\n      metrics.cssBytes !== null &&\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"CSS\"),\n          React.createElement(\n            \"span\",\n            { style: { ...S.varValue, color: \"#818cf8\" } },\n            formatMemory(metrics.cssBytes)\n          )\n        )\n    ),\n\n    // ── Pipeline Breakdown ───────────────────────────────────────────────\n    React.createElement(\"div\", { style: S.section }, renderPipelineBar()),\n\n    // ── Pipeline Events ──────────────────────────────────────────────────\n    (metrics.eventsReceived !== undefined || metrics.batchesProcessed !== undefined) &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\n          \"div\",\n          { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n          \"Pipeline Events\"\n        ),\n        metrics.eventsReceived !== undefined &&\n          React.createElement(\n            \"div\",\n            { style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, \"Events received\"),\n            React.createElement(\n              \"span\",\n              { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n              String(metrics.eventsReceived)\n            )\n          ),\n        metrics.eventsProcessed !== undefined &&\n          React.createElement(\n            \"div\",\n            { style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, \"Events processed\"),\n            React.createElement(\n              \"span\",\n              { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n              String(metrics.eventsProcessed)\n            )\n          ),\n        metrics.batchesProcessed !== undefined &&\n          React.createElement(\n            \"div\",\n            { style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, \"Batches\"),\n            React.createElement(\n              \"span\",\n              { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n              String(metrics.batchesProcessed)\n            )\n          ),\n        metrics.incrementalUpdates !== undefined &&\n          React.createElement(\n            \"div\",\n            { style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, \"Incremental\"),\n            React.createElement(\n              \"span\",\n              { style: { color: \"#34d399\", fontSize: \"11px\" } },\n              String(metrics.incrementalUpdates)\n            )\n          ),\n        metrics.fullRescans !== undefined &&\n          React.createElement(\n            \"div\",\n            { style: S.row },\n            React.createElement(\"span\", { style: S.varKey }, \"Full rescans\"),\n            React.createElement(\n              \"span\",\n              { style: { color: \"#fbbf24\", fontSize: \"11px\" } },\n              String(metrics.fullRescans)\n            )\n          )\n      ),\n\n    // ── Memory ───────────────────────────────────────────────────────────\n    metrics.memoryMb &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\"div\", { style: { ...S.sectionTitle, marginBottom: \"6px\" } }, \"Memory\"),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Heap used\"),\n          React.createElement(\n            \"span\",\n            {\n              style: {\n                color: getMemoryColor(metrics.memoryMb.heapUsed),\n                fontWeight: \"600\",\n              },\n            },\n            `${metrics.memoryMb.heapUsed.toFixed(1)}MB`\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Heap total\"),\n          React.createElement(\n            \"span\",\n            { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n            `${metrics.memoryMb.heapTotal.toFixed(1)}MB`\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"RSS\"),\n          React.createElement(\n            \"span\",\n            { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n            `${metrics.memoryMb.rss.toFixed(1)}MB`\n          )\n        )\n      ),\n\n    // ── Workspace Summary ────────────────────────────────────────────────\n    summary &&\n      React.createElement(\n        \"div\",\n        { style: S.section },\n        React.createElement(\n          \"div\",\n          { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n          \"Workspace\"\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Packages\"),\n          React.createElement(\n            \"span\",\n            { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n            String(summary.workspace?.totalPackages ?? \"—\")\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Files\"),\n          React.createElement(\n            \"span\",\n            { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n            String(summary.workspace?.totalFiles ?? \"—\")\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Classes\"),\n          React.createElement(\n            \"span\",\n            { style: { color: \"#a1a1aa\", fontSize: \"11px\" } },\n            String(summary.workspace?.totalClasses ?? \"—\")\n          )\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.row },\n          React.createElement(\"span\", { style: S.varKey }, \"Cache hit rate\"),\n          React.createElement(\n            \"span\",\n            {\n              style: {\n                color: (summary.cache?.hitRate ?? 0) > 0.8 ? \"#34d399\" : \"#fbbf24\",\n                fontSize: \"11px\",\n              },\n            },\n            summary.cache ? `${(summary.cache.hitRate * 100).toFixed(0)}%` : \"—\"\n          )\n        )\n      ),\n\n    // ── Build Time History ───────────────────────────────────────────────\n    React.createElement(\n      \"div\",\n      { style: S.section },\n      React.createElement(\n        \"div\",\n        { style: { ...S.sectionTitle, marginBottom: \"6px\" } },\n        `Build History (${history.length} snapshots)`\n      ),\n      renderHistoryChart()\n    ),\n\n    // ── Timestamp ────────────────────────────────────────────────────────\n    metrics.generatedAt &&\n      React.createElement(\n        \"div\",\n        {\n          style: {\n            padding: \"6px 12px\",\n            color: \"#3f3f46\",\n            fontSize: \"10px\",\n            textAlign: \"center\" as const,\n          },\n        },\n        `Last update: ${new Date(metrics.generatedAt).toLocaleTimeString()}`\n      )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Main DevTools component\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function TwDevTools(): React.ReactElement | null {\n  if (process.env.NODE_ENV === \"production\") return null\n\n  const [state, setState] = useState<DevToolsState>({\n    open: false,\n    panel: \"inspector\",\n    pinned: false,\n    inspected: null,\n    position: { x: 0, y: 0 },\n  })\n\n  const overlayRef = useRef<HTMLDivElement>(null)\n  const isInspecting = state.open && state.panel === \"inspector\"\n\n  // Keyboard shortcuts\n  useEffect(() => {\n    const onKey = (e: KeyboardEvent) => {\n      if (e.ctrlKey && e.shiftKey && e.key === \"D\") {\n        e.preventDefault()\n        setState((s) => ({ ...s, open: !s.open, inspected: null }))\n      }\n      if (e.key === \"Escape\")\n        setState((s) => ({ ...s, open: false, pinned: false, inspected: null }))\n      if (e.key === \"1\") setState((s) => (s.open ? { ...s, panel: \"inspector\" } : s))\n      if (e.key === \"2\") setState((s) => (s.open ? { ...s, panel: \"state\" } : s))\n      if (e.key === \"3\") setState((s) => (s.open ? { ...s, panel: \"container\" } : s))\n      if (e.key === \"4\") setState((s) => (s.open ? { ...s, panel: \"tokens\" } : s))\n      if (e.key === \"5\") setState((s) => (s.open ? { ...s, panel: \"analyzer\" } : s))\n      if (e.key === \"6\") setState((s) => (s.open ? { ...s, panel: \"trace\" } : s))\n    }\n    window.addEventListener(\"keydown\", onKey)\n    return () => window.removeEventListener(\"keydown\", onKey)\n  }, [])\n\n  // Mouse move — only active on inspector panel\n  const onMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (!isInspecting || state.pinned) return\n      const twEl = findNearestTwElement(e.target as HTMLElement)\n      if (!twEl) {\n        setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }))\n        return\n      }\n      const { name, classes } = parseDataTw(twEl.dataset.tw ?? null)\n      setState((s) => ({\n        ...s,\n        position: { x: e.clientX, y: e.clientY },\n        inspected: {\n          componentName: name,\n          element: twEl,\n          rect: twEl.getBoundingClientRect(),\n          twClasses: classes,\n          variantProps: parseVariantAttr(twEl.dataset.twVariants ?? null),\n          atomicMap: getAtomicMap(classes),\n          rawClassName: twEl.className,\n          stateNames: getStateNames(twEl),\n          activeStates: getActiveStates(twEl),\n          containerBps: getContainerBps(twEl),\n        },\n      }))\n    },\n    [isInspecting, state.pinned]\n  )\n\n  const onClick = useCallback(\n    (e: MouseEvent) => {\n      if (!isInspecting) return\n      if (overlayRef.current?.contains(e.target as HTMLElement)) return\n      setState((s) => ({ ...s, pinned: !s.pinned && !!s.inspected }))\n    },\n    [isInspecting]\n  )\n\n  useEffect(() => {\n    if (!isInspecting) return\n    window.addEventListener(\"mousemove\", onMouseMove)\n    window.addEventListener(\"click\", onClick)\n    return () => {\n      window.removeEventListener(\"mousemove\", onMouseMove)\n      window.removeEventListener(\"click\", onClick)\n    }\n  }, [isInspecting, onMouseMove, onClick])\n\n  // Toggle button\n  if (!state.open) {\n    return React.createElement(\n      \"button\",\n      {\n        onClick: () => setState((s) => ({ ...s, open: true })),\n        style: S.toggleBtn,\n        title: \"tailwind-styled-v4 DevTools (Ctrl+Shift+D)\",\n      },\n      \"🎨\"\n    )\n  }\n\n  const PANELS: Array<{ id: Panel; label: string; icon: string }> = [\n    { id: \"inspector\", label: \"Inspector\", icon: \"🔍\" },\n    { id: \"state\", label: \"State\", icon: \"⚡\" },\n    { id: \"container\", label: \"Container\", icon: \"📦\" },\n    { id: \"tokens\", label: \"Tokens\", icon: \"🎨\" },\n    { id: \"analyzer\", label: \"Analyzer\", icon: \"📊\" },\n    { id: \"trace\", label: \"Trace\", icon: \"🔬\" },\n  ]\n\n  return React.createElement(\n    \"div\",\n    { style: S.root },\n\n    // ── Element highlight (inspector only) ──────────────────────────────\n    isInspecting &&\n      state.inspected &&\n      React.createElement(\"div\", {\n        style: {\n          ...S.highlight,\n          top: state.inspected.rect.top + window.scrollY,\n          left: state.inspected.rect.left + window.scrollX,\n          width: state.inspected.rect.width,\n          height: state.inspected.rect.height,\n        },\n      }),\n\n    // ── Component name label ────────────────────────────────────────────\n    isInspecting &&\n      state.inspected &&\n      React.createElement(\n        \"div\",\n        {\n          style: {\n            position: \"absolute\" as const,\n            top: state.inspected.rect.top + window.scrollY - 22,\n            left: state.inspected.rect.left + window.scrollX,\n            background: \"#1e3a5f\",\n            color: \"#93c5fd\",\n            fontSize: \"11px\",\n            padding: \"2px 6px\",\n            borderRadius: \"3px 3px 0 0\",\n            pointerEvents: \"none\" as const,\n            zIndex: 2147483646,\n            fontFamily: \"monospace\",\n          },\n        },\n        state.inspected.componentName\n      ),\n\n    // ── Main DevTools panel ─────────────────────────────────────────────\n    React.createElement(\n      \"div\",\n      {\n        ref: overlayRef,\n        style:\n          state.panel === \"inspector\" && state.inspected\n            ? {\n                ...S.panel,\n                top: Math.min(state.position.y + 16, window.innerHeight - 460),\n                left: Math.min(state.position.x + 16, window.innerWidth - 320),\n              }\n            : {\n                ...S.panel,\n                top: \"auto\",\n                bottom: \"40px\",\n                right: \"12px\",\n                left: \"auto\",\n              },\n      },\n\n      // Header\n      React.createElement(\n        \"div\",\n        { style: S.header },\n        React.createElement(\n          \"span\",\n          { style: S.componentName },\n          state.inspected && state.panel === \"inspector\"\n            ? state.inspected.componentName\n            : \"tailwind-styled-v4\"\n        ),\n        React.createElement(\n          \"div\",\n          { style: S.headerActions },\n          state.pinned && React.createElement(\"span\", { style: S.pinBadge }, \"📌\"),\n          React.createElement(\n            \"button\",\n            {\n              style: S.closeBtn,\n              onClick: () =>\n                setState((s) => ({ ...s, open: false, pinned: false, inspected: null })),\n            },\n            \"✕\"\n          )\n        )\n      ),\n\n      // Tab bar\n      React.createElement(\n        \"div\",\n        { style: S.tabBar },\n        PANELS.map((p) =>\n          React.createElement(\n            \"button\",\n            {\n              key: p.id,\n              style: {\n                ...S.tab,\n                background: state.panel === p.id ? \"#18181b\" : \"none\",\n                color: state.panel === p.id ? \"#e4e4e7\" : \"#52525b\",\n                borderBottom: state.panel === p.id ? \"2px solid #3b82f6\" : \"2px solid transparent\",\n              },\n              onClick: () => setState((s) => ({ ...s, panel: p.id })),\n              title: `${p.label} (${PANELS.findIndex((x) => x.id === p.id) + 1})`,\n            },\n            `${p.icon} ${p.label}`\n          )\n        )\n      ),\n\n      // Panel content\n      state.panel === \"inspector\" &&\n        React.createElement(InspectorPanel, {\n          inspected: state.inspected,\n          position: state.position,\n          pinned: state.pinned,\n        }),\n      state.panel === \"state\" && React.createElement(StatePanel, null),\n      state.panel === \"container\" && React.createElement(ContainerPanel, null),\n      state.panel === \"tokens\" && React.createElement(TokensPanel, null),\n      state.panel === \"analyzer\" && React.createElement(AnalyzerPanel, null),\n      state.panel === \"trace\" && React.createElement(TracePanel, null)\n    ),\n\n    // ── Status bar ──────────────────────────────────────────────────────\n    React.createElement(\n      \"div\",\n      { style: S.statusBar },\n      React.createElement(\"span\", null, \"🎨 tailwind-styled-v4 DevTools\"),\n      React.createElement(\n        \"span\",\n        { style: { opacity: 0.6, fontSize: \"10px\" } },\n        state.pinned\n          ? \"Click to unpin\"\n          : isInspecting\n            ? \"Hover to inspect · Click to pin · 1-6 switch panel · Esc close\"\n            : \"Ctrl+Shift+D close · 1-6 switch panel\"\n      )\n    )\n  )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Styles\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst S = {\n  root: {\n    position: \"fixed\" as const,\n    inset: 0,\n    zIndex: 2147483647,\n    pointerEvents: \"none\" as const,\n    fontFamily: \"ui-monospace, 'JetBrains Mono', monospace\",\n    fontSize: \"12px\",\n  },\n  highlight: {\n    position: \"absolute\" as const,\n    borderRadius: \"3px\",\n    outline: \"2px solid #3b82f6\",\n    outlineOffset: \"1px\",\n    background: \"rgba(59,130,246,0.08)\",\n    pointerEvents: \"none\" as const,\n    transition: \"all 0.1s ease\",\n    zIndex: 2147483646,\n  },\n  panel: {\n    position: \"fixed\" as const,\n    width: 320,\n    maxHeight: 480,\n    background: \"#0f0f0f\",\n    border: \"1px solid #27272a\",\n    borderRadius: \"10px\",\n    boxShadow: \"0 8px 32px rgba(0,0,0,0.8)\",\n    pointerEvents: \"all\" as const,\n    zIndex: 2147483647,\n    userSelect: \"text\" as const,\n    display: \"flex\",\n    flexDirection: \"column\" as const,\n  },\n  header: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"space-between\",\n    padding: \"8px 12px 6px\",\n    borderBottom: \"1px solid #1f1f1f\",\n    flexShrink: 0,\n  },\n  tabBar: {\n    display: \"flex\",\n    borderBottom: \"1px solid #18181b\",\n    flexShrink: 0,\n    overflowX: \"auto\" as const,\n  },\n  tab: {\n    background: \"none\",\n    border: \"none\",\n    cursor: \"pointer\",\n    fontSize: \"10px\",\n    padding: \"5px 8px\",\n    whiteSpace: \"nowrap\" as const,\n    fontFamily: \"inherit\",\n    transition: \"color 0.1s\",\n    pointerEvents: \"all\" as const,\n  },\n  scrollArea: {\n    overflowY: \"auto\" as const,\n    flex: 1,\n  },\n  emptyPanel: {\n    padding: \"24px 12px\",\n    color: \"#71717a\",\n    fontSize: \"12px\",\n    textAlign: \"center\" as const,\n    lineHeight: 1.6,\n  },\n  componentName: {\n    color: \"#60a5fa\",\n    fontWeight: \"bold\" as const,\n    fontSize: \"13px\",\n  },\n  headerActions: {\n    display: \"flex\",\n    alignItems: \"center\",\n    gap: \"6px\",\n  },\n  pinBadge: { color: \"#fbbf24\", fontSize: \"10px\" },\n  closeBtn: {\n    background: \"none\",\n    border: \"none\",\n    color: \"#71717a\",\n    cursor: \"pointer\",\n    fontSize: \"14px\",\n    lineHeight: 1,\n    padding: \"2px 4px\",\n    pointerEvents: \"all\" as const,\n  },\n  section: {\n    padding: \"8px 12px\",\n    borderBottom: \"1px solid #18181b\",\n  },\n  sectionTitle: {\n    color: \"#52525b\",\n    fontSize: \"10px\",\n    textTransform: \"uppercase\" as const,\n    letterSpacing: \"0.08em\",\n    marginBottom: \"6px\",\n  },\n  row: {\n    display: \"flex\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    marginBottom: \"3px\",\n  },\n  varKey: { color: \"#a1a1aa\" },\n  varValue: { color: \"#34d399\", fontWeight: \"bold\" as const },\n  classGrid: {\n    display: \"flex\",\n    flexWrap: \"wrap\" as const,\n    gap: \"4px\",\n  },\n  classChip: {\n    background: \"#18181b\",\n    border: \"1px solid #27272a\",\n    borderRadius: \"4px\",\n    padding: \"2px 6px\",\n    color: \"#e4e4e7\",\n    cursor: \"default\",\n    fontSize: \"11px\",\n  },\n  copyBtn: {\n    display: \"block\",\n    width: \"100%\",\n    background: \"none\",\n    border: \"none\",\n    borderTop: \"1px solid #18181b\",\n    color: \"#52525b\",\n    cursor: \"pointer\",\n    padding: \"8px 12px\",\n    textAlign: \"left\" as const,\n    fontSize: \"11px\",\n    pointerEvents: \"all\" as const,\n    fontFamily: \"inherit\",\n  },\n  statusBar: {\n    position: \"fixed\" as const,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    background: \"#1e3a5f\",\n    color: \"#93c5fd\",\n    fontSize: \"11px\",\n    padding: \"4px 12px\",\n    display: \"flex\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    pointerEvents: \"all\" as const,\n    zIndex: 2147483647,\n  },\n  toggleBtn: {\n    position: \"fixed\" as const,\n    bottom: 12,\n    right: 12,\n    width: 36,\n    height: 36,\n    borderRadius: \"50%\",\n    background: \"#1e3a5f\",\n    border: \"1px solid #3b82f6\",\n    color: \"white\",\n    cursor: \"pointer\",\n    fontSize: \"16px\",\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    zIndex: 2147483647,\n    boxShadow: \"0 2px 8px rgba(0,0,0,0.4)\",\n    pointerEvents: \"all\" as const,\n  },\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function DevToolsProvider(): React.ReactElement | null {\n  if (process.env.NODE_ENV === \"production\") return null\n  return React.createElement(TwDevTools)\n}\n\n// Export shared trace utilities for reuse across CLI, dashboard, and devtools\nexport type { TraceSnapshot, TraceSummary } from \"@tailwind-styled/shared\"\nexport {\n  getHealthColor,\n  getModeColor,\n  formatMemory,\n  formatDuration,\n  getBuildTimeColor,\n  getMemoryColor,\n  getPipelinePercentages,\n}\n\n// ── Class Inspector — reusable surface (execution-log requirement) ──────────\nexport {\n  fetchClassInspection,\n  formatClassInspectionCli,\n  formatClassInspectionJson,\n  type ClassInspectResult,\n  type InspectorFetchOptions,\n} from \"./classInspector\"\n","/**\n * Class Inspector — reusable surface inspection untuk DevTools.\n * Menggunakan inspectClass() dari @tailwind-styled/engine.\n *\n * Dipakai oleh:\n * - DevTools TracePanel → class detail panel\n * - CLI `tw why <class>` → terminal output\n * - Dashboard `/inspect?class=` endpoint\n *\n * Surface ini reusable sesuai requirement dari execution-log.\n */\n\nexport interface ClassInspectResult {\n  className: string\n  css: string\n  properties: Array<{ property: string; value: string }>\n  conflicts: string[]\n  usedIn: string[]\n  risk: \"low\" | \"medium\" | \"high\"\n  bundleBytes: number\n  fetchedAt: number\n}\n\nexport interface InspectorFetchOptions {\n  /** Dashboard base URL (default: http://localhost:7421) */\n  baseUrl?: string\n  /** Timeout ms (default: 3000) */\n  timeoutMs?: number\n}\n\n/**\n * Fetch inspection data untuk sebuah class dari dashboard server.\n * Dashboard server pakai inspectClass() dari engine secara internal.\n *\n * @example\n * // Di DevTools panel:\n * const result = await fetchClassInspection(\"flex\")\n * console.log(result.properties) // [{ property: \"display\", value: \"flex\" }]\n * console.log(result.usedIn)     // [\"src/Button.tsx\"]\n */\nexport async function fetchClassInspection(\n  className: string,\n  opts: InspectorFetchOptions = {}\n): Promise<ClassInspectResult | null> {\n  const { baseUrl = \"http://localhost:7421\", timeoutMs = 3000 } = opts\n\n  const url = `${baseUrl}/inspect?class=${encodeURIComponent(className)}`\n\n  try {\n    const res = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) })\n    if (!res.ok) return null\n    const data = await res.json()\n    return {\n      className,\n      css: data.css ?? \"\",\n      properties: data.properties ?? [],\n      conflicts: data.conflicts ?? [],\n      usedIn: data.usedIn ?? [],\n      risk: data.risk ?? \"low\",\n      bundleBytes: data.bundleBytes ?? 0,\n      fetchedAt: Date.now(),\n    }\n  } catch {\n    return null\n  }\n}\n\n/** Format inspection result untuk CLI terminal output */\nexport function formatClassInspectionCli(result: ClassInspectResult): string {\n  const lines: string[] = [\n    `\\n  Class: .${result.className}`,\n    `  Risk:  ${result.risk}`,\n    ``,\n  ]\n\n  if (result.properties.length > 0) {\n    lines.push(`  CSS Properties:`)\n    for (const p of result.properties) {\n      lines.push(`    ${p.property}: ${p.value}`)\n    }\n    lines.push(``)\n  }\n\n  if (result.usedIn.length > 0) {\n    lines.push(`  Used in ${result.usedIn.length} file(s):`)\n    for (const f of result.usedIn.slice(0, 5)) {\n      lines.push(`    ${f}`)\n    }\n    if (result.usedIn.length > 5) {\n      lines.push(`    ... and ${result.usedIn.length - 5} more`)\n    }\n    lines.push(``)\n  } else {\n    lines.push(`  ⚠️  Not found in workspace scan (dead code?)`)\n    lines.push(``)\n  }\n\n  if (result.bundleBytes > 0) {\n    lines.push(`  Bundle contribution: ~${result.bundleBytes}B`)\n  }\n\n  if (result.conflicts.length > 0) {\n    lines.push(`  Conflicts: ${result.conflicts.join(\", \")}`)\n  }\n\n  return lines.join(\"\\n\")\n}\n\n/** Format for JSON output (CLI --json flag) */\nexport function formatClassInspectionJson(result: ClassInspectResult): string {\n  return JSON.stringify(result, null, 2)\n}\n"],"mappings":";;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B,IAIM,aAIO;AARb;AAAA;AAAA;AAIA,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AAIhD,IAAM,aAA6B,4BAAY;AAAA;AAAA;;;AC6C/C,SAAS,eAAe,QAAyB;AACtD,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAKO,SAAS,aAAa,MAA8B;AACzD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAKO,SAAS,aAAa,OAAuB;AAClD,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK,MAAM,KAAK,CAAC;AAC7C,MAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC5D,SAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC9C;AAKO,SAAS,eAAe,IAA2B;AACxD,MAAI,OAAO,KAAM,QAAO;AACxB,MAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,SAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAClC;AAqBO,SAAS,kBAAkB,IAA2B;AAC3D,MAAI,OAAO,KAAM,QAAO;AACxB,MAAI,KAAK,IAAM,QAAO;AACtB,MAAI,KAAK,IAAK,QAAO;AACrB,SAAO;AACT;AAKO,SAAS,eAAe,IAAoB;AACjD,MAAI,KAAK,IAAK,QAAO;AACrB,MAAI,KAAK,IAAK,QAAO;AACrB,SAAO;AACT;AA4BO,SAAS,uBAAuB,SAIrC;AACA,QAAM,OAAO,QAAQ,UAAU;AAC/B,QAAM,UAAU,QAAQ,aAAa;AACrC,QAAM,UAAU,QAAQ,aAAa;AACrC,QAAM,QAAQ,OAAO,UAAU;AAE/B,MAAI,UAAU,GAAG;AACf,WAAO,EAAE,SAAS,GAAG,YAAY,GAAG,YAAY,EAAE;AAAA,EACpD;AAEA,SAAO;AAAA,IACL,SAAU,OAAO,QAAS;AAAA,IAC1B,YAAa,UAAU,QAAS;AAAA,IAChC,YAAa,UAAU,QAAS;AAAA,EAClC;AACF;AAxLA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,kBAAkB;AAC3B,OAAO,QAAQ;AACf,OAAOA,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,qBAAqB;AAJ9B,IAgMM;AAhMN;AAAA;AAAA;AAAA;AA6VA;AA7JA,IAAM,WAAW;AAAA,MACf,OAAO,eAAe,cAClB,UAAU,UAAU,KACnB,YAAY,OAAO;AAAA,IAC1B;AAAA;AAAA;;;ACpMA;;;ACAA;AAoBA;AADA,OAAO,SAAS,aAAa,WAAW,QAAQ,gBAAgB;;;ACnBhE;AAwCA,eAAsB,qBACpB,WACA,OAA8B,CAAC,GACK;AACpC,QAAM,EAAE,UAAU,yBAAyB,YAAY,IAAK,IAAI;AAEhE,QAAM,MAAM,GAAG,OAAO,kBAAkB,mBAAmB,SAAS,CAAC;AAErE,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,YAAY,QAAQ,SAAS,EAAE,CAAC;AACvE,QAAI,CAAC,IAAI,GAAI,QAAO;AACpB,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,WAAO;AAAA,MACL;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,YAAY,KAAK,cAAc,CAAC;AAAA,MAChC,WAAW,KAAK,aAAa,CAAC;AAAA,MAC9B,QAAQ,KAAK,UAAU,CAAC;AAAA,MACxB,MAAM,KAAK,QAAQ;AAAA,MACnB,aAAa,KAAK,eAAe;AAAA,MACjC,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,yBAAyB,QAAoC;AAC3E,QAAM,QAAkB;AAAA,IACtB;AAAA,YAAe,OAAO,SAAS;AAAA,IAC/B,YAAY,OAAO,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,SAAS,GAAG;AAChC,UAAM,KAAK,mBAAmB;AAC9B,eAAW,KAAK,OAAO,YAAY;AACjC,YAAM,KAAK,OAAO,EAAE,QAAQ,KAAK,EAAE,KAAK,EAAE;AAAA,IAC5C;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,UAAM,KAAK,aAAa,OAAO,OAAO,MAAM,WAAW;AACvD,eAAW,KAAK,OAAO,OAAO,MAAM,GAAG,CAAC,GAAG;AACzC,YAAM,KAAK,OAAO,CAAC,EAAE;AAAA,IACvB;AACA,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,YAAM,KAAK,eAAe,OAAO,OAAO,SAAS,CAAC,OAAO;AAAA,IAC3D;AACA,UAAM,KAAK,EAAE;AAAA,EACf,OAAO;AACL,UAAM,KAAK,0DAAgD;AAC3D,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,OAAO,cAAc,GAAG;AAC1B,UAAM,KAAK,2BAA2B,OAAO,WAAW,GAAG;AAAA,EAC7D;AAEA,MAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,UAAM,KAAK,gBAAgB,OAAO,UAAU,KAAK,IAAI,CAAC,EAAE;AAAA,EAC1D;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAGO,SAAS,0BAA0B,QAAoC;AAC5E,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;ADhDA,SAAS,YAAY,QAA4D;AAC/E,MAAI,CAAC,OAAQ,QAAO,EAAE,MAAM,WAAW,SAAS,CAAC,EAAE;AACnD,QAAM,WAAW,OAAO,QAAQ,GAAG;AACnC,MAAI,aAAa,GAAI,QAAO,EAAE,MAAM,QAAQ,SAAS,CAAC,EAAE;AACxD,QAAM,OAAO,OAAO,MAAM,GAAG,QAAQ;AACrC,QAAM,UAAU,OACb,MAAM,WAAW,CAAC,EAClB,MAAM,KAAK,EACX,OAAO,OAAO;AACjB,SAAO,EAAE,MAAM,QAAQ;AACzB;AAEA,SAAS,iBAAiB,GAA0C;AAClE,MAAI,CAAC,EAAG,QAAO,CAAC;AAChB,MAAI;AACF,WAAO,KAAK,MAAM,CAAC;AAAA,EACrB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,qBAAqB,IAAqC;AACjE,QAAM,MAAM,EAAE,GAA6B;AAC3C,SAAO,IAAI,IAAI;AACb,QAAI,IAAI,GAAG,SAAS,GAAI,QAAO,IAAI;AACnC,QAAI,KAAK,IAAI,GAAG;AAAA,EAClB;AACA,SAAO;AACT;AAEA,SAAS,aAAa,SAA2C;AAC/D,QAAM,WAAW,OAAO;AACxB,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,QAAM,MAA8B,CAAC;AACrC,aAAW,OAAO,SAAS;AACzB,QAAI,SAAS,GAAG,EAAG,KAAI,GAAG,IAAI,SAAS,GAAG;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,IAAyC;AAChE,QAAM,SAAiC,CAAC;AACxC,aAAW,QAAQ,GAAG,YAAY;AAChC,QAAI,KAAK,KAAK,WAAW,OAAO,GAAG;AACjC,aAAO,KAAK,KAAK,QAAQ,SAAS,EAAE,CAAC,IAAI,KAAK;AAAA,IAChD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cAAc,IAA2B;AAChD,QAAM,WAAW,OAAO;AACxB,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,aAAW,CAAC,IAAI,KAAK,KAAK,UAAU;AAClC,QAAI,GAAG,UAAU,SAAS,EAAE,EAAG,QAAO,MAAM;AAAA,EAC9C;AACA,SAAO,CAAC;AACV;AAEA,SAAS,gBAAgB,IAA2B;AAClD,QAAM,WAAW,OAAO;AACxB,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,aAAW,CAAC,IAAI,KAAK,KAAK,UAAU;AAClC,QAAI,GAAG,UAAU,SAAS,EAAE,GAAG;AAC7B,aAAO,MAAM,YAAY,IAAI,CAAC,OAAO,GAAG,QAAQ;AAAA,IAClD;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAMA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,UAAU;AAAA,EACV,QAAQ;AACV,GAIG;AACD,MAAI,CAAC,WAAW;AACd,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG,6BAA6B;AAAA,IACxF;AAAA,EACF;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA;AAAA,IAEtB,OAAO,KAAK,UAAU,YAAY,EAAE,SAAS,KAC3C,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,UAAU;AAAA,MAChE,OAAO,QAAQ,UAAU,YAAY,EAAE;AAAA,QAAI,CAAC,CAAC,GAAG,CAAC,MAC/C,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI;AAAA,UACvB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC;AAAA,UAClD,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,OAAO,KAAK,UAAU,YAAY,EAAE,SAAS,KAC3C,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,mBAAmB;AAAA,MACzE,OAAO,QAAQ,UAAU,YAAY,EAAE;AAAA,QAAI,CAAC,CAAC,GAAG,CAAC,MAC/C,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI;AAAA,UACvB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,OAAO,UAAU,EAAE,GAAG,QAAQ,CAAC,EAAE;AAAA,UACrF,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,OAAO,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG;AAAA,QACtF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,UAAU,WAAW,SAAS,KAC5B,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,iBAAiB;AAAA,MACvE,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,UAAU;AAAA,QACrB,UAAU,WAAW;AAAA,UAAI,CAAC,MACxB,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,KAAK;AAAA,cACL,OAAO;AAAA,gBACL,GAAG,EAAE;AAAA,gBACL,YAAY,UAAU,aAAa,CAAC,MAAM,SAAS,YAAY;AAAA,gBAC/D,aAAa,UAAU,aAAa,CAAC,MAAM,SAAS,YAAY;AAAA,cAClE;AAAA,YACF;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,UAAU,aAAa,SAAS,KAC9B,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,uBAAuB;AAAA,MAC7E,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,UAAU;AAAA,QACrB,UAAU,aAAa;AAAA,UAAI,CAAC,OAC1B,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,KAAK,IAAI,OAAO,EAAE,GAAG,EAAE,WAAW,OAAO,UAAU,EAAE;AAAA,YACvD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,UAAU,UAAU,SAAS,KAC3B,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS;AAAA,MAC/D,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,UAAU;AAAA,QACrB,UAAU,UAAU;AAAA,UAAI,CAAC,QACvB,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,KAAK,KAAK,OAAO,EAAE,WAAW,OAAO,UAAU,UAAU,GAAG,EAAE;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,OAAO,EAAE;AAAA,QACT,SAAS,MAAM;AACb,oBAAU,WAAW;AAAA,YACnB,KAAK;AAAA,cACH;AAAA,gBACE,WAAW,UAAU;AAAA,gBACrB,UAAU,UAAU;AAAA,gBACpB,QAAQ,UAAU;AAAA,gBAClB,SAAS,UAAU;AAAA,cACrB;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,aAAa;AACpB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAgB,CAAC,CAAC;AAEhD,YAAU,MAAM;AACd,UAAM,UAAU,MAAM;AACpB,YAAM,MAAM,OAAO;AACnB,iBAAW,MAAM,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAAA,IAChD;AACA,YAAQ;AACR,UAAM,WAAW,YAAY,SAAS,GAAI;AAC1C,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,MAAM,cAAc,MAAM,IAAI;AAAA,MAC9B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,KAAK,UAAU,OAAO,EAAE;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA,IACtB,QAAQ;AAAA,MAAI,CAAC,UACX,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,KAAK,MAAM,IAAI,OAAO,EAAE,QAAQ;AAAA,QAClC,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,aAAa;AAAA,UACxB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,MAAM,IAAI,YAAY,CAAC;AAAA,UACpF,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,YAAY,OAAO,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,YACnE,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,UAAU;AAAA,UACrB,MAAM,OAAO;AAAA,YAAI,CAAC,MAChB,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,EAAE,WAAW,OAAO,UAAU,EAAE;AAAA,cACtD,QAAQ,CAAC;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,WAAW,MAAM,EAAE;AAAA,UACxC,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,GAAG,EAAE;AAAA,gBACL,cAAc;AAAA,gBACd,OAAO,MAAM,cAAc,YAAY;AAAA,cACzC;AAAA,YACF;AAAA,YACA,MAAM,cAAc,wBAAmB;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,iBAAiB;AACxB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAgB,CAAC,CAAC;AAEhD,YAAU,MAAM;AACd,UAAM,UAAU,MAAM;AACpB,YAAM,MAAM,OAAO;AACnB,iBAAW,MAAM,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAAA,IAChD;AACA,YAAQ;AACR,UAAM,WAAW,YAAY,SAAS,GAAI;AAC1C,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,MAAM,cAAc,MAAM,IAAI;AAAA,MAC9B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,KAAK,UAAU,OAAO,EAAE;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA,IACtB,QAAQ;AAAA,MAAI,CAAC,UACX,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,KAAK,MAAM,IAAI,OAAO,EAAE,QAAQ;AAAA,QAClC,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,aAAa;AAAA,UACxB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,MAAM,IAAI,YAAY,CAAC;AAAA,UACpF,MAAM,iBACJ,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,YAAY,OAAO,OAAO,UAAU,EAAE;AAAA,YACjD,IAAI,MAAM,aAAa;AAAA,UACzB;AAAA,UACF,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,YAAY,OAAO,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,YACnE,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM,YAAY;AAAA,YAChB,CAAC,IAA2D,MAC5D,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,cAAc,MAAM,EAAE;AAAA,cACnD,MAAM;AAAA,gBACJ;AAAA,gBACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,gBAChD,UAAK,GAAG,QAAQ;AAAA,cAClB;AAAA,cACA,MAAM;AAAA,gBACJ;AAAA,gBACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,gBAChD,GAAG;AAAA,cACL;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,cAAc;AACrB,QAAM,CAAC,QAAQ,UAAU,IAAI,SAAiC,CAAC,CAAC;AAEhE,YAAU,MAAM;AACd,UAAM,SAAS,OAAO;AACtB,QAAI,CAAC,OAAQ;AAEb,eAAW,OAAO,UAAU,CAAC;AAC7B,QAAI,CAAC,OAAO,UAAW;AACvB,UAAM,QAAQ,OAAO,UAAU,CAAC,MAA8B,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;AAClF,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,OAAO,QAAQ,MAAM;AAErC,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG,4BAA4B;AAAA,MACrF,MAAM,cAAc,MAAM,IAAI;AAAA,MAC9B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,KAAK,UAAU,OAAO,EAAE;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA,IACtB,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,SAAS,gBAAgB,OAAO,UAAU,EAAE;AAAA,MAC1E;AAAA,IACF;AAAA,IACA,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AAC7B,YAAM,UAAU,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,KAAK,KAAK,MAAM,WAAW,KAAK;AAC1F,aAAO,MAAM;AAAA,QACX;AAAA,QACA,EAAE,KAAK,MAAM,OAAO,EAAE,GAAG,EAAE,KAAK,SAAS,YAAY,cAAc,oBAAoB,EAAE;AAAA,QACzF,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,MAAM,EAAE;AAAA,UAC/D,WACE,MAAM,cAAc,OAAO;AAAA,YACzB,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,YAAY;AAAA,YACd;AAAA,UACF,CAAC;AAAA,UACH,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE,GAAG,IAAI;AAAA,QACrF;AAAA,QACA,UACI,MAAM,cAAc,SAAS;AAAA,UAC3B,MAAM;AAAA,UACN,cAAc,MAAM,WAAW,GAAG,IAAI,QAAQ;AAAA,UAC9C,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,UAAU,CAAC,MAA2C;AACpD,kBAAM,SAAS,OAAO;AACtB,gBAAI,OAAQ,QAAO,SAAS,MAAM,EAAE,OAAO,KAAK;AAAA,UAClD;AAAA,QACF,CAAC,IACD,MAAM,cAAc,SAAS;AAAA,UAC3B,MAAM;AAAA,UACN,cAAc;AAAA,UACd,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,OAAO;AAAA,YACP,UAAU;AAAA,YACV,SAAS;AAAA,YACT,OAAO;AAAA,YACP,YAAY;AAAA,UACd;AAAA,UACA,QAAQ,CAAC,MAA0C;AACjD,kBAAM,SAAS,OAAO;AACtB,gBAAI,OAAQ,QAAO,SAAS,MAAM,EAAE,OAAO,KAAK;AAAA,UAClD;AAAA,QACF,CAAC;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAMA,SAAS,gBAAgB;AACvB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,SAAS,UAAU,IAAI,SAKpB,IAAI;AAEd,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAyC,IAAI;AACvF,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,QAAM,CAAC,cAAc,eAAe,IAAI,SAAwB,IAAI;AAEpE,QAAM,oBAAoB,YAAY,YAAY;AAChD,uBAAmB,IAAI;AACvB,oBAAgB,IAAI;AACpB,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,iCAAiC;AAAA,QACvD,QAAQ,YAAY,QAAQ,GAAI;AAAA,MAClC,CAAC;AACD,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AACjD,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,uBAAiB,IAAI;AAAA,IACvB,SAAS,GAAY;AACnB,YAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD;AAAA,QACE,IAAI,SAAS,iBAAiB,KAAK,IAAI,SAAS,cAAc,IAC1D,qDACA;AAAA,MACN;AACA,uBAAiB,IAAI;AAAA,IACvB,UAAE;AACA,yBAAmB,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,YAAY,MAAM;AAChC,gBAAY,IAAI;AAEhB,eAAW,MAAM;AACf,YAAM,QAAQ,SAAS,iBAAiB,WAAW;AACnD,YAAM,WAAW,oBAAI,IAAsB;AAE3C,iBAAW,MAAM,OAAO;AACtB,cAAM,EAAE,MAAM,QAAQ,KAAK,MAAM;AAC/B,gBAAM,MAAO,GAAmB,QAAQ,MAAM;AAC9C,cAAI,CAAC,IAAK,QAAO,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE;AAC1C,gBAAM,KAAK,IAAI,QAAQ,GAAG;AAC1B,iBAAO;AAAA,YACL,MAAM,MAAM,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAAA,YACnC,SACE,MAAM,IACF,IACG,MAAM,KAAK,CAAC,EACZ,MAAM,KAAK,EACX,OAAO,OAAO,IACjB,CAAC;AAAA,UACT;AAAA,QACF,GAAG;AAEH,cAAM,MAAM,QAAQ,KAAK,EAAE,KAAK,GAAG;AACnC,YAAI,CAAC,SAAS,IAAI,GAAG,EAAG,UAAS,IAAI,KAAK,CAAC,CAAC;AAC5C,iBAAS,IAAI,GAAG,EAAG,KAAK,IAAI;AAAA,MAC9B;AAEA,YAAM,aAAa,MAAM,KAAK,SAAS,QAAQ,CAAC,EAC7C,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,MAAM,SAAS,CAAC,EACtC,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,SAAS,OAAO,MAAM,QAAQ,MAAM,EAAE,EACnE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM,GAAG,EAAE;AAEd,YAAM,WAAW,OAAO;AACxB,YAAM,eAAe,OAAO;AAC5B,YAAM,cAAc,OAAO;AAE3B,iBAAW;AAAA,QACT;AAAA,QACA,YAAY,UAAU,QAAQ;AAAA,QAC9B,gBAAgB,cAAc,QAAQ;AAAA,QACtC,YAAY,OAAO,KAAK,aAAa,YAAY,KAAK,CAAC,CAAC,EAAE;AAAA,MAC5D,CAAC;AACD,kBAAY,KAAK;AAAA,IACnB,GAAG,GAAG;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA,IACtB,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE;AAAA;AAAA,MAGlC,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM;AAAA,UAC9E,SAAS;AAAA,UACT,UAAU;AAAA,QACZ;AAAA,QACA,WAAW,oBAAoB;AAAA,MACjC;AAAA;AAAA,MAGA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,MAAM,EAAE;AAAA,QAC5C,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,UACpD;AAAA,QACF;AAAA,QACA,gBACI,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,YACxD,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,OAAO,UAAU,EAAE;AAAA,cAC7C,cAAc,YAAY,OAAO,GAAG,cAAc,OAAO,OAAO;AAAA,YAClE;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;AAAA,YAC1D,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,OAAO,UAAU,EAAE;AAAA,cAC7C,OAAO,cAAc,cAAc,QAAG;AAAA,YACxC;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,YACxD,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,OAAO,UAAU,EAAE;AAAA,cAC7C,OAAO,cAAc,aAAa,QAAG;AAAA,YACvC;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM;AAAA,YACvD,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,cAChD,OAAO,cAAc,QAAQ,QAAG;AAAA,YAClC;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,GAAG,EAAE;AAAA,gBACL,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,SAAS;AAAA,cACX;AAAA,cACA,SAAS;AAAA,cACT,UAAU;AAAA,YACZ;AAAA,YACA;AAAA,UACF;AAAA,QACF,IACA,eACE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,QAAQ,cAAc,MAAM,EAAE;AAAA,YACrE;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM;AAAA,cAC9E,SAAS;AAAA,cACT,UAAU;AAAA,YACZ;AAAA,YACA,kBAAkB,kBAAkB;AAAA,UACtC;AAAA,QACF,IACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,cAAc;AAAA,cAChB;AAAA,YACF;AAAA,YACA;AAAA,YACA,MAAM,cAAc,MAAM,IAAI;AAAA,YAC9B,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,cAChD;AAAA,YACF;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM;AAAA,cAC9E,SAAS;AAAA,cACT,UAAU;AAAA,YACZ;AAAA,YACA,kBAAkB,kBAAkB;AAAA,UACtC;AAAA,QACF;AAAA,MACR;AAAA;AAAA,MAGA,WACE,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,QAAQ;AAAA,UACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS;AAAA,UAC/D,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,kBAAkB;AAAA,YACnE,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,QAAQ,UAAU,CAAC;AAAA,UAC/E;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,sBAAsB;AAAA,YACvE,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,QAAQ,cAAc,CAAC;AAAA,UACnF;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,IAAI;AAAA,YACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa;AAAA,YAC9D,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,QAAQ,UAAU,CAAC;AAAA,UAC/E;AAAA,QACF;AAAA,QAEA,QAAQ,WAAW,SAAS,IACxB,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,QAAQ;AAAA,UACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,sBAAsB;AAAA,UAC5E,QAAQ,WAAW;AAAA,YAAI,CAAC,GAAG,MACzB,MAAM;AAAA,cACJ;AAAA,cACA,EAAE,KAAK,GAAG,OAAO,EAAE,cAAc,MAAM,EAAE;AAAA,cACzC,MAAM;AAAA,gBACJ;AAAA,gBACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,QAAQ,cAAc,MAAM,EAAE;AAAA,gBACrE,EAAE,MAAM,KAAK,IAAI;AAAA,cACnB;AAAA,cACA,MAAM;AAAA,gBACJ;AAAA,gBACA;AAAA,kBACE,OAAO;AAAA,oBACL,OAAO;AAAA,oBACP,UAAU;AAAA,oBACV,WAAW;AAAA,kBACb;AAAA,gBACF;AAAA,gBACA,EAAE,QAAQ,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,KACtC,EAAE,QAAQ,MAAM,GAAG,EAAE,SAAS,IAAI,QAAQ;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAAA,QACF,IACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,QAAQ;AAAA,UACnB,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAAA,MACN;AAAA,IACJ;AAAA,EACF;AACF;AAMA,IAAM,iBAAiB;AAEvB,SAAS,aAAa;AACpB,QAAM,CAAC,SAAS,UAAU,IAAI,SAA+B,IAAI;AACjE,QAAM,CAAC,SAAS,UAAU,IAAI,SAA0B,CAAC,CAAC;AAC1D,QAAM,CAAC,SAAS,UAAU,IAAI,SAA8B,IAAI;AAChE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,cAAc,OAA8C,IAAI;AAEtE,QAAM,WAAW,YAAY,YAAY;AACvC,gBAAY,IAAI;AAChB,aAAS,IAAI;AACb,QAAI;AACF,YAAM,CAAC,MAAM,MAAM,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC3C,MAAM,GAAG,cAAc,YAAY,EAAE,QAAQ,YAAY,QAAQ,GAAI,EAAE,CAAC;AAAA,QACxE,MAAM,GAAG,cAAc,YAAY,EAAE,QAAQ,YAAY,QAAQ,GAAI,EAAE,CAAC;AAAA,QACxE,MAAM,GAAG,cAAc,YAAY,EAAE,QAAQ,YAAY,QAAQ,GAAI,EAAE,CAAC;AAAA,MAC1E,CAAC;AACD,UAAI,CAAC,KAAK,GAAI,OAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM,EAAE;AAC5D,UAAI,CAAC,KAAK,GAAI,OAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM,EAAE;AAC5D,UAAI,CAAC,KAAK,GAAI,OAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM,EAAE;AAE5D,YAAM,IAAI,MAAM,KAAK,KAAK;AAC1B,YAAM,IAAI,MAAM,KAAK,KAAK;AAC1B,YAAM,IAAI,MAAM,KAAK,KAAK;AAE1B,iBAAW,CAAC;AACZ,iBAAW,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AACpC,iBAAW,CAAC;AAAA,IACd,SAAS,GAAY;AACnB,YAAM,MAAM,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AACrD;AAAA,QACE,IAAI,SAAS,iBAAiB,KAAK,IAAI,SAAS,cAAc,IAC1D,qDACA;AAAA,MACN;AAAA,IACF,UAAE;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,aAAa;AACf,eAAS;AACT,kBAAY,UAAU,YAAY,UAAU,GAAI;AAAA,IAClD,WAAW,YAAY,SAAS;AAC9B,oBAAc,YAAY,OAAO;AACjC,kBAAY,UAAU;AAAA,IACxB;AACA,WAAO,MAAM;AACX,UAAI,YAAY,QAAS,eAAc,YAAY,OAAO;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,aAAa,QAAQ,CAAC;AAG1B,QAAM,qBAAqB,MAAM;AAC/B,UAAM,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;AACnE,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,OAAO;AAAA,YACP,UAAU;AAAA,YACV,WAAW;AAAA,YACX,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,MAAM,KAAK,IAAI,GAAG,IAAI;AAC5B,UAAM,aAAa;AACnB,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,aAAa,KAAK,MAAM,IAAI,CAAC;AAErE,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,QACE,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,KAAK,IAAI,CAAC,GAAG,MAAM;AACjB,cAAM,IAAI,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAO,IAAI,MAAO,EAAE,CAAC,IAAI;AAC9D,eAAO,MAAM,cAAc,OAAO;AAAA,UAChC,KAAK;AAAA,UACL,OAAO;AAAA,YACL,OAAO,GAAG,QAAQ;AAAA,YAClB,QAAQ,GAAG,CAAC;AAAA,YACZ,YAAY,kBAAkB,CAAC;AAAA,YAC/B,cAAc;AAAA,YACd,SAAS,MAAM,KAAK,SAAS,IAAI,IAAI;AAAA,YACrC,YAAY;AAAA,UACd;AAAA,UACA,OAAO,GAAG,CAAC;AAAA,QACb,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF;AAGA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,EAAE,SAAS,YAAY,WAAW,IAAI,uBAAuB,OAAO;AAC1E,UAAM,OAAO,QAAQ,UAAU;AAC/B,UAAM,UAAU,QAAQ,aAAa;AACrC,UAAM,UAAU,QAAQ,aAAa;AAErC,QAAI,YAAY,KAAK,eAAe,KAAK,eAAe,EAAG,QAAO;AAElE,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,QACpD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,QACA,UAAU,KACR,MAAM,cAAc,OAAO;AAAA,UACzB,OAAO,EAAE,OAAO,GAAG,OAAO,KAAK,YAAY,WAAW,UAAU,MAAM;AAAA,UACtE,OAAO,SAAS,IAAI;AAAA,QACtB,CAAC;AAAA,QACH,aAAa,KACX,MAAM,cAAc,OAAO;AAAA,UACzB,OAAO,EAAE,OAAO,GAAG,UAAU,KAAK,YAAY,WAAW,UAAU,MAAM;AAAA,UACzE,OAAO,YAAY,OAAO;AAAA,QAC5B,CAAC;AAAA,QACH,aAAa,KACX,MAAM,cAAc,OAAO;AAAA,UACzB,OAAO,EAAE,OAAO,GAAG,UAAU,KAAK,YAAY,WAAW,UAAU,MAAM;AAAA,UACzE,OAAO,YAAY,OAAO;AAAA,QAC5B,CAAC;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,QAAQ,KAAK,QAAQ,UAAU,OAAO,EAAE;AAAA,QAC5D,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,QAAQ,IAAI,IAAI;AAAA,QAC7E,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,WAAW,OAAO,IAAI;AAAA,QACnF,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,UAAU,EAAE,GAAG,WAAW,OAAO,IAAI;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,SAAS,CAAC,SAAS;AACrB,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE;AAAA,QAC7B,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,QAAQ,cAAc,MAAM,EAAE;AAAA,UACrE;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM;AAAA,YAC9E,SAAS;AAAA,YACT,UAAU;AAAA,UACZ;AAAA,UACA,WAAW,kBAAkB;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,SAAS;AACZ,WAAO,MAAM;AAAA,MACX;AAAA,MACA,EAAE,OAAO,EAAE,WAAW;AAAA,MACtB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE;AAAA,QAC7B,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,cACL,OAAO;AAAA,cACP,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA;AAAA,UACA,MAAM,cAAc,MAAM,IAAI;AAAA,UAC9B,MAAM;AAAA,YACJ;AAAA,YACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO,EAAE,GAAG,EAAE,SAAS,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM;AAAA,YAC9E,SAAS;AAAA,YACT,UAAU;AAAA,UACZ;AAAA,UACA,WAAW,kBAAkB;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,WAAW;AAAA;AAAA,IAGtB,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE;AAAA,MACtC,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,MAAM,EAAE;AAAA,UAC/D,MAAM,cAAc,OAAO;AAAA,YACzB,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,YAAY,aAAa,QAAQ,IAAI;AAAA,cACrC,WAAW,WAAW,aAAa,QAAQ,IAAI,CAAC;AAAA,YAClD;AAAA,UACF,CAAC;AAAA,UACD,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,OAAO,aAAa,QAAQ,IAAI;AAAA,gBAChC,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,YACA,QAAQ,QAAQ;AAAA,UAClB;AAAA,QACF;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,SAAS,QAAQ,KAAK,MAAM,EAAE;AAAA,UACzC,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,YAAY,cAAc,YAAY;AAAA,gBACtC,QAAQ,aAAa,cAAc,YAAY,SAAS;AAAA,gBACxD,cAAc;AAAA,gBACd,OAAO,cAAc,YAAY;AAAA,gBACjC,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,eAAe;AAAA,cACjB;AAAA,cACA,SAAS,MAAM,eAAe,CAAC,WAAW;AAAA,cAC1C,OAAO,cAAc,sBAAsB;AAAA,YAC7C;AAAA,YACA,cAAc,gBAAW;AAAA,UAC3B;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO;AAAA,gBACL,YAAY;AAAA,gBACZ,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,UAAU;AAAA,gBACV,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,eAAe;AAAA,cACjB;AAAA,cACA,SAAS;AAAA,cACT,UAAU;AAAA,cACV,OAAO;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,WACE,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE,GAAG,QAAQ;AAAA,MAC1F,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ;AAAA,QACzD,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,eAAe,QAAQ,QAAQ,MAAM,GAAG,YAAY,MAAM,EAAE;AAAA,UAC9E,QAAQ,QAAQ,UAAU;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,QAAQ,QAAQ,UACd,QAAQ,OAAO,OAAO,SAAS,KAC/B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,WAAW,MAAM,EAAE;AAAA,QAC9B,QAAQ,OAAO,OAAO;AAAA,UAAI,CAAC,OAAO,MAChC,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,KAAK;AAAA,cACL,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,OACE,MAAM,aAAa,SACf,YACA,MAAM,aAAa,WACjB,YACA;AAAA,gBACR,cAAc;AAAA,cAChB;AAAA,YACF;AAAA,YACA,UAAK,MAAM,OAAO;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAAA;AAAA,IAGF,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,QACpD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,QACxD,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,cACL,GAAG,EAAE;AAAA,cACL,OAAO,kBAAkB,QAAQ,OAAO;AAAA,YAC1C;AAAA,UACF;AAAA,UACA,QAAQ,YAAY,OAAO,GAAG,QAAQ,OAAO,OAAO;AAAA,QACtD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;AAAA,QAC1D,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,QAAQ,cAAc,QAAG,CAAC;AAAA,MACtF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,QACxD,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,QAAQ,aAAa,QAAG,CAAC;AAAA,MACrF;AAAA,MACA,QAAQ,aAAa,QACnB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK;AAAA,QACtD,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,OAAO,UAAU,EAAE;AAAA,UAC7C,aAAa,QAAQ,QAAQ;AAAA,QAC/B;AAAA,MACF;AAAA,IACJ;AAAA;AAAA,IAGA,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,kBAAkB,CAAC;AAAA;AAAA,KAGnE,QAAQ,mBAAmB,UAAa,QAAQ,qBAAqB,WACpE,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,QACpD;AAAA,MACF;AAAA,MACA,QAAQ,mBAAmB,UACzB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,iBAAiB;AAAA,QAClE,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,cAAc;AAAA,QAC/B;AAAA,MACF;AAAA,MACF,QAAQ,oBAAoB,UAC1B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,kBAAkB;AAAA,QACnE,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,eAAe;AAAA,QAChC;AAAA,MACF;AAAA,MACF,QAAQ,qBAAqB,UAC3B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;AAAA,QAC1D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,gBAAgB;AAAA,QACjC;AAAA,MACF;AAAA,MACF,QAAQ,uBAAuB,UAC7B,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa;AAAA,QAC9D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,kBAAkB;AAAA,QACnC;AAAA,MACF;AAAA,MACF,QAAQ,gBAAgB,UACtB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc;AAAA,QAC/D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,WAAW;AAAA,QAC5B;AAAA,MACF;AAAA,IACJ;AAAA;AAAA,IAGF,QAAQ,YACN,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM,cAAc,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE,GAAG,QAAQ;AAAA,MAC1F,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW;AAAA,QAC5D,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,cACL,OAAO,eAAe,QAAQ,SAAS,QAAQ;AAAA,cAC/C,YAAY;AAAA,YACd;AAAA,UACF;AAAA,UACA,GAAG,QAAQ,SAAS,SAAS,QAAQ,CAAC,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY;AAAA,QAC7D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,GAAG,QAAQ,SAAS,UAAU,QAAQ,CAAC,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK;AAAA,QACtD,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,GAAG,QAAQ,SAAS,IAAI,QAAQ,CAAC,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,WACE,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,QACpD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU;AAAA,QAC3D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,WAAW,iBAAiB,QAAG;AAAA,QAChD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;AAAA,QACxD,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,WAAW,cAAc,QAAG;AAAA,QAC7C;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;AAAA,QAC1D,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,OAAO,EAAE;AAAA,UAChD,OAAO,QAAQ,WAAW,gBAAgB,QAAG;AAAA,QAC/C;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,IAAI;AAAA,QACf,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB;AAAA,QACjE,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,YACE,OAAO;AAAA,cACL,QAAQ,QAAQ,OAAO,WAAW,KAAK,MAAM,YAAY;AAAA,cACzD,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,QAAQ,QAAQ,IAAI,QAAQ,MAAM,UAAU,KAAK,QAAQ,CAAC,CAAC,MAAM;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGF,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,QAAQ;AAAA,MACnB,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,cAAc,MAAM,EAAE;AAAA,QACpD,kBAAkB,QAAQ,MAAM;AAAA,MAClC;AAAA,MACA,mBAAmB;AAAA,IACrB;AAAA;AAAA,IAGA,QAAQ,eACN,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,OAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,gBAAgB,IAAI,KAAK,QAAQ,WAAW,EAAE,mBAAmB,CAAC;AAAA,IACpE;AAAA,EACJ;AACF;AAMO,SAAS,aAAwC;AACtD,MAAI,QAAQ,IAAI,aAAa,aAAc,QAAO;AAElD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB;AAAA,IAChD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,EACzB,CAAC;AAED,QAAM,aAAa,OAAuB,IAAI;AAC9C,QAAM,eAAe,MAAM,QAAQ,MAAM,UAAU;AAGnD,YAAU,MAAM;AACd,UAAM,QAAQ,CAAC,MAAqB;AAClC,UAAI,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC5C,UAAE,eAAe;AACjB,iBAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE,MAAM,WAAW,KAAK,EAAE;AAAA,MAC5D;AACA,UAAI,EAAE,QAAQ;AACZ,iBAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,OAAO,QAAQ,OAAO,WAAW,KAAK,EAAE;AACzE,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,YAAY,IAAI,CAAE;AAC9E,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,IAAI,CAAE;AAC1E,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,YAAY,IAAI,CAAE;AAC9E,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,SAAS,IAAI,CAAE;AAC3E,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,WAAW,IAAI,CAAE;AAC7E,UAAI,EAAE,QAAQ,IAAK,UAAS,CAAC,MAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,QAAQ,IAAI,CAAE;AAAA,IAC5E;AACA,WAAO,iBAAiB,WAAW,KAAK;AACxC,WAAO,MAAM,OAAO,oBAAoB,WAAW,KAAK;AAAA,EAC1D,GAAG,CAAC,CAAC;AAGL,QAAM,cAAc;AAAA,IAClB,CAAC,MAAkB;AACjB,UAAI,CAAC,gBAAgB,MAAM,OAAQ;AACnC,YAAM,OAAO,qBAAqB,EAAE,MAAqB;AACzD,UAAI,CAAC,MAAM;AACT,iBAAS,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,MAAM,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ,EAAE,EAAE;AACrF;AAAA,MACF;AACA,YAAM,EAAE,MAAM,QAAQ,IAAI,YAAY,KAAK,QAAQ,MAAM,IAAI;AAC7D,eAAS,CAAC,OAAO;AAAA,QACf,GAAG;AAAA,QACH,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAQ;AAAA,QACvC,WAAW;AAAA,UACT,eAAe;AAAA,UACf,SAAS;AAAA,UACT,MAAM,KAAK,sBAAsB;AAAA,UACjC,WAAW;AAAA,UACX,cAAc,iBAAiB,KAAK,QAAQ,cAAc,IAAI;AAAA,UAC9D,WAAW,aAAa,OAAO;AAAA,UAC/B,cAAc,KAAK;AAAA,UACnB,YAAY,cAAc,IAAI;AAAA,UAC9B,cAAc,gBAAgB,IAAI;AAAA,UAClC,cAAc,gBAAgB,IAAI;AAAA,QACpC;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,IACA,CAAC,cAAc,MAAM,MAAM;AAAA,EAC7B;AAEA,QAAM,UAAU;AAAA,IACd,CAAC,MAAkB;AACjB,UAAI,CAAC,aAAc;AACnB,UAAI,WAAW,SAAS,SAAS,EAAE,MAAqB,EAAG;AAC3D,eAAS,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE;AAAA,IAChE;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AACnB,WAAO,iBAAiB,aAAa,WAAW;AAChD,WAAO,iBAAiB,SAAS,OAAO;AACxC,WAAO,MAAM;AACX,aAAO,oBAAoB,aAAa,WAAW;AACnD,aAAO,oBAAoB,SAAS,OAAO;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,cAAc,aAAa,OAAO,CAAC;AAGvC,MAAI,CAAC,MAAM,MAAM;AACf,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,QACE,SAAS,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,KAAK,EAAE;AAAA,QACrD,OAAO,EAAE;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAA4D;AAAA,IAChE,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,IAClD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,SAAI;AAAA,IACzC,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,IAClD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,IAC5C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,IAChD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC5C;AAEA,SAAO,MAAM;AAAA,IACX;AAAA,IACA,EAAE,OAAO,EAAE,KAAK;AAAA;AAAA,IAGhB,gBACE,MAAM,aACN,MAAM,cAAc,OAAO;AAAA,MACzB,OAAO;AAAA,QACL,GAAG,EAAE;AAAA,QACL,KAAK,MAAM,UAAU,KAAK,MAAM,OAAO;AAAA,QACvC,MAAM,MAAM,UAAU,KAAK,OAAO,OAAO;AAAA,QACzC,OAAO,MAAM,UAAU,KAAK;AAAA,QAC5B,QAAQ,MAAM,UAAU,KAAK;AAAA,MAC/B;AAAA,IACF,CAAC;AAAA;AAAA,IAGH,gBACE,MAAM,aACN,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,OAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAK,MAAM,UAAU,KAAK,MAAM,OAAO,UAAU;AAAA,UACjD,MAAM,MAAM,UAAU,KAAK,OAAO,OAAO;AAAA,UACzC,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,cAAc;AAAA,UACd,eAAe;AAAA,UACf,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,MAAM,UAAU;AAAA,IAClB;AAAA;AAAA,IAGF,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,OACE,MAAM,UAAU,eAAe,MAAM,YACjC;AAAA,UACE,GAAG,EAAE;AAAA,UACL,KAAK,KAAK,IAAI,MAAM,SAAS,IAAI,IAAI,OAAO,cAAc,GAAG;AAAA,UAC7D,MAAM,KAAK,IAAI,MAAM,SAAS,IAAI,IAAI,OAAO,aAAa,GAAG;AAAA,QAC/D,IACA;AAAA,UACE,GAAG,EAAE;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACR;AAAA;AAAA,MAGA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,OAAO;AAAA,QAClB,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,cAAc;AAAA,UACzB,MAAM,aAAa,MAAM,UAAU,cAC/B,MAAM,UAAU,gBAChB;AAAA,QACN;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,EAAE,OAAO,EAAE,cAAc;AAAA,UACzB,MAAM,UAAU,MAAM,cAAc,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,WAAI;AAAA,UACvE,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,OAAO,EAAE;AAAA,cACT,SAAS,MACP,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,OAAO,QAAQ,OAAO,WAAW,KAAK,EAAE;AAAA,YAC3E;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,OAAO;AAAA,QAClB,OAAO;AAAA,UAAI,CAAC,MACV,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,cACE,KAAK,EAAE;AAAA,cACP,OAAO;AAAA,gBACL,GAAG,EAAE;AAAA,gBACL,YAAY,MAAM,UAAU,EAAE,KAAK,YAAY;AAAA,gBAC/C,OAAO,MAAM,UAAU,EAAE,KAAK,YAAY;AAAA,gBAC1C,cAAc,MAAM,UAAU,EAAE,KAAK,sBAAsB;AAAA,cAC7D;AAAA,cACA,SAAS,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE;AAAA,cACtD,OAAO,GAAG,EAAE,KAAK,KAAK,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC;AAAA,YAClE;AAAA,YACA,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,UAAU,eACd,MAAM,cAAc,gBAAgB;AAAA,QAClC,WAAW,MAAM;AAAA,QACjB,UAAU,MAAM;AAAA,QAChB,QAAQ,MAAM;AAAA,MAChB,CAAC;AAAA,MACH,MAAM,UAAU,WAAW,MAAM,cAAc,YAAY,IAAI;AAAA,MAC/D,MAAM,UAAU,eAAe,MAAM,cAAc,gBAAgB,IAAI;AAAA,MACvE,MAAM,UAAU,YAAY,MAAM,cAAc,aAAa,IAAI;AAAA,MACjE,MAAM,UAAU,cAAc,MAAM,cAAc,eAAe,IAAI;AAAA,MACrE,MAAM,UAAU,WAAW,MAAM,cAAc,YAAY,IAAI;AAAA,IACjE;AAAA;AAAA,IAGA,MAAM;AAAA,MACJ;AAAA,MACA,EAAE,OAAO,EAAE,UAAU;AAAA,MACrB,MAAM,cAAc,QAAQ,MAAM,uCAAgC;AAAA,MAClE,MAAM;AAAA,QACJ;AAAA,QACA,EAAE,OAAO,EAAE,SAAS,KAAK,UAAU,OAAO,EAAE;AAAA,QAC5C,MAAM,SACF,mBACA,eACE,4EACA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAMA,IAAM,IAAI;AAAA,EACR,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,cAAc;AAAA,IACd,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,EACP;AAAA,EACA,UAAU,EAAE,OAAO,WAAW,UAAU,OAAO;AAAA,EAC/C,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,eAAe;AAAA,IACf,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AAAA,EACA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACA,QAAQ,EAAE,OAAO,UAAU;AAAA,EAC3B,UAAU,EAAE,OAAO,WAAW,YAAY,OAAgB;AAAA,EAC1D,WAAW;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,EACP;AAAA,EACA,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,UAAU;AAAA,IACV,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AACF;AAMO,SAAS,mBAA8C;AAC5D,MAAI,QAAQ,IAAI,aAAa,aAAc,QAAO;AAClD,SAAO,MAAM,cAAc,UAAU;AACvC;","names":["path","fileURLToPath"]}