{"version":3,"file":"service-CXxFyi7i.mjs","names":["content: string","parsed: unknown","diagnosticMessages: Record<DiagnosticCode, (ctx?: MessageContext) => string>","POSIX_REGEX_SOURCE","utils","scan","constants","utils","parse","START_ANCHOR","opts","DOTS_SLASH","DOT_LITERAL","NO_DOT","QMARK","QMARK_NO_DOT","STAR","value","ONE_CHAR","rest","SLASH_LITERAL","PLUS_LITERAL","NO_DOT_SLASH","NO_DOTS_SLASH","NO_DOTS","source","utils","picomatch","state","err","picomatch","directPaths: string[]","globPatterns: string[]","lines: string[]","errorHints: Partial<Record<BuilderErrorCode, string>>","base: FormattedError","lines: string[]","path: string","element: AcceptableArtifact","moduleExports: Record<string, unknown>","sandbox: CjsSandbox","declarations: string[]","returnEntries: string[]","importLines: string[]","imports","filePath","stack: EvaluationFrame[]","frame: EvaluationFrame | undefined","result","artifacts: Record<string, IntermediateArtifactElement>","_transformSync: TransformSync | undefined","transformSync: TransformSync","cachedGql: unknown","cachedModulePath: string | null","bundledCode: string","metadata: BuilderArtifactElementMetadata","collectImports","imports: ModuleImport[]","collectExports","exports: ModuleExport[]","exports","module","unwrapMethodChains","collectAllDefinitions","getPropertyName","pending: PendingDefinition[]","handledCalls: CallExpression[]","frame: ScopeFrame","anonymousScopeHandle: ScopeHandle | undefined","exportBinding: string | undefined","getLocation","collectImportDiagnostics","diagnostics: ModuleDiagnostic[]","containsGqlIdentifier","getArgumentType","collectCallDiagnostics","checkCallExpression","object","collectClassPropertyDiagnostics","_parseSync: ParseSync | undefined","swcAdapter: AnalyzerAdapter","imports: ModuleImport[]","exports: ModuleExport[]","exports","pending: PendingDefinition[]","handledCalls: ts.CallExpression[]","frame: ScopeFrame","anonymousScopeHandle: ScopeHandle | undefined","exportBinding: string | undefined","diagnostics: ModuleDiagnostic[]","baseExpr","typescriptAdapter: AnalyzerAdapter","inputWithBaseDir: AnalyzeModuleInput","parsed: unknown","envelope: Envelope<V>","serialized: Record<string, Array<[string, Envelope<unknown>]>>","data: PersistedData","xxhashInstance: XXHashAPI | null","fingerprint: FileFingerprint","stats","analysis: ModuleAnalysis","snapshot: DiscoverySnapshot","currentScan: FileScan","nextScan: FileScan | null","scan","entrypoints: ReadonlySet<string>","state: SessionState","options","stats: ModuleLoadStats"],"sources":["../src/schemas/artifact.ts","../src/artifact/loader.ts","../src/ast/common/detection.ts","../../../node_modules/picomatch/lib/constants.js","../../../node_modules/picomatch/lib/utils.js","../../../node_modules/picomatch/lib/scan.js","../../../node_modules/picomatch/lib/parse.js","../../../node_modules/picomatch/lib/picomatch.js","../../../node_modules/picomatch/index.js","../src/utils/glob.ts","../src/discovery/entry-paths.ts","../src/errors.ts","../src/errors/formatter.ts","../src/scheduler/effects.ts","../src/vm/sandbox.ts","../src/intermediate-module/codegen.ts","../src/intermediate-module/registry.ts","../src/intermediate-module/evaluation.ts","../src/internal/graphql-system.ts","../src/artifact/canonical-id-utils.ts","../src/artifact/aggregate.ts","../src/artifact/issue-handler.ts","../src/artifact/builder.ts","../src/ast/common/scope.ts","../src/ast/adapters/swc.ts","../src/ast/adapters/typescript.ts","../src/ast/core.ts","../src/ast/index.ts","../src/cache/memory-cache.ts","../src/cache/entity-cache.ts","../src/schemas/cache.ts","../src/schemas/discovery.ts","../src/discovery/cache.ts","../src/discovery/common.ts","../src/discovery/fingerprint.ts","../src/discovery/discoverer.ts","../src/tracker/file-tracker.ts","../src/session/dependency-validation.ts","../src/session/module-adjacency.ts","../src/session/builder-session.ts","../src/service.ts"],"sourcesContent":["import type { CanonicalId } from \"@soda-gql/common\";\nimport { z } from \"zod\";\nimport type { BuilderArtifactFragment, BuilderArtifactOperation } from \"../artifact/types\";\n\nconst BuilderArtifactElementMetadataSchema = z.object({\n  sourcePath: z.string(),\n  contentHash: z.string(),\n});\n\nconst BuilderArtifactOperationSchema = z.object({\n  id: z.string<CanonicalId>(),\n  type: z.literal(\"operation\"),\n  metadata: BuilderArtifactElementMetadataSchema,\n  prebuild: z.object({\n    operationType: z.enum([\"query\", \"mutation\", \"subscription\"]),\n    operationName: z.string(),\n    schemaLabel: z.string(),\n    document: z.unknown(), // DocumentNode object\n    variableNames: z.array(z.string()),\n    metadata: z.unknown().optional(),\n  }),\n});\n\ndeclare function __validate_BuilderArtifactOperationSchema<\n  _ extends z.infer<typeof BuilderArtifactOperationSchema> = BuilderArtifactOperation,\n>(): never;\n\nconst BuilderArtifactFragmentSchema = z.object({\n  id: z.string<CanonicalId>(),\n  type: z.literal(\"fragment\"),\n  metadata: BuilderArtifactElementMetadataSchema,\n  prebuild: z.object({\n    typename: z.string(),\n    key: z.string().optional(),\n    schemaLabel: z.string(),\n  }),\n});\n\ndeclare function __validate_BuilderArtifactFragmentSchema<\n  _ extends z.infer<typeof BuilderArtifactFragmentSchema> = BuilderArtifactFragment,\n>(): never;\n\nconst BuilderArtifactElementSchema = z.discriminatedUnion(\"type\", [\n  BuilderArtifactOperationSchema,\n  BuilderArtifactFragmentSchema,\n]);\n\nconst BuilderArtifactMetaSchema = z.object({\n  version: z.string(),\n  createdAt: z.string(),\n});\n\nexport const BuilderArtifactSchema = z.object({\n  meta: BuilderArtifactMetaSchema.optional(),\n  elements: z.record(z.string<CanonicalId>(), BuilderArtifactElementSchema),\n  report: z.object({\n    durationMs: z.number(),\n    warnings: z.array(z.string()),\n    stats: z.object({\n      hits: z.number(),\n      misses: z.number(),\n      skips: z.number(),\n    }),\n  }),\n});\n\nexport type BuilderArtifact = z.infer<typeof BuilderArtifactSchema>;\nexport type BuilderArtifactElement = z.infer<typeof BuilderArtifactElementSchema>;\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport { BuilderArtifactSchema } from \"../schemas/artifact\";\nimport type { BuilderArtifact } from \"./types\";\n\n/**\n * Error codes for artifact loading failures.\n */\nexport type ArtifactLoadErrorCode = \"ARTIFACT_NOT_FOUND\" | \"ARTIFACT_PARSE_ERROR\" | \"ARTIFACT_VALIDATION_ERROR\";\n\n/**\n * Error type for artifact loading operations.\n */\nexport type ArtifactLoadError = {\n  readonly code: ArtifactLoadErrorCode;\n  readonly message: string;\n  readonly filePath?: string;\n};\n\n/**\n * Load a pre-built artifact from a JSON file asynchronously.\n *\n * @param path - Absolute path to the artifact JSON file\n * @returns Result with the parsed artifact or an error\n *\n * @example\n * ```ts\n * const result = await loadArtifact(\"/path/to/artifact.json\");\n * if (result.isOk()) {\n *   const artifact = result.value;\n *   // Use artifact...\n * }\n * ```\n */\nexport const loadArtifact = async (path: string): Promise<Result<BuilderArtifact, ArtifactLoadError>> => {\n  if (!existsSync(path)) {\n    return err({\n      code: \"ARTIFACT_NOT_FOUND\",\n      message: `Artifact file not found: ${path}`,\n      filePath: path,\n    });\n  }\n\n  let content: string;\n  try {\n    content = await readFile(path, \"utf-8\");\n  } catch (error) {\n    return err({\n      code: \"ARTIFACT_NOT_FOUND\",\n      message: `Failed to read artifact file: ${error instanceof Error ? error.message : String(error)}`,\n      filePath: path,\n    });\n  }\n\n  return parseAndValidateArtifact(content, path);\n};\n\n/**\n * Load a pre-built artifact from a JSON file synchronously.\n *\n * @param path - Absolute path to the artifact JSON file\n * @returns Result with the parsed artifact or an error\n *\n * @example\n * ```ts\n * const result = loadArtifactSync(\"/path/to/artifact.json\");\n * if (result.isOk()) {\n *   const artifact = result.value;\n *   // Use artifact...\n * }\n * ```\n */\nexport const loadArtifactSync = (path: string): Result<BuilderArtifact, ArtifactLoadError> => {\n  if (!existsSync(path)) {\n    return err({\n      code: \"ARTIFACT_NOT_FOUND\",\n      message: `Artifact file not found: ${path}`,\n      filePath: path,\n    });\n  }\n\n  let content: string;\n  try {\n    content = readFileSync(path, \"utf-8\");\n  } catch (error) {\n    return err({\n      code: \"ARTIFACT_NOT_FOUND\",\n      message: `Failed to read artifact file: ${error instanceof Error ? error.message : String(error)}`,\n      filePath: path,\n    });\n  }\n\n  return parseAndValidateArtifact(content, path);\n};\n\n/**\n * Parse JSON content and validate against BuilderArtifactSchema.\n */\nfunction parseAndValidateArtifact(content: string, filePath: string): Result<BuilderArtifact, ArtifactLoadError> {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(content);\n  } catch (error) {\n    return err({\n      code: \"ARTIFACT_PARSE_ERROR\",\n      message: `Invalid JSON in artifact file: ${error instanceof Error ? error.message : String(error)}`,\n      filePath,\n    });\n  }\n\n  const validated = BuilderArtifactSchema.safeParse(parsed);\n  if (!validated.success) {\n    return err({\n      code: \"ARTIFACT_VALIDATION_ERROR\",\n      message: `Invalid artifact structure: ${validated.error.message}`,\n      filePath,\n    });\n  }\n\n  // Cast to BuilderArtifact since Zod schema validates the structure\n  // but TypeScript can't infer the exact runtime types (e.g., RuntimeOperationInput)\n  return ok(validated.data as BuilderArtifact);\n}\n","/**\n * Shared detection utilities for identifying invalid gql patterns.\n * Used by both TypeScript and SWC adapters, and exported for formatter consumption.\n */\n\nimport type { DiagnosticCode, DiagnosticLocation, DiagnosticSeverity, ModuleDiagnostic } from \"../types\";\n\n// ============================================================================\n// Diagnostic Factory\n// ============================================================================\n\n/**\n * Configuration for creating a diagnostic\n */\nexport type DiagnosticConfig = {\n  readonly code: DiagnosticCode;\n  readonly message: string;\n  readonly location: DiagnosticLocation;\n  readonly context?: Readonly<Record<string, string>>;\n};\n\n/**\n * Create a diagnostic with appropriate severity\n */\nexport const createDiagnostic = (config: DiagnosticConfig): ModuleDiagnostic => ({\n  code: config.code,\n  severity: getSeverity(config.code),\n  message: config.message,\n  location: config.location,\n  context: config.context,\n});\n\n// ============================================================================\n// Severity Classification\n// ============================================================================\n\n/**\n * Get severity for a diagnostic code.\n * - \"error\": Code will definitely not work\n * - \"warning\": Code might work but is unsupported/unreliable\n */\nexport const getSeverity = (code: DiagnosticCode): DiagnosticSeverity => {\n  switch (code) {\n    // Errors: code will definitely not work\n    case \"MISSING_ARGUMENT\":\n    case \"INVALID_ARGUMENT_TYPE\":\n    case \"NON_MEMBER_CALLEE\":\n    case \"OPTIONAL_CHAINING\":\n    case \"SPREAD_ARGUMENT\":\n      return \"error\";\n\n    // Warnings: code might work but is unsupported\n    case \"RENAMED_IMPORT\":\n    case \"STAR_IMPORT\":\n    case \"DEFAULT_IMPORT\":\n    case \"COMPUTED_PROPERTY\":\n    case \"DYNAMIC_CALLEE\":\n    case \"CLASS_PROPERTY\":\n    case \"EXTRA_ARGUMENTS\":\n      return \"warning\";\n  }\n};\n\n// ============================================================================\n// Message Templates\n// ============================================================================\n\ntype MessageContext = Readonly<Record<string, string>>;\n\n/**\n * Diagnostic message templates for each code\n */\nexport const diagnosticMessages: Record<DiagnosticCode, (ctx?: MessageContext) => string> = {\n  // Import-level\n  RENAMED_IMPORT: (ctx) => `Import alias \"${ctx?.importedAs ?? \"?\"}\" not recognized - use \"import { gql } from ...\"`,\n  STAR_IMPORT: (ctx) => `Namespace import \"${ctx?.namespaceAlias ?? \"?\"}\" not fully supported - use named import`,\n  DEFAULT_IMPORT: () => `Default import not supported - use \"import { gql } from ...\"`,\n\n  // Call-level\n  MISSING_ARGUMENT: () => `gql definition requires a factory function argument`,\n  INVALID_ARGUMENT_TYPE: (ctx) => `Expected arrow function, got ${ctx?.actualType ?? \"unknown\"}`,\n  NON_MEMBER_CALLEE: () => `Cannot call gql directly - use gql.schemaName(...)`,\n  COMPUTED_PROPERTY: () => `Computed property access not supported - use gql.schemaName(...)`,\n  DYNAMIC_CALLEE: () => `Dynamic callee expression not supported`,\n  OPTIONAL_CHAINING: () => `Optional chaining on gql not supported - use gql.schemaName(...) directly`,\n  EXTRA_ARGUMENTS: (ctx) =>\n    `gql definition only accepts one argument, ${ctx?.extraCount ?? \"extra\"} additional argument(s) ignored`,\n  SPREAD_ARGUMENT: () => `Spread arguments not supported - use arrow function directly`,\n\n  // Scope-level\n  CLASS_PROPERTY: () => `Class property definitions may have inconsistent scope tracking`,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a diagnostic with a standard message\n */\nexport const createStandardDiagnostic = (\n  code: DiagnosticCode,\n  location: DiagnosticLocation,\n  context?: MessageContext,\n): ModuleDiagnostic => {\n  return createDiagnostic({\n    code,\n    message: diagnosticMessages[code](context),\n    location,\n    context,\n  });\n};\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR,\n  SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n  SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","/*global navigator*/\n'use strict';\n\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n  if (typeof navigator !== 'undefined' && navigator.platform) {\n    const platform = navigator.platform.toLowerCase();\n    return platform === 'win32' || platform === 'windows';\n  }\n\n  if (typeof process !== 'undefined' && process.platform) {\n    return process.platform === 'win32';\n  }\n\n  return false;\n};\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n  const segs = path.split(windows ? /[\\\\/]/ : '/');\n  const last = segs[segs.length - 1];\n\n  if (last === '') {\n    return segs[segs.length - 2];\n  }\n\n  return last;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(opts.windows);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.output = (prev.output || prev.value) + tok.value;\n      prev.value += tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(opts.windows);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = opts.windows;\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst pico = require('./lib/picomatch');\nconst utils = require('./lib/utils');\n\nfunction picomatch(glob, options, returnState = false) {\n  // default to os.platform()\n  if (options && (options.windows === null || options.windows === undefined)) {\n    // don't mutate the original options object\n    options = { ...options, windows: utils.isWindows() };\n  }\n\n  return pico(glob, options, returnState);\n}\n\nObject.assign(picomatch, pico);\nmodule.exports = picomatch;\n","/**\n * Glob pattern matching using fast-glob\n */\n\nimport fg from \"fast-glob\";\n\n/**\n * Scan files matching glob patterns from the given directory.\n * Supports negation patterns (e.g., \"!**\\/excluded.ts\").\n *\n * @param patterns - Glob pattern(s). Can be a single pattern or array of patterns.\n * @param cwd - Working directory (defaults to process.cwd())\n * @returns Array of matched file paths (relative to cwd)\n */\nexport const scanGlob = (patterns: string | readonly string[], cwd: string = process.cwd()): readonly string[] => {\n  const patternArray = Array.isArray(patterns) ? patterns : [patterns];\n  return fg.sync(patternArray as string[], { cwd, dot: true, onlyFiles: true });\n};\n","import { existsSync } from \"node:fs\";\nimport { normalize, resolve } from \"node:path\";\nimport { err, ok } from \"neverthrow\";\n\nimport picomatch from \"picomatch\";\n\nimport type { BuilderError } from \"../types\";\nimport { scanGlob } from \"../utils/glob\";\n\n/**\n * Resolve entry file paths from glob patterns or direct paths.\n * Used by the discovery system to find entry points for module traversal.\n * All paths are normalized to POSIX format for consistent cache key matching.\n * Uses Node.js normalize() + backslash replacement to match normalizePath from @soda-gql/common.\n *\n * @param entries - Include patterns (glob or direct paths). Supports negation patterns (e.g., \"!./path/to/exclude.ts\")\n * @param exclude - Exclude patterns from config.exclude. Converted to negation globs for filtering.\n */\nexport const resolveEntryPaths = (entries: readonly string[], exclude: readonly string[] = []) => {\n  // Separate direct file paths from glob patterns\n  const directPaths: string[] = [];\n  const globPatterns: string[] = [];\n\n  for (const entry of entries) {\n    // Negation patterns are always glob patterns\n    if (entry.startsWith(\"!\")) {\n      globPatterns.push(entry);\n      continue;\n    }\n\n    const absolute = resolve(entry);\n    if (existsSync(absolute)) {\n      // Normalize to POSIX format to match discovery cache keys\n      directPaths.push(normalize(absolute).replace(/\\\\/g, \"/\"));\n    } else {\n      // Treat as glob pattern\n      globPatterns.push(entry);\n    }\n  }\n\n  // Filter direct paths against exclude patterns (both literal and glob)\n  if (exclude.length > 0 && directPaths.length > 0) {\n    const excludePatterns = exclude.map((p) => {\n      const raw = p.startsWith(\"!\") ? p.slice(1) : p;\n      return normalize(resolve(raw)).replace(/\\\\/g, \"/\");\n    });\n    const isExcluded = picomatch(excludePatterns);\n    const filtered = directPaths.filter((p) => !isExcluded(p));\n    directPaths.length = 0;\n    directPaths.push(...filtered);\n  }\n\n  // Append exclude patterns as negation globs\n  for (const pattern of exclude) {\n    globPatterns.push(pattern.startsWith(\"!\") ? pattern : `!${pattern}`);\n  }\n\n  // Scan all glob patterns together (important for negation patterns to work)\n  const globMatches =\n    globPatterns.length > 0\n      ? scanGlob(globPatterns, process.cwd()).map((match) => {\n          // Normalize to POSIX format to match discovery cache keys\n          return normalize(resolve(match)).replace(/\\\\/g, \"/\");\n        })\n      : [];\n\n  const resolvedPaths = [...directPaths, ...globMatches];\n\n  if (resolvedPaths.length === 0) {\n    return err<readonly string[], BuilderError>({\n      code: \"ENTRY_NOT_FOUND\",\n      message: `No entry files matched ${entries.join(\", \")}`,\n      entry: entries.join(\", \"),\n    });\n  }\n\n  return ok<readonly string[], BuilderError>(resolvedPaths);\n};\n","import { err, type Result } from \"neverthrow\";\n\n/**\n * Comprehensive error code taxonomy for Builder operations.\n */\nexport type BuilderErrorCode =\n  // Input/Configuration errors\n  | \"ENTRY_NOT_FOUND\"\n  | \"CONFIG_NOT_FOUND\"\n  | \"CONFIG_INVALID\"\n  // Discovery errors\n  | \"DISCOVERY_IO_ERROR\"\n  | \"FINGERPRINT_FAILED\"\n  | \"UNSUPPORTED_ANALYZER\"\n  // Canonical ID errors\n  | \"CANONICAL_PATH_INVALID\"\n  | \"CANONICAL_SCOPE_MISMATCH\"\n  // Graph/Analysis errors\n  | \"GRAPH_CIRCULAR_DEPENDENCY\"\n  | \"GRAPH_MISSING_IMPORT\"\n  | \"DOC_DUPLICATE\"\n  // Emission/IO errors\n  | \"WRITE_FAILED\"\n  | \"CACHE_CORRUPTED\"\n  // Runtime evaluation errors\n  | \"RUNTIME_MODULE_LOAD_FAILED\"\n  | \"ARTIFACT_REGISTRATION_FAILED\"\n  | \"ELEMENT_EVALUATION_FAILED\"\n  // Internal invariant violations\n  | \"INTERNAL_INVARIANT\"\n  // Schema validation errors\n  | \"SCHEMA_NOT_FOUND\";\n\n/**\n * Structured error type for all Builder operations.\n */\nexport type BuilderError =\n  // Input/Configuration\n  | {\n      readonly code: \"ENTRY_NOT_FOUND\";\n      readonly message: string;\n      readonly entry: string;\n    }\n  | {\n      readonly code: \"CONFIG_NOT_FOUND\";\n      readonly message: string;\n      readonly path: string;\n    }\n  | {\n      readonly code: \"CONFIG_INVALID\";\n      readonly message: string;\n      readonly path: string;\n      readonly cause?: unknown;\n    }\n  // Discovery\n  | {\n      readonly code: \"DISCOVERY_IO_ERROR\";\n      readonly message: string;\n      readonly path: string;\n      readonly errno?: string | number;\n      readonly cause?: unknown;\n    }\n  | {\n      readonly code: \"FINGERPRINT_FAILED\";\n      readonly message: string;\n      readonly filePath: string;\n      readonly cause?: unknown;\n    }\n  | {\n      readonly code: \"UNSUPPORTED_ANALYZER\";\n      readonly message: string;\n      readonly analyzer: string;\n    }\n  // Canonical ID\n  | {\n      readonly code: \"CANONICAL_PATH_INVALID\";\n      readonly message: string;\n      readonly path: string;\n      readonly reason?: string;\n    }\n  | {\n      readonly code: \"CANONICAL_SCOPE_MISMATCH\";\n      readonly message: string;\n      readonly expected: string;\n      readonly actual: string;\n    }\n  // Graph/Analysis\n  | {\n      readonly code: \"GRAPH_CIRCULAR_DEPENDENCY\";\n      readonly message: string;\n      readonly chain: readonly string[];\n    }\n  | {\n      readonly code: \"GRAPH_MISSING_IMPORT\";\n      readonly message: string;\n      readonly importer: string;\n      readonly importee: string;\n    }\n  | {\n      readonly code: \"DOC_DUPLICATE\";\n      readonly message: string;\n      readonly name: string;\n      readonly sources: readonly string[];\n    }\n  // Emission/IO\n  | {\n      readonly code: \"WRITE_FAILED\";\n      readonly message: string;\n      readonly outPath: string;\n      readonly cause?: unknown;\n    }\n  | {\n      readonly code: \"CACHE_CORRUPTED\";\n      readonly message: string;\n      readonly cachePath?: string;\n      readonly cause?: unknown;\n    }\n  // Runtime evaluation\n  | {\n      readonly code: \"RUNTIME_MODULE_LOAD_FAILED\";\n      readonly message: string;\n      readonly filePath: string;\n      readonly astPath: string;\n      readonly cause?: unknown;\n    }\n  | {\n      readonly code: \"ARTIFACT_REGISTRATION_FAILED\";\n      readonly message: string;\n      readonly elementId: string;\n      readonly reason: string;\n    }\n  | {\n      readonly code: \"ELEMENT_EVALUATION_FAILED\";\n      readonly message: string;\n      readonly modulePath: string;\n      readonly astPath: string;\n      readonly cause?: unknown;\n    }\n  // Internal invariant\n  | {\n      readonly code: \"INTERNAL_INVARIANT\";\n      readonly message: string;\n      readonly context?: string;\n      readonly cause?: unknown;\n    }\n  // Schema validation\n  | {\n      readonly code: \"SCHEMA_NOT_FOUND\";\n      readonly message: string;\n      readonly schemaLabel: string;\n      readonly canonicalId: string;\n    };\n\n/**\n * Helper type for Builder operation results.\n */\nexport type BuilderResult<T> = Result<T, BuilderError>;\n\n/**\n * Error constructor helpers for concise error creation.\n */\nexport const builderErrors = {\n  entryNotFound: (entry: string, message?: string): BuilderError => ({\n    code: \"ENTRY_NOT_FOUND\",\n    message: message ?? `Entry not found: ${entry}`,\n    entry,\n  }),\n\n  configNotFound: (path: string, message?: string): BuilderError => ({\n    code: \"CONFIG_NOT_FOUND\",\n    message: message ?? `Config file not found: ${path}`,\n    path,\n  }),\n\n  configInvalid: (path: string, message: string, cause?: unknown): BuilderError => ({\n    code: \"CONFIG_INVALID\",\n    message,\n    path,\n    cause,\n  }),\n\n  discoveryIOError: (path: string, message: string, errno?: string | number, cause?: unknown): BuilderError => ({\n    code: \"DISCOVERY_IO_ERROR\",\n    message,\n    path,\n    errno,\n    cause,\n  }),\n\n  fingerprintFailed: (filePath: string, message: string, cause?: unknown): BuilderError => ({\n    code: \"FINGERPRINT_FAILED\",\n    message,\n    filePath,\n    cause,\n  }),\n\n  unsupportedAnalyzer: (analyzer: string, message?: string): BuilderError => ({\n    code: \"UNSUPPORTED_ANALYZER\",\n    message: message ?? `Unsupported analyzer: ${analyzer}`,\n    analyzer,\n  }),\n\n  canonicalPathInvalid: (path: string, reason?: string): BuilderError => ({\n    code: \"CANONICAL_PATH_INVALID\",\n    message: `Invalid canonical path: ${path}${reason ? ` (${reason})` : \"\"}`,\n    path,\n    reason,\n  }),\n\n  canonicalScopeMismatch: (expected: string, actual: string): BuilderError => ({\n    code: \"CANONICAL_SCOPE_MISMATCH\",\n    message: `Scope mismatch: expected ${expected}, got ${actual}`,\n    expected,\n    actual,\n  }),\n\n  graphCircularDependency: (chain: readonly string[]): BuilderError => ({\n    code: \"GRAPH_CIRCULAR_DEPENDENCY\",\n    message: `Circular dependency detected: ${chain.join(\" → \")}`,\n    chain,\n  }),\n\n  graphMissingImport: (importer: string, importee: string): BuilderError => ({\n    code: \"GRAPH_MISSING_IMPORT\",\n    message: `Missing import: \"${importer}\" imports \"${importee}\" but it's not in the graph`,\n    importer,\n    importee,\n  }),\n\n  docDuplicate: (name: string, sources: readonly string[]): BuilderError => ({\n    code: \"DOC_DUPLICATE\",\n    message: `Duplicate document name: ${name} found in ${sources.length} files`,\n    name,\n    sources,\n  }),\n\n  writeFailed: (outPath: string, message: string, cause?: unknown): BuilderError => ({\n    code: \"WRITE_FAILED\",\n    message,\n    outPath,\n    cause,\n  }),\n\n  cacheCorrupted: (message: string, cachePath?: string, cause?: unknown): BuilderError => ({\n    code: \"CACHE_CORRUPTED\",\n    message,\n    cachePath,\n    cause,\n  }),\n\n  runtimeModuleLoadFailed: (filePath: string, astPath: string, message: string, cause?: unknown): BuilderError => ({\n    code: \"RUNTIME_MODULE_LOAD_FAILED\",\n    message,\n    filePath,\n    astPath,\n    cause,\n  }),\n\n  artifactRegistrationFailed: (elementId: string, reason: string): BuilderError => ({\n    code: \"ARTIFACT_REGISTRATION_FAILED\",\n    message: `Failed to register artifact element ${elementId}: ${reason}`,\n    elementId,\n    reason,\n  }),\n\n  elementEvaluationFailed: (modulePath: string, astPath: string, message: string, cause?: unknown): BuilderError => ({\n    code: \"ELEMENT_EVALUATION_FAILED\",\n    message,\n    modulePath,\n    astPath,\n    cause,\n  }),\n\n  internalInvariant: (message: string, context?: string, cause?: unknown): BuilderError => ({\n    code: \"INTERNAL_INVARIANT\",\n    message: `Internal invariant violated: ${message}`,\n    context,\n    cause,\n  }),\n\n  schemaNotFound: (schemaLabel: string, canonicalId: string): BuilderError => ({\n    code: \"SCHEMA_NOT_FOUND\",\n    message: `Schema not found for label \"${schemaLabel}\" (element: ${canonicalId})`,\n    schemaLabel,\n    canonicalId,\n  }),\n} as const;\n\n/**\n * Convenience helper to create an err Result from BuilderError.\n */\nexport const builderErr = <T = never>(error: BuilderError): BuilderResult<T> => err(error);\n\n/**\n * Type guard for BuilderError.\n */\nexport const isBuilderError = (error: unknown): error is BuilderError => {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"code\" in error &&\n    typeof error.code === \"string\" &&\n    \"message\" in error &&\n    typeof error.message === \"string\"\n  );\n};\n\n/**\n * Format BuilderError for console output (human-readable).\n */\nexport const formatBuilderError = (error: BuilderError): string => {\n  const lines: string[] = [];\n\n  lines.push(`Error [${error.code}]: ${error.message}`);\n\n  // Add context-specific details\n  switch (error.code) {\n    case \"ENTRY_NOT_FOUND\":\n      lines.push(`  Entry: ${error.entry}`);\n      break;\n    case \"CONFIG_NOT_FOUND\":\n    case \"CONFIG_INVALID\":\n      lines.push(`  Path: ${error.path}`);\n      if (error.code === \"CONFIG_INVALID\" && error.cause) {\n        lines.push(`  Cause: ${error.cause}`);\n      }\n      break;\n    case \"DISCOVERY_IO_ERROR\":\n      lines.push(`  Path: ${error.path}`);\n      if (error.errno !== undefined) {\n        lines.push(`  Errno: ${error.errno}`);\n      }\n      break;\n    case \"FINGERPRINT_FAILED\":\n      lines.push(`  File: ${error.filePath}`);\n      break;\n    case \"CANONICAL_PATH_INVALID\":\n      lines.push(`  Path: ${error.path}`);\n      if (error.reason) {\n        lines.push(`  Reason: ${error.reason}`);\n      }\n      break;\n    case \"CANONICAL_SCOPE_MISMATCH\":\n      lines.push(`  Expected: ${error.expected}`);\n      lines.push(`  Actual: ${error.actual}`);\n      break;\n    case \"GRAPH_CIRCULAR_DEPENDENCY\":\n      lines.push(`  Chain: ${error.chain.join(\" → \")}`);\n      break;\n    case \"GRAPH_MISSING_IMPORT\":\n      lines.push(`  Importer: ${error.importer}`);\n      lines.push(`  Importee: ${error.importee}`);\n      break;\n    case \"DOC_DUPLICATE\":\n      lines.push(`  Name: ${error.name}`);\n      lines.push(`  Sources:\\n    ${error.sources.join(\"\\n    \")}`);\n      break;\n    case \"WRITE_FAILED\":\n      lines.push(`  Output path: ${error.outPath}`);\n      break;\n    case \"CACHE_CORRUPTED\":\n      if (error.cachePath) {\n        lines.push(`  Cache path: ${error.cachePath}`);\n      }\n      break;\n    case \"RUNTIME_MODULE_LOAD_FAILED\":\n      lines.push(`  File: ${error.filePath}`);\n      lines.push(`  AST path: ${error.astPath}`);\n      break;\n    case \"ARTIFACT_REGISTRATION_FAILED\":\n      lines.push(`  Element ID: ${error.elementId}`);\n      lines.push(`  Reason: ${error.reason}`);\n      break;\n    case \"ELEMENT_EVALUATION_FAILED\":\n      lines.push(`  at ${error.modulePath}`);\n      if (error.astPath) {\n        lines.push(`  in ${error.astPath}`);\n      }\n      break;\n    case \"INTERNAL_INVARIANT\":\n      if (error.context) {\n        lines.push(`  Context: ${error.context}`);\n      }\n      break;\n    case \"SCHEMA_NOT_FOUND\":\n      lines.push(`  Schema label: ${error.schemaLabel}`);\n      lines.push(`  Element: ${error.canonicalId}`);\n      break;\n  }\n\n  // Add cause if present and not already shown\n  if (\"cause\" in error && error.cause && ![\"CONFIG_INVALID\"].includes(error.code)) {\n    lines.push(`  Caused by: ${error.cause}`);\n  }\n\n  return lines.join(\"\\n\");\n};\n\n/**\n * Assert unreachable code path (for exhaustiveness checks).\n * This is the ONLY acceptable throw in builder code.\n */\nexport const assertUnreachable = (value: never, context?: string): never => {\n  throw new Error(`Unreachable code path${context ? ` in ${context}` : \"\"}: received ${JSON.stringify(value)}`);\n};\n","import type { BuilderError, BuilderErrorCode } from \"../errors\";\n\n/**\n * Hints for each error code to help users understand and fix issues.\n */\nconst errorHints: Partial<Record<BuilderErrorCode, string>> = {\n  ELEMENT_EVALUATION_FAILED: \"Check if all imported fragments are properly exported and included in entry patterns.\",\n  GRAPH_CIRCULAR_DEPENDENCY: \"Break the circular import by extracting shared types to a common module.\",\n  GRAPH_MISSING_IMPORT: \"Verify the import path exists and the module is included in entry patterns.\",\n  RUNTIME_MODULE_LOAD_FAILED: \"Ensure the module can be imported and all dependencies are installed.\",\n  CONFIG_NOT_FOUND: \"Create a soda-gql.config.ts file in your project root.\",\n  CONFIG_INVALID: \"Check your configuration file for syntax errors or invalid options.\",\n  ENTRY_NOT_FOUND: \"Verify the entry pattern matches your file structure.\",\n  INTERNAL_INVARIANT: \"This is an internal error. Please report it at https://github.com/soda-gql/soda-gql/issues\",\n};\n\n/**\n * Formatted error with structured information for display.\n */\nexport type FormattedError = {\n  readonly code: BuilderErrorCode;\n  readonly message: string;\n  readonly location?: {\n    readonly modulePath: string;\n    readonly astPath?: string;\n  };\n  readonly hint?: string;\n  readonly relatedFiles?: readonly string[];\n  readonly cause?: unknown;\n};\n\n/**\n * Format a BuilderError into a structured FormattedError object.\n */\nexport const formatBuilderErrorStructured = (error: BuilderError): FormattedError => {\n  const base: FormattedError = {\n    code: error.code,\n    message: error.message,\n    hint: errorHints[error.code],\n    cause: \"cause\" in error ? error.cause : undefined,\n  };\n\n  switch (error.code) {\n    case \"ELEMENT_EVALUATION_FAILED\":\n      return {\n        ...base,\n        location: {\n          modulePath: error.modulePath,\n          astPath: error.astPath || undefined,\n        },\n      };\n\n    case \"RUNTIME_MODULE_LOAD_FAILED\":\n      return {\n        ...base,\n        location: {\n          modulePath: error.filePath,\n          astPath: error.astPath,\n        },\n      };\n\n    case \"GRAPH_MISSING_IMPORT\":\n      return {\n        ...base,\n        relatedFiles: [error.importer, error.importee],\n      };\n\n    case \"GRAPH_CIRCULAR_DEPENDENCY\":\n      return {\n        ...base,\n        relatedFiles: error.chain,\n      };\n\n    case \"CONFIG_NOT_FOUND\":\n    case \"CONFIG_INVALID\":\n      return {\n        ...base,\n        location: {\n          modulePath: error.path,\n        },\n      };\n\n    case \"FINGERPRINT_FAILED\":\n      return {\n        ...base,\n        location: {\n          modulePath: error.filePath,\n        },\n      };\n\n    case \"DISCOVERY_IO_ERROR\":\n      return {\n        ...base,\n        location: {\n          modulePath: error.path,\n        },\n      };\n\n    default:\n      return base;\n  }\n};\n\n/**\n * Format a BuilderError for CLI/stderr output with human-readable formatting.\n * Includes location, hint, and related files when available.\n */\nexport const formatBuilderErrorForCLI = (error: BuilderError): string => {\n  const formatted = formatBuilderErrorStructured(error);\n  const lines: string[] = [];\n\n  // Header with error code and message\n  lines.push(`Error [${formatted.code}]: ${formatted.message}`);\n\n  // Location information\n  if (formatted.location) {\n    lines.push(`  at ${formatted.location.modulePath}`);\n    if (formatted.location.astPath) {\n      lines.push(`  in ${formatted.location.astPath}`);\n    }\n  }\n\n  // Hint for fixing the issue\n  if (formatted.hint) {\n    lines.push(\"\");\n    lines.push(`  Hint: ${formatted.hint}`);\n  }\n\n  // Related files (for dependency errors)\n  if (formatted.relatedFiles && formatted.relatedFiles.length > 0) {\n    lines.push(\"\");\n    lines.push(\"  Related files:\");\n    for (const file of formatted.relatedFiles) {\n      lines.push(`    - ${file}`);\n    }\n  }\n\n  return lines.join(\"\\n\");\n};\n","import { readFileSync, statSync } from \"node:fs\";\nimport { readFile, stat } from \"node:fs/promises\";\nimport { Effect, Effects, parseCanonicalId } from \"@soda-gql/common\";\nimport { type AnyFragment, type AnyGqlDefine, type AnyOperation, GqlElement } from \"@soda-gql/core\";\nimport { builderErrors } from \"../errors\";\n\ntype AcceptableArtifact = AnyFragment | AnyOperation | AnyGqlDefine;\n\n/**\n * File stats result type.\n */\nexport type FileStats = {\n  readonly mtimeMs: number;\n  readonly size: number;\n  readonly isFile: boolean;\n};\n\n/**\n * File read effect - reads a file from the filesystem.\n * Works in both sync and async schedulers.\n *\n * @example\n * const content = yield* new FileReadEffect(\"/path/to/file\").run();\n */\nexport class FileReadEffect extends Effect<string> {\n  constructor(readonly path: string) {\n    super();\n  }\n\n  protected _executeSync(): string {\n    return readFileSync(this.path, \"utf-8\");\n  }\n\n  protected _executeAsync(): Promise<string> {\n    return readFile(this.path, \"utf-8\");\n  }\n}\n\n/**\n * File stat effect - gets file stats from the filesystem.\n * Works in both sync and async schedulers.\n *\n * @example\n * const stats = yield* new FileStatEffect(\"/path/to/file\").run();\n */\nexport class FileStatEffect extends Effect<FileStats> {\n  constructor(readonly path: string) {\n    super();\n  }\n\n  protected _executeSync(): FileStats {\n    const stats = statSync(this.path);\n    return {\n      mtimeMs: stats.mtimeMs,\n      size: stats.size,\n      isFile: stats.isFile(),\n    };\n  }\n\n  protected async _executeAsync(): Promise<FileStats> {\n    const stats = await stat(this.path);\n    return {\n      mtimeMs: stats.mtimeMs,\n      size: stats.size,\n      isFile: stats.isFile(),\n    };\n  }\n}\n\n/**\n * File read effect that returns null if file doesn't exist.\n * Useful for discovery where missing files are expected.\n */\nexport class OptionalFileReadEffect extends Effect<string | null> {\n  constructor(readonly path: string) {\n    super();\n  }\n\n  protected _executeSync(): string | null {\n    try {\n      return readFileSync(this.path, \"utf-8\");\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n        return null;\n      }\n      throw error;\n    }\n  }\n\n  protected async _executeAsync(): Promise<string | null> {\n    try {\n      return await readFile(this.path, \"utf-8\");\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n        return null;\n      }\n      throw error;\n    }\n  }\n}\n\n/**\n * File stat effect that returns null if file doesn't exist.\n * Useful for discovery where missing files are expected.\n */\nexport class OptionalFileStatEffect extends Effect<FileStats | null> {\n  constructor(readonly path: string) {\n    super();\n  }\n\n  protected _executeSync(): FileStats | null {\n    try {\n      const stats = statSync(this.path);\n      return {\n        mtimeMs: stats.mtimeMs,\n        size: stats.size,\n        isFile: stats.isFile(),\n      };\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n        return null;\n      }\n      throw error;\n    }\n  }\n\n  protected async _executeAsync(): Promise<FileStats | null> {\n    try {\n      const stats = await stat(this.path);\n      return {\n        mtimeMs: stats.mtimeMs,\n        size: stats.size,\n        isFile: stats.isFile(),\n      };\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n        return null;\n      }\n      throw error;\n    }\n  }\n}\n\n/**\n * Element evaluation effect - evaluates a GqlElement using its generator.\n * Supports both sync and async schedulers, enabling parallel element evaluation\n * when using async scheduler.\n *\n * Wraps errors with module context for better debugging.\n *\n * @example\n * yield* new ElementEvaluationEffect(element).run();\n */\nexport class ElementEvaluationEffect extends Effect<void> {\n  constructor(readonly element: AcceptableArtifact) {\n    super();\n  }\n\n  /**\n   * Wrap an error with element context for better debugging.\n   */\n  private wrapError(error: unknown): never {\n    const context = GqlElement.getContext(this.element);\n    if (context) {\n      const { filePath, astPath } = parseCanonicalId(context.canonicalId);\n      const message = error instanceof Error ? error.message : String(error);\n      throw builderErrors.elementEvaluationFailed(filePath, astPath, message, error);\n    }\n    throw error;\n  }\n\n  protected _executeSync(): void {\n    try {\n      // Run generator synchronously - throws if async operation is required\n      const generator = GqlElement.createEvaluationGenerator(this.element);\n      const result = generator.next();\n      while (!result.done) {\n        // If generator yields, it means async operation is needed\n        throw new Error(\"Async operation required during sync element evaluation\");\n      }\n    } catch (error) {\n      this.wrapError(error);\n    }\n  }\n\n  protected async _executeAsync(): Promise<void> {\n    try {\n      const generator = GqlElement.createEvaluationGenerator(this.element);\n      let result = generator.next();\n      while (!result.done) {\n        // Yield value is a Promise<void>\n        await result.value;\n        result = generator.next();\n      }\n    } catch (error) {\n      this.wrapError(error);\n    }\n  }\n}\n\n/**\n * Builder effect constructors.\n * Extends the base Effects with file I/O operations and element evaluation.\n */\nexport const BuilderEffects = {\n  ...Effects,\n\n  /**\n   * Create a file read effect.\n   * @param path - The file path to read\n   */\n  readFile: (path: string): FileReadEffect => new FileReadEffect(path),\n\n  /**\n   * Create a file stat effect.\n   * @param path - The file path to stat\n   */\n  stat: (path: string): FileStatEffect => new FileStatEffect(path),\n\n  /**\n   * Create an optional file read effect that returns null if file doesn't exist.\n   * @param path - The file path to read\n   */\n  readFileOptional: (path: string): OptionalFileReadEffect => new OptionalFileReadEffect(path),\n\n  /**\n   * Create an optional file stat effect that returns null if file doesn't exist.\n   * @param path - The file path to stat\n   */\n  statOptional: (path: string): OptionalFileStatEffect => new OptionalFileStatEffect(path),\n\n  /**\n   * Create an element evaluation effect.\n   * @param element - The GqlElement to evaluate\n   */\n  evaluateElement: (element: AcceptableArtifact): ElementEvaluationEffect => new ElementEvaluationEffect(element),\n} as const;\n","/**\n * VM sandbox utilities for CJS bundle evaluation.\n *\n * Provides shared infrastructure for executing CommonJS modules\n * in a sandboxed VM context with @soda-gql package mocking.\n *\n * @module\n */\n\nimport { resolve } from \"node:path\";\nimport { createContext, Script } from \"node:vm\";\nimport * as sandboxCore from \"@soda-gql/core\";\nimport * as sandboxCoreAdapter from \"@soda-gql/core/adapter\";\nimport * as sandboxCoreRuntime from \"@soda-gql/core/runtime\";\n\n/**\n * Sandbox type with CommonJS module exports.\n */\nexport type CjsSandbox = {\n  require: (path: string) => unknown;\n  module: { exports: Record<string, unknown> };\n  exports: Record<string, unknown>;\n  __dirname: string;\n  __filename: string;\n  global: unknown;\n  globalThis: unknown;\n  [key: string]: unknown;\n};\n\n/**\n * Create a require function for the sandbox.\n * Maps @soda-gql package imports to their actual modules.\n */\nconst createSandboxRequire =\n  () =>\n  (path: string): unknown => {\n    if (path === \"@soda-gql/core\") return sandboxCore;\n    if (path === \"@soda-gql/core/adapter\") return sandboxCoreAdapter;\n    if (path === \"@soda-gql/core/runtime\") return sandboxCoreRuntime;\n    throw new Error(`Unknown module: ${path}`);\n  };\n\n/**\n * Create a VM sandbox for executing CJS bundles.\n *\n * Sets up:\n * - require() handler for @soda-gql packages\n * - module.exports and exports pointing to the same object\n * - __dirname, __filename for path resolution\n * - global and globalThis pointing to the sandbox itself\n *\n * @param modulePath - Absolute path to the module being executed\n * @param additionalContext - Optional additional context properties\n * @returns Configured sandbox object\n */\nexport const createSandbox = (modulePath: string, additionalContext?: Record<string, unknown>): CjsSandbox => {\n  const moduleExports: Record<string, unknown> = {};\n\n  const sandbox: CjsSandbox = {\n    require: createSandboxRequire(),\n    module: { exports: moduleExports },\n    exports: moduleExports,\n    __dirname: resolve(modulePath, \"..\"),\n    __filename: modulePath,\n    global: undefined as unknown,\n    globalThis: undefined as unknown,\n    ...additionalContext,\n  };\n\n  // Wire global and globalThis to the sandbox itself\n  sandbox.global = sandbox;\n  sandbox.globalThis = sandbox;\n\n  return sandbox;\n};\n\n/**\n * Execute CJS code in a sandbox and return the exports.\n *\n * Note: Reads from sandbox.module.exports because esbuild CJS output\n * reassigns module.exports via __toCommonJS(), replacing the original object.\n *\n * @param code - The CJS code to execute\n * @param modulePath - Absolute path to the module (for error messages)\n * @param additionalContext - Optional additional context properties\n * @returns The module's exports object\n */\nexport const executeSandbox = (\n  code: string,\n  modulePath: string,\n  additionalContext?: Record<string, unknown>,\n): Record<string, unknown> => {\n  const sandbox = createSandbox(modulePath, additionalContext);\n  const context = createContext(sandbox);\n  new Script(code, { filename: modulePath }).runInContext(context);\n\n  // Read from module.exports due to esbuild's CommonJS transform\n  return sandbox.module.exports;\n};\n","import { type AliasResolver, resolveRelativeImportWithReferences } from \"@soda-gql/common\";\nimport type { ModuleAnalysis, ModuleDefinition, ModuleImport } from \"../ast\";\n\nconst formatFactory = (expression: string): string => {\n  const trimmed = expression.trim();\n  if (!trimmed.includes(\"\\n\")) {\n    return trimmed;\n  }\n\n  const lines = trimmed.split(\"\\n\").map((line) => line.trimEnd());\n  const indented = lines.map((line, index) => (index === 0 ? line : `    ${line}`)).join(\"\\n\");\n\n  return `(\\n    ${indented}\\n  )`;\n};\n\ntype TreeNode = {\n  expression?: string; // Leaf node with actual expression\n  canonicalId?: string; // Canonical ID for this node\n  children: Map<string, TreeNode>; // Branch node with children\n};\n\nconst buildTree = (definitions: readonly ModuleDefinition[]): Map<string, TreeNode> => {\n  const roots = new Map<string, TreeNode>();\n\n  definitions.forEach((definition) => {\n    const parts = definition.astPath.split(\".\");\n    const expressionText = definition.expression.trim();\n\n    if (parts.length === 1) {\n      // Top-level export\n      const rootName = parts[0];\n      if (rootName) {\n        roots.set(rootName, {\n          expression: expressionText,\n          canonicalId: definition.canonicalId,\n          children: new Map(),\n        });\n      }\n    } else {\n      // Nested export\n      const rootName = parts[0];\n      if (!rootName) return;\n\n      let root = roots.get(rootName);\n      if (!root) {\n        root = { children: new Map() };\n        roots.set(rootName, root);\n      }\n\n      let current = root;\n      for (let i = 1; i < parts.length - 1; i++) {\n        const part = parts[i];\n        if (!part) continue;\n\n        let child = current.children.get(part);\n        if (!child) {\n          child = { children: new Map() };\n          current.children.set(part, child);\n        }\n        current = child;\n      }\n\n      const leafName = parts[parts.length - 1];\n      if (leafName) {\n        current.children.set(leafName, {\n          expression: expressionText,\n          canonicalId: definition.canonicalId,\n          children: new Map(),\n        });\n      }\n    }\n  });\n\n  return roots;\n};\n\n/**\n * Check if a string is a valid JavaScript identifier\n */\nconst isValidIdentifier = (name: string): boolean => {\n  // JavaScript identifier regex: starts with letter, _, or $, followed by letters, digits, _, or $\n  return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name) && !isReservedWord(name);\n};\n\n/**\n * Check if a string is a JavaScript reserved word\n */\nconst isReservedWord = (name: string): boolean => {\n  const reserved = new Set([\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"else\",\n    \"export\",\n    \"extends\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"new\",\n    \"return\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\",\n    \"yield\",\n    \"let\",\n    \"static\",\n    \"enum\",\n    \"await\",\n    \"implements\",\n    \"interface\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n  ]);\n  return reserved.has(name);\n};\n\n/**\n * Format a key for use in an object literal\n * Invalid identifiers are quoted, valid ones are not\n */\nconst formatObjectKey = (key: string): string => {\n  return isValidIdentifier(key) ? key : `\"${key}\"`;\n};\n\nconst renderTreeNode = (node: TreeNode, indent: number): string => {\n  if (node.expression && node.children.size === 0 && node.canonicalId) {\n    // Leaf node - use addBuilder\n    const expr = formatFactory(node.expression);\n    return `registry.addElement(\"${node.canonicalId}\", () => ${expr})`;\n  }\n\n  // Branch node - render nested object\n  const indentStr = \"  \".repeat(indent);\n  const entries = Array.from(node.children.entries()).map(([key, child]) => {\n    const value = renderTreeNode(child, indent + 1);\n    const formattedKey = formatObjectKey(key);\n    return `${indentStr}  ${formattedKey}: ${value},`;\n  });\n\n  if (entries.length === 0) {\n    return \"{}\";\n  }\n\n  return `{\\n${entries.join(\"\\n\")}\\n${indentStr}}`;\n};\n\nconst buildNestedObject = (definition: readonly ModuleDefinition[]): string => {\n  const tree = buildTree(definition);\n  const declarations: string[] = [];\n  const returnEntries: string[] = [];\n\n  tree.forEach((node, rootName) => {\n    if (node.children.size > 0) {\n      // Has children - create a const declaration\n      const objectLiteral = renderTreeNode(node, 2);\n      declarations.push(`    const ${rootName} = ${objectLiteral};`);\n      returnEntries.push(rootName);\n    } else if (node.expression && node.canonicalId) {\n      // Single export - use addElement\n      const expr = formatFactory(node.expression);\n      declarations.push(`    const ${rootName} = registry.addElement(\"${node.canonicalId}\", () => ${expr});`);\n      returnEntries.push(rootName);\n    }\n  });\n\n  const returnStatement =\n    returnEntries.length > 0\n      ? `    return {\\n${returnEntries.map((name) => `        ${name},`).join(\"\\n\")}\\n    };`\n      : \"    return {};\";\n\n  if (declarations.length === 0) {\n    return returnStatement;\n  }\n\n  return `${declarations.join(\"\\n\")}\\n${returnStatement}`;\n};\n\n/**\n * Render import statements for the intermediate module using ModuleSummary.\n * Only includes imports from modules that have gql exports.\n */\nconst renderImportStatements = ({\n  filePath,\n  analysis,\n  analyses,\n  graphqlSystemPath,\n  aliasResolver,\n}: {\n  filePath: string;\n  analysis: ModuleAnalysis;\n  analyses: Map<string, ModuleAnalysis>;\n  graphqlSystemPath: string;\n  aliasResolver?: AliasResolver;\n}): { imports: string; importedRootNames: Set<string>; namespaceImports: Set<string> } => {\n  const importLines: string[] = [];\n  const importedRootNames = new Set<string>();\n  const namespaceImports = new Set<string>();\n\n  // Group imports by resolved file path\n  const importsByFile = new Map<string, ModuleImport[]>();\n\n  analysis.imports.forEach((imp) => {\n    if (imp.isTypeOnly) {\n      return;\n    }\n\n    // Try alias resolution for non-relative imports\n    if (!imp.source.startsWith(\".\")) {\n      if (!aliasResolver) return;\n      const aliasResolved = aliasResolver.resolve(imp.source);\n      if (!aliasResolved || !analyses.has(aliasResolved) || aliasResolved === graphqlSystemPath) return;\n      const imports = importsByFile.get(aliasResolved) ?? [];\n      imports.push(imp);\n      importsByFile.set(aliasResolved, imports);\n      return;\n    }\n\n    const resolvedPath = resolveRelativeImportWithReferences({ filePath, specifier: imp.source, references: analyses });\n    if (!resolvedPath) {\n      return;\n    }\n\n    // Skip graphql-system imports - gql is provided via VM context\n    if (resolvedPath === graphqlSystemPath) {\n      return;\n    }\n\n    const imports = importsByFile.get(resolvedPath) ?? [];\n    imports.push(imp);\n    importsByFile.set(resolvedPath, imports);\n  });\n\n  // Render registry.importModule() for each file\n  importsByFile.forEach((imports, filePath) => {\n    // Check if this is a namespace import\n    const namespaceImport = imports.find((imp) => imp.kind === \"namespace\");\n\n    if (namespaceImport) {\n      // Namespace import: const foo = yield registry.requestImport(\"path\");\n      importLines.push(`    const ${namespaceImport.local} = yield registry.requestImport(\"${filePath}\");`);\n      namespaceImports.add(namespaceImport.local);\n      importedRootNames.add(namespaceImport.local);\n    } else {\n      // Named imports: const { a, b } = yield registry.requestImport(\"path\");\n      const rootNames = new Set<string>();\n\n      imports.forEach((imp) => {\n        if (imp.kind === \"named\" || imp.kind === \"default\") {\n          rootNames.add(imp.local);\n          importedRootNames.add(imp.local);\n        }\n      });\n\n      if (rootNames.size > 0) {\n        const destructured = Array.from(rootNames).sort().join(\", \");\n        importLines.push(`    const { ${destructured} } = yield registry.requestImport(\"${filePath}\");`);\n      }\n    }\n  });\n\n  return {\n    imports: importLines.length > 0 ? `${importLines.join(\"\\n\")}` : \"\",\n    importedRootNames,\n    namespaceImports,\n  };\n};\n\nexport const renderRegistryBlock = ({\n  filePath,\n  analysis,\n  analyses,\n  graphqlSystemPath,\n  aliasResolver,\n}: {\n  filePath: string;\n  analysis: ModuleAnalysis;\n  analyses: Map<string, ModuleAnalysis>;\n  graphqlSystemPath: string;\n  aliasResolver?: AliasResolver;\n}): string => {\n  const { imports } = renderImportStatements({ filePath, analysis, analyses, graphqlSystemPath, aliasResolver });\n\n  return [`registry.setModule(\"${filePath}\", function*() {`, imports, \"\", buildNestedObject(analysis.definitions), \"});\"].join(\n    \"\\n\",\n  );\n};\n","import { createAsyncScheduler, createSyncScheduler, type EffectGenerator, ParallelEffect } from \"@soda-gql/common\";\nimport {\n  type AnyFragment,\n  type AnyGqlDefine,\n  type AnyOperation,\n  Fragment,\n  GqlDefine,\n  GqlElement,\n  Operation,\n} from \"@soda-gql/core\";\nimport type { ModuleAnalysis } from \"../ast\";\nimport { builderErrors } from \"../errors\";\nimport { ElementEvaluationEffect } from \"../scheduler\";\nimport type { EvaluationRequest, IntermediateArtifactElement } from \"./types\";\n\nexport type IntermediateRegistry = ReturnType<typeof createIntermediateRegistry>;\n\ntype AcceptableArtifact = AnyFragment | AnyOperation | AnyGqlDefine;\ntype ArtifactModule = ArtifactRecord;\ntype ArtifactRecord = {\n  readonly [key: string]: AcceptableArtifact | ArtifactRecord;\n};\n\n/**\n * Generator factory type for module evaluation.\n * The generator yields EvaluationRequest when it needs to import a dependency,\n * receives the resolved module as the yield result, and returns the final ArtifactModule.\n */\ntype GeneratorFactory = () => Generator<EvaluationRequest, ArtifactModule, ArtifactModule>;\n\n/**\n * Internal frame type for the evaluation stack.\n */\ntype EvaluationFrame = {\n  readonly filePath: string;\n  readonly generator: Generator<EvaluationRequest, ArtifactModule, ArtifactModule>;\n  resolvedDependency?: ArtifactModule;\n};\n\nexport const createIntermediateRegistry = ({ analyses }: { analyses?: Map<string, ModuleAnalysis> } = {}) => {\n  const modules = new Map<string, GeneratorFactory>();\n  const elements = new Map<string, AcceptableArtifact>();\n\n  const setModule = (filePath: string, factory: GeneratorFactory) => {\n    modules.set(filePath, factory);\n  };\n\n  /**\n   * Creates an import request to be yielded by module generators.\n   * Usage: `const { foo } = yield registry.requestImport(\"/path/to/module\");`\n   */\n  const requestImport = (filePath: string): EvaluationRequest => ({\n    kind: \"import\",\n    filePath,\n  });\n\n  const addElement = <TArtifact extends AcceptableArtifact>(canonicalId: string, factory: () => TArtifact) => {\n    const builder = factory();\n    GqlElement.setContext(builder, { canonicalId });\n    // Don't evaluate yet - defer until all builders are registered\n    elements.set(canonicalId, builder);\n    return builder;\n  };\n\n  /**\n   * Evaluate a single module and its dependencies using trampoline.\n   * Returns the cached result or evaluates and caches if not yet evaluated.\n   */\n  const evaluateModule = (filePath: string, evaluated: Map<string, ArtifactModule>, inProgress: Set<string>): ArtifactModule => {\n    // Already evaluated - return cached\n    const cached = evaluated.get(filePath);\n    if (cached) {\n      return cached;\n    }\n\n    const stack: EvaluationFrame[] = [];\n\n    // Start with the requested module\n    const factory = modules.get(filePath);\n    if (!factory) {\n      throw builderErrors.runtimeModuleLoadFailed(filePath, \"\", `Module not found or yet to be registered: ${filePath}`);\n    }\n    stack.push({ filePath, generator: factory() });\n\n    // Trampoline loop - process generators without deep recursion\n    let frame: EvaluationFrame | undefined;\n    while ((frame = stack[stack.length - 1])) {\n      // Mark as in progress (for circular dependency detection)\n      inProgress.add(frame.filePath);\n\n      // Advance the generator\n      const result =\n        frame.resolvedDependency !== undefined ? frame.generator.next(frame.resolvedDependency) : frame.generator.next();\n\n      // Clear the resolved dependency after use\n      frame.resolvedDependency = undefined;\n\n      if (result.done) {\n        // Generator completed - cache result and pop frame\n        evaluated.set(frame.filePath, result.value);\n        inProgress.delete(frame.filePath);\n        stack.pop();\n\n        // If there's a parent frame waiting for this result, provide it\n        const parentFrame = stack[stack.length - 1];\n        if (parentFrame) {\n          parentFrame.resolvedDependency = result.value;\n        }\n      } else {\n        // Generator yielded - it needs a dependency\n        const request = result.value;\n\n        if (request.kind === \"import\") {\n          const depPath = request.filePath;\n\n          // Check if already evaluated (cached)\n          const depCached = evaluated.get(depPath);\n          if (depCached) {\n            // Provide cached result without pushing new frame\n            frame.resolvedDependency = depCached;\n          } else {\n            // Check for circular dependency\n            if (inProgress.has(depPath)) {\n              // If analyses is available, check if both modules have gql definitions\n              // Only throw if both import source and target have gql definitions\n              if (analyses) {\n                const currentAnalysis = analyses.get(frame.filePath);\n                const targetAnalysis = analyses.get(depPath);\n                const currentHasGql = currentAnalysis && currentAnalysis.definitions.length > 0;\n                const targetHasGql = targetAnalysis && targetAnalysis.definitions.length > 0;\n\n                if (!currentHasGql || !targetHasGql) {\n                  // One or both modules have no gql definitions - allow circular import\n                  frame.resolvedDependency = {};\n                  continue;\n                }\n              }\n              throw builderErrors.internalInvariant(`Circular dependency detected: ${depPath}`, filePath);\n            }\n\n            // Need to evaluate dependency first\n            const depFactory = modules.get(depPath);\n            if (!depFactory) {\n              throw builderErrors.runtimeModuleLoadFailed(depPath, \"\", `Module not found or yet to be registered: ${depPath}`);\n            }\n\n            // Push new frame for dependency\n            stack.push({\n              filePath: depPath,\n              generator: depFactory(),\n            });\n          }\n        }\n      }\n    }\n\n    const result = evaluated.get(filePath);\n    if (!result) {\n      throw builderErrors.runtimeModuleLoadFailed(filePath, \"\", `Module evaluation failed: ${filePath}`);\n    }\n    return result;\n  };\n\n  /**\n   * Build artifacts record from evaluated elements.\n   */\n  const buildArtifacts = (): Record<string, IntermediateArtifactElement> => {\n    const artifacts: Record<string, IntermediateArtifactElement> = {};\n    for (const [canonicalId, element] of elements.entries()) {\n      if (element instanceof Fragment) {\n        artifacts[canonicalId] = { type: \"fragment\", element };\n      } else if (element instanceof Operation) {\n        artifacts[canonicalId] = { type: \"operation\", element };\n      } else if (element instanceof GqlDefine) {\n        artifacts[canonicalId] = { type: \"define\", element };\n      }\n    }\n    return artifacts;\n  };\n\n  /**\n   * Generator that evaluates all elements using the effect system.\n   * Uses ParallelEffect to enable parallel evaluation in async mode.\n   * In sync mode, ParallelEffect executes effects sequentially.\n   */\n  function* evaluateElementsGen(): EffectGenerator<void> {\n    const effects = Array.from(elements.values(), (element) => new ElementEvaluationEffect(element));\n    if (effects.length > 0) {\n      yield* new ParallelEffect(effects).run();\n    }\n  }\n\n  /**\n   * Synchronous evaluation - evaluates all modules and elements synchronously.\n   * Throws if any element requires async operations (e.g., async metadata factory).\n   */\n  const evaluate = (): Record<string, IntermediateArtifactElement> => {\n    const evaluated = new Map<string, ArtifactModule>();\n    const inProgress = new Set<string>();\n\n    // Evaluate all modules (each evaluation handles its own dependencies)\n    for (const filePath of modules.keys()) {\n      if (!evaluated.has(filePath)) {\n        evaluateModule(filePath, evaluated, inProgress);\n      }\n    }\n\n    // Then, evaluate all elements using sync scheduler\n    const scheduler = createSyncScheduler();\n    const result = scheduler.run(() => evaluateElementsGen());\n\n    if (result.isErr()) {\n      throw builderErrors.internalInvariant(`Element evaluation failed: ${result.error.message}`, \"registry.evaluate\");\n    }\n\n    return buildArtifacts();\n  };\n\n  /**\n   * Asynchronous evaluation - evaluates all modules and elements with async support.\n   * Supports async metadata factories and other async operations.\n   */\n  const evaluateAsync = async (): Promise<Record<string, IntermediateArtifactElement>> => {\n    const evaluated = new Map<string, ArtifactModule>();\n    const inProgress = new Set<string>();\n\n    // Evaluate all modules (module evaluation is synchronous - no I/O operations)\n    for (const filePath of modules.keys()) {\n      if (!evaluated.has(filePath)) {\n        evaluateModule(filePath, evaluated, inProgress);\n      }\n    }\n\n    // Then, evaluate all elements using async scheduler\n    const scheduler = createAsyncScheduler();\n    const result = await scheduler.run(() => evaluateElementsGen());\n\n    if (result.isErr()) {\n      throw builderErrors.internalInvariant(`Element evaluation failed: ${result.error.message}`, \"registry.evaluateAsync\");\n    }\n\n    return buildArtifacts();\n  };\n\n  /**\n   * Evaluate all modules synchronously using trampoline.\n   * This runs the module dependency resolution without element evaluation.\n   * Call this before getElements() when using external scheduler control.\n   */\n  const evaluateModules = (): void => {\n    const evaluated = new Map<string, ArtifactModule>();\n    const inProgress = new Set<string>();\n\n    for (const filePath of modules.keys()) {\n      if (!evaluated.has(filePath)) {\n        evaluateModule(filePath, evaluated, inProgress);\n      }\n    }\n  };\n\n  /**\n   * Get all registered elements for external effect creation.\n   * Call evaluateModules() first to ensure all modules have been evaluated.\n   */\n  const getElements = (): AcceptableArtifact[] => {\n    return Array.from(elements.values());\n  };\n\n  const clear = () => {\n    modules.clear();\n    elements.clear();\n  };\n\n  return {\n    setModule,\n    requestImport,\n    addElement,\n    evaluate,\n    evaluateAsync,\n    evaluateModules,\n    getElements,\n    buildArtifacts,\n    clear,\n  };\n};\n","import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { extname, resolve } from \"node:path\";\nimport { createContext, Script } from \"node:vm\";\nimport type { AliasResolver } from \"@soda-gql/common\";\nimport { type EffectGenerator, ParallelEffect } from \"@soda-gql/common\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport type { ModuleAnalysis } from \"../ast\";\nimport { type BuilderError, builderErrors, isBuilderError } from \"../errors\";\nimport { ElementEvaluationEffect } from \"../scheduler\";\nimport { createSandbox } from \"../vm/sandbox\";\nimport { renderRegistryBlock } from \"./codegen\";\nimport { createIntermediateRegistry } from \"./registry\";\nimport type { IntermediateArtifactElement, IntermediateModule } from \"./types\";\n\nexport type BuildIntermediateModulesInput = {\n  readonly analyses: Map<string, ModuleAnalysis>;\n  readonly targetFiles: Set<string>;\n  readonly graphqlSystemPath: string;\n  readonly aliasResolver?: AliasResolver;\n};\n\ntype TransformSync = typeof import(\"@swc/core\").transformSync;\nlet _transformSync: TransformSync | undefined;\nconst getTransformSync = (): TransformSync => {\n  if (_transformSync) {\n    return _transformSync;\n  }\n  if (typeof import.meta.url !== \"string\") {\n    throw new Error(\"@swc/core cannot be resolved: import.meta.url is unavailable in CJS bundle context\");\n  }\n  const localRequire = createRequire(import.meta.url);\n  const transformSync: TransformSync = localRequire(\"@swc/core\").transformSync;\n  _transformSync = transformSync;\n  return transformSync;\n};\n\nconst transpile = ({ filePath, sourceCode }: { filePath: string; sourceCode: string }): Result<string, BuilderError> => {\n  try {\n    const result = getTransformSync()(sourceCode, {\n      filename: `${filePath}.ts`,\n      jsc: {\n        parser: {\n          syntax: \"typescript\",\n          tsx: false,\n        },\n        target: \"es2022\",\n      },\n      module: {\n        type: \"es6\",\n      },\n      sourceMaps: false,\n      minify: false,\n    });\n\n    return ok(result.code);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return err({\n      code: \"RUNTIME_MODULE_LOAD_FAILED\",\n      filePath: filePath,\n      astPath: \"\",\n      message: `SWC transpilation failed: ${message}`,\n    });\n  }\n};\n\n/**\n * Resolve graphql system path to the bundled CJS file.\n * Accepts both .ts (for backward compatibility) and .cjs paths.\n * Maps .ts to sibling .cjs file if it exists.\n */\nfunction resolveGraphqlSystemPath(configPath: string): string {\n  const ext = extname(configPath);\n\n  // If already pointing to .cjs, use as-is\n  if (ext === \".cjs\") {\n    return resolve(process.cwd(), configPath);\n  }\n\n  // If pointing to .ts, try to resolve to sibling .cjs\n  if (ext === \".ts\") {\n    const basePath = configPath.slice(0, -3); // Remove .ts\n    const cjsPath = `${basePath}.cjs`;\n    const resolvedCjsPath = resolve(process.cwd(), cjsPath);\n\n    // Check if .cjs exists, otherwise fall back to .ts (for error messages)\n    if (existsSync(resolvedCjsPath)) {\n      return resolvedCjsPath;\n    }\n\n    // Fall back to .ts path (will fail later with clearer error)\n    return resolve(process.cwd(), configPath);\n  }\n\n  // For other extensions or no extension, use as-is\n  return resolve(process.cwd(), configPath);\n}\n\n/**\n * Bundle and execute GraphQL system module using rspack + memfs.\n * Creates a self-contained bundle that can run in VM context.\n * This is cached per session to avoid re-bundling.\n */\nlet cachedGql: unknown = null;\nlet cachedModulePath: string | null = null;\n\n/**\n * Clear the cached gql module.\n * Call this between test runs to ensure clean state.\n * @internal - exported for testing purposes only\n */\nexport const __clearGqlCache = (): void => {\n  cachedGql = null;\n  cachedModulePath = null;\n};\n\nfunction executeGraphqlSystemModule(modulePath: string): { gql: unknown } {\n  // Use cached module if same path\n  if (cachedModulePath === modulePath && cachedGql !== null) {\n    return { gql: cachedGql };\n  }\n\n  let bundledCode: string;\n  try {\n    bundledCode = readFileSync(modulePath, \"utf-8\");\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw builderErrors.runtimeModuleLoadFailed(modulePath, \"\", `Failed to read GraphQL system module: ${message}`, error);\n  }\n\n  try {\n    // Create sandbox and execute\n    const sandbox = createSandbox(modulePath);\n    new Script(bundledCode, { filename: modulePath }).runInNewContext(sandbox);\n\n    // Read exported gql (handle both direct export and default export)\n    const finalExports = sandbox.module.exports;\n    const exportedGql = finalExports.gql ?? finalExports.default;\n\n    if (exportedGql === undefined) {\n      throw builderErrors.runtimeModuleLoadFailed(\n        modulePath,\n        \"\",\n        `No 'gql' export found in GraphQL system module: ${modulePath}`,\n      );\n    }\n\n    // Cache the result\n    cachedGql = exportedGql;\n    cachedModulePath = modulePath;\n\n    return { gql: cachedGql };\n  } catch (error) {\n    if (isBuilderError(error)) {\n      throw error;\n    }\n    const message = error instanceof Error ? error.message : String(error);\n    throw builderErrors.runtimeModuleLoadFailed(modulePath, \"\", `GraphQL system module execution failed: ${message}`, error);\n  }\n}\n\n/**\n * Build intermediate modules from dependency graph.\n * Each intermediate module corresponds to one source file.\n */\nexport const generateIntermediateModules = function* ({\n  analyses,\n  targetFiles,\n  graphqlSystemPath,\n  aliasResolver,\n}: BuildIntermediateModulesInput): Generator<IntermediateModule, void, undefined> {\n  for (const filePath of targetFiles) {\n    const analysis = analyses.get(filePath);\n    if (!analysis) {\n      continue;\n    }\n\n    // Generate source code for this intermediate module\n    const sourceCode = renderRegistryBlock({ filePath, analysis, analyses, graphqlSystemPath, aliasResolver });\n\n    // Debug: log the generated source code\n    if (process.env.DEBUG_INTERMEDIATE_MODULE) {\n      console.log(\"=== Intermediate module source ===\");\n      console.log(\"FilePath:\", filePath);\n      console.log(\n        \"Definitions:\",\n        analysis.definitions.map((d) => d.astPath),\n      );\n      console.log(\"Source code:\\n\", sourceCode);\n      console.log(\"=================================\");\n    }\n\n    // Transpile TypeScript to JavaScript using SWC\n    const transpiledCodeResult = transpile({ filePath, sourceCode });\n    if (transpiledCodeResult.isErr()) {\n      throw transpiledCodeResult.error;\n    }\n    const transpiledCode = transpiledCodeResult.value;\n\n    const script = new Script(transpiledCode);\n\n    const hash = createHash(\"sha1\");\n    hash.update(transpiledCode);\n    const contentHash = hash.digest(\"hex\");\n    const canonicalIds = analysis.definitions.map((definition) => definition.canonicalId);\n\n    // Memory optimization: transpiledCode is only needed to create the Script object.\n    // After script creation, we can release it to reduce memory footprint.\n    // sourceCode is only needed for debugging (DEBUG_INTERMEDIATE_MODULE env var).\n    const shouldKeepSource = !!process.env.DEBUG_INTERMEDIATE_MODULE;\n    yield {\n      filePath,\n      canonicalIds,\n      sourceCode: shouldKeepSource ? sourceCode : \"\",\n      transpiledCode: \"\", // Released after Script creation\n      contentHash,\n      script,\n    };\n  }\n};\n\nexport type EvaluateIntermediateModulesInput = {\n  intermediateModules: Map<string, IntermediateModule>;\n  graphqlSystemPath: string;\n  analyses: Map<string, ModuleAnalysis>;\n};\n\n/**\n * Set up VM context and run intermediate module scripts.\n * Returns the registry for evaluation.\n */\nconst setupIntermediateModulesContext = ({\n  intermediateModules,\n  graphqlSystemPath,\n  analyses,\n}: EvaluateIntermediateModulesInput) => {\n  const registry = createIntermediateRegistry({ analyses });\n  const gqlImportPath = resolveGraphqlSystemPath(graphqlSystemPath);\n\n  const { gql } = executeGraphqlSystemModule(gqlImportPath);\n\n  const vmContext = createContext({ gql, registry });\n\n  for (const { script, filePath } of intermediateModules.values()) {\n    try {\n      script.runInContext(vmContext);\n    } catch (error) {\n      if (isBuilderError(error)) {\n        throw error;\n      }\n      const message = error instanceof Error ? error.message : String(error);\n      throw builderErrors.runtimeModuleLoadFailed(filePath, \"\", `Error evaluating intermediate module: ${message}`, error);\n    }\n  }\n\n  return registry;\n};\n\n/**\n * Synchronous evaluation of intermediate modules.\n * Throws if any element requires async operations (e.g., async metadata factory).\n */\nexport const evaluateIntermediateModules = (input: EvaluateIntermediateModulesInput) => {\n  const registry = setupIntermediateModulesContext(input);\n  const elements = registry.evaluate();\n  registry.clear();\n  return elements;\n};\n\n/**\n * Asynchronous evaluation of intermediate modules.\n * Supports async metadata factories and other async operations.\n */\nexport const evaluateIntermediateModulesAsync = async (input: EvaluateIntermediateModulesInput) => {\n  const registry = setupIntermediateModulesContext(input);\n  const elements = await registry.evaluateAsync();\n  registry.clear();\n  return elements;\n};\n\n/**\n * Generator version of evaluateIntermediateModules for external scheduler control.\n * Yields effects for element evaluation, enabling unified scheduler at the root level.\n *\n * This function:\n * 1. Sets up the VM context and runs intermediate module scripts\n * 2. Runs synchronous module evaluation (trampoline - no I/O)\n * 3. Yields element evaluation effects via ParallelEffect\n * 4. Returns the artifacts record\n */\nexport function* evaluateIntermediateModulesGen(\n  input: EvaluateIntermediateModulesInput,\n): EffectGenerator<Record<string, IntermediateArtifactElement>> {\n  const registry = setupIntermediateModulesContext(input);\n\n  // Run synchronous module evaluation (trampoline pattern, no I/O)\n  registry.evaluateModules();\n\n  // Yield element evaluation effects\n  const elements = registry.getElements();\n  const effects = elements.map((element) => new ElementEvaluationEffect(element));\n  if (effects.length > 0) {\n    yield* new ParallelEffect(effects).run();\n  }\n\n  const artifacts = registry.buildArtifacts();\n  registry.clear();\n  return artifacts;\n}\n","/**\n * Helper for identifying graphql-system files, inject modules, and import specifiers.\n * Provides robust detection across symlinks, case-insensitive filesystems, and user-defined aliases.\n */\n\nimport { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { resolveRelativeImportWithExistenceCheck } from \"@soda-gql/common\";\nimport type { ResolvedSodaGqlConfig } from \"@soda-gql/config\";\n\nexport type GraphqlSystemIdentifyHelper = {\n  readonly isGraphqlSystemFile: (input: { filePath: string }) => boolean;\n  readonly isGraphqlSystemImportSpecifier: (input: { filePath: string; specifier: string }) => boolean;\n  /**\n   * Check if a file is an internal module that should be stubbed at runtime.\n   * This includes graphql-system and inject modules (scalars, adapter).\n   */\n  readonly isInternalModuleFile: (input: { filePath: string }) => boolean;\n};\n\n/**\n * Create a canonical file name getter based on platform.\n * On case-sensitive filesystems, paths are returned as-is.\n * On case-insensitive filesystems, paths are lowercased for comparison.\n */\nconst createGetCanonicalFileName = (useCaseSensitiveFileNames: boolean): ((path: string) => string) => {\n  return useCaseSensitiveFileNames ? (path: string) => path : (path: string) => path.toLowerCase();\n};\n\n/**\n * Detect if the filesystem is case-sensitive.\n * We assume Unix-like systems are case-sensitive, and Windows is not.\n */\nconst getUseCaseSensitiveFileNames = (): boolean => {\n  return process.platform !== \"win32\";\n};\n\n/**\n * Create a GraphqlSystemIdentifyHelper from the resolved config.\n * Uses canonical path comparison to handle casing, symlinks, and aliases.\n */\nexport const createGraphqlSystemIdentifyHelper = (config: ResolvedSodaGqlConfig): GraphqlSystemIdentifyHelper => {\n  const getCanonicalFileName = createGetCanonicalFileName(getUseCaseSensitiveFileNames());\n\n  const toCanonical = (file: string): string => {\n    const resolved = resolve(file);\n    // Use realpathSync to resolve symlinks for accurate comparison\n    try {\n      return getCanonicalFileName(realpathSync(resolved));\n    } catch {\n      // If realpath fails (file doesn't exist yet), fall back to resolved path\n      return getCanonicalFileName(resolved);\n    }\n  };\n\n  // Derive graphql system path from outdir (assume index.ts as default entry)\n  const graphqlSystemPath = resolve(config.outdir, \"index.ts\");\n  const canonicalGraphqlSystemPath = toCanonical(graphqlSystemPath);\n\n  // Build canonical alias map\n  const canonicalAliases = new Set(config.graphqlSystemAliases.map((alias) => alias));\n\n  // Collect inject module paths (scalars, adapter) from all schemas.\n  // Paths are resolved via realpath to handle symlinks accurately.\n  const canonicalInjectPaths = new Set<string>();\n  for (const schemaConfig of Object.values(config.schemas)) {\n    canonicalInjectPaths.add(toCanonical(schemaConfig.inject.scalars));\n    if (schemaConfig.inject.adapter) {\n      canonicalInjectPaths.add(toCanonical(schemaConfig.inject.adapter));\n    }\n  }\n\n  return {\n    isGraphqlSystemFile: ({ filePath }: { filePath: string }) => {\n      return toCanonical(filePath) === canonicalGraphqlSystemPath;\n    },\n    isGraphqlSystemImportSpecifier: ({ filePath, specifier }: { filePath: string; specifier: string }) => {\n      // Check against aliases first if configured\n      if (canonicalAliases.has(specifier)) {\n        return true;\n      }\n\n      // Only try to resolve relative imports (starting with . or ..)\n      // External specifiers without an alias configured should not match\n      if (!specifier.startsWith(\".\")) {\n        return false;\n      }\n\n      // Try to resolve as relative import\n      const resolved = resolveRelativeImportWithExistenceCheck({ filePath, specifier });\n      if (!resolved) {\n        return false;\n      }\n\n      return toCanonical(resolved) === canonicalGraphqlSystemPath;\n    },\n    isInternalModuleFile: ({ filePath }: { filePath: string }) => {\n      const canonical = toCanonical(filePath);\n      return canonical === canonicalGraphqlSystemPath || canonicalInjectPaths.has(canonical);\n    },\n  };\n};\n","import { parseCanonicalId, validateCanonicalId } from \"@soda-gql/common\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport type { BuilderError } from \"../errors\";\nimport { builderErrors } from \"../errors\";\n\n/**\n * Parsed canonical ID components.\n */\nexport type ParsedCanonicalId = {\n  readonly filePath: string;\n  readonly astPath: string;\n};\n\n/**\n * Parse a canonical ID with validation.\n * Returns a Result with parsed components or a BuilderError.\n *\n * @param canonicalId - The canonical ID to parse\n * @returns Result with {filePath, astPath} or BuilderError\n */\nexport const parseCanonicalIdSafe = (canonicalId: string): Result<ParsedCanonicalId, BuilderError> => {\n  const validation = validateCanonicalId(canonicalId);\n\n  if (!validation.isValid) {\n    return err(builderErrors.canonicalPathInvalid(canonicalId, validation.reason));\n  }\n\n  return ok(parseCanonicalId(canonicalId));\n};\n\n/**\n * Extract file path from canonical ID with validation.\n * Returns a Result with the file path or a BuilderError.\n *\n * @param canonicalId - The canonical ID to extract from\n * @returns Result with filePath or BuilderError\n */\nexport const extractFilePathSafe = (canonicalId: string): Result<string, BuilderError> => {\n  return parseCanonicalIdSafe(canonicalId).map(({ filePath }) => filePath);\n};\n","import { createHash } from \"node:crypto\";\n\nimport { err, ok, type Result } from \"neverthrow\";\nimport type { ModuleAnalysis } from \"../ast\";\nimport type { IntermediateArtifactElement } from \"../intermediate-module\";\nimport type { BuilderError } from \"../types\";\nimport { parseCanonicalIdSafe } from \"./canonical-id-utils\";\nimport type { BuilderArtifactElement, BuilderArtifactElementMetadata } from \"./types\";\n\nconst computeContentHash = (prebuild: unknown): string => {\n  const hash = createHash(\"sha1\");\n  hash.update(JSON.stringify(prebuild));\n  return hash.digest(\"hex\");\n};\n\nconst emitRegistrationError = (filePath: string, astPath: string, message: string): BuilderError => ({\n  code: \"RUNTIME_MODULE_LOAD_FAILED\",\n  filePath,\n  astPath,\n  message,\n});\n\ntype AggregateInput = {\n  readonly analyses: ReadonlyMap<string, ModuleAnalysis>;\n  readonly elements: Record<string, IntermediateArtifactElement>;\n};\n\nexport const aggregate = ({ analyses, elements }: AggregateInput): Result<Map<string, BuilderArtifactElement>, BuilderError> => {\n  const registry = new Map<string, BuilderArtifactElement>();\n\n  for (const analysis of analyses.values()) {\n    for (const definition of analysis.definitions) {\n      // Validate canonical ID format early\n      const parsedResult = parseCanonicalIdSafe(definition.canonicalId);\n      if (parsedResult.isErr()) {\n        return err(parsedResult.error);\n      }\n      const { filePath, astPath } = parsedResult.value;\n\n      const element = elements[definition.canonicalId];\n      if (!element) {\n        const availableIds = Object.keys(elements).join(\", \");\n        const message = `ARTIFACT_NOT_FOUND_IN_RUNTIME_MODULE: ${definition.canonicalId}\\nAvailable: ${availableIds}`;\n        return err(emitRegistrationError(filePath, astPath, message));\n      }\n\n      // Skip define elements - they exist only for builder evaluation, not final output\n      if (element.type === \"define\") {\n        continue;\n      }\n\n      if (registry.has(definition.canonicalId)) {\n        return err(emitRegistrationError(filePath, astPath, `ARTIFACT_ALREADY_REGISTERED`));\n      }\n\n      // Use file path from canonical ID (which is relative when baseDir is set)\n      const metadata: BuilderArtifactElementMetadata = {\n        sourcePath: filePath,\n        contentHash: \"\", // Will be computed after prebuild creation\n      };\n\n      if (element.type === \"fragment\") {\n        const prebuild = {\n          typename: element.element.typename,\n          key: element.element.key,\n          schemaLabel: element.element.schemaLabel,\n        };\n        registry.set(definition.canonicalId, {\n          id: definition.canonicalId,\n          type: \"fragment\",\n          prebuild,\n          metadata: { ...metadata, contentHash: computeContentHash(prebuild) },\n        });\n        continue;\n      }\n\n      if (element.type === \"operation\") {\n        const prebuild = {\n          operationType: element.element.operationType,\n          operationName: element.element.operationName,\n          schemaLabel: element.element.schemaLabel,\n          document: element.element.document,\n          variableNames: element.element.variableNames,\n          metadata: element.element.metadata,\n        };\n        registry.set(definition.canonicalId, {\n          id: definition.canonicalId,\n          type: \"operation\",\n          prebuild,\n          metadata: { ...metadata, contentHash: computeContentHash(prebuild) },\n        });\n        continue;\n      }\n\n      return err(emitRegistrationError(filePath, astPath, \"UNKNOWN_ARTIFACT_KIND\"));\n    }\n  }\n\n  return ok(registry);\n};\n","import { err, ok, type Result } from \"neverthrow\";\nimport type { BuilderError } from \"../types\";\nimport { extractFilePathSafe } from \"./canonical-id-utils\";\nimport type { IntermediateElements } from \"./types\";\n\nexport const checkIssues = ({ elements }: { elements: IntermediateElements }): Result<string[], BuilderError> => {\n  const operationNames = new Set<string>();\n\n  for (const [canonicalId, { type, element }] of Object.entries(elements)) {\n    if (type !== \"operation\") {\n      continue;\n    }\n\n    if (operationNames.has(element.operationName)) {\n      // Validate canonical ID before using\n      const filePathResult = extractFilePathSafe(canonicalId);\n      if (filePathResult.isErr()) {\n        return err(filePathResult.error);\n      }\n\n      const sources = [filePathResult.value];\n      return err({\n        code: \"DOC_DUPLICATE\",\n        message: `Duplicate document name: ${element.operationName}`,\n        name: element.operationName,\n        sources,\n      });\n    }\n\n    operationNames.add(element.operationName);\n  }\n\n  return ok([]);\n};\n","import { err, ok, type Result } from \"neverthrow\";\nimport type { ModuleAnalysis } from \"../ast\";\nimport type { ModuleLoadStats } from \"../discovery\";\nimport type { BuilderError } from \"../types\";\nimport { aggregate } from \"./aggregate\";\nimport { checkIssues } from \"./issue-handler\";\nimport type { BuilderArtifact, IntermediateElements } from \"./types\";\n\ntype BuildArtifactInput = {\n  readonly elements: IntermediateElements;\n  readonly analyses: ReadonlyMap<string, ModuleAnalysis>;\n  readonly stats: ModuleLoadStats;\n};\n\nexport const buildArtifact = ({\n  elements,\n  analyses,\n  stats: cache,\n}: BuildArtifactInput): Result<BuilderArtifact, BuilderError> => {\n  const issuesResult = checkIssues({ elements });\n  if (issuesResult.isErr()) {\n    return err(issuesResult.error);\n  }\n\n  const warnings = issuesResult.value;\n\n  const aggregationResult = aggregate({ analyses, elements });\n  if (aggregationResult.isErr()) {\n    return err(aggregationResult.error);\n  }\n\n  return ok({\n    elements: Object.fromEntries(aggregationResult.value.entries()),\n    report: {\n      durationMs: 0,\n      warnings,\n      stats: cache,\n    },\n  } satisfies BuilderArtifact);\n};\n","/**\n * Shared utilities for AST traversal and scope tracking.\n * Used by both TypeScript and SWC adapters.\n */\n\n/**\n * Scope frame for tracking AST path segments\n */\nexport type ScopeFrame = {\n  /** Name segment (e.g., \"MyComponent\", \"useQuery\", \"_arrow_1\") */\n  readonly nameSegment: string;\n  /** Kind of scope */\n  readonly kind: \"function\" | \"class\" | \"variable\" | \"property\" | \"method\" | \"expression\";\n};\n\n/**\n * Build AST path from scope stack\n */\nexport const buildAstPath = (stack: readonly ScopeFrame[]): string => {\n  return stack.map((frame) => frame.nameSegment).join(\".\");\n};\n\n/**\n * Create an occurrence tracker for disambiguating anonymous/duplicate scopes.\n */\nexport const createOccurrenceTracker = (): {\n  getNextOccurrence: (key: string) => number;\n} => {\n  const occurrenceCounters = new Map<string, number>();\n\n  return {\n    getNextOccurrence(key: string): number {\n      const current = occurrenceCounters.get(key) ?? 0;\n      occurrenceCounters.set(key, current + 1);\n      return current;\n    },\n  };\n};\n\n/**\n * Create a path uniqueness tracker to ensure AST paths are unique.\n */\nexport const createPathTracker = (): {\n  ensureUniquePath: (basePath: string) => string;\n} => {\n  const usedPaths = new Set<string>();\n\n  return {\n    ensureUniquePath(basePath: string): string {\n      let path = basePath;\n      let suffix = 0;\n      while (usedPaths.has(path)) {\n        suffix++;\n        path = `${basePath}$${suffix}`;\n      }\n      usedPaths.add(path);\n      return path;\n    },\n  };\n};\n\n/**\n * Create an export bindings map from module exports.\n * Maps local variable names to their exported names.\n */\nexport const createExportBindingsMap = <T extends { kind: string; local?: string; exported: string; isTypeOnly?: boolean }>(\n  exports: readonly T[],\n): Map<string, string> => {\n  const exportBindings = new Map<string, string>();\n  exports.forEach((exp) => {\n    if (exp.kind === \"named\" && exp.local && !exp.isTypeOnly) {\n      exportBindings.set(exp.local, exp.exported);\n    }\n  });\n  return exportBindings;\n};\n","/**\n * SWC adapter for the analyzer core.\n * Implements parser-specific logic using the SWC parser.\n */\n\nimport { createRequire } from \"node:module\";\nimport {\n  createCanonicalId,\n  createCanonicalTracker,\n  createSwcSpanConverter,\n  type ScopeHandle,\n  type SwcSpanConverter,\n} from \"@soda-gql/common\";\nimport type { CallExpression, ImportDeclaration, Module } from \"@swc/types\";\nimport type { GraphqlSystemIdentifyHelper } from \"../../internal/graphql-system\";\nimport { createExportBindingsMap, type ScopeFrame } from \"../common/scope\";\nimport type { AnalyzerAdapter, AnalyzerResult } from \"../core\";\n\n/**\n * Extended SWC Module with filePath attached (similar to ts.SourceFile.fileName)\n */\ntype SwcModule = Module & {\n  __filePath: string;\n  /** Offset to subtract from spans to normalize to 0-based source indices */\n  __spanOffset: number;\n  /** Converter for UTF-8 byte offsets to UTF-16 char indices */\n  __spanConverter: SwcSpanConverter;\n};\n\nimport { createStandardDiagnostic } from \"../common/detection\";\nimport type {\n  AnalyzeModuleInput,\n  DiagnosticLocation,\n  ModuleDefinition,\n  ModuleDiagnostic,\n  ModuleExport,\n  ModuleImport,\n} from \"../types\";\n\nconst collectImports = (module: Module): ModuleImport[] => {\n  const imports: ModuleImport[] = [];\n\n  const handle = (declaration: ImportDeclaration) => {\n    const source = declaration.source.value;\n    // biome-ignore lint/suspicious/noExplicitAny: SWC types are not fully compatible\n    declaration.specifiers?.forEach((specifier: any) => {\n      if (specifier.type === \"ImportSpecifier\") {\n        imports.push({\n          source,\n          local: specifier.local.value,\n          kind: \"named\",\n          isTypeOnly: Boolean(specifier.isTypeOnly),\n        });\n        return;\n      }\n      if (specifier.type === \"ImportNamespaceSpecifier\") {\n        imports.push({\n          source,\n          local: specifier.local.value,\n          kind: \"namespace\",\n          isTypeOnly: false,\n        });\n        return;\n      }\n      if (specifier.type === \"ImportDefaultSpecifier\") {\n        imports.push({\n          source,\n          local: specifier.local.value,\n          kind: \"default\",\n          isTypeOnly: false,\n        });\n      }\n    });\n  };\n\n  module.body.forEach((item) => {\n    if (item.type === \"ImportDeclaration\") {\n      handle(item);\n      return;\n    }\n    // Handle module declarations with import declarations\n    if (\n      \"declaration\" in item &&\n      item.declaration &&\n      \"type\" in item.declaration &&\n      // biome-ignore lint/suspicious/noExplicitAny: SWC type cast\n      (item.declaration as any).type === \"ImportDeclaration\"\n    ) {\n      // biome-ignore lint/suspicious/noExplicitAny: SWC type cast\n      handle(item.declaration as any as ImportDeclaration);\n    }\n  });\n\n  return imports;\n};\n\nconst collectExports = (module: Module): ModuleExport[] => {\n  const exports: ModuleExport[] = [];\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const handle = (declaration: any) => {\n    if (declaration.type === \"ExportDeclaration\") {\n      if (declaration.declaration.type === \"VariableDeclaration\") {\n        // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n        declaration.declaration.declarations.forEach((decl: any) => {\n          if (decl.id.type === \"Identifier\") {\n            exports.push({\n              kind: \"named\",\n              exported: decl.id.value,\n              local: decl.id.value,\n              isTypeOnly: false,\n            });\n          }\n        });\n      }\n      if (declaration.declaration.type === \"FunctionDeclaration\") {\n        const ident = declaration.declaration.identifier;\n        if (ident) {\n          exports.push({\n            kind: \"named\",\n            exported: ident.value,\n            local: ident.value,\n            isTypeOnly: false,\n          });\n        }\n      }\n      return;\n    }\n\n    if (declaration.type === \"ExportNamedDeclaration\") {\n      const source = declaration.source?.value;\n      // biome-ignore lint/suspicious/noExplicitAny: SWC types are not fully compatible\n      declaration.specifiers?.forEach((specifier: any) => {\n        if (specifier.type !== \"ExportSpecifier\") {\n          return;\n        }\n        const exported = specifier.exported ? specifier.exported.value : specifier.orig.value;\n        const local = specifier.orig.value;\n        if (source) {\n          exports.push({\n            kind: \"reexport\",\n            exported,\n            local,\n            source,\n            isTypeOnly: Boolean(specifier.isTypeOnly),\n          });\n          return;\n        }\n        exports.push({\n          kind: \"named\",\n          exported,\n          local,\n          isTypeOnly: Boolean(specifier.isTypeOnly),\n        });\n      });\n      return;\n    }\n\n    if (declaration.type === \"ExportAllDeclaration\") {\n      exports.push({\n        kind: \"reexport\",\n        exported: \"*\",\n        source: declaration.source.value,\n        isTypeOnly: false,\n      });\n      return;\n    }\n\n    if (declaration.type === \"ExportDefaultDeclaration\" || declaration.type === \"ExportDefaultExpression\") {\n      exports.push({\n        kind: \"named\",\n        exported: \"default\",\n        local: \"default\",\n        isTypeOnly: false,\n      });\n    }\n  };\n\n  module.body.forEach((item) => {\n    if (\n      item.type === \"ExportDeclaration\" ||\n      item.type === \"ExportNamedDeclaration\" ||\n      item.type === \"ExportAllDeclaration\" ||\n      item.type === \"ExportDefaultDeclaration\" ||\n      item.type === \"ExportDefaultExpression\"\n    ) {\n      handle(item);\n      return;\n    }\n\n    if (\"declaration\" in item && item.declaration) {\n      // biome-ignore lint/suspicious/noExplicitAny: SWC types are not fully compatible\n      const declaration = item.declaration as any;\n      if (\n        declaration.type === \"ExportDeclaration\" ||\n        declaration.type === \"ExportNamedDeclaration\" ||\n        declaration.type === \"ExportAllDeclaration\" ||\n        declaration.type === \"ExportDefaultDeclaration\" ||\n        declaration.type === \"ExportDefaultExpression\"\n      ) {\n        // biome-ignore lint/suspicious/noExplicitAny: Complex SWC AST type\n        handle(declaration as any);\n      }\n    }\n  });\n\n  return exports;\n};\n\nconst collectGqlIdentifiers = (module: SwcModule, helper: GraphqlSystemIdentifyHelper): ReadonlySet<string> => {\n  const identifiers = new Set<string>();\n  module.body.forEach((item) => {\n    const declaration =\n      item.type === \"ImportDeclaration\"\n        ? item\n        : // biome-ignore lint/suspicious/noExplicitAny: SWC AST type checking\n          \"declaration\" in item && item.declaration && (item.declaration as any).type === \"ImportDeclaration\"\n          ? // biome-ignore lint/suspicious/noExplicitAny: SWC type cast\n            (item.declaration as any as ImportDeclaration)\n          : null;\n    if (!declaration) {\n      return;\n    }\n    if (!helper.isGraphqlSystemImportSpecifier({ filePath: module.__filePath, specifier: declaration.source.value })) {\n      return;\n    }\n    // biome-ignore lint/suspicious/noExplicitAny: SWC types are not fully compatible\n    declaration.specifiers?.forEach((specifier: any) => {\n      if (specifier.type === \"ImportSpecifier\") {\n        const imported = specifier.imported ? specifier.imported.value : specifier.local.value;\n        // Only add non-renamed imports (imported exists when renamed: \"gql as g\")\n        if (imported === \"gql\" && !specifier.imported) {\n          identifiers.add(specifier.local.value);\n        }\n      }\n    });\n  });\n  return identifiers;\n};\n\nconst isGqlCall = (identifiers: ReadonlySet<string>, call: CallExpression): boolean => {\n  const callee = call.callee;\n  if (callee.type !== \"MemberExpression\") {\n    return false;\n  }\n\n  if (callee.object.type !== \"Identifier\") {\n    return false;\n  }\n\n  if (!identifiers.has(callee.object.value)) {\n    return false;\n  }\n\n  if (callee.property.type !== \"Identifier\") {\n    return false;\n  }\n\n  const firstArg = call.arguments[0];\n  if (!firstArg?.expression || firstArg.expression.type !== \"ArrowFunctionExpression\") {\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Unwrap method chains (like .attach()) to find the underlying gql call.\n * Returns the innermost CallExpression that is a valid gql definition call.\n */\n// biome-ignore lint/suspicious/noExplicitAny: SWC AST type\nconst unwrapMethodChains = (identifiers: ReadonlySet<string>, node: any): CallExpression | null => {\n  if (!node || node.type !== \"CallExpression\") {\n    return null;\n  }\n\n  // Check if this is directly a gql call\n  if (isGqlCall(identifiers, node)) {\n    return node;\n  }\n\n  // Check if this is a method call on another expression (e.g., .attach())\n  const callee = node.callee;\n  if (callee.type !== \"MemberExpression\") {\n    return null;\n  }\n\n  // Recursively check the object of the member expression\n  // e.g., for `gql.default(...).attach(...)`, callee.object is `gql.default(...)`\n  return unwrapMethodChains(identifiers, callee.object);\n};\n\nconst collectAllDefinitions = ({\n  module,\n  gqlIdentifiers,\n  imports: _imports,\n  exports,\n  source,\n  baseDir,\n}: {\n  module: SwcModule;\n  gqlIdentifiers: ReadonlySet<string>;\n  imports: readonly ModuleImport[];\n  exports: readonly ModuleExport[];\n  source: string;\n  baseDir?: string;\n}): {\n  readonly definitions: ModuleDefinition[];\n  readonly handledCalls: readonly CallExpression[];\n} => {\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const getPropertyName = (property: any): string | null => {\n    if (!property) {\n      return null;\n    }\n    if (property.type === \"Identifier\") {\n      return property.value;\n    }\n    if (property.type === \"StringLiteral\" || property.type === \"NumericLiteral\") {\n      return property.value;\n    }\n    return null;\n  };\n\n  type PendingDefinition = {\n    readonly astPath: string;\n    readonly isTopLevel: boolean;\n    readonly isExported: boolean;\n    readonly exportBinding?: string;\n    readonly expression: string;\n  };\n\n  const pending: PendingDefinition[] = [];\n  const handledCalls: CallExpression[] = [];\n\n  // Build export bindings map (which variables are exported and with what name)\n  const exportBindings = createExportBindingsMap(exports);\n\n  // Create canonical tracker\n  const tracker = createCanonicalTracker({\n    filePath: module.__filePath,\n    baseDir,\n    getExportName: (localName) => exportBindings.get(localName),\n  });\n\n  // Anonymous scope counters (for naming only, not occurrence tracking)\n  // Use underscore separator instead of # to ensure valid JavaScript identifiers\n  const anonymousCounters = new Map<string, number>();\n  const getAnonymousName = (kind: string): string => {\n    const count = anonymousCounters.get(kind) ?? 0;\n    anonymousCounters.set(kind, count + 1);\n    return `_${kind}_${count}`;\n  };\n\n  // Helper to synchronize tracker with immutable stack pattern\n  const withScope = <T>(\n    stack: ScopeFrame[],\n    segment: string,\n    kind: ScopeFrame[\"kind\"],\n    stableKey: string,\n    callback: (newStack: ScopeFrame[]) => T,\n  ): T => {\n    const handle = tracker.enterScope({ segment, kind, stableKey });\n    try {\n      const frame: ScopeFrame = { nameSegment: segment, kind };\n      return callback([...stack, frame]);\n    } finally {\n      tracker.exitScope(handle);\n    }\n  };\n\n  const expressionFromCall = (call: CallExpression): string => {\n    // Normalize span by subtracting the module's span offset, then convert byte→char\n    const spanOffset = module.__spanOffset;\n    const converter = module.__spanConverter;\n    let start = converter.byteOffsetToCharIndex(call.span.start - spanOffset);\n    const end = converter.byteOffsetToCharIndex(call.span.end - spanOffset);\n\n    // Adjust when span starts one character after the leading \"g\"\n    if (start > 0 && source[start] === \"q\" && source[start - 1] === \"g\" && source.slice(start, start + 3) === \"ql.\") {\n      start -= 1;\n    }\n\n    const raw = source.slice(start, end);\n    const marker = raw.indexOf(\"gql\");\n    const expression = marker >= 0 ? raw.slice(marker) : raw;\n\n    // Strip trailing semicolons and whitespace that SWC may include in the span\n    // TypeScript's node.getText() doesn't include these, so we normalize to match\n    return expression.replace(/\\s*;\\s*$/, \"\");\n  };\n\n  // Check if we're inside a class property (class property scope tracking is unreliable)\n  const isInClassProperty = (stack: ScopeFrame[]): boolean =>\n    stack.some((frame, i) => frame.kind === \"property\" && stack[i - 1]?.kind === \"class\");\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const visit = (node: any, stack: ScopeFrame[]) => {\n    if (!node || typeof node !== \"object\") {\n      return;\n    }\n\n    // Check if this is a gql definition call (possibly wrapped in method chains like .attach())\n    if (node.type === \"CallExpression\") {\n      const gqlCall = unwrapMethodChains(gqlIdentifiers, node);\n      // Skip definition collection for gql calls inside class properties\n      // (CLASS_PROPERTY diagnostic is still emitted by collectClassPropertyDiagnostics)\n      if (gqlCall && !isInClassProperty(stack)) {\n        // If scopeStack is empty (unbound gql call), enter an anonymous scope\n        const needsAnonymousScope = tracker.currentDepth() === 0;\n        let anonymousScopeHandle: ScopeHandle | undefined;\n\n        if (needsAnonymousScope) {\n          const anonymousName = getAnonymousName(\"anonymous\");\n          anonymousScopeHandle = tracker.enterScope({\n            segment: anonymousName,\n            kind: \"expression\",\n            stableKey: \"anonymous\",\n          });\n        }\n\n        try {\n          // Use tracker to get astPath\n          const { astPath } = tracker.registerDefinition();\n          const isTopLevel = stack.length === 1;\n\n          // Determine if exported\n          let isExported = false;\n          let exportBinding: string | undefined;\n\n          if (isTopLevel && stack[0]) {\n            const topLevelName = stack[0].nameSegment;\n            if (exportBindings.has(topLevelName)) {\n              isExported = true;\n              exportBinding = exportBindings.get(topLevelName);\n            }\n          }\n\n          handledCalls.push(node);\n          pending.push({\n            astPath,\n            isTopLevel,\n            isExported,\n            exportBinding,\n            // Use the unwrapped gql call expression (without .attach() chain)\n            expression: expressionFromCall(gqlCall),\n          });\n        } finally {\n          // Exit anonymous scope if we entered one\n          if (anonymousScopeHandle) {\n            tracker.exitScope(anonymousScopeHandle);\n          }\n        }\n\n        // Don't visit children of gql calls\n        return;\n      }\n    }\n\n    // Variable declaration\n    if (node.type === \"VariableDeclaration\") {\n      // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n      node.declarations?.forEach((decl: any) => {\n        if (decl.id?.type === \"Identifier\") {\n          const varName = decl.id.value;\n\n          if (decl.init) {\n            withScope(stack, varName, \"variable\", `var:${varName}`, (newStack) => {\n              visit(decl.init, newStack);\n            });\n          }\n        } else if (decl.init) {\n          // Handle destructuring patterns (ObjectPattern, ArrayPattern)\n          // Visit the initializer without entering a scope (anonymous gql calls will handle their own scope)\n          visit(decl.init, stack);\n        }\n      });\n      return;\n    }\n\n    // Function declaration\n    if (node.type === \"FunctionDeclaration\") {\n      const funcName = node.identifier?.value ?? getAnonymousName(\"function\");\n\n      if (node.body) {\n        withScope(stack, funcName, \"function\", `func:${funcName}`, (newStack) => {\n          visit(node.body, newStack);\n        });\n      }\n      return;\n    }\n\n    // Arrow function\n    if (node.type === \"ArrowFunctionExpression\") {\n      const arrowName = getAnonymousName(\"arrow\");\n\n      if (node.body) {\n        withScope(stack, arrowName, \"function\", \"arrow\", (newStack) => {\n          visit(node.body, newStack);\n        });\n      }\n      return;\n    }\n\n    // Function expression\n    if (node.type === \"FunctionExpression\") {\n      const funcName = node.identifier?.value ?? getAnonymousName(\"function\");\n\n      if (node.body) {\n        withScope(stack, funcName, \"function\", `func:${funcName}`, (newStack) => {\n          visit(node.body, newStack);\n        });\n      }\n      return;\n    }\n\n    // Class declaration\n    if (node.type === \"ClassDeclaration\") {\n      const className = node.identifier?.value ?? getAnonymousName(\"class\");\n\n      withScope(stack, className, \"class\", `class:${className}`, (classStack) => {\n        // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n        node.body?.forEach((member: any) => {\n          if (member.type === \"ClassMethod\" || member.type === \"ClassProperty\") {\n            const memberName = member.key?.value ?? null;\n            if (memberName) {\n              const memberKind = member.type === \"ClassMethod\" ? \"method\" : \"property\";\n              withScope(classStack, memberName, memberKind, `member:${className}.${memberName}`, (memberStack) => {\n                if (member.type === \"ClassMethod\" && member.function?.body) {\n                  visit(member.function.body, memberStack);\n                } else if (member.type === \"ClassProperty\" && member.value) {\n                  visit(member.value, memberStack);\n                }\n              });\n            }\n          }\n        });\n      });\n      return;\n    }\n\n    // Object literal property\n    if (node.type === \"KeyValueProperty\") {\n      const propName = getPropertyName(node.key);\n      if (propName) {\n        withScope(stack, propName, \"property\", `prop:${propName}`, (newStack) => {\n          visit(node.value, newStack);\n        });\n      }\n      return;\n    }\n\n    // Recursively visit children\n    if (Array.isArray(node)) {\n      for (const child of node) {\n        visit(child, stack);\n      }\n    } else {\n      for (const value of Object.values(node)) {\n        if (Array.isArray(value)) {\n          for (const child of value) {\n            visit(child, stack);\n          }\n        } else if (value && typeof value === \"object\") {\n          visit(value, stack);\n        }\n      }\n    }\n  };\n\n  // Start traversal from top-level statements\n  module.body.forEach((statement) => {\n    visit(statement, []);\n  });\n\n  const definitions = pending.map(\n    (item) =>\n      ({\n        canonicalId: createCanonicalId(module.__filePath, item.astPath, { baseDir }),\n        astPath: item.astPath,\n        isTopLevel: item.isTopLevel,\n        isExported: item.isExported,\n        exportBinding: item.exportBinding,\n        expression: item.expression,\n      }) satisfies ModuleDefinition,\n  );\n\n  return { definitions, handledCalls };\n};\n\n// ============================================================================\n// Diagnostic Collection\n// ============================================================================\n\n/**\n * Get location from an SWC node span\n */\nconst getLocation = (module: SwcModule, span: { start: number; end: number }): DiagnosticLocation => {\n  const converter = module.__spanConverter;\n  const start = converter.byteOffsetToCharIndex(span.start - module.__spanOffset);\n  const end = converter.byteOffsetToCharIndex(span.end - module.__spanOffset);\n  return { start, end };\n};\n\n/**\n * Collect diagnostics for invalid import patterns from graphql-system\n */\nconst collectImportDiagnostics = (module: SwcModule, helper: GraphqlSystemIdentifyHelper): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  module.body.forEach((item) => {\n    const declaration =\n      item.type === \"ImportDeclaration\"\n        ? item\n        : \"declaration\" in item &&\n            item.declaration &&\n            \"type\" in item.declaration &&\n            // biome-ignore lint/suspicious/noExplicitAny: SWC type cast\n            (item.declaration as any).type === \"ImportDeclaration\"\n          ? // biome-ignore lint/suspicious/noExplicitAny: SWC type cast\n            (item.declaration as any as ImportDeclaration)\n          : null;\n\n    if (!declaration) {\n      return;\n    }\n\n    if (!helper.isGraphqlSystemImportSpecifier({ filePath: module.__filePath, specifier: declaration.source.value })) {\n      return;\n    }\n\n    // biome-ignore lint/suspicious/noExplicitAny: SWC types are not fully compatible\n    declaration.specifiers?.forEach((specifier: any) => {\n      // Check for default import\n      if (specifier.type === \"ImportDefaultSpecifier\") {\n        diagnostics.push(createStandardDiagnostic(\"DEFAULT_IMPORT\", getLocation(module, specifier.span), undefined));\n        return;\n      }\n\n      // Check for namespace import: import * as gqlSystem from \"...\"\n      if (specifier.type === \"ImportNamespaceSpecifier\") {\n        diagnostics.push(\n          createStandardDiagnostic(\"STAR_IMPORT\", getLocation(module, specifier.span), {\n            namespaceAlias: specifier.local.value,\n          }),\n        );\n        return;\n      }\n\n      // Check for renamed gql import: import { gql as g } from \"...\"\n      if (specifier.type === \"ImportSpecifier\") {\n        const imported = specifier.imported ? specifier.imported.value : specifier.local.value;\n        // Only report if gql is renamed (imported exists and is \"gql\")\n        if (imported === \"gql\" && specifier.imported) {\n          diagnostics.push(\n            createStandardDiagnostic(\"RENAMED_IMPORT\", getLocation(module, specifier.span), {\n              importedAs: specifier.local.value,\n            }),\n          );\n        }\n      }\n    });\n  });\n\n  return diagnostics;\n};\n\n/**\n * Check if a node contains a reference to any gql identifier\n */\n// biome-ignore lint/suspicious/noExplicitAny: SWC AST type\nconst containsGqlIdentifier = (node: any, identifiers: ReadonlySet<string>): boolean => {\n  if (!node || typeof node !== \"object\") {\n    return false;\n  }\n  if (node.type === \"Identifier\" && identifiers.has(node.value)) {\n    return true;\n  }\n  for (const value of Object.values(node)) {\n    if (Array.isArray(value)) {\n      for (const child of value) {\n        if (containsGqlIdentifier(child, identifiers)) {\n          return true;\n        }\n      }\n    } else if (value && typeof value === \"object\") {\n      if (containsGqlIdentifier(value, identifiers)) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n\n/**\n * Get the type name of an argument for error messages\n */\n// biome-ignore lint/suspicious/noExplicitAny: SWC AST type\nconst getArgumentType = (node: any): string => {\n  if (!node) return \"undefined\";\n  switch (node.type) {\n    case \"StringLiteral\":\n      return \"string\";\n    case \"NumericLiteral\":\n      return \"number\";\n    case \"ObjectExpression\":\n      return \"object\";\n    case \"ArrayExpression\":\n      return \"array\";\n    case \"FunctionExpression\":\n      return \"function\";\n    case \"NullLiteral\":\n      return \"null\";\n    case \"BooleanLiteral\":\n      return \"boolean\";\n    default:\n      return \"unknown\";\n  }\n};\n\n/**\n * Collect diagnostics for invalid gql call patterns\n */\nconst collectCallDiagnostics = (module: SwcModule, gqlIdentifiers: ReadonlySet<string>): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const visit = (node: any) => {\n    if (!node || typeof node !== \"object\") {\n      return;\n    }\n\n    if (node.type === \"CallExpression\") {\n      const diagnostic = checkCallExpression(module, node, gqlIdentifiers);\n      if (diagnostic) {\n        diagnostics.push(diagnostic);\n      }\n    }\n\n    // Recursively visit children\n    for (const value of Object.values(node)) {\n      if (Array.isArray(value)) {\n        for (const child of value) {\n          visit(child);\n        }\n      } else if (value && typeof value === \"object\") {\n        visit(value);\n      }\n    }\n  };\n\n  module.body.forEach(visit);\n  return diagnostics;\n};\n\n/**\n * Check a call expression for invalid gql patterns\n */\nconst checkCallExpression = (\n  module: SwcModule,\n  call: CallExpression,\n  gqlIdentifiers: ReadonlySet<string>,\n): ModuleDiagnostic | null => {\n  const callee = call.callee;\n\n  // Check for direct gql() call (non-member): gql(...)\n  if (callee.type === \"Identifier\" && gqlIdentifiers.has(callee.value)) {\n    return createStandardDiagnostic(\"NON_MEMBER_CALLEE\", getLocation(module, call.span), undefined);\n  }\n\n  // Check for optional chaining: gql?.default(...)\n  // SWC wraps optional chaining in OptionalChainingExpression\n  if (callee.type === \"OptionalChainingExpression\") {\n    // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n    const base = (callee as any).base;\n    if (base?.type === \"MemberExpression\") {\n      const object = base.object;\n      if (object?.type === \"Identifier\" && gqlIdentifiers.has(object.value)) {\n        return createStandardDiagnostic(\"OPTIONAL_CHAINING\", getLocation(module, call.span), undefined);\n      }\n    }\n    return null;\n  }\n\n  // Must be member expression for valid gql call\n  if (callee.type !== \"MemberExpression\") {\n    return null;\n  }\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const object = (callee as any).object;\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const property = (callee as any).property;\n\n  // Check for computed access: gql[\"default\"](...) or gql[variable](...)\n  // SWC represents computed property access with property.type === \"Computed\"\n  if (property?.type === \"Computed\" && object?.type === \"Identifier\" && gqlIdentifiers.has(object.value)) {\n    return createStandardDiagnostic(\"COMPUTED_PROPERTY\", getLocation(module, call.span), undefined);\n  }\n\n  // Check for dynamic callee: (x || gql).default(...)\n  if (object?.type !== \"Identifier\") {\n    if (containsGqlIdentifier(object, gqlIdentifiers)) {\n      return createStandardDiagnostic(\"DYNAMIC_CALLEE\", getLocation(module, call.span), undefined);\n    }\n    return null;\n  }\n\n  // Not a gql identifier - skip\n  if (!gqlIdentifiers.has(object.value)) {\n    return null;\n  }\n\n  // Check arguments for gql.schema(...) calls\n  if (!call.arguments || call.arguments.length === 0) {\n    return createStandardDiagnostic(\"MISSING_ARGUMENT\", getLocation(module, call.span), undefined);\n  }\n\n  const firstArg = call.arguments[0];\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const firstArgAny = firstArg as any;\n\n  // Check for spread argument: gql.default(...args)\n  if (firstArgAny?.spread) {\n    return createStandardDiagnostic(\"SPREAD_ARGUMENT\", getLocation(module, call.span), undefined);\n  }\n\n  const expression = firstArgAny?.expression;\n  if (expression && expression.type !== \"ArrowFunctionExpression\") {\n    const actualType = getArgumentType(expression);\n    return createStandardDiagnostic(\"INVALID_ARGUMENT_TYPE\", getLocation(module, call.span), { actualType });\n  }\n\n  // Check for extra arguments: gql.default(() => ..., extra)\n  if (call.arguments.length > 1) {\n    const extraCount = call.arguments.length - 1;\n    return createStandardDiagnostic(\"EXTRA_ARGUMENTS\", getLocation(module, call.span), {\n      extraCount: String(extraCount),\n    });\n  }\n\n  return null;\n};\n\n/**\n * Collect diagnostics for gql calls in class properties\n */\nconst collectClassPropertyDiagnostics = (module: SwcModule, gqlIdentifiers: ReadonlySet<string>): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const containsGqlCall = (node: any): boolean => {\n    if (!node || typeof node !== \"object\") {\n      return false;\n    }\n    if (node.type === \"CallExpression\" && isGqlCall(gqlIdentifiers, node)) {\n      return true;\n    }\n    for (const value of Object.values(node)) {\n      if (Array.isArray(value)) {\n        for (const child of value) {\n          if (containsGqlCall(child)) {\n            return true;\n          }\n        }\n      } else if (value && typeof value === \"object\") {\n        if (containsGqlCall(value)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n  const visit = (node: any) => {\n    if (!node || typeof node !== \"object\") {\n      return;\n    }\n\n    if (node.type === \"ClassDeclaration\") {\n      // biome-ignore lint/suspicious/noExplicitAny: SWC AST type\n      node.body?.forEach((member: any) => {\n        if (member.type === \"ClassProperty\" && member.value) {\n          if (containsGqlCall(member.value)) {\n            diagnostics.push(createStandardDiagnostic(\"CLASS_PROPERTY\", getLocation(module, member.span), undefined));\n          }\n        }\n      });\n    }\n\n    // Recursively visit children\n    for (const value of Object.values(node)) {\n      if (Array.isArray(value)) {\n        for (const child of value) {\n          visit(child);\n        }\n      } else if (value && typeof value === \"object\") {\n        visit(value);\n      }\n    }\n  };\n\n  module.body.forEach(visit);\n  return diagnostics;\n};\n\n/**\n * SWC adapter implementation.\n * The analyze method parses and collects all data in one pass,\n * ensuring the AST (Module) is released after analysis.\n */\ntype ParseSync = typeof import(\"@swc/core\").parseSync;\nlet _parseSync: ParseSync | undefined;\nconst getParseSync = (): ParseSync => {\n  if (!_parseSync) {\n    if (typeof import.meta.url !== \"string\") {\n      throw new Error(\"@swc/core cannot be resolved: import.meta.url is unavailable in CJS bundle context\");\n    }\n    const localRequire = createRequire(import.meta.url);\n    _parseSync = localRequire(\"@swc/core\").parseSync;\n  }\n  return _parseSync!;\n};\n\nexport const swcAdapter: AnalyzerAdapter = {\n  analyze(input: AnalyzeModuleInput, helper: GraphqlSystemIdentifyHelper): AnalyzerResult | null {\n    // Parse source - AST is local to this function\n    const program = getParseSync()(input.source, {\n      syntax: \"typescript\",\n      tsx: input.filePath.endsWith(\".tsx\"),\n      target: \"es2022\",\n      decorators: false,\n      dynamicImport: true,\n    });\n\n    if (program.type !== \"Module\") {\n      return null;\n    }\n\n    // SWC's BytePos counter accumulates across parseSync calls within the same process.\n    // Use UTF-8 byte length (not source.length which is UTF-16 code units) for correct offset.\n    const converter = createSwcSpanConverter(input.source);\n    const spanOffset = program.span.end - converter.byteLength + 1;\n\n    // Attach filePath to module (similar to ts.SourceFile.fileName)\n    const swcModule = program as SwcModule;\n    swcModule.__filePath = input.filePath;\n    swcModule.__spanOffset = spanOffset;\n    swcModule.__spanConverter = converter;\n\n    // Collect all data in one pass\n    const gqlIdentifiers = collectGqlIdentifiers(swcModule, helper);\n    const imports = collectImports(swcModule);\n    const exports = collectExports(swcModule);\n\n    const { definitions } = collectAllDefinitions({\n      module: swcModule,\n      gqlIdentifiers,\n      imports,\n      exports,\n      source: input.source,\n      baseDir: input.baseDir,\n    });\n\n    // Collect diagnostics\n    const diagnostics = [\n      ...collectImportDiagnostics(swcModule, helper),\n      ...collectCallDiagnostics(swcModule, gqlIdentifiers),\n      ...collectClassPropertyDiagnostics(swcModule, gqlIdentifiers),\n    ];\n\n    // Return results - swcModule goes out of scope and becomes eligible for GC\n    return {\n      imports,\n      exports,\n      definitions,\n      diagnostics,\n    };\n  },\n};\n","/**\n * TypeScript adapter for the analyzer core.\n * Implements parser-specific logic using the TypeScript compiler API.\n */\n\nimport { extname } from \"node:path\";\nimport { createCanonicalId, createCanonicalTracker, type ScopeHandle } from \"@soda-gql/common\";\nimport ts from \"typescript\";\nimport type { GraphqlSystemIdentifyHelper } from \"../../internal/graphql-system\";\nimport { createStandardDiagnostic } from \"../common/detection\";\nimport { createExportBindingsMap, type ScopeFrame } from \"../common/scope\";\nimport type { AnalyzerAdapter, AnalyzerResult } from \"../core\";\nimport type {\n  AnalyzeModuleInput,\n  DiagnosticLocation,\n  ModuleDefinition,\n  ModuleDiagnostic,\n  ModuleExport,\n  ModuleImport,\n} from \"../types\";\n\nconst createSourceFile = (filePath: string, source: string): ts.SourceFile => {\n  const scriptKind = extname(filePath) === \".tsx\" ? ts.ScriptKind.TSX : ts.ScriptKind.TS;\n  return ts.createSourceFile(filePath, source, ts.ScriptTarget.ES2022, true, scriptKind);\n};\n\nconst collectGqlImports = (sourceFile: ts.SourceFile, helper: GraphqlSystemIdentifyHelper): ReadonlySet<string> => {\n  const identifiers = new Set<string>();\n\n  sourceFile.statements.forEach((statement) => {\n    if (!ts.isImportDeclaration(statement) || !statement.importClause) {\n      return;\n    }\n\n    const moduleText = (statement.moduleSpecifier as ts.StringLiteral).text;\n    if (!helper.isGraphqlSystemImportSpecifier({ filePath: sourceFile.fileName, specifier: moduleText })) {\n      return;\n    }\n\n    if (statement.importClause.namedBindings && ts.isNamedImports(statement.importClause.namedBindings)) {\n      statement.importClause.namedBindings.elements.forEach((element) => {\n        const imported = element.propertyName ? element.propertyName.text : element.name.text;\n        // Only add non-renamed imports (propertyName exists when renamed: \"gql as g\")\n        if (imported === \"gql\" && !element.propertyName) {\n          identifiers.add(element.name.text);\n        }\n      });\n    }\n  });\n\n  return identifiers;\n};\n\nconst collectImports = (sourceFile: ts.SourceFile): ModuleImport[] => {\n  const imports: ModuleImport[] = [];\n\n  sourceFile.statements.forEach((statement) => {\n    if (!ts.isImportDeclaration(statement) || !statement.importClause) {\n      return;\n    }\n\n    const moduleText = (statement.moduleSpecifier as ts.StringLiteral).text;\n    const { importClause } = statement;\n\n    if (importClause.name) {\n      imports.push({\n        source: moduleText,\n        local: importClause.name.text,\n        kind: \"default\",\n        isTypeOnly: Boolean(importClause.isTypeOnly),\n      });\n    }\n\n    const { namedBindings } = importClause;\n    if (!namedBindings) {\n      return;\n    }\n\n    if (ts.isNamespaceImport(namedBindings)) {\n      imports.push({\n        source: moduleText,\n        local: namedBindings.name.text,\n        kind: \"namespace\",\n        isTypeOnly: Boolean(importClause.isTypeOnly),\n      });\n      return;\n    }\n\n    namedBindings.elements.forEach((element) => {\n      imports.push({\n        source: moduleText,\n        local: element.name.text,\n        kind: \"named\",\n        isTypeOnly: Boolean(importClause.isTypeOnly || element.isTypeOnly),\n      });\n    });\n  });\n\n  return imports;\n};\n\nconst collectExports = (sourceFile: ts.SourceFile): ModuleExport[] => {\n  const exports: ModuleExport[] = [];\n\n  sourceFile.statements.forEach((statement) => {\n    if (ts.isExportDeclaration(statement)) {\n      const moduleSpecifier = statement.moduleSpecifier ? (statement.moduleSpecifier as ts.StringLiteral).text : undefined;\n\n      if (statement.exportClause && ts.isNamedExports(statement.exportClause)) {\n        statement.exportClause.elements.forEach((element) => {\n          if (moduleSpecifier) {\n            exports.push({\n              kind: \"reexport\",\n              exported: element.name.text,\n              local: element.propertyName ? element.propertyName.text : undefined,\n              source: moduleSpecifier,\n              isTypeOnly: Boolean(statement.isTypeOnly || element.isTypeOnly),\n            });\n          } else {\n            exports.push({\n              kind: \"named\",\n              exported: element.name.text,\n              local: element.propertyName ? element.propertyName.text : element.name.text,\n              isTypeOnly: Boolean(statement.isTypeOnly || element.isTypeOnly),\n            });\n          }\n        });\n        return;\n      }\n\n      if (moduleSpecifier) {\n        exports.push({\n          kind: \"reexport\",\n          exported: \"*\",\n          source: moduleSpecifier,\n          isTypeOnly: Boolean(statement.isTypeOnly),\n        });\n      }\n\n      return;\n    }\n\n    if (ts.isExportAssignment(statement)) {\n      exports.push({\n        kind: \"named\",\n        exported: \"default\",\n        local: \"default\",\n        isTypeOnly: false,\n      });\n    }\n\n    if (\n      ts.isVariableStatement(statement) &&\n      statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)\n    ) {\n      statement.declarationList.declarations.forEach((declaration) => {\n        if (ts.isIdentifier(declaration.name)) {\n          exports.push({\n            kind: \"named\",\n            exported: declaration.name.text,\n            local: declaration.name.text,\n            isTypeOnly: false,\n          });\n        }\n      });\n    }\n\n    if (\n      ts.isFunctionDeclaration(statement) &&\n      statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) &&\n      statement.name\n    ) {\n      exports.push({\n        kind: \"named\",\n        exported: statement.name.text,\n        local: statement.name.text,\n        isTypeOnly: false,\n      });\n    }\n  });\n\n  return exports;\n};\n\n/**\n * Unwrap NonNullExpression nodes to get the underlying expression.\n * Handles cases like `gql!` or `gql!!` by recursively unwrapping.\n */\nconst unwrapNonNullExpression = (node: ts.Expression): ts.Expression => {\n  if (ts.isNonNullExpression(node)) {\n    return unwrapNonNullExpression(node.expression);\n  }\n  return node;\n};\n\nconst isGqlDefinitionCall = (identifiers: ReadonlySet<string>, callExpression: ts.CallExpression): boolean => {\n  const expression = callExpression.expression;\n  if (!ts.isPropertyAccessExpression(expression)) {\n    return false;\n  }\n\n  // Unwrap NonNullExpression: gql!.default(...) -> gql.default(...)\n  const baseExpr = unwrapNonNullExpression(expression.expression);\n\n  if (!ts.isIdentifier(baseExpr) || !identifiers.has(baseExpr.text)) {\n    return false;\n  }\n\n  const [factory] = callExpression.arguments;\n  if (!factory || !(ts.isArrowFunction(factory) || ts.isFunctionExpression(factory))) {\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Unwrap method chains (like .attach()) to find the underlying gql call.\n * Returns the innermost CallExpression that is a valid gql definition call.\n */\nconst unwrapMethodChains = (identifiers: ReadonlySet<string>, node: ts.Node): ts.CallExpression | null => {\n  if (!ts.isCallExpression(node)) {\n    return null;\n  }\n\n  // Check if this is directly a gql definition call\n  if (isGqlDefinitionCall(identifiers, node)) {\n    return node;\n  }\n\n  // Check if this is a method call on another expression (e.g., .attach())\n  const expression = node.expression;\n  if (!ts.isPropertyAccessExpression(expression)) {\n    return null;\n  }\n\n  // Recursively check the object of the property access\n  // e.g., for `gql.default(...).attach(...)`, expression.expression is `gql.default(...)`\n  return unwrapMethodChains(identifiers, expression.expression);\n};\n\n/**\n * Get property name from AST node\n */\nconst getPropertyName = (name: ts.PropertyName): string | null => {\n  if (ts.isIdentifier(name)) {\n    return name.text;\n  }\n  if (ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n    return name.text;\n  }\n  return null;\n};\n\n/**\n * Collect all gql definitions (exported, non-exported, top-level, nested)\n */\nconst collectAllDefinitions = ({\n  sourceFile,\n  identifiers,\n  exports,\n  baseDir,\n}: {\n  sourceFile: ts.SourceFile;\n  identifiers: ReadonlySet<string>;\n  exports: readonly ModuleExport[];\n  baseDir?: string;\n}): {\n  readonly definitions: ModuleDefinition[];\n  readonly handledCalls: readonly ts.CallExpression[];\n} => {\n  type PendingDefinition = {\n    readonly astPath: string;\n    readonly isTopLevel: boolean;\n    readonly isExported: boolean;\n    readonly exportBinding?: string;\n    readonly expression: string;\n  };\n\n  const pending: PendingDefinition[] = [];\n  const handledCalls: ts.CallExpression[] = [];\n\n  // Build export bindings map (which variables are exported and with what name)\n  const exportBindings = createExportBindingsMap(exports);\n\n  // Create canonical tracker\n  const tracker = createCanonicalTracker({\n    filePath: sourceFile.fileName,\n    baseDir,\n    getExportName: (localName) => exportBindings.get(localName),\n  });\n\n  // Anonymous scope counters (for naming only, not occurrence tracking)\n  // Use underscore separator instead of # to ensure valid JavaScript identifiers\n  const anonymousCounters = new Map<string, number>();\n  const getAnonymousName = (kind: string): string => {\n    const count = anonymousCounters.get(kind) ?? 0;\n    anonymousCounters.set(kind, count + 1);\n    return `_${kind}_${count}`;\n  };\n\n  // Helper to synchronize tracker with immutable stack pattern\n  const withScope = <T>(\n    stack: ScopeFrame[],\n    segment: string,\n    kind: ScopeFrame[\"kind\"],\n    stableKey: string,\n    callback: (newStack: ScopeFrame[]) => T,\n  ): T => {\n    const handle = tracker.enterScope({ segment, kind, stableKey });\n    try {\n      const frame: ScopeFrame = { nameSegment: segment, kind };\n      return callback([...stack, frame]);\n    } finally {\n      tracker.exitScope(handle);\n    }\n  };\n\n  // Check if we're inside a class property (class property scope tracking is unreliable)\n  const isInClassProperty = (stack: ScopeFrame[]): boolean =>\n    stack.some((frame, i) => frame.kind === \"property\" && stack[i - 1]?.kind === \"class\");\n\n  const visit = (node: ts.Node, stack: ScopeFrame[]) => {\n    // Check if this is a gql definition call (possibly wrapped in method chains like .attach())\n    if (ts.isCallExpression(node)) {\n      const gqlCall = unwrapMethodChains(identifiers, node);\n      // Skip definition collection for gql calls inside class properties\n      // (CLASS_PROPERTY diagnostic is still emitted by collectClassPropertyDiagnostics)\n      if (gqlCall && !isInClassProperty(stack)) {\n        // If scopeStack is empty (unbound gql call), enter an anonymous scope\n        const needsAnonymousScope = tracker.currentDepth() === 0;\n        let anonymousScopeHandle: ScopeHandle | undefined;\n\n        if (needsAnonymousScope) {\n          const anonymousName = getAnonymousName(\"anonymous\");\n          anonymousScopeHandle = tracker.enterScope({\n            segment: anonymousName,\n            kind: \"expression\",\n            stableKey: \"anonymous\",\n          });\n        }\n\n        try {\n          // Use tracker to get astPath\n          const { astPath } = tracker.registerDefinition();\n          const isTopLevel = stack.length === 1;\n\n          // Determine if exported\n          let isExported = false;\n          let exportBinding: string | undefined;\n\n          if (isTopLevel && stack[0]) {\n            const topLevelName = stack[0].nameSegment;\n            if (exportBindings.has(topLevelName)) {\n              isExported = true;\n              exportBinding = exportBindings.get(topLevelName);\n            }\n          }\n\n          handledCalls.push(node);\n          pending.push({\n            astPath,\n            isTopLevel,\n            isExported,\n            exportBinding,\n            // Use the unwrapped gql call expression (without .attach() chain)\n            expression: gqlCall.getText(sourceFile),\n          });\n        } finally {\n          // Exit anonymous scope if we entered one\n          if (anonymousScopeHandle) {\n            tracker.exitScope(anonymousScopeHandle);\n          }\n        }\n\n        // Don't visit children of gql calls\n        return;\n      }\n    }\n\n    // Variable declaration\n    if (ts.isVariableDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n      const varName = node.name.text;\n\n      if (node.initializer) {\n        const next = node.initializer;\n        withScope(stack, varName, \"variable\", `var:${varName}`, (newStack) => {\n          visit(next, newStack);\n        });\n      }\n      return;\n    }\n\n    // Function declaration\n    if (ts.isFunctionDeclaration(node)) {\n      const funcName = node.name?.text ?? getAnonymousName(\"function\");\n\n      if (node.body) {\n        const next = node.body;\n        withScope(stack, funcName, \"function\", `func:${funcName}`, (newStack) => {\n          ts.forEachChild(next, (child) => visit(child, newStack));\n        });\n      }\n      return;\n    }\n\n    // Arrow function\n    if (ts.isArrowFunction(node)) {\n      const arrowName = getAnonymousName(\"arrow\");\n\n      withScope(stack, arrowName, \"function\", \"arrow\", (newStack) => {\n        if (ts.isBlock(node.body)) {\n          ts.forEachChild(node.body, (child) => visit(child, newStack));\n        } else {\n          visit(node.body, newStack);\n        }\n      });\n      return;\n    }\n\n    // Function expression\n    if (ts.isFunctionExpression(node)) {\n      const funcName = node.name?.text ?? getAnonymousName(\"function\");\n\n      if (node.body) {\n        withScope(stack, funcName, \"function\", `func:${funcName}`, (newStack) => {\n          ts.forEachChild(node.body, (child) => visit(child, newStack));\n        });\n      }\n      return;\n    }\n\n    // Class declaration\n    if (ts.isClassDeclaration(node)) {\n      const className = node.name?.text ?? getAnonymousName(\"class\");\n\n      withScope(stack, className, \"class\", `class:${className}`, (classStack) => {\n        node.members.forEach((member) => {\n          if (ts.isMethodDeclaration(member) || ts.isPropertyDeclaration(member)) {\n            const memberName = member.name && ts.isIdentifier(member.name) ? member.name.text : null;\n            if (memberName) {\n              const memberKind = ts.isMethodDeclaration(member) ? \"method\" : \"property\";\n              withScope(classStack, memberName, memberKind, `member:${className}.${memberName}`, (memberStack) => {\n                if (ts.isMethodDeclaration(member) && member.body) {\n                  ts.forEachChild(member.body, (child) => visit(child, memberStack));\n                } else if (ts.isPropertyDeclaration(member) && member.initializer) {\n                  visit(member.initializer, memberStack);\n                }\n              });\n            }\n          }\n        });\n      });\n      return;\n    }\n\n    // Object literal property\n    if (ts.isPropertyAssignment(node)) {\n      const propName = getPropertyName(node.name);\n      if (propName) {\n        withScope(stack, propName, \"property\", `prop:${propName}`, (newStack) => {\n          visit(node.initializer, newStack);\n        });\n      }\n      return;\n    }\n\n    // Recursively visit children\n    ts.forEachChild(node, (child) => visit(child, stack));\n  };\n\n  // Start traversal from top-level statements\n  sourceFile.statements.forEach((statement) => {\n    visit(statement, []);\n  });\n\n  const definitions = pending.map(\n    (item) =>\n      ({\n        canonicalId: createCanonicalId(sourceFile.fileName, item.astPath, { baseDir }),\n        astPath: item.astPath,\n        isTopLevel: item.isTopLevel,\n        isExported: item.isExported,\n        exportBinding: item.exportBinding,\n        expression: item.expression,\n      }) satisfies ModuleDefinition,\n  );\n\n  return { definitions, handledCalls };\n};\n\n// ============================================================================\n// Diagnostic Collection\n// ============================================================================\n\n/**\n * Get location from a TypeScript node\n */\nconst getLocation = (sourceFile: ts.SourceFile, node: ts.Node): DiagnosticLocation => {\n  const start = node.getStart(sourceFile);\n  const { line, character } = sourceFile.getLineAndCharacterOfPosition(start);\n  return {\n    start,\n    end: node.getEnd(),\n    line: line + 1, // 1-indexed\n    column: character + 1,\n  };\n};\n\n/**\n * Collect diagnostics for invalid import patterns from graphql-system\n */\nconst collectImportDiagnostics = (sourceFile: ts.SourceFile, helper: GraphqlSystemIdentifyHelper): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  sourceFile.statements.forEach((statement) => {\n    if (!ts.isImportDeclaration(statement) || !statement.importClause) {\n      return;\n    }\n\n    const moduleText = (statement.moduleSpecifier as ts.StringLiteral).text;\n    if (!helper.isGraphqlSystemImportSpecifier({ filePath: sourceFile.fileName, specifier: moduleText })) {\n      return;\n    }\n\n    const { importClause } = statement;\n\n    // Check for default import: import gql from \"...\"\n    if (importClause.name) {\n      diagnostics.push(createStandardDiagnostic(\"DEFAULT_IMPORT\", getLocation(sourceFile, importClause.name), undefined));\n    }\n\n    const { namedBindings } = importClause;\n    if (!namedBindings) {\n      return;\n    }\n\n    // Check for namespace import: import * as gqlSystem from \"...\"\n    if (ts.isNamespaceImport(namedBindings)) {\n      diagnostics.push(\n        createStandardDiagnostic(\"STAR_IMPORT\", getLocation(sourceFile, namedBindings), {\n          namespaceAlias: namedBindings.name.text,\n        }),\n      );\n      return;\n    }\n\n    // Check for renamed gql import: import { gql as g } from \"...\"\n    namedBindings.elements.forEach((element) => {\n      const imported = element.propertyName ? element.propertyName.text : element.name.text;\n      // Only report if gql is renamed (propertyName exists and is \"gql\")\n      if (imported === \"gql\" && element.propertyName) {\n        diagnostics.push(\n          createStandardDiagnostic(\"RENAMED_IMPORT\", getLocation(sourceFile, element), {\n            importedAs: element.name.text,\n          }),\n        );\n      }\n    });\n  });\n\n  return diagnostics;\n};\n\n/**\n * Check if a node contains a reference to any gql identifier\n */\nconst containsGqlIdentifier = (node: ts.Node, identifiers: ReadonlySet<string>): boolean => {\n  if (ts.isIdentifier(node) && identifiers.has(node.text)) {\n    return true;\n  }\n  let found = false;\n  ts.forEachChild(node, (child) => {\n    if (containsGqlIdentifier(child, identifiers)) {\n      found = true;\n    }\n  });\n  return found;\n};\n\n/**\n * Get the type name of an argument for error messages\n */\nconst getArgumentType = (node: ts.Node): string => {\n  if (ts.isStringLiteral(node)) return \"string\";\n  if (ts.isNumericLiteral(node)) return \"number\";\n  if (ts.isObjectLiteralExpression(node)) return \"object\";\n  if (ts.isArrayLiteralExpression(node)) return \"array\";\n  if (ts.isFunctionExpression(node)) return \"function\";\n  if (node.kind === ts.SyntaxKind.NullKeyword) return \"null\";\n  if (node.kind === ts.SyntaxKind.UndefinedKeyword) return \"undefined\";\n  if (node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword) return \"boolean\";\n  return \"unknown\";\n};\n\n/**\n * Collect diagnostics for invalid gql call patterns\n */\nconst collectCallDiagnostics = (sourceFile: ts.SourceFile, gqlIdentifiers: ReadonlySet<string>): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  const visit = (node: ts.Node) => {\n    if (ts.isCallExpression(node)) {\n      const diagnostic = checkCallExpression(sourceFile, node, gqlIdentifiers);\n      if (diagnostic) {\n        diagnostics.push(diagnostic);\n      }\n    }\n    ts.forEachChild(node, visit);\n  };\n\n  sourceFile.statements.forEach(visit);\n  return diagnostics;\n};\n\n/**\n * Check a call expression for invalid gql patterns\n */\nconst checkCallExpression = (\n  sourceFile: ts.SourceFile,\n  call: ts.CallExpression,\n  gqlIdentifiers: ReadonlySet<string>,\n): ModuleDiagnostic | null => {\n  const { expression } = call;\n\n  // Check for direct gql() call (non-member): gql(...)\n  if (ts.isIdentifier(expression) && gqlIdentifiers.has(expression.text)) {\n    return createStandardDiagnostic(\"NON_MEMBER_CALLEE\", getLocation(sourceFile, call), undefined);\n  }\n\n  // Check for element access: gql[\"default\"](...) or gql![\"default\"](...)\n  if (ts.isElementAccessExpression(expression)) {\n    const baseExpr = unwrapNonNullExpression(expression.expression);\n    if (ts.isIdentifier(baseExpr) && gqlIdentifiers.has(baseExpr.text)) {\n      return createStandardDiagnostic(\"COMPUTED_PROPERTY\", getLocation(sourceFile, call), undefined);\n    }\n    return null;\n  }\n\n  // Must be property access for valid gql call\n  if (!ts.isPropertyAccessExpression(expression)) {\n    return null;\n  }\n\n  // Unwrap NonNullExpression: gql!.default(...) -> gql.default(...)\n  const baseExpr = unwrapNonNullExpression(expression.expression);\n\n  // Check for optional chaining: gql?.default(...)\n  if (expression.questionDotToken) {\n    if (ts.isIdentifier(baseExpr) && gqlIdentifiers.has(baseExpr.text)) {\n      return createStandardDiagnostic(\"OPTIONAL_CHAINING\", getLocation(sourceFile, call), undefined);\n    }\n    return null;\n  }\n\n  // Check for dynamic callee: (x || gql).default(...)\n  if (!ts.isIdentifier(baseExpr)) {\n    if (containsGqlIdentifier(expression.expression, gqlIdentifiers)) {\n      return createStandardDiagnostic(\"DYNAMIC_CALLEE\", getLocation(sourceFile, call), undefined);\n    }\n    return null;\n  }\n\n  // Not a gql identifier - skip\n  if (!gqlIdentifiers.has(baseExpr.text)) {\n    return null;\n  }\n\n  // Check arguments for gql.schema(...) calls\n  if (call.arguments.length === 0) {\n    return createStandardDiagnostic(\"MISSING_ARGUMENT\", getLocation(sourceFile, call), undefined);\n  }\n\n  const firstArg = call.arguments[0];\n\n  // Check for spread argument: gql.default(...args)\n  if (firstArg && ts.isSpreadElement(firstArg)) {\n    return createStandardDiagnostic(\"SPREAD_ARGUMENT\", getLocation(sourceFile, call), undefined);\n  }\n\n  if (firstArg && !ts.isArrowFunction(firstArg)) {\n    const actualType = getArgumentType(firstArg);\n    return createStandardDiagnostic(\"INVALID_ARGUMENT_TYPE\", getLocation(sourceFile, call), { actualType });\n  }\n\n  // Check for extra arguments: gql.default(() => ..., extra)\n  if (call.arguments.length > 1) {\n    const extraCount = call.arguments.length - 1;\n    return createStandardDiagnostic(\"EXTRA_ARGUMENTS\", getLocation(sourceFile, call), {\n      extraCount: String(extraCount),\n    });\n  }\n\n  return null;\n};\n\n/**\n * Collect diagnostics for gql calls in class properties\n */\nconst collectClassPropertyDiagnostics = (sourceFile: ts.SourceFile, gqlIdentifiers: ReadonlySet<string>): ModuleDiagnostic[] => {\n  const diagnostics: ModuleDiagnostic[] = [];\n\n  const containsGqlCall = (node: ts.Node): boolean => {\n    if (ts.isCallExpression(node) && isGqlDefinitionCall(gqlIdentifiers, node)) {\n      return true;\n    }\n    let found = false;\n    ts.forEachChild(node, (child) => {\n      if (containsGqlCall(child)) {\n        found = true;\n      }\n    });\n    return found;\n  };\n\n  const visit = (node: ts.Node) => {\n    if (ts.isClassDeclaration(node)) {\n      node.members.forEach((member) => {\n        if (ts.isPropertyDeclaration(member) && member.initializer) {\n          if (containsGqlCall(member.initializer)) {\n            diagnostics.push(createStandardDiagnostic(\"CLASS_PROPERTY\", getLocation(sourceFile, member), undefined));\n          }\n        }\n      });\n    }\n    ts.forEachChild(node, visit);\n  };\n\n  sourceFile.statements.forEach(visit);\n  return diagnostics;\n};\n\n/**\n * TypeScript adapter implementation.\n * The analyze method parses and collects all data in one pass,\n * ensuring the AST (ts.SourceFile) is released after analysis.\n */\nexport const typescriptAdapter: AnalyzerAdapter = {\n  analyze(input: AnalyzeModuleInput, helper: GraphqlSystemIdentifyHelper): AnalyzerResult | null {\n    // Parse source - AST is local to this function\n    const sourceFile = createSourceFile(input.filePath, input.source);\n\n    // Collect all data in one pass\n    const gqlIdentifiers = collectGqlImports(sourceFile, helper);\n    const imports = collectImports(sourceFile);\n    const exports = collectExports(sourceFile);\n\n    const { definitions } = collectAllDefinitions({\n      sourceFile,\n      identifiers: gqlIdentifiers,\n      exports,\n      baseDir: input.baseDir,\n    });\n\n    // Collect diagnostics\n    const diagnostics = [\n      ...collectImportDiagnostics(sourceFile, helper),\n      ...collectCallDiagnostics(sourceFile, gqlIdentifiers),\n      ...collectClassPropertyDiagnostics(sourceFile, gqlIdentifiers),\n    ];\n\n    // Return results - sourceFile goes out of scope and becomes eligible for GC\n    return {\n      imports,\n      exports,\n      definitions,\n      diagnostics,\n    };\n  },\n};\n","/**\n * Core analyzer logic that orchestrates the analysis pipeline.\n * Adapters (TypeScript, SWC, etc.) implement the adapter interface to plug into this pipeline.\n */\n\nimport { getPortableHasher } from \"@soda-gql/common\";\nimport type { GraphqlSystemIdentifyHelper } from \"../internal/graphql-system\";\nimport type { AnalyzeModuleInput, ModuleAnalysis, ModuleDefinition, ModuleDiagnostic, ModuleExport, ModuleImport } from \"./types\";\n\n/**\n * Result of analyzing a module, containing all collected data.\n */\nexport type AnalyzerResult = {\n  readonly imports: readonly ModuleImport[];\n  readonly exports: readonly ModuleExport[];\n  readonly definitions: readonly ModuleDefinition[];\n  readonly diagnostics: readonly ModuleDiagnostic[];\n};\n\n/**\n * Adapter interface that each parser implementation (TS, SWC) must provide.\n * The analyze method parses and collects all data in one pass, allowing the AST\n * to be released immediately after analysis completes.\n */\nexport interface AnalyzerAdapter {\n  /**\n   * Parse source code into an AST, collect all required data, and return results.\n   * The AST is kept within this function's scope and released after analysis.\n   * This design enables early garbage collection of AST objects.\n   */\n  analyze(input: AnalyzeModuleInput, helper: GraphqlSystemIdentifyHelper): AnalyzerResult | null;\n}\n\n/**\n * Core analyzer function that orchestrates the analysis pipeline.\n * Adapters implement the AnalyzerAdapter interface to provide parser-specific logic.\n */\nexport const analyzeModuleCore = (\n  input: AnalyzeModuleInput,\n  adapter: AnalyzerAdapter,\n  graphqlHelper: GraphqlSystemIdentifyHelper,\n): ModuleAnalysis => {\n  const hasher = getPortableHasher();\n  const signature = hasher.hash(input.source, \"xxhash\");\n\n  // Delegate all analysis to the adapter - AST is created and released within analyze()\n  const result = adapter.analyze(input, graphqlHelper);\n\n  if (!result) {\n    return {\n      filePath: input.filePath,\n      signature,\n      definitions: [],\n      imports: [],\n      exports: [],\n      diagnostics: [],\n    };\n  }\n\n  return {\n    filePath: input.filePath,\n    signature,\n    definitions: result.definitions,\n    imports: result.imports,\n    exports: result.exports,\n    diagnostics: result.diagnostics,\n  };\n};\n","import { assertUnreachable } from \"../errors\";\nimport type { GraphqlSystemIdentifyHelper } from \"../internal/graphql-system\";\nimport type { BuilderAnalyzer } from \"../types\";\nimport { swcAdapter } from \"./adapters/swc\";\nimport { typescriptAdapter } from \"./adapters/typescript\";\nimport { analyzeModuleCore } from \"./core\";\nimport type { AnalyzeModuleInput, ModuleAnalysis } from \"./types\";\n\nexport type { AnalyzeModuleInput, ModuleAnalysis, ModuleDefinition, ModuleExport, ModuleImport } from \"./types\";\n\nexport const createAstAnalyzer = ({\n  analyzer,\n  graphqlHelper,\n  baseDir,\n}: {\n  readonly analyzer: BuilderAnalyzer;\n  readonly graphqlHelper: GraphqlSystemIdentifyHelper;\n  /**\n   * Base directory for relative path computation in canonical IDs.\n   * When provided, all canonical IDs generated during analysis will use\n   * relative paths from baseDir, enabling portable artifacts.\n   */\n  readonly baseDir?: string;\n}) => {\n  const analyze = (input: Omit<AnalyzeModuleInput, \"baseDir\">): ModuleAnalysis => {\n    const inputWithBaseDir: AnalyzeModuleInput = { ...input, baseDir };\n    if (analyzer === \"ts\") {\n      return analyzeModuleCore(inputWithBaseDir, typescriptAdapter, graphqlHelper);\n    }\n    if (analyzer === \"swc\") {\n      return analyzeModuleCore(inputWithBaseDir, swcAdapter, graphqlHelper);\n    }\n    return assertUnreachable(analyzer, \"createAstAnalyzer\");\n  };\n\n  return {\n    type: analyzer,\n    analyze,\n  };\n};\n","import { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { getPortableFS, getPortableHasher } from \"@soda-gql/common\";\nimport { z } from \"zod\";\n\ntype CacheNamespace = readonly string[];\n\nexport type CacheFactoryOptions = {\n  readonly prefix?: CacheNamespace;\n  readonly persistence?: {\n    readonly enabled: boolean;\n    readonly filePath: string;\n  };\n};\n\nexport type CacheStoreOptions<_K extends string, V> = {\n  readonly namespace: CacheNamespace;\n  readonly schema: z.ZodType<V>;\n  readonly version?: string;\n};\n\nexport type CacheStore<K extends string, V> = {\n  load(key: K): V | null;\n  store(key: K, value: V): void;\n  delete(key: K): void;\n  entries(): IterableIterator<[K, V]>;\n  clear(): void;\n  size(): number;\n};\n\nexport type CacheFactory = {\n  createStore<K extends string, V>(options: CacheStoreOptions<K, V>): CacheStore<K, V>;\n  clearAll(): void;\n  save(): void;\n};\n\nconst sanitizeSegment = (segment: string): string => segment.replace(/[\\\\/]/g, \"_\");\n\nconst toNamespaceKey = (segments: CacheNamespace): string => segments.map(sanitizeSegment).join(\"/\");\n\nconst toEntryKey = (key: string): string => {\n  const hasher = getPortableHasher();\n  return hasher.hash(key, \"xxhash\");\n};\n\ntype Envelope<V> = {\n  key: string;\n  version: string;\n  value: V;\n};\n\ntype PersistedData = {\n  version: string;\n  storage: Record<string, Array<[string, Envelope<unknown>]>>;\n};\n\nconst PERSISTENCE_VERSION = \"v1\";\n\n/**\n * Validate persisted data structure.\n * Uses simple validation to detect corruption without strict schema.\n */\nconst isValidPersistedData = (data: unknown): data is PersistedData => {\n  if (typeof data !== \"object\" || data === null) return false;\n  const record = data as Record<string, unknown>;\n\n  if (typeof record.version !== \"string\") return false;\n  if (typeof record.storage !== \"object\" || record.storage === null) return false;\n\n  // Validate each namespace has array of entries\n  for (const value of Object.values(record.storage as Record<string, unknown>)) {\n    if (!Array.isArray(value)) return false;\n    for (const entry of value) {\n      if (!Array.isArray(entry) || entry.length !== 2) return false;\n      if (typeof entry[0] !== \"string\") return false;\n      // Validate envelope has required fields\n      const envelope = entry[1];\n      if (typeof envelope !== \"object\" || envelope === null) return false;\n      const env = envelope as Record<string, unknown>;\n      if (typeof env.key !== \"string\" || typeof env.version !== \"string\") return false;\n    }\n  }\n\n  return true;\n};\n\nexport const createMemoryCache = ({ prefix = [], persistence }: CacheFactoryOptions = {}): CacheFactory => {\n  // Global in-memory storage: Map<namespaceKey, Map<hashedKey, Envelope>>\n  const storage = new Map<string, Map<string, Envelope<unknown>>>();\n\n  // Load from disk if persistence is enabled (synchronous on startup)\n  if (persistence?.enabled) {\n    try {\n      if (existsSync(persistence.filePath)) {\n        const content = readFileSync(persistence.filePath, \"utf-8\");\n\n        // Parse and validate JSON structure\n        let parsed: unknown;\n        try {\n          parsed = JSON.parse(content);\n        } catch {\n          // Invalid JSON - delete corrupt file and start fresh\n          console.warn(`[cache] Corrupt cache file (invalid JSON), starting fresh: ${persistence.filePath}`);\n          try {\n            unlinkSync(persistence.filePath);\n          } catch {\n            // Ignore deletion errors\n          }\n          parsed = null;\n        }\n\n        if (parsed) {\n          // Validate structure to detect corruption\n          if (!isValidPersistedData(parsed)) {\n            console.warn(`[cache] Corrupt cache file (invalid structure), starting fresh: ${persistence.filePath}`);\n            try {\n              unlinkSync(persistence.filePath);\n            } catch {\n              // Ignore deletion errors\n            }\n          } else if (parsed.version === PERSISTENCE_VERSION) {\n            // Restore Map structure from validated data\n            for (const [namespaceKey, entries] of Object.entries(parsed.storage)) {\n              const namespaceMap = new Map<string, Envelope<unknown>>();\n              for (const [hashedKey, envelope] of entries) {\n                namespaceMap.set(hashedKey, envelope);\n              }\n              storage.set(namespaceKey, namespaceMap);\n            }\n          }\n          // Version mismatch - start fresh without warning (expected on version upgrade)\n        }\n      }\n    } catch (error) {\n      // Unexpected error during load - start fresh\n      console.warn(`[cache] Failed to load cache from ${persistence.filePath}:`, error);\n    }\n  }\n\n  const getOrCreateNamespace = (namespaceKey: string): Map<string, Envelope<unknown>> => {\n    let namespace = storage.get(namespaceKey);\n    if (!namespace) {\n      namespace = new Map();\n      storage.set(namespaceKey, namespace);\n    }\n    return namespace;\n  };\n\n  return {\n    createStore: <K extends string, V>({ namespace, schema, version = \"v1\" }: CacheStoreOptions<K, V>): CacheStore<K, V> => {\n      const namespaceKey = toNamespaceKey([...prefix, ...namespace]);\n      const envelopeSchema = z.object({\n        key: z.string(),\n        version: z.string(),\n        value: schema,\n      });\n\n      const resolveEntryKey = (key: string) => toEntryKey(key);\n\n      const validateEnvelope = (raw: Envelope<unknown>): Envelope<V> | null => {\n        const parsed = envelopeSchema.safeParse(raw);\n        if (!parsed.success) {\n          return null;\n        }\n\n        if (parsed.data.version !== version) {\n          return null;\n        }\n\n        return parsed.data as Envelope<V>;\n      };\n\n      const load = (key: K): V | null => {\n        const namespaceStore = storage.get(namespaceKey);\n        if (!namespaceStore) {\n          return null;\n        }\n\n        const entryKey = resolveEntryKey(key);\n        const raw = namespaceStore.get(entryKey);\n        if (!raw) {\n          return null;\n        }\n\n        const envelope = validateEnvelope(raw);\n        if (!envelope || envelope.key !== key) {\n          namespaceStore.delete(entryKey);\n          return null;\n        }\n\n        return envelope.value;\n      };\n\n      const store = (key: K, value: V): void => {\n        const namespaceStore = getOrCreateNamespace(namespaceKey);\n        const entryKey = resolveEntryKey(key);\n\n        const envelope: Envelope<V> = {\n          key,\n          version,\n          value,\n        };\n\n        namespaceStore.set(entryKey, envelope as Envelope<unknown>);\n      };\n\n      const deleteEntry = (key: K): void => {\n        const namespaceStore = storage.get(namespaceKey);\n        if (!namespaceStore) {\n          return;\n        }\n\n        const entryKey = resolveEntryKey(key);\n        namespaceStore.delete(entryKey);\n      };\n\n      function* iterateEntries(): IterableIterator<[K, V]> {\n        const namespaceStore = storage.get(namespaceKey);\n        if (!namespaceStore) {\n          return;\n        }\n\n        for (const raw of namespaceStore.values()) {\n          const envelope = validateEnvelope(raw);\n          if (!envelope) {\n            continue;\n          }\n\n          yield [envelope.key as K, envelope.value];\n        }\n      }\n\n      const clear = (): void => {\n        const namespaceStore = storage.get(namespaceKey);\n        if (namespaceStore) {\n          namespaceStore.clear();\n        }\n      };\n\n      const size = (): number => {\n        let count = 0;\n        for (const _ of iterateEntries()) {\n          count += 1;\n        }\n        return count;\n      };\n\n      return {\n        load,\n        store,\n        delete: deleteEntry,\n        entries: iterateEntries,\n        clear,\n        size,\n      };\n    },\n\n    clearAll: (): void => {\n      storage.clear();\n    },\n\n    save: (): void => {\n      if (!persistence?.enabled) {\n        return;\n      }\n\n      try {\n        // Convert Map structure to plain object for JSON serialization\n        const serialized: Record<string, Array<[string, Envelope<unknown>]>> = {};\n        for (const [namespaceKey, namespaceMap] of storage.entries()) {\n          serialized[namespaceKey] = Array.from(namespaceMap.entries());\n        }\n\n        const data: PersistedData = {\n          version: PERSISTENCE_VERSION,\n          storage: serialized,\n        };\n\n        // Use atomic write to prevent corruption on crash\n        // mkdirSync with recursive is idempotent - no TOCTOU race\n        const fs = getPortableFS();\n        fs.writeFileSyncAtomic(persistence.filePath, JSON.stringify(data));\n      } catch (error) {\n        console.warn(`[cache] Failed to save cache to ${persistence.filePath}:`, error);\n      }\n    },\n  };\n};\n","import { normalizePath } from \"@soda-gql/common\";\nimport type { ZodSchema } from \"zod\";\nimport type { CacheFactory, CacheStore } from \"./memory-cache\";\n\nexport type EntityCacheOptions<V> = {\n  readonly factory: CacheFactory;\n  readonly namespace: readonly string[];\n  readonly schema: ZodSchema<V>;\n  readonly version: string;\n  readonly keyNormalizer?: (key: string) => string;\n};\n\n/**\n * Abstract base class for entity caches.\n * Provides common caching functionality with signature-based eviction.\n */\nexport abstract class EntityCache<K extends string, V> {\n  protected readonly cacheStore: CacheStore<K, V>;\n  private readonly keyNormalizer: (key: string) => string;\n\n  constructor(options: EntityCacheOptions<V>) {\n    this.cacheStore = options.factory.createStore({\n      namespace: [...options.namespace],\n      schema: options.schema,\n      version: options.version,\n    });\n    this.keyNormalizer = options.keyNormalizer ?? normalizePath;\n  }\n\n  /**\n   * Normalize a key for consistent cache lookups.\n   */\n  protected normalizeKey(key: string): K {\n    return this.keyNormalizer(key) as K;\n  }\n\n  /**\n   * Load raw value from cache without signature validation.\n   */\n  protected loadRaw(key: K): V | null {\n    return this.cacheStore.load(key);\n  }\n\n  /**\n   * Store raw value to cache.\n   */\n  protected storeRaw(key: K, value: V): void {\n    this.cacheStore.store(key, value);\n  }\n\n  /**\n   * Delete an entry from the cache.\n   */\n  delete(key: string): void {\n    const normalizedKey = this.normalizeKey(key);\n    this.cacheStore.delete(normalizedKey);\n  }\n\n  /**\n   * Get all cached entries.\n   * Subclasses should override this to provide custom iteration.\n   */\n  protected *baseEntries(): IterableIterator<V> {\n    for (const [, value] of this.cacheStore.entries()) {\n      yield value;\n    }\n  }\n\n  /**\n   * Clear all entries from the cache.\n   */\n  clear(): void {\n    this.cacheStore.clear();\n  }\n\n  /**\n   * Get the number of entries in the cache.\n   */\n  size(): number {\n    return this.cacheStore.size();\n  }\n}\n","import { CanonicalIdSchema } from \"@soda-gql/common\";\nimport { z } from \"zod\";\n\nexport const ModuleDefinitionSchema = z.object({\n  canonicalId: CanonicalIdSchema,\n  astPath: z.string(),\n  isTopLevel: z.boolean(),\n  isExported: z.boolean(),\n  exportBinding: z.string().optional(),\n  expression: z.string(),\n});\n\nexport const ModuleImportSchema = z.object({\n  source: z.string(),\n  local: z.string(),\n  kind: z.enum([\"named\", \"namespace\", \"default\"]),\n  isTypeOnly: z.boolean(),\n});\n\nexport const ModuleExportSchema = z.discriminatedUnion(\"kind\", [\n  z.object({\n    kind: z.literal(\"named\"),\n    exported: z.string(),\n    local: z.string(),\n    source: z.undefined().optional(),\n    isTypeOnly: z.boolean(),\n  }),\n  z.object({\n    kind: z.literal(\"reexport\"),\n    exported: z.string(),\n    source: z.string(),\n    local: z.string().optional(),\n    isTypeOnly: z.boolean(),\n  }),\n]);\n\nconst DiagnosticCodeSchema = z.enum([\n  \"RENAMED_IMPORT\",\n  \"STAR_IMPORT\",\n  \"DEFAULT_IMPORT\",\n  \"MISSING_ARGUMENT\",\n  \"INVALID_ARGUMENT_TYPE\",\n  \"NON_MEMBER_CALLEE\",\n  \"COMPUTED_PROPERTY\",\n  \"DYNAMIC_CALLEE\",\n  \"OPTIONAL_CHAINING\",\n  \"EXTRA_ARGUMENTS\",\n  \"SPREAD_ARGUMENT\",\n  \"CLASS_PROPERTY\",\n]);\n\nconst DiagnosticLocationSchema = z.object({\n  start: z.number(),\n  end: z.number(),\n  line: z.number().optional(),\n  column: z.number().optional(),\n});\n\nconst ModuleDiagnosticSchema = z.object({\n  code: DiagnosticCodeSchema,\n  severity: z.enum([\"error\", \"warning\"]),\n  message: z.string(),\n  location: DiagnosticLocationSchema,\n  context: z.record(z.string(), z.string()).readonly().optional(),\n});\n\nexport const ModuleAnalysisSchema = z.object({\n  filePath: z.string(),\n  signature: z.string(),\n  definitions: z.array(ModuleDefinitionSchema).readonly(),\n  imports: z.array(ModuleImportSchema).readonly(),\n  exports: z.array(ModuleExportSchema).readonly(),\n  diagnostics: z.array(ModuleDiagnosticSchema).readonly(),\n});\n\nexport type ModuleAnalysis = z.infer<typeof ModuleAnalysisSchema>;\n","import { z } from \"zod\";\nimport { ModuleAnalysisSchema } from \"./cache\";\n\nconst FileFingerprintSchema = z.object({\n  hash: z.string(),\n  sizeBytes: z.number(),\n  mtimeMs: z.number(),\n});\n\nexport const DiscoveredDependencySchema = z.object({\n  specifier: z.string(),\n  resolvedPath: z.string().nullable(),\n  isExternal: z.boolean(),\n});\n\nexport const DiscoverySnapshotSchema = z.object({\n  filePath: z.string(),\n  normalizedFilePath: z.string(),\n  signature: z.string(),\n  fingerprint: FileFingerprintSchema,\n  analyzer: z.string(),\n  createdAtMs: z.number(),\n  analysis: ModuleAnalysisSchema,\n  dependencies: z.array(DiscoveredDependencySchema).readonly(),\n});\n","import { EntityCache } from \"../cache/entity-cache\";\nimport type { CacheFactory } from \"../cache/memory-cache\";\nimport { DiscoverySnapshotSchema } from \"../schemas/discovery\";\nimport type { DiscoveryCache, DiscoverySnapshot } from \"./types\";\n\n// Bumped to v3 for DiscoverySnapshot schema change (added fingerprint and metadata fields)\nconst DISCOVERY_CACHE_VERSION = \"discovery-cache/v3\";\n\nexport type DiscoveryCacheOptions = {\n  readonly factory: CacheFactory;\n  readonly analyzer: string;\n  readonly evaluatorId: string;\n  readonly namespacePrefix?: readonly string[];\n  readonly version?: string;\n};\n\nexport class JsonDiscoveryCache extends EntityCache<string, DiscoverySnapshot> implements DiscoveryCache {\n  constructor(options: DiscoveryCacheOptions) {\n    const namespace = [...(options.namespacePrefix ?? [\"discovery\"]), options.analyzer, options.evaluatorId];\n\n    super({\n      factory: options.factory,\n      namespace,\n      schema: DiscoverySnapshotSchema,\n      version: options.version ?? DISCOVERY_CACHE_VERSION,\n    });\n  }\n\n  load(filePath: string, expectedSignature: string): DiscoverySnapshot | null {\n    const key = this.normalizeKey(filePath);\n    const snapshot = this.loadRaw(key);\n    if (!snapshot) {\n      return null;\n    }\n\n    if (snapshot.signature !== expectedSignature) {\n      this.delete(filePath);\n      return null;\n    }\n\n    return snapshot;\n  }\n\n  peek(filePath: string): DiscoverySnapshot | null {\n    const key = this.normalizeKey(filePath);\n    return this.loadRaw(key);\n  }\n\n  store(snapshot: DiscoverySnapshot): void {\n    const key = this.normalizeKey(snapshot.filePath);\n    this.storeRaw(key, snapshot);\n  }\n\n  entries(): IterableIterator<DiscoverySnapshot> {\n    return this.baseEntries();\n  }\n}\n\nexport const createDiscoveryCache = (options: DiscoveryCacheOptions): DiscoveryCache => new JsonDiscoveryCache(options);\n","import {\n  type AliasResolver,\n  getPortableHasher,\n  isExternalSpecifier,\n  resolveRelativeImportWithExistenceCheck,\n} from \"@soda-gql/common\";\nimport type { ModuleAnalysis } from \"../ast/types\";\nimport type { DiscoveredDependency } from \"./types\";\n\n/**\n * Options for extracting module dependencies.\n */\nexport type ExtractModuleDependenciesOptions = {\n  readonly analysis: ModuleAnalysis;\n  /** Optional alias resolver for tsconfig paths */\n  readonly aliasResolver?: AliasResolver;\n};\n\n/**\n * Extract all unique dependencies (relative + external) from the analysis.\n * Resolves local specifiers immediately so discovery only traverses once.\n *\n * Resolution order:\n * 1. Relative imports → resolveRelativeImportWithExistenceCheck\n * 2. Alias imports (if aliasResolver provided) → aliasResolver.resolve\n * 3. Otherwise → mark as external\n */\nexport const extractModuleDependencies = ({\n  analysis,\n  aliasResolver,\n}: ExtractModuleDependenciesOptions): readonly DiscoveredDependency[] => {\n  const dependencies = new Map<string, DiscoveredDependency>();\n\n  const addDependency = (specifier: string): void => {\n    if (dependencies.has(specifier)) {\n      return;\n    }\n\n    // Try relative import first\n    if (!isExternalSpecifier(specifier)) {\n      const resolvedPath = resolveRelativeImportWithExistenceCheck({\n        filePath: analysis.filePath,\n        specifier,\n      });\n      dependencies.set(specifier, {\n        specifier,\n        resolvedPath,\n        isExternal: false,\n      });\n      return;\n    }\n\n    // Try alias resolution if available\n    if (aliasResolver) {\n      const resolvedPath = aliasResolver.resolve(specifier);\n      if (resolvedPath) {\n        dependencies.set(specifier, {\n          specifier,\n          resolvedPath,\n          isExternal: false,\n        });\n        return;\n      }\n    }\n\n    // External package\n    dependencies.set(specifier, {\n      specifier,\n      resolvedPath: null,\n      isExternal: true,\n    });\n  };\n\n  for (const imp of analysis.imports) {\n    addDependency(imp.source);\n  }\n\n  for (const exp of analysis.exports) {\n    if (exp.kind === \"reexport\") {\n      addDependency(exp.source);\n    }\n  }\n\n  return Array.from(dependencies.values());\n};\n\nexport const createSourceHash = (source: string): string => {\n  const hasher = getPortableHasher();\n  return hasher.hash(source, \"xxhash\");\n};\n","import { readFileSync, statSync } from \"node:fs\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport type { XXHashAPI } from \"xxhash-wasm\";\n\n/**\n * File fingerprint containing hash, size, and modification time\n */\nexport type FileFingerprint = {\n  /** xxHash hash of file contents */\n  hash: string;\n  /** File size in bytes */\n  sizeBytes: number;\n  /** Last modification time in milliseconds since epoch */\n  mtimeMs: number;\n};\n\n/**\n * Fingerprint computation error types\n */\nexport type FingerprintError =\n  | { code: \"FILE_NOT_FOUND\"; path: string; message: string }\n  | { code: \"NOT_A_FILE\"; path: string; message: string }\n  | { code: \"READ_ERROR\"; path: string; message: string };\n\n/**\n * In-memory fingerprint cache keyed by absolute path\n */\nconst fingerprintCache = new Map<string, FileFingerprint>();\n\n/**\n * Lazy-loaded xxhash instance\n */\nlet xxhashInstance: XXHashAPI | null = null;\n\n/**\n * Lazily load xxhash-wasm instance\n */\nasync function getXXHash(): Promise<XXHashAPI> {\n  if (xxhashInstance === null) {\n    const { default: xxhash } = await import(\"xxhash-wasm\");\n    xxhashInstance = await xxhash();\n  }\n  return xxhashInstance;\n}\n\n/**\n * Compute file fingerprint with memoization.\n * Uses mtime to short-circuit re-hashing unchanged files.\n *\n * @param path - Absolute path to file\n * @returns Result containing FileFingerprint or FingerprintError\n */\nexport function computeFingerprint(path: string): Result<FileFingerprint, FingerprintError> {\n  try {\n    const stats = statSync(path);\n\n    if (!stats.isFile()) {\n      return err({\n        code: \"NOT_A_FILE\",\n        path,\n        message: `Path is not a file: ${path}`,\n      });\n    }\n\n    const mtimeMs = stats.mtimeMs;\n    const cached = fingerprintCache.get(path);\n\n    // Short-circuit if mtime unchanged\n    if (cached && cached.mtimeMs === mtimeMs) {\n      return ok(cached);\n    }\n\n    // Read and hash file contents\n    const contents = readFileSync(path);\n    const sizeBytes = stats.size;\n\n    // Compute hash synchronously (xxhash-wasm will be loaded async first time)\n    const hash = computeHashSync(contents);\n\n    const fingerprint: FileFingerprint = {\n      hash,\n      sizeBytes,\n      mtimeMs,\n    };\n\n    fingerprintCache.set(path, fingerprint);\n    return ok(fingerprint);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return err({\n        code: \"FILE_NOT_FOUND\",\n        path,\n        message: `File not found: ${path}`,\n      });\n    }\n\n    return err({\n      code: \"READ_ERROR\",\n      path,\n      message: `Failed to read file: ${error}`,\n    });\n  }\n}\n\n/**\n * Compute hash synchronously.\n * For first call, uses simple string hash as fallback.\n * Subsequent calls will use xxhash after async initialization.\n */\nfunction computeHashSync(contents: Buffer): string {\n  // If xxhash is already loaded, use it\n  if (xxhashInstance !== null) {\n    const hash = xxhashInstance.h64Raw(new Uint8Array(contents));\n    return hash.toString(16);\n  }\n\n  // First call: trigger async loading for next time\n  void getXXHash();\n\n  // Fallback: simple hash for first call only\n  return simpleHash(contents);\n}\n\n/**\n * Simple hash function for initial calls before xxhash loads\n */\nfunction simpleHash(buffer: Buffer): string {\n  let hash = 0;\n  for (let i = 0; i < buffer.length; i++) {\n    const byte = buffer[i];\n    if (byte !== undefined) {\n      hash = (hash << 5) - hash + byte;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n  }\n  return hash.toString(16);\n}\n\n/**\n * Compute fingerprint from pre-read file content and stats.\n * This is used by the generator-based discoverer which already has the content.\n *\n * @param path - Absolute path to file (for caching)\n * @param stats - File stats (mtimeMs, size)\n * @param content - File content as string\n * @returns FileFingerprint\n */\nexport function computeFingerprintFromContent(\n  path: string,\n  stats: { readonly mtimeMs: number; readonly size: number },\n  content: string,\n): FileFingerprint {\n  // Check cache first by mtime\n  const cached = fingerprintCache.get(path);\n  if (cached && cached.mtimeMs === stats.mtimeMs) {\n    return cached;\n  }\n\n  // Convert string to buffer for hashing\n  const buffer = Buffer.from(content, \"utf-8\");\n  const hash = computeHashSync(buffer);\n\n  const fingerprint: FileFingerprint = {\n    hash,\n    sizeBytes: stats.size,\n    mtimeMs: stats.mtimeMs,\n  };\n\n  fingerprintCache.set(path, fingerprint);\n  return fingerprint;\n}\n\n/**\n * Invalidate cached fingerprint for a specific path\n *\n * @param path - Absolute path to invalidate\n */\nexport function invalidateFingerprint(path: string): void {\n  fingerprintCache.delete(path);\n}\n\n/**\n * Clear all cached fingerprints\n */\nexport function clearFingerprintCache(): void {\n  fingerprintCache.clear();\n}\n","import { extname } from \"node:path\";\nimport {\n  type AliasResolver,\n  createAsyncScheduler,\n  createSyncScheduler,\n  type EffectGenerator,\n  normalizePath,\n} from \"@soda-gql/common\";\nimport { err, ok } from \"neverthrow\";\nimport type { createAstAnalyzer } from \"../ast\";\nimport type { ModuleAnalysis } from \"../ast/types\";\nimport { type BuilderResult, builderErrors } from \"../errors\";\nimport { type FileStats, OptionalFileReadEffect, OptionalFileStatEffect } from \"../scheduler\";\nimport { createSourceHash, extractModuleDependencies } from \"./common\";\nimport { computeFingerprintFromContent, invalidateFingerprint } from \"./fingerprint\";\nimport type { DiscoveryCache, DiscoverySnapshot } from \"./types\";\n\n/**\n * JavaScript file extensions that should be treated as empty modules.\n * These files are included in the dependency graph but not parsed for definitions.\n */\nconst JS_FILE_EXTENSIONS = [\".js\", \".mjs\", \".cjs\", \".jsx\"] as const;\n\n/**\n * Check if a file path is a JavaScript file (not TypeScript).\n * Used to skip AST analysis for JS files that are resolved as fallbacks.\n */\nconst isJsFile = (filePath: string): boolean => {\n  const ext = extname(filePath).toLowerCase();\n  return (JS_FILE_EXTENSIONS as readonly string[]).includes(ext);\n};\n\nexport type DiscoverModulesOptions = {\n  readonly entryPaths: readonly string[];\n  readonly astAnalyzer: ReturnType<typeof createAstAnalyzer>;\n  /** Optional alias resolver for tsconfig paths */\n  readonly aliasResolver?: AliasResolver;\n  /** Set of file paths explicitly invalidated (from BuilderChangeSet) */\n  readonly incremental?: {\n    readonly cache: DiscoveryCache;\n    readonly changedFiles: Set<string>;\n    readonly removedFiles: Set<string>;\n    readonly affectedFiles: Set<string>;\n  };\n};\n\nexport type DiscoverModulesResult = {\n  readonly snapshots: readonly DiscoverySnapshot[];\n  readonly cacheHits: number;\n  readonly cacheMisses: number;\n  readonly cacheSkips: number;\n};\n\n/**\n * Generator-based module discovery that yields effects for file I/O.\n * This allows the discovery process to be executed with either sync or async schedulers.\n */\nexport function* discoverModulesGen({\n  entryPaths,\n  astAnalyzer,\n  aliasResolver,\n  incremental,\n}: DiscoverModulesOptions): EffectGenerator<DiscoverModulesResult> {\n  const snapshots = new Map<string, DiscoverySnapshot>();\n  const stack = [...entryPaths];\n  const changedFiles = incremental?.changedFiles ?? new Set<string>();\n  const removedFiles = incremental?.removedFiles ?? new Set<string>();\n  const affectedFiles = incremental?.affectedFiles ?? new Set<string>();\n  const invalidatedSet = new Set<string>([...changedFiles, ...removedFiles, ...affectedFiles]);\n  let cacheHits = 0;\n  let cacheMisses = 0;\n  let cacheSkips = 0;\n\n  if (incremental) {\n    for (const filePath of removedFiles) {\n      incremental.cache.delete(filePath);\n      invalidateFingerprint(filePath);\n    }\n  }\n\n  while (stack.length > 0) {\n    const rawFilePath = stack.pop();\n    if (!rawFilePath) {\n      continue;\n    }\n\n    // Normalize path for consistent cache key matching\n    const filePath = normalizePath(rawFilePath);\n\n    if (snapshots.has(filePath)) {\n      continue;\n    }\n\n    // Check if explicitly invalidated\n    let shouldReadFile = true;\n    if (invalidatedSet.has(filePath)) {\n      invalidateFingerprint(filePath);\n      cacheSkips++;\n      // Fall through to re-read and re-parse\n    } else if (incremental) {\n      // Try fingerprint-based cache check (avoid reading file)\n      const cached = incremental.cache.peek(filePath);\n\n      if (cached) {\n        // Fast path: check fingerprint without reading file content\n        const stats = yield* new OptionalFileStatEffect(filePath).run();\n\n        if (stats) {\n          const mtimeMs = stats.mtimeMs;\n          const sizeBytes = stats.size;\n\n          // If fingerprint matches, reuse cached snapshot\n          if (cached.fingerprint.mtimeMs === mtimeMs && cached.fingerprint.sizeBytes === sizeBytes) {\n            snapshots.set(filePath, cached);\n            cacheHits++;\n            // Enqueue dependencies from cache\n            for (const dep of cached.dependencies) {\n              if (dep.resolvedPath && !snapshots.has(dep.resolvedPath)) {\n                stack.push(dep.resolvedPath);\n              }\n            }\n            shouldReadFile = false;\n          }\n        }\n        // If stats is null (file deleted), fall through to read attempt\n      }\n    }\n\n    if (!shouldReadFile) {\n      continue;\n    }\n\n    // Read source and compute signature\n    const source = yield* new OptionalFileReadEffect(filePath).run();\n\n    if (source === null) {\n      // Handle deleted files gracefully - they may be in cache but removed from disk\n      incremental?.cache.delete(filePath);\n      invalidateFingerprint(filePath);\n      continue;\n    }\n\n    const signature = createSourceHash(source);\n\n    // Parse module (skip AST analysis for JS files - treat as empty)\n    let analysis: ModuleAnalysis;\n    if (isJsFile(filePath)) {\n      // JS files are included in the dependency graph but treated as empty modules.\n      // This happens when a .js import specifier resolves to an actual .js file\n      // because no corresponding .ts file exists.\n      analysis = {\n        filePath,\n        signature,\n        definitions: [],\n        imports: [],\n        exports: [],\n        diagnostics: [],\n      };\n    } else {\n      analysis = astAnalyzer.analyze({ filePath, source });\n    }\n    cacheMisses++;\n\n    // Build dependency records (relative + external) in a single pass\n    const dependencies = extractModuleDependencies({ analysis, aliasResolver });\n\n    // Enqueue all resolved relative dependencies for traversal\n    for (const dep of dependencies) {\n      if (!dep.isExternal && dep.resolvedPath && !snapshots.has(dep.resolvedPath)) {\n        stack.push(dep.resolvedPath);\n      }\n    }\n\n    // Get stats for fingerprint (we may already have them from cache check)\n    const stats = (yield* new OptionalFileStatEffect(filePath).run()) as FileStats;\n\n    // Compute fingerprint from content (avoids re-reading the file)\n    const fingerprint = computeFingerprintFromContent(filePath, stats, source);\n\n    // Create snapshot\n    const snapshot: DiscoverySnapshot = {\n      filePath,\n      normalizedFilePath: normalizePath(filePath),\n      signature,\n      fingerprint,\n      analyzer: astAnalyzer.type,\n      createdAtMs: Date.now(),\n      analysis,\n      dependencies,\n    };\n\n    snapshots.set(filePath, snapshot);\n\n    // Store in cache\n    if (incremental) {\n      incremental.cache.store(snapshot);\n    }\n  }\n\n  return {\n    snapshots: Array.from(snapshots.values()),\n    cacheHits,\n    cacheMisses,\n    cacheSkips,\n  };\n}\n\n/**\n * Discover and analyze all modules starting from entry points.\n * Uses AST parsing instead of RegExp for reliable dependency extraction.\n * Supports caching with fingerprint-based invalidation to skip re-parsing unchanged files.\n *\n * This function uses the synchronous scheduler internally for backward compatibility.\n * For async execution with parallel file I/O, use discoverModulesGen with an async scheduler.\n */\nexport const discoverModules = (options: DiscoverModulesOptions): BuilderResult<DiscoverModulesResult> => {\n  const scheduler = createSyncScheduler();\n  const result = scheduler.run(() => discoverModulesGen(options));\n\n  if (result.isErr()) {\n    const error = result.error;\n    // Convert scheduler error to builder error\n    return err(builderErrors.discoveryIOError(\"unknown\", error.message));\n  }\n\n  return ok(result.value);\n};\n\n/**\n * Asynchronous version of discoverModules.\n * Uses async scheduler for parallel file I/O operations.\n *\n * This is useful for large codebases where parallel file operations can improve performance.\n */\nexport const discoverModulesAsync = async (options: DiscoverModulesOptions): Promise<BuilderResult<DiscoverModulesResult>> => {\n  const scheduler = createAsyncScheduler();\n  const result = await scheduler.run(() => discoverModulesGen(options));\n\n  if (result.isErr()) {\n    const error = result.error;\n    // Convert scheduler error to builder error\n    return err(builderErrors.discoveryIOError(\"unknown\", error.message));\n  }\n\n  return ok(result.value);\n};\n","import { statSync } from \"node:fs\";\nimport { normalizePath } from \"@soda-gql/common\";\nimport { ok, type Result } from \"neverthrow\";\n\n/**\n * File metadata tracked for change detection.\n */\nexport type FileMetadata = {\n  /** Modification time in milliseconds */\n  mtimeMs: number;\n  /** File size in bytes */\n  size: number;\n};\n\n/**\n * Result of scanning current file system state.\n */\nexport type FileScan = {\n  /** Map of normalized file paths to current metadata */\n  files: Map<string, FileMetadata>;\n};\n\n/**\n * Detected file changes between two states.\n */\nexport type FileDiff = {\n  /** Files present in current but not in previous */\n  added: Set<string>;\n  /** Files present in both but with changed metadata */\n  updated: Set<string>;\n  /** Files present in previous but not in current */\n  removed: Set<string>;\n};\n\n/**\n * Errors that can occur during file tracking operations.\n */\nexport type TrackerError = { type: \"scan-failed\"; path: string; message: string };\n\n/**\n * File tracker interface for detecting file changes across builds.\n */\nexport interface FileTracker {\n  /**\n   * Scan current file system state for the given paths.\n   * Gracefully skips files that don't exist or cannot be read.\n   */\n  scan(extraPaths: readonly string[]): Result<FileScan, TrackerError>;\n\n  /**\n   * Detect changes between previous and current file states.\n   */\n  detectChanges(): FileDiff;\n\n  /**\n   * Update the in-memory tracker state.\n   * State persists only for the lifetime of this process.\n   */\n  update(scan: FileScan): void;\n}\n\n/**\n * Create a file tracker that maintains in-memory state for change detection.\n *\n * The tracker keeps file metadata (mtime, size) in memory during the process lifetime\n * and detects which files have been added, updated, or removed. State is scoped to\n * the process and does not persist across restarts.\n */\nexport const createFileTracker = (): FileTracker => {\n  // In-memory state that persists for the lifetime of this tracker instance\n  let currentScan: FileScan = {\n    files: new Map(),\n  };\n  let nextScan: FileScan | null = null;\n\n  const scan = (extraPaths: readonly string[]): Result<FileScan, TrackerError> => {\n    const allPathsToScan = new Set([...extraPaths, ...currentScan.files.keys()]);\n    const files = new Map<string, FileMetadata>();\n\n    for (const path of allPathsToScan) {\n      try {\n        const normalized = normalizePath(path);\n        const stats = statSync(normalized);\n\n        files.set(normalized, {\n          mtimeMs: stats.mtimeMs,\n          size: stats.size,\n        });\n      } catch {}\n    }\n\n    nextScan = { files };\n    return ok(nextScan);\n  };\n\n  const detectChanges = (): FileDiff => {\n    const previous = currentScan;\n    const current = nextScan ?? currentScan;\n    const added = new Set<string>();\n    const updated = new Set<string>();\n    const removed = new Set<string>();\n\n    // Check for added and updated files\n    for (const [path, currentMetadata] of current.files) {\n      const previousMetadata = previous.files.get(path);\n\n      if (!previousMetadata) {\n        added.add(path);\n      } else if (previousMetadata.mtimeMs !== currentMetadata.mtimeMs || previousMetadata.size !== currentMetadata.size) {\n        updated.add(path);\n      }\n    }\n\n    // Check for removed files\n    for (const path of previous.files.keys()) {\n      if (!current.files.has(path)) {\n        removed.add(path);\n      }\n    }\n\n    return { added, updated, removed };\n  };\n\n  const update = (scan: FileScan): void => {\n    // Update in-memory state - promote nextScan to currentScan\n    currentScan = scan;\n    nextScan = null;\n  };\n\n  return {\n    scan,\n    detectChanges,\n    update,\n  };\n};\n\n/**\n * Check if a file diff is empty (no changes detected).\n */\nexport const isEmptyDiff = (diff: FileDiff): boolean => {\n  return diff.added.size === 0 && diff.updated.size === 0 && diff.removed.size === 0;\n};\n","import { type AliasResolver, isRelativeSpecifier, resolveRelativeImportWithReferences } from \"@soda-gql/common\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport type { ModuleAnalysis } from \"../ast\";\nimport type { GraphqlSystemIdentifyHelper } from \"../internal/graphql-system\";\n\nexport type DependencyGraphError = {\n  readonly code: \"MISSING_IMPORT\";\n  readonly chain: readonly [importingFile: string, importSpecifier: string];\n};\n\nexport const validateModuleDependencies = ({\n  analyses,\n  graphqlSystemHelper,\n  aliasResolver,\n}: {\n  analyses: Map<string, ModuleAnalysis>;\n  graphqlSystemHelper: GraphqlSystemIdentifyHelper;\n  aliasResolver?: AliasResolver;\n}): Result<null, DependencyGraphError> => {\n  for (const analysis of analyses.values()) {\n    for (const { source, isTypeOnly } of analysis.imports) {\n      if (isTypeOnly) {\n        continue;\n      }\n\n      if (isRelativeSpecifier(source)) {\n        // Skip graphql-system imports - they are not part of the analyzed modules\n        if (graphqlSystemHelper.isGraphqlSystemImportSpecifier({ filePath: analysis.filePath, specifier: source })) {\n          continue;\n        }\n\n        const resolvedModule = resolveRelativeImportWithReferences({\n          filePath: analysis.filePath,\n          specifier: source,\n          references: analyses,\n        });\n        if (!resolvedModule) {\n          // Import points to a module that doesn't exist in the analysis\n          return err({\n            code: \"MISSING_IMPORT\" as const,\n            chain: [analysis.filePath, source] as const,\n          });\n        }\n      } else if (aliasResolver) {\n        // Validate alias-resolved imports: if the alias resolves to a local file,\n        // it must exist in analyses. Unresolved aliases are external packages.\n        const aliasResolved = aliasResolver.resolve(source);\n        if (aliasResolved && !analyses.has(aliasResolved)) {\n          return err({\n            code: \"MISSING_IMPORT\" as const,\n            chain: [analysis.filePath, source] as const,\n          });\n        }\n      }\n    }\n  }\n\n  return ok(null);\n};\n","import { resolveRelativeImportWithReferences } from \"@soda-gql/common\";\nimport type { DiscoverySnapshot } from \"../discovery\";\n\n/**\n * Extract module-level adjacency from dependency graph.\n * Returns Map of file path -> set of files that import it.\n * All paths are normalized to POSIX format for consistent cache key matching.\n */\nexport const extractModuleAdjacency = ({\n  snapshots,\n}: {\n  snapshots: Map<string, DiscoverySnapshot>;\n}): Map<string, Set<string>> => {\n  const importsByModule = new Map<string, Set<string>>();\n\n  for (const snapshot of snapshots.values()) {\n    const { normalizedFilePath, dependencies, analysis } = snapshot;\n    const imports = new Set<string>();\n\n    // Extract module paths from canonical IDs in dependencies\n    for (const { resolvedPath } of dependencies) {\n      if (resolvedPath && resolvedPath !== normalizedFilePath && snapshots.has(resolvedPath)) {\n        imports.add(resolvedPath);\n      }\n    }\n\n    // Phase 3: Handle runtime imports for modules with no tracked dependencies\n    if (dependencies.length === 0 && analysis.imports.length > 0) {\n      for (const imp of analysis.imports) {\n        if (imp.isTypeOnly) {\n          continue;\n        }\n\n        const resolved = resolveRelativeImportWithReferences({\n          filePath: normalizedFilePath,\n          specifier: imp.source,\n          references: snapshots,\n        });\n        if (resolved) {\n          imports.add(resolved);\n        }\n      }\n    }\n\n    if (imports.size > 0) {\n      importsByModule.set(normalizedFilePath, imports);\n    }\n  }\n\n  // Phase 4: Invert to adjacency map (imported -> [importers])\n  const adjacency = new Map<string, Set<string>>();\n\n  for (const [importer, imports] of importsByModule) {\n    for (const imported of imports) {\n      if (!adjacency.has(imported)) {\n        adjacency.set(imported, new Set());\n      }\n      adjacency.get(imported)?.add(importer);\n    }\n  }\n\n  // Include all modules, even isolated ones with no importers\n  for (const modulePath of snapshots.keys()) {\n    if (!adjacency.has(modulePath)) {\n      adjacency.set(modulePath, new Set());\n    }\n  }\n\n  return adjacency;\n};\n\n/**\n * Collect all modules affected by changes, including transitive dependents.\n * Uses BFS to traverse module adjacency graph.\n * All paths are already normalized from extractModuleAdjacency.\n */\nexport const collectAffectedFiles = (input: {\n  changedFiles: Set<string>;\n  removedFiles: Set<string>;\n  previousModuleAdjacency: Map<string, Set<string>>;\n}): Set<string> => {\n  const { changedFiles, removedFiles, previousModuleAdjacency } = input;\n  const affected = new Set<string>([...changedFiles, ...removedFiles]);\n  const queue = [...changedFiles];\n  const visited = new Set<string>(changedFiles);\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current) break;\n\n    const dependents = previousModuleAdjacency.get(current);\n\n    if (dependents) {\n      for (const dependent of dependents) {\n        if (!visited.has(dependent)) {\n          visited.add(dependent);\n          affected.add(dependent);\n          queue.push(dependent);\n        }\n      }\n    }\n  }\n\n  return affected;\n};\n","import { join, resolve } from \"node:path\";\nimport {\n  type AliasResolver,\n  cachedFn,\n  createAliasResolver,\n  createAsyncScheduler,\n  createSyncScheduler,\n  type EffectGenerator,\n  type SchedulerError,\n} from \"@soda-gql/common\";\nimport type { ResolvedSodaGqlConfig } from \"@soda-gql/config\";\nimport { err, ok, type Result } from \"neverthrow\";\nimport { type BuilderArtifact, buildArtifact } from \"../artifact\";\nimport { createAstAnalyzer, type ModuleAnalysis } from \"../ast\";\nimport { type CacheFactory, createMemoryCache } from \"../cache/memory-cache\";\nimport {\n  createDiscoveryCache,\n  type DiscoveryCache,\n  type DiscoverySnapshot,\n  discoverModulesGen,\n  type ModuleLoadStats,\n  resolveEntryPaths,\n} from \"../discovery\";\nimport { builderErrors, isBuilderError } from \"../errors\";\nimport {\n  evaluateIntermediateModulesGen,\n  generateIntermediateModules,\n  type IntermediateArtifactElement,\n  type IntermediateModule,\n} from \"../intermediate-module\";\nimport { createGraphqlSystemIdentifyHelper } from \"../internal/graphql-system\";\nimport { createFileTracker, type FileDiff, type FileScan, isEmptyDiff } from \"../tracker\";\nimport type { BuilderError } from \"../types\";\nimport { validateModuleDependencies } from \"./dependency-validation\";\nimport { collectAffectedFiles, extractModuleAdjacency } from \"./module-adjacency\";\n\n/**\n * Session state maintained across incremental builds.\n */\ntype SessionState = {\n  /** Generation number */\n  gen: number;\n  /** Discovery snapshots keyed by normalized file path */\n  snapshots: Map<string, DiscoverySnapshot>;\n  /** Module-level adjacency: file -> files that import it */\n  moduleAdjacency: Map<string, Set<string>>;\n  /** Written intermediate modules: filePath -> intermediate module */\n  intermediateModules: Map<string, IntermediateModule>;\n  /** Last successful artifact */\n  lastArtifact: BuilderArtifact | null;\n  /** Last successful intermediate elements (for prebuilt type generation) */\n  lastIntermediateElements: Record<string, IntermediateArtifactElement> | null;\n};\n\n/**\n * Input for the unified build generator.\n */\ntype BuildGenInput = {\n  readonly entryPaths: readonly string[];\n  readonly astAnalyzer: ReturnType<typeof createAstAnalyzer>;\n  readonly aliasResolver?: AliasResolver;\n  readonly discoveryCache: DiscoveryCache;\n  readonly changedFiles: Set<string>;\n  readonly removedFiles: Set<string>;\n  readonly previousModuleAdjacency: Map<string, Set<string>>;\n  readonly previousIntermediateModules: ReadonlyMap<string, IntermediateModule>;\n  readonly graphqlSystemPath: string;\n  readonly graphqlHelper: ReturnType<typeof createGraphqlSystemIdentifyHelper>;\n  /** Optional phase callbacks for profiling */\n  readonly onPhase?: BuildPhaseCallbacks;\n};\n\n/**\n * Result from the unified build generator.\n */\ntype BuildGenResult = {\n  readonly snapshots: Map<string, DiscoverySnapshot>;\n  readonly analyses: Map<string, ModuleAnalysis>;\n  readonly currentModuleAdjacency: Map<string, Set<string>>;\n  readonly intermediateModules: Map<string, IntermediateModule>;\n  readonly elements: Record<string, IntermediateArtifactElement>;\n  readonly stats: ModuleLoadStats;\n};\n\n/**\n * Optional callbacks for profiling build phases.\n * Called at phase boundaries when provided.\n */\nexport interface BuildPhaseCallbacks {\n  /** Called after discovery phase completes */\n  afterDiscovery?: () => void;\n  /** Called after intermediate module generation completes */\n  afterIntermediateGen?: () => void;\n  /** Called after evaluation phase completes */\n  afterEvaluation?: () => void;\n}\n\n/**\n * Options for build methods.\n */\nexport interface BuildOptions {\n  /** Force full rebuild ignoring cache */\n  force?: boolean;\n  /** Optional callbacks for profiling (called at phase boundaries) */\n  onPhase?: BuildPhaseCallbacks;\n}\n\n/**\n * Builder session interface for incremental builds.\n */\nexport interface BuilderSession {\n  /**\n   * Perform build fully or incrementally (synchronous).\n   * The session automatically detects file changes using the file tracker.\n   * Throws if any element requires async operations (e.g., async metadata factory).\n   */\n  build(options?: BuildOptions): Result<BuilderArtifact, BuilderError>;\n  /**\n   * Perform build fully or incrementally (asynchronous).\n   * The session automatically detects file changes using the file tracker.\n   * Supports async metadata factories and parallel element evaluation.\n   */\n  buildAsync(options?: BuildOptions): Promise<Result<BuilderArtifact, BuilderError>>;\n  /**\n   * Get the current generation number.\n   */\n  getGeneration(): number;\n  /**\n   * Get the current artifact.\n   */\n  getCurrentArtifact(): BuilderArtifact | null;\n  /**\n   * Get the intermediate elements from the most recent build.\n   * Returns null if no build has been performed yet.\n   * Used by typegen to extract field selections for prebuilt type generation.\n   */\n  getIntermediateElements(): Record<string, IntermediateArtifactElement> | null;\n  /**\n   * Dispose the session and save cache to disk.\n   */\n  dispose(): void;\n}\n\n/**\n * Singleton state for beforeExit handler registration.\n * Ensures only one handler is registered regardless of how many sessions are created.\n */\nconst exitHandlerState = {\n  registered: false,\n  factories: new Set<CacheFactory>(),\n};\n\n/**\n * Register a cache factory for save on process exit.\n * Uses singleton pattern to prevent multiple handler registrations.\n */\nconst registerExitHandler = (cacheFactory: CacheFactory): void => {\n  exitHandlerState.factories.add(cacheFactory);\n\n  if (!exitHandlerState.registered) {\n    exitHandlerState.registered = true;\n    process.on(\"beforeExit\", () => {\n      // Save all registered cache factories sequentially\n      for (const factory of exitHandlerState.factories) {\n        factory.save();\n      }\n    });\n  }\n};\n\n/**\n * Unregister a cache factory from the exit handler.\n */\nconst unregisterExitHandler = (cacheFactory: CacheFactory): void => {\n  exitHandlerState.factories.delete(cacheFactory);\n};\n\n/**\n * Reset exit handler state for testing.\n * @internal\n */\nexport const __resetExitHandlerForTests = (): void => {\n  exitHandlerState.registered = false;\n  exitHandlerState.factories.clear();\n};\n\n/**\n * Create a new builder session.\n *\n * The session maintains in-memory state across builds to enable incremental processing.\n */\nexport const createBuilderSession = (options: {\n  readonly evaluatorId?: string;\n  readonly entrypointsOverride?: readonly string[] | ReadonlySet<string>;\n  readonly config: ResolvedSodaGqlConfig;\n}): BuilderSession => {\n  const config = options.config;\n  const evaluatorId = options.evaluatorId ?? \"default\";\n  const entrypoints: ReadonlySet<string> = new Set(options.entrypointsOverride ?? config.include);\n\n  // Session state stored in closure\n  const state: SessionState = {\n    gen: 0,\n    snapshots: new Map(),\n    moduleAdjacency: new Map(),\n    intermediateModules: new Map(),\n    lastArtifact: null,\n    lastIntermediateElements: null,\n  };\n\n  // Reusable infrastructure\n  const cacheFactory = createMemoryCache({\n    prefix: [\"builder\"],\n    persistence: {\n      enabled: true,\n      filePath: join(process.cwd(), \"node_modules\", \".cache\", \"soda-gql\", \"builder\", \"cache.json\"),\n    },\n  });\n\n  // Register for auto-save on process exit using singleton handler\n  registerExitHandler(cacheFactory);\n\n  const graphqlHelper = createGraphqlSystemIdentifyHelper(config);\n  const ensureAstAnalyzer = cachedFn(() =>\n    createAstAnalyzer({\n      analyzer: config.analyzer,\n      graphqlHelper,\n      baseDir: config.baseDir,\n    }),\n  );\n  const ensureDiscoveryCache = cachedFn(() =>\n    createDiscoveryCache({\n      factory: cacheFactory,\n      analyzer: config.analyzer,\n      evaluatorId,\n    }),\n  );\n  const ensureFileTracker = cachedFn(() => createFileTracker());\n\n  /**\n   * Prepare build input. Shared between sync and async builds.\n   * Returns either a skip result or the input for buildGen.\n   */\n  const prepareBuildInput = (\n    force: boolean,\n  ): Result<\n    { type: \"skip\"; artifact: BuilderArtifact } | { type: \"build\"; input: BuildGenInput; currentScan: FileScan },\n    BuilderError\n  > => {\n    // 1. Resolve entry paths (apply config.exclude as negation globs)\n    const entryPathsResult = resolveEntryPaths(Array.from(entrypoints), config.exclude);\n    if (entryPathsResult.isErr()) {\n      return err(entryPathsResult.error);\n    }\n    const entryPaths = entryPathsResult.value;\n\n    // 2. Load tracker and detect changes\n    const tracker = ensureFileTracker();\n    const scanResult = tracker.scan(entryPaths);\n    if (scanResult.isErr()) {\n      const trackerError = scanResult.error;\n      return err(\n        builderErrors.discoveryIOError(\n          trackerError.type === \"scan-failed\" ? trackerError.path : \"unknown\",\n          `Failed to scan files: ${trackerError.message}`,\n        ),\n      );\n    }\n\n    // 3. Scan current files (entry paths + previously tracked files)\n    const currentScan = scanResult.value;\n    const diff = tracker.detectChanges();\n\n    // 4. Prepare for build\n    const prepareResult = prepare({\n      diff,\n      entryPaths,\n      lastArtifact: state.lastArtifact,\n      force,\n    });\n    if (prepareResult.isErr()) {\n      return err(prepareResult.error);\n    }\n\n    if (prepareResult.value.type === \"should-skip\") {\n      return ok({ type: \"skip\", artifact: prepareResult.value.data.artifact });\n    }\n\n    const { changedFiles, removedFiles } = prepareResult.value.data;\n\n    return ok({\n      type: \"build\",\n      input: {\n        entryPaths,\n        astAnalyzer: ensureAstAnalyzer(),\n        aliasResolver: config.tsconfigPaths ? createAliasResolver(config.tsconfigPaths) : undefined,\n        discoveryCache: ensureDiscoveryCache(),\n        changedFiles,\n        removedFiles,\n        previousModuleAdjacency: state.moduleAdjacency,\n        previousIntermediateModules: state.intermediateModules,\n        graphqlSystemPath: resolve(config.outdir, \"index.ts\"),\n        graphqlHelper,\n      },\n      currentScan,\n    });\n  };\n\n  /**\n   * Finalize build and update session state.\n   */\n  const finalizeBuild = (genResult: BuildGenResult, currentScan: FileScan): Result<BuilderArtifact, BuilderError> => {\n    const { snapshots, analyses, currentModuleAdjacency, intermediateModules, elements, stats } = genResult;\n\n    // Build artifact from all intermediate modules\n    const artifactResult = buildArtifact({\n      analyses,\n      elements,\n      stats,\n    });\n\n    if (artifactResult.isErr()) {\n      return err(artifactResult.error);\n    }\n\n    // Update session state\n    state.gen++;\n    state.snapshots = snapshots;\n    state.moduleAdjacency = currentModuleAdjacency;\n    state.lastArtifact = artifactResult.value;\n    state.intermediateModules = intermediateModules;\n    state.lastIntermediateElements = elements;\n\n    // Persist tracker state (soft failure - don't block on cache write)\n    ensureFileTracker().update(currentScan);\n\n    return ok(artifactResult.value);\n  };\n\n  /**\n   * Synchronous build using SyncScheduler.\n   * Throws if any element requires async operations.\n   */\n  const build = (options?: BuildOptions): Result<BuilderArtifact, BuilderError> => {\n    const prepResult = prepareBuildInput(options?.force ?? false);\n    if (prepResult.isErr()) {\n      return err(prepResult.error);\n    }\n\n    if (prepResult.value.type === \"skip\") {\n      return ok(prepResult.value.artifact);\n    }\n\n    const { input, currentScan } = prepResult.value;\n    const scheduler = createSyncScheduler();\n\n    try {\n      const result = scheduler.run(() => buildGen({ ...input, onPhase: options?.onPhase }));\n\n      if (result.isErr()) {\n        return err(convertSchedulerError(result.error));\n      }\n\n      return finalizeBuild(result.value, currentScan);\n    } catch (error) {\n      // Handle thrown BuilderError from buildGen\n      if (isBuilderError(error)) {\n        return err(error);\n      }\n      throw error;\n    }\n  };\n\n  /**\n   * Asynchronous build using AsyncScheduler.\n   * Supports async metadata factories and parallel element evaluation.\n   */\n  const buildAsync = async (options?: BuildOptions): Promise<Result<BuilderArtifact, BuilderError>> => {\n    const prepResult = prepareBuildInput(options?.force ?? false);\n    if (prepResult.isErr()) {\n      return err(prepResult.error);\n    }\n\n    if (prepResult.value.type === \"skip\") {\n      return ok(prepResult.value.artifact);\n    }\n\n    const { input, currentScan } = prepResult.value;\n    const scheduler = createAsyncScheduler();\n\n    try {\n      const result = await scheduler.run(() => buildGen({ ...input, onPhase: options?.onPhase }));\n\n      if (result.isErr()) {\n        return err(convertSchedulerError(result.error));\n      }\n\n      return finalizeBuild(result.value, currentScan);\n    } catch (error) {\n      // Handle thrown BuilderError from buildGen\n      if (isBuilderError(error)) {\n        return err(error);\n      }\n      throw error;\n    }\n  };\n\n  return {\n    build,\n    buildAsync,\n    getGeneration: () => state.gen,\n    getCurrentArtifact: () => state.lastArtifact,\n    getIntermediateElements: () => state.lastIntermediateElements,\n    dispose: () => {\n      cacheFactory.save();\n      // Unregister from exit handler to prevent duplicate saves\n      unregisterExitHandler(cacheFactory);\n    },\n  };\n};\n\nconst prepare = (input: {\n  diff: FileDiff;\n  entryPaths: readonly string[];\n  lastArtifact: BuilderArtifact | null;\n  force: boolean;\n}) => {\n  const { diff, lastArtifact, force } = input;\n\n  // Convert diff to sets for discovery\n  const changedFiles = new Set<string>([...diff.added, ...diff.updated]);\n  const removedFiles = diff.removed;\n\n  // Skip build only if:\n  // 1. Not forced\n  // 2. No changes detected\n  // 3. Previous artifact exists\n  if (!force && isEmptyDiff(diff) && lastArtifact) {\n    return ok({ type: \"should-skip\" as const, data: { artifact: lastArtifact } });\n  }\n\n  return ok({ type: \"should-build\" as const, data: { changedFiles, removedFiles } });\n};\n\n/**\n * Unified build generator that yields effects for file I/O and element evaluation.\n * This enables single scheduler control at the root level for both sync and async execution.\n */\nfunction* buildGen(input: BuildGenInput): EffectGenerator<BuildGenResult> {\n  const {\n    entryPaths,\n    astAnalyzer,\n    aliasResolver,\n    discoveryCache,\n    changedFiles,\n    removedFiles,\n    previousModuleAdjacency,\n    previousIntermediateModules,\n    graphqlSystemPath,\n    graphqlHelper,\n    onPhase,\n  } = input;\n\n  // Phase 1: Collect affected files\n  const affectedFiles = collectAffectedFiles({\n    changedFiles,\n    removedFiles,\n    previousModuleAdjacency,\n  });\n\n  // Phase 2: Discovery (yields file I/O effects)\n  const discoveryResult = yield* discoverModulesGen({\n    entryPaths,\n    astAnalyzer,\n    aliasResolver,\n    incremental: {\n      cache: discoveryCache,\n      changedFiles,\n      removedFiles,\n      affectedFiles,\n    },\n  });\n\n  // Notify phase callback after discovery\n  onPhase?.afterDiscovery?.();\n\n  const { cacheHits, cacheMisses, cacheSkips } = discoveryResult;\n\n  const snapshots = new Map(discoveryResult.snapshots.map((snapshot) => [snapshot.normalizedFilePath, snapshot]));\n  const analyses = new Map(discoveryResult.snapshots.map((snapshot) => [snapshot.normalizedFilePath, snapshot.analysis]));\n\n  // Phase 3: Validate module dependencies (pure computation)\n  const dependenciesValidationResult = validateModuleDependencies({\n    analyses,\n    graphqlSystemHelper: graphqlHelper,\n    aliasResolver,\n  });\n  if (dependenciesValidationResult.isErr()) {\n    const error = dependenciesValidationResult.error;\n    throw builderErrors.graphMissingImport(error.chain[0], error.chain[1]);\n  }\n\n  const currentModuleAdjacency = extractModuleAdjacency({ snapshots });\n\n  const stats: ModuleLoadStats = {\n    hits: cacheHits,\n    misses: cacheMisses,\n    skips: cacheSkips,\n  };\n\n  // Phase 4: Generate intermediate modules (pure computation)\n  const intermediateModules = new Map(previousIntermediateModules);\n\n  // Build target set: include affected files + any newly discovered files that haven't been built yet\n  const targetFiles = new Set(affectedFiles);\n  for (const filePath of analyses.keys()) {\n    if (!previousIntermediateModules.has(filePath)) {\n      targetFiles.add(filePath);\n    }\n  }\n  // If no targets identified (e.g., first build with no changes), build everything\n  if (targetFiles.size === 0) {\n    for (const filePath of analyses.keys()) {\n      targetFiles.add(filePath);\n    }\n  }\n\n  // Remove deleted intermediate modules from next map immediately\n  for (const targetFilePath of targetFiles) {\n    intermediateModules.delete(targetFilePath);\n  }\n\n  // Build and write affected intermediate modules\n  for (const intermediateModule of generateIntermediateModules({ analyses, targetFiles, graphqlSystemPath, aliasResolver })) {\n    intermediateModules.set(intermediateModule.filePath, intermediateModule);\n  }\n\n  // Notify phase callback after intermediate module generation\n  onPhase?.afterIntermediateGen?.();\n\n  // Phase 5: Evaluate intermediate modules (yields element evaluation effects)\n  const elements = yield* evaluateIntermediateModulesGen({ intermediateModules, graphqlSystemPath, analyses });\n\n  // Notify phase callback after evaluation\n  onPhase?.afterEvaluation?.();\n\n  return {\n    snapshots,\n    analyses,\n    currentModuleAdjacency,\n    intermediateModules,\n    elements,\n    stats,\n  };\n}\n\n/**\n * Convert scheduler error to builder error.\n * If the cause is already a BuilderError, return it directly to preserve error codes.\n */\nconst convertSchedulerError = (error: SchedulerError): BuilderError => {\n  // If the cause is a BuilderError, return it directly\n  if (isBuilderError(error.cause)) {\n    return error.cause;\n  }\n  return builderErrors.internalInvariant(error.message, \"scheduler\", error.cause);\n};\n","import type { ResolvedSodaGqlConfig } from \"@soda-gql/config\";\nimport type { Result } from \"neverthrow\";\nimport type { BuilderArtifact } from \"./artifact/types\";\nimport type { IntermediateArtifactElement } from \"./intermediate-module\";\nimport { createBuilderSession } from \"./session\";\nimport type { BuilderError } from \"./types\";\n\n/**\n * Configuration for BuilderService.\n * Mirrors BuilderInput shape.\n */\nexport type BuilderServiceConfig = {\n  readonly config: ResolvedSodaGqlConfig;\n  readonly entrypointsOverride?: readonly string[] | ReadonlySet<string>;\n};\n\n/**\n * Builder service interface providing artifact generation.\n */\nexport interface BuilderService {\n  /**\n   * Generate artifacts from configured entry points (synchronous).\n   *\n   * The service automatically detects file changes using an internal file tracker.\n   * On first call, performs full build. Subsequent calls perform incremental builds\n   * based on detected file changes (added/updated/removed).\n   *\n   * Throws if any element requires async operations (e.g., async metadata factory).\n   *\n   * @param options - Optional build options\n   * @param options.force - If true, bypass change detection and force full rebuild\n   * @returns Result containing BuilderArtifact on success or BuilderError on failure.\n   */\n  build(options?: { force?: boolean }): Result<BuilderArtifact, BuilderError>;\n\n  /**\n   * Generate artifacts from configured entry points (asynchronous).\n   *\n   * The service automatically detects file changes using an internal file tracker.\n   * On first call, performs full build. Subsequent calls perform incremental builds\n   * based on detected file changes (added/updated/removed).\n   *\n   * Supports async metadata factories and parallel element evaluation.\n   *\n   * @param options - Optional build options\n   * @param options.force - If true, bypass change detection and force full rebuild\n   * @returns Promise of Result containing BuilderArtifact on success or BuilderError on failure.\n   */\n  buildAsync(options?: { force?: boolean }): Promise<Result<BuilderArtifact, BuilderError>>;\n\n  /**\n   * Get the current generation number of the artifact.\n   * Increments on each successful build.\n   * Returns 0 if no artifact has been built yet.\n   */\n  getGeneration(): number;\n\n  /**\n   * Get the most recent artifact without triggering a new build.\n   * Returns null if no artifact has been built yet.\n   */\n  getCurrentArtifact(): BuilderArtifact | null;\n\n  /**\n   * Get the intermediate elements from the most recent build.\n   * Returns null if no build has been performed yet.\n   * Used by typegen to extract field selections for prebuilt type generation.\n   */\n  getIntermediateElements(): Record<string, IntermediateArtifactElement> | null;\n\n  /**\n   * Dispose the service and save cache to disk.\n   * Should be called when the service is no longer needed.\n   */\n  dispose(): void;\n}\n\n/**\n * Create a builder service instance with session support.\n *\n * The service maintains a long-lived session for incremental builds.\n * File changes are automatically detected using an internal file tracker.\n * First build() call initializes the session, subsequent calls perform\n * incremental builds based on detected file changes.\n *\n * Note: Empty entry arrays will produce ENTRY_NOT_FOUND errors at build time.\n *\n * @param config - Builder configuration including entry patterns, analyzer, mode, and optional debugDir\n * @returns BuilderService instance\n */\nexport const createBuilderService = ({ config, entrypointsOverride }: BuilderServiceConfig): BuilderService => {\n  const session = createBuilderSession({ config, entrypointsOverride });\n\n  return {\n    build: (options) => session.build(options),\n    buildAsync: (options) => session.buildAsync(options),\n    getGeneration: () => session.getGeneration(),\n    getCurrentArtifact: () => session.getCurrentArtifact(),\n    getIntermediateElements: () => session.getIntermediateElements(),\n    dispose: () => session.dispose(),\n  };\n};\n"],"x_google_ignoreList":[3,4,5,6,7,8],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,uCAAuC,EAAE,OAAO;CACpD,YAAY,EAAE,QAAQ;CACtB,aAAa,EAAE,QAAQ;CACxB,CAAC;AAEF,MAAM,iCAAiC,EAAE,OAAO;CAC9C,IAAI,EAAE,QAAqB;CAC3B,MAAM,EAAE,QAAQ,YAAY;CAC5B,UAAU;CACV,UAAU,EAAE,OAAO;EACjB,eAAe,EAAE,KAAK;GAAC;GAAS;GAAY;GAAe,CAAC;EAC5D,eAAe,EAAE,QAAQ;EACzB,aAAa,EAAE,QAAQ;EACvB,UAAU,EAAE,SAAS;EACrB,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC;EAClC,UAAU,EAAE,SAAS,CAAC,UAAU;EACjC,CAAC;CACH,CAAC;AAMF,MAAM,gCAAgC,EAAE,OAAO;CAC7C,IAAI,EAAE,QAAqB;CAC3B,MAAM,EAAE,QAAQ,WAAW;CAC3B,UAAU;CACV,UAAU,EAAE,OAAO;EACjB,UAAU,EAAE,QAAQ;EACpB,KAAK,EAAE,QAAQ,CAAC,UAAU;EAC1B,aAAa,EAAE,QAAQ;EACxB,CAAC;CACH,CAAC;AAMF,MAAM,+BAA+B,EAAE,mBAAmB,QAAQ,CAChE,gCACA,8BACD,CAAC;AAEF,MAAM,4BAA4B,EAAE,OAAO;CACzC,SAAS,EAAE,QAAQ;CACnB,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,MAAa,wBAAwB,EAAE,OAAO;CAC5C,MAAM,0BAA0B,UAAU;CAC1C,UAAU,EAAE,OAAO,EAAE,QAAqB,EAAE,6BAA6B;CACzE,QAAQ,EAAE,OAAO;EACf,YAAY,EAAE,QAAQ;EACtB,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;EAC7B,OAAO,EAAE,OAAO;GACd,MAAM,EAAE,QAAQ;GAChB,QAAQ,EAAE,QAAQ;GAClB,OAAO,EAAE,QAAQ;GAClB,CAAC;EACH,CAAC;CACH,CAAC;;;;;;;;;;;;;;;;;;;AC7BF,MAAa,eAAe,OAAO,SAAsE;AACvG,KAAI,CAAC,WAAW,KAAK,EAAE;AACrB,SAAO,IAAI;GACT,MAAM;GACN,SAAS,4BAA4B;GACrC,UAAU;GACX,CAAC;;CAGJ,IAAIA;AACJ,KAAI;AACF,YAAU,MAAM,SAAS,MAAM,QAAQ;UAChC,OAAO;AACd,SAAO,IAAI;GACT,MAAM;GACN,SAAS,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GAChG,UAAU;GACX,CAAC;;AAGJ,QAAO,yBAAyB,SAAS,KAAK;;;;;;;;;;;;;;;;;AAkBhD,MAAa,oBAAoB,SAA6D;AAC5F,KAAI,CAAC,WAAW,KAAK,EAAE;AACrB,SAAO,IAAI;GACT,MAAM;GACN,SAAS,4BAA4B;GACrC,UAAU;GACX,CAAC;;CAGJ,IAAIA;AACJ,KAAI;AACF,YAAU,aAAa,MAAM,QAAQ;UAC9B,OAAO;AACd,SAAO,IAAI;GACT,MAAM;GACN,SAAS,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GAChG,UAAU;GACX,CAAC;;AAGJ,QAAO,yBAAyB,SAAS,KAAK;;;;;AAMhD,SAAS,yBAAyB,SAAiB,UAA8D;CAC/G,IAAIC;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,QAAQ;UACrB,OAAO;AACd,SAAO,IAAI;GACT,MAAM;GACN,SAAS,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GACjG;GACD,CAAC;;CAGJ,MAAM,YAAY,sBAAsB,UAAU,OAAO;AACzD,KAAI,CAAC,UAAU,SAAS;AACtB,SAAO,IAAI;GACT,MAAM;GACN,SAAS,+BAA+B,UAAU,MAAM;GACxD;GACD,CAAC;;AAKJ,QAAO,GAAG,UAAU,KAAwB;;;;;;;;AClG9C,MAAa,oBAAoB,YAAgD;CAC/E,MAAM,OAAO;CACb,UAAU,YAAY,OAAO,KAAK;CAClC,SAAS,OAAO;CAChB,UAAU,OAAO;CACjB,SAAS,OAAO;CACjB;;;;;;AAWD,MAAa,eAAe,SAA6C;AACvE,SAAQ,MAAR;EAEE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,kBACH,QAAO;EAGT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,kBACH,QAAO;;;;;;AAab,MAAaC,qBAA+E;CAE1F,iBAAiB,QAAQ,iBAAiB,KAAK,cAAc,IAAI;CACjE,cAAc,QAAQ,qBAAqB,KAAK,kBAAkB,IAAI;CACtE,sBAAsB;CAGtB,wBAAwB;CACxB,wBAAwB,QAAQ,gCAAgC,KAAK,cAAc;CACnF,yBAAyB;CACzB,yBAAyB;CACzB,sBAAsB;CACtB,yBAAyB;CACzB,kBAAkB,QAChB,6CAA6C,KAAK,cAAc,QAAQ;CAC1E,uBAAuB;CAGvB,sBAAsB;CACvB;;;;AASD,MAAa,4BACX,MACA,UACA,YACqB;AACrB,QAAO,iBAAiB;EACtB;EACA,SAAS,mBAAmB,MAAM,QAAQ;EAC1C;EACA;EACD,CAAC;;;;;;CC5GJ,MAAM,YAAY;CAClB,MAAM,eAAe,KAAK,UAAU;;;;CAMpC,MAAM,cAAc;CACpB,MAAM,eAAe;CACrB,MAAM,gBAAgB;CACtB,MAAM,gBAAgB;CACtB,MAAM,WAAW;CACjB,MAAM,QAAQ;CACd,MAAM,aAAa,MAAM,cAAc;CACvC,MAAM,eAAe,QAAQ,cAAc;CAC3C,MAAM,aAAa,GAAG,YAAY,OAAO;CACzC,MAAM,SAAS,MAAM,YAAY;CACjC,MAAM,UAAU,MAAM,eAAe,WAAW;CAChD,MAAM,eAAe,MAAM,YAAY,OAAO,WAAW;CACzD,MAAM,gBAAgB,MAAM,WAAW;CACvC,MAAM,eAAe,MAAM,cAAc;CACzC,MAAM,OAAO,GAAG,MAAM;CACtB,MAAM,MAAM;CAEZ,MAAM,cAAc;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;CAMD,MAAM,gBAAgB;EACpB,GAAG;EAEH,eAAe,IAAI,UAAU;EAC7B,OAAO;EACP,MAAM,GAAG,aAAa;EACtB,YAAY,GAAG,YAAY,WAAW,UAAU;EAChD,QAAQ,MAAM,YAAY;EAC1B,SAAS,YAAY,UAAU,IAAI,YAAY,WAAW,UAAU;EACpE,cAAc,MAAM,YAAY,WAAW,UAAU;EACrD,eAAe,MAAM,YAAY,WAAW,UAAU;EACtD,cAAc,MAAM,UAAU;EAC9B,cAAc,SAAS,UAAU;EACjC,YAAY,OAAO,UAAU;EAC7B,KAAK;EACN;;;;CAMD,MAAMC,uBAAqB;EACzB,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACT;AAED,QAAO,UAAU;EACf,YAAY,OAAO;EACnB;EAGA,iBAAiB;EACjB,yBAAyB;EACzB,qBAAqB;EACrB,6BAA6B;EAC7B,4BAA4B;EAC5B,wBAAwB;EAGxB,cAAc;GACZ,WAAW;GACX,OAAO;GACP,SAAS;GACT,YAAY;GACb;EAGD,QAAQ;EACR,QAAQ;EAGR,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAElB,uBAAuB;EACvB,wBAAwB;EAExB,eAAe;EAGf,gBAAgB;EAChB,SAAS;EACT,qBAAqB;EACrB,sBAAsB;EACtB,wBAAwB;EACxB,YAAY;EACZ,YAAY;EACZ,UAAU;EACV,mBAAmB;EACnB,YAAY;EACZ,uBAAuB;EACvB,gBAAgB;EAChB,oBAAoB;EACpB,mBAAmB;EACnB,WAAW;EACX,mBAAmB;EACnB,yBAAyB;EACzB,uBAAuB;EACvB,0BAA0B;EAC1B,gBAAgB;EAChB,qBAAqB;EACrB,cAAc;EACd,WAAW;EACX,oBAAoB;EACpB,0BAA0B;EAC1B,wBAAwB;EACxB,2BAA2B;EAC3B,gBAAgB;EAChB,mBAAmB;EACnB,YAAY;EACZ,UAAU;EACV,iBAAiB;EACjB,oBAAoB;EACpB,+BAA+B;EAM/B,aAAa,OAAO;AAClB,UAAO;IACL,KAAK;KAAE,MAAM;KAAU,MAAM;KAAa,OAAO,KAAK,MAAM,KAAK;KAAI;IACrE,KAAK;KAAE,MAAM;KAAS,MAAM;KAAO,OAAO;KAAM;IAChD,KAAK;KAAE,MAAM;KAAQ,MAAM;KAAO,OAAO;KAAM;IAC/C,KAAK;KAAE,MAAM;KAAQ,MAAM;KAAO,OAAO;KAAM;IAC/C,KAAK;KAAE,MAAM;KAAM,MAAM;KAAO,OAAO;KAAK;IAC7C;;EAOH,UAAU,OAAO;AACf,UAAO,UAAU,OAAO,gBAAgB;;EAE3C;;;;;;CChLD,MAAM,EACJ,iBACA,wBACA,qBACA;AAGF,SAAQ,YAAW,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI;AACxF,SAAQ,iBAAgB,QAAO,oBAAoB,KAAK,IAAI;AAC5D,SAAQ,eAAc,QAAO,IAAI,WAAW,KAAK,QAAQ,cAAc,IAAI;AAC3E,SAAQ,eAAc,QAAO,IAAI,QAAQ,4BAA4B,OAAO;AAC5E,SAAQ,kBAAiB,QAAO,IAAI,QAAQ,iBAAiB,IAAI;AAEjE,SAAQ,kBAAkB;AACxB,MAAI,OAAO,cAAc,eAAe,UAAU,UAAU;GAC1D,MAAM,WAAW,UAAU,SAAS,aAAa;AACjD,UAAO,aAAa,WAAW,aAAa;;AAG9C,MAAI,OAAO,YAAY,eAAe,QAAQ,UAAU;AACtD,UAAO,QAAQ,aAAa;;AAG9B,SAAO;;AAGT,SAAQ,qBAAoB,QAAO;AACjC,SAAO,IAAI,QAAQ,yBAAwB,UAAS;AAClD,UAAO,UAAU,OAAO,KAAK;IAC7B;;AAGJ,SAAQ,cAAc,OAAO,MAAM,YAAY;EAC7C,MAAM,MAAM,MAAM,YAAY,MAAM,QAAQ;AAC5C,MAAI,QAAQ,CAAC,EAAG,QAAO;AACvB,MAAI,MAAM,MAAM,OAAO,KAAM,QAAO,QAAQ,WAAW,OAAO,MAAM,MAAM,EAAE;AAC5E,SAAO,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,MAAM,MAAM,IAAI;;AAGpD,SAAQ,gBAAgB,OAAO,QAAQ,EAAE,KAAK;EAC5C,IAAI,SAAS;AACb,MAAI,OAAO,WAAW,KAAK,EAAE;AAC3B,YAAS,OAAO,MAAM,EAAE;AACxB,SAAM,SAAS;;AAEjB,SAAO;;AAGT,SAAQ,cAAc,OAAO,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK;EACxD,MAAM,UAAU,QAAQ,WAAW,KAAK;EACxC,MAAM,SAAS,QAAQ,WAAW,KAAK;EAEvC,IAAI,SAAS,GAAG,QAAQ,KAAK,MAAM,GAAG;AACtC,MAAI,MAAM,YAAY,MAAM;AAC1B,YAAS,UAAU,OAAO;;AAE5B,SAAO;;AAGT,SAAQ,YAAY,MAAM,EAAE,YAAY,EAAE,KAAK;EAC7C,MAAM,OAAO,KAAK,MAAM,UAAU,UAAU,IAAI;EAChD,MAAM,OAAO,KAAK,KAAK,SAAS;AAEhC,MAAI,SAAS,IAAI;AACf,UAAO,KAAK,KAAK,SAAS;;AAG5B,SAAO;;;;;;;CCpET,MAAMC;CACN,MAAM,EACJ,eACA,SACA,qBACA,YACA,UACA,uBACA,oBACA,uBACA,uBACA,0BACA,WACA,oBACA,wBACA,wBACA;CAGF,MAAM,mBAAkB,SAAQ;AAC9B,SAAO,SAAS,sBAAsB,SAAS;;CAGjD,MAAM,SAAQ,UAAS;AACrB,MAAI,MAAM,aAAa,MAAM;AAC3B,SAAM,QAAQ,MAAM,aAAa,WAAW;;;;;;;;;;;;;;;;;;;CAqBhD,MAAMC,UAAQ,OAAO,YAAY;EAC/B,MAAM,OAAO,WAAW,EAAE;EAE1B,MAAM,SAAS,MAAM,SAAS;EAC9B,MAAM,YAAY,KAAK,UAAU,QAAQ,KAAK,cAAc;EAC5D,MAAM,UAAU,EAAE;EAClB,MAAM,SAAS,EAAE;EACjB,MAAM,QAAQ,EAAE;EAEhB,IAAI,MAAM;EACV,IAAI,QAAQ,CAAC;EACb,IAAI,QAAQ;EACZ,IAAI,YAAY;EAChB,IAAI,UAAU;EACd,IAAI,YAAY;EAChB,IAAI,SAAS;EACb,IAAI,YAAY;EAChB,IAAI,aAAa;EACjB,IAAI,eAAe;EACnB,IAAI,cAAc;EAClB,IAAI,UAAU;EACd,IAAI,iBAAiB;EACrB,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI;EACJ,IAAI;EACJ,IAAI,QAAQ;GAAE,OAAO;GAAI,OAAO;GAAG,QAAQ;GAAO;EAElD,MAAM,YAAY,SAAS;EAC3B,MAAM,aAAa,IAAI,WAAW,QAAQ,EAAE;EAC5C,MAAM,gBAAgB;AACpB,UAAO;AACP,UAAO,IAAI,WAAW,EAAE,MAAM;;AAGhC,SAAO,QAAQ,QAAQ;AACrB,UAAO,SAAS;GAChB,IAAI;AAEJ,OAAI,SAAS,qBAAqB;AAChC,kBAAc,MAAM,cAAc;AAClC,WAAO,SAAS;AAEhB,QAAI,SAAS,uBAAuB;AAClC,oBAAe;;AAEjB;;AAGF,OAAI,iBAAiB,QAAQ,SAAS,uBAAuB;AAC3D;AAEA,WAAO,KAAK,KAAK,SAAS,OAAO,SAAS,GAAG;AAC3C,SAAI,SAAS,qBAAqB;AAChC,oBAAc,MAAM,cAAc;AAClC,eAAS;AACT;;AAGF,SAAI,SAAS,uBAAuB;AAClC;AACA;;AAGF,SAAI,iBAAiB,QAAQ,SAAS,aAAa,OAAO,SAAS,MAAM,UAAU;AACjF,gBAAU,MAAM,UAAU;AAC1B,eAAS,MAAM,SAAS;AACxB,iBAAW;AAEX,UAAI,cAAc,MAAM;AACtB;;AAGF;;AAGF,SAAI,iBAAiB,QAAQ,SAAS,YAAY;AAChD,gBAAU,MAAM,UAAU;AAC1B,eAAS,MAAM,SAAS;AACxB,iBAAW;AAEX,UAAI,cAAc,MAAM;AACtB;;AAGF;;AAGF,SAAI,SAAS,wBAAwB;AACnC;AAEA,UAAI,WAAW,GAAG;AAChB,sBAAe;AACf,iBAAU,MAAM,UAAU;AAC1B,kBAAW;AACX;;;;AAKN,QAAI,cAAc,MAAM;AACtB;;AAGF;;AAGF,OAAI,SAAS,oBAAoB;AAC/B,YAAQ,KAAK,MAAM;AACnB,WAAO,KAAK,MAAM;AAClB,YAAQ;KAAE,OAAO;KAAI,OAAO;KAAG,QAAQ;KAAO;AAE9C,QAAI,aAAa,KAAM;AACvB,QAAI,SAAS,YAAY,UAAW,QAAQ,GAAI;AAC9C,cAAS;AACT;;AAGF,gBAAY,QAAQ;AACpB;;AAGF,OAAI,KAAK,UAAU,MAAM;IACvB,MAAM,gBAAgB,SAAS,aAC1B,SAAS,WACT,SAAS,iBACT,SAAS,sBACT,SAAS;AAEd,QAAI,kBAAkB,QAAQ,MAAM,KAAK,uBAAuB;AAC9D,cAAS,MAAM,SAAS;AACxB,iBAAY,MAAM,YAAY;AAC9B,gBAAW;AACX,SAAI,SAAS,yBAAyB,UAAU,OAAO;AACrD,uBAAiB;;AAGnB,SAAI,cAAc,MAAM;AACtB,aAAO,KAAK,KAAK,SAAS,OAAO,SAAS,GAAG;AAC3C,WAAI,SAAS,qBAAqB;AAChC,sBAAc,MAAM,cAAc;AAClC,eAAO,SAAS;AAChB;;AAGF,WAAI,SAAS,wBAAwB;AACnC,iBAAS,MAAM,SAAS;AACxB,mBAAW;AACX;;;AAGJ;;AAEF;;;AAIJ,OAAI,SAAS,eAAe;AAC1B,QAAI,SAAS,cAAe,cAAa,MAAM,aAAa;AAC5D,aAAS,MAAM,SAAS;AACxB,eAAW;AAEX,QAAI,cAAc,MAAM;AACtB;;AAEF;;AAGF,OAAI,SAAS,oBAAoB;AAC/B,aAAS,MAAM,SAAS;AACxB,eAAW;AAEX,QAAI,cAAc,MAAM;AACtB;;AAEF;;AAGF,OAAI,SAAS,0BAA0B;AACrC,WAAO,KAAK,KAAK,SAAS,OAAO,SAAS,GAAG;AAC3C,SAAI,SAAS,qBAAqB;AAChC,oBAAc,MAAM,cAAc;AAClC,eAAS;AACT;;AAGF,SAAI,SAAS,2BAA2B;AACtC,kBAAY,MAAM,YAAY;AAC9B,eAAS,MAAM,SAAS;AACxB,iBAAW;AACX;;;AAIJ,QAAI,cAAc,MAAM;AACtB;;AAGF;;AAGF,OAAI,KAAK,aAAa,QAAQ,SAAS,yBAAyB,UAAU,OAAO;AAC/E,cAAU,MAAM,UAAU;AAC1B;AACA;;AAGF,OAAI,KAAK,YAAY,QAAQ,SAAS,uBAAuB;AAC3D,aAAS,MAAM,SAAS;AAExB,QAAI,cAAc,MAAM;AACtB,YAAO,KAAK,KAAK,SAAS,OAAO,SAAS,GAAG;AAC3C,UAAI,SAAS,uBAAuB;AAClC,qBAAc,MAAM,cAAc;AAClC,cAAO,SAAS;AAChB;;AAGF,UAAI,SAAS,wBAAwB;AACnC,kBAAW;AACX;;;AAGJ;;AAEF;;AAGF,OAAI,WAAW,MAAM;AACnB,eAAW;AAEX,QAAI,cAAc,MAAM;AACtB;;AAGF;;;AAIJ,MAAI,KAAK,UAAU,MAAM;AACvB,eAAY;AACZ,YAAS;;EAGX,IAAI,OAAO;EACX,IAAI,SAAS;EACb,IAAI,OAAO;AAEX,MAAI,QAAQ,GAAG;AACb,YAAS,IAAI,MAAM,GAAG,MAAM;AAC5B,SAAM,IAAI,MAAM,MAAM;AACtB,gBAAa;;AAGf,MAAI,QAAQ,WAAW,QAAQ,YAAY,GAAG;AAC5C,UAAO,IAAI,MAAM,GAAG,UAAU;AAC9B,UAAO,IAAI,MAAM,UAAU;aAClB,WAAW,MAAM;AAC1B,UAAO;AACP,UAAO;SACF;AACL,UAAO;;AAGT,MAAI,QAAQ,SAAS,MAAM,SAAS,OAAO,SAAS,KAAK;AACvD,OAAI,gBAAgB,KAAK,WAAW,KAAK,SAAS,EAAE,CAAC,EAAE;AACrD,WAAO,KAAK,MAAM,GAAG,CAAC,EAAE;;;AAI5B,MAAI,KAAK,aAAa,MAAM;AAC1B,OAAI,KAAM,QAAOD,QAAM,kBAAkB,KAAK;AAE9C,OAAI,QAAQ,gBAAgB,MAAM;AAChC,WAAOA,QAAM,kBAAkB,KAAK;;;EAIxC,MAAM,QAAQ;GACZ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;AAED,MAAI,KAAK,WAAW,MAAM;AACxB,SAAM,WAAW;AACjB,OAAI,CAAC,gBAAgB,KAAK,EAAE;AAC1B,WAAO,KAAK,MAAM;;AAEpB,SAAM,SAAS;;AAGjB,MAAI,KAAK,UAAU,QAAQ,KAAK,WAAW,MAAM;GAC/C,IAAI;AAEJ,QAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,QAAQ,OAAO;IAC7C,MAAM,IAAI,YAAY,YAAY,IAAI;IACtC,MAAM,IAAI,QAAQ;IAClB,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE;AAC/B,QAAI,KAAK,QAAQ;AACf,SAAI,QAAQ,KAAK,UAAU,GAAG;AAC5B,aAAO,KAAK,WAAW;AACvB,aAAO,KAAK,QAAQ;YACf;AACL,aAAO,KAAK,QAAQ;;AAEtB,WAAM,OAAO,KAAK;AAClB,WAAM,YAAY,OAAO,KAAK;;AAEhC,QAAI,QAAQ,KAAK,UAAU,IAAI;AAC7B,WAAM,KAAK,MAAM;;AAEnB,gBAAY;;AAGd,OAAI,aAAa,YAAY,IAAI,MAAM,QAAQ;IAC7C,MAAM,QAAQ,MAAM,MAAM,YAAY,EAAE;AACxC,UAAM,KAAK,MAAM;AAEjB,QAAI,KAAK,QAAQ;AACf,YAAO,OAAO,SAAS,GAAG,QAAQ;AAClC,WAAM,OAAO,OAAO,SAAS,GAAG;AAChC,WAAM,YAAY,OAAO,OAAO,SAAS,GAAG;;;AAIhD,SAAM,UAAU;AAChB,SAAM,QAAQ;;AAGhB,SAAO;;AAGT,QAAO,UAAUC;;;;;;CCpYjB,MAAMC;CACN,MAAMC;;;;CAMN,MAAM,EACJ,YACA,oBACA,yBACA,6BACA,iBACED;;;;CAMJ,MAAM,eAAe,MAAM,YAAY;AACrC,MAAI,OAAO,QAAQ,gBAAgB,YAAY;AAC7C,UAAO,QAAQ,YAAY,GAAG,MAAM,QAAQ;;AAG9C,OAAK,MAAM;EACX,MAAM,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAEjC,MAAI;AAEF,OAAI,OAAO,MAAM;WACV,IAAI;AACX,UAAO,KAAK,KAAI,MAAKC,QAAM,YAAY,EAAE,CAAC,CAAC,KAAK,KAAK;;AAGvD,SAAO;;;;;CAOT,MAAM,eAAe,MAAM,SAAS;AAClC,SAAO,WAAW,KAAK,KAAK,KAAK,eAAe,KAAK;;;;;;;;CAUvD,MAAMC,WAAS,OAAO,YAAY;AAChC,MAAI,OAAO,UAAU,UAAU;AAC7B,SAAM,IAAI,UAAU,oBAAoB;;AAG1C,UAAQ,aAAa,UAAU;EAE/B,MAAM,OAAO,EAAE,GAAG,SAAS;EAC3B,MAAM,MAAM,OAAO,KAAK,cAAc,WAAW,KAAK,IAAI,YAAY,KAAK,UAAU,GAAG;EAExF,IAAI,MAAM,MAAM;AAChB,MAAI,MAAM,KAAK;AACb,SAAM,IAAI,YAAY,iBAAiB,IAAI,oCAAoC,MAAM;;EAGvF,MAAM,MAAM;GAAE,MAAM;GAAO,OAAO;GAAI,QAAQ,KAAK,WAAW;GAAI;EAClE,MAAM,SAAS,CAAC,IAAI;EAEpB,MAAM,UAAU,KAAK,UAAU,KAAK;EAGpC,MAAM,iBAAiBF,YAAU,UAAU,KAAK,QAAQ;EACxD,MAAM,gBAAgBA,YAAU,aAAa,eAAe;EAE5D,MAAM,EACJ,4BACA,8BACA,gCACA,sBACA,0BACA,kBACA,8BACA,gCACA,gBACA,8BACA,cACA,iCACE;EAEJ,MAAM,YAAW,WAAQ;AACvB,UAAO,IAAI,QAAQ,QAAQG,iBAAeC,OAAK,MAAMC,eAAaC,cAAY;;EAGhF,MAAM,QAAQ,KAAK,MAAM,KAAKC;EAC9B,MAAM,aAAa,KAAK,MAAMC,UAAQC;EACtC,IAAI,OAAO,KAAK,SAAS,OAAO,SAAS,KAAK,GAAGC;AAEjD,MAAI,KAAK,SAAS;AAChB,UAAO,IAAI,KAAK;;AAIlB,MAAI,OAAO,KAAK,UAAU,WAAW;AACnC,QAAK,YAAY,KAAK;;EAGxB,MAAM,QAAQ;GACZ;GACA,OAAO,CAAC;GACR,OAAO;GACP,KAAK,KAAK,QAAQ;GAClB,UAAU;GACV,QAAQ;GACR,QAAQ;GACR,WAAW;GACX,SAAS;GACT,UAAU;GACV,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,UAAU;GACV;GACD;AAED,UAAQT,QAAM,aAAa,OAAO,MAAM;AACxC,QAAM,MAAM;EAEZ,MAAM,WAAW,EAAE;EACnB,MAAM,SAAS,EAAE;EACjB,MAAM,QAAQ,EAAE;EAChB,IAAI,OAAO;EACX,IAAI;;;;EAMJ,MAAM,YAAY,MAAM,UAAU,MAAM;EACxC,MAAM,OAAO,MAAM,QAAQ,IAAI,MAAM,MAAM,MAAM,QAAQ;EACzD,MAAM,UAAU,MAAM,gBAAgB,MAAM,EAAE,MAAM,UAAU;EAC9D,MAAM,kBAAkB,MAAM,MAAM,MAAM,QAAQ,EAAE;EACpD,MAAM,WAAW,UAAQ,IAAI,MAAM,MAAM;AACvC,SAAM,YAAYU;AAClB,SAAM,SAAS;;EAGjB,MAAM,UAAS,UAAS;AACtB,SAAM,UAAU,MAAM,UAAU,OAAO,MAAM,SAAS,MAAM;AAC5D,WAAQ,MAAM,MAAM;;EAGtB,MAAM,eAAe;GACnB,IAAI,QAAQ;AAEZ,UAAO,MAAM,KAAK,QAAQ,KAAK,EAAE,KAAK,OAAO,KAAK,EAAE,KAAK,MAAM;AAC7D,aAAS;AACT,UAAM;AACN;;AAGF,OAAI,QAAQ,MAAM,GAAG;AACnB,WAAO;;AAGT,SAAM,UAAU;AAChB,SAAM;AACN,UAAO;;EAGT,MAAM,aAAY,SAAQ;AACxB,SAAM;AACN,SAAM,KAAK,KAAK;;EAGlB,MAAM,aAAY,SAAQ;AACxB,SAAM;AACN,SAAM,KAAK;;;;;;;;;EAWb,MAAM,QAAO,QAAO;AAClB,OAAI,KAAK,SAAS,YAAY;IAC5B,MAAM,UAAU,MAAM,SAAS,MAAM,IAAI,SAAS,WAAW,IAAI,SAAS;IAC1E,MAAM,YAAY,IAAI,YAAY,QAAS,SAAS,WAAW,IAAI,SAAS,UAAU,IAAI,SAAS;AAEnG,QAAI,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW,CAAC,WAAW,CAAC,WAAW;AAC1E,WAAM,SAAS,MAAM,OAAO,MAAM,GAAG,CAAC,KAAK,OAAO,OAAO;AACzD,UAAK,OAAO;AACZ,UAAK,QAAQ;AACb,UAAK,SAAS;AACd,WAAM,UAAU,KAAK;;;AAIzB,OAAI,SAAS,UAAU,IAAI,SAAS,SAAS;AAC3C,aAAS,SAAS,SAAS,GAAG,SAAS,IAAI;;AAG7C,OAAI,IAAI,SAAS,IAAI,OAAQ,QAAO,IAAI;AACxC,OAAI,QAAQ,KAAK,SAAS,UAAU,IAAI,SAAS,QAAQ;AACvD,SAAK,UAAU,KAAK,UAAU,KAAK,SAAS,IAAI;AAChD,SAAK,SAAS,IAAI;AAClB;;AAGF,OAAI,OAAO;AACX,UAAO,KAAK,IAAI;AAChB,UAAO;;EAGT,MAAM,eAAe,MAAM,YAAU;GACnC,MAAM,QAAQ;IAAE,GAAG,cAAcA;IAAQ,YAAY;IAAG,OAAO;IAAI;AAEnE,SAAM,OAAO;AACb,SAAM,SAAS,MAAM;AACrB,SAAM,SAAS,MAAM;GACrB,MAAM,UAAU,KAAK,UAAU,MAAM,MAAM,MAAM;AAEjD,aAAU,SAAS;AACnB,QAAK;IAAE;IAAM;IAAO,QAAQ,MAAM,SAAS,KAAKC;IAAU,CAAC;AAC3D,QAAK;IAAE,MAAM;IAAS,SAAS;IAAM,OAAO,SAAS;IAAE;IAAQ,CAAC;AAChE,YAAS,KAAK,MAAM;;EAGtB,MAAM,gBAAe,UAAS;GAC5B,IAAI,SAAS,MAAM,SAAS,KAAK,UAAU,MAAM;GACjD,IAAI;AAEJ,OAAI,MAAM,SAAS,UAAU;IAC3B,IAAI,cAAc;AAElB,QAAI,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,IAAI,EAAE;AACtE,mBAAc,SAAS,KAAK;;AAG9B,QAAI,gBAAgB,QAAQ,KAAK,IAAI,QAAQ,KAAK,WAAW,CAAC,EAAE;AAC9D,cAAS,MAAM,QAAQ,OAAO;;AAGhC,QAAI,MAAM,MAAM,SAAS,IAAI,KAAK,OAAO,WAAW,KAAK,eAAe,KAAK,KAAK,EAAE;KAMlF,MAAM,aAAaV,QAAM,MAAM;MAAE,GAAG;MAAS,WAAW;MAAO,CAAC,CAAC;AAEjE,cAAS,MAAM,QAAQ,IAAI,WAAW,GAAG,YAAY;;AAGvD,QAAI,MAAM,KAAK,SAAS,OAAO;AAC7B,WAAM,iBAAiB;;;AAI3B,QAAK;IAAE,MAAM;IAAS,SAAS;IAAM;IAAO;IAAQ,CAAC;AACrD,aAAU,SAAS;;;;;AAOrB,MAAI,KAAK,cAAc,SAAS,CAAC,sBAAsB,KAAK,MAAM,EAAE;GAClE,IAAI,cAAc;GAElB,IAAI,SAAS,MAAM,QAAQ,8BAA8B,GAAG,KAAK,OAAO,OAAO,MAAM,UAAU;AAC7F,QAAI,UAAU,MAAM;AAClB,mBAAc;AACd,YAAO;;AAGT,QAAI,UAAU,KAAK;AACjB,SAAI,KAAK;AACP,aAAO,MAAM,SAAS,OAAOM,QAAM,OAAO,KAAK,OAAO,GAAG;;AAE3D,SAAI,UAAU,GAAG;AACf,aAAO,cAAc,OAAOA,QAAM,OAAO,KAAK,OAAO,GAAG;;AAE1D,YAAOA,QAAM,OAAO,MAAM,OAAO;;AAGnC,QAAI,UAAU,KAAK;AACjB,YAAOF,cAAY,OAAO,MAAM,OAAO;;AAGzC,QAAI,UAAU,KAAK;AACjB,SAAI,KAAK;AACP,aAAO,MAAM,SAAS,OAAO,OAAO;;AAEtC,YAAO;;AAET,WAAO,MAAM,IAAI,KAAK;KACtB;AAEF,OAAI,gBAAgB,MAAM;AACxB,QAAI,KAAK,aAAa,MAAM;AAC1B,cAAS,OAAO,QAAQ,OAAO,GAAG;WAC7B;AACL,cAAS,OAAO,QAAQ,SAAQ,MAAK;AACnC,aAAO,EAAE,SAAS,MAAM,IAAI,SAAU,IAAI,OAAO;OACjD;;;AAIN,OAAI,WAAW,SAAS,KAAK,aAAa,MAAM;AAC9C,UAAM,SAAS;AACf,WAAO;;AAGT,SAAM,SAASL,QAAM,WAAW,QAAQ,OAAO,QAAQ;AACvD,UAAO;;;;;AAOT,SAAO,CAAC,KAAK,EAAE;AACb,WAAQ,SAAS;AAEjB,OAAI,UAAU,MAAU;AACtB;;;;;AAOF,OAAI,UAAU,MAAM;IAClB,MAAM,OAAO,MAAM;AAEnB,QAAI,SAAS,OAAO,KAAK,SAAS,MAAM;AACtC;;AAGF,QAAI,SAAS,OAAO,SAAS,KAAK;AAChC;;AAGF,QAAI,CAAC,MAAM;AACT,cAAS;AACT,UAAK;MAAE,MAAM;MAAQ;MAAO,CAAC;AAC7B;;IAIF,MAAM,QAAQ,OAAO,KAAK,WAAW,CAAC;IACtC,IAAI,UAAU;AAEd,QAAI,SAAS,MAAM,GAAG,SAAS,GAAG;AAChC,eAAU,MAAM,GAAG;AACnB,WAAM,SAAS;AACf,SAAI,UAAU,MAAM,GAAG;AACrB,eAAS;;;AAIb,QAAI,KAAK,aAAa,MAAM;AAC1B,aAAQ,SAAS;WACZ;AACL,cAAS,SAAS;;AAGpB,QAAI,MAAM,aAAa,GAAG;AACxB,UAAK;MAAE,MAAM;MAAQ;MAAO,CAAC;AAC7B;;;;;;;AASJ,OAAI,MAAM,WAAW,MAAM,UAAU,OAAO,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO;AACtF,QAAI,KAAK,UAAU,SAAS,UAAU,KAAK;KACzC,MAAM,QAAQ,KAAK,MAAM,MAAM,EAAE;AACjC,SAAI,MAAM,SAAS,IAAI,EAAE;AACvB,WAAK,QAAQ;AAEb,UAAI,MAAM,SAAS,IAAI,EAAE;OACvB,MAAM,MAAM,KAAK,MAAM,YAAY,IAAI;OACvC,MAAM,MAAM,KAAK,MAAM,MAAM,GAAG,IAAI;OACpC,MAAMY,SAAO,KAAK,MAAM,MAAM,MAAM,EAAE;OACtC,MAAM,QAAQ,mBAAmBA;AACjC,WAAI,OAAO;AACT,aAAK,QAAQ,MAAM;AACnB,cAAM,YAAY;AAClB,iBAAS;AAET,YAAI,CAAC,IAAI,UAAU,OAAO,QAAQ,KAAK,KAAK,GAAG;AAC7C,aAAI,SAASD;;AAEf;;;;;AAMR,QAAK,UAAU,OAAO,MAAM,KAAK,OAAS,UAAU,OAAO,MAAM,KAAK,KAAM;AAC1E,aAAQ,KAAK;;AAGf,QAAI,UAAU,QAAQ,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO;AAChE,aAAQ,KAAK;;AAGf,QAAI,KAAK,UAAU,QAAQ,UAAU,OAAO,KAAK,UAAU,KAAK;AAC9D,aAAQ;;AAGV,SAAK,SAAS;AACd,WAAO,EAAE,OAAO,CAAC;AACjB;;;;;;AAQF,OAAI,MAAM,WAAW,KAAK,UAAU,MAAK;AACvC,YAAQX,QAAM,YAAY,MAAM;AAChC,SAAK,SAAS;AACd,WAAO,EAAE,OAAO,CAAC;AACjB;;;;;AAOF,OAAI,UAAU,MAAK;AACjB,UAAM,SAAS,MAAM,WAAW,IAAI,IAAI;AACxC,QAAI,KAAK,eAAe,MAAM;AAC5B,UAAK;MAAE,MAAM;MAAQ;MAAO,CAAC;;AAE/B;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,cAAU,SAAS;AACnB,SAAK;KAAE,MAAM;KAAS;KAAO,CAAC;AAC9B;;AAGF,OAAI,UAAU,KAAK;AACjB,QAAI,MAAM,WAAW,KAAK,KAAK,mBAAmB,MAAM;AACtD,WAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;;IAGpD,MAAM,UAAU,SAAS,SAAS,SAAS;AAC3C,QAAI,WAAW,MAAM,WAAW,QAAQ,SAAS,GAAG;AAClD,kBAAa,SAAS,KAAK,CAAC;AAC5B;;AAGF,SAAK;KAAE,MAAM;KAAS;KAAO,QAAQ,MAAM,SAAS,MAAM;KAAO,CAAC;AAClE,cAAU,SAAS;AACnB;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,KAAK,cAAc,QAAQ,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE;AACzD,SAAI,KAAK,cAAc,QAAQ,KAAK,mBAAmB,MAAM;AAC3D,YAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;;AAGpD,aAAQ,KAAK;WACR;AACL,eAAU,WAAW;;AAGvB,SAAK;KAAE,MAAM;KAAW;KAAO,CAAC;AAChC;;AAGF,OAAI,UAAU,KAAK;AACjB,QAAI,KAAK,cAAc,QAAS,QAAQ,KAAK,SAAS,aAAa,KAAK,MAAM,WAAW,GAAI;AAC3F,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQ,KAAK;MAAS,CAAC;AACnD;;AAGF,QAAI,MAAM,aAAa,GAAG;AACxB,SAAI,KAAK,mBAAmB,MAAM;AAChC,YAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;;AAGpD,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQ,KAAK;MAAS,CAAC;AACnD;;AAGF,cAAU,WAAW;IAErB,MAAM,YAAY,KAAK,MAAM,MAAM,EAAE;AACrC,QAAI,KAAK,UAAU,QAAQ,UAAU,OAAO,OAAO,CAAC,UAAU,SAAS,IAAI,EAAE;AAC3E,aAAQ,IAAI;;AAGd,SAAK,SAAS;AACd,WAAO,EAAE,OAAO,CAAC;AAIjB,QAAI,KAAK,oBAAoB,SAASA,QAAM,cAAc,UAAU,EAAE;AACpE;;IAGF,MAAM,UAAUA,QAAM,YAAY,KAAK,MAAM;AAC7C,UAAM,SAAS,MAAM,OAAO,MAAM,GAAG,CAAC,KAAK,MAAM,OAAO;AAIxD,QAAI,KAAK,oBAAoB,MAAM;AACjC,WAAM,UAAU;AAChB,UAAK,QAAQ;AACb;;AAIF,SAAK,QAAQ,IAAI,UAAU,QAAQ,GAAG,KAAK,MAAM;AACjD,UAAM,UAAU,KAAK;AACrB;;;;;AAOF,OAAI,UAAU,OAAO,KAAK,YAAY,MAAM;AAC1C,cAAU,SAAS;IAEnB,MAAM,OAAO;KACX,MAAM;KACN;KACA,QAAQ;KACR,aAAa,MAAM,OAAO;KAC1B,aAAa,MAAM,OAAO;KAC3B;AAED,WAAO,KAAK,KAAK;AACjB,SAAK,KAAK;AACV;;AAGF,OAAI,UAAU,KAAK;IACjB,MAAM,QAAQ,OAAO,OAAO,SAAS;AAErC,QAAI,KAAK,YAAY,QAAQ,CAAC,OAAO;AACnC,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQ;MAAO,CAAC;AAC5C;;IAGF,IAAI,SAAS;AAEb,QAAI,MAAM,SAAS,MAAM;KACvB,MAAM,MAAM,OAAO,OAAO;KAC1B,MAAM,QAAQ,EAAE;AAEhB,UAAK,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;AACxC,aAAO,KAAK;AACZ,UAAI,IAAI,GAAG,SAAS,SAAS;AAC3B;;AAEF,UAAI,IAAI,GAAG,SAAS,QAAQ;AAC1B,aAAM,QAAQ,IAAI,GAAG,MAAM;;;AAI/B,cAAS,YAAY,OAAO,KAAK;AACjC,WAAM,YAAY;;AAGpB,QAAI,MAAM,UAAU,QAAQ,MAAM,SAAS,MAAM;KAC/C,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,YAAY;KACpD,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,YAAY;AAClD,WAAM,QAAQ,MAAM,SAAS;AAC7B,aAAQ,SAAS;AACjB,WAAM,SAAS;AACf,UAAK,MAAM,KAAK,MAAM;AACpB,YAAM,UAAW,EAAE,UAAU,EAAE;;;AAInC,SAAK;KAAE,MAAM;KAAS;KAAO;KAAQ,CAAC;AACtC,cAAU,SAAS;AACnB,WAAO,KAAK;AACZ;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,SAAS,SAAS,GAAG;AACvB,cAAS,SAAS,SAAS,GAAG;;AAEhC,SAAK;KAAE,MAAM;KAAQ;KAAO,CAAC;AAC7B;;;;;AAOF,OAAI,UAAU,KAAK;IACjB,IAAI,SAAS;IAEb,MAAM,QAAQ,OAAO,OAAO,SAAS;AACrC,QAAI,SAAS,MAAM,MAAM,SAAS,OAAO,UAAU;AACjD,WAAM,QAAQ;AACd,cAAS;;AAGX,SAAK;KAAE,MAAM;KAAS;KAAO;KAAQ,CAAC;AACtC;;;;;AAOF,OAAI,UAAU,KAAK;AAKjB,QAAI,KAAK,SAAS,SAAS,MAAM,UAAU,MAAM,QAAQ,GAAG;AAC1D,WAAM,QAAQ,MAAM,QAAQ;AAC5B,WAAM,WAAW;AACjB,WAAM,SAAS;AACf,YAAO,KAAK;AACZ,YAAO;AACP;;AAGF,SAAK;KAAE,MAAM;KAAS;KAAO,QAAQa;KAAe,CAAC;AACrD;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,MAAM,SAAS,KAAK,KAAK,SAAS,OAAO;AAC3C,SAAI,KAAK,UAAU,IAAK,MAAK,SAASR;KACtC,MAAM,QAAQ,OAAO,OAAO,SAAS;AACrC,UAAK,OAAO;AACZ,UAAK,UAAU;AACf,UAAK,SAAS;AACd,WAAM,OAAO;AACb;;AAGF,QAAK,MAAM,SAAS,MAAM,WAAY,KAAK,KAAK,SAAS,SAAS,KAAK,SAAS,SAAS;AACvF,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQA;MAAa,CAAC;AAClD;;AAGF,SAAK;KAAE,MAAM;KAAO;KAAO,QAAQA;KAAa,CAAC;AACjD;;;;;AAOF,OAAI,UAAU,KAAK;IACjB,MAAM,UAAU,QAAQ,KAAK,UAAU;AACvC,QAAI,CAAC,WAAW,KAAK,cAAc,QAAQ,MAAM,KAAK,OAAO,KAAK,EAAE,KAAK,KAAK;AAC5E,iBAAY,SAAS,MAAM;AAC3B;;AAGF,QAAI,QAAQ,KAAK,SAAS,SAAS;KACjC,MAAM,OAAO,MAAM;KACnB,IAAI,SAAS;AAEb,SAAK,KAAK,UAAU,OAAO,CAAC,SAAS,KAAK,KAAK,IAAM,SAAS,OAAO,CAAC,eAAe,KAAK,WAAW,CAAC,EAAG;AACvG,eAAS,KAAK;;AAGhB,UAAK;MAAE,MAAM;MAAQ;MAAO;MAAQ,CAAC;AACrC;;AAGF,QAAI,KAAK,QAAQ,SAAS,KAAK,SAAS,WAAW,KAAK,SAAS,QAAQ;AACvE,UAAK;MAAE,MAAM;MAAS;MAAO,QAAQG;MAAc,CAAC;AACpD;;AAGF,SAAK;KAAE,MAAM;KAAS;KAAO,QAAQD;KAAO,CAAC;AAC7C;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,KAAK,cAAc,QAAQ,MAAM,KAAK,KAAK;AAC7C,SAAI,KAAK,EAAE,KAAK,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC,EAAE;AAC9C,kBAAY,UAAU,MAAM;AAC5B;;;AAIJ,QAAI,KAAK,aAAa,QAAQ,MAAM,UAAU,GAAG;AAC/C,aAAQ;AACR;;;;;;AAQJ,OAAI,UAAU,KAAK;AACjB,QAAI,KAAK,cAAc,QAAQ,MAAM,KAAK,OAAO,KAAK,EAAE,KAAK,KAAK;AAChE,iBAAY,QAAQ,MAAM;AAC1B;;AAGF,QAAK,QAAQ,KAAK,UAAU,OAAQ,KAAK,UAAU,OAAO;AACxD,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQO;MAAc,CAAC;AACnD;;AAGF,QAAK,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS,WAAW,KAAK,SAAS,YAAa,MAAM,SAAS,GAAG;AAC7G,UAAK;MAAE,MAAM;MAAQ;MAAO,CAAC;AAC7B;;AAGF,SAAK;KAAE,MAAM;KAAQ,OAAOA;KAAc,CAAC;AAC3C;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,KAAK,cAAc,QAAQ,MAAM,KAAK,OAAO,KAAK,EAAE,KAAK,KAAK;AAChE,UAAK;MAAE,MAAM;MAAM,SAAS;MAAM;MAAO,QAAQ;MAAI,CAAC;AACtD;;AAGF,SAAK;KAAE,MAAM;KAAQ;KAAO,CAAC;AAC7B;;;;;AAOF,OAAI,UAAU,KAAK;AACjB,QAAI,UAAU,OAAO,UAAU,KAAK;AAClC,aAAQ,KAAK;;IAGf,MAAM,QAAQ,wBAAwB,KAAK,WAAW,CAAC;AACvD,QAAI,OAAO;AACT,cAAS,MAAM;AACf,WAAM,SAAS,MAAM,GAAG;;AAG1B,SAAK;KAAE,MAAM;KAAQ;KAAO,CAAC;AAC7B;;;;;AAOF,OAAI,SAAS,KAAK,SAAS,cAAc,KAAK,SAAS,OAAO;AAC5D,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,SAAS;AACd,UAAM,YAAY;AAClB,UAAM,WAAW;AACjB,YAAQ,MAAM;AACd;;GAGF,IAAI,OAAO,WAAW;AACtB,OAAI,KAAK,cAAc,QAAQ,UAAU,KAAK,KAAK,EAAE;AACnD,gBAAY,QAAQ,MAAM;AAC1B;;AAGF,OAAI,KAAK,SAAS,QAAQ;AACxB,QAAI,KAAK,eAAe,MAAM;AAC5B,aAAQ,MAAM;AACd;;IAGF,MAAM,QAAQ,KAAK;IACnB,MAAM,SAAS,MAAM;IACrB,MAAM,UAAU,MAAM,SAAS,WAAW,MAAM,SAAS;IACzD,MAAM,YAAY,WAAW,OAAO,SAAS,UAAU,OAAO,SAAS;AAEvE,QAAI,KAAK,SAAS,SAAS,CAAC,WAAY,KAAK,MAAM,KAAK,OAAO,MAAO;AACpE,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQ;MAAI,CAAC;AACzC;;IAGF,MAAM,UAAU,MAAM,SAAS,MAAM,MAAM,SAAS,WAAW,MAAM,SAAS;IAC9E,MAAM,YAAY,SAAS,WAAW,MAAM,SAAS,UAAU,MAAM,SAAS;AAC9E,QAAI,CAAC,WAAW,MAAM,SAAS,WAAW,CAAC,WAAW,CAAC,WAAW;AAChE,UAAK;MAAE,MAAM;MAAQ;MAAO,QAAQ;MAAI,CAAC;AACzC;;AAIF,WAAO,KAAK,MAAM,GAAG,EAAE,KAAK,OAAO;KACjC,MAAM,QAAQ,MAAM,MAAM,QAAQ;AAClC,SAAI,SAAS,UAAU,KAAK;AAC1B;;AAEF,YAAO,KAAK,MAAM,EAAE;AACpB,aAAQ,OAAO,EAAE;;AAGnB,QAAI,MAAM,SAAS,SAAS,KAAK,EAAE;AACjC,UAAK,OAAO;AACZ,UAAK,SAAS;AACd,UAAK,SAAS,SAAS,KAAK;AAC5B,WAAM,SAAS,KAAK;AACpB,WAAM,WAAW;AACjB,aAAQ,MAAM;AACd;;AAGF,QAAI,MAAM,SAAS,WAAW,MAAM,KAAK,SAAS,SAAS,CAAC,aAAa,KAAK,EAAE;AAC9E,WAAM,SAAS,MAAM,OAAO,MAAM,GAAG,EAAE,MAAM,SAAS,KAAK,QAAQ,OAAO;AAC1E,WAAM,SAAS,MAAM,MAAM;AAE3B,UAAK,OAAO;AACZ,UAAK,SAAS,SAAS,KAAK,IAAI,KAAK,gBAAgB,MAAM;AAC3D,UAAK,SAAS;AACd,WAAM,WAAW;AACjB,WAAM,UAAU,MAAM,SAAS,KAAK;AACpC,aAAQ,MAAM;AACd;;AAGF,QAAI,MAAM,SAAS,WAAW,MAAM,KAAK,SAAS,SAAS,KAAK,OAAO,KAAK;KAC1E,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI,OAAO;AAExC,WAAM,SAAS,MAAM,OAAO,MAAM,GAAG,EAAE,MAAM,SAAS,KAAK,QAAQ,OAAO;AAC1E,WAAM,SAAS,MAAM,MAAM;AAE3B,UAAK,OAAO;AACZ,UAAK,SAAS,GAAG,SAAS,KAAK,GAAGD,gBAAc,GAAGA,kBAAgB,IAAI;AACvE,UAAK,SAAS;AAEd,WAAM,UAAU,MAAM,SAAS,KAAK;AACpC,WAAM,WAAW;AAEjB,aAAQ,QAAQ,SAAS,CAAC;AAE1B,UAAK;MAAE,MAAM;MAAS,OAAO;MAAK,QAAQ;MAAI,CAAC;AAC/C;;AAGF,QAAI,MAAM,SAAS,SAAS,KAAK,OAAO,KAAK;AAC3C,UAAK,OAAO;AACZ,UAAK,SAAS;AACd,UAAK,SAAS,QAAQA,gBAAc,GAAG,SAAS,KAAK,GAAGA,gBAAc;AACtE,WAAM,SAAS,KAAK;AACpB,WAAM,WAAW;AACjB,aAAQ,QAAQ,SAAS,CAAC;AAC1B,UAAK;MAAE,MAAM;MAAS,OAAO;MAAK,QAAQ;MAAI,CAAC;AAC/C;;AAIF,UAAM,SAAS,MAAM,OAAO,MAAM,GAAG,CAAC,KAAK,OAAO,OAAO;AAGzD,SAAK,OAAO;AACZ,SAAK,SAAS,SAAS,KAAK;AAC5B,SAAK,SAAS;AAGd,UAAM,UAAU,KAAK;AACrB,UAAM,WAAW;AACjB,YAAQ,MAAM;AACd;;GAGF,MAAM,QAAQ;IAAE,MAAM;IAAQ;IAAO,QAAQ;IAAM;AAEnD,OAAI,KAAK,SAAS,MAAM;AACtB,UAAM,SAAS;AACf,QAAI,KAAK,SAAS,SAAS,KAAK,SAAS,SAAS;AAChD,WAAM,SAAS,QAAQ,MAAM;;AAE/B,SAAK,MAAM;AACX;;AAGF,OAAI,SAAS,KAAK,SAAS,aAAa,KAAK,SAAS,YAAY,KAAK,UAAU,MAAM;AACrF,UAAM,SAAS;AACf,SAAK,MAAM;AACX;;AAGF,OAAI,MAAM,UAAU,MAAM,SAAS,KAAK,SAAS,WAAW,KAAK,SAAS,OAAO;AAC/E,QAAI,KAAK,SAAS,OAAO;AACvB,WAAM,UAAUE;AAChB,UAAK,UAAUA;eAEN,KAAK,QAAQ,MAAM;AAC5B,WAAM,UAAUC;AAChB,UAAK,UAAUA;WAEV;AACL,WAAM,UAAU;AAChB,UAAK,UAAU;;AAGjB,QAAI,MAAM,KAAK,KAAK;AAClB,WAAM,UAAUL;AAChB,UAAK,UAAUA;;;AAInB,QAAK,MAAM;;AAGb,SAAO,MAAM,WAAW,GAAG;AACzB,OAAI,KAAK,mBAAmB,KAAM,OAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;AACpF,SAAM,SAASX,QAAM,WAAW,MAAM,QAAQ,IAAI;AAClD,aAAU,WAAW;;AAGvB,SAAO,MAAM,SAAS,GAAG;AACvB,OAAI,KAAK,mBAAmB,KAAM,OAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;AACpF,SAAM,SAASA,QAAM,WAAW,MAAM,QAAQ,IAAI;AAClD,aAAU,SAAS;;AAGrB,SAAO,MAAM,SAAS,GAAG;AACvB,OAAI,KAAK,mBAAmB,KAAM,OAAM,IAAI,YAAY,YAAY,WAAW,IAAI,CAAC;AACpF,SAAM,SAASA,QAAM,WAAW,MAAM,QAAQ,IAAI;AAClD,aAAU,SAAS;;AAGrB,MAAI,KAAK,kBAAkB,SAAS,KAAK,SAAS,UAAU,KAAK,SAAS,YAAY;AACpF,QAAK;IAAE,MAAM;IAAe,OAAO;IAAI,QAAQ,GAAGa,gBAAc;IAAI,CAAC;;AAIvE,MAAI,MAAM,cAAc,MAAM;AAC5B,SAAM,SAAS;AAEf,QAAK,MAAM,SAAS,MAAM,QAAQ;AAChC,UAAM,UAAU,MAAM,UAAU,OAAO,MAAM,SAAS,MAAM;AAE5D,QAAI,MAAM,QAAQ;AAChB,WAAM,UAAU,MAAM;;;;AAK5B,SAAO;;;;;;;AAST,SAAM,aAAa,OAAO,YAAY;EACpC,MAAM,OAAO,EAAE,GAAG,SAAS;EAC3B,MAAM,MAAM,OAAO,KAAK,cAAc,WAAW,KAAK,IAAI,YAAY,KAAK,UAAU,GAAG;EACxF,MAAM,MAAM,MAAM;AAClB,MAAI,MAAM,KAAK;AACb,SAAM,IAAI,YAAY,iBAAiB,IAAI,oCAAoC,MAAM;;AAGvF,UAAQ,aAAa,UAAU;EAG/B,MAAM,EACJ,4BACA,gCACA,sBACA,0BACA,kBACA,oBACA,gCACA,cACA,iCACEd,YAAU,UAAU,KAAK,QAAQ;EAErC,MAAM,QAAQ,KAAK,MAAMkB,YAAUX;EACnC,MAAM,WAAW,KAAK,MAAMU,kBAAgBV;EAC5C,MAAM,UAAU,KAAK,UAAU,KAAK;EACpC,MAAM,QAAQ;GAAE,SAAS;GAAO,QAAQ;GAAI;EAC5C,IAAI,OAAO,KAAK,SAAS,OAAO,QAAQG;AAExC,MAAI,KAAK,SAAS;AAChB,UAAO,IAAI,KAAK;;EAGlB,MAAM,YAAW,WAAQ;AACvB,OAAIN,OAAK,eAAe,KAAM,QAAO;AACrC,UAAO,IAAI,QAAQ,QAAQD,iBAAeC,OAAK,MAAMC,eAAaC,cAAY;;EAGhF,MAAM,UAAS,QAAO;AACpB,WAAQ,KAAR;IACE,KAAK,IACH,QAAO,GAAG,QAAQM,aAAW;IAE/B,KAAK,KACH,QAAO,GAAGN,gBAAcM,aAAW;IAErC,KAAK,MACH,QAAO,GAAG,QAAQ,OAAON,gBAAcM,aAAW;IAEpD,KAAK,MACH,QAAO,GAAG,QAAQ,OAAOE,kBAAgBF,aAAW,WAAW;IAEjE,KAAK,KACH,QAAO,QAAQ,SAAS,KAAK;IAE/B,KAAK,OACH,QAAO,MAAM,QAAQ,SAAS,KAAK,GAAGE,gBAAc,IAAI,WAAWF,aAAW;IAEhF,KAAK,SACH,QAAO,MAAM,QAAQ,SAAS,KAAK,GAAGE,gBAAc,IAAI,WAAW,OAAOR,gBAAcM,aAAW;IAErG,KAAK,QACH,QAAO,MAAM,QAAQ,SAAS,KAAK,GAAGE,gBAAc,IAAIR,gBAAcM,aAAW;IAEnF,SAAS;KACP,MAAM,QAAQ,iBAAiB,KAAK,IAAI;AACxC,SAAI,CAAC,MAAO;KAEZ,MAAMO,WAAS,OAAO,MAAM,GAAG;AAC/B,SAAI,CAACA,SAAQ;AAEb,YAAOA,WAASb,gBAAc,MAAM;;;;EAK1C,MAAM,SAASL,QAAM,aAAa,OAAO,MAAM;EAC/C,IAAI,SAAS,OAAO,OAAO;AAE3B,MAAI,UAAU,KAAK,kBAAkB,MAAM;AACzC,aAAU,GAAGa,gBAAc;;AAG7B,SAAO;;AAGT,QAAO,UAAUZ;;;;;;CC1jCjB,MAAM;CACN,MAAM;CACN,MAAMkB;CACN,MAAM;CACN,MAAM,YAAW,QAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;CAwB7E,MAAMC,eAAa,MAAM,SAAS,cAAc,UAAU;AACxD,MAAI,MAAM,QAAQ,KAAK,EAAE;GACvB,MAAM,MAAM,KAAK,KAAI,UAASA,YAAU,OAAO,SAAS,YAAY,CAAC;GACrE,MAAM,gBAAe,QAAO;AAC1B,SAAK,MAAM,WAAW,KAAK;KACzB,MAAMC,UAAQ,QAAQ,IAAI;AAC1B,SAAIA,QAAO,QAAOA;;AAEpB,WAAO;;AAET,UAAO;;EAGT,MAAM,UAAU,SAAS,KAAK,IAAI,KAAK,UAAU,KAAK;AAEtD,MAAI,SAAS,MAAO,OAAO,SAAS,YAAY,CAAC,SAAU;AACzD,SAAM,IAAI,UAAU,4CAA4C;;EAGlE,MAAM,OAAO,WAAW,EAAE;EAC1B,MAAM,QAAQ,KAAK;EACnB,MAAM,QAAQ,UACVD,YAAU,UAAU,MAAM,QAAQ,GAClCA,YAAU,OAAO,MAAM,SAAS,OAAO,KAAK;EAEhD,MAAM,QAAQ,MAAM;AACpB,SAAO,MAAM;EAEb,IAAI,kBAAkB;AACtB,MAAI,KAAK,QAAQ;GACf,MAAM,aAAa;IAAE,GAAG;IAAS,QAAQ;IAAM,SAAS;IAAM,UAAU;IAAM;AAC9E,eAAYA,YAAU,KAAK,QAAQ,YAAY,YAAY;;EAG7D,MAAM,WAAW,OAAO,eAAe,UAAU;GAC/C,MAAM,EAAE,SAAS,OAAO,WAAWA,YAAU,KAAK,OAAO,OAAO,SAAS;IAAE;IAAM;IAAO,CAAC;GACzF,MAAM,SAAS;IAAE;IAAM;IAAO;IAAO;IAAO;IAAO;IAAQ;IAAO;IAAS;AAE3E,OAAI,OAAO,KAAK,aAAa,YAAY;AACvC,SAAK,SAAS,OAAO;;AAGvB,OAAI,YAAY,OAAO;AACrB,WAAO,UAAU;AACjB,WAAO,eAAe,SAAS;;AAGjC,OAAI,UAAU,MAAM,EAAE;AACpB,QAAI,OAAO,KAAK,aAAa,YAAY;AACvC,UAAK,SAAS,OAAO;;AAEvB,WAAO,UAAU;AACjB,WAAO,eAAe,SAAS;;AAGjC,OAAI,OAAO,KAAK,YAAY,YAAY;AACtC,SAAK,QAAQ,OAAO;;AAEtB,UAAO,eAAe,SAAS;;AAGjC,MAAI,aAAa;AACf,WAAQ,QAAQ;;AAGlB,SAAO;;;;;;;;;;;;;;;;;;AAoBT,aAAU,QAAQ,OAAO,OAAO,SAAS,EAAE,MAAM,UAAU,EAAE,KAAK;AAChE,MAAI,OAAO,UAAU,UAAU;AAC7B,SAAM,IAAI,UAAU,gCAAgC;;AAGtD,MAAI,UAAU,IAAI;AAChB,UAAO;IAAE,SAAS;IAAO,QAAQ;IAAI;;EAGvC,MAAM,OAAO,WAAW,EAAE;EAC1B,MAAM,SAAS,KAAK,WAAW,QAAQD,QAAM,iBAAiB;EAC9D,IAAI,QAAQ,UAAU;EACtB,IAAI,SAAU,SAAS,SAAU,OAAO,MAAM,GAAG;AAEjD,MAAI,UAAU,OAAO;AACnB,YAAS,SAAS,OAAO,MAAM,GAAG;AAClC,WAAQ,WAAW;;AAGrB,MAAI,UAAU,SAAS,KAAK,YAAY,MAAM;AAC5C,OAAI,KAAK,cAAc,QAAQ,KAAK,aAAa,MAAM;AACrD,YAAQC,YAAU,UAAU,OAAO,OAAO,SAAS,MAAM;UACpD;AACL,YAAQ,MAAM,KAAK,OAAO;;;AAI9B,SAAO;GAAE,SAAS,QAAQ,MAAM;GAAE;GAAO;GAAQ;;;;;;;;;;;;;;;AAiBnD,aAAU,aAAa,OAAO,MAAM,YAAY;EAC9C,MAAM,QAAQ,gBAAgB,SAAS,OAAOA,YAAU,OAAO,MAAM,QAAQ;AAC7E,SAAO,MAAM,KAAKD,QAAM,SAAS,MAAM,CAAC;;;;;;;;;;;;;;;;;;AAoB1C,aAAU,WAAW,KAAK,UAAU,YAAYC,YAAU,UAAU,QAAQ,CAAC,IAAI;;;;;;;;;;;;;;AAgBjF,aAAU,SAAS,SAAS,YAAY;AACtC,MAAI,MAAM,QAAQ,QAAQ,CAAE,QAAO,QAAQ,KAAI,MAAKA,YAAU,MAAM,GAAG,QAAQ,CAAC;AAChF,SAAO,MAAM,SAAS;GAAE,GAAG;GAAS,WAAW;GAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BzD,aAAU,QAAQ,OAAO,YAAY,KAAK,OAAO,QAAQ;;;;;;;;;;;;AAczD,aAAU,aAAa,OAAO,SAAS,eAAe,OAAO,cAAc,UAAU;AACnF,MAAI,iBAAiB,MAAM;AACzB,UAAO,MAAM;;EAGf,MAAM,OAAO,WAAW,EAAE;EAC1B,MAAM,UAAU,KAAK,WAAW,KAAK;EACrC,MAAM,SAAS,KAAK,WAAW,KAAK;EAEpC,IAAI,SAAS,GAAG,QAAQ,KAAK,MAAM,OAAO,GAAG;AAC7C,MAAI,SAAS,MAAM,YAAY,MAAM;AACnC,YAAS,OAAO,OAAO;;EAGzB,MAAM,QAAQA,YAAU,QAAQ,QAAQ,QAAQ;AAChD,MAAI,gBAAgB,MAAM;AACxB,SAAM,QAAQ;;AAGhB,SAAO;;;;;;;;;;;;;;;;;;;;AAsBT,aAAU,UAAU,OAAO,UAAU,EAAE,EAAE,eAAe,OAAO,cAAc,UAAU;AACrF,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,SAAM,IAAI,UAAU,8BAA8B;;EAGpD,IAAI,SAAS;GAAE,SAAS;GAAO,WAAW;GAAM;AAEhD,MAAI,QAAQ,cAAc,UAAU,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM;AACzE,UAAO,SAAS,MAAM,UAAU,OAAO,QAAQ;;AAGjD,MAAI,CAAC,OAAO,QAAQ;AAClB,YAAS,MAAM,OAAO,QAAQ;;AAGhC,SAAOA,YAAU,UAAU,QAAQ,SAAS,cAAc,YAAY;;;;;;;;;;;;;;;;;;AAoBxE,aAAU,WAAW,QAAQ,YAAY;AACvC,MAAI;GACF,MAAM,OAAO,WAAW,EAAE;AAC1B,UAAO,IAAI,OAAO,QAAQ,KAAK,UAAU,KAAK,SAAS,MAAM,IAAI;WAC1DE,OAAK;AACZ,OAAI,WAAW,QAAQ,UAAU,KAAM,OAAMA;AAC7C,UAAO;;;;;;;AASX,aAAU,YAAY;;;;AAMtB,QAAO,UAAUF;;;;;;CClVjB,MAAM;CACN,MAAM;CAEN,SAASG,YAAU,MAAM,SAAS,cAAc,OAAO;AAErD,MAAI,YAAY,QAAQ,YAAY,QAAQ,QAAQ,YAAY,YAAY;AAE1E,aAAU;IAAE,GAAG;IAAS,SAAS,MAAM,WAAW;IAAE;;AAGtD,SAAO,KAAK,MAAM,SAAS,YAAY;;AAGzC,QAAO,OAAOA,aAAW,KAAK;AAC9B,QAAO,UAAUA;;;;;;;;;;;;;;;;ACFjB,MAAa,YAAY,UAAsC,MAAc,QAAQ,KAAK,KAAwB;CAChH,MAAM,eAAe,MAAM,QAAQ,SAAS,GAAG,WAAW,CAAC,SAAS;AACpE,QAAO,GAAG,KAAK,cAA0B;EAAE;EAAK,KAAK;EAAM,WAAW;EAAM,CAAC;;;;;;;;;;;;;;;ACE/E,MAAa,qBAAqB,SAA4B,UAA6B,EAAE,KAAK;CAEhG,MAAMC,cAAwB,EAAE;CAChC,MAAMC,eAAyB,EAAE;AAEjC,MAAK,MAAM,SAAS,SAAS;AAE3B,MAAI,MAAM,WAAW,IAAI,EAAE;AACzB,gBAAa,KAAK,MAAM;AACxB;;EAGF,MAAM,WAAW,QAAQ,MAAM;AAC/B,MAAI,WAAW,SAAS,EAAE;AAExB,eAAY,KAAK,UAAU,SAAS,CAAC,QAAQ,OAAO,IAAI,CAAC;SACpD;AAEL,gBAAa,KAAK,MAAM;;;AAK5B,KAAI,QAAQ,SAAS,KAAK,YAAY,SAAS,GAAG;EAChD,MAAM,kBAAkB,QAAQ,KAAK,MAAM;GACzC,MAAM,MAAM,EAAE,WAAW,IAAI,GAAG,EAAE,MAAM,EAAE,GAAG;AAC7C,UAAO,UAAU,QAAQ,IAAI,CAAC,CAAC,QAAQ,OAAO,IAAI;IAClD;EACF,MAAM,2CAAuB,gBAAgB;EAC7C,MAAM,WAAW,YAAY,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;AAC1D,cAAY,SAAS;AACrB,cAAY,KAAK,GAAG,SAAS;;AAI/B,MAAK,MAAM,WAAW,SAAS;AAC7B,eAAa,KAAK,QAAQ,WAAW,IAAI,GAAG,UAAU,IAAI,UAAU;;CAItE,MAAM,cACJ,aAAa,SAAS,IAClB,SAAS,cAAc,QAAQ,KAAK,CAAC,CAAC,KAAK,UAAU;AAEnD,SAAO,UAAU,QAAQ,MAAM,CAAC,CAAC,QAAQ,OAAO,IAAI;GACpD,GACF,EAAE;CAER,MAAM,gBAAgB,CAAC,GAAG,aAAa,GAAG,YAAY;AAEtD,KAAI,cAAc,WAAW,GAAG;AAC9B,SAAO,IAAqC;GAC1C,MAAM;GACN,SAAS,0BAA0B,QAAQ,KAAK,KAAK;GACrD,OAAO,QAAQ,KAAK,KAAK;GAC1B,CAAC;;AAGJ,QAAO,GAAoC,cAAc;;;;;;;;ACqF3D,MAAa,gBAAgB;CAC3B,gBAAgB,OAAe,aAAoC;EACjE,MAAM;EACN,SAAS,WAAW,oBAAoB;EACxC;EACD;CAED,iBAAiB,MAAc,aAAoC;EACjE,MAAM;EACN,SAAS,WAAW,0BAA0B;EAC9C;EACD;CAED,gBAAgB,MAAc,SAAiB,WAAmC;EAChF,MAAM;EACN;EACA;EACA;EACD;CAED,mBAAmB,MAAc,SAAiB,OAAyB,WAAmC;EAC5G,MAAM;EACN;EACA;EACA;EACA;EACD;CAED,oBAAoB,UAAkB,SAAiB,WAAmC;EACxF,MAAM;EACN;EACA;EACA;EACD;CAED,sBAAsB,UAAkB,aAAoC;EAC1E,MAAM;EACN,SAAS,WAAW,yBAAyB;EAC7C;EACD;CAED,uBAAuB,MAAc,YAAmC;EACtE,MAAM;EACN,SAAS,2BAA2B,OAAO,SAAS,KAAK,OAAO,KAAK;EACrE;EACA;EACD;CAED,yBAAyB,UAAkB,YAAkC;EAC3E,MAAM;EACN,SAAS,4BAA4B,SAAS,QAAQ;EACtD;EACA;EACD;CAED,0BAA0B,WAA4C;EACpE,MAAM;EACN,SAAS,iCAAiC,MAAM,KAAK,MAAM;EAC3D;EACD;CAED,qBAAqB,UAAkB,cAAoC;EACzE,MAAM;EACN,SAAS,oBAAoB,SAAS,aAAa,SAAS;EAC5D;EACA;EACD;CAED,eAAe,MAAc,aAA8C;EACzE,MAAM;EACN,SAAS,4BAA4B,KAAK,YAAY,QAAQ,OAAO;EACrE;EACA;EACD;CAED,cAAc,SAAiB,SAAiB,WAAmC;EACjF,MAAM;EACN;EACA;EACA;EACD;CAED,iBAAiB,SAAiB,WAAoB,WAAmC;EACvF,MAAM;EACN;EACA;EACA;EACD;CAED,0BAA0B,UAAkB,SAAiB,SAAiB,WAAmC;EAC/G,MAAM;EACN;EACA;EACA;EACA;EACD;CAED,6BAA6B,WAAmB,YAAkC;EAChF,MAAM;EACN,SAAS,uCAAuC,UAAU,IAAI;EAC9D;EACA;EACD;CAED,0BAA0B,YAAoB,SAAiB,SAAiB,WAAmC;EACjH,MAAM;EACN;EACA;EACA;EACA;EACD;CAED,oBAAoB,SAAiB,SAAkB,WAAmC;EACxF,MAAM;EACN,SAAS,gCAAgC;EACzC;EACA;EACD;CAED,iBAAiB,aAAqB,iBAAuC;EAC3E,MAAM;EACN,SAAS,+BAA+B,YAAY,cAAc,YAAY;EAC9E;EACA;EACD;CACF;;;;AAKD,MAAa,cAAyB,UAA0C,IAAI,MAAM;;;;AAK1F,MAAa,kBAAkB,UAA0C;AACvE,QACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAO,MAAM,SAAS,YACtB,aAAa,SACb,OAAO,MAAM,YAAY;;;;;AAO7B,MAAa,sBAAsB,UAAgC;CACjE,MAAMC,QAAkB,EAAE;AAE1B,OAAM,KAAK,UAAU,MAAM,KAAK,KAAK,MAAM,UAAU;AAGrD,SAAQ,MAAM,MAAd;EACE,KAAK;AACH,SAAM,KAAK,YAAY,MAAM,QAAQ;AACrC;EACF,KAAK;EACL,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,OAAO;AACnC,OAAI,MAAM,SAAS,oBAAoB,MAAM,OAAO;AAClD,UAAM,KAAK,YAAY,MAAM,QAAQ;;AAEvC;EACF,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,OAAO;AACnC,OAAI,MAAM,UAAU,WAAW;AAC7B,UAAM,KAAK,YAAY,MAAM,QAAQ;;AAEvC;EACF,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,WAAW;AACvC;EACF,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,OAAO;AACnC,OAAI,MAAM,QAAQ;AAChB,UAAM,KAAK,aAAa,MAAM,SAAS;;AAEzC;EACF,KAAK;AACH,SAAM,KAAK,eAAe,MAAM,WAAW;AAC3C,SAAM,KAAK,aAAa,MAAM,SAAS;AACvC;EACF,KAAK;AACH,SAAM,KAAK,YAAY,MAAM,MAAM,KAAK,MAAM,GAAG;AACjD;EACF,KAAK;AACH,SAAM,KAAK,eAAe,MAAM,WAAW;AAC3C,SAAM,KAAK,eAAe,MAAM,WAAW;AAC3C;EACF,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,OAAO;AACnC,SAAM,KAAK,mBAAmB,MAAM,QAAQ,KAAK,SAAS,GAAG;AAC7D;EACF,KAAK;AACH,SAAM,KAAK,kBAAkB,MAAM,UAAU;AAC7C;EACF,KAAK;AACH,OAAI,MAAM,WAAW;AACnB,UAAM,KAAK,iBAAiB,MAAM,YAAY;;AAEhD;EACF,KAAK;AACH,SAAM,KAAK,WAAW,MAAM,WAAW;AACvC,SAAM,KAAK,eAAe,MAAM,UAAU;AAC1C;EACF,KAAK;AACH,SAAM,KAAK,iBAAiB,MAAM,YAAY;AAC9C,SAAM,KAAK,aAAa,MAAM,SAAS;AACvC;EACF,KAAK;AACH,SAAM,KAAK,QAAQ,MAAM,aAAa;AACtC,OAAI,MAAM,SAAS;AACjB,UAAM,KAAK,QAAQ,MAAM,UAAU;;AAErC;EACF,KAAK;AACH,OAAI,MAAM,SAAS;AACjB,UAAM,KAAK,cAAc,MAAM,UAAU;;AAE3C;EACF,KAAK;AACH,SAAM,KAAK,mBAAmB,MAAM,cAAc;AAClD,SAAM,KAAK,cAAc,MAAM,cAAc;AAC7C;;AAIJ,KAAI,WAAW,SAAS,MAAM,SAAS,CAAC,CAAC,iBAAiB,CAAC,SAAS,MAAM,KAAK,EAAE;AAC/E,QAAM,KAAK,gBAAgB,MAAM,QAAQ;;AAG3C,QAAO,MAAM,KAAK,KAAK;;;;;;AAOzB,MAAa,qBAAqB,OAAc,YAA4B;AAC1E,OAAM,IAAI,MAAM,wBAAwB,UAAU,OAAO,YAAY,GAAG,aAAa,KAAK,UAAU,MAAM,GAAG;;;;;;;;AC9Y/G,MAAMC,aAAwD;CAC5D,2BAA2B;CAC3B,2BAA2B;CAC3B,sBAAsB;CACtB,4BAA4B;CAC5B,kBAAkB;CAClB,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CACrB;;;;AAoBD,MAAa,gCAAgC,UAAwC;CACnF,MAAMC,OAAuB;EAC3B,MAAM,MAAM;EACZ,SAAS,MAAM;EACf,MAAM,WAAW,MAAM;EACvB,OAAO,WAAW,QAAQ,MAAM,QAAQ;EACzC;AAED,SAAQ,MAAM,MAAd;EACE,KAAK,4BACH,QAAO;GACL,GAAG;GACH,UAAU;IACR,YAAY,MAAM;IAClB,SAAS,MAAM,WAAW;IAC3B;GACF;EAEH,KAAK,6BACH,QAAO;GACL,GAAG;GACH,UAAU;IACR,YAAY,MAAM;IAClB,SAAS,MAAM;IAChB;GACF;EAEH,KAAK,uBACH,QAAO;GACL,GAAG;GACH,cAAc,CAAC,MAAM,UAAU,MAAM,SAAS;GAC/C;EAEH,KAAK,4BACH,QAAO;GACL,GAAG;GACH,cAAc,MAAM;GACrB;EAEH,KAAK;EACL,KAAK,iBACH,QAAO;GACL,GAAG;GACH,UAAU,EACR,YAAY,MAAM,MACnB;GACF;EAEH,KAAK,qBACH,QAAO;GACL,GAAG;GACH,UAAU,EACR,YAAY,MAAM,UACnB;GACF;EAEH,KAAK,qBACH,QAAO;GACL,GAAG;GACH,UAAU,EACR,YAAY,MAAM,MACnB;GACF;EAEH,QACE,QAAO;;;;;;;AAQb,MAAa,4BAA4B,UAAgC;CACvE,MAAM,YAAY,6BAA6B,MAAM;CACrD,MAAMC,QAAkB,EAAE;AAG1B,OAAM,KAAK,UAAU,UAAU,KAAK,KAAK,UAAU,UAAU;AAG7D,KAAI,UAAU,UAAU;AACtB,QAAM,KAAK,QAAQ,UAAU,SAAS,aAAa;AACnD,MAAI,UAAU,SAAS,SAAS;AAC9B,SAAM,KAAK,QAAQ,UAAU,SAAS,UAAU;;;AAKpD,KAAI,UAAU,MAAM;AAClB,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,WAAW,UAAU,OAAO;;AAIzC,KAAI,UAAU,gBAAgB,UAAU,aAAa,SAAS,GAAG;AAC/D,QAAM,KAAK,GAAG;AACd,QAAM,KAAK,mBAAmB;AAC9B,OAAK,MAAM,QAAQ,UAAU,cAAc;AACzC,SAAM,KAAK,SAAS,OAAO;;;AAI/B,QAAO,MAAM,KAAK,KAAK;;;;;;;;;;;;ACjHzB,IAAa,iBAAb,cAAoC,OAAe;CACjD,YAAY,AAASC,MAAc;AACjC,SAAO;EADY;;CAIrB,AAAU,eAAuB;AAC/B,SAAO,aAAa,KAAK,MAAM,QAAQ;;CAGzC,AAAU,gBAAiC;AACzC,SAAO,SAAS,KAAK,MAAM,QAAQ;;;;;;;;;;AAWvC,IAAa,iBAAb,cAAoC,OAAkB;CACpD,YAAY,AAASA,MAAc;AACjC,SAAO;EADY;;CAIrB,AAAU,eAA0B;EAClC,MAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,SAAO;GACL,SAAS,MAAM;GACf,MAAM,MAAM;GACZ,QAAQ,MAAM,QAAQ;GACvB;;CAGH,MAAgB,gBAAoC;EAClD,MAAM,QAAQ,MAAM,KAAK,KAAK,KAAK;AACnC,SAAO;GACL,SAAS,MAAM;GACf,MAAM,MAAM;GACZ,QAAQ,MAAM,QAAQ;GACvB;;;;;;;AAQL,IAAa,yBAAb,cAA4C,OAAsB;CAChE,YAAY,AAASA,MAAc;AACjC,SAAO;EADY;;CAIrB,AAAU,eAA8B;AACtC,MAAI;AACF,UAAO,aAAa,KAAK,MAAM,QAAQ;WAChC,OAAO;AACd,OAAK,MAAgC,SAAS,UAAU;AACtD,WAAO;;AAET,SAAM;;;CAIV,MAAgB,gBAAwC;AACtD,MAAI;AACF,UAAO,MAAM,SAAS,KAAK,MAAM,QAAQ;WAClC,OAAO;AACd,OAAK,MAAgC,SAAS,UAAU;AACtD,WAAO;;AAET,SAAM;;;;;;;;AASZ,IAAa,yBAAb,cAA4C,OAAyB;CACnE,YAAY,AAASA,MAAc;AACjC,SAAO;EADY;;CAIrB,AAAU,eAAiC;AACzC,MAAI;GACF,MAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,UAAO;IACL,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,QAAQ,MAAM,QAAQ;IACvB;WACM,OAAO;AACd,OAAK,MAAgC,SAAS,UAAU;AACtD,WAAO;;AAET,SAAM;;;CAIV,MAAgB,gBAA2C;AACzD,MAAI;GACF,MAAM,QAAQ,MAAM,KAAK,KAAK,KAAK;AACnC,UAAO;IACL,SAAS,MAAM;IACf,MAAM,MAAM;IACZ,QAAQ,MAAM,QAAQ;IACvB;WACM,OAAO;AACd,OAAK,MAAgC,SAAS,UAAU;AACtD,WAAO;;AAET,SAAM;;;;;;;;;;;;;;AAeZ,IAAa,0BAAb,cAA6C,OAAa;CACxD,YAAY,AAASC,SAA6B;AAChD,SAAO;EADY;;;;;CAOrB,AAAQ,UAAU,OAAuB;EACvC,MAAM,UAAU,WAAW,WAAW,KAAK,QAAQ;AACnD,MAAI,SAAS;GACX,MAAM,EAAE,UAAU,YAAY,iBAAiB,QAAQ,YAAY;GACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,cAAc,wBAAwB,UAAU,SAAS,SAAS,MAAM;;AAEhF,QAAM;;CAGR,AAAU,eAAqB;AAC7B,MAAI;GAEF,MAAM,YAAY,WAAW,0BAA0B,KAAK,QAAQ;GACpE,MAAM,SAAS,UAAU,MAAM;AAC/B,UAAO,CAAC,OAAO,MAAM;AAEnB,UAAM,IAAI,MAAM,0DAA0D;;WAErE,OAAO;AACd,QAAK,UAAU,MAAM;;;CAIzB,MAAgB,gBAA+B;AAC7C,MAAI;GACF,MAAM,YAAY,WAAW,0BAA0B,KAAK,QAAQ;GACpE,IAAI,SAAS,UAAU,MAAM;AAC7B,UAAO,CAAC,OAAO,MAAM;AAEnB,UAAM,OAAO;AACb,aAAS,UAAU,MAAM;;WAEpB,OAAO;AACd,QAAK,UAAU,MAAM;;;;;;;;AAS3B,MAAa,iBAAiB;CAC5B,GAAG;CAMH,WAAW,SAAiC,IAAI,eAAe,KAAK;CAMpE,OAAO,SAAiC,IAAI,eAAe,KAAK;CAMhE,mBAAmB,SAAyC,IAAI,uBAAuB,KAAK;CAM5F,eAAe,SAAyC,IAAI,uBAAuB,KAAK;CAMxF,kBAAkB,YAAyD,IAAI,wBAAwB,QAAQ;CAChH;;;;;;;;;;;;;;;;AC3MD,MAAM,8BAEH,SAA0B;AACzB,KAAI,SAAS,iBAAkB,QAAO;AACtC,KAAI,SAAS,yBAA0B,QAAO;AAC9C,KAAI,SAAS,yBAA0B,QAAO;AAC9C,OAAM,IAAI,MAAM,mBAAmB,OAAO;;;;;;;;;;;;;;;AAgB9C,MAAa,iBAAiB,YAAoB,sBAA4D;CAC5G,MAAMC,gBAAyC,EAAE;CAEjD,MAAMC,UAAsB;EAC1B,SAAS,sBAAsB;EAC/B,QAAQ,EAAE,SAAS,eAAe;EAClC,SAAS;EACT,WAAW,QAAQ,YAAY,KAAK;EACpC,YAAY;EACZ,QAAQ;EACR,YAAY;EACZ,GAAG;EACJ;AAGD,SAAQ,SAAS;AACjB,SAAQ,aAAa;AAErB,QAAO;;;;;;;;;;;;;AAcT,MAAa,kBACX,MACA,YACA,sBAC4B;CAC5B,MAAM,UAAU,cAAc,YAAY,kBAAkB;CAC5D,MAAM,UAAU,cAAc,QAAQ;AACtC,KAAI,OAAO,MAAM,EAAE,UAAU,YAAY,CAAC,CAAC,aAAa,QAAQ;AAGhE,QAAO,QAAQ,OAAO;;;;;AC9FxB,MAAM,iBAAiB,eAA+B;CACpD,MAAM,UAAU,WAAW,MAAM;AACjC,KAAI,CAAC,QAAQ,SAAS,KAAK,EAAE;AAC3B,SAAO;;CAGT,MAAM,QAAQ,QAAQ,MAAM,KAAK,CAAC,KAAK,SAAS,KAAK,SAAS,CAAC;CAC/D,MAAM,WAAW,MAAM,KAAK,MAAM,UAAW,UAAU,IAAI,OAAO,OAAO,OAAQ,CAAC,KAAK,KAAK;AAE5F,QAAO,UAAU,SAAS;;AAS5B,MAAM,aAAa,gBAAoE;CACrF,MAAM,QAAQ,IAAI,KAAuB;AAEzC,aAAY,SAAS,eAAe;EAClC,MAAM,QAAQ,WAAW,QAAQ,MAAM,IAAI;EAC3C,MAAM,iBAAiB,WAAW,WAAW,MAAM;AAEnD,MAAI,MAAM,WAAW,GAAG;GAEtB,MAAM,WAAW,MAAM;AACvB,OAAI,UAAU;AACZ,UAAM,IAAI,UAAU;KAClB,YAAY;KACZ,aAAa,WAAW;KACxB,UAAU,IAAI,KAAK;KACpB,CAAC;;SAEC;GAEL,MAAM,WAAW,MAAM;AACvB,OAAI,CAAC,SAAU;GAEf,IAAI,OAAO,MAAM,IAAI,SAAS;AAC9B,OAAI,CAAC,MAAM;AACT,WAAO,EAAE,UAAU,IAAI,KAAK,EAAE;AAC9B,UAAM,IAAI,UAAU,KAAK;;GAG3B,IAAI,UAAU;AACd,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;IACzC,MAAM,OAAO,MAAM;AACnB,QAAI,CAAC,KAAM;IAEX,IAAI,QAAQ,QAAQ,SAAS,IAAI,KAAK;AACtC,QAAI,CAAC,OAAO;AACV,aAAQ,EAAE,UAAU,IAAI,KAAK,EAAE;AAC/B,aAAQ,SAAS,IAAI,MAAM,MAAM;;AAEnC,cAAU;;GAGZ,MAAM,WAAW,MAAM,MAAM,SAAS;AACtC,OAAI,UAAU;AACZ,YAAQ,SAAS,IAAI,UAAU;KAC7B,YAAY;KACZ,aAAa,WAAW;KACxB,UAAU,IAAI,KAAK;KACpB,CAAC;;;GAGN;AAEF,QAAO;;;;;AAMT,MAAM,qBAAqB,SAA0B;AAEnD,QAAO,6BAA6B,KAAK,KAAK,IAAI,CAAC,eAAe,KAAK;;;;;AAMzE,MAAM,kBAAkB,SAA0B;CAChD,MAAM,WAAW,IAAI,IAAI;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AACF,QAAO,SAAS,IAAI,KAAK;;;;;;AAO3B,MAAM,mBAAmB,QAAwB;AAC/C,QAAO,kBAAkB,IAAI,GAAG,MAAM,IAAI,IAAI;;AAGhD,MAAM,kBAAkB,MAAgB,WAA2B;AACjE,KAAI,KAAK,cAAc,KAAK,SAAS,SAAS,KAAK,KAAK,aAAa;EAEnE,MAAM,OAAO,cAAc,KAAK,WAAW;AAC3C,SAAO,wBAAwB,KAAK,YAAY,WAAW,KAAK;;CAIlE,MAAM,YAAY,KAAK,OAAO,OAAO;CACrC,MAAM,UAAU,MAAM,KAAK,KAAK,SAAS,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW;EACxE,MAAM,QAAQ,eAAe,OAAO,SAAS,EAAE;EAC/C,MAAM,eAAe,gBAAgB,IAAI;AACzC,SAAO,GAAG,UAAU,IAAI,aAAa,IAAI,MAAM;GAC/C;AAEF,KAAI,QAAQ,WAAW,GAAG;AACxB,SAAO;;AAGT,QAAO,MAAM,QAAQ,KAAK,KAAK,CAAC,IAAI,UAAU;;AAGhD,MAAM,qBAAqB,eAAoD;CAC7E,MAAM,OAAO,UAAU,WAAW;CAClC,MAAMC,eAAyB,EAAE;CACjC,MAAMC,gBAA0B,EAAE;AAElC,MAAK,SAAS,MAAM,aAAa;AAC/B,MAAI,KAAK,SAAS,OAAO,GAAG;GAE1B,MAAM,gBAAgB,eAAe,MAAM,EAAE;AAC7C,gBAAa,KAAK,aAAa,SAAS,KAAK,cAAc,GAAG;AAC9D,iBAAc,KAAK,SAAS;aACnB,KAAK,cAAc,KAAK,aAAa;GAE9C,MAAM,OAAO,cAAc,KAAK,WAAW;AAC3C,gBAAa,KAAK,aAAa,SAAS,0BAA0B,KAAK,YAAY,WAAW,KAAK,IAAI;AACvG,iBAAc,KAAK,SAAS;;GAE9B;CAEF,MAAM,kBACJ,cAAc,SAAS,IACnB,iBAAiB,cAAc,KAAK,SAAS,WAAW,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,YAC5E;AAEN,KAAI,aAAa,WAAW,GAAG;AAC7B,SAAO;;AAGT,QAAO,GAAG,aAAa,KAAK,KAAK,CAAC,IAAI;;;;;;AAOxC,MAAM,0BAA0B,EAC9B,UACA,UACA,UACA,mBACA,oBAOwF;CACxF,MAAMC,cAAwB,EAAE;CAChC,MAAM,oBAAoB,IAAI,KAAa;CAC3C,MAAM,mBAAmB,IAAI,KAAa;CAG1C,MAAM,gBAAgB,IAAI,KAA6B;AAEvD,UAAS,QAAQ,SAAS,QAAQ;AAChC,MAAI,IAAI,YAAY;AAClB;;AAIF,MAAI,CAAC,IAAI,OAAO,WAAW,IAAI,EAAE;AAC/B,OAAI,CAAC,cAAe;GACpB,MAAM,gBAAgB,cAAc,QAAQ,IAAI,OAAO;AACvD,OAAI,CAAC,iBAAiB,CAAC,SAAS,IAAI,cAAc,IAAI,kBAAkB,kBAAmB;GAC3F,MAAMC,YAAU,cAAc,IAAI,cAAc,IAAI,EAAE;AACtD,aAAQ,KAAK,IAAI;AACjB,iBAAc,IAAI,eAAeA,UAAQ;AACzC;;EAGF,MAAM,eAAe,oCAAoC;GAAE;GAAU,WAAW,IAAI;GAAQ,YAAY;GAAU,CAAC;AACnH,MAAI,CAAC,cAAc;AACjB;;AAIF,MAAI,iBAAiB,mBAAmB;AACtC;;EAGF,MAAM,UAAU,cAAc,IAAI,aAAa,IAAI,EAAE;AACrD,UAAQ,KAAK,IAAI;AACjB,gBAAc,IAAI,cAAc,QAAQ;GACxC;AAGF,eAAc,SAAS,SAAS,eAAa;EAE3C,MAAM,kBAAkB,QAAQ,MAAM,QAAQ,IAAI,SAAS,YAAY;AAEvE,MAAI,iBAAiB;AAEnB,eAAY,KAAK,aAAa,gBAAgB,MAAM,mCAAmCC,WAAS,KAAK;AACrG,oBAAiB,IAAI,gBAAgB,MAAM;AAC3C,qBAAkB,IAAI,gBAAgB,MAAM;SACvC;GAEL,MAAM,YAAY,IAAI,KAAa;AAEnC,WAAQ,SAAS,QAAQ;AACvB,QAAI,IAAI,SAAS,WAAW,IAAI,SAAS,WAAW;AAClD,eAAU,IAAI,IAAI,MAAM;AACxB,uBAAkB,IAAI,IAAI,MAAM;;KAElC;AAEF,OAAI,UAAU,OAAO,GAAG;IACtB,MAAM,eAAe,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK;AAC5D,gBAAY,KAAK,eAAe,aAAa,qCAAqCA,WAAS,KAAK;;;GAGpG;AAEF,QAAO;EACL,SAAS,YAAY,SAAS,IAAI,GAAG,YAAY,KAAK,KAAK,KAAK;EAChE;EACA;EACD;;AAGH,MAAa,uBAAuB,EAClC,UACA,UACA,UACA,mBACA,oBAOY;CACZ,MAAM,EAAE,YAAY,uBAAuB;EAAE;EAAU;EAAU;EAAU;EAAmB;EAAe,CAAC;AAE9G,QAAO;EAAC,uBAAuB,SAAS;EAAmB;EAAS;EAAI,kBAAkB,SAAS,YAAY;EAAE;EAAM,CAAC,KACtH,KACD;;;;;ACzQH,MAAa,8BAA8B,EAAE,aAAyD,EAAE,KAAK;CAC3G,MAAM,UAAU,IAAI,KAA+B;CACnD,MAAM,WAAW,IAAI,KAAiC;CAEtD,MAAM,aAAa,UAAkB,YAA8B;AACjE,UAAQ,IAAI,UAAU,QAAQ;;;;;;CAOhC,MAAM,iBAAiB,cAAyC;EAC9D,MAAM;EACN;EACD;CAED,MAAM,cAAoD,aAAqB,YAA6B;EAC1G,MAAM,UAAU,SAAS;AACzB,aAAW,WAAW,SAAS,EAAE,aAAa,CAAC;AAE/C,WAAS,IAAI,aAAa,QAAQ;AAClC,SAAO;;;;;;CAOT,MAAM,kBAAkB,UAAkB,WAAwC,eAA4C;EAE5H,MAAM,SAAS,UAAU,IAAI,SAAS;AACtC,MAAI,QAAQ;AACV,UAAO;;EAGT,MAAMC,QAA2B,EAAE;EAGnC,MAAM,UAAU,QAAQ,IAAI,SAAS;AACrC,MAAI,CAAC,SAAS;AACZ,SAAM,cAAc,wBAAwB,UAAU,IAAI,6CAA6C,WAAW;;AAEpH,QAAM,KAAK;GAAE;GAAU,WAAW,SAAS;GAAE,CAAC;EAG9C,IAAIC;AACJ,SAAQ,QAAQ,MAAM,MAAM,SAAS,IAAK;AAExC,cAAW,IAAI,MAAM,SAAS;GAG9B,MAAMC,WACJ,MAAM,uBAAuB,YAAY,MAAM,UAAU,KAAK,MAAM,mBAAmB,GAAG,MAAM,UAAU,MAAM;AAGlH,SAAM,qBAAqB;AAE3B,OAAIA,SAAO,MAAM;AAEf,cAAU,IAAI,MAAM,UAAUA,SAAO,MAAM;AAC3C,eAAW,OAAO,MAAM,SAAS;AACjC,UAAM,KAAK;IAGX,MAAM,cAAc,MAAM,MAAM,SAAS;AACzC,QAAI,aAAa;AACf,iBAAY,qBAAqBA,SAAO;;UAErC;IAEL,MAAM,UAAUA,SAAO;AAEvB,QAAI,QAAQ,SAAS,UAAU;KAC7B,MAAM,UAAU,QAAQ;KAGxB,MAAM,YAAY,UAAU,IAAI,QAAQ;AACxC,SAAI,WAAW;AAEb,YAAM,qBAAqB;YACtB;AAEL,UAAI,WAAW,IAAI,QAAQ,EAAE;AAG3B,WAAI,UAAU;QACZ,MAAM,kBAAkB,SAAS,IAAI,MAAM,SAAS;QACpD,MAAM,iBAAiB,SAAS,IAAI,QAAQ;QAC5C,MAAM,gBAAgB,mBAAmB,gBAAgB,YAAY,SAAS;QAC9E,MAAM,eAAe,kBAAkB,eAAe,YAAY,SAAS;AAE3E,YAAI,CAAC,iBAAiB,CAAC,cAAc;AAEnC,eAAM,qBAAqB,EAAE;AAC7B;;;AAGJ,aAAM,cAAc,kBAAkB,iCAAiC,WAAW,SAAS;;MAI7F,MAAM,aAAa,QAAQ,IAAI,QAAQ;AACvC,UAAI,CAAC,YAAY;AACf,aAAM,cAAc,wBAAwB,SAAS,IAAI,6CAA6C,UAAU;;AAIlH,YAAM,KAAK;OACT,UAAU;OACV,WAAW,YAAY;OACxB,CAAC;;;;;EAMV,MAAM,SAAS,UAAU,IAAI,SAAS;AACtC,MAAI,CAAC,QAAQ;AACX,SAAM,cAAc,wBAAwB,UAAU,IAAI,6BAA6B,WAAW;;AAEpG,SAAO;;;;;CAMT,MAAM,uBAAoE;EACxE,MAAMC,YAAyD,EAAE;AACjE,OAAK,MAAM,CAAC,aAAa,YAAY,SAAS,SAAS,EAAE;AACvD,OAAI,mBAAmB,UAAU;AAC/B,cAAU,eAAe;KAAE,MAAM;KAAY;KAAS;cAC7C,mBAAmB,WAAW;AACvC,cAAU,eAAe;KAAE,MAAM;KAAa;KAAS;cAC9C,mBAAmB,WAAW;AACvC,cAAU,eAAe;KAAE,MAAM;KAAU;KAAS;;;AAGxD,SAAO;;;;;;;CAQT,UAAU,sBAA6C;EACrD,MAAM,UAAU,MAAM,KAAK,SAAS,QAAQ,GAAG,YAAY,IAAI,wBAAwB,QAAQ,CAAC;AAChG,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAO,IAAI,eAAe,QAAQ,CAAC,KAAK;;;;;;;CAQ5C,MAAM,iBAA8D;EAClE,MAAM,YAAY,IAAI,KAA6B;EACnD,MAAM,aAAa,IAAI,KAAa;AAGpC,OAAK,MAAM,YAAY,QAAQ,MAAM,EAAE;AACrC,OAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC5B,mBAAe,UAAU,WAAW,WAAW;;;EAKnD,MAAM,YAAY,qBAAqB;EACvC,MAAM,SAAS,UAAU,UAAU,qBAAqB,CAAC;AAEzD,MAAI,OAAO,OAAO,EAAE;AAClB,SAAM,cAAc,kBAAkB,8BAA8B,OAAO,MAAM,WAAW,oBAAoB;;AAGlH,SAAO,gBAAgB;;;;;;CAOzB,MAAM,gBAAgB,YAAkE;EACtF,MAAM,YAAY,IAAI,KAA6B;EACnD,MAAM,aAAa,IAAI,KAAa;AAGpC,OAAK,MAAM,YAAY,QAAQ,MAAM,EAAE;AACrC,OAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC5B,mBAAe,UAAU,WAAW,WAAW;;;EAKnD,MAAM,YAAY,sBAAsB;EACxC,MAAM,SAAS,MAAM,UAAU,UAAU,qBAAqB,CAAC;AAE/D,MAAI,OAAO,OAAO,EAAE;AAClB,SAAM,cAAc,kBAAkB,8BAA8B,OAAO,MAAM,WAAW,yBAAyB;;AAGvH,SAAO,gBAAgB;;;;;;;CAQzB,MAAM,wBAA8B;EAClC,MAAM,YAAY,IAAI,KAA6B;EACnD,MAAM,aAAa,IAAI,KAAa;AAEpC,OAAK,MAAM,YAAY,QAAQ,MAAM,EAAE;AACrC,OAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC5B,mBAAe,UAAU,WAAW,WAAW;;;;;;;;CASrD,MAAM,oBAA0C;AAC9C,SAAO,MAAM,KAAK,SAAS,QAAQ,CAAC;;CAGtC,MAAM,cAAc;AAClB,UAAQ,OAAO;AACf,WAAS,OAAO;;AAGlB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;ACnQH,IAAIC;AACJ,MAAM,yBAAwC;AAC5C,KAAI,gBAAgB;AAClB,SAAO;;AAET,KAAI,OAAO,OAAO,KAAK,QAAQ,UAAU;AACvC,QAAM,IAAI,MAAM,qFAAqF;;CAEvG,MAAM,eAAe,cAAc,OAAO,KAAK,IAAI;CACnD,MAAMC,gBAA+B,aAAa,YAAY,CAAC;AAC/D,kBAAiB;AACjB,QAAO;;AAGT,MAAM,aAAa,EAAE,UAAU,iBAAyF;AACtH,KAAI;EACF,MAAM,SAAS,kBAAkB,CAAC,YAAY;GAC5C,UAAU,GAAG,SAAS;GACtB,KAAK;IACH,QAAQ;KACN,QAAQ;KACR,KAAK;KACN;IACD,QAAQ;IACT;GACD,QAAQ,EACN,MAAM,OACP;GACD,YAAY;GACZ,QAAQ;GACT,CAAC;AAEF,SAAO,GAAG,OAAO,KAAK;UACf,OAAO;EACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAO,IAAI;GACT,MAAM;GACI;GACV,SAAS;GACT,SAAS,6BAA6B;GACvC,CAAC;;;;;;;;AASN,SAAS,yBAAyB,YAA4B;CAC5D,MAAM,MAAM,QAAQ,WAAW;AAG/B,KAAI,QAAQ,QAAQ;AAClB,SAAO,QAAQ,QAAQ,KAAK,EAAE,WAAW;;AAI3C,KAAI,QAAQ,OAAO;EACjB,MAAM,WAAW,WAAW,MAAM,GAAG,CAAC,EAAE;EACxC,MAAM,UAAU,GAAG,SAAS;EAC5B,MAAM,kBAAkB,QAAQ,QAAQ,KAAK,EAAE,QAAQ;AAGvD,MAAI,WAAW,gBAAgB,EAAE;AAC/B,UAAO;;AAIT,SAAO,QAAQ,QAAQ,KAAK,EAAE,WAAW;;AAI3C,QAAO,QAAQ,QAAQ,KAAK,EAAE,WAAW;;;;;;;AAQ3C,IAAIC,YAAqB;AACzB,IAAIC,mBAAkC;;;;;;AAOtC,MAAa,wBAA8B;AACzC,aAAY;AACZ,oBAAmB;;AAGrB,SAAS,2BAA2B,YAAsC;AAExE,KAAI,qBAAqB,cAAc,cAAc,MAAM;AACzD,SAAO,EAAE,KAAK,WAAW;;CAG3B,IAAIC;AACJ,KAAI;AACF,gBAAc,aAAa,YAAY,QAAQ;UACxC,OAAO;EACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,QAAM,cAAc,wBAAwB,YAAY,IAAI,yCAAyC,WAAW,MAAM;;AAGxH,KAAI;EAEF,MAAM,UAAU,cAAc,WAAW;AACzC,MAAI,OAAO,aAAa,EAAE,UAAU,YAAY,CAAC,CAAC,gBAAgB,QAAQ;EAG1E,MAAM,eAAe,QAAQ,OAAO;EACpC,MAAM,cAAc,aAAa,OAAO,aAAa;AAErD,MAAI,gBAAgB,WAAW;AAC7B,SAAM,cAAc,wBAClB,YACA,IACA,mDAAmD,aACpD;;AAIH,cAAY;AACZ,qBAAmB;AAEnB,SAAO,EAAE,KAAK,WAAW;UAClB,OAAO;AACd,MAAI,eAAe,MAAM,EAAE;AACzB,SAAM;;EAER,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,QAAM,cAAc,wBAAwB,YAAY,IAAI,2CAA2C,WAAW,MAAM;;;;;;;AAQ5H,MAAa,8BAA8B,WAAW,EACpD,UACA,aACA,mBACA,iBACgF;AAChF,MAAK,MAAM,YAAY,aAAa;EAClC,MAAM,WAAW,SAAS,IAAI,SAAS;AACvC,MAAI,CAAC,UAAU;AACb;;EAIF,MAAM,aAAa,oBAAoB;GAAE;GAAU;GAAU;GAAU;GAAmB;GAAe,CAAC;AAG1G,MAAI,QAAQ,IAAI,2BAA2B;AACzC,WAAQ,IAAI,qCAAqC;AACjD,WAAQ,IAAI,aAAa,SAAS;AAClC,WAAQ,IACN,gBACA,SAAS,YAAY,KAAK,MAAM,EAAE,QAAQ,CAC3C;AACD,WAAQ,IAAI,kBAAkB,WAAW;AACzC,WAAQ,IAAI,oCAAoC;;EAIlD,MAAM,uBAAuB,UAAU;GAAE;GAAU;GAAY,CAAC;AAChE,MAAI,qBAAqB,OAAO,EAAE;AAChC,SAAM,qBAAqB;;EAE7B,MAAM,iBAAiB,qBAAqB;EAE5C,MAAM,SAAS,IAAI,OAAO,eAAe;EAEzC,MAAM,OAAO,WAAW,OAAO;AAC/B,OAAK,OAAO,eAAe;EAC3B,MAAM,cAAc,KAAK,OAAO,MAAM;EACtC,MAAM,eAAe,SAAS,YAAY,KAAK,eAAe,WAAW,YAAY;EAKrF,MAAM,mBAAmB,CAAC,CAAC,QAAQ,IAAI;AACvC,QAAM;GACJ;GACA;GACA,YAAY,mBAAmB,aAAa;GAC5C,gBAAgB;GAChB;GACA;GACD;;;;;;;AAcL,MAAM,mCAAmC,EACvC,qBACA,mBACA,eACsC;CACtC,MAAM,WAAW,2BAA2B,EAAE,UAAU,CAAC;CACzD,MAAM,gBAAgB,yBAAyB,kBAAkB;CAEjE,MAAM,EAAE,QAAQ,2BAA2B,cAAc;CAEzD,MAAM,YAAY,cAAc;EAAE;EAAK;EAAU,CAAC;AAElD,MAAK,MAAM,EAAE,QAAQ,cAAc,oBAAoB,QAAQ,EAAE;AAC/D,MAAI;AACF,UAAO,aAAa,UAAU;WACvB,OAAO;AACd,OAAI,eAAe,MAAM,EAAE;AACzB,UAAM;;GAER,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAM,cAAc,wBAAwB,UAAU,IAAI,yCAAyC,WAAW,MAAM;;;AAIxH,QAAO;;;;;;AAOT,MAAa,+BAA+B,UAA4C;CACtF,MAAM,WAAW,gCAAgC,MAAM;CACvD,MAAM,WAAW,SAAS,UAAU;AACpC,UAAS,OAAO;AAChB,QAAO;;;;;;AAOT,MAAa,mCAAmC,OAAO,UAA4C;CACjG,MAAM,WAAW,gCAAgC,MAAM;CACvD,MAAM,WAAW,MAAM,SAAS,eAAe;AAC/C,UAAS,OAAO;AAChB,QAAO;;;;;;;;;;;;AAaT,UAAiB,+BACf,OAC8D;CAC9D,MAAM,WAAW,gCAAgC,MAAM;AAGvD,UAAS,iBAAiB;CAG1B,MAAM,WAAW,SAAS,aAAa;CACvC,MAAM,UAAU,SAAS,KAAK,YAAY,IAAI,wBAAwB,QAAQ,CAAC;AAC/E,KAAI,QAAQ,SAAS,GAAG;AACtB,SAAO,IAAI,eAAe,QAAQ,CAAC,KAAK;;CAG1C,MAAM,YAAY,SAAS,gBAAgB;AAC3C,UAAS,OAAO;AAChB,QAAO;;;;;;;;;;;;;;AC5RT,MAAM,8BAA8B,8BAAmE;AACrG,QAAO,6BAA6B,SAAiB,QAAQ,SAAiB,KAAK,aAAa;;;;;;AAOlG,MAAM,qCAA8C;AAClD,QAAO,QAAQ,aAAa;;;;;;AAO9B,MAAa,qCAAqC,WAA+D;CAC/G,MAAM,uBAAuB,2BAA2B,8BAA8B,CAAC;CAEvF,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW,QAAQ,KAAK;AAE9B,MAAI;AACF,UAAO,qBAAqB,aAAa,SAAS,CAAC;UAC7C;AAEN,UAAO,qBAAqB,SAAS;;;CAKzC,MAAM,oBAAoB,QAAQ,OAAO,QAAQ,WAAW;CAC5D,MAAM,6BAA6B,YAAY,kBAAkB;CAGjE,MAAM,mBAAmB,IAAI,IAAI,OAAO,qBAAqB,KAAK,UAAU,MAAM,CAAC;CAInF,MAAM,uBAAuB,IAAI,KAAa;AAC9C,MAAK,MAAM,gBAAgB,OAAO,OAAO,OAAO,QAAQ,EAAE;AACxD,uBAAqB,IAAI,YAAY,aAAa,OAAO,QAAQ,CAAC;AAClE,MAAI,aAAa,OAAO,SAAS;AAC/B,wBAAqB,IAAI,YAAY,aAAa,OAAO,QAAQ,CAAC;;;AAItE,QAAO;EACL,sBAAsB,EAAE,eAAqC;AAC3D,UAAO,YAAY,SAAS,KAAK;;EAEnC,iCAAiC,EAAE,UAAU,gBAAyD;AAEpG,OAAI,iBAAiB,IAAI,UAAU,EAAE;AACnC,WAAO;;AAKT,OAAI,CAAC,UAAU,WAAW,IAAI,EAAE;AAC9B,WAAO;;GAIT,MAAM,WAAW,wCAAwC;IAAE;IAAU;IAAW,CAAC;AACjF,OAAI,CAAC,UAAU;AACb,WAAO;;AAGT,UAAO,YAAY,SAAS,KAAK;;EAEnC,uBAAuB,EAAE,eAAqC;GAC5D,MAAM,YAAY,YAAY,SAAS;AACvC,UAAO,cAAc,8BAA8B,qBAAqB,IAAI,UAAU;;EAEzF;;;;;;;;;;;;AChFH,MAAa,wBAAwB,gBAAiE;CACpG,MAAM,aAAa,oBAAoB,YAAY;AAEnD,KAAI,CAAC,WAAW,SAAS;AACvB,SAAO,IAAI,cAAc,qBAAqB,aAAa,WAAW,OAAO,CAAC;;AAGhF,QAAO,GAAG,iBAAiB,YAAY,CAAC;;;;;;;;;AAU1C,MAAa,uBAAuB,gBAAsD;AACxF,QAAO,qBAAqB,YAAY,CAAC,KAAK,EAAE,eAAe,SAAS;;;;;AC7B1E,MAAM,sBAAsB,aAA8B;CACxD,MAAM,OAAO,WAAW,OAAO;AAC/B,MAAK,OAAO,KAAK,UAAU,SAAS,CAAC;AACrC,QAAO,KAAK,OAAO,MAAM;;AAG3B,MAAM,yBAAyB,UAAkB,SAAiB,aAAmC;CACnG,MAAM;CACN;CACA;CACA;CACD;AAOD,MAAa,aAAa,EAAE,UAAU,eAA0F;CAC9H,MAAM,WAAW,IAAI,KAAqC;AAE1D,MAAK,MAAM,YAAY,SAAS,QAAQ,EAAE;AACxC,OAAK,MAAM,cAAc,SAAS,aAAa;GAE7C,MAAM,eAAe,qBAAqB,WAAW,YAAY;AACjE,OAAI,aAAa,OAAO,EAAE;AACxB,WAAO,IAAI,aAAa,MAAM;;GAEhC,MAAM,EAAE,UAAU,YAAY,aAAa;GAE3C,MAAM,UAAU,SAAS,WAAW;AACpC,OAAI,CAAC,SAAS;IACZ,MAAM,eAAe,OAAO,KAAK,SAAS,CAAC,KAAK,KAAK;IACrD,MAAM,UAAU,yCAAyC,WAAW,YAAY,eAAe;AAC/F,WAAO,IAAI,sBAAsB,UAAU,SAAS,QAAQ,CAAC;;AAI/D,OAAI,QAAQ,SAAS,UAAU;AAC7B;;AAGF,OAAI,SAAS,IAAI,WAAW,YAAY,EAAE;AACxC,WAAO,IAAI,sBAAsB,UAAU,SAAS,8BAA8B,CAAC;;GAIrF,MAAMC,WAA2C;IAC/C,YAAY;IACZ,aAAa;IACd;AAED,OAAI,QAAQ,SAAS,YAAY;IAC/B,MAAM,WAAW;KACf,UAAU,QAAQ,QAAQ;KAC1B,KAAK,QAAQ,QAAQ;KACrB,aAAa,QAAQ,QAAQ;KAC9B;AACD,aAAS,IAAI,WAAW,aAAa;KACnC,IAAI,WAAW;KACf,MAAM;KACN;KACA,UAAU;MAAE,GAAG;MAAU,aAAa,mBAAmB,SAAS;MAAE;KACrE,CAAC;AACF;;AAGF,OAAI,QAAQ,SAAS,aAAa;IAChC,MAAM,WAAW;KACf,eAAe,QAAQ,QAAQ;KAC/B,eAAe,QAAQ,QAAQ;KAC/B,aAAa,QAAQ,QAAQ;KAC7B,UAAU,QAAQ,QAAQ;KAC1B,eAAe,QAAQ,QAAQ;KAC/B,UAAU,QAAQ,QAAQ;KAC3B;AACD,aAAS,IAAI,WAAW,aAAa;KACnC,IAAI,WAAW;KACf,MAAM;KACN;KACA,UAAU;MAAE,GAAG;MAAU,aAAa,mBAAmB,SAAS;MAAE;KACrE,CAAC;AACF;;AAGF,UAAO,IAAI,sBAAsB,UAAU,SAAS,wBAAwB,CAAC;;;AAIjF,QAAO,GAAG,SAAS;;;;;AC7FrB,MAAa,eAAe,EAAE,eAAmF;CAC/G,MAAM,iBAAiB,IAAI,KAAa;AAExC,MAAK,MAAM,CAAC,aAAa,EAAE,MAAM,cAAc,OAAO,QAAQ,SAAS,EAAE;AACvE,MAAI,SAAS,aAAa;AACxB;;AAGF,MAAI,eAAe,IAAI,QAAQ,cAAc,EAAE;GAE7C,MAAM,iBAAiB,oBAAoB,YAAY;AACvD,OAAI,eAAe,OAAO,EAAE;AAC1B,WAAO,IAAI,eAAe,MAAM;;GAGlC,MAAM,UAAU,CAAC,eAAe,MAAM;AACtC,UAAO,IAAI;IACT,MAAM;IACN,SAAS,4BAA4B,QAAQ;IAC7C,MAAM,QAAQ;IACd;IACD,CAAC;;AAGJ,iBAAe,IAAI,QAAQ,cAAc;;AAG3C,QAAO,GAAG,EAAE,CAAC;;;;;AClBf,MAAa,iBAAiB,EAC5B,UACA,UACA,OAAO,YACwD;CAC/D,MAAM,eAAe,YAAY,EAAE,UAAU,CAAC;AAC9C,KAAI,aAAa,OAAO,EAAE;AACxB,SAAO,IAAI,aAAa,MAAM;;CAGhC,MAAM,WAAW,aAAa;CAE9B,MAAM,oBAAoB,UAAU;EAAE;EAAU;EAAU,CAAC;AAC3D,KAAI,kBAAkB,OAAO,EAAE;AAC7B,SAAO,IAAI,kBAAkB,MAAM;;AAGrC,QAAO,GAAG;EACR,UAAU,OAAO,YAAY,kBAAkB,MAAM,SAAS,CAAC;EAC/D,QAAQ;GACN,YAAY;GACZ;GACA,OAAO;GACR;EACF,CAA2B;;;;;;;;ACpB9B,MAAa,gBAAgB,UAAyC;AACpE,QAAO,MAAM,KAAK,UAAU,MAAM,YAAY,CAAC,KAAK,IAAI;;;;;AAM1D,MAAa,gCAER;CACH,MAAM,qBAAqB,IAAI,KAAqB;AAEpD,QAAO,EACL,kBAAkB,KAAqB;EACrC,MAAM,UAAU,mBAAmB,IAAI,IAAI,IAAI;AAC/C,qBAAmB,IAAI,KAAK,UAAU,EAAE;AACxC,SAAO;IAEV;;;;;AAMH,MAAa,0BAER;CACH,MAAM,YAAY,IAAI,KAAa;AAEnC,QAAO,EACL,iBAAiB,UAA0B;EACzC,IAAI,OAAO;EACX,IAAI,SAAS;AACb,SAAO,UAAU,IAAI,KAAK,EAAE;AAC1B;AACA,UAAO,GAAG,SAAS,GAAG;;AAExB,YAAU,IAAI,KAAK;AACnB,SAAO;IAEV;;;;;;AAOH,MAAa,2BACX,cACwB;CACxB,MAAM,iBAAiB,IAAI,KAAqB;AAChD,WAAQ,SAAS,QAAQ;AACvB,MAAI,IAAI,SAAS,WAAW,IAAI,SAAS,CAAC,IAAI,YAAY;AACxD,kBAAe,IAAI,IAAI,OAAO,IAAI,SAAS;;GAE7C;AACF,QAAO;;;;;;;;;ACnCT,MAAMC,oBAAkB,aAAmC;CACzD,MAAMC,UAA0B,EAAE;CAElC,MAAM,UAAU,gBAAmC;EACjD,MAAM,SAAS,YAAY,OAAO;AAElC,cAAY,YAAY,SAAS,cAAmB;AAClD,OAAI,UAAU,SAAS,mBAAmB;AACxC,YAAQ,KAAK;KACX;KACA,OAAO,UAAU,MAAM;KACvB,MAAM;KACN,YAAY,QAAQ,UAAU,WAAW;KAC1C,CAAC;AACF;;AAEF,OAAI,UAAU,SAAS,4BAA4B;AACjD,YAAQ,KAAK;KACX;KACA,OAAO,UAAU,MAAM;KACvB,MAAM;KACN,YAAY;KACb,CAAC;AACF;;AAEF,OAAI,UAAU,SAAS,0BAA0B;AAC/C,YAAQ,KAAK;KACX;KACA,OAAO,UAAU,MAAM;KACvB,MAAM;KACN,YAAY;KACb,CAAC;;IAEJ;;AAGJ,UAAO,KAAK,SAAS,SAAS;AAC5B,MAAI,KAAK,SAAS,qBAAqB;AACrC,UAAO,KAAK;AACZ;;AAGF,MACE,iBAAiB,QACjB,KAAK,eACL,UAAU,KAAK,eAEd,KAAK,YAAoB,SAAS,qBACnC;AAEA,UAAO,KAAK,YAAwC;;GAEtD;AAEF,QAAO;;AAGT,MAAMC,oBAAkB,aAAmC;CACzD,MAAMC,YAA0B,EAAE;CAGlC,MAAM,UAAU,gBAAqB;AACnC,MAAI,YAAY,SAAS,qBAAqB;AAC5C,OAAI,YAAY,YAAY,SAAS,uBAAuB;AAE1D,gBAAY,YAAY,aAAa,SAAS,SAAc;AAC1D,SAAI,KAAK,GAAG,SAAS,cAAc;AACjC,gBAAQ,KAAK;OACX,MAAM;OACN,UAAU,KAAK,GAAG;OAClB,OAAO,KAAK,GAAG;OACf,YAAY;OACb,CAAC;;MAEJ;;AAEJ,OAAI,YAAY,YAAY,SAAS,uBAAuB;IAC1D,MAAM,QAAQ,YAAY,YAAY;AACtC,QAAI,OAAO;AACT,eAAQ,KAAK;MACX,MAAM;MACN,UAAU,MAAM;MAChB,OAAO,MAAM;MACb,YAAY;MACb,CAAC;;;AAGN;;AAGF,MAAI,YAAY,SAAS,0BAA0B;GACjD,MAAM,SAAS,YAAY,QAAQ;AAEnC,eAAY,YAAY,SAAS,cAAmB;AAClD,QAAI,UAAU,SAAS,mBAAmB;AACxC;;IAEF,MAAM,WAAW,UAAU,WAAW,UAAU,SAAS,QAAQ,UAAU,KAAK;IAChF,MAAM,QAAQ,UAAU,KAAK;AAC7B,QAAI,QAAQ;AACV,eAAQ,KAAK;MACX,MAAM;MACN;MACA;MACA;MACA,YAAY,QAAQ,UAAU,WAAW;MAC1C,CAAC;AACF;;AAEF,cAAQ,KAAK;KACX,MAAM;KACN;KACA;KACA,YAAY,QAAQ,UAAU,WAAW;KAC1C,CAAC;KACF;AACF;;AAGF,MAAI,YAAY,SAAS,wBAAwB;AAC/C,aAAQ,KAAK;IACX,MAAM;IACN,UAAU;IACV,QAAQ,YAAY,OAAO;IAC3B,YAAY;IACb,CAAC;AACF;;AAGF,MAAI,YAAY,SAAS,8BAA8B,YAAY,SAAS,2BAA2B;AACrG,aAAQ,KAAK;IACX,MAAM;IACN,UAAU;IACV,OAAO;IACP,YAAY;IACb,CAAC;;;AAIN,UAAO,KAAK,SAAS,SAAS;AAC5B,MACE,KAAK,SAAS,uBACd,KAAK,SAAS,4BACd,KAAK,SAAS,0BACd,KAAK,SAAS,8BACd,KAAK,SAAS,2BACd;AACA,UAAO,KAAK;AACZ;;AAGF,MAAI,iBAAiB,QAAQ,KAAK,aAAa;GAE7C,MAAM,cAAc,KAAK;AACzB,OACE,YAAY,SAAS,uBACrB,YAAY,SAAS,4BACrB,YAAY,SAAS,0BACrB,YAAY,SAAS,8BACrB,YAAY,SAAS,2BACrB;AAEA,WAAO,YAAmB;;;GAG9B;AAEF,QAAOC;;AAGT,MAAM,yBAAyB,UAAmB,WAA6D;CAC7G,MAAM,cAAc,IAAI,KAAa;AACrC,UAAO,KAAK,SAAS,SAAS;EAC5B,MAAM,cACJ,KAAK,SAAS,sBACV,OAEA,iBAAiB,QAAQ,KAAK,eAAgB,KAAK,YAAoB,SAAS,sBAE7E,KAAK,cACN;AACR,MAAI,CAAC,aAAa;AAChB;;AAEF,MAAI,CAAC,OAAO,+BAA+B;GAAE,UAAUC,SAAO;GAAY,WAAW,YAAY,OAAO;GAAO,CAAC,EAAE;AAChH;;AAGF,cAAY,YAAY,SAAS,cAAmB;AAClD,OAAI,UAAU,SAAS,mBAAmB;IACxC,MAAM,WAAW,UAAU,WAAW,UAAU,SAAS,QAAQ,UAAU,MAAM;AAEjF,QAAI,aAAa,SAAS,CAAC,UAAU,UAAU;AAC7C,iBAAY,IAAI,UAAU,MAAM,MAAM;;;IAG1C;GACF;AACF,QAAO;;AAGT,MAAM,aAAa,aAAkC,SAAkC;CACrF,MAAM,SAAS,KAAK;AACpB,KAAI,OAAO,SAAS,oBAAoB;AACtC,SAAO;;AAGT,KAAI,OAAO,OAAO,SAAS,cAAc;AACvC,SAAO;;AAGT,KAAI,CAAC,YAAY,IAAI,OAAO,OAAO,MAAM,EAAE;AACzC,SAAO;;AAGT,KAAI,OAAO,SAAS,SAAS,cAAc;AACzC,SAAO;;CAGT,MAAM,WAAW,KAAK,UAAU;AAChC,KAAI,CAAC,UAAU,cAAc,SAAS,WAAW,SAAS,2BAA2B;AACnF,SAAO;;AAGT,QAAO;;;;;;AAQT,MAAMC,wBAAsB,aAAkC,SAAqC;AACjG,KAAI,CAAC,QAAQ,KAAK,SAAS,kBAAkB;AAC3C,SAAO;;AAIT,KAAI,UAAU,aAAa,KAAK,EAAE;AAChC,SAAO;;CAIT,MAAM,SAAS,KAAK;AACpB,KAAI,OAAO,SAAS,oBAAoB;AACtC,SAAO;;AAKT,QAAOA,qBAAmB,aAAa,OAAO,OAAO;;AAGvD,MAAMC,2BAAyB,EAC7B,kBACA,gBACA,SAAS,UACT,oBACA,QACA,cAWG;CAEH,MAAMC,qBAAmB,aAAiC;AACxD,MAAI,CAAC,UAAU;AACb,UAAO;;AAET,MAAI,SAAS,SAAS,cAAc;AAClC,UAAO,SAAS;;AAElB,MAAI,SAAS,SAAS,mBAAmB,SAAS,SAAS,kBAAkB;AAC3E,UAAO,SAAS;;AAElB,SAAO;;CAWT,MAAMC,UAA+B,EAAE;CACvC,MAAMC,eAAiC,EAAE;CAGzC,MAAM,iBAAiB,wBAAwBN,UAAQ;CAGvD,MAAM,UAAU,uBAAuB;EACrC,UAAUC,SAAO;EACjB;EACA,gBAAgB,cAAc,eAAe,IAAI,UAAU;EAC5D,CAAC;CAIF,MAAM,oBAAoB,IAAI,KAAqB;CACnD,MAAM,oBAAoB,SAAyB;EACjD,MAAM,QAAQ,kBAAkB,IAAI,KAAK,IAAI;AAC7C,oBAAkB,IAAI,MAAM,QAAQ,EAAE;AACtC,SAAO,IAAI,KAAK,GAAG;;CAIrB,MAAM,aACJ,OACA,SACA,MACA,WACA,aACM;EACN,MAAM,SAAS,QAAQ,WAAW;GAAE;GAAS;GAAM;GAAW,CAAC;AAC/D,MAAI;GACF,MAAMM,QAAoB;IAAE,aAAa;IAAS;IAAM;AACxD,UAAO,SAAS,CAAC,GAAG,OAAO,MAAM,CAAC;YAC1B;AACR,WAAQ,UAAU,OAAO;;;CAI7B,MAAM,sBAAsB,SAAiC;EAE3D,MAAM,aAAaN,SAAO;EAC1B,MAAM,YAAYA,SAAO;EACzB,IAAI,QAAQ,UAAU,sBAAsB,KAAK,KAAK,QAAQ,WAAW;EACzE,MAAM,MAAM,UAAU,sBAAsB,KAAK,KAAK,MAAM,WAAW;AAGvE,MAAI,QAAQ,KAAK,OAAO,WAAW,OAAO,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAM,OAAO,QAAQ,EAAE,KAAK,OAAO;AAC/G,YAAS;;EAGX,MAAM,MAAM,OAAO,MAAM,OAAO,IAAI;EACpC,MAAM,SAAS,IAAI,QAAQ,MAAM;EACjC,MAAM,aAAa,UAAU,IAAI,IAAI,MAAM,OAAO,GAAG;AAIrD,SAAO,WAAW,QAAQ,YAAY,GAAG;;CAI3C,MAAM,qBAAqB,UACzB,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS,cAAc,MAAM,IAAI,IAAI,SAAS,QAAQ;CAGvF,MAAM,SAAS,MAAW,UAAwB;AAChD,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC;;AAIF,MAAI,KAAK,SAAS,kBAAkB;GAClC,MAAM,UAAUC,qBAAmB,gBAAgB,KAAK;AAGxD,OAAI,WAAW,CAAC,kBAAkB,MAAM,EAAE;IAExC,MAAM,sBAAsB,QAAQ,cAAc,KAAK;IACvD,IAAIM;AAEJ,QAAI,qBAAqB;KACvB,MAAM,gBAAgB,iBAAiB,YAAY;AACnD,4BAAuB,QAAQ,WAAW;MACxC,SAAS;MACT,MAAM;MACN,WAAW;MACZ,CAAC;;AAGJ,QAAI;KAEF,MAAM,EAAE,YAAY,QAAQ,oBAAoB;KAChD,MAAM,aAAa,MAAM,WAAW;KAGpC,IAAI,aAAa;KACjB,IAAIC;AAEJ,SAAI,cAAc,MAAM,IAAI;MAC1B,MAAM,eAAe,MAAM,GAAG;AAC9B,UAAI,eAAe,IAAI,aAAa,EAAE;AACpC,oBAAa;AACb,uBAAgB,eAAe,IAAI,aAAa;;;AAIpD,kBAAa,KAAK,KAAK;AACvB,aAAQ,KAAK;MACX;MACA;MACA;MACA;MAEA,YAAY,mBAAmB,QAAQ;MACxC,CAAC;cACM;AAER,SAAI,sBAAsB;AACxB,cAAQ,UAAU,qBAAqB;;;AAK3C;;;AAKJ,MAAI,KAAK,SAAS,uBAAuB;AAEvC,QAAK,cAAc,SAAS,SAAc;AACxC,QAAI,KAAK,IAAI,SAAS,cAAc;KAClC,MAAM,UAAU,KAAK,GAAG;AAExB,SAAI,KAAK,MAAM;AACb,gBAAU,OAAO,SAAS,YAAY,OAAO,YAAY,aAAa;AACpE,aAAM,KAAK,MAAM,SAAS;QAC1B;;eAEK,KAAK,MAAM;AAGpB,WAAM,KAAK,MAAM,MAAM;;KAEzB;AACF;;AAIF,MAAI,KAAK,SAAS,uBAAuB;GACvC,MAAM,WAAW,KAAK,YAAY,SAAS,iBAAiB,WAAW;AAEvE,OAAI,KAAK,MAAM;AACb,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,WAAM,KAAK,MAAM,SAAS;MAC1B;;AAEJ;;AAIF,MAAI,KAAK,SAAS,2BAA2B;GAC3C,MAAM,YAAY,iBAAiB,QAAQ;AAE3C,OAAI,KAAK,MAAM;AACb,cAAU,OAAO,WAAW,YAAY,UAAU,aAAa;AAC7D,WAAM,KAAK,MAAM,SAAS;MAC1B;;AAEJ;;AAIF,MAAI,KAAK,SAAS,sBAAsB;GACtC,MAAM,WAAW,KAAK,YAAY,SAAS,iBAAiB,WAAW;AAEvE,OAAI,KAAK,MAAM;AACb,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,WAAM,KAAK,MAAM,SAAS;MAC1B;;AAEJ;;AAIF,MAAI,KAAK,SAAS,oBAAoB;GACpC,MAAM,YAAY,KAAK,YAAY,SAAS,iBAAiB,QAAQ;AAErE,aAAU,OAAO,WAAW,SAAS,SAAS,cAAc,eAAe;AAEzE,SAAK,MAAM,SAAS,WAAgB;AAClC,SAAI,OAAO,SAAS,iBAAiB,OAAO,SAAS,iBAAiB;MACpE,MAAM,aAAa,OAAO,KAAK,SAAS;AACxC,UAAI,YAAY;OACd,MAAM,aAAa,OAAO,SAAS,gBAAgB,WAAW;AAC9D,iBAAU,YAAY,YAAY,YAAY,UAAU,UAAU,GAAG,eAAe,gBAAgB;AAClG,YAAI,OAAO,SAAS,iBAAiB,OAAO,UAAU,MAAM;AAC1D,eAAM,OAAO,SAAS,MAAM,YAAY;mBAC/B,OAAO,SAAS,mBAAmB,OAAO,OAAO;AAC1D,eAAM,OAAO,OAAO,YAAY;;SAElC;;;MAGN;KACF;AACF;;AAIF,MAAI,KAAK,SAAS,oBAAoB;GACpC,MAAM,WAAWL,kBAAgB,KAAK,IAAI;AAC1C,OAAI,UAAU;AACZ,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,WAAM,KAAK,OAAO,SAAS;MAC3B;;AAEJ;;AAIF,MAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,QAAK,MAAM,SAAS,MAAM;AACxB,UAAM,OAAO,MAAM;;SAEhB;AACL,QAAK,MAAM,SAAS,OAAO,OAAO,KAAK,EAAE;AACvC,QAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,UAAK,MAAM,SAAS,OAAO;AACzB,YAAM,OAAO,MAAM;;eAEZ,SAAS,OAAO,UAAU,UAAU;AAC7C,WAAM,OAAO,MAAM;;;;;AAO3B,UAAO,KAAK,SAAS,cAAc;AACjC,QAAM,WAAW,EAAE,CAAC;GACpB;CAEF,MAAM,cAAc,QAAQ,KACzB,UACE;EACC,aAAa,kBAAkBH,SAAO,YAAY,KAAK,SAAS,EAAE,SAAS,CAAC;EAC5E,SAAS,KAAK;EACd,YAAY,KAAK;EACjB,YAAY,KAAK;EACjB,eAAe,KAAK;EACpB,YAAY,KAAK;EAClB,EACJ;AAED,QAAO;EAAE;EAAa;EAAc;;;;;AAUtC,MAAMS,iBAAe,UAAmB,SAA6D;CACnG,MAAM,YAAYT,SAAO;CACzB,MAAM,QAAQ,UAAU,sBAAsB,KAAK,QAAQA,SAAO,aAAa;CAC/E,MAAM,MAAM,UAAU,sBAAsB,KAAK,MAAMA,SAAO,aAAa;AAC3E,QAAO;EAAE;EAAO;EAAK;;;;;AAMvB,MAAMU,8BAA4B,UAAmB,WAA4D;CAC/G,MAAMC,cAAkC,EAAE;AAE1C,UAAO,KAAK,SAAS,SAAS;EAC5B,MAAM,cACJ,KAAK,SAAS,sBACV,OACA,iBAAiB,QACf,KAAK,eACL,UAAU,KAAK,eAEd,KAAK,YAAoB,SAAS,sBAElC,KAAK,cACN;AAER,MAAI,CAAC,aAAa;AAChB;;AAGF,MAAI,CAAC,OAAO,+BAA+B;GAAE,UAAUX,SAAO;GAAY,WAAW,YAAY,OAAO;GAAO,CAAC,EAAE;AAChH;;AAIF,cAAY,YAAY,SAAS,cAAmB;AAElD,OAAI,UAAU,SAAS,0BAA0B;AAC/C,gBAAY,KAAK,yBAAyB,kBAAkBS,cAAYT,UAAQ,UAAU,KAAK,EAAE,UAAU,CAAC;AAC5G;;AAIF,OAAI,UAAU,SAAS,4BAA4B;AACjD,gBAAY,KACV,yBAAyB,eAAeS,cAAYT,UAAQ,UAAU,KAAK,EAAE,EAC3E,gBAAgB,UAAU,MAAM,OACjC,CAAC,CACH;AACD;;AAIF,OAAI,UAAU,SAAS,mBAAmB;IACxC,MAAM,WAAW,UAAU,WAAW,UAAU,SAAS,QAAQ,UAAU,MAAM;AAEjF,QAAI,aAAa,SAAS,UAAU,UAAU;AAC5C,iBAAY,KACV,yBAAyB,kBAAkBS,cAAYT,UAAQ,UAAU,KAAK,EAAE,EAC9E,YAAY,UAAU,MAAM,OAC7B,CAAC,CACH;;;IAGL;GACF;AAEF,QAAO;;;;;AAOT,MAAMY,2BAAyB,MAAW,gBAA8C;AACtF,KAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,SAAO;;AAET,KAAI,KAAK,SAAS,gBAAgB,YAAY,IAAI,KAAK,MAAM,EAAE;AAC7D,SAAO;;AAET,MAAK,MAAM,SAAS,OAAO,OAAO,KAAK,EAAE;AACvC,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAK,MAAM,SAAS,OAAO;AACzB,QAAIA,wBAAsB,OAAO,YAAY,EAAE;AAC7C,YAAO;;;aAGF,SAAS,OAAO,UAAU,UAAU;AAC7C,OAAIA,wBAAsB,OAAO,YAAY,EAAE;AAC7C,WAAO;;;;AAIb,QAAO;;;;;AAOT,MAAMC,qBAAmB,SAAsB;AAC7C,KAAI,CAAC,KAAM,QAAO;AAClB,SAAQ,KAAK,MAAb;EACE,KAAK,gBACH,QAAO;EACT,KAAK,iBACH,QAAO;EACT,KAAK,mBACH,QAAO;EACT,KAAK,kBACH,QAAO;EACT,KAAK,qBACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,KAAK,iBACH,QAAO;EACT,QACE,QAAO;;;;;;AAOb,MAAMC,4BAA0B,UAAmB,mBAA4D;CAC7G,MAAMH,cAAkC,EAAE;CAG1C,MAAM,SAAS,SAAc;AAC3B,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC;;AAGF,MAAI,KAAK,SAAS,kBAAkB;GAClC,MAAM,aAAaI,sBAAoBf,UAAQ,MAAM,eAAe;AACpE,OAAI,YAAY;AACd,gBAAY,KAAK,WAAW;;;AAKhC,OAAK,MAAM,SAAS,OAAO,OAAO,KAAK,EAAE;AACvC,OAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,SAAK,MAAM,SAAS,OAAO;AACzB,WAAM,MAAM;;cAEL,SAAS,OAAO,UAAU,UAAU;AAC7C,UAAM,MAAM;;;;AAKlB,UAAO,KAAK,QAAQ,MAAM;AAC1B,QAAO;;;;;AAMT,MAAMe,yBACJ,UACA,MACA,mBAC4B;CAC5B,MAAM,SAAS,KAAK;AAGpB,KAAI,OAAO,SAAS,gBAAgB,eAAe,IAAI,OAAO,MAAM,EAAE;AACpE,SAAO,yBAAyB,qBAAqBN,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;AAKjG,KAAI,OAAO,SAAS,8BAA8B;EAEhD,MAAM,OAAQ,OAAe;AAC7B,MAAI,MAAM,SAAS,oBAAoB;GACrC,MAAMgB,WAAS,KAAK;AACpB,OAAIA,UAAQ,SAAS,gBAAgB,eAAe,IAAIA,SAAO,MAAM,EAAE;AACrE,WAAO,yBAAyB,qBAAqBP,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;;AAGnG,SAAO;;AAIT,KAAI,OAAO,SAAS,oBAAoB;AACtC,SAAO;;CAIT,MAAM,SAAU,OAAe;CAE/B,MAAM,WAAY,OAAe;AAIjC,KAAI,UAAU,SAAS,cAAc,QAAQ,SAAS,gBAAgB,eAAe,IAAI,OAAO,MAAM,EAAE;AACtG,SAAO,yBAAyB,qBAAqBS,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;AAIjG,KAAI,QAAQ,SAAS,cAAc;AACjC,MAAIY,wBAAsB,QAAQ,eAAe,EAAE;AACjD,UAAO,yBAAyB,kBAAkBH,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;AAE9F,SAAO;;AAIT,KAAI,CAAC,eAAe,IAAI,OAAO,MAAM,EAAE;AACrC,SAAO;;AAIT,KAAI,CAAC,KAAK,aAAa,KAAK,UAAU,WAAW,GAAG;AAClD,SAAO,yBAAyB,oBAAoBS,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;CAGhG,MAAM,WAAW,KAAK,UAAU;CAEhC,MAAM,cAAc;AAGpB,KAAI,aAAa,QAAQ;AACvB,SAAO,yBAAyB,mBAAmBS,cAAYT,UAAQ,KAAK,KAAK,EAAE,UAAU;;CAG/F,MAAM,aAAa,aAAa;AAChC,KAAI,cAAc,WAAW,SAAS,2BAA2B;EAC/D,MAAM,aAAaa,kBAAgB,WAAW;AAC9C,SAAO,yBAAyB,yBAAyBJ,cAAYT,UAAQ,KAAK,KAAK,EAAE,EAAE,YAAY,CAAC;;AAI1G,KAAI,KAAK,UAAU,SAAS,GAAG;EAC7B,MAAM,aAAa,KAAK,UAAU,SAAS;AAC3C,SAAO,yBAAyB,mBAAmBS,cAAYT,UAAQ,KAAK,KAAK,EAAE,EACjF,YAAY,OAAO,WAAW,EAC/B,CAAC;;AAGJ,QAAO;;;;;AAMT,MAAMiB,qCAAmC,UAAmB,mBAA4D;CACtH,MAAMN,cAAkC,EAAE;CAG1C,MAAM,mBAAmB,SAAuB;AAC9C,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,UAAO;;AAET,MAAI,KAAK,SAAS,oBAAoB,UAAU,gBAAgB,KAAK,EAAE;AACrE,UAAO;;AAET,OAAK,MAAM,SAAS,OAAO,OAAO,KAAK,EAAE;AACvC,OAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,SAAK,MAAM,SAAS,OAAO;AACzB,SAAI,gBAAgB,MAAM,EAAE;AAC1B,aAAO;;;cAGF,SAAS,OAAO,UAAU,UAAU;AAC7C,QAAI,gBAAgB,MAAM,EAAE;AAC1B,YAAO;;;;AAIb,SAAO;;CAIT,MAAM,SAAS,SAAc;AAC3B,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC;;AAGF,MAAI,KAAK,SAAS,oBAAoB;AAEpC,QAAK,MAAM,SAAS,WAAgB;AAClC,QAAI,OAAO,SAAS,mBAAmB,OAAO,OAAO;AACnD,SAAI,gBAAgB,OAAO,MAAM,EAAE;AACjC,kBAAY,KAAK,yBAAyB,kBAAkBF,cAAYT,UAAQ,OAAO,KAAK,EAAE,UAAU,CAAC;;;KAG7G;;AAIJ,OAAK,MAAM,SAAS,OAAO,OAAO,KAAK,EAAE;AACvC,OAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,SAAK,MAAM,SAAS,OAAO;AACzB,WAAM,MAAM;;cAEL,SAAS,OAAO,UAAU,UAAU;AAC7C,UAAM,MAAM;;;;AAKlB,UAAO,KAAK,QAAQ,MAAM;AAC1B,QAAO;;AAST,IAAIkB;AACJ,MAAM,qBAAgC;AACpC,KAAI,CAAC,YAAY;AACf,MAAI,OAAO,OAAO,KAAK,QAAQ,UAAU;AACvC,SAAM,IAAI,MAAM,qFAAqF;;EAEvG,MAAM,eAAe,cAAc,OAAO,KAAK,IAAI;AACnD,eAAa,aAAa,YAAY,CAAC;;AAEzC,QAAO;;AAGT,MAAaC,aAA8B,EACzC,QAAQ,OAA2B,QAA4D;CAE7F,MAAM,UAAU,cAAc,CAAC,MAAM,QAAQ;EAC3C,QAAQ;EACR,KAAK,MAAM,SAAS,SAAS,OAAO;EACpC,QAAQ;EACR,YAAY;EACZ,eAAe;EAChB,CAAC;AAEF,KAAI,QAAQ,SAAS,UAAU;AAC7B,SAAO;;CAKT,MAAM,YAAY,uBAAuB,MAAM,OAAO;CACtD,MAAM,aAAa,QAAQ,KAAK,MAAM,UAAU,aAAa;CAG7D,MAAM,YAAY;AAClB,WAAU,aAAa,MAAM;AAC7B,WAAU,eAAe;AACzB,WAAU,kBAAkB;CAG5B,MAAM,iBAAiB,sBAAsB,WAAW,OAAO;CAC/D,MAAM,UAAUxB,iBAAe,UAAU;CACzC,MAAMI,YAAUF,iBAAe,UAAU;CAEzC,MAAM,EAAE,gBAAgBK,wBAAsB;EAC5C,QAAQ;EACR;EACA;EACA;EACA,QAAQ,MAAM;EACd,SAAS,MAAM;EAChB,CAAC;CAGF,MAAM,cAAc;EAClB,GAAGQ,2BAAyB,WAAW,OAAO;EAC9C,GAAGI,yBAAuB,WAAW,eAAe;EACpD,GAAGG,kCAAgC,WAAW,eAAe;EAC9D;AAGD,QAAO;EACL;EACA;EACA;EACA;EACD;GAEJ;;;;;;;;AC/7BD,MAAM,oBAAoB,UAAkB,WAAkC;CAC5E,MAAM,aAAa,QAAQ,SAAS,KAAK,SAAS,GAAG,WAAW,MAAM,GAAG,WAAW;AACpF,QAAO,GAAG,iBAAiB,UAAU,QAAQ,GAAG,aAAa,QAAQ,MAAM,WAAW;;AAGxF,MAAM,qBAAqB,YAA2B,WAA6D;CACjH,MAAM,cAAc,IAAI,KAAa;AAErC,YAAW,WAAW,SAAS,cAAc;AAC3C,MAAI,CAAC,GAAG,oBAAoB,UAAU,IAAI,CAAC,UAAU,cAAc;AACjE;;EAGF,MAAM,aAAc,UAAU,gBAAqC;AACnE,MAAI,CAAC,OAAO,+BAA+B;GAAE,UAAU,WAAW;GAAU,WAAW;GAAY,CAAC,EAAE;AACpG;;AAGF,MAAI,UAAU,aAAa,iBAAiB,GAAG,eAAe,UAAU,aAAa,cAAc,EAAE;AACnG,aAAU,aAAa,cAAc,SAAS,SAAS,YAAY;IACjE,MAAM,WAAW,QAAQ,eAAe,QAAQ,aAAa,OAAO,QAAQ,KAAK;AAEjF,QAAI,aAAa,SAAS,CAAC,QAAQ,cAAc;AAC/C,iBAAY,IAAI,QAAQ,KAAK,KAAK;;KAEpC;;GAEJ;AAEF,QAAO;;AAGT,MAAM,kBAAkB,eAA8C;CACpE,MAAMG,UAA0B,EAAE;AAElC,YAAW,WAAW,SAAS,cAAc;AAC3C,MAAI,CAAC,GAAG,oBAAoB,UAAU,IAAI,CAAC,UAAU,cAAc;AACjE;;EAGF,MAAM,aAAc,UAAU,gBAAqC;EACnE,MAAM,EAAE,iBAAiB;AAEzB,MAAI,aAAa,MAAM;AACrB,WAAQ,KAAK;IACX,QAAQ;IACR,OAAO,aAAa,KAAK;IACzB,MAAM;IACN,YAAY,QAAQ,aAAa,WAAW;IAC7C,CAAC;;EAGJ,MAAM,EAAE,kBAAkB;AAC1B,MAAI,CAAC,eAAe;AAClB;;AAGF,MAAI,GAAG,kBAAkB,cAAc,EAAE;AACvC,WAAQ,KAAK;IACX,QAAQ;IACR,OAAO,cAAc,KAAK;IAC1B,MAAM;IACN,YAAY,QAAQ,aAAa,WAAW;IAC7C,CAAC;AACF;;AAGF,gBAAc,SAAS,SAAS,YAAY;AAC1C,WAAQ,KAAK;IACX,QAAQ;IACR,OAAO,QAAQ,KAAK;IACpB,MAAM;IACN,YAAY,QAAQ,aAAa,cAAc,QAAQ,WAAW;IACnE,CAAC;IACF;GACF;AAEF,QAAO;;AAGT,MAAM,kBAAkB,eAA8C;CACpE,MAAMC,YAA0B,EAAE;AAElC,YAAW,WAAW,SAAS,cAAc;AAC3C,MAAI,GAAG,oBAAoB,UAAU,EAAE;GACrC,MAAM,kBAAkB,UAAU,kBAAmB,UAAU,gBAAqC,OAAO;AAE3G,OAAI,UAAU,gBAAgB,GAAG,eAAe,UAAU,aAAa,EAAE;AACvE,cAAU,aAAa,SAAS,SAAS,YAAY;AACnD,SAAI,iBAAiB;AACnB,gBAAQ,KAAK;OACX,MAAM;OACN,UAAU,QAAQ,KAAK;OACvB,OAAO,QAAQ,eAAe,QAAQ,aAAa,OAAO;OAC1D,QAAQ;OACR,YAAY,QAAQ,UAAU,cAAc,QAAQ,WAAW;OAChE,CAAC;YACG;AACL,gBAAQ,KAAK;OACX,MAAM;OACN,UAAU,QAAQ,KAAK;OACvB,OAAO,QAAQ,eAAe,QAAQ,aAAa,OAAO,QAAQ,KAAK;OACvE,YAAY,QAAQ,UAAU,cAAc,QAAQ,WAAW;OAChE,CAAC;;MAEJ;AACF;;AAGF,OAAI,iBAAiB;AACnB,cAAQ,KAAK;KACX,MAAM;KACN,UAAU;KACV,QAAQ;KACR,YAAY,QAAQ,UAAU,WAAW;KAC1C,CAAC;;AAGJ;;AAGF,MAAI,GAAG,mBAAmB,UAAU,EAAE;AACpC,aAAQ,KAAK;IACX,MAAM;IACN,UAAU;IACV,OAAO;IACP,YAAY;IACb,CAAC;;AAGJ,MACE,GAAG,oBAAoB,UAAU,IACjC,UAAU,WAAW,MAAM,aAAa,SAAS,SAAS,GAAG,WAAW,cAAc,EACtF;AACA,aAAU,gBAAgB,aAAa,SAAS,gBAAgB;AAC9D,QAAI,GAAG,aAAa,YAAY,KAAK,EAAE;AACrC,eAAQ,KAAK;MACX,MAAM;MACN,UAAU,YAAY,KAAK;MAC3B,OAAO,YAAY,KAAK;MACxB,YAAY;MACb,CAAC;;KAEJ;;AAGJ,MACE,GAAG,sBAAsB,UAAU,IACnC,UAAU,WAAW,MAAM,aAAa,SAAS,SAAS,GAAG,WAAW,cAAc,IACtF,UAAU,MACV;AACA,aAAQ,KAAK;IACX,MAAM;IACN,UAAU,UAAU,KAAK;IACzB,OAAO,UAAU,KAAK;IACtB,YAAY;IACb,CAAC;;GAEJ;AAEF,QAAOC;;;;;;AAOT,MAAM,2BAA2B,SAAuC;AACtE,KAAI,GAAG,oBAAoB,KAAK,EAAE;AAChC,SAAO,wBAAwB,KAAK,WAAW;;AAEjD,QAAO;;AAGT,MAAM,uBAAuB,aAAkC,mBAA+C;CAC5G,MAAM,aAAa,eAAe;AAClC,KAAI,CAAC,GAAG,2BAA2B,WAAW,EAAE;AAC9C,SAAO;;CAIT,MAAM,WAAW,wBAAwB,WAAW,WAAW;AAE/D,KAAI,CAAC,GAAG,aAAa,SAAS,IAAI,CAAC,YAAY,IAAI,SAAS,KAAK,EAAE;AACjE,SAAO;;CAGT,MAAM,CAAC,WAAW,eAAe;AACjC,KAAI,CAAC,WAAW,EAAE,GAAG,gBAAgB,QAAQ,IAAI,GAAG,qBAAqB,QAAQ,GAAG;AAClF,SAAO;;AAGT,QAAO;;;;;;AAOT,MAAM,sBAAsB,aAAkC,SAA4C;AACxG,KAAI,CAAC,GAAG,iBAAiB,KAAK,EAAE;AAC9B,SAAO;;AAIT,KAAI,oBAAoB,aAAa,KAAK,EAAE;AAC1C,SAAO;;CAIT,MAAM,aAAa,KAAK;AACxB,KAAI,CAAC,GAAG,2BAA2B,WAAW,EAAE;AAC9C,SAAO;;AAKT,QAAO,mBAAmB,aAAa,WAAW,WAAW;;;;;AAM/D,MAAM,mBAAmB,SAAyC;AAChE,KAAI,GAAG,aAAa,KAAK,EAAE;AACzB,SAAO,KAAK;;AAEd,KAAI,GAAG,gBAAgB,KAAK,IAAI,GAAG,iBAAiB,KAAK,EAAE;AACzD,SAAO,KAAK;;AAEd,QAAO;;;;;AAMT,MAAM,yBAAyB,EAC7B,YACA,aACA,oBACA,cASG;CASH,MAAMC,UAA+B,EAAE;CACvC,MAAMC,eAAoC,EAAE;CAG5C,MAAM,iBAAiB,wBAAwBF,UAAQ;CAGvD,MAAM,UAAU,uBAAuB;EACrC,UAAU,WAAW;EACrB;EACA,gBAAgB,cAAc,eAAe,IAAI,UAAU;EAC5D,CAAC;CAIF,MAAM,oBAAoB,IAAI,KAAqB;CACnD,MAAM,oBAAoB,SAAyB;EACjD,MAAM,QAAQ,kBAAkB,IAAI,KAAK,IAAI;AAC7C,oBAAkB,IAAI,MAAM,QAAQ,EAAE;AACtC,SAAO,IAAI,KAAK,GAAG;;CAIrB,MAAM,aACJ,OACA,SACA,MACA,WACA,aACM;EACN,MAAM,SAAS,QAAQ,WAAW;GAAE;GAAS;GAAM;GAAW,CAAC;AAC/D,MAAI;GACF,MAAMG,QAAoB;IAAE,aAAa;IAAS;IAAM;AACxD,UAAO,SAAS,CAAC,GAAG,OAAO,MAAM,CAAC;YAC1B;AACR,WAAQ,UAAU,OAAO;;;CAK7B,MAAM,qBAAqB,UACzB,MAAM,MAAM,OAAO,MAAM,MAAM,SAAS,cAAc,MAAM,IAAI,IAAI,SAAS,QAAQ;CAEvF,MAAM,SAAS,MAAe,UAAwB;AAEpD,MAAI,GAAG,iBAAiB,KAAK,EAAE;GAC7B,MAAM,UAAU,mBAAmB,aAAa,KAAK;AAGrD,OAAI,WAAW,CAAC,kBAAkB,MAAM,EAAE;IAExC,MAAM,sBAAsB,QAAQ,cAAc,KAAK;IACvD,IAAIC;AAEJ,QAAI,qBAAqB;KACvB,MAAM,gBAAgB,iBAAiB,YAAY;AACnD,4BAAuB,QAAQ,WAAW;MACxC,SAAS;MACT,MAAM;MACN,WAAW;MACZ,CAAC;;AAGJ,QAAI;KAEF,MAAM,EAAE,YAAY,QAAQ,oBAAoB;KAChD,MAAM,aAAa,MAAM,WAAW;KAGpC,IAAI,aAAa;KACjB,IAAIC;AAEJ,SAAI,cAAc,MAAM,IAAI;MAC1B,MAAM,eAAe,MAAM,GAAG;AAC9B,UAAI,eAAe,IAAI,aAAa,EAAE;AACpC,oBAAa;AACb,uBAAgB,eAAe,IAAI,aAAa;;;AAIpD,kBAAa,KAAK,KAAK;AACvB,aAAQ,KAAK;MACX;MACA;MACA;MACA;MAEA,YAAY,QAAQ,QAAQ,WAAW;MACxC,CAAC;cACM;AAER,SAAI,sBAAsB;AACxB,cAAQ,UAAU,qBAAqB;;;AAK3C;;;AAKJ,MAAI,GAAG,sBAAsB,KAAK,IAAI,KAAK,QAAQ,GAAG,aAAa,KAAK,KAAK,EAAE;GAC7E,MAAM,UAAU,KAAK,KAAK;AAE1B,OAAI,KAAK,aAAa;IACpB,MAAM,OAAO,KAAK;AAClB,cAAU,OAAO,SAAS,YAAY,OAAO,YAAY,aAAa;AACpE,WAAM,MAAM,SAAS;MACrB;;AAEJ;;AAIF,MAAI,GAAG,sBAAsB,KAAK,EAAE;GAClC,MAAM,WAAW,KAAK,MAAM,QAAQ,iBAAiB,WAAW;AAEhE,OAAI,KAAK,MAAM;IACb,MAAM,OAAO,KAAK;AAClB,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,QAAG,aAAa,OAAO,UAAU,MAAM,OAAO,SAAS,CAAC;MACxD;;AAEJ;;AAIF,MAAI,GAAG,gBAAgB,KAAK,EAAE;GAC5B,MAAM,YAAY,iBAAiB,QAAQ;AAE3C,aAAU,OAAO,WAAW,YAAY,UAAU,aAAa;AAC7D,QAAI,GAAG,QAAQ,KAAK,KAAK,EAAE;AACzB,QAAG,aAAa,KAAK,OAAO,UAAU,MAAM,OAAO,SAAS,CAAC;WACxD;AACL,WAAM,KAAK,MAAM,SAAS;;KAE5B;AACF;;AAIF,MAAI,GAAG,qBAAqB,KAAK,EAAE;GACjC,MAAM,WAAW,KAAK,MAAM,QAAQ,iBAAiB,WAAW;AAEhE,OAAI,KAAK,MAAM;AACb,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,QAAG,aAAa,KAAK,OAAO,UAAU,MAAM,OAAO,SAAS,CAAC;MAC7D;;AAEJ;;AAIF,MAAI,GAAG,mBAAmB,KAAK,EAAE;GAC/B,MAAM,YAAY,KAAK,MAAM,QAAQ,iBAAiB,QAAQ;AAE9D,aAAU,OAAO,WAAW,SAAS,SAAS,cAAc,eAAe;AACzE,SAAK,QAAQ,SAAS,WAAW;AAC/B,SAAI,GAAG,oBAAoB,OAAO,IAAI,GAAG,sBAAsB,OAAO,EAAE;MACtE,MAAM,aAAa,OAAO,QAAQ,GAAG,aAAa,OAAO,KAAK,GAAG,OAAO,KAAK,OAAO;AACpF,UAAI,YAAY;OACd,MAAM,aAAa,GAAG,oBAAoB,OAAO,GAAG,WAAW;AAC/D,iBAAU,YAAY,YAAY,YAAY,UAAU,UAAU,GAAG,eAAe,gBAAgB;AAClG,YAAI,GAAG,oBAAoB,OAAO,IAAI,OAAO,MAAM;AACjD,YAAG,aAAa,OAAO,OAAO,UAAU,MAAM,OAAO,YAAY,CAAC;mBACzD,GAAG,sBAAsB,OAAO,IAAI,OAAO,aAAa;AACjE,eAAM,OAAO,aAAa,YAAY;;SAExC;;;MAGN;KACF;AACF;;AAIF,MAAI,GAAG,qBAAqB,KAAK,EAAE;GACjC,MAAM,WAAW,gBAAgB,KAAK,KAAK;AAC3C,OAAI,UAAU;AACZ,cAAU,OAAO,UAAU,YAAY,QAAQ,aAAa,aAAa;AACvE,WAAM,KAAK,aAAa,SAAS;MACjC;;AAEJ;;AAIF,KAAG,aAAa,OAAO,UAAU,MAAM,OAAO,MAAM,CAAC;;AAIvD,YAAW,WAAW,SAAS,cAAc;AAC3C,QAAM,WAAW,EAAE,CAAC;GACpB;CAEF,MAAM,cAAc,QAAQ,KACzB,UACE;EACC,aAAa,kBAAkB,WAAW,UAAU,KAAK,SAAS,EAAE,SAAS,CAAC;EAC9E,SAAS,KAAK;EACd,YAAY,KAAK;EACjB,YAAY,KAAK;EACjB,eAAe,KAAK;EACpB,YAAY,KAAK;EAClB,EACJ;AAED,QAAO;EAAE;EAAa;EAAc;;;;;AAUtC,MAAM,eAAe,YAA2B,SAAsC;CACpF,MAAM,QAAQ,KAAK,SAAS,WAAW;CACvC,MAAM,EAAE,MAAM,cAAc,WAAW,8BAA8B,MAAM;AAC3E,QAAO;EACL;EACA,KAAK,KAAK,QAAQ;EAClB,MAAM,OAAO;EACb,QAAQ,YAAY;EACrB;;;;;AAMH,MAAM,4BAA4B,YAA2B,WAA4D;CACvH,MAAMC,cAAkC,EAAE;AAE1C,YAAW,WAAW,SAAS,cAAc;AAC3C,MAAI,CAAC,GAAG,oBAAoB,UAAU,IAAI,CAAC,UAAU,cAAc;AACjE;;EAGF,MAAM,aAAc,UAAU,gBAAqC;AACnE,MAAI,CAAC,OAAO,+BAA+B;GAAE,UAAU,WAAW;GAAU,WAAW;GAAY,CAAC,EAAE;AACpG;;EAGF,MAAM,EAAE,iBAAiB;AAGzB,MAAI,aAAa,MAAM;AACrB,eAAY,KAAK,yBAAyB,kBAAkB,YAAY,YAAY,aAAa,KAAK,EAAE,UAAU,CAAC;;EAGrH,MAAM,EAAE,kBAAkB;AAC1B,MAAI,CAAC,eAAe;AAClB;;AAIF,MAAI,GAAG,kBAAkB,cAAc,EAAE;AACvC,eAAY,KACV,yBAAyB,eAAe,YAAY,YAAY,cAAc,EAAE,EAC9E,gBAAgB,cAAc,KAAK,MACpC,CAAC,CACH;AACD;;AAIF,gBAAc,SAAS,SAAS,YAAY;GAC1C,MAAM,WAAW,QAAQ,eAAe,QAAQ,aAAa,OAAO,QAAQ,KAAK;AAEjF,OAAI,aAAa,SAAS,QAAQ,cAAc;AAC9C,gBAAY,KACV,yBAAyB,kBAAkB,YAAY,YAAY,QAAQ,EAAE,EAC3E,YAAY,QAAQ,KAAK,MAC1B,CAAC,CACH;;IAEH;GACF;AAEF,QAAO;;;;;AAMT,MAAM,yBAAyB,MAAe,gBAA8C;AAC1F,KAAI,GAAG,aAAa,KAAK,IAAI,YAAY,IAAI,KAAK,KAAK,EAAE;AACvD,SAAO;;CAET,IAAI,QAAQ;AACZ,IAAG,aAAa,OAAO,UAAU;AAC/B,MAAI,sBAAsB,OAAO,YAAY,EAAE;AAC7C,WAAQ;;GAEV;AACF,QAAO;;;;;AAMT,MAAM,mBAAmB,SAA0B;AACjD,KAAI,GAAG,gBAAgB,KAAK,CAAE,QAAO;AACrC,KAAI,GAAG,iBAAiB,KAAK,CAAE,QAAO;AACtC,KAAI,GAAG,0BAA0B,KAAK,CAAE,QAAO;AAC/C,KAAI,GAAG,yBAAyB,KAAK,CAAE,QAAO;AAC9C,KAAI,GAAG,qBAAqB,KAAK,CAAE,QAAO;AAC1C,KAAI,KAAK,SAAS,GAAG,WAAW,YAAa,QAAO;AACpD,KAAI,KAAK,SAAS,GAAG,WAAW,iBAAkB,QAAO;AACzD,KAAI,KAAK,SAAS,GAAG,WAAW,eAAe,KAAK,SAAS,GAAG,WAAW,aAAc,QAAO;AAChG,QAAO;;;;;AAMT,MAAM,0BAA0B,YAA2B,mBAA4D;CACrH,MAAMA,cAAkC,EAAE;CAE1C,MAAM,SAAS,SAAkB;AAC/B,MAAI,GAAG,iBAAiB,KAAK,EAAE;GAC7B,MAAM,aAAa,oBAAoB,YAAY,MAAM,eAAe;AACxE,OAAI,YAAY;AACd,gBAAY,KAAK,WAAW;;;AAGhC,KAAG,aAAa,MAAM,MAAM;;AAG9B,YAAW,WAAW,QAAQ,MAAM;AACpC,QAAO;;;;;AAMT,MAAM,uBACJ,YACA,MACA,mBAC4B;CAC5B,MAAM,EAAE,eAAe;AAGvB,KAAI,GAAG,aAAa,WAAW,IAAI,eAAe,IAAI,WAAW,KAAK,EAAE;AACtE,SAAO,yBAAyB,qBAAqB,YAAY,YAAY,KAAK,EAAE,UAAU;;AAIhG,KAAI,GAAG,0BAA0B,WAAW,EAAE;EAC5C,MAAMC,aAAW,wBAAwB,WAAW,WAAW;AAC/D,MAAI,GAAG,aAAaA,WAAS,IAAI,eAAe,IAAIA,WAAS,KAAK,EAAE;AAClE,UAAO,yBAAyB,qBAAqB,YAAY,YAAY,KAAK,EAAE,UAAU;;AAEhG,SAAO;;AAIT,KAAI,CAAC,GAAG,2BAA2B,WAAW,EAAE;AAC9C,SAAO;;CAIT,MAAM,WAAW,wBAAwB,WAAW,WAAW;AAG/D,KAAI,WAAW,kBAAkB;AAC/B,MAAI,GAAG,aAAa,SAAS,IAAI,eAAe,IAAI,SAAS,KAAK,EAAE;AAClE,UAAO,yBAAyB,qBAAqB,YAAY,YAAY,KAAK,EAAE,UAAU;;AAEhG,SAAO;;AAIT,KAAI,CAAC,GAAG,aAAa,SAAS,EAAE;AAC9B,MAAI,sBAAsB,WAAW,YAAY,eAAe,EAAE;AAChE,UAAO,yBAAyB,kBAAkB,YAAY,YAAY,KAAK,EAAE,UAAU;;AAE7F,SAAO;;AAIT,KAAI,CAAC,eAAe,IAAI,SAAS,KAAK,EAAE;AACtC,SAAO;;AAIT,KAAI,KAAK,UAAU,WAAW,GAAG;AAC/B,SAAO,yBAAyB,oBAAoB,YAAY,YAAY,KAAK,EAAE,UAAU;;CAG/F,MAAM,WAAW,KAAK,UAAU;AAGhC,KAAI,YAAY,GAAG,gBAAgB,SAAS,EAAE;AAC5C,SAAO,yBAAyB,mBAAmB,YAAY,YAAY,KAAK,EAAE,UAAU;;AAG9F,KAAI,YAAY,CAAC,GAAG,gBAAgB,SAAS,EAAE;EAC7C,MAAM,aAAa,gBAAgB,SAAS;AAC5C,SAAO,yBAAyB,yBAAyB,YAAY,YAAY,KAAK,EAAE,EAAE,YAAY,CAAC;;AAIzG,KAAI,KAAK,UAAU,SAAS,GAAG;EAC7B,MAAM,aAAa,KAAK,UAAU,SAAS;AAC3C,SAAO,yBAAyB,mBAAmB,YAAY,YAAY,KAAK,EAAE,EAChF,YAAY,OAAO,WAAW,EAC/B,CAAC;;AAGJ,QAAO;;;;;AAMT,MAAM,mCAAmC,YAA2B,mBAA4D;CAC9H,MAAMD,cAAkC,EAAE;CAE1C,MAAM,mBAAmB,SAA2B;AAClD,MAAI,GAAG,iBAAiB,KAAK,IAAI,oBAAoB,gBAAgB,KAAK,EAAE;AAC1E,UAAO;;EAET,IAAI,QAAQ;AACZ,KAAG,aAAa,OAAO,UAAU;AAC/B,OAAI,gBAAgB,MAAM,EAAE;AAC1B,YAAQ;;IAEV;AACF,SAAO;;CAGT,MAAM,SAAS,SAAkB;AAC/B,MAAI,GAAG,mBAAmB,KAAK,EAAE;AAC/B,QAAK,QAAQ,SAAS,WAAW;AAC/B,QAAI,GAAG,sBAAsB,OAAO,IAAI,OAAO,aAAa;AAC1D,SAAI,gBAAgB,OAAO,YAAY,EAAE;AACvC,kBAAY,KAAK,yBAAyB,kBAAkB,YAAY,YAAY,OAAO,EAAE,UAAU,CAAC;;;KAG5G;;AAEJ,KAAG,aAAa,MAAM,MAAM;;AAG9B,YAAW,WAAW,QAAQ,MAAM;AACpC,QAAO;;;;;;;AAQT,MAAaE,oBAAqC,EAChD,QAAQ,OAA2B,QAA4D;CAE7F,MAAM,aAAa,iBAAiB,MAAM,UAAU,MAAM,OAAO;CAGjE,MAAM,iBAAiB,kBAAkB,YAAY,OAAO;CAC5D,MAAM,UAAU,eAAe,WAAW;CAC1C,MAAMR,YAAU,eAAe,WAAW;CAE1C,MAAM,EAAE,gBAAgB,sBAAsB;EAC5C;EACA,aAAa;EACb;EACA,SAAS,MAAM;EAChB,CAAC;CAGF,MAAM,cAAc;EAClB,GAAG,yBAAyB,YAAY,OAAO;EAC/C,GAAG,uBAAuB,YAAY,eAAe;EACrD,GAAG,gCAAgC,YAAY,eAAe;EAC/D;AAGD,QAAO;EACL;EACA;EACA;EACA;EACD;GAEJ;;;;;;;;;;;;AC5tBD,MAAa,qBACX,OACA,SACA,kBACmB;CACnB,MAAM,SAAS,mBAAmB;CAClC,MAAM,YAAY,OAAO,KAAK,MAAM,QAAQ,SAAS;CAGrD,MAAM,SAAS,QAAQ,QAAQ,OAAO,cAAc;AAEpD,KAAI,CAAC,QAAQ;AACX,SAAO;GACL,UAAU,MAAM;GAChB;GACA,aAAa,EAAE;GACf,SAAS,EAAE;GACX,SAAS,EAAE;GACX,aAAa,EAAE;GAChB;;AAGH,QAAO;EACL,UAAU,MAAM;EAChB;EACA,aAAa,OAAO;EACpB,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,aAAa,OAAO;EACrB;;;;;ACxDH,MAAa,qBAAqB,EAChC,UACA,eACA,cAUI;CACJ,MAAM,WAAW,UAA+D;EAC9E,MAAMS,mBAAuC;GAAE,GAAG;GAAO;GAAS;AAClE,MAAI,aAAa,MAAM;AACrB,UAAO,kBAAkB,kBAAkB,mBAAmB,cAAc;;AAE9E,MAAI,aAAa,OAAO;AACtB,UAAO,kBAAkB,kBAAkB,YAAY,cAAc;;AAEvE,SAAO,kBAAkB,UAAU,oBAAoB;;AAGzD,QAAO;EACL,MAAM;EACN;EACD;;;;;ACHH,MAAM,mBAAmB,YAA4B,QAAQ,QAAQ,UAAU,IAAI;AAEnF,MAAM,kBAAkB,aAAqC,SAAS,IAAI,gBAAgB,CAAC,KAAK,IAAI;AAEpG,MAAM,cAAc,QAAwB;CAC1C,MAAM,SAAS,mBAAmB;AAClC,QAAO,OAAO,KAAK,KAAK,SAAS;;AAcnC,MAAM,sBAAsB;;;;;AAM5B,MAAM,wBAAwB,SAAyC;AACrE,KAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;CACtD,MAAM,SAAS;AAEf,KAAI,OAAO,OAAO,YAAY,SAAU,QAAO;AAC/C,KAAI,OAAO,OAAO,YAAY,YAAY,OAAO,YAAY,KAAM,QAAO;AAG1E,MAAK,MAAM,SAAS,OAAO,OAAO,OAAO,QAAmC,EAAE;AAC5E,MAAI,CAAC,MAAM,QAAQ,MAAM,CAAE,QAAO;AAClC,OAAK,MAAM,SAAS,OAAO;AACzB,OAAI,CAAC,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAAG,QAAO;AACxD,OAAI,OAAO,MAAM,OAAO,SAAU,QAAO;GAEzC,MAAM,WAAW,MAAM;AACvB,OAAI,OAAO,aAAa,YAAY,aAAa,KAAM,QAAO;GAC9D,MAAM,MAAM;AACZ,OAAI,OAAO,IAAI,QAAQ,YAAY,OAAO,IAAI,YAAY,SAAU,QAAO;;;AAI/E,QAAO;;AAGT,MAAa,qBAAqB,EAAE,SAAS,EAAE,EAAE,gBAAqC,EAAE,KAAmB;CAEzG,MAAM,UAAU,IAAI,KAA6C;AAGjE,KAAI,aAAa,SAAS;AACxB,MAAI;AACF,OAAI,WAAW,YAAY,SAAS,EAAE;IACpC,MAAM,UAAU,aAAa,YAAY,UAAU,QAAQ;IAG3D,IAAIC;AACJ,QAAI;AACF,cAAS,KAAK,MAAM,QAAQ;YACtB;AAEN,aAAQ,KAAK,8DAA8D,YAAY,WAAW;AAClG,SAAI;AACF,iBAAW,YAAY,SAAS;aAC1B;AAGR,cAAS;;AAGX,QAAI,QAAQ;AAEV,SAAI,CAAC,qBAAqB,OAAO,EAAE;AACjC,cAAQ,KAAK,mEAAmE,YAAY,WAAW;AACvG,UAAI;AACF,kBAAW,YAAY,SAAS;cAC1B;gBAGC,OAAO,YAAY,qBAAqB;AAEjD,WAAK,MAAM,CAAC,cAAc,YAAY,OAAO,QAAQ,OAAO,QAAQ,EAAE;OACpE,MAAM,eAAe,IAAI,KAAgC;AACzD,YAAK,MAAM,CAAC,WAAW,aAAa,SAAS;AAC3C,qBAAa,IAAI,WAAW,SAAS;;AAEvC,eAAQ,IAAI,cAAc,aAAa;;;;;WAMxC,OAAO;AAEd,WAAQ,KAAK,qCAAqC,YAAY,SAAS,IAAI,MAAM;;;CAIrF,MAAM,wBAAwB,iBAAyD;EACrF,IAAI,YAAY,QAAQ,IAAI,aAAa;AACzC,MAAI,CAAC,WAAW;AACd,eAAY,IAAI,KAAK;AACrB,WAAQ,IAAI,cAAc,UAAU;;AAEtC,SAAO;;AAGT,QAAO;EACL,cAAmC,EAAE,WAAW,QAAQ,UAAU,WAAsD;GACtH,MAAM,eAAe,eAAe,CAAC,GAAG,QAAQ,GAAG,UAAU,CAAC;GAC9D,MAAM,iBAAiB,EAAE,OAAO;IAC9B,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,QAAQ;IACnB,OAAO;IACR,CAAC;GAEF,MAAM,mBAAmB,QAAgB,WAAW,IAAI;GAExD,MAAM,oBAAoB,QAA+C;IACvE,MAAM,SAAS,eAAe,UAAU,IAAI;AAC5C,QAAI,CAAC,OAAO,SAAS;AACnB,YAAO;;AAGT,QAAI,OAAO,KAAK,YAAY,SAAS;AACnC,YAAO;;AAGT,WAAO,OAAO;;GAGhB,MAAM,QAAQ,QAAqB;IACjC,MAAM,iBAAiB,QAAQ,IAAI,aAAa;AAChD,QAAI,CAAC,gBAAgB;AACnB,YAAO;;IAGT,MAAM,WAAW,gBAAgB,IAAI;IACrC,MAAM,MAAM,eAAe,IAAI,SAAS;AACxC,QAAI,CAAC,KAAK;AACR,YAAO;;IAGT,MAAM,WAAW,iBAAiB,IAAI;AACtC,QAAI,CAAC,YAAY,SAAS,QAAQ,KAAK;AACrC,oBAAe,OAAO,SAAS;AAC/B,YAAO;;AAGT,WAAO,SAAS;;GAGlB,MAAM,SAAS,KAAQ,UAAmB;IACxC,MAAM,iBAAiB,qBAAqB,aAAa;IACzD,MAAM,WAAW,gBAAgB,IAAI;IAErC,MAAMC,WAAwB;KAC5B;KACA;KACA;KACD;AAED,mBAAe,IAAI,UAAU,SAA8B;;GAG7D,MAAM,eAAe,QAAiB;IACpC,MAAM,iBAAiB,QAAQ,IAAI,aAAa;AAChD,QAAI,CAAC,gBAAgB;AACnB;;IAGF,MAAM,WAAW,gBAAgB,IAAI;AACrC,mBAAe,OAAO,SAAS;;GAGjC,UAAU,iBAA2C;IACnD,MAAM,iBAAiB,QAAQ,IAAI,aAAa;AAChD,QAAI,CAAC,gBAAgB;AACnB;;AAGF,SAAK,MAAM,OAAO,eAAe,QAAQ,EAAE;KACzC,MAAM,WAAW,iBAAiB,IAAI;AACtC,SAAI,CAAC,UAAU;AACb;;AAGF,WAAM,CAAC,SAAS,KAAU,SAAS,MAAM;;;GAI7C,MAAM,cAAoB;IACxB,MAAM,iBAAiB,QAAQ,IAAI,aAAa;AAChD,QAAI,gBAAgB;AAClB,oBAAe,OAAO;;;GAI1B,MAAM,aAAqB;IACzB,IAAI,QAAQ;AACZ,SAAK,MAAM,KAAK,gBAAgB,EAAE;AAChC,cAAS;;AAEX,WAAO;;AAGT,UAAO;IACL;IACA;IACA,QAAQ;IACR,SAAS;IACT;IACA;IACD;;EAGH,gBAAsB;AACpB,WAAQ,OAAO;;EAGjB,YAAkB;AAChB,OAAI,CAAC,aAAa,SAAS;AACzB;;AAGF,OAAI;IAEF,MAAMC,aAAiE,EAAE;AACzE,SAAK,MAAM,CAAC,cAAc,iBAAiB,QAAQ,SAAS,EAAE;AAC5D,gBAAW,gBAAgB,MAAM,KAAK,aAAa,SAAS,CAAC;;IAG/D,MAAMC,OAAsB;KAC1B,SAAS;KACT,SAAS;KACV;IAID,MAAM,KAAK,eAAe;AAC1B,OAAG,oBAAoB,YAAY,UAAU,KAAK,UAAU,KAAK,CAAC;YAC3D,OAAO;AACd,YAAQ,KAAK,mCAAmC,YAAY,SAAS,IAAI,MAAM;;;EAGpF;;;;;;;;;AC7QH,IAAsB,cAAtB,MAAuD;CACrD,AAAmB;CACnB,AAAiB;CAEjB,YAAY,SAAgC;AAC1C,OAAK,aAAa,QAAQ,QAAQ,YAAY;GAC5C,WAAW,CAAC,GAAG,QAAQ,UAAU;GACjC,QAAQ,QAAQ;GAChB,SAAS,QAAQ;GAClB,CAAC;AACF,OAAK,gBAAgB,QAAQ,iBAAiB;;;;;CAMhD,AAAU,aAAa,KAAgB;AACrC,SAAO,KAAK,cAAc,IAAI;;;;;CAMhC,AAAU,QAAQ,KAAkB;AAClC,SAAO,KAAK,WAAW,KAAK,IAAI;;;;;CAMlC,AAAU,SAAS,KAAQ,OAAgB;AACzC,OAAK,WAAW,MAAM,KAAK,MAAM;;;;;CAMnC,OAAO,KAAmB;EACxB,MAAM,gBAAgB,KAAK,aAAa,IAAI;AAC5C,OAAK,WAAW,OAAO,cAAc;;;;;;CAOvC,CAAW,cAAmC;AAC5C,OAAK,MAAM,GAAG,UAAU,KAAK,WAAW,SAAS,EAAE;AACjD,SAAM;;;;;;CAOV,QAAc;AACZ,OAAK,WAAW,OAAO;;;;;CAMzB,OAAe;AACb,SAAO,KAAK,WAAW,MAAM;;;;;;AC5EjC,MAAa,yBAAyB,EAAE,OAAO;CAC7C,aAAa;CACb,SAAS,EAAE,QAAQ;CACnB,YAAY,EAAE,SAAS;CACvB,YAAY,EAAE,SAAS;CACvB,eAAe,EAAE,QAAQ,CAAC,UAAU;CACpC,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,MAAa,qBAAqB,EAAE,OAAO;CACzC,QAAQ,EAAE,QAAQ;CAClB,OAAO,EAAE,QAAQ;CACjB,MAAM,EAAE,KAAK;EAAC;EAAS;EAAa;EAAU,CAAC;CAC/C,YAAY,EAAE,SAAS;CACxB,CAAC;AAEF,MAAa,qBAAqB,EAAE,mBAAmB,QAAQ,CAC7D,EAAE,OAAO;CACP,MAAM,EAAE,QAAQ,QAAQ;CACxB,UAAU,EAAE,QAAQ;CACpB,OAAO,EAAE,QAAQ;CACjB,QAAQ,EAAE,WAAW,CAAC,UAAU;CAChC,YAAY,EAAE,SAAS;CACxB,CAAC,EACF,EAAE,OAAO;CACP,MAAM,EAAE,QAAQ,WAAW;CAC3B,UAAU,EAAE,QAAQ;CACpB,QAAQ,EAAE,QAAQ;CAClB,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC5B,YAAY,EAAE,SAAS;CACxB,CAAC,CACH,CAAC;AAEF,MAAM,uBAAuB,EAAE,KAAK;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,2BAA2B,EAAE,OAAO;CACxC,OAAO,EAAE,QAAQ;CACjB,KAAK,EAAE,QAAQ;CACf,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,QAAQ,EAAE,QAAQ,CAAC,UAAU;CAC9B,CAAC;AAEF,MAAM,yBAAyB,EAAE,OAAO;CACtC,MAAM;CACN,UAAU,EAAE,KAAK,CAAC,SAAS,UAAU,CAAC;CACtC,SAAS,EAAE,QAAQ;CACnB,UAAU;CACV,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,UAAU;CAChE,CAAC;AAEF,MAAa,uBAAuB,EAAE,OAAO;CAC3C,UAAU,EAAE,QAAQ;CACpB,WAAW,EAAE,QAAQ;CACrB,aAAa,EAAE,MAAM,uBAAuB,CAAC,UAAU;CACvD,SAAS,EAAE,MAAM,mBAAmB,CAAC,UAAU;CAC/C,SAAS,EAAE,MAAM,mBAAmB,CAAC,UAAU;CAC/C,aAAa,EAAE,MAAM,uBAAuB,CAAC,UAAU;CACxD,CAAC;;;;ACtEF,MAAM,wBAAwB,EAAE,OAAO;CACrC,MAAM,EAAE,QAAQ;CAChB,WAAW,EAAE,QAAQ;CACrB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAa,6BAA6B,EAAE,OAAO;CACjD,WAAW,EAAE,QAAQ;CACrB,cAAc,EAAE,QAAQ,CAAC,UAAU;CACnC,YAAY,EAAE,SAAS;CACxB,CAAC;AAEF,MAAa,0BAA0B,EAAE,OAAO;CAC9C,UAAU,EAAE,QAAQ;CACpB,oBAAoB,EAAE,QAAQ;CAC9B,WAAW,EAAE,QAAQ;CACrB,aAAa;CACb,UAAU,EAAE,QAAQ;CACpB,aAAa,EAAE,QAAQ;CACvB,UAAU;CACV,cAAc,EAAE,MAAM,2BAA2B,CAAC,UAAU;CAC7D,CAAC;;;;AClBF,MAAM,0BAA0B;AAUhC,IAAa,qBAAb,cAAwC,YAAiE;CACvG,YAAY,SAAgC;EAC1C,MAAM,YAAY;GAAC,GAAI,QAAQ,mBAAmB,CAAC,YAAY;GAAG,QAAQ;GAAU,QAAQ;GAAY;AAExG,QAAM;GACJ,SAAS,QAAQ;GACjB;GACA,QAAQ;GACR,SAAS,QAAQ,WAAW;GAC7B,CAAC;;CAGJ,KAAK,UAAkB,mBAAqD;EAC1E,MAAM,MAAM,KAAK,aAAa,SAAS;EACvC,MAAM,WAAW,KAAK,QAAQ,IAAI;AAClC,MAAI,CAAC,UAAU;AACb,UAAO;;AAGT,MAAI,SAAS,cAAc,mBAAmB;AAC5C,QAAK,OAAO,SAAS;AACrB,UAAO;;AAGT,SAAO;;CAGT,KAAK,UAA4C;EAC/C,MAAM,MAAM,KAAK,aAAa,SAAS;AACvC,SAAO,KAAK,QAAQ,IAAI;;CAG1B,MAAM,UAAmC;EACvC,MAAM,MAAM,KAAK,aAAa,SAAS,SAAS;AAChD,OAAK,SAAS,KAAK,SAAS;;CAG9B,UAA+C;AAC7C,SAAO,KAAK,aAAa;;;AAI7B,MAAa,wBAAwB,YAAmD,IAAI,mBAAmB,QAAQ;;;;;;;;;;;;;AC/BvH,MAAa,6BAA6B,EACxC,UACA,oBACuE;CACvE,MAAM,eAAe,IAAI,KAAmC;CAE5D,MAAM,iBAAiB,cAA4B;AACjD,MAAI,aAAa,IAAI,UAAU,EAAE;AAC/B;;AAIF,MAAI,CAAC,oBAAoB,UAAU,EAAE;GACnC,MAAM,eAAe,wCAAwC;IAC3D,UAAU,SAAS;IACnB;IACD,CAAC;AACF,gBAAa,IAAI,WAAW;IAC1B;IACA;IACA,YAAY;IACb,CAAC;AACF;;AAIF,MAAI,eAAe;GACjB,MAAM,eAAe,cAAc,QAAQ,UAAU;AACrD,OAAI,cAAc;AAChB,iBAAa,IAAI,WAAW;KAC1B;KACA;KACA,YAAY;KACb,CAAC;AACF;;;AAKJ,eAAa,IAAI,WAAW;GAC1B;GACA,cAAc;GACd,YAAY;GACb,CAAC;;AAGJ,MAAK,MAAM,OAAO,SAAS,SAAS;AAClC,gBAAc,IAAI,OAAO;;AAG3B,MAAK,MAAM,OAAO,SAAS,SAAS;AAClC,MAAI,IAAI,SAAS,YAAY;AAC3B,iBAAc,IAAI,OAAO;;;AAI7B,QAAO,MAAM,KAAK,aAAa,QAAQ,CAAC;;AAG1C,MAAa,oBAAoB,WAA2B;CAC1D,MAAM,SAAS,mBAAmB;AAClC,QAAO,OAAO,KAAK,QAAQ,SAAS;;;;;;;;AC7DtC,MAAM,mBAAmB,IAAI,KAA8B;;;;AAK3D,IAAIC,iBAAmC;;;;AAKvC,eAAe,YAAgC;AAC7C,KAAI,mBAAmB,MAAM;EAC3B,MAAM,EAAE,SAAS,WAAW,MAAM,OAAO;AACzC,mBAAiB,MAAM,QAAQ;;AAEjC,QAAO;;;;;;;;;AAUT,SAAgB,mBAAmB,MAAyD;AAC1F,KAAI;EACF,MAAM,QAAQ,SAAS,KAAK;AAE5B,MAAI,CAAC,MAAM,QAAQ,EAAE;AACnB,UAAO,IAAI;IACT,MAAM;IACN;IACA,SAAS,uBAAuB;IACjC,CAAC;;EAGJ,MAAM,UAAU,MAAM;EACtB,MAAM,SAAS,iBAAiB,IAAI,KAAK;AAGzC,MAAI,UAAU,OAAO,YAAY,SAAS;AACxC,UAAO,GAAG,OAAO;;EAInB,MAAM,WAAW,aAAa,KAAK;EACnC,MAAM,YAAY,MAAM;EAGxB,MAAM,OAAO,gBAAgB,SAAS;EAEtC,MAAMC,cAA+B;GACnC;GACA;GACA;GACD;AAED,mBAAiB,IAAI,MAAM,YAAY;AACvC,SAAO,GAAG,YAAY;UACf,OAAO;AACd,MAAK,MAAgC,SAAS,UAAU;AACtD,UAAO,IAAI;IACT,MAAM;IACN;IACA,SAAS,mBAAmB;IAC7B,CAAC;;AAGJ,SAAO,IAAI;GACT,MAAM;GACN;GACA,SAAS,wBAAwB;GAClC,CAAC;;;;;;;;AASN,SAAS,gBAAgB,UAA0B;AAEjD,KAAI,mBAAmB,MAAM;EAC3B,MAAM,OAAO,eAAe,OAAO,IAAI,WAAW,SAAS,CAAC;AAC5D,SAAO,KAAK,SAAS,GAAG;;AAI1B,MAAK,WAAW;AAGhB,QAAO,WAAW,SAAS;;;;;AAM7B,SAAS,WAAW,QAAwB;CAC1C,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,WAAW;AACtB,WAAQ,QAAQ,KAAK,OAAO;AAC5B,UAAO,OAAO;;;AAGlB,QAAO,KAAK,SAAS,GAAG;;;;;;;;;;;AAY1B,SAAgB,8BACd,MACA,OACA,SACiB;CAEjB,MAAM,SAAS,iBAAiB,IAAI,KAAK;AACzC,KAAI,UAAU,OAAO,YAAY,MAAM,SAAS;AAC9C,SAAO;;CAIT,MAAM,SAAS,OAAO,KAAK,SAAS,QAAQ;CAC5C,MAAM,OAAO,gBAAgB,OAAO;CAEpC,MAAMA,cAA+B;EACnC;EACA,WAAW,MAAM;EACjB,SAAS,MAAM;EAChB;AAED,kBAAiB,IAAI,MAAM,YAAY;AACvC,QAAO;;;;;;;AAQT,SAAgB,sBAAsB,MAAoB;AACxD,kBAAiB,OAAO,KAAK;;;;;AAM/B,SAAgB,wBAA8B;AAC5C,kBAAiB,OAAO;;;;;;;;;ACpK1B,MAAM,qBAAqB;CAAC;CAAO;CAAQ;CAAQ;CAAO;;;;;AAM1D,MAAM,YAAY,aAA8B;CAC9C,MAAM,MAAM,QAAQ,SAAS,CAAC,aAAa;AAC3C,QAAQ,mBAAyC,SAAS,IAAI;;;;;;AA4BhE,UAAiB,mBAAmB,EAClC,YACA,aACA,eACA,eACiE;CACjE,MAAM,YAAY,IAAI,KAAgC;CACtD,MAAM,QAAQ,CAAC,GAAG,WAAW;CAC7B,MAAM,eAAe,aAAa,gBAAgB,IAAI,KAAa;CACnE,MAAM,eAAe,aAAa,gBAAgB,IAAI,KAAa;CACnE,MAAM,gBAAgB,aAAa,iBAAiB,IAAI,KAAa;CACrE,MAAM,iBAAiB,IAAI,IAAY;EAAC,GAAG;EAAc,GAAG;EAAc,GAAG;EAAc,CAAC;CAC5F,IAAI,YAAY;CAChB,IAAI,cAAc;CAClB,IAAI,aAAa;AAEjB,KAAI,aAAa;AACf,OAAK,MAAM,YAAY,cAAc;AACnC,eAAY,MAAM,OAAO,SAAS;AAClC,yBAAsB,SAAS;;;AAInC,QAAO,MAAM,SAAS,GAAG;EACvB,MAAM,cAAc,MAAM,KAAK;AAC/B,MAAI,CAAC,aAAa;AAChB;;EAIF,MAAM,WAAW,cAAc,YAAY;AAE3C,MAAI,UAAU,IAAI,SAAS,EAAE;AAC3B;;EAIF,IAAI,iBAAiB;AACrB,MAAI,eAAe,IAAI,SAAS,EAAE;AAChC,yBAAsB,SAAS;AAC/B;aAES,aAAa;GAEtB,MAAM,SAAS,YAAY,MAAM,KAAK,SAAS;AAE/C,OAAI,QAAQ;IAEV,MAAMC,UAAQ,OAAO,IAAI,uBAAuB,SAAS,CAAC,KAAK;AAE/D,QAAIA,SAAO;KACT,MAAM,UAAUA,QAAM;KACtB,MAAM,YAAYA,QAAM;AAGxB,SAAI,OAAO,YAAY,YAAY,WAAW,OAAO,YAAY,cAAc,WAAW;AACxF,gBAAU,IAAI,UAAU,OAAO;AAC/B;AAEA,WAAK,MAAM,OAAO,OAAO,cAAc;AACrC,WAAI,IAAI,gBAAgB,CAAC,UAAU,IAAI,IAAI,aAAa,EAAE;AACxD,cAAM,KAAK,IAAI,aAAa;;;AAGhC,uBAAiB;;;;;AAOzB,MAAI,CAAC,gBAAgB;AACnB;;EAIF,MAAM,SAAS,OAAO,IAAI,uBAAuB,SAAS,CAAC,KAAK;AAEhE,MAAI,WAAW,MAAM;AAEnB,gBAAa,MAAM,OAAO,SAAS;AACnC,yBAAsB,SAAS;AAC/B;;EAGF,MAAM,YAAY,iBAAiB,OAAO;EAG1C,IAAIC;AACJ,MAAI,SAAS,SAAS,EAAE;AAItB,cAAW;IACT;IACA;IACA,aAAa,EAAE;IACf,SAAS,EAAE;IACX,SAAS,EAAE;IACX,aAAa,EAAE;IAChB;SACI;AACL,cAAW,YAAY,QAAQ;IAAE;IAAU;IAAQ,CAAC;;AAEtD;EAGA,MAAM,eAAe,0BAA0B;GAAE;GAAU;GAAe,CAAC;AAG3E,OAAK,MAAM,OAAO,cAAc;AAC9B,OAAI,CAAC,IAAI,cAAc,IAAI,gBAAgB,CAAC,UAAU,IAAI,IAAI,aAAa,EAAE;AAC3E,UAAM,KAAK,IAAI,aAAa;;;EAKhC,MAAM,QAAS,OAAO,IAAI,uBAAuB,SAAS,CAAC,KAAK;EAGhE,MAAM,cAAc,8BAA8B,UAAU,OAAO,OAAO;EAG1E,MAAMC,WAA8B;GAClC;GACA,oBAAoB,cAAc,SAAS;GAC3C;GACA;GACA,UAAU,YAAY;GACtB,aAAa,KAAK,KAAK;GACvB;GACA;GACD;AAED,YAAU,IAAI,UAAU,SAAS;AAGjC,MAAI,aAAa;AACf,eAAY,MAAM,MAAM,SAAS;;;AAIrC,QAAO;EACL,WAAW,MAAM,KAAK,UAAU,QAAQ,CAAC;EACzC;EACA;EACA;EACD;;;;;;;;;;AAWH,MAAa,mBAAmB,YAA0E;CACxG,MAAM,YAAY,qBAAqB;CACvC,MAAM,SAAS,UAAU,UAAU,mBAAmB,QAAQ,CAAC;AAE/D,KAAI,OAAO,OAAO,EAAE;EAClB,MAAM,QAAQ,OAAO;AAErB,SAAO,IAAI,cAAc,iBAAiB,WAAW,MAAM,QAAQ,CAAC;;AAGtE,QAAO,GAAG,OAAO,MAAM;;;;;;;;AASzB,MAAa,uBAAuB,OAAO,YAAmF;CAC5H,MAAM,YAAY,sBAAsB;CACxC,MAAM,SAAS,MAAM,UAAU,UAAU,mBAAmB,QAAQ,CAAC;AAErE,KAAI,OAAO,OAAO,EAAE;EAClB,MAAM,QAAQ,OAAO;AAErB,SAAO,IAAI,cAAc,iBAAiB,WAAW,MAAM,QAAQ,CAAC;;AAGtE,QAAO,GAAG,OAAO,MAAM;;;;;;;;;;;;AChLzB,MAAa,0BAAuC;CAElD,IAAIC,cAAwB,EAC1B,OAAO,IAAI,KAAK,EACjB;CACD,IAAIC,WAA4B;CAEhC,MAAMC,UAAQ,eAAkE;EAC9E,MAAM,iBAAiB,IAAI,IAAI,CAAC,GAAG,YAAY,GAAG,YAAY,MAAM,MAAM,CAAC,CAAC;EAC5E,MAAM,QAAQ,IAAI,KAA2B;AAE7C,OAAK,MAAM,QAAQ,gBAAgB;AACjC,OAAI;IACF,MAAM,aAAa,cAAc,KAAK;IACtC,MAAM,QAAQ,SAAS,WAAW;AAElC,UAAM,IAAI,YAAY;KACpB,SAAS,MAAM;KACf,MAAM,MAAM;KACb,CAAC;WACI;;AAGV,aAAW,EAAE,OAAO;AACpB,SAAO,GAAG,SAAS;;CAGrB,MAAM,sBAAgC;EACpC,MAAM,WAAW;EACjB,MAAM,UAAU,YAAY;EAC5B,MAAM,QAAQ,IAAI,KAAa;EAC/B,MAAM,UAAU,IAAI,KAAa;EACjC,MAAM,UAAU,IAAI,KAAa;AAGjC,OAAK,MAAM,CAAC,MAAM,oBAAoB,QAAQ,OAAO;GACnD,MAAM,mBAAmB,SAAS,MAAM,IAAI,KAAK;AAEjD,OAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI,KAAK;cACN,iBAAiB,YAAY,gBAAgB,WAAW,iBAAiB,SAAS,gBAAgB,MAAM;AACjH,YAAQ,IAAI,KAAK;;;AAKrB,OAAK,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE;AACxC,OAAI,CAAC,QAAQ,MAAM,IAAI,KAAK,EAAE;AAC5B,YAAQ,IAAI,KAAK;;;AAIrB,SAAO;GAAE;GAAO;GAAS;GAAS;;CAGpC,MAAM,UAAU,WAAyB;AAEvC,gBAAcA;AACd,aAAW;;AAGb,QAAO;EACL;EACA;EACA;EACD;;;;;AAMH,MAAa,eAAe,SAA4B;AACtD,QAAO,KAAK,MAAM,SAAS,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS;;;;;AClInF,MAAa,8BAA8B,EACzC,UACA,qBACA,oBAKwC;AACxC,MAAK,MAAM,YAAY,SAAS,QAAQ,EAAE;AACxC,OAAK,MAAM,EAAE,QAAQ,gBAAgB,SAAS,SAAS;AACrD,OAAI,YAAY;AACd;;AAGF,OAAI,oBAAoB,OAAO,EAAE;AAE/B,QAAI,oBAAoB,+BAA+B;KAAE,UAAU,SAAS;KAAU,WAAW;KAAQ,CAAC,EAAE;AAC1G;;IAGF,MAAM,iBAAiB,oCAAoC;KACzD,UAAU,SAAS;KACnB,WAAW;KACX,YAAY;KACb,CAAC;AACF,QAAI,CAAC,gBAAgB;AAEnB,YAAO,IAAI;MACT,MAAM;MACN,OAAO,CAAC,SAAS,UAAU,OAAO;MACnC,CAAC;;cAEK,eAAe;IAGxB,MAAM,gBAAgB,cAAc,QAAQ,OAAO;AACnD,QAAI,iBAAiB,CAAC,SAAS,IAAI,cAAc,EAAE;AACjD,YAAO,IAAI;MACT,MAAM;MACN,OAAO,CAAC,SAAS,UAAU,OAAO;MACnC,CAAC;;;;;AAMV,QAAO,GAAG,KAAK;;;;;;;;;;ACjDjB,MAAa,0BAA0B,EACrC,gBAG8B;CAC9B,MAAM,kBAAkB,IAAI,KAA0B;AAEtD,MAAK,MAAM,YAAY,UAAU,QAAQ,EAAE;EACzC,MAAM,EAAE,oBAAoB,cAAc,aAAa;EACvD,MAAM,UAAU,IAAI,KAAa;AAGjC,OAAK,MAAM,EAAE,kBAAkB,cAAc;AAC3C,OAAI,gBAAgB,iBAAiB,sBAAsB,UAAU,IAAI,aAAa,EAAE;AACtF,YAAQ,IAAI,aAAa;;;AAK7B,MAAI,aAAa,WAAW,KAAK,SAAS,QAAQ,SAAS,GAAG;AAC5D,QAAK,MAAM,OAAO,SAAS,SAAS;AAClC,QAAI,IAAI,YAAY;AAClB;;IAGF,MAAM,WAAW,oCAAoC;KACnD,UAAU;KACV,WAAW,IAAI;KACf,YAAY;KACb,CAAC;AACF,QAAI,UAAU;AACZ,aAAQ,IAAI,SAAS;;;;AAK3B,MAAI,QAAQ,OAAO,GAAG;AACpB,mBAAgB,IAAI,oBAAoB,QAAQ;;;CAKpD,MAAM,YAAY,IAAI,KAA0B;AAEhD,MAAK,MAAM,CAAC,UAAU,YAAY,iBAAiB;AACjD,OAAK,MAAM,YAAY,SAAS;AAC9B,OAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC5B,cAAU,IAAI,UAAU,IAAI,KAAK,CAAC;;AAEpC,aAAU,IAAI,SAAS,EAAE,IAAI,SAAS;;;AAK1C,MAAK,MAAM,cAAc,UAAU,MAAM,EAAE;AACzC,MAAI,CAAC,UAAU,IAAI,WAAW,EAAE;AAC9B,aAAU,IAAI,YAAY,IAAI,KAAK,CAAC;;;AAIxC,QAAO;;;;;;;AAQT,MAAa,wBAAwB,UAIlB;CACjB,MAAM,EAAE,cAAc,cAAc,4BAA4B;CAChE,MAAM,WAAW,IAAI,IAAY,CAAC,GAAG,cAAc,GAAG,aAAa,CAAC;CACpE,MAAM,QAAQ,CAAC,GAAG,aAAa;CAC/B,MAAM,UAAU,IAAI,IAAY,aAAa;AAE7C,QAAO,MAAM,SAAS,GAAG;EACvB,MAAM,UAAU,MAAM,OAAO;AAC7B,MAAI,CAAC,QAAS;EAEd,MAAM,aAAa,wBAAwB,IAAI,QAAQ;AAEvD,MAAI,YAAY;AACd,QAAK,MAAM,aAAa,YAAY;AAClC,QAAI,CAAC,QAAQ,IAAI,UAAU,EAAE;AAC3B,aAAQ,IAAI,UAAU;AACtB,cAAS,IAAI,UAAU;AACvB,WAAM,KAAK,UAAU;;;;;AAM7B,QAAO;;;;;;;;;AC4CT,MAAM,mBAAmB;CACvB,YAAY;CACZ,WAAW,IAAI,KAAmB;CACnC;;;;;AAMD,MAAM,uBAAuB,iBAAqC;AAChE,kBAAiB,UAAU,IAAI,aAAa;AAE5C,KAAI,CAAC,iBAAiB,YAAY;AAChC,mBAAiB,aAAa;AAC9B,UAAQ,GAAG,oBAAoB;AAE7B,QAAK,MAAM,WAAW,iBAAiB,WAAW;AAChD,YAAQ,MAAM;;IAEhB;;;;;;AAON,MAAM,yBAAyB,iBAAqC;AAClE,kBAAiB,UAAU,OAAO,aAAa;;;;;;AAOjD,MAAa,mCAAyC;AACpD,kBAAiB,aAAa;AAC9B,kBAAiB,UAAU,OAAO;;;;;;;AAQpC,MAAa,wBAAwB,YAIf;CACpB,MAAM,SAAS,QAAQ;CACvB,MAAM,cAAc,QAAQ,eAAe;CAC3C,MAAMC,cAAmC,IAAI,IAAI,QAAQ,uBAAuB,OAAO,QAAQ;CAG/F,MAAMC,QAAsB;EAC1B,KAAK;EACL,WAAW,IAAI,KAAK;EACpB,iBAAiB,IAAI,KAAK;EAC1B,qBAAqB,IAAI,KAAK;EAC9B,cAAc;EACd,0BAA0B;EAC3B;CAGD,MAAM,eAAe,kBAAkB;EACrC,QAAQ,CAAC,UAAU;EACnB,aAAa;GACX,SAAS;GACT,UAAU,KAAK,QAAQ,KAAK,EAAE,gBAAgB,UAAU,YAAY,WAAW,aAAa;GAC7F;EACF,CAAC;AAGF,qBAAoB,aAAa;CAEjC,MAAM,gBAAgB,kCAAkC,OAAO;CAC/D,MAAM,oBAAoB,eACxB,kBAAkB;EAChB,UAAU,OAAO;EACjB;EACA,SAAS,OAAO;EACjB,CAAC,CACH;CACD,MAAM,uBAAuB,eAC3B,qBAAqB;EACnB,SAAS;EACT,UAAU,OAAO;EACjB;EACD,CAAC,CACH;CACD,MAAM,oBAAoB,eAAe,mBAAmB,CAAC;;;;;CAM7D,MAAM,qBACJ,UAIG;EAEH,MAAM,mBAAmB,kBAAkB,MAAM,KAAK,YAAY,EAAE,OAAO,QAAQ;AACnF,MAAI,iBAAiB,OAAO,EAAE;AAC5B,UAAO,IAAI,iBAAiB,MAAM;;EAEpC,MAAM,aAAa,iBAAiB;EAGpC,MAAM,UAAU,mBAAmB;EACnC,MAAM,aAAa,QAAQ,KAAK,WAAW;AAC3C,MAAI,WAAW,OAAO,EAAE;GACtB,MAAM,eAAe,WAAW;AAChC,UAAO,IACL,cAAc,iBACZ,aAAa,SAAS,gBAAgB,aAAa,OAAO,WAC1D,yBAAyB,aAAa,UACvC,CACF;;EAIH,MAAM,cAAc,WAAW;EAC/B,MAAM,OAAO,QAAQ,eAAe;EAGpC,MAAM,gBAAgB,QAAQ;GAC5B;GACA;GACA,cAAc,MAAM;GACpB;GACD,CAAC;AACF,MAAI,cAAc,OAAO,EAAE;AACzB,UAAO,IAAI,cAAc,MAAM;;AAGjC,MAAI,cAAc,MAAM,SAAS,eAAe;AAC9C,UAAO,GAAG;IAAE,MAAM;IAAQ,UAAU,cAAc,MAAM,KAAK;IAAU,CAAC;;EAG1E,MAAM,EAAE,cAAc,iBAAiB,cAAc,MAAM;AAE3D,SAAO,GAAG;GACR,MAAM;GACN,OAAO;IACL;IACA,aAAa,mBAAmB;IAChC,eAAe,OAAO,gBAAgB,oBAAoB,OAAO,cAAc,GAAG;IAClF,gBAAgB,sBAAsB;IACtC;IACA;IACA,yBAAyB,MAAM;IAC/B,6BAA6B,MAAM;IACnC,mBAAmB,QAAQ,OAAO,QAAQ,WAAW;IACrD;IACD;GACD;GACD,CAAC;;;;;CAMJ,MAAM,iBAAiB,WAA2B,gBAAiE;EACjH,MAAM,EAAE,WAAW,UAAU,wBAAwB,qBAAqB,UAAU,UAAU;EAG9F,MAAM,iBAAiB,cAAc;GACnC;GACA;GACA;GACD,CAAC;AAEF,MAAI,eAAe,OAAO,EAAE;AAC1B,UAAO,IAAI,eAAe,MAAM;;AAIlC,QAAM;AACN,QAAM,YAAY;AAClB,QAAM,kBAAkB;AACxB,QAAM,eAAe,eAAe;AACpC,QAAM,sBAAsB;AAC5B,QAAM,2BAA2B;AAGjC,qBAAmB,CAAC,OAAO,YAAY;AAEvC,SAAO,GAAG,eAAe,MAAM;;;;;;CAOjC,MAAM,SAAS,cAAkE;EAC/E,MAAM,aAAa,kBAAkBC,WAAS,SAAS,MAAM;AAC7D,MAAI,WAAW,OAAO,EAAE;AACtB,UAAO,IAAI,WAAW,MAAM;;AAG9B,MAAI,WAAW,MAAM,SAAS,QAAQ;AACpC,UAAO,GAAG,WAAW,MAAM,SAAS;;EAGtC,MAAM,EAAE,OAAO,gBAAgB,WAAW;EAC1C,MAAM,YAAY,qBAAqB;AAEvC,MAAI;GACF,MAAM,SAAS,UAAU,UAAU,SAAS;IAAE,GAAG;IAAO,SAASA,WAAS;IAAS,CAAC,CAAC;AAErF,OAAI,OAAO,OAAO,EAAE;AAClB,WAAO,IAAI,sBAAsB,OAAO,MAAM,CAAC;;AAGjD,UAAO,cAAc,OAAO,OAAO,YAAY;WACxC,OAAO;AAEd,OAAI,eAAe,MAAM,EAAE;AACzB,WAAO,IAAI,MAAM;;AAEnB,SAAM;;;;;;;CAQV,MAAM,aAAa,OAAO,cAA2E;EACnG,MAAM,aAAa,kBAAkBA,WAAS,SAAS,MAAM;AAC7D,MAAI,WAAW,OAAO,EAAE;AACtB,UAAO,IAAI,WAAW,MAAM;;AAG9B,MAAI,WAAW,MAAM,SAAS,QAAQ;AACpC,UAAO,GAAG,WAAW,MAAM,SAAS;;EAGtC,MAAM,EAAE,OAAO,gBAAgB,WAAW;EAC1C,MAAM,YAAY,sBAAsB;AAExC,MAAI;GACF,MAAM,SAAS,MAAM,UAAU,UAAU,SAAS;IAAE,GAAG;IAAO,SAASA,WAAS;IAAS,CAAC,CAAC;AAE3F,OAAI,OAAO,OAAO,EAAE;AAClB,WAAO,IAAI,sBAAsB,OAAO,MAAM,CAAC;;AAGjD,UAAO,cAAc,OAAO,OAAO,YAAY;WACxC,OAAO;AAEd,OAAI,eAAe,MAAM,EAAE;AACzB,WAAO,IAAI,MAAM;;AAEnB,SAAM;;;AAIV,QAAO;EACL;EACA;EACA,qBAAqB,MAAM;EAC3B,0BAA0B,MAAM;EAChC,+BAA+B,MAAM;EACrC,eAAe;AACb,gBAAa,MAAM;AAEnB,yBAAsB,aAAa;;EAEtC;;AAGH,MAAM,WAAW,UAKX;CACJ,MAAM,EAAE,MAAM,cAAc,UAAU;CAGtC,MAAM,eAAe,IAAI,IAAY,CAAC,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC;CACtE,MAAM,eAAe,KAAK;AAM1B,KAAI,CAAC,SAAS,YAAY,KAAK,IAAI,cAAc;AAC/C,SAAO,GAAG;GAAE,MAAM;GAAwB,MAAM,EAAE,UAAU,cAAc;GAAE,CAAC;;AAG/E,QAAO,GAAG;EAAE,MAAM;EAAyB,MAAM;GAAE;GAAc;GAAc;EAAE,CAAC;;;;;;AAOpF,UAAU,SAAS,OAAuD;CACxE,MAAM,EACJ,YACA,aACA,eACA,gBACA,cACA,cACA,yBACA,6BACA,mBACA,eACA,YACE;CAGJ,MAAM,gBAAgB,qBAAqB;EACzC;EACA;EACA;EACD,CAAC;CAGF,MAAM,kBAAkB,OAAO,mBAAmB;EAChD;EACA;EACA;EACA,aAAa;GACX,OAAO;GACP;GACA;GACA;GACD;EACF,CAAC;AAGF,UAAS,kBAAkB;CAE3B,MAAM,EAAE,WAAW,aAAa,eAAe;CAE/C,MAAM,YAAY,IAAI,IAAI,gBAAgB,UAAU,KAAK,aAAa,CAAC,SAAS,oBAAoB,SAAS,CAAC,CAAC;CAC/G,MAAM,WAAW,IAAI,IAAI,gBAAgB,UAAU,KAAK,aAAa,CAAC,SAAS,oBAAoB,SAAS,SAAS,CAAC,CAAC;CAGvH,MAAM,+BAA+B,2BAA2B;EAC9D;EACA,qBAAqB;EACrB;EACD,CAAC;AACF,KAAI,6BAA6B,OAAO,EAAE;EACxC,MAAM,QAAQ,6BAA6B;AAC3C,QAAM,cAAc,mBAAmB,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG;;CAGxE,MAAM,yBAAyB,uBAAuB,EAAE,WAAW,CAAC;CAEpE,MAAMC,QAAyB;EAC7B,MAAM;EACN,QAAQ;EACR,OAAO;EACR;CAGD,MAAM,sBAAsB,IAAI,IAAI,4BAA4B;CAGhE,MAAM,cAAc,IAAI,IAAI,cAAc;AAC1C,MAAK,MAAM,YAAY,SAAS,MAAM,EAAE;AACtC,MAAI,CAAC,4BAA4B,IAAI,SAAS,EAAE;AAC9C,eAAY,IAAI,SAAS;;;AAI7B,KAAI,YAAY,SAAS,GAAG;AAC1B,OAAK,MAAM,YAAY,SAAS,MAAM,EAAE;AACtC,eAAY,IAAI,SAAS;;;AAK7B,MAAK,MAAM,kBAAkB,aAAa;AACxC,sBAAoB,OAAO,eAAe;;AAI5C,MAAK,MAAM,sBAAsB,4BAA4B;EAAE;EAAU;EAAa;EAAmB;EAAe,CAAC,EAAE;AACzH,sBAAoB,IAAI,mBAAmB,UAAU,mBAAmB;;AAI1E,UAAS,wBAAwB;CAGjC,MAAM,WAAW,OAAO,+BAA+B;EAAE;EAAqB;EAAmB;EAAU,CAAC;AAG5G,UAAS,mBAAmB;AAE5B,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;;;;;AAOH,MAAM,yBAAyB,UAAwC;AAErE,KAAI,eAAe,MAAM,MAAM,EAAE;AAC/B,SAAO,MAAM;;AAEf,QAAO,cAAc,kBAAkB,MAAM,SAAS,aAAa,MAAM,MAAM;;;;;;;;;;;;;;;;;;AC3djF,MAAa,wBAAwB,EAAE,QAAQ,0BAAgE;CAC7G,MAAM,UAAU,qBAAqB;EAAE;EAAQ;EAAqB,CAAC;AAErE,QAAO;EACL,QAAQ,YAAY,QAAQ,MAAM,QAAQ;EAC1C,aAAa,YAAY,QAAQ,WAAW,QAAQ;EACpD,qBAAqB,QAAQ,eAAe;EAC5C,0BAA0B,QAAQ,oBAAoB;EACtD,+BAA+B,QAAQ,yBAAyB;EAChE,eAAe,QAAQ,SAAS;EACjC"}