@kb-labs/core-config 2.88.0 → 2.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import * as ajv from 'ajv';
2
3
 
3
4
  type Diagnostic = {
4
5
  level: "warn" | "error";
@@ -62,7 +63,7 @@ interface ResolveOptions {
62
63
  }
63
64
  interface ConfigLayer {
64
65
  label: string;
65
- value: any;
66
+ value: unknown;
66
67
  source: string;
67
68
  }
68
69
  interface ProductConfigResult<T = Record<string, any>> {
@@ -84,7 +85,7 @@ declare function findNearestConfig(opts: FindNearestConfigOpts): Promise<{
84
85
  }>;
85
86
  declare function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>>;
86
87
  /** Shallow pick of defined fields only. */
87
- declare function pickDefined<T extends Record<string, any>>(obj: T | undefined): Partial<T>;
88
+ declare function pickDefined<T extends Record<string, unknown>>(obj: T | undefined): Partial<T>;
88
89
  /** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */
89
90
  declare function mergeDefined<T>(base: T, over?: Partial<T>): T;
90
91
  /**
@@ -196,8 +197,8 @@ declare function getLockfilePath(cwd: string): string;
196
197
  declare class KbError extends Error {
197
198
  code: string;
198
199
  hint?: string | undefined;
199
- meta?: any | undefined;
200
- constructor(code: string, message: string, hint?: string | undefined, meta?: any | undefined);
200
+ meta?: unknown | undefined;
201
+ constructor(code: string, message: string, hint?: string | undefined, meta?: unknown | undefined);
201
202
  }
202
203
  /**
203
204
  * Maps KbError codes to CLI exit codes
@@ -238,11 +239,11 @@ declare class FSCache {
238
239
  /**
239
240
  * Get cached file data if available and not stale
240
241
  */
241
- get(absPath: string): Promise<any | null>;
242
+ get(absPath: string): Promise<unknown>;
242
243
  /**
243
244
  * Cache file data
244
245
  */
245
- set(absPath: string, data: any): Promise<void>;
246
+ set(absPath: string, data: unknown): Promise<void>;
246
247
  /**
247
248
  * Clear all caches
248
249
  */
@@ -271,13 +272,13 @@ declare function clearCaches(): void;
271
272
  * @param obj Configuration object to hash
272
273
  * @returns SHA256 hash as hex string
273
274
  */
274
- declare function computeConfigHash(obj: any): string;
275
+ declare function computeConfigHash(obj: unknown): string;
275
276
  /**
276
277
  * Compute hash for multiple config objects
277
278
  * @param configs Array of config objects
278
279
  * @returns Combined SHA256 hash
279
280
  */
280
- declare function computeConfigsHash(configs: any[]): string;
281
+ declare function computeConfigsHash(configs: Record<string, unknown>[]): string;
281
282
 
282
283
  /**
283
284
  * @module @kb-labs/core/config/api/read-config
@@ -319,7 +320,7 @@ declare function readKbConfig(cwd: string): Promise<KbConfigResult | null>;
319
320
  */
320
321
 
321
322
  interface LayeredMergeResult {
322
- merged: any;
323
+ merged: Record<string, unknown>;
323
324
  trace: MergeTrace[];
324
325
  }
325
326
  /**
@@ -329,25 +330,20 @@ interface LayeredMergeResult {
329
330
  */
330
331
  declare function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult;
331
332
 
332
- /**
333
- * @module @kb-labs/core/config/api/product-config
334
- * High-level product configuration resolver with layered merge
335
- */
336
-
337
333
  /**
338
334
  * Get product configuration with layered merge and trace
339
335
  */
340
- declare function getProductConfig<T = Record<string, any>>(opts: ResolveOptions, schema: any): Promise<ProductConfigResult<T>>;
336
+ declare function getProductConfig<T = Record<string, unknown>>(opts: ResolveOptions, schema: unknown): Promise<ProductConfigResult<T>>;
341
337
  /**
342
338
  * Explain product configuration (trace only)
343
339
  */
344
- declare function explainProductConfig(opts: Omit<ResolveOptions, 'writeFinal'>, schema: any): Promise<{
345
- trace: any[];
340
+ declare function explainProductConfig(opts: Omit<ResolveOptions, 'writeFinal'>, schema: unknown): Promise<{
341
+ trace: MergeTrace[];
346
342
  }>;
347
343
  /**
348
344
  * Get configuration hash for lockfile
349
345
  */
350
- declare function getConfigHash(config: any): string;
346
+ declare function getConfigHash(config: unknown): string;
351
347
 
352
348
  /**
353
349
  * @module @kb-labs/core/config/preset/resolve-preset
@@ -357,7 +353,7 @@ interface PresetInfo {
357
353
  name: string;
358
354
  version: string;
359
355
  path: string;
360
- config: any;
356
+ config: Record<string, unknown>;
361
357
  }
362
358
  /**
363
359
  * Resolve org preset package (offline-first)
@@ -366,7 +362,7 @@ declare function resolvePreset(presetRef: string, cwd: string): Promise<PresetIn
366
362
  /**
367
363
  * Get preset config for a specific product
368
364
  */
369
- declare function getPresetConfigForProduct(preset: PresetInfo, product: string): any;
365
+ declare function getPresetConfigForProduct(preset: PresetInfo, product: string): Record<string, unknown>;
370
366
  /**
371
367
  * Get preset metadata
372
368
  */
@@ -405,20 +401,20 @@ declare function updateLockfile(cwd: string, updates: {
405
401
  orgPreset?: string;
406
402
  profile?: string;
407
403
  policyBundle?: string;
408
- configHashes?: Record<string, any>;
404
+ configHashes?: Record<string, unknown>;
409
405
  }): Promise<LockfileData>;
410
406
  /**
411
407
  * Get config hash for a product
412
408
  */
413
- declare function getLockfileConfigHash(product: string, config: any): string;
409
+ declare function getLockfileConfigHash(product: string, config: unknown): string;
414
410
  /**
415
411
  * Check if lockfile is up to date
416
412
  */
417
- declare function isLockfileUpToDate(cwd: string, configs: Record<string, any>): Promise<boolean>;
413
+ declare function isLockfileUpToDate(cwd: string, configs: Record<string, unknown>): Promise<boolean>;
418
414
  /**
419
415
  * Validate lockfile schema
420
416
  */
421
- declare function validateLockfile(lockfileData: any): lockfileData is LockfileData;
417
+ declare function validateLockfile(lockfileData: unknown): lockfileData is LockfileData;
422
418
  /**
423
419
  * Get lockfile statistics
424
420
  */
@@ -1031,7 +1027,7 @@ declare function ensureWithinWorkspace(targetPath: string, workspaceRoot: string
1031
1027
 
1032
1028
  type ValidationResult = {
1033
1029
  ok: boolean;
1034
- errors: any[] | null;
1030
+ errors: ajv.ErrorObject[] | null;
1035
1031
  };
1036
1032
  declare function validateProductConfig(product: string, config: unknown): ValidationResult;
1037
1033
 
package/dist/index.js CHANGED
@@ -206,15 +206,16 @@ function mergeDefined(base, over) {
206
206
  return [...base, ...over.filter((v) => v !== void 0)];
207
207
  }
208
208
  if (isPlainObject(base) && isPlainObject(over)) {
209
- const out = { ...base };
209
+ const baseObj = base;
210
+ const out = { ...baseObj };
210
211
  for (const [k, v] of Object.entries(over)) {
211
212
  if (v === void 0) {
212
213
  continue;
213
214
  }
214
- if (isPlainObject(base[k]) && isPlainObject(v)) {
215
- out[k] = mergeDefined(base[k], v);
216
- } else if (Array.isArray(base[k]) && Array.isArray(v)) {
217
- out[k] = mergeDefined(base[k], v);
215
+ if (isPlainObject(baseObj[k]) && isPlainObject(v)) {
216
+ out[k] = mergeDefined(baseObj[k], v);
217
+ } else if (Array.isArray(baseObj[k]) && Array.isArray(v)) {
218
+ out[k] = mergeDefined(baseObj[k], v);
218
219
  } else {
219
220
  out[k] = v;
220
221
  }
@@ -503,10 +504,11 @@ function normalizeForHash(obj) {
503
504
  if (Array.isArray(obj)) {
504
505
  return obj.map(normalizeForHash);
505
506
  }
506
- const sortedKeys = Object.keys(obj).sort();
507
+ const record = obj;
508
+ const sortedKeys = Object.keys(record).sort();
507
509
  const normalized = {};
508
510
  for (const key of sortedKeys) {
509
- const value = obj[key];
511
+ const value = record[key];
510
512
  if (value !== void 0) {
511
513
  normalized[key] = normalizeForHash(value);
512
514
  }
@@ -559,7 +561,7 @@ function stripJsonComments2(src) {
559
561
  async function readConfigFile(filePath) {
560
562
  const absPath = path3.resolve(filePath);
561
563
  const cached = await fsCache.get(absPath);
562
- if (cached !== null) {
564
+ if (cached !== null && cached !== void 0) {
563
565
  return cached;
564
566
  }
565
567
  try {
@@ -689,7 +691,7 @@ async function readKbConfig(cwd) {
689
691
  // src/merge/layered-merge.ts
690
692
  function layeredMergeWithTrace(layers) {
691
693
  const trace = [];
692
- const isPlainObject2 = (v) => v && typeof v === "object" && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
694
+ const isPlainObject2 = (v) => v !== null && typeof v === "object" && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
693
695
  const merge = (base, overlay, layer, path12 = []) => {
694
696
  if (Array.isArray(base) && Array.isArray(overlay)) {
695
697
  trace.push({
@@ -823,7 +825,11 @@ function versionMatches(actualVersion, requiredVersion) {
823
825
  }
824
826
  function getPresetConfigForProduct(preset, product) {
825
827
  const fsProduct = toFsProduct(product);
826
- return preset.config.products?.[fsProduct] || {};
828
+ const products = preset.config["products"];
829
+ if (products && typeof products === "object" && !Array.isArray(products)) {
830
+ return products[fsProduct] ?? {};
831
+ }
832
+ return {};
827
833
  }
828
834
  function getPresetMetadata(preset) {
829
835
  return {
@@ -851,8 +857,8 @@ async function readLockfile(cwd) {
851
857
  function stableStringify(obj, space = 2) {
852
858
  return JSON.stringify(obj, (key, value) => {
853
859
  if (value && typeof value === "object" && !Array.isArray(value)) {
854
- return Object.keys(value).sort().reduce((sorted, key2) => {
855
- sorted[key2] = value[key2];
860
+ return Object.keys(value).sort().reduce((sorted, k) => {
861
+ sorted[k] = value[k];
856
862
  return sorted;
857
863
  }, {});
858
864
  }
@@ -912,13 +918,14 @@ function validateLockfile(lockfileData) {
912
918
  if (!lockfileData || typeof lockfileData !== "object") {
913
919
  return false;
914
920
  }
915
- if (lockfileData.schemaVersion !== "1.0") {
921
+ const data = lockfileData;
922
+ if (data["schemaVersion"] !== "1.0") {
916
923
  return false;
917
924
  }
918
- if (!lockfileData.hashes || typeof lockfileData.hashes !== "object") {
925
+ if (!data["hashes"] || typeof data["hashes"] !== "object") {
919
926
  return false;
920
927
  }
921
- if (!lockfileData.generatedAt || typeof lockfileData.generatedAt !== "string") {
928
+ if (!data["generatedAt"] || typeof data["generatedAt"] !== "string") {
922
929
  return false;
923
930
  }
924
931
  return true;
@@ -969,17 +976,17 @@ async function getProductConfig(opts, schema) {
969
976
  let presetConfig = {};
970
977
  if (workspaceConfig?.data) {
971
978
  const workspaceData = workspaceConfig.data;
972
- if (workspaceData.$extends) {
979
+ if (workspaceData["$extends"]) {
973
980
  try {
974
- const preset = await resolvePreset(workspaceData.$extends, cwd);
981
+ const preset = await resolvePreset(workspaceData["$extends"], cwd);
975
982
  presetConfig = getPresetConfigForProduct(preset, product);
976
983
  layers.push({
977
984
  label: "preset",
978
985
  value: presetConfig,
979
- source: `preset:${workspaceData.$extends}`
986
+ source: `preset:${workspaceData["$extends"]}`
980
987
  });
981
988
  } catch (error) {
982
- console.warn(`Warning: Could not resolve preset ${workspaceData.$extends}:`, error);
989
+ console.warn(`Warning: Could not resolve preset ${workspaceData["$extends"]}:`, error);
983
990
  }
984
991
  }
985
992
  }
@@ -991,7 +998,7 @@ async function getProductConfig(opts, schema) {
991
998
  });
992
999
  }
993
1000
  if (workspaceConfig?.data) {
994
- const workspaceData = workspaceConfig.data?.products?.[fsProduct] || {};
1001
+ const workspaceData = workspaceConfig.data?.products?.[fsProduct] ?? {};
995
1002
  layers.push({
996
1003
  label: "workspace",
997
1004
  value: workspaceData,
@@ -1630,14 +1637,15 @@ async function initWorkspaceConfig(opts) {
1630
1637
  const configFileName = format === "json" ? "kb.config.json" : "kb.config.yaml";
1631
1638
  const configPath = existing?.path || path3.join(cwd, ".kb", configFileName);
1632
1639
  ensureWithinWorkspace(configPath, cwd);
1640
+ const newConfigProducts = {};
1633
1641
  const newConfig = {
1634
1642
  schemaVersion: "1.0",
1635
- products: {}
1643
+ products: newConfigProducts
1636
1644
  };
1637
1645
  if (opts.products && opts.products.length > 0) {
1638
1646
  for (const product of opts.products) {
1639
1647
  toFsProduct(product);
1640
- newConfig.products[product] = {};
1648
+ newConfigProducts[product] = {};
1641
1649
  }
1642
1650
  }
1643
1651
  if (opts.presetRef !== void 0) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/kb-error.ts","../src/utils/fs-atomic.ts","../src/runtime/runtime.ts","../src/utils/env.ts","../src/utils/product-normalize.ts","../src/utils/paths.ts","../src/index.ts","../src/cache/fs-cache.ts","../src/hash/config-hash.ts","../src/api/read-config.ts","../src/api/read-kb-config.ts","../src/merge/layered-merge.ts","../src/preset/resolve-preset.ts","../src/lockfile/lockfile.ts","../src/api/product-config.ts","../src/profiles/types.ts","../src/profiles/loader.ts","../src/profiles/scope-selector.ts","../src/profiles/resolver.ts","../src/api/init-workspace.ts","../src/api/upsert-lockfile.ts","../src/validation/validate-config.ts"],"names":["path","fs","fsp","stripJsonComments","YAML","findNearestConfig","isPlainObject","key","writeFileAtomic"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBO,SAAS,YAAY,GAAA,EAAsB;AAChD,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AAC5C,EAAA,IAAI,GAAA,CAAI,SAAS,sBAAA,EAAwB;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACnD,EAAA,IAAI,GAAA,CAAI,SAAS,4BAAA,EAA8B;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACzD,EAAA,IAAI,GAAA,CAAI,SAAS,4BAAA,EAA8B;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACzD,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AAC3C,EAAA,OAAO,CAAA;AACT;AA3BA,IAKa,OAAA,CAAA,CA2BA;AAhCb,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAKO,IAAM,OAAA,GAAN,cAAsB,KAAA,CAAM;AAAA,MACjC,WAAA,CACS,IAAA,EACP,OAAA,EACO,IAAA,EACA,IAAA,EACP;AACA,QAAA,KAAA,CAAM,OAAO,CAAA;AALN,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAGP,QAAA,IAAA,CAAK,IAAA,GAAO,SAAA;AAAA,MACd;AAAA,MAPS,IAAA;AAAA,MAEA,IAAA;AAAA,MACA,IAAA;AAAA,KAKX;AAiBO,IAAM,WAAA,GAAc;AAAA,MACzB,oBAAA,EAAsB,gDAAA;AAAA,MACtB,kBAAA,EAAoB,gDAAA;AAAA,MACpB,0BAAA,EAA4B,iDAAA;AAAA,MAC5B,0BAAA,EAA4B,uDAAA;AAAA,MAC5B,uBAAA,EAAyB,mEAAA;AAAA,MACzB,wBAAA,EAA0B,qDAAA;AAAA,MAC1B,uBAAA,EAAyB,yDAAA;AAAA,MACzB,0BAAA,EAA4B,iGAAA;AAAA,MAC5B,0BAAA,EAA4B,qFAAA;AAAA,MAC5B,2BAAA,EAA6B,sEAAA;AAAA,MAC7B,0BAAA,EAA4B,2DAAA;AAAA,MAC5B,0BAAA,EAA4B,uFAAA;AAAA,MAC5B,2BAAA,EAA6B,2DAAA;AAAA,MAC7B,aAAA,EAAe;AAAA,KACjB;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/CA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAcA,eAAsB,eAAA,CACpBA,QACA,IAAA,EACe;AACf,EAAA,MAAM,MAAM,CAAA,EAAGA,MAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAE5E,EAAA,IAAI;AAEF,IAAA,MAAMC,QAAA,CAAG,MAAM,OAAA,CAAQD,MAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACjD,IAAA,MAAMC,QAAA,CAAG,MAAM,OAAA,CAAQ,GAAG,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAGhD,IAAA,MAAMA,QAAA,CAAG,SAAA,CAAU,GAAA,EAAK,IAAI,CAAA;AAG5B,IAAA,MAAMA,QAAA,CAAG,MAAA,CAAO,GAAA,EAAKD,MAAI,CAAA;AAAA,EAC3B,SAAS,KAAA,EAAO;AAEd,IAAA,IAAI;AACF,MAAA,MAAMC,QAAA,CAAG,OAAO,GAAG,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAMO,SAAS,qBAAA,CAAsB,YAAoB,aAAA,EAA6B;AACrF,EAAA,MAAM,SAAA,GAAY,QAAQ,UAAU,CAAA;AACpC,EAAA,MAAM,OAAA,GAAU,QAAQ,aAAa,CAAA;AAErC,EAAA,IAAI,CAAC,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,wCAAwC,UAAU,CAAA,CAAA;AAAA,MAClD,uDAAA;AAAA,MACA,EAAE,YAAY,aAAA;AAAc,KAC9B;AAAA,EACF;AACF;AAzDA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAOA,IAAA,aAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACKA,eAAsB,kBAAkB,IAAA,EAAgF;AACpH,EAAA,MAAM,QAAQD,KAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,IAAY,OAAA,CAAQ,KAAK,CAAA;AACzD,EAAA,MAAM,OAAO,IAAA,CAAK,OAAA,GAAUA,MAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AAEzD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,KAAA;AAEV,EAAA,OAAO,IAAA,EAAM;AACT,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,SAAA,EAAW;AAC/B,MAAA,MAAM,SAAA,GAAYA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AACrC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,IAAI;AACA,QAAA,MAAME,QAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MACpC,CAAA,CAAA,MAAQ;AAAA,MAAiB;AAAA,IAC7B;AACA,IAAA,MAAM,MAAA,GAASF,KAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AAAE,MAAA;AAAA,IAAO;AAC7B,IAAA,IAAI,IAAA,KAAS,GAAA,KAAQ,IAAA,IAAQ,MAAA,KAAW,IAAA,CAAA,EAAO;AAAE,MAAA;AAAA,IAAO;AACxD,IAAA,GAAA,GAAM,MAAA;AAAA,EACV;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC/B;AAIA,SAAS,kBAAkB,GAAA,EAAqB;AAC5C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,OAAO,IAAI,GAAA,EAAK;AACZ,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAEhB,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AACd,MAAA,OAAO,IAAI,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,EAAM;AAAE,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA;AAAA,QAAU;AACnE,QAAA,GAAA,IAAO,IAAI,CAAC,CAAA;AACZ,QAAA,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,KAAM,GAAA,EAAK;AAAC,UAAA;AAAA,QAAM;AAAA,MACjC;AAAA,IACJ,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAE7C,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM;AAAC,QAAA,CAAA,EAAA;AAAA,MAAI;AAAA,IAC5C,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAE7C,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM;AAAC,QAAA,CAAA,EAAA;AAAA,MAAI;AAChE,MAAA,CAAA,IAAK,CAAA;AAAA,IACT,CAAA,MAAO;AACH,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAA,IAClB;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AAC3C;AAEA,eAAsB,wBAAqC,CAAA,EAAuC;AAC9F,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,MAAME,QAAA,CAAI,QAAA,CAAS,GAAG,MAAM,CAAA;AACxC,IAAA,IAAI;AACA,MAAA,MAAM,WAAW,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,GAAI,iBAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AACjE,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAChC,MAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,WAAA,EAAY;AAAA,IACzC,SAAS,CAAA,EAAG;AACR,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,mBAAA,EAAqB,OAAA,EAAS,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,CAAC,GAAG,CAAA;AACxH,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,WAAA,EAAY;AAAA,IACpC;AAAA,EACJ,SAAS,CAAA,EAAG;AACR,IAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,kBAAA,EAAoB,OAAA,EAAS,CAAA,qBAAA,EAAwB,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,CAAC,GAAG,CAAA;AACtH,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,WAAA,EAAY;AAAA,EACpC;AACJ;AAGO,SAAS,YAA2C,GAAA,EAAgC;AACvF,EAAA,IAAI,CAAC,GAAA,EAAK;AAAE,IAAA,OAAO,EAAC;AAAA,EAAG;AACvB,EAAA,MAAM,MAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtC,IAAA,IAAI,MAAM,MAAA,EAAW;AAAE,MAAC,GAAA,CAAY,CAAC,CAAA,GAAI,CAAA;AAAA,IAAG;AAAA,EAChD;AACA,EAAA,OAAO,GAAA;AACX;AAGO,SAAS,YAAA,CAAgB,MAAS,IAAA,EAAsB;AAC3D,EAAA,IAAI,CAAC,IAAA,EAAM;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AAC1B,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC5C,IAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,MAAS,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,aAAA,CAAc,IAAI,CAAA,IAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC5C,IAAA,MAAM,GAAA,GAAW,EAAE,GAAG,IAAA,EAAK;AAC3B,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvC,MAAA,IAAI,MAAM,MAAA,EAAW;AAAE,QAAA;AAAA,MAAU;AACjC,MAAA,IAAI,cAAe,IAAA,CAAa,CAAC,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AACrD,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,YAAA,CAAc,IAAA,CAAa,CAAC,GAAG,CAAQ,CAAA;AAAA,MACpD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAS,IAAA,CAAa,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AAC5D,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,YAAA,CAAc,IAAA,CAAa,CAAC,GAAG,CAAQ,CAAA;AAAA,MACpD,CAAA,MAAO;AACH,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,MACb;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAEA,EAAA,OAAQ,IAAA,IAAc,IAAA;AAC1B;AAEA,SAAS,cAAc,CAAA,EAA0C;AAC7D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,MAAA,CAAO,cAAA,CAAe,CAAC,CAAA,KAAM,MAAA,CAAO,SAAA;AACtF;AA0BO,SAAS,oBAAA,CACZ,QAAA,EACA,OAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,MAAM,UAA2D,EAAC;AAClE,EAAA,MAAM,uBAAiC,EAAC;AAExC,EAAA,MAAM,IAAA,uBAAW,GAAA,CAAY;AAAA,IACzB,GAAG,MAAA,CAAO,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AAAA,IAC7B,GAAG,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE;AAAA,GAC/B,CAAA;AAED,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,IAAA,MAAM,aAAA,GAAiB,WAAmD,GAAG,CAAA;AAC7E,IAAA,MAAM,YAAA,GAAgB,UAAkD,GAAG,CAAA;AAC3E,IAAA,MAAM,WAAA,GAAe,MAAA,CAAwD,GAAG,CAAA,IAAK,WAAA;AAErF,IAAA,MAAM,cAAc,aAAA,KAAkB,MAAA;AACtC,IAAA,MAAM,aAAa,YAAA,KAAiB,MAAA;AAEpC,IAAA,IAAI,gBAAgB,eAAA,EAAiB;AACjC,MAAA,IAAI,UAAA,EAAY;AAAE,QAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAAA,MAAG;AAClD,MAAA,IAAI,WAAA,EAAa;AACb,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA;AACX,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,MACnB;AACA,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,gBAAgB,cAAA,EAAgB;AAChC,MAAA,IAAI,UAAA,EAAY;AACZ,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AACX,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA;AAAA,MACnB,WAAW,WAAA,EAAa;AAGpB,QAAA;AAAA,MACJ;AACA,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,eAAe,UAAA,EAAY;AAC3B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA,CAAa,aAAA,EAAwB,YAAqB,CAAA;AACrE,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,IACnB,WAAW,WAAA,EAAa;AACpB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA;AACX,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACnB,WAAW,UAAA,EAAY;AACnB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AACX,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA;AAAA,IACnB;AAAA,EACJ;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAU,oBAAA,EAAsB,OAAA,EAAQ;AAC5D;AAEA,IAAM,eAAA,GAAkB;AAAA,EACpB,UAAU,EAAE,OAAA,EAAS,gBAAgB,WAAA,EAAa,SAAA,EAAW,QAAQ,IAAA;AACzE;AAcO,SAAS,cAAuB,IAAA,EAAiF;AACpH,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,MAAM,UAAU,IAAA,CAAK,SAAA,GAAY,OAAA,CAAQ,GAAG,KAAK,EAAC;AAElD,EAAA,MAAM,MAAA,GAAS,YAAA;AAAA,IACX,YAAA;AAAA,MACI,YAAA,CAAa,YAAA,CAAa,eAAA,CAAgB,eAAe,CAAA,EAAkC,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA;AAAA,MAC3I;AAAA,KACJ;AAAA,IACA,IAAA,CAAK;AAAA,GACT;AAEA,EAAA,IAAI,KAAK,QAAA,EAAU;AACf,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACT,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,0BAAA,EAA4B,OAAA,EAAS,0CAA0C,CAAA;AACxH,MAAA,IAAI,IAAI,WAAA,EAAa;AAAE,QAAA,WAAA,CAAY,IAAA,CAAK,GAAG,GAAA,CAAI,WAAW,CAAA;AAAA,MAAG;AAAA,IACjE,CAAA,MAAA,IAAW,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ;AAChC,MAAA,WAAA,CAAY,IAAA,CAAK,GAAG,GAAA,CAAI,WAAW,CAAA;AAAA,IACvC;AAAA,EACJ;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAY;AACxC;;;AChPO,SAAS,OAAO,CAAA,EAA4C;AAC/D,EAAA,IAAI,MAAM,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACvC,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/B,EAAA,IAAI,MAAM,GAAA,IAAO,CAAA,KAAM,UAAU,CAAA,KAAM,KAAA,IAAS,MAAM,IAAA,EAAM;AAAC,IAAA,OAAO,IAAA;AAAA,EAAK;AACzE,EAAA,IAAI,MAAM,GAAA,IAAO,CAAA,KAAM,WAAW,CAAA,KAAM,IAAA,IAAQ,MAAM,KAAA,EAAO;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAC3E,EAAA,OAAO,MAAA;AACX;AAEO,SAAS,MAAM,CAAA,EAA2C;AAC7D,EAAA,IAAI,MAAM,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACvC,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,MAAA;AACpC;;;ACZA,IAAM,MAAA,uBAAa,GAAA,CAAI;AAAA,EACrB,CAAC,YAAY,WAAW,CAAA;AAAA,EACxB,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,UAAU,QAAQ,CAAA;AAAA,EACnB,CAAC,QAAQ,MAAM,CAAA;AAAA,EACf,CAAC,YAAY,UAAU,CAAA;AAAA,EACvB,CAAC,aAAa,WAAW;AAC3B,CAAC,CAAA;AAOM,SAAS,YAAY,EAAA,EAAoB;AAC9C,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,IAAK,EAAA;AAC3B;AAOO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,EAAQ;AAC3B,IAAA,IAAI,MAAM,KAAA,EAAO;AAAC,MAAA,OAAO,CAAA;AAAA,IAAE;AAAA,EAC7B;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,iBAAiB,KAAA,EAAwB;AACvD,EAAA,OAAO,MAAA,CAAO,IAAI,KAAK,CAAA;AACzB;AAKO,SAAS,gBAAA,GAA6B;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACjC;AC5CO,SAAS,mBAAmB,GAAA,EAAqB;AACtD,EAAA,OAAOF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,UAAU,CAAA;AACzC;AAKO,SAAS,mBAAA,CAAoB,KAAa,SAAA,EAA2B;AAC1E,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,SAAS,CAAA;AACxC;AAKO,SAAS,oBAAA,CAAqB,KAAa,SAAA,EAA2B;AAC3E,EAAA,OAAOA,KAAAA,CAAK,KAAK,mBAAA,CAAoB,GAAA,EAAK,SAAS,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AAClF;AAKO,SAAS,aAAa,GAAA,EAAqB;AAChD,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAC7B;AAKO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,YAAA,CAAa,GAAG,GAAG,WAAW,CAAA;AACjD;;;AC5BA,aAAA,EAAA;ACaA,IAAM,WAAN,MAAqB;AAAA,EACX,KAAA,uBAAY,GAAA,EAAU;AAAA,EACtB,OAAA;AAAA,EAER,WAAA,CAAY,UAAU,GAAA,EAAK;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,GAAA,EAAuB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,UAAU,MAAA,EAAW;AAEvB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,GAAA,CAAI,KAAQ,KAAA,EAAgB;AAC1B,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,IACvB,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,KAAK,OAAA,EAAS;AAE1C,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC1C,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,OAAO,GAAA,EAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AACF,CAAA;AAEA,IAAM,UAAN,MAAc;AAAA,EACJ,KAAA,GAAQ,IAAI,QAAA,CAA6B,GAAG,CAAA;AAAA,EAC5C,QAAA,GAAW,IAAI,QAAA,CAA2B,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA,EAKrD,MAAc,YAAY,OAAA,EAAoC;AAC5D,IAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA,CAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAElC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAME,QAAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACpC,QAAA,GAAA,GAAM;AAAA,UACJ,OAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,UAC3B,MAAM,KAAA,CAAM;AAAA,SACd;AACA,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAAA,MAC/B,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,OAAA,EAAsC;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,GAAG,GAAA,CAAI,OAAO,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAExD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMA,QAAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACpC,MAAA,IAAI,KAAA,CAAM,MAAM,OAAA,EAAQ,KAAM,IAAI,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,GAAA,CAAI,IAAA,EAAM;AAElE,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAE1B,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,UAC3B,MAAM,KAAA,CAAM;AAAA,SACd;AACA,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,IAAI,MAAM,CAAA;AAC1C,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,OAAA,EAAiB,IAAA,EAA0B;AACnD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,GAAG,GAAA,CAAI,OAAO,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAExD,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,QAAA,EAAU;AAAA,MACvB,IAAA;AAAA,MACA,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA8C;AAC5C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAAA,MACtB,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,IAAA;AAAK,KAC9B;AAAA,EACF;AACF;AAGA,IAAM,OAAA,GAAU,IAAI,OAAA;AAOb,SAAS,WAAA,GAAoB;AAClC,EAAA,OAAA,CAAQ,WAAA,EAAY;AACtB;ACjKO,SAAS,kBAAkB,GAAA,EAAkB;AAElD,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,MAAM,CAAC,CAAA;AAC/C,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,MAAM,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/D;AAQA,SAAS,iBAAiB,GAAA,EAAe;AACvC,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,gBAAgB,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AACzC,EAAA,MAAM,aAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAG,CAAA;AACrB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,UAAA,CAAW,GAAG,CAAA,GAAI,gBAAA,CAAiB,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAOO,SAAS,mBAAmB,OAAA,EAAwB;AACzD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAK,MAAA,KAAW;AAC/C,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,EAAO;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,kBAAkB,QAAQ,CAAA;AACnC;;;ACrDA,aAAA,EAAA;AASA,SAASC,mBAAkB,GAAA,EAAqB;AAC9C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,OAAO,IAAI,GAAA,EAAK;AACd,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AACd,MAAA,OAAO,IAAI,GAAA,EAAK;AACd,QAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,EAAM;AAAE,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA;AAAA,QAAU;AACnE,QAAA,GAAA,IAAO,IAAI,CAAC,CAAA;AACZ,QAAA,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,KAAM,GAAA,EAAK;AAAE,UAAA;AAAA,QAAO;AAAA,MACjC;AAAA,IACF,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAC/C,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM;AAAE,QAAA,CAAA,EAAA;AAAA,MAAK;AAAA,IAC5C,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAC/C,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM;AAAE,QAAA,CAAA,EAAA;AAAA,MAAK;AAClE,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AACzC;AAKA,eAAsB,eAAe,QAAA,EAA6C;AAChF,EAAA,MAAM,OAAA,GAAUH,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAGrC,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACxC,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAME,QAAAA,CAAI,QAAA,CAAS,SAAS,OAAO,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAO,CAAA,CAAE,WAAA,EAAY;AAEzC,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,MAAA,EAAQ;AACrC,MAAA,IAAA,GAAOE,KAAA,CAAK,MAAM,GAAG,CAAA;AACrB,MAAA,MAAA,GAAS,MAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,MAAM,UAAA,GAAa,GAAA,KAAQ,QAAA,GAAWD,kBAAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AAC/D,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAC5B,MAAA,MAAA,GAAS,MAAA;AAAA,IACX;AAEA,IAAA,MAAM,MAAA,GAA2B,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,EAAQ;AAG/D,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAEjC,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,oBAAA;AAAA,QACA,gCAAgC,QAAQ,CAAA,CAAA;AAAA,QACxC,WAAA,CAAY,kBAAA;AAAA,QACZ,EAAE,QAAA,EAAU,KAAA,EAAO,KAAA,CAAM,OAAA;AAAQ,OACnC;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,sBAAA;AAAA,MACA,0BAA0B,QAAQ,CAAA,CAAA;AAAA,MAClC,WAAA,CAAY,oBAAA;AAAA,MACZ,EAAE,UAAU,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAAE,KAC5E;AAAA,EACF;AACF;AAMA,eAAeE,kBAAAA,CACb,QAAA,EACA,SAAA,GAAsB,EAAC,EAC4B;AACnD,EAAA,MAAM,KAAA,GAAQL,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACnC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,KAAA;AAGV,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,gBAAA;AAE3D,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAEpB,MAAA,IAAI;AACF,QAAA,MAAME,QAAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MAClC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAASF,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AAElB,MAAA;AAAA,IACF;AACA,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC7B;AAKA,eAAsB,YAAY,QAAA,EAA0C;AAC1E,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAE/B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,IAAI;AACF,MAAA,MAAME,SAAI,MAAA,CAAOF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,CAAC,CAAA;AACvC,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA;AAAA,MACF;AACA,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAsB,oBAAoB,GAAA,EAA+C;AACvF,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,MAAMK,mBAAkB,GAAG,CAAA;AAExD,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,eAAe,UAAU,CAAA;AAClC;ACpKA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA;AAIA,eAAsB,YAAA,CACpB,GAAA,EACA,SAAA,GAAsB,mBAAA,EAC6B;AACnD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,OAAA,IAAWL,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAC3C,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAE1B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,IAAI;AACF,QAAA,MAAME,QAAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MAClC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQF,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,GAAMA,KAAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC7B;AAEA,eAAsB,aAAa,GAAA,EAA6C;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAAA,MAAAA,EAAK,GAAI,MAAM,aAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAACA,MAAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,eAAeA,MAAI,CAAA;AAC5B;;;AC1CO,SAAS,sBAAsB,MAAA,EAA2C;AAC/E,EAAA,MAAM,QAAsB,EAAC;AAE7B,EAAA,MAAMM,iBAAgB,CAAC,CAAA,KACrB,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,MAAA,CAAO,cAAA,CAAe,CAAC,MAAM,MAAA,CAAO,SAAA;AAEzF,EAAA,MAAM,QAAQ,CAAC,IAAA,EAAW,SAAc,KAAA,EAAoBN,MAAAA,GAAiB,EAAC,KAAW;AAEvF,IAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACjD,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAMA,MAAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,IAAA,EAAM,gBAAA;AAAA,QACN,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,QACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,QAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,OACrC,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT;AAGA,IAAA,IAAIM,cAAAA,CAAc,IAAI,CAAA,IAAKA,cAAAA,CAAc,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,MAAA,GAAc,EAAE,GAAG,IAAA,EAAK;AAE9B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,EAAG,KAAA,EAAO,KAAA,EAAO,CAAC,GAAGN,MAAAA,EAAM,GAAG,CAAC,CAAA;AAAA,QAC7D,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,MAAM,CAAC,GAAGA,QAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,YAC7B,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,IAAA,EAAM,KAAA;AAAA,YACN,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,YACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,YAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,WACrC,CAAA;AACD,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,QAChB;AAAA,MACF;AAEA,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAMA,MAAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,MACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,MACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,MAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,KACrC,CAAA;AAED,IAAA,OAAO,OAAA,IAAW,IAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU;AAC3C,IAAA,OAAO,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AACzB;AAKA,SAAS,kBAAkB,MAAA,EAAoC;AAC7D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,yBAAyB,CAAA;AACpD,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;AAKA,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,mBAAmB,CAAA;AAC9C,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;AAKA,SAAS,eAAe,MAAA,EAAoC;AAC1D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AACrC,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;;;AClGA,aAAA,EAAA;AAaA,eAAsB,aAAA,CACpB,WACA,GAAA,EACqB;AAErB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,eAAe,SAAS,CAAA;AAGhD,EAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,gBAAgB,IAAI,CAAA;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,kBAAA,CAAmB,SAAA,EAAW,MAAM,OAAO,CAAA;AACpE,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAIA,EAAA,MAAM,IAAI,OAAA;AAAA,IACR,yBAAA;AAAA,IACA,qBAAqB,SAAS,CAAA,CAAA;AAAA,IAC9B,WAAA,CAAY,uBAAA;AAAA,IACZ,EAAE,WAAW,GAAA;AAAI,GACnB;AACF;AAKA,SAAS,eAAe,SAAA,EAAqC;AAC3D,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,GAAG,CAAA;AACzC,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,wBAAA;AAAA,MACA,6BAA6B,SAAS,CAAA,CAAA;AAAA,MACtC,0EAAA;AAAA,MACA,EAAE,SAAA;AAAU,KACd;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,SAAA,CAAU,CAAA,EAAG,OAAO,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,SAAA,CAAU,OAAA,GAAU,CAAC,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,wBAAA;AAAA,MACA,6BAA6B,SAAS,CAAA,CAAA;AAAA,MACtC,sDAAA;AAAA,MACA,EAAE,SAAA;AAAU,KACd;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,MAAM,OAAO,CAAA;AACvB;AAKA,eAAe,kBAAA,CACb,UAAA,EACA,IAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,IAAI;AAEF,IAAA,MAAME,QAAAA,CAAI,OAAO,UAAU,CAAA;AAG3B,IAAA,MAAM,eAAA,GAAkBF,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,cAAc,CAAA;AAC5D,IAAA,MAAM,WAAA,GAAc,KAAK,KAAA,CAAM,MAAME,SAAI,QAAA,CAAS,eAAA,EAAiB,OAAO,CAAC,CAAA;AAG3E,IAAA,IAAI,CAAC,cAAA,CAAe,WAAA,CAAY,OAAA,EAAS,OAAO,CAAA,EAAG;AACjD,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAAA,GAAaF,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,sBAAsB,CAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,MAAME,SAAI,QAAA,CAAS,UAAA,EAAY,OAAO,CAAC,CAAA;AAEjE,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,IAAA,EAAM,UAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,SAAS,cAAA,CAAe,eAAuB,eAAA,EAAkC;AAG/E,EAAA,IAAI,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,gBAAgB,SAAA,CAAU,CAAC,EAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,IAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC9C,IAAA,OAAO,KAAA,KAAU,WAAA;AAAA,EACnB;AAEA,EAAA,OAAO,aAAA,KAAkB,eAAA;AAC3B;AAKO,SAAS,yBAAA,CACd,QACA,OAAA,EACK;AACL,EAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AACrC,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,QAAA,GAAW,SAAS,KAAK,EAAC;AACjD;AAKO,SAAS,kBAAkB,MAAA,EAKhC;AACA,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,UAAU,MAAA,CAAO,IAAA,CAAK,OAAO,MAAA,CAAO,QAAA,IAAY,EAAE;AAAA,GACpD;AACF;AClIA,eAAsB,aAAa,GAAA,EAA2C;AAC5E,EAAA,MAAM,YAAA,GAAeF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,WAAW,CAAA;AAEtD,EAAA,IAAI;AACF,IAAA,MAAM,YAAA,GAAe,MAAME,QAAAA,CAAI,QAAA,CAAS,cAAc,OAAO,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AAEN,IAAA,MAAM,eAAA,GAAkBF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,eAAe,CAAA;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAME,QAAAA,CAAI,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAChE,MAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF;AAKA,SAAS,eAAA,CAAgB,GAAA,EAAU,KAAA,GAAQ,CAAA,EAAW;AACpD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,CAAC,KAAK,KAAA,KAAU;AACzC,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,MAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA,CACrB,MAAK,CACL,MAAA,CAAO,CAAC,MAAA,EAAaK,IAAAA,KAAQ;AAC5B,QAAA,MAAA,CAAOA,IAAG,CAAA,GAAI,KAAA,CAAMA,IAAG,CAAA;AACvB,QAAA,OAAO,MAAA;AAAA,MACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,GAAG,KAAK,CAAA;AACV;AAKA,eAAsB,aAAA,CACpB,KACA,YAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAcP,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AACxC,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,WAAW,CAAA;AAGvD,EAAA,MAAME,SAAI,KAAA,CAAM,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAGhD,EAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AACzB,IAAA,YAAA,CAAa,OAAA,GAAU,kDAAA;AAAA,EACzB;AAGA,EAAA,MAAM,EAAE,eAAA,EAAAM,gBAAAA,EAAgB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,cAAA,EAAA,EAAA,iBAAA,CAAA,CAAA;AAClC,EAAA,MAAMA,iBAAgB,YAAA,EAAc,eAAA,CAAgB,YAAA,EAAc,CAAC,IAAI,IAAI,CAAA;AAC7E;AAKA,eAAsB,cAAA,CACpB,KACA,OAAA,EAMuB;AACvB,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AAEvC,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,kDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,EAAU,SAAA;AAAA,IAC1C,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,QAAA,EAAU,OAAA;AAAA,IACtC,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAgB,QAAA,EAAU,YAAA;AAAA,IAChD,MAAA,EAAQ,EAAE,GAAG,QAAA,EAAU,MAAA,EAAO;AAAA,IAC9B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AAGA,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,KAAA,MAAW,CAAC,SAAS,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA,EAAG;AACpE,MAAA,MAAM,SAAA,GAAY,YAAY,OAAiB,CAAA;AAC/C,MAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,MAAA,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,GAAI,IAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AACrC,EAAA,OAAO,YAAA;AACT;AAKO,SAAS,qBAAA,CAAsB,SAAiB,MAAA,EAAqB;AAC1E,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AAKA,eAAsB,kBAAA,CACpB,KACA,OAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACvD,IAAA,MAAM,SAAA,GAAY,YAAY,OAAiB,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,kBAAkB,MAAM,CAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAE9C,IAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,iBAAiB,YAAA,EAAiD;AAChF,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,YAAA,KAAiB,QAAA,EAAU;AACrD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAA,CAAa,kBAAkB,KAAA,EAAO;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,YAAA,CAAa,MAAA,IAAU,OAAO,YAAA,CAAa,WAAW,QAAA,EAAU;AACnE,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,YAAA,CAAa,WAAA,IAAe,OAAO,YAAA,CAAa,gBAAgB,QAAA,EAAU;AAC7E,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,iBAAiB,YAAA,EAM/B;AACA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,CAAE,MAAA;AAAA,IAC/C,YAAA,EAAc,CAAC,CAAC,YAAA,CAAa,SAAA;AAAA,IAC7B,UAAA,EAAY,CAAC,CAAC,YAAA,CAAa,OAAA;AAAA,IAC3B,eAAA,EAAiB,CAAC,CAAC,YAAA,CAAa,YAAA;AAAA,IAChC,WAAA,EAAa,IAAI,IAAA,CAAK,YAAA,CAAa,WAAW;AAAA,GAChD;AACF;;;AC5KA,eAAsB,gBAAA,CACpB,MACA,MAAA,EACiC;AACjC,EAAA,MAAM,EAAE,KAAK,OAAA,EAAS,GAAA,GAAM,EAAC,EAAG,UAAA,GAAa,KAAA,EAAO,YAAA,EAAa,GAAI,IAAA;AACrE,EAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AAGrC,EAAA,MAAM,eAAA,GAAkB,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAGrD,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,MAAA,CAAO,IAAA,CAAK;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,mBAAmB,OAAO,CAAA;AAAA,IACjC,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,IAAI,YAAA,IAAgB,aAAa,QAAA,EAAU;AAEzC,IAAA,MAAM,iBAAiB,YAAA,CAAa,QAAA;AAEpC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,cAAA;AAAA,MACP,QAAQ,YAAA,CAAa;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,YAAA,CAAa,KAAA,IAAS,YAAA,CAAa,KAAA,CAAM,QAAA,EAAU;AAErD,MAAA,MAAM,YAAA,GAAe,aAAa,KAAA,CAAM,QAAA;AACxC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,eAAA;AAAA,QACP,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQ,aAAa,KAAA,CAAM;AAAA,OAC5B,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,eAAe,EAAC;AACpB,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,gBAAgB,eAAA,CAAgB,IAAA;AACtC,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,aAAA,CAAc,UAAU,GAAG,CAAA;AAC9D,QAAA,YAAA,GAAe,yBAAA,CAA0B,QAAQ,OAAO,CAAA;AAExD,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO,YAAA;AAAA,UACP,MAAA,EAAQ,CAAA,OAAA,EAAU,aAAA,CAAc,QAAQ,CAAA;AAAA,SACzC,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AAEd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kCAAA,EAAqC,aAAA,CAAc,QAAQ,KAAK,KAAK,CAAA;AAAA,MACpF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,WAAW,CAAA,EAAG;AAC1C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,QAAA;AAAA,MACP,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,gBAAiB,eAAA,CAAgB,IAAA,EAAc,QAAA,GAAW,SAAS,KAAK,EAAC;AAC/E,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,KAAA,EAAO,aAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,eAAA,GAAkBR,MAAK,IAAA,CAAK,GAAA,EAAK,OAAO,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AACnF,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,MAAME,QAAAA,CAAI,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAC/D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AACxC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,YAAA;AAAA,KAC5C,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,GAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,sBAAsB,MAAM,CAAA;AAStD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,gBAAA,CAAiB,GAAA,EAAK,SAAA,EAAW,MAAM,CAAA;AAAA,EAC/C;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,kBAAkB,MAAM,CAAA;AAE3C,IAAA,MAAM,eAAoC,EAAC;AAC3C,IAAA,YAAA,CAAa,OAAO,CAAA,GAAI,UAAA;AACxB,IAAA,MAAM,eAAe,GAAA,EAAK;AAAA,MACxB;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,KAAK,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR;AAAA,GACF;AACF;AAKA,eAAsB,oBAAA,CACpB,MACA,MAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,IAAY,CAAA;AAClD,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM;AAC/B;AAKA,SAAS,mBAAmB,OAAA,EAAsB;AAChD,EAAA,MAAM,QAAA,GAAgC;AAAA,IACpC,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,4BAAA;AAAA,MACV,QAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,MAClC,OAAA,EAAS,EAAE,GAAA,EAAK,IAAA,EAAM,QAAQ,KAAA,EAAM;AAAA,MACpC,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,EAAM,YAAY,CAAA,EAAE;AAAA,MACzC,QAAQ,EAAE,IAAA,EAAM,MAAM,EAAA,EAAI,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,MAC3C,SAAA,EAAW;AAAA,QACT,OAAA,EAAS,IAAA;AAAA,QACT,cAAc,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,YAAY,QAAQ,CAAA;AAAA,QAC1D,YAAA,EAAc,CAAC,OAAA,EAAS,IAAI,CAAA;AAAA,QAC5B,aAAA,EAAe,CAAC,YAAA,EAAc,UAAA,EAAY,uBAAuB,QAAQ,CAAA;AAAA,QACzE,cAAA,EAAgB,IAAA;AAAA,QAChB,eAAA,EAAiB,IAAA;AAAA,QACjB,kBAAA,EAAoB,IAAA;AAAA,QACpB,YAAA,EAAc,aAAA;AAAA,QACd,SAAA,EAAW,IAAA;AAAA,QACX,UAAA,EAAY,IAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,iBAAA,EAAmB,KAAA;AAAA,QACnB,cAAA,EAAgB,CAAC,gBAAA,EAAkB,iBAAA,EAAmB,8BAA8B,wBAAwB,CAAA;AAAA,QAC5G,aAAA,EAAe,GAAA;AAAA,QACf,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,MAAA;AAAA,QACV,aAAA,EAAe;AAAA;AACjB,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,OAAO;AAAC,KACV;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,WAAW;AAAC,KACd;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,QAAQ;AAAC;AACX,GACF;AAEA,EAAA,OAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAC;AAC/B;AAKA,eAAe,gBAAA,CAAiB,GAAA,EAAa,SAAA,EAAmB,MAAA,EAA4B;AAC1F,EAAA,MAAM,SAAA,GAAYF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,SAAS,CAAA;AACjD,EAAA,MAAM,aAAaA,KAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AAGlE,EAAA,MAAME,SAAI,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAG9C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,OAAA,EAAS,gDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAEA,EAAA,MAAMA,QAAAA,CAAI,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,WAAA,EAAa,IAAA,EAAM,CAAC,CAAC,CAAA;AACtE;AAKO,SAAS,cAAc,MAAA,EAAqB;AACjD,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AClQA,IAAM,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yCAAyC,CAAA;AAC9E,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,SAAS,CAAA;AAC/D,IAAM,oBAAoB,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,sBAAsB,CAAA;AAE9D,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA,EACpC,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,sBAAsB,CAAA;AAAA,EAC5C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAS,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,GAAA,CAAI,GAAG,oCAAoC,CAAA;AAAA,EACxE,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,UAAU,EAAE,QAAA,EAAS;AAAA,EACtC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACvB,CAAC;AAGM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,EAAE,MAAA;AAGI,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACtC,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAC9C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAG,qDAAqD,EAAE,QAAA,EAAS;AAAA,EAC3F,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,EACxC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,IAAA,EAAM,kBAAkB,QAAA;AAC1B,CAAC;AAGM,IAAM,gBAAA,GAAmB,CAAA,CAAE,KAAA,CAAM,eAAe;AAEhD,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,SAAA,EAAW,EAAE,OAAA,EAAQ;AAAA,EACrB,QAAA,EAAU,kBAAkB,QAAA;AAC9B,CAAC;AAGM,IAAM,yBAAA,GAA4B,EAAE,IAAA,CAAK,CAAC,aAAa,QAAA,EAAU,KAAA,EAAO,UAAU,CAAC;AAGnF,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AACjC,CAAC;AAGM,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,QAAA,EAAU,EAAE,IAAA,CAAK,CAAC,YAAY,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,EACxD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC;AAGM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAA,EAAQ,yBAAA;AAAA,EACR,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACnC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,mBAAmB,QAAA,EAAS;AAAA,EACnC,IAAA,EAAM,kBAAkB,QAAA,EAAS;AAAA,EACjC,eAAA,EAAiB,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAClE,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,WAAA,EAAa,oBAAoB,QAAA,EAAS;AAAA,EAC1C,cAAA,EAAgB,qBAAqB,QAAA;AACvC,CAAC;;;AC/ED,aAAA,EAAA;AAaA,eAAsB,oBAAoB,GAAA,EAA6C;AACrF,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,UAAU,IAAA,EAAM;AACnB,IAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAE;AAAA,EACxB;AAEA,EAAA,MAAM,WAAA,GAAe,SAAS,IAAA,EAAc,QAAA;AAE5C,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,OAAO;AAAA,MACL,UAAU,EAAC;AAAA,MACX,YAAY,QAAA,CAAS,IAAA;AAAA,MACrB,QAAQ,QAAA,CAAS;AAAA,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,WAAW,CAAA;AACrD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,0CAAA;AAAA,MACA,WAAA,CAAY,0BAAA;AAAA,MACZ;AAAA,QACE,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAAA,QACrB,YAAY,QAAA,CAAS;AAAA;AACvB,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,IAAA;AAAA,IACjB,YAAY,QAAA,CAAS,IAAA;AAAA,IACrB,QAAQ,QAAA,CAAS;AAAA,GACnB;AACF;;;AC5CA,aAAA,EAAA;AAiBO,SAAS,mBACd,IAAA,EACsB;AACtB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,MAAA,IAAU,EAAC;AAC7C,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,KAAK,OAAO,CAAA;AACtD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,6BAAA;AAAA,QACA,UAAU,IAAA,CAAK,OAAO,CAAA,wBAAA,EAA2B,IAAA,CAAK,cAAc,EAAE,CAAA,CAAA,CAAA;AAAA,QACtE,WAAA,CAAY,2BAAA;AAAA,QACZ,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAE,OAC9D;AAAA,IACF;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAW;AAAA,EACvC;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACjD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,CAAA,0CAAA,EAA6C,IAAA,CAAK,aAAA,CAAc,EAAE,CAAA,CAAA,CAAA;AAAA,MAClE,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAE,KACtC;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA,EAAG,UAAU,SAAA,EAAU;AAAA,EACnD;AAEA,EAAA,MAAM,YAAA,GAAe,aAAA;AAAA,IACnBF,KAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,GAAA,EAAK,KAAK,aAAa;AAAA,GAC5C;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,KAAA,KAC7B,gBAAA,CAAiB,KAAA,EAAO,YAAY;AAAA,GACtC;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,+BAA+B,YAAY,CAAA,CAAA,CAAA;AAAA,MAC3C,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,EAAM,YAAA;AAAa,KACzD;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,OAAO,OAAA,CAAQ,CAAC,GAAG,QAAA,EAAU,MAAA,EAAQ,aAAa,YAAA,EAAa;AAAA,EAC1E;AAEA,EAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAC5B;AAEA,SAAS,gBAAA,CAAiB,OAAsB,SAAA,EAA4B;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GACrD,KAAA,CAAM,OAAA,GACN,CAAC,MAAM,CAAA;AACX,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,IAAW,EAAC;AAEvC,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KACd,SAAA,CAAU,IAAA,EAAM,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,SAAS,CAAA;AAEzD,EAAA,MAAM,cAAA,GACJ,SAAA,KAAc,GAAA,IACd,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAC,CAAA;AAElD,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAiB,YAAA,CAAa,IAAA;AAAA,IAAK,CAAC,IAAA,KACxC,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC;AAAA,GACzB;AAEA,EAAA,OAAO,CAAC,cAAA;AACV;AAEA,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,IAAI,CAAC,CAAA,IAAK,CAAA,KAAM,GAAA,EAAK;AACnB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,aAAa,CAAA,CAAE,KAAA,CAAMA,MAAK,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAC7C,EAAA,OAAO,UAAA,IAAc,GAAA;AACvB;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;ACpGA,aAAA,EAAA;AAEA,IAAM,eAAA,GAAkB,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAErD,SAAS,MAAS,KAAA,EAAa;AAC7B,EAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC;AAaA,eAAsB,eACpB,IAAA,EACwB;AACxB,EAAA,MAAM,mBAAA,GAAsB,MAAM,mBAAA,CAAoB,IAAA,CAAK,GAAG,CAAA;AAC9D,EAAA,MAAM,gBAAgB,mBAAA,CAAoB,QAAA;AAC1C,EAAA,MAAM,YAAY,mBAAA,CAAoB,UAAA;AACtC,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAE9D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA0B;AAC5C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,MAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,EAAA,EAAI;AAAA,QACpB,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QACtB,MAAA,EAAQ,WAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,MAAM,mBAAA;AAAA,IAClB,IAAA,CAAK,SAAA;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA,CAAK,GAAA;AAAA,wBACD,GAAA;AAAY,GAClB;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,yBAAA;AAAA,MACA,CAAA,SAAA,EAAY,KAAK,SAAS,CAAA,WAAA,CAAA;AAAA,MAC1B,WAAA,CAAY,uBAAA;AAAA,MACZ;AAAA,QACE,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAM;AAAA;AACzC,KACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,kBAAkB,KAAK,CAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,oBAAA,CAAqB,aAAA,EAAe,KAAK,CAAA;AACjE,EAAA,aAAA,CAAc,eAAA,GAAkB,eAAA;AAEhC,EAAA,OAAO,aAAA;AACT;AAEA,eAAe,mBAAA,CACb,SAAA,EACA,KAAA,EACA,aAAA,EACA,KACA,IAAA,EACyB;AACzB,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,yCAAyC,SAAS,CAAA,CAAA,CAAA;AAAA,MAClD,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAE,KACvC;AAAA,EACF;AACA,EAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAE/B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,IAAI,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,MAAA,KAAA,GAAQ;AAAA,QACN,OAAA,EAAS,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,SAAS,CAAE,CAAA;AAAA,QAC5C,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,CAAA,MAAA,IAAW,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACxC,MAAA,KAAA,GAAQ,MAAM,kBAAA,CAAmB,SAAA,EAAW,GAAG,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,yBAAA;AAAA,QACA,YAAY,SAAS,CAAA,WAAA,CAAA;AAAA,QACrB,WAAA,CAAY,uBAAA;AAAA,QACZ,EAAE,WAAW,SAAA,EAAW,KAAA,CAAM,KAAK,aAAA,CAAc,IAAA,EAAM,CAAA;AAAE,OAC3D;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,WAAW,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,IAAA,MAAM,cAAc,MAAM,mBAAA;AAAA,MACxB,MAAM,OAAA,CAAQ,OAAA;AAAA,MACd,KAAA;AAAA,MACA,aAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,EAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAsC;AAC/D,EAAA,MAAM,iBAA0D,EAAC;AACjE,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,iBAAA;AACJ,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI,SAAoB,EAAC;AACzB,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,WAAA,GAAc,QAAQ,KAAA,IAAS,WAAA;AAC/B,IAAA,iBAAA,GAAoB,QAAQ,WAAA,IAAe,iBAAA;AAC3C,IAAA,aAAA,GAAgB,OAAA,CAAQ,MAAM,OAAA,IAAW,aAAA;AACzC,IAAA,UAAA,GAAa,SAAA,CAAU,UAAA,EAAY,OAAA,CAAQ,IAAI,CAAA;AAE/C,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,KAAA,MAAW,CAAC,YAAY,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtE,QAAA,IAAI,CAAC,uBAAA,CAAwB,SAAS,CAAA,EAAG;AACvC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAAU,cAAA,CAAe,UAAU,CAAA,KAAM,EAAC;AAChD,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAA,GAAS,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC7B,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,OAAA,CAAQ,MAAA,EAAQ;AAC3C,MAAA,MAAA,GAAS,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,yBAAA;AAAA,MACA,wBAAA;AAAA,MACA,WAAA,CAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,EAAA;AACnC,EAAA,MAAM,cAAc,UAAA,CAAW,MAAA;AAE/B,EAAA,MAAM,aAAA,GAA+B;AAAA,IACnC,EAAA,EAAI,OAAA;AAAA,IACJ,GAAA,EAAK,OAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,MAAM,WAAA,IAAe,OAAA;AAAA,IACrB,OAAA,EAAS,aAAA;AAAA,IACT,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAC7B,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAA,EAAW,CAAC,CAAC,KAAA,CAAM,OAAA;AAAA,MACnB,UAAU,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA,KACrD,CAAE,CAAA;AAAA,IACF,UAAU,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,SAAS,cAAA,GAAiB,MAAA;AAAA,IAChE,KAAA,EAAO,WAAW,KAAK,CAAA;AAAA,IACvB,IAAA,EAAM,UAAA;AAAA,IACN,iBAAiB;AAAC,GACpB;AAEA,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,oBAAA,CACP,eACA,KAAA,EACyD;AACzD,EAAA,MAAM,MAA+D,EAAC;AAEtE,EAAA,KAAA,MAAW,KAAA,IAAS,cAAc,MAAA,EAAQ;AACxC,IAAA,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,GAAI,EAAC;AACjB,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,CAAA;AACzE,MAAA,IAAI,CAAC,eAAe,QAAA,EAAU;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,CAAC,YAAY,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,EAAG;AAC5E,QAAA,IAAI,CAAC,uBAAA,CAAwB,SAAS,CAAA,EAAG;AACvC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,QAAA,EAAU;AAAC,UAAA;AAAA,QAAS;AAEzB,QAAA,MAAM,MAAA,GAAS,SAAS,UAAU,CAAA;AAClC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,QAAA,CAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAS,CAAA;AAAA,QACxC,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBACP,SAAA,EACsC;AACtC,EAAA,OAAO,SAAA,KAAc,IAAA,IAAQ,OAAO,SAAA,KAAc,QAAA;AACpD;AAEA,SAAS,WAAW,KAAA,EAAiD;AACnE,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,MACjB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,KAAA,KAAU;AAEd,IAAA,IAAI,OAAO,MAAM,MAAA,KAAW,QAAA,IAAY,MAAM,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG;AACvE,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,IACf;AAEA,IAAA,OAAO,GAAG,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA;AAAA,EAC5C,CAAC,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,SAAA,CACP,UACA,IAAA,EACqC;AACrC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,QAAA,GAAW,eAAA,CAAgB,QAAQ,CAAA,GAAI,MAAA;AAAA,EAChD;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA,EAC7B;AACE,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,GAAG,KAAA,CAAM,IAAI,CAAA,EAAE;AACzC;AAEA,SAAS,mBAAmB,GAAA,EAAsB;AAChD,EAAA,OAAO,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,CAAI,WAAW,GAAG,CAAA;AAChD;AAOA,SAAS,sBAAsB,GAAA,EAAgC;AAC7D,EAAA,MAAM,CAAC,GAAA,EAAK,SAAS,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,aAAa,GAAA,IAAO,EAAA;AAAA,IACpB,WAAW,SAAA,IAAa;AAAA,GAC1B;AACF;AAEA,eAAe,kBAAA,CACb,KACA,GAAA,EACuB;AACvB,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAU,GAAI,sBAAsB,GAAG,CAAA;AAE5D,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,CAAA,EAAG,WAAW,CAAA,aAAA,CAAA,EAAiB;AAAA,MACnE,KAAA,EAAO,CAAC,GAAG;AAAA,KACZ,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,2BAA2B,WAAW,CAAA,qBAAA,CAAA;AAAA,MACtC,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,WAAW,GAAA;AAAI,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACvC,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACAA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAA;AAAA,IACpCA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAA;AAAA,IACpCA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,eAAe;AAAA,GACrC;AAEA,EAAA,KAAA,MAAW,aAAa,gBAAA,EAAkB;AACxC,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAME,QAAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,QAAQ,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAY,OAAO,IAAA,EAAc,QAAA;AACvC,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,MAAM,MAAM,CAAA;AAAA,MACrB,MAAA,EAAQ,CAAA,IAAA,EAAO,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MACvC,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,OAAA;AAAA,IACR,4BAAA;AAAA,IACA,CAAA,SAAA,EAAY,SAAS,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,CAAA;AAAA,IAC3D,WAAA,CAAY,0BAAA;AAAA,IACZ,EAAE,WAAW,GAAA;AAAI,GACnB;AACF;;;ACtWA,aAAA,EAAA;AAEA,cAAA,EAAA;AAOA,SAAS,mBAAA,CAAoB,YAAoB,UAAA,EAA4B;AAC3E,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAI,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAC,GAAG,CAAA,EAAA,EAAK;AACvF,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAE/B,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,IAAI,OAAA,EAAS;AAAC,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MAAE;AACxC,MAAA,IAAI,OAAA,EAAS;AAAC,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MAAE;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,QAAA,IAAY,QAAA,CAAS,SAAS,QAAA,EAAU;AAC5D,IAAA,IAAA,CAAK,KAAK,eAAe,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACpC;AAMA,eAAe,oBACb,GAAA,EAC2D;AAC3D,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,OAAA,IAAWF,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAE3C,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAE1B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,IAAI;AACF,QAAA,MAAMC,QAAAA,CAAG,OAAO,SAAS,CAAA;AACzB,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,OAAO,IAAI,MAAA,GAAS,MAAA;AACrD,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAO;AAAA,MACnC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQD,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AACA,IAAA,GAAA,GAAMA,KAAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAsB,oBACpB,IAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,MAAM,MAAA,GAAqB;AAAA,IACzB,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,UAAU;AAAC,GACb;AAEA,EAAA,IAAI,IAAA,CAAK,YAAY,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1D,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,QAAA,EAAU,MAAA,IAAU,IAAA,CAAK,MAAA,IAAU,MAAA;AAClD,EAAA,MAAM,cAAA,GAAiB,MAAA,KAAW,MAAA,GAAS,gBAAA,GAAmB,gBAAA;AAE9D,EAAA,MAAM,aAAa,QAAA,EAAU,IAAA,IAAQA,MAAK,IAAA,CAAK,GAAA,EAAK,OAAO,cAAc,CAAA;AAGzE,EAAA,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAGrC,EAAA,MAAM,SAAA,GAAiB;AAAA,IACrB,aAAA,EAAe,KAAA;AAAA,IACf,UAAU;AAAC,GACb;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAkB,YAAY,OAAO;AACrC,MAAA,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA,GAAI,EAAC;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,IAAA,SAAA,CAAU,WAAW,IAAA,CAAK,SAAA;AAAA,EAC5B;AAGA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,kBAAkB,MAAMC,QAAAA,CAAG,QAAA,CAAS,QAAA,CAAS,MAAM,OAAO,CAAA;AAChE,MAAA,MAAM,YAAA,GAAe,WAAW,MAAA,GAC5B,IAAA,CAAK,MAAM,eAAe,CAAA,GAC1BG,KAAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAG9B,MAAA,IAAI,QAAA,GAAW,KAAA;AAGf,MAAA,IAAI,CAAC,aAAa,aAAA,EAAe;AAC/B,QAAA,YAAA,CAAa,aAAA,GAAgB,KAAA;AAC7B,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAGA,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAI,CAAC,aAAa,QAAA,EAAU;AAC1B,UAAA,YAAA,CAAa,WAAW,EAAC;AACzB,UAAA,QAAA,GAAW,IAAA;AAAA,QACb;AACA,QAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,UAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,YAAA,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,GAAI,EAAC;AAClC,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,SAAA,KAAc,KAAA,CAAA,IAAa,YAAA,CAAa,QAAA,KAAa,KAAK,SAAA,EAAW;AAC5E,QAAA,YAAA,CAAa,WAAW,IAAA,CAAK,SAAA;AAC7B,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,IAAI,CAAC,QAAA,EAAU;AAEb,QAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAA;AACtD,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAC9B,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAA,KAAW,MAAA,GAC1B,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,GACxCA,KAAAA,CAAK,SAAA,CAAU,YAAY,CAAA;AAG/B,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,eAAA,KAAoB,UAAA,EAAY;AACjD,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,IAAA,EAAM,UAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,WAAA,EAAa,mBAAA,CAAoB,eAAA,EAAiB,UAAU;AAAA,SAC9D;AACA,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAC1B,QAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,mDAAA,EAAsD,UAAU,CAAA,CAAE,CAAA;AACvF,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,eAAA,CAAgB,YAAY,UAAU,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,YAAY,CAAA;AACxD,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,IAChC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,oBAAA;AAAA,QACA,CAAA,yCAAA,EAA4C,SAAS,IAAI,CAAA,CAAA;AAAA,QACzD,WAAA,CAAY,kBAAA;AAAA,QACZ,EAAE,OAAO,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAAE,OAClE;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,MAAM,OAAA,GAAU,MAAA,KAAW,MAAA,GACvB,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,GACrCA,KAAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAE5B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,eAAA,CAAgB,YAAY,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,YAAY,CAAA;AACvD,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,MAAA;AACT;ACpNA,cAAA,EAAA;AAMA,eAAsB,eACpB,IAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAMJ,KAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,WAAW,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkBA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,eAAe,CAAA;AAE7D,EAAA,MAAM,MAAA,GAAqB;AAAA,IACzB,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,UAAU;AAAC,GACb;AAGA,EAAA,qBAAA,CAAsB,cAAc,GAAG,CAAA;AAGvC,EAAA,IAAI;AACF,IAAA,MAAMC,QAAAA,CAAG,OAAO,eAAe,CAAA;AAC/B,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AAGvC,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,kDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,WAAW,IAAA,CAAK,SAAA,KAAc,SAAY,IAAA,CAAK,SAAA,IAAa,SAAY,QAAA,EAAU,SAAA;AAAA,IAClF,SAAS,IAAA,CAAK,UAAA,KAAe,SAAY,IAAA,CAAK,UAAA,IAAc,SAAY,QAAA,EAAU,OAAA;AAAA,IAClF,cAAc,IAAA,CAAK,YAAA,KAAiB,SAAY,IAAA,CAAK,YAAA,IAAgB,SAAY,QAAA,EAAU,YAAA;AAAA,IAC3F,MAAA,EAAQ,QAAA,EAAU,MAAA,IAAU,EAAC;AAAA,IAC7B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AAEb,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AAAA,IACvC;AACA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,cAAc,CAAA;AACzD,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAClC,CAAA,MAAO;AAEL,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AAAA,IACvC;AACA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,cAAc,CAAA;AAC1D,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACT;;;Ad/CA,cAAA,EAAA;AerBA,IAAM,GAAA,GAAM,IAAI,GAAA,CAAI,EAAE,WAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AACtD,UAAA,CAAW,GAAG,CAAA;AAEd,IAAM,YAAiC,EAAC;AASjC,SAAS,qBAAA,CAAsB,SAAiB,MAAA,EAAmC;AACxF,EAAA,MAAM,MAAA,GAAS,UAAU,OAAO,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,EAAE;AAEhD,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,SAAS,MAAM,CAAA;AAC1B,EAAA,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,MAAA,EAAQ,QAAA,CAAS,UAAU,IAAA,EAAK;AACrD","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core/config/errors\n * Standardized error class for KB Labs with exit code mapping\n */\n\nexport class KbError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: any\n ) {\n super(message);\n this.name = 'KbError';\n }\n}\n\n/**\n * Maps KbError codes to CLI exit codes\n */\nexport function getExitCode(err: KbError): number {\n if (err.code === 'ERR_FORBIDDEN') {return 3;}\n if (err.code === 'ERR_CONFIG_NOT_FOUND') {return 2;}\n if (err.code === 'ERR_CONFIG_EXISTS_CONFLICT') {return 2;}\n if (err.code === 'ERR_PATH_OUTSIDE_WORKSPACE') {return 2;}\n if (err.code.startsWith('ERR_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n ERR_CONFIG_NOT_FOUND: 'Create .kb/kb-labs.config.yaml or run: kb init',\n ERR_CONFIG_INVALID: 'Check configuration syntax and required fields',\n ERR_CONFIG_EXISTS_CONFLICT: 'Use --force to overwrite existing configuration',\n ERR_PATH_OUTSIDE_WORKSPACE: 'Check cwd or use a relative path within the workspace',\n ERR_PRESET_NOT_RESOLVED: 'Install the required preset package or check network connectivity',\n ERR_PROFILE_INCOMPATIBLE: 'Profile version is incompatible with current system',\n ERR_PROFILE_NOT_DEFINED: 'Add profiles[] to kb.config.json or pass --profile=<id>',\n ERR_PROFILE_RESOLVE_FAILED: 'Profile registry unavailable. Define profiles[] inside kb.config.json or use workspace presets.',\n ERR_PROFILE_EXTENDS_FAILED: 'Profile extends failed. Check extends reference or install required preset/package.',\n ERR_PROFILE_SCOPE_NOT_FOUND: 'Scope not found. Use --scope=<id> with one of the configured scopes.',\n ERR_PROFILE_SCOPE_CONFLICT: 'Multiple scopes matched. Specify --scope=<id> explicitly.',\n ERR_PROFILE_INVALID_FORMAT: 'Update profiles[] in kb.config.json (Profiles v2) or rerun your plugin setup command.',\n ERR_ARTIFACT_LIMIT_EXCEEDED: 'Remove or split large artifacts, or reduce artifact count',\n ERR_FORBIDDEN: 'Add role in policy.overrides or use preset...',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n","/**\n * @module @kb-labs/core/config/utils/fs-atomic\n * Atomic file write operations using tmp+rename pattern\n */\n\nimport { promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { KbError } from '../errors/kb-error';\nimport { dirname } from 'node:path';\n\n/**\n * Write file atomically using tmp+rename pattern\n * This ensures that the file is never partially written in case of crashes\n */\nexport async function writeFileAtomic(\n path: string,\n data: string | Uint8Array\n): Promise<void> {\n const tmp = `${path}.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n \n try {\n // Ensure parent directory exists\n await fs.mkdir(dirname(path), { recursive: true });\n await fs.mkdir(dirname(tmp), { recursive: true });\n \n // Write to temp file\n await fs.writeFile(tmp, data);\n \n // Atomic rename\n await fs.rename(tmp, path);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tmp);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Ensure a path is within the workspace root\n * Throws ERR_PATH_OUTSIDE_WORKSPACE if the path escapes the workspace\n */\nexport function ensureWithinWorkspace(targetPath: string, workspaceRoot: string): void {\n const absTarget = resolve(targetPath);\n const absRoot = resolve(workspaceRoot);\n \n if (!absTarget.startsWith(absRoot)) {\n throw new KbError(\n 'ERR_PATH_OUTSIDE_WORKSPACE',\n `Refusing to write outside workspace: ${targetPath}`,\n 'Check cwd or use a relative path within the workspace',\n { targetPath, workspaceRoot }\n );\n }\n}\n\n","/**\n * @module @kb-labs/core/config/runtime\n * Infrastructure-only config pipeline (no domain keys).\n * Provides: nearest config discovery, safe JSON read with diagnostics,\n * deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport path from \"node:path\";\nimport type { Diagnostic, FindNearestConfigOpts, JsonReadResult, ProfilesConfig, KBConfig } from \"../types\";\n\n/** Find nearest config file walking up from startDir until stopDir or FS root. */\nexport async function findNearestConfig(opts: FindNearestConfigOpts): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(opts.startDir ?? process.cwd());\n const stop = opts.stopDir ? path.resolve(opts.stopDir) : null;\n\n const tried: string[] = [];\n let dir = start;\n\n while (true) {\n for (const name of opts.filenames) {\n const candidate = path.join(dir, name);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch { /* continue */ }\n }\n const parent = path.dirname(dir);\n if (parent === dir) { break; }\n if (stop && (dir === stop || parent === stop)) { break; }\n dir = parent;\n }\n return { path: null, tried };\n}\n\n/** Read JSON with explicit diagnostics (no silent nulls). */\n/** Strip single-line (//) and multi-line (/* *\\/) comments from a JSON string. */\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n // String literal — copy verbatim until closing quote.\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') {break;}\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n // Single-line comment — skip to end of line.\n while (i < len && src[i] !== '\\n') {i++;}\n } else if (src[i] === '/' && src[i + 1] === '*') {\n // Multi-line comment — skip to *\\/\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) {i++;}\n i += 2;\n } else {\n out += src[i++];\n }\n }\n // Remove trailing commas before } or ] (not valid JSON but allowed in JSONC).\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nexport async function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>> {\n const diagnostics: Diagnostic[] = [];\n try {\n const raw = await fsp.readFile(p, \"utf8\");\n try {\n const stripped = p.endsWith('.jsonc') ? stripJsonComments(raw) : raw;\n const data = JSON.parse(stripped) as T;\n return { ok: true, data, diagnostics };\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"JSON_PARSE_FAILED\", message: `Failed to parse JSON: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"FILE_READ_FAILED\", message: `Failed to read file: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n}\n\n/** Shallow pick of defined fields only. */\nexport function pickDefined<T extends Record<string, any>>(obj: T | undefined): Partial<T> {\n if (!obj) { return {}; }\n const out: Partial<T> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) { (out as any)[k] = v; }\n }\n return out;\n}\n\n/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */\nexport function mergeDefined<T>(base: T, over?: Partial<T>): T {\n if (!over) { return base; }\n if (Array.isArray(base) && Array.isArray(over)) {\n return [...base, ...over.filter(v => v !== undefined)] as unknown as T;\n }\n if (isPlainObject(base) && isPlainObject(over)) {\n const out: any = { ...base };\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) { continue; }\n if (isPlainObject((base as any)[k]) && isPlainObject(v)) {\n out[k] = mergeDefined((base as any)[k], v as any);\n } else if (Array.isArray((base as any)[k]) && Array.isArray(v)) {\n out[k] = mergeDefined((base as any)[k], v as any);\n } else {\n out[k] = v;\n }\n }\n return out;\n }\n // Different types → overlay wins if defined\n return (over as T) ?? base;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\n/**\n * Policy for a single top-level field during platform ← project merge.\n * - `platform-only` — ignore the project layer's value (emit warning upstream).\n * - `mergeable` — deep-merge (project overrides platform).\n * - `project-only` — take the project value as-is; platform layer is dropped.\n */\nexport type FieldMergePolicy = \"platform-only\" | \"mergeable\" | \"project-only\";\n\nexport interface MergeWithFieldPolicyResult<T> {\n /** Merged config object. */\n value: T;\n /** Top-level field names where the project layer was ignored because the field is `platform-only`. */\n ignoredProjectFields: string[];\n /** Per-field provenance: `'platform'`, `'project'`, or `'both'`. */\n sources: Record<string, \"platform\" | \"project\" | \"both\">;\n}\n\n/**\n * Merge two config layers using a per-field policy map.\n *\n * The `policy` map is keyed by top-level field names on the config object.\n * Fields missing from the map default to `mergeable` — i.e. deep-merge with\n * project overriding platform.\n */\nexport function mergeWithFieldPolicy<T extends object>(\n platform: Partial<T> | undefined,\n project: Partial<T> | undefined,\n policy: Partial<Record<keyof T, FieldMergePolicy>>,\n): MergeWithFieldPolicyResult<T> {\n const out: Record<string, unknown> = {};\n const sources: Record<string, \"platform\" | \"project\" | \"both\"> = {};\n const ignoredProjectFields: string[] = [];\n\n const keys = new Set<string>([\n ...Object.keys(platform ?? {}),\n ...Object.keys(project ?? {}),\n ]);\n\n for (const key of keys) {\n const platformValue = (platform as Record<string, unknown> | undefined)?.[key];\n const projectValue = (project as Record<string, unknown> | undefined)?.[key];\n const fieldPolicy = (policy as Record<string, FieldMergePolicy | undefined>)[key] ?? \"mergeable\";\n\n const hasPlatform = platformValue !== undefined;\n const hasProject = projectValue !== undefined;\n\n if (fieldPolicy === \"platform-only\") {\n if (hasProject) { ignoredProjectFields.push(key); }\n if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n }\n continue;\n }\n\n if (fieldPolicy === \"project-only\") {\n if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n } else if (hasPlatform) {\n // Platform layer carries a value for a project-only field — drop it silently;\n // it has no semantic meaning at the platform layer.\n continue;\n }\n continue;\n }\n\n // mergeable\n if (hasPlatform && hasProject) {\n out[key] = mergeDefined(platformValue as never, projectValue as never);\n sources[key] = \"both\";\n } else if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n } else if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n }\n }\n\n return { value: out as T, ignoredProjectFields, sources };\n}\n\nconst SYSTEM_DEFAULTS = {\n profiles: { rootDir: '.kb/profiles', defaultName: 'default', strict: true }\n} as const;\n\nexport interface ResolveConfigArgs<TConfig, _TEnvMap = unknown> {\n defaults: TConfig;\n fileConfig?: Partial<TConfig>;\n envMapper?: (env: NodeJS.ProcessEnv) => Partial<TConfig> | undefined; // product supplies mapping\n cliOverrides?: Partial<TConfig>;\n validate?: (cfg: TConfig) => { ok: boolean; diagnostics?: Diagnostic[] }; // product supplies validation\n}\n\n/**\n * Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.\n * No domain keys inside; mapping/validation provided by the product/shared layer.\n */\nexport function resolveConfig<TConfig>(args: ResolveConfigArgs<TConfig>): { value: TConfig; diagnostics: Diagnostic[] } {\n const diagnostics: Diagnostic[] = [];\n const envPart = args.envMapper?.(process.env) ?? {};\n\n const merged = mergeDefined(\n mergeDefined(\n mergeDefined(mergeDefined(structuredClone(SYSTEM_DEFAULTS) as unknown as Partial<TConfig>, structuredClone(args.defaults)), args.fileConfig),\n envPart,\n ),\n args.cliOverrides,\n ) as TConfig;\n\n if (args.validate) {\n const res = args.validate(merged);\n if (!res.ok) {\n diagnostics.push({ level: \"error\", code: \"CONFIG_VALIDATION_FAILED\", message: \"Configuration did not pass validation.\" });\n if (res.diagnostics) { diagnostics.push(...res.diagnostics); }\n } else if (res.diagnostics?.length) {\n diagnostics.push(...res.diagnostics);\n }\n }\n\n return { value: merged, diagnostics };\n}\n\nexport { SYSTEM_DEFAULTS };\nexport type { ProfilesConfig, KBConfig };","/**\n * @module @kb-labs/core/utils/env\n * Small helpers to convert ENV strings to typed values.\n */\n\nexport function toBool(v: string | undefined): boolean | undefined {\n if (v === undefined) {return undefined;}\n const s = v.trim().toLowerCase();\n if (s === \"1\" || s === \"true\" || s === \"yes\" || s === \"on\") {return true;}\n if (s === \"0\" || s === \"false\" || s === \"no\" || s === \"off\") {return false;}\n return undefined; // unknown → let caller decide default\n}\n\nexport function toInt(v: string | undefined): number | undefined {\n if (v === undefined) {return undefined;}\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}","/**\n * @module @kb-labs/core/config/utils/product-normalize\n * Product ID normalization between code (camelCase) and filesystem (kebab-case)\n */\n\nconst FS_MAP = new Map([\n ['aiReview', 'ai-review'],\n ['aiDocs', 'ai-docs'],\n ['devlink', 'devlink'],\n ['release', 'release'],\n ['devkit', 'devkit'],\n ['mind', 'mind'],\n ['workflow', 'workflow'],\n ['analytics', 'analytics'],\n]);\n\n/**\n * Convert product ID to filesystem kebab-case format\n * @param id Product ID (e.g., 'aiReview', 'mind', 'workflow')\n * @returns kebab-case string for filesystem paths\n */\nexport function toFsProduct(id: string): string {\n return FS_MAP.get(id) ?? id;\n}\n\n/**\n * Convert filesystem kebab-case key to product ID\n * @param fsKey kebab-case string from filesystem\n * @returns Product ID (camelCase if mapped, original otherwise)\n */\nexport function toConfigProduct(fsKey: string): string {\n for (const [k, v] of FS_MAP) {\n if (v === fsKey) {return k;}\n }\n return fsKey;\n}\n\n/**\n * Check if a string is a known product ID\n */\nexport function isValidProductId(value: string): boolean {\n return FS_MAP.has(value);\n}\n\n/**\n * Get all known product IDs\n */\nexport function getAllProductIds(): string[] {\n return Array.from(FS_MAP.keys());\n}\n","import path from 'node:path';\n\n/**\n * Get profiles root directory\n */\nexport function getProfilesRootDir(cwd: string): string {\n return path.join(cwd, '.kb', 'profiles');\n}\n\n/**\n * Get product configuration directory\n */\nexport function getProductConfigDir(cwd: string, fsProduct: string): string {\n return path.join(cwd, '.kb', fsProduct);\n}\n\n/**\n * Get product configuration file path\n */\nexport function getProductConfigPath(cwd: string, fsProduct: string): string {\n return path.join(getProductConfigDir(cwd, fsProduct), `${fsProduct}.config.json`);\n}\n\n/**\n * Get .kb root directory\n */\nexport function getKbRootDir(cwd: string): string {\n return path.join(cwd, '.kb');\n}\n\n/**\n * Get lockfile path\n */\nexport function getLockfilePath(cwd: string): string {\n return path.join(getKbRootDir(cwd), 'lock.json');\n}\n\n","// Core exports\nexport * from './types/index.js';\nexport * from './runtime/index.js';\nexport * from './utils/index.js';\nexport * from './utils/paths.js';\n\n// Enhanced config system exports\nexport * from './errors/kb-error.js';\nexport * from './cache/fs-cache.js';\nexport * from './hash/config-hash.js';\nexport * from './api/read-config.js';\nexport * from './api/read-kb-config.js';\nexport * from './merge/layered-merge.js';\nexport * from './api/product-config.js';\nexport * from './preset/resolve-preset.js';\nexport * from './lockfile/lockfile.js';\nexport * from './types/preset.js';\nexport * from './profiles/types.js';\nexport * from './profiles/loader.js';\nexport * from './profiles/scope-selector.js';\nexport * from './profiles/resolver.js';\n\n// Init system exports\nexport * from './types/init.js';\nexport * from './api/init-workspace.js';\nexport * from './api/upsert-lockfile.js';\nexport * from './utils/fs-atomic.js';\n\n// Re-export clearCaches for convenience\nexport { clearCaches } from './cache/fs-cache.js';\n\n// Validation API\nexport { validateProductConfig } from './validation/validate-config.js';\n","/**\n * @module @kb-labs/core/config/cache/fs-cache\n * LRU cache for filesystem reads with clearCaches() support\n */\n\nimport { promises as fsp } from 'node:fs';\n\ninterface CacheEntry {\n data: any;\n mtime: number;\n size: number;\n timestamp: number;\n}\n\ninterface CacheKey {\n absPath: string;\n mtime: number;\n size: number;\n}\n\nclass LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize: number;\n\n constructor(maxSize = 100) {\n this.maxSize = maxSize;\n }\n\n get(key: K): V | undefined {\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\nclass FSCache {\n private cache = new LRUCache<string, CacheEntry>(100);\n private keyCache = new LRUCache<string, CacheKey>(100);\n\n /**\n * Generate cache key from file path, mtime, and size\n */\n private async getCacheKey(absPath: string): Promise<CacheKey> {\n const keyStr = `key:${absPath}`;\n let key = this.keyCache.get(keyStr);\n \n if (!key) {\n try {\n const stats = await fsp.stat(absPath);\n key = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(keyStr, key);\n } catch {\n // File doesn't exist or can't be read\n return { absPath, mtime: 0, size: 0 };\n }\n }\n \n return key;\n }\n\n /**\n * Get cached file data if available and not stale\n */\n async get(absPath: string): Promise<any | null> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n const entry = this.cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n // Check if file has been modified since cache\n try {\n const stats = await fsp.stat(absPath);\n if (stats.mtime.getTime() !== key.mtime || stats.size !== key.size) {\n // File changed, remove from cache and update key cache\n this.cache.delete(cacheKey);\n // Update the key cache with new stats\n const newKey = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(`key:${absPath}`, newKey);\n return null;\n }\n } catch {\n // File no longer exists\n this.cache.delete(cacheKey);\n return null;\n }\n\n return entry.data;\n }\n\n /**\n * Cache file data\n */\n async set(absPath: string, data: any): Promise<void> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n this.cache.set(cacheKey, {\n data,\n mtime: key.mtime,\n size: key.size,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.cache.clear();\n this.keyCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; keySize: number } {\n return {\n size: this.cache.size(),\n keySize: this.keyCache.size(),\n };\n }\n}\n\n// Singleton instance\nconst fsCache = new FSCache();\n\nexport { fsCache, FSCache };\n\n/**\n * Clear all filesystem caches\n */\nexport function clearCaches(): void {\n fsCache.clearCaches();\n}\n","/**\n * @module @kb-labs/core/config/hash/config-hash\n * SHA256 hash computation for configuration objects (lockfile generation)\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash of a configuration object\n * @param obj Configuration object to hash\n * @returns SHA256 hash as hex string\n */\nexport function computeConfigHash(obj: any): string {\n // Normalize object for consistent hashing\n const normalized = normalizeForHash(obj);\n const json = JSON.stringify(normalized, null, 0);\n return createHash('sha256').update(json, 'utf8').digest('hex');\n}\n\n/**\n * Normalize object for consistent hashing\n * - Sort object keys\n * - Remove undefined values\n * - Convert to stable representation\n */\nfunction normalizeForHash(obj: any): any {\n if (obj === null || obj === undefined) {\n return null;\n }\n \n if (typeof obj !== 'object') {\n return obj;\n }\n \n if (Array.isArray(obj)) {\n return obj.map(normalizeForHash);\n }\n \n // Sort object keys for consistent ordering\n const sortedKeys = Object.keys(obj).sort();\n const normalized: any = {};\n \n for (const key of sortedKeys) {\n const value = obj[key];\n if (value !== undefined) {\n normalized[key] = normalizeForHash(value);\n }\n }\n \n return normalized;\n}\n\n/**\n * Compute hash for multiple config objects\n * @param configs Array of config objects\n * @returns Combined SHA256 hash\n */\nexport function computeConfigsHash(configs: any[]): string {\n const combined = configs.reduce((acc, config) => {\n return { ...acc, ...config };\n }, {});\n return computeConfigHash(combined);\n}\n","/**\n * @module @kb-labs/core/config/api/read-config\n * Enhanced config file reading with YAML support and find-up\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { extname } from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { fsCache } from '../cache/fs-cache';\n\nexport interface ConfigFileResult {\n data: unknown;\n format: 'json' | 'yaml';\n path: string;\n}\n\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') { break; }\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n while (i < len && src[i] !== '\\n') { i++; }\n } else if (src[i] === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) { i++; }\n i += 2;\n } else {\n out += src[i++];\n }\n }\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\n/**\n * Read config file with format detection and caching\n */\nexport async function readConfigFile(filePath: string): Promise<ConfigFileResult> {\n const absPath = path.resolve(filePath);\n \n // Check cache first\n const cached = await fsCache.get(absPath);\n if (cached !== null) {\n return cached;\n }\n\n try {\n const raw = await fsp.readFile(absPath, 'utf-8');\n const ext = extname(absPath).toLowerCase();\n \n let data: unknown;\n let format: 'json' | 'yaml';\n \n if (ext === '.yaml' || ext === '.yml') {\n data = YAML.parse(raw);\n format = 'yaml';\n } else {\n const jsonSource = ext === '.jsonc' ? stripJsonComments(raw) : raw;\n data = JSON.parse(jsonSource);\n format = 'json';\n }\n \n const result: ConfigFileResult = { data, format, path: absPath };\n \n // Cache the result\n await fsCache.set(absPath, result);\n \n return result;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to parse config file: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { filePath, error: error.message }\n );\n }\n \n throw new KbError(\n 'ERR_CONFIG_NOT_FOUND',\n `Config file not found: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_NOT_FOUND,\n { filePath, error: error instanceof Error ? error.message : String(error) }\n );\n }\n}\n\n/**\n * Find nearest config file walking up from startDir to git root\n * Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility\n */\nasync function findNearestConfig(\n startDir: string,\n filenames: string[] = []\n): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(startDir);\n const tried: string[] = [];\n let dir = start;\n\n // Default filenames if not provided: prioritize .kb/ location\n const defaultFilenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;\n\n while (true) {\n for (const filename of searchFilenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n \n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // Continue to next filename\n }\n }\n \n const parent = path.dirname(dir);\n if (parent === dir) {\n // Reached filesystem root\n break;\n }\n dir = parent;\n }\n \n return { path: null, tried };\n}\n\n/**\n * Find git root directory\n */\nexport async function findGitRoot(startDir: string): Promise<string | null> {\n let dir = path.resolve(startDir);\n \n while (true) {\n try {\n await fsp.access(path.join(dir, '.git'));\n return dir;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n }\n \n return null;\n}\n\n/**\n * Read workspace config with find-up to git root\n */\nexport async function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null> {\n const { path: configPath } = await findNearestConfig(cwd);\n \n if (!configPath) {\n return null;\n }\n \n return readConfigFile(configPath);\n}\n","/**\n * @module @kb-labs/core-config/api/read-kb-config\n * Find + read kb.config.* files (product-level workspace config).\n */\n\nimport path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { findGitRoot, readConfigFile, type ConfigFileResult } from './read-config';\n\nconst KB_CONFIG_FILENAMES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n '.kb/kb.config.jsonc',\n '.kb/kb.config.json',\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n];\n\nexport type KbConfigResult = ConfigFileResult;\n\nexport async function findKbConfig(\n cwd: string,\n filenames: string[] = KB_CONFIG_FILENAMES\n): Promise<{ path: string | null; tried: string[] }> {\n const tried: string[] = [];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n let dir = path.resolve(cwd);\n\n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // continue\n }\n }\n\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n\n dir = path.dirname(dir);\n }\n\n return { path: null, tried };\n}\n\nexport async function readKbConfig(cwd: string): Promise<KbConfigResult | null> {\n const { path } = await findKbConfig(cwd);\n if (!path) {\n return null;\n }\n return readConfigFile(path);\n}\n\n","/**\n * @module @kb-labs/core/config/merge/layered-merge\n * Layered merge with trace for configuration layers\n */\n\nimport type { ConfigLayer, MergeTrace } from '../types';\n\nexport interface LayeredMergeResult {\n merged: any;\n trace: MergeTrace[];\n}\n\n/**\n * Merge configuration layers with detailed trace\n * Arrays are overwritten (not merged)\n * Objects are deeply merged\n */\nexport function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult {\n const trace: MergeTrace[] = [];\n \n const isPlainObject = (v: any): v is Record<string, any> => \n v && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;\n \n const merge = (base: any, overlay: any, layer: ConfigLayer, path: string[] = []): any => {\n // Handle array overwrite\n if (Array.isArray(base) && Array.isArray(overlay)) {\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'overwriteArray',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n return overlay;\n }\n \n // Handle object merge\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const result: any = { ...base };\n \n for (const [key, value] of Object.entries(overlay)) {\n if (key in base) {\n result[key] = merge(base[key], value, layer, [...path, key]);\n } else {\n trace.push({\n path: [...path, key].join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n result[key] = value;\n }\n }\n \n return result;\n }\n \n // Different types or primitive values - overlay wins\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n \n return overlay ?? base;\n };\n \n const merged = layers.reduce((acc, layer) => {\n return merge(acc, layer.value, layer);\n }, {});\n \n return { merged, trace };\n}\n\n/**\n * Extract profile ref from source string\n */\nfunction extractProfileRef(source: string): string | undefined {\n const match = source.match(/profile[^:]*:[^@]+@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract preset ref from source string\n */\nfunction extractPresetRef(source: string): string | undefined {\n const match = source.match(/preset[^:]*:@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract version from source string\n */\nfunction extractVersion(source: string): string | undefined {\n const match = source.match(/@([^:]+)/);\n return match?.[1];\n}\n","/**\n * @module @kb-labs/core/config/preset/resolve-preset\n * Org preset resolution with offline-first npm package loading\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface PresetInfo {\n name: string;\n version: string;\n path: string;\n config: any;\n}\n\n/**\n * Resolve org preset package (offline-first)\n */\nexport async function resolvePreset(\n presetRef: string,\n cwd: string\n): Promise<PresetInfo> {\n // Parse preset reference (e.g., \"@kb-labs/org-preset@1.3.2\")\n const [name, version] = parsePresetRef(presetRef);\n \n // Try local node_modules first (offline-first)\n const localPath = path.join(cwd, 'node_modules', name);\n try {\n const presetInfo = await loadPresetFromPath(localPath, name, version);\n if (presetInfo) {\n return presetInfo;\n }\n } catch {\n // Local preset not found, continue to network resolution\n }\n \n // Try network resolution (this would be implemented with npm/pnpm APIs)\n // For now, we'll throw an error if local resolution fails\n throw new KbError(\n 'ERR_PRESET_NOT_RESOLVED',\n `Preset not found: ${presetRef}`,\n ERROR_HINTS.ERR_PRESET_NOT_RESOLVED,\n { presetRef, cwd }\n );\n}\n\n/**\n * Parse preset reference into name and version\n */\nfunction parsePresetRef(presetRef: string): [string, string] {\n const atIndex = presetRef.lastIndexOf('@');\n if (atIndex === -1) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include version (e.g., @kb-labs/org-preset@1.3.2)',\n { presetRef }\n );\n }\n \n const name = presetRef.substring(0, atIndex);\n const version = presetRef.substring(atIndex + 1);\n \n if (!name || !version) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include both name and version',\n { presetRef }\n );\n }\n \n return [name, version];\n}\n\n/**\n * Load preset from local path\n */\nasync function loadPresetFromPath(\n presetPath: string,\n name: string,\n version: string\n): Promise<PresetInfo | null> {\n try {\n // Check if preset directory exists\n await fsp.access(presetPath);\n \n // Load package.json to verify version\n const packageJsonPath = path.join(presetPath, 'package.json');\n const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, 'utf-8'));\n \n // Verify version matches (supports semver ranges)\n if (!versionMatches(packageJson.version, version)) {\n return null;\n }\n \n // Load preset config\n const configPath = path.join(presetPath, 'config.defaults.json');\n const config = JSON.parse(await fsp.readFile(configPath, 'utf-8'));\n \n return {\n name,\n version: packageJson.version,\n path: presetPath,\n config,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if version matches (simple semver range support)\n */\nfunction versionMatches(actualVersion: string, requiredVersion: string): boolean {\n // Simple exact match for now\n // TODO: Implement proper semver range matching\n if (requiredVersion.startsWith('^')) {\n const major = requiredVersion.substring(1).split('.')[0];\n const actualMajor = actualVersion.split('.')[0];\n return major === actualMajor;\n }\n \n return actualVersion === requiredVersion;\n}\n\n/**\n * Get preset config for a specific product\n */\nexport function getPresetConfigForProduct(\n preset: PresetInfo,\n product: string\n): any {\n const fsProduct = toFsProduct(product);\n return preset.config.products?.[fsProduct] || {};\n}\n\n/**\n * Get preset metadata\n */\nexport function getPresetMetadata(preset: PresetInfo): {\n name: string;\n version: string;\n path: string;\n products: string[];\n} {\n return {\n name: preset.name,\n version: preset.version,\n path: preset.path,\n products: Object.keys(preset.config.products || {}),\n };\n}\n","/**\n * @module @kb-labs/core/config/lockfile/lockfile\n * Lockfile generation and management\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { computeConfigHash } from '../hash/config-hash';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface LockfileData {\n $schema?: string;\n schemaVersion: '1.0';\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n hashes: Record<string, string>;\n generatedAt: string;\n}\n\n/**\n * Read lockfile from workspace\n */\nexport async function readLockfile(cwd: string): Promise<LockfileData | null> {\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n \n try {\n const lockfileData = await fsp.readFile(lockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n // Try old location for backward compatibility\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n try {\n const lockfileData = await fsp.readFile(oldLockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n return null;\n }\n }\n}\n\n/**\n * Stable JSON serialization with sorted keys for predictable diffs\n */\nfunction stableStringify(obj: any, space = 2): string {\n return JSON.stringify(obj, (key, value) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return Object.keys(value)\n .sort()\n .reduce((sorted: any, key) => {\n sorted[key] = value[key];\n return sorted;\n }, {});\n }\n return value;\n }, space);\n}\n\n/**\n * Write lockfile to workspace\n */\nexport async function writeLockfile(\n cwd: string,\n lockfileData: LockfileData\n): Promise<void> {\n const lockfileDir = path.join(cwd, '.kb');\n const lockfilePath = path.join(lockfileDir, 'lock.json');\n \n // Ensure .kb directory exists\n await fsp.mkdir(lockfileDir, { recursive: true });\n \n // Add schema if not present\n if (!lockfileData.$schema) {\n lockfileData.$schema = 'https://schemas.kb-labs.dev/lockfile.schema.json';\n }\n \n // Use atomic write with stable key ordering\n const { writeFileAtomic } = await import('../utils/fs-atomic');\n await writeFileAtomic(lockfilePath, stableStringify(lockfileData, 2) + '\\n');\n}\n\n/**\n * Update lockfile with new hashes\n */\nexport async function updateLockfile(\n cwd: string,\n updates: {\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n configHashes?: Record<string, any>;\n }\n): Promise<LockfileData> {\n const existing = await readLockfile(cwd);\n \n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: updates.orgPreset || existing?.orgPreset,\n profile: updates.profile || existing?.profile,\n policyBundle: updates.policyBundle || existing?.policyBundle,\n hashes: { ...existing?.hashes },\n generatedAt: new Date().toISOString(),\n };\n \n // Update config hashes\n if (updates.configHashes) {\n for (const [product, config] of Object.entries(updates.configHashes)) {\n const fsProduct = toFsProduct(product as string);\n const hash = computeConfigHash(config);\n lockfileData.hashes[fsProduct] = hash;\n }\n }\n \n await writeLockfile(cwd, lockfileData);\n return lockfileData;\n}\n\n/**\n * Get config hash for a product\n */\nexport function getLockfileConfigHash(product: string, config: any): string {\n return computeConfigHash(config);\n}\n\n/**\n * Check if lockfile is up to date\n */\nexport async function isLockfileUpToDate(\n cwd: string,\n configs: Record<string, any>\n): Promise<boolean> {\n const lockfile = await readLockfile(cwd);\n if (!lockfile) {\n return false;\n }\n \n for (const [product, config] of Object.entries(configs)) {\n const fsProduct = toFsProduct(product as string);\n const currentHash = computeConfigHash(config);\n const lockfileHash = lockfile.hashes[fsProduct];\n \n if (currentHash !== lockfileHash) {\n return false;\n }\n }\n \n return true;\n}\n\n/**\n * Validate lockfile schema\n */\nexport function validateLockfile(lockfileData: any): lockfileData is LockfileData {\n if (!lockfileData || typeof lockfileData !== 'object') {\n return false;\n }\n \n if (lockfileData.schemaVersion !== '1.0') {\n return false;\n }\n \n if (!lockfileData.hashes || typeof lockfileData.hashes !== 'object') {\n return false;\n }\n \n if (!lockfileData.generatedAt || typeof lockfileData.generatedAt !== 'string') {\n return false;\n }\n \n return true;\n}\n\n/**\n * Get lockfile statistics\n */\nexport function getLockfileStats(lockfileData: LockfileData): {\n productCount: number;\n hasOrgPreset: boolean;\n hasProfile: boolean;\n hasPolicyBundle: boolean;\n generatedAt: Date;\n} {\n return {\n productCount: Object.keys(lockfileData.hashes).length,\n hasOrgPreset: !!lockfileData.orgPreset,\n hasProfile: !!lockfileData.profile,\n hasPolicyBundle: !!lockfileData.policyBundle,\n generatedAt: new Date(lockfileData.generatedAt),\n };\n}\n","/**\n * @module @kb-labs/core/config/api/product-config\n * High-level product configuration resolver with layered merge\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { readWorkspaceConfig } from './read-config';\nimport { layeredMergeWithTrace } from '../merge/layered-merge';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { ResolveOptions, ProductConfigResult, ConfigLayer } from '../types';\nimport { computeConfigHash } from '../hash/config-hash';\nimport { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';\nimport { updateLockfile } from '../lockfile/lockfile';\n\n/**\n * Get product configuration with layered merge and trace\n */\nexport async function getProductConfig<T = Record<string, any>>(\n opts: ResolveOptions,\n schema: any\n): Promise<ProductConfigResult<T>> {\n const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;\n const fsProduct = toFsProduct(product);\n \n // Read workspace configuration\n const workspaceConfig = await readWorkspaceConfig(cwd);\n \n // Build configuration layers\n const layers: ConfigLayer[] = [];\n \n // 1. Runtime defaults\n layers.push({\n label: 'runtime',\n value: getRuntimeDefaults(product),\n source: 'runtime:defaults',\n });\n \n // 2. Profile defaults\n if (profileLayer && profileLayer.products) {\n // profileLayer.products is already the product-specific overlay (not a map of products)\n const profileOverlay = profileLayer.products as Record<string, unknown>;\n\n layers.push({\n label: 'profile',\n value: profileOverlay,\n source: profileLayer.source,\n });\n\n if (profileLayer.scope && profileLayer.scope.products) {\n // profileLayer.scope.products is already the scope-specific overlay\n const scopeOverlay = profileLayer.scope.products as Record<string, unknown>;\n layers.push({\n label: 'profile-scope',\n value: scopeOverlay,\n source: profileLayer.scope.source,\n });\n }\n } else {\n layers.push({\n label: 'profile',\n value: {},\n source: 'profile:none',\n });\n }\n \n // 3. Preset defaults (resolve org preset if configured)\n let presetConfig = {};\n if (workspaceConfig?.data) {\n const workspaceData = workspaceConfig.data as any;\n if (workspaceData.$extends) {\n try {\n const preset = await resolvePreset(workspaceData.$extends, cwd);\n presetConfig = getPresetConfigForProduct(preset, product);\n \n layers.push({\n label: 'preset',\n value: presetConfig,\n source: `preset:${workspaceData.$extends}`,\n });\n } catch (error) {\n // Preset resolution failed, continue without preset\n console.warn(`Warning: Could not resolve preset ${workspaceData.$extends}:`, error);\n }\n }\n }\n \n if (Object.keys(presetConfig).length === 0) {\n layers.push({\n label: 'preset',\n value: {},\n source: 'preset:none',\n });\n }\n \n // 4. Workspace config\n if (workspaceConfig?.data) {\n const workspaceData = (workspaceConfig.data as any)?.products?.[fsProduct] || {};\n layers.push({\n label: 'workspace',\n value: workspaceData,\n source: 'workspace:kb-labs.config',\n });\n }\n \n // 5. Local config (.kb/<product>/<product>.config.json)\n const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);\n try {\n const localConfig = await fsp.readFile(localConfigPath, 'utf-8');\n const localData = JSON.parse(localConfig);\n layers.push({\n label: 'local',\n value: localData,\n source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,\n });\n } catch {\n // Local config is optional\n }\n \n // 6. CLI overrides\n if (Object.keys(cli).length > 0) {\n layers.push({\n label: 'cli',\n value: cli,\n source: 'cli:overrides',\n });\n }\n \n // Merge all layers\n const { merged, trace } = layeredMergeWithTrace(layers);\n \n // Validate against schema if provided\n if (schema) {\n // Schema validation will be implemented with AJV\n // For now, we'll skip validation\n }\n \n // Write final config if requested\n if (writeFinal) {\n await writeFinalConfig(cwd, fsProduct, merged);\n }\n \n // Update lockfile with config hash\n try {\n const configHash = computeConfigHash(merged);\n \n const configHashes: Record<string, any> = {};\n configHashes[product] = configHash;\n await updateLockfile(cwd, {\n configHashes\n });\n } catch (error) {\n // Lockfile update is optional, don't fail the config resolution\n console.warn('Warning: Could not update lockfile:', error);\n }\n \n return {\n config: merged as T,\n trace,\n };\n}\n\n/**\n * Explain product configuration (trace only)\n */\nexport async function explainProductConfig(\n opts: Omit<ResolveOptions, 'writeFinal'>,\n schema: any\n): Promise<{ trace: any[] }> {\n const result = await getProductConfig(opts, schema);\n return { trace: result.trace };\n}\n\n/**\n * Get runtime defaults for a product\n */\nfunction getRuntimeDefaults(product: string): any {\n const defaults: Record<string, any> = {\n devlink: {\n watch: true,\n build: true,\n },\n release: {\n registry: 'https://registry.npmjs.org',\n strategy: 'semver',\n bump: 'auto',\n strict: true,\n verify: ['audit', 'build', 'tests'],\n publish: { npm: true, github: false },\n rollback: { enabled: true, maxHistory: 5 },\n output: { json: true, md: true, text: true },\n changelog: {\n enabled: true,\n includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],\n excludeTypes: ['chore', 'ci'],\n ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],\n collapseMerges: true,\n collapseReverts: true,\n preferMergeSummary: true,\n bumpStrategy: 'independent',\n workspace: true,\n perPackage: true,\n format: 'both',\n level: 'standard',\n locale: 'en',\n cache: true,\n requireAudit: true,\n requireSignedTags: false,\n redactPatterns: ['(?i)token=\\\\w+', '(?i)apikey=\\\\w+', '(https?://[^\\\\s]+@[^\\\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],\n maxBodyLength: 500,\n ignoreSubmodules: true,\n },\n git: {\n provider: 'auto',\n autoUnshallow: false,\n },\n },\n aiReview: {\n enabled: true,\n rules: [],\n },\n aiDocs: {\n enabled: true,\n templates: [],\n },\n devkit: {\n sync: true,\n check: true,\n },\n analytics: {\n enabled: true,\n sinks: [],\n buffer: {},\n },\n };\n \n return defaults[product] || {};\n}\n\n/**\n * Write final configuration to .kb/<product>/<product>.config.json\n */\nasync function writeFinalConfig(cwd: string, fsProduct: string, config: any): Promise<void> {\n const configDir = path.join(cwd, '.kb', fsProduct);\n const configPath = path.join(configDir, `${fsProduct}.config.json`);\n \n // Ensure directory exists\n await fsp.mkdir(configDir, { recursive: true });\n \n // Write config with schema version\n const finalConfig = {\n $schema: 'https://schemas.kb-labs.dev/config.schema.json',\n schemaVersion: '1.0',\n ...config,\n };\n \n await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));\n}\n\n/**\n * Get configuration hash for lockfile\n */\nexport function getConfigHash(config: any): string {\n return computeConfigHash(config);\n}\n","/**\n * @module @kb-labs/core-config/profiles/types\n * Shared ProfileV2 + BundleProfile types and Zod schemas.\n */\n\nimport { z } from 'zod';\n\nconst GlobSchema = z.string().min(1, 'Glob pattern must be a non-empty string');\nconst ProductOverridesSchema = z.record(z.string(), z.unknown());\nconst ProductsMapSchema = z.record(z.string(), ProductOverridesSchema);\n\nexport const ScopeV2Schema = z.object({\n id: z.string().min(1, 'Scope id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(GlobSchema).min(1, 'include requires at least one glob'),\n exclude: z.array(GlobSchema).optional(),\n products: ProductsMapSchema.optional(),\n default: z.boolean().optional(),\n});\nexport type ScopeV2 = z.infer<typeof ScopeV2Schema>;\n\nexport const ProfileMetaSchema = z.object({\n version: z.string().optional(),\n tags: z.array(z.string()).optional(),\n deprecated: z.boolean().optional(),\n owner: z.string().optional(),\n}).strict();\nexport type ProfileMeta = z.infer<typeof ProfileMetaSchema>;\n\nexport const ProfileV2Schema = z.object({\n id: z.string().min(1, 'Profile id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n extends: z.string().min(1, 'extends must reference another profile id or preset').optional(),\n scopes: z.array(ScopeV2Schema).optional(),\n products: ProductsMapSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n});\nexport type ProfileV2 = z.infer<typeof ProfileV2Schema>;\n\nexport const ProfilesV2Schema = z.array(ProfileV2Schema);\n\nexport const ResolvedScopeSchema = z.object({\n id: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(z.string()),\n exclude: z.array(z.string()).optional(),\n isDefault: z.boolean(),\n products: ProductsMapSchema.optional(),\n});\nexport type ResolvedScope = z.infer<typeof ResolvedScopeSchema>;\n\nexport const BundleProfileSourceSchema = z.enum(['workspace', 'preset', 'npm', 'implicit']);\nexport type BundleProfileSource = z.infer<typeof BundleProfileSourceSchema>;\n\nexport const ProfileTraceSchema = z.object({\n extends: z.array(z.string()).optional(),\n overrides: z.array(z.string()).optional(),\n});\nexport type ProfileTrace = z.infer<typeof ProfileTraceSchema>;\n\nexport const ScopeSelectionSchema = z.object({\n strategy: z.enum(['explicit', 'default', 'auto', 'none']),\n path: z.string().optional(),\n});\nexport type ScopeSelection = z.infer<typeof ScopeSelectionSchema>;\n\nexport const BundleProfileSchema = z.object({\n id: z.string(),\n key: z.string().optional(),\n label: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n source: BundleProfileSourceSchema,\n scopes: z.array(ResolvedScopeSchema),\n products: ProductsMapSchema.optional(),\n trace: ProfileTraceSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n productsByScope: z.record(z.string(), ProductsMapSchema).optional(),\n activeScopeId: z.string().optional(),\n activeScope: ResolvedScopeSchema.optional(),\n scopeSelection: ScopeSelectionSchema.optional(),\n});\nexport type BundleProfile = z.infer<typeof BundleProfileSchema>;\n\n","/**\n * @module @kb-labs/core-config/profiles/loader\n * Load + validate profiles[] section from kb.config.*\n */\n\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { readKbConfig } from '../api/read-kb-config';\nimport {\n ProfilesV2Schema,\n type ProfileV2,\n} from './types';\n\nexport interface ProfilesSectionResult {\n profiles: ProfileV2[];\n sourcePath?: string;\n format?: 'json' | 'yaml';\n}\n\nexport async function readProfilesSection(cwd: string): Promise<ProfilesSectionResult> {\n const kbConfig = await readKbConfig(cwd);\n if (!kbConfig?.data) {\n return { profiles: [] };\n }\n\n const rawProfiles = (kbConfig.data as any)?.profiles;\n\n if (rawProfiles === undefined) {\n return {\n profiles: [],\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n }\n\n const parsed = ProfilesV2Schema.safeParse(rawProfiles);\n if (!parsed.success) {\n throw new KbError(\n 'ERR_PROFILE_INVALID_FORMAT',\n 'Invalid profiles[] section in kb.config.',\n ERROR_HINTS.ERR_PROFILE_INVALID_FORMAT,\n {\n issues: parsed.error.issues,\n sourcePath: kbConfig.path,\n }\n );\n }\n\n return {\n profiles: parsed.data,\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/scope-selector\n * Resolve active scope based on include/exclude globs and CLI flags.\n */\n\nimport path from 'node:path';\nimport picomatch from 'picomatch';\nimport type { BundleProfile, ResolvedScope } from './types';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nexport type ScopeSelectionStrategy = 'explicit' | 'default' | 'auto' | 'none';\n\nexport interface ScopeSelectionOptions {\n bundleProfile: BundleProfile;\n cwd: string;\n executionPath: string;\n scopeId?: string;\n}\n\nexport interface ScopeSelectionResult {\n scope?: ResolvedScope;\n strategy: ScopeSelectionStrategy;\n matchedPath?: string;\n}\n\nexport function selectProfileScope(\n opts: ScopeSelectionOptions\n): ScopeSelectionResult {\n const scopes = opts.bundleProfile.scopes || [];\n if (scopes.length === 0) {\n return { strategy: 'none' };\n }\n\n if (opts.scopeId) {\n const scope = scopes.find((s) => s.id === opts.scopeId);\n if (!scope) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_NOT_FOUND',\n `Scope \"${opts.scopeId}\" not found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_NOT_FOUND,\n { scopeId: opts.scopeId, available: scopes.map((s) => s.id) }\n );\n }\n return { scope, strategy: 'explicit' };\n }\n\n const defaults = scopes.filter((s) => s.isDefault);\n if (defaults.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple default scopes found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: defaults.map((s) => s.id) }\n );\n }\n if (defaults.length === 1) {\n return { scope: defaults[0], strategy: 'default' };\n }\n\n const relativePath = normalizePath(\n path.relative(opts.cwd, opts.executionPath)\n );\n const matches = scopes.filter((scope) =>\n scopeMatchesPath(scope, relativePath)\n );\n\n if (matches.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple scopes match path \"${relativePath}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: matches.map((s) => s.id), path: relativePath }\n );\n }\n\n if (matches.length === 1) {\n return { scope: matches[0], strategy: 'auto', matchedPath: relativePath };\n }\n\n return { strategy: 'none' };\n}\n\nfunction scopeMatchesPath(scope: ResolvedScope, candidate: string): boolean {\n const includes = scope.include && scope.include.length > 0\n ? scope.include\n : ['**/*'];\n const excludeGlobs = scope.exclude || [];\n\n const tester = (glob: string) =>\n picomatch(glob, { dot: true, nocase: false })(candidate);\n\n const includeMatched =\n candidate === '.' ||\n includes.some((glob) => tester(adjustGlob(glob)));\n\n if (!includeMatched) {\n return false;\n }\n\n const excludeMatched = excludeGlobs.some((glob) =>\n tester(adjustGlob(glob))\n );\n\n return !excludeMatched;\n}\n\nfunction normalizePath(p: string): string {\n if (!p || p === '.') {\n return '.';\n }\n const normalized = p.split(path.sep).join('/');\n return normalized || '.';\n}\n\nfunction adjustGlob(glob: string): string {\n if (!glob) {\n return '**/*';\n }\n return glob;\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/resolver\n * Resolve ProfileV2 definitions with extends/merge semantics.\n */\n\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { promises as fsp } from 'node:fs';\nimport type {\n BundleProfile,\n BundleProfileSource,\n ProfileTrace,\n ProfileV2,\n ScopeV2} from './types';\nimport {\n ProfilesV2Schema\n} from './types';\nimport { readProfilesSection } from './loader';\nimport { readConfigFile } from '../api/read-config';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nconst requireFromHere = createRequire(import.meta.url);\n\nfunction clone<T>(value: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\ninterface ProfileLayer {\n profile: ProfileV2;\n source: BundleProfileSource | string; // Can be 'workspace' | 'preset' | 'npm' | 'implicit' or 'npm:package#profile'\n sourcePath?: string;\n}\n\nexport interface ResolveProfileOptions {\n cwd: string;\n profileId: string;\n}\n\nexport async function resolveProfile(\n opts: ResolveProfileOptions\n): Promise<BundleProfile> {\n const localProfilesResult = await readProfilesSection(opts.cwd);\n const localProfiles = localProfilesResult.profiles;\n const localPath = localProfilesResult.sourcePath;\n const profileMap = new Map(localProfiles.map((p) => [p.id, p]));\n\n const cache = new Map<string, ProfileLayer>();\n if (localPath) {\n for (const profile of localProfiles) {\n cache.set(profile.id, {\n profile: clone(profile),\n source: 'workspace',\n sourcePath: localPath,\n });\n }\n }\n\n const chain = await resolveProfileChain(\n opts.profileId,\n cache,\n profileMap,\n opts.cwd,\n new Set<string>()\n );\n\n if (chain.length === 0) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${opts.profileId}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n {\n profileId: opts.profileId,\n available: Array.from(profileMap.keys()),\n }\n );\n }\n\n const bundleProfile = mergeProfileChain(chain);\n\n const productsByScope = buildScopeProductMap(bundleProfile, chain);\n bundleProfile.productsByScope = productsByScope;\n\n return bundleProfile;\n}\n\nasync function resolveProfileChain(\n reference: string,\n cache: Map<string, ProfileLayer>,\n localProfiles: Map<string, ProfileV2>,\n cwd: string,\n seen: Set<string>\n): Promise<ProfileLayer[]> {\n const key = reference;\n if (seen.has(key)) {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Circular profile extends detected at \"${reference}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference, chain: Array.from(seen) }\n );\n }\n seen.add(key);\n\n let layer = cache.get(reference);\n\n if (!layer) {\n if (localProfiles.has(reference)) {\n layer = {\n profile: clone(localProfiles.get(reference)!),\n source: 'workspace',\n };\n } else if (isPackageReference(reference)) {\n layer = await loadPackageProfile(reference, cwd);\n } else {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${reference}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n { reference, available: Array.from(localProfiles.keys()) }\n );\n }\n cache.set(reference, layer);\n }\n\n const result: ProfileLayer[] = [];\n if (layer.profile.extends) {\n const parentChain = await resolveProfileChain(\n layer.profile.extends,\n cache,\n localProfiles,\n cwd,\n seen\n );\n result.push(...parentChain);\n }\n\n result.push(layer);\n seen.delete(key);\n return result;\n}\n\nfunction mergeProfileChain(chain: ProfileLayer[]): BundleProfile {\n const mergedProducts: Record<string, Record<string, unknown>> = {};\n let mergedMeta: Record<string, unknown> | undefined;\n let mergedLabel: string | undefined;\n let mergedDescription: string | undefined;\n let mergedVersion: string | undefined;\n let scopes: ScopeV2[] = [];\n let scopesDefined = false;\n\n for (const layer of chain) {\n const profile = layer.profile;\n mergedLabel = profile.label ?? mergedLabel;\n mergedDescription = profile.description ?? mergedDescription;\n mergedVersion = profile.meta?.version ?? mergedVersion;\n mergedMeta = mergeMeta(mergedMeta, profile.meta);\n\n if (profile.products) {\n for (const [productKey, overrides] of Object.entries(profile.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const target = (mergedProducts[productKey] ??= {});\n Object.assign(target, clone(overrides));\n }\n }\n\n if (profile.scopes && profile.scopes.length > 0) {\n scopes = clone(profile.scopes);\n scopesDefined = true;\n } else if (!scopesDefined && profile.scopes) {\n scopes = clone(profile.scopes);\n }\n }\n\n const finalLayer = chain[chain.length - 1];\n if (!finalLayer) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n 'Profile chain is empty',\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED\n );\n }\n \n const finalId = finalLayer.profile.id;\n const finalSource = finalLayer.source;\n \n const bundleProfile: BundleProfile = {\n id: finalId,\n key: finalId,\n label: mergedLabel,\n name: mergedLabel ?? finalId,\n version: mergedVersion,\n source: finalSource as BundleProfileSource,\n scopes: scopes.map((scope) => ({\n id: scope.id,\n label: scope.label,\n description: scope.description,\n include: scope.include,\n exclude: scope.exclude,\n isDefault: !!scope.default,\n products: scope.products ? clone(scope.products) : undefined,\n })),\n products: Object.keys(mergedProducts).length ? mergedProducts : undefined,\n trace: buildTrace(chain),\n meta: mergedMeta,\n productsByScope: {},\n };\n\n return bundleProfile;\n}\n\nfunction buildScopeProductMap(\n bundleProfile: BundleProfile,\n chain: ProfileLayer[]\n): Record<string, Record<string, Record<string, unknown>>> {\n const map: Record<string, Record<string, Record<string, unknown>>> = {};\n\n for (const scope of bundleProfile.scopes) {\n map[scope.id] = {};\n for (const layer of chain) {\n const matchingScope = layer.profile.scopes?.find((s) => s.id === scope.id);\n if (!matchingScope?.products) {\n continue;\n }\n for (const [productKey, overrides] of Object.entries(matchingScope.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const scopeMap = map[scope.id];\n if (!scopeMap) {continue;}\n \n const target = scopeMap[productKey];\n if (!target) {\n scopeMap[productKey] = clone(overrides);\n } else {\n Object.assign(target, clone(overrides));\n }\n }\n }\n }\n\n return map;\n}\n\nfunction matchedProductOverrides(\n overrides: unknown\n): overrides is Record<string, unknown> {\n return overrides !== null && typeof overrides === 'object';\n}\n\nfunction buildTrace(chain: ProfileLayer[]): ProfileTrace | undefined {\n if (chain.length <= 1) {\n return undefined;\n }\n\n const extendsList = chain\n .slice(0, -1)\n .map((layer) => {\n // For npm packages, source is already in format \"npm:package#profile\"\n if (typeof layer.source === 'string' && layer.source.startsWith('npm:')) {\n return layer.source;\n }\n // For workspace profiles, use source:profileId format\n return `${layer.source}:${layer.profile.id}`;\n });\n\n return {\n extends: extendsList,\n };\n}\n\nfunction mergeMeta(\n existing: Record<string, unknown> | undefined,\n next?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n if (!next) {\n return existing ? structuredClone(existing) : undefined;\n }\n if (!existing) {\n return structuredClone(next);\n }\n return { ...existing, ...clone(next) };\n}\n\nfunction isPackageReference(ref: string): boolean {\n return ref.includes('/') || ref.startsWith('@');\n}\n\ninterface PackageProfileRef {\n packageName: string;\n profileId: string;\n}\n\nfunction parsePackageReference(ref: string): PackageProfileRef {\n const [pkg, profileId] = ref.split('#');\n return {\n packageName: pkg || '',\n profileId: profileId || 'default',\n };\n}\n\nasync function loadPackageProfile(\n ref: string,\n cwd: string\n): Promise<ProfileLayer> {\n const { packageName, profileId } = parsePackageReference(ref);\n\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromHere.resolve(`${packageName}/package.json`, {\n paths: [cwd],\n });\n } catch {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Cannot resolve package \"${packageName}\" for profile extends`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n }\n\n const pkgDir = path.dirname(pkgJsonPath);\n const candidateConfigs = [\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n path.join('config', 'kb.config.json'),\n path.join('config', 'kb.config.yaml'),\n path.join('config', 'kb.config.yml'),\n ];\n\n for (const candidate of candidateConfigs) {\n const fullPath = path.join(pkgDir, candidate);\n try {\n await fsp.access(fullPath);\n } catch {\n continue;\n }\n\n const config = await readConfigFile(fullPath);\n const profiles = (config.data as any)?.profiles;\n const parsed = ProfilesV2Schema.safeParse(profiles);\n if (!parsed.success) {\n continue;\n }\n const target = parsed.data.find((p) => p.id === profileId);\n if (!target) {\n continue;\n }\n return {\n profile: clone(target),\n source: `npm:${packageName}#${profileId}`,\n sourcePath: fullPath,\n };\n }\n\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Profile \"${profileId}\" not found in package \"${packageName}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n}\n\n","/**\n * @module @kb-labs/core/config/api/init-workspace\n * Initialize workspace configuration with idempotent operations\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { findGitRoot } from './read-config';\nimport { writeFileAtomic, ensureWithinWorkspace } from '../utils/fs-atomic';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { InitWorkspaceOptions, InitResult, InitAction } from '../types/init';\n\n/**\n * Generate diff preview (first ~20 lines) for conflicts\n */\nfunction generateDiffPreview(oldContent: string, newContent: string): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n const maxLines = 20;\n const diff: string[] = [];\n \n for (let i = 0; i < Math.min(maxLines, Math.max(oldLines.length, newLines.length)); i++) {\n const oldLine = oldLines[i] || '';\n const newLine = newLines[i] || '';\n \n if (oldLine !== newLine) {\n if (oldLine) {diff.push(`- ${oldLine}`);}\n if (newLine) {diff.push(`+ ${newLine}`);}\n }\n }\n \n if (oldLines.length > maxLines || newLines.length > maxLines) {\n diff.push('... truncated');\n }\n \n return diff.slice(0, 20).join('\\n');\n}\n\n/**\n * Find workspace config file, walking up to git root\n * Prioritizes .kb/ location over root\n */\nasync function findWorkspaceConfig(\n cwd: string\n): Promise<{ path: string; format: 'yaml' | 'json' } | null> {\n const filenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n \n let dir = path.resolve(cwd);\n \n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n try {\n await fs.access(candidate);\n const format = filename.endsWith('.json') ? 'json' : 'yaml';\n return { path: candidate, format };\n } catch {\n // Continue to next filename\n }\n }\n \n // Stop at git root or filesystem root\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n dir = path.dirname(dir);\n }\n \n return null;\n}\n\n/**\n * Initialize or update workspace configuration\n */\nexport async function initWorkspaceConfig(\n opts: InitWorkspaceOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n if (opts.profiles && Object.keys(opts.profiles).length > 0) {\n result.warnings.push(\n 'profiles option is deprecated. Define profiles[] inside kb.config.json (Profiles v2).'\n );\n }\n \n // Find existing config\n const existing = await findWorkspaceConfig(cwd);\n const format = existing?.format || opts.format || 'yaml';\n const configFileName = format === 'json' ? 'kb.config.json' : 'kb.config.yaml';\n // Create .kb directory if needed for new configs\n const configPath = existing?.path || path.join(cwd, '.kb', configFileName);\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(configPath, cwd);\n \n // Build new config structure\n const newConfig: any = {\n schemaVersion: '1.0',\n products: {},\n };\n \n // Add product sections\n if (opts.products && opts.products.length > 0) {\n for (const product of opts.products) {\n const fsProduct = toFsProduct(product);\n newConfig.products[product] = {};\n }\n }\n \n // Add preset if specified\n if (opts.presetRef !== undefined) {\n newConfig.$extends = opts.presetRef;\n }\n \n // Check if config already exists\n if (existing) {\n try {\n const existingContent = await fs.readFile(existing.path, 'utf-8');\n const existingData = format === 'json' \n ? JSON.parse(existingContent)\n : YAML.parse(existingContent);\n \n // Merge with existing config (only add missing keys)\n let modified = false;\n \n // Ensure schemaVersion\n if (!existingData.schemaVersion) {\n existingData.schemaVersion = '1.0';\n modified = true;\n }\n \n // Merge products\n if (opts.products) {\n if (!existingData.products) {\n existingData.products = {};\n modified = true;\n }\n for (const product of opts.products) {\n if (!existingData.products[product]) {\n existingData.products[product] = {};\n modified = true;\n }\n }\n }\n \n // Merge preset\n if (opts.presetRef !== undefined && existingData.$extends !== opts.presetRef) {\n existingData.$extends = opts.presetRef;\n modified = true;\n }\n \n if (!modified) {\n // No changes needed\n result.actions.push({ kind: 'skip', path: configPath });\n result.skipped.push(configPath);\n return result;\n }\n \n // Serialize new content\n const newContent = format === 'json'\n ? JSON.stringify(existingData, null, 2) + '\\n'\n : YAML.stringify(existingData);\n \n // Check for conflicts\n if (!opts.force && existingContent !== newContent) {\n const action: InitAction = {\n kind: 'conflict',\n path: configPath,\n previewDiff: generateDiffPreview(existingContent, newContent),\n };\n result.actions.push(action);\n result.warnings.push(`Config file has changes, use --force to overwrite: ${configPath}`);\n return result;\n }\n \n // Write updated config\n if (!opts.dryRun) {\n await writeFileAtomic(configPath, newContent);\n }\n \n result.actions.push({ kind: 'update', path: configPath });\n result.updated.push(configPath);\n } catch (error) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to read or parse existing config: ${existing.path}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { error: error instanceof Error ? error.message : String(error) }\n );\n }\n } else {\n // Create new config\n const content = format === 'json'\n ? JSON.stringify(newConfig, null, 2) + '\\n'\n : YAML.stringify(newConfig);\n \n if (!opts.dryRun) {\n await writeFileAtomic(configPath, content);\n }\n \n result.actions.push({ kind: 'write', path: configPath });\n result.created.push(configPath);\n }\n \n return result;\n}\n\n","/**\n * @module @kb-labs/core/config/api/upsert-lockfile\n * Upsert lockfile operations\n */\n\nimport path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { readLockfile, writeLockfile, type LockfileData } from '../lockfile/lockfile';\nimport { ensureWithinWorkspace } from '../utils/fs-atomic';\nimport type { UpsertLockfileOptions, InitResult } from '../types/init';\n\n/**\n * Upsert lockfile with new references\n */\nexport async function upsertLockfile(\n opts: UpsertLockfileOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n \n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(lockfilePath, cwd);\n \n // Check for deprecated lockfile location\n try {\n await fs.access(oldLockfilePath);\n result.warnings.push(\n 'Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json'\n );\n } catch {\n // No old lockfile, that's fine\n }\n \n // Read existing lockfile\n const existing = await readLockfile(cwd);\n \n // Build lockfile data\n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,\n profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,\n policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,\n hashes: existing?.hashes || {},\n generatedAt: new Date().toISOString(),\n };\n \n if (!existing) {\n // Creating new lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'write', path: lockfilePath });\n result.created.push(lockfilePath);\n } else {\n // Updating existing lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'update', path: lockfilePath });\n result.updated.push(lockfilePath);\n }\n \n return result;\n}\n\n","import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\n\nexport type ValidationResult = { ok: boolean; errors: any[] | null };\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\naddFormats(ajv);\n\nconst schemaMap: Record<string, any> = {};\n\n/**\n * Temporary schema registry hook – upcoming implementation will register schemas here.\n */\nexport function registerProductSchema(product: string, schema: any): void {\n schemaMap[product] = schema;\n}\n\nexport function validateProductConfig(product: string, config: unknown): ValidationResult {\n const schema = schemaMap[product];\n if (!schema) {return { ok: true, errors: null };}\n\n const validate = ajv.compile(schema);\n const ok = validate(config);\n return { ok: !!ok, errors: validate.errors || null };\n}\n"]}
1
+ {"version":3,"sources":["../src/errors/kb-error.ts","../src/utils/fs-atomic.ts","../src/runtime/runtime.ts","../src/utils/env.ts","../src/utils/product-normalize.ts","../src/utils/paths.ts","../src/index.ts","../src/cache/fs-cache.ts","../src/hash/config-hash.ts","../src/api/read-config.ts","../src/api/read-kb-config.ts","../src/merge/layered-merge.ts","../src/preset/resolve-preset.ts","../src/lockfile/lockfile.ts","../src/api/product-config.ts","../src/profiles/types.ts","../src/profiles/loader.ts","../src/profiles/scope-selector.ts","../src/profiles/resolver.ts","../src/api/init-workspace.ts","../src/api/upsert-lockfile.ts","../src/validation/validate-config.ts"],"names":["path","fs","fsp","stripJsonComments","YAML","findNearestConfig","isPlainObject","writeFileAtomic"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBO,SAAS,YAAY,GAAA,EAAsB;AAChD,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AAC5C,EAAA,IAAI,GAAA,CAAI,SAAS,sBAAA,EAAwB;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACnD,EAAA,IAAI,GAAA,CAAI,SAAS,4BAAA,EAA8B;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACzD,EAAA,IAAI,GAAA,CAAI,SAAS,4BAAA,EAA8B;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AACzD,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAAC,IAAA,OAAO,CAAA;AAAA,EAAE;AAC3C,EAAA,OAAO,CAAA;AACT;AA3BA,IAKa,OAAA,CAAA,CA2BA;AAhCb,IAAA,aAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAKO,IAAM,OAAA,GAAN,cAAsB,KAAA,CAAM;AAAA,MACjC,WAAA,CACS,IAAA,EACP,OAAA,EACO,IAAA,EACA,IAAA,EACP;AACA,QAAA,KAAA,CAAM,OAAO,CAAA;AALN,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,QAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAGP,QAAA,IAAA,CAAK,IAAA,GAAO,SAAA;AAAA,MACd;AAAA,MAPS,IAAA;AAAA,MAEA,IAAA;AAAA,MACA,IAAA;AAAA,KAKX;AAiBO,IAAM,WAAA,GAAc;AAAA,MACzB,oBAAA,EAAsB,gDAAA;AAAA,MACtB,kBAAA,EAAoB,gDAAA;AAAA,MACpB,0BAAA,EAA4B,iDAAA;AAAA,MAC5B,0BAAA,EAA4B,uDAAA;AAAA,MAC5B,uBAAA,EAAyB,mEAAA;AAAA,MACzB,wBAAA,EAA0B,qDAAA;AAAA,MAC1B,uBAAA,EAAyB,yDAAA;AAAA,MACzB,0BAAA,EAA4B,iGAAA;AAAA,MAC5B,0BAAA,EAA4B,qFAAA;AAAA,MAC5B,2BAAA,EAA6B,sEAAA;AAAA,MAC7B,0BAAA,EAA4B,2DAAA;AAAA,MAC5B,0BAAA,EAA4B,uFAAA;AAAA,MAC5B,2BAAA,EAA6B,2DAAA;AAAA,MAC7B,aAAA,EAAe;AAAA,KACjB;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/CA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAcA,eAAsB,eAAA,CACpBA,QACA,IAAA,EACe;AACf,EAAA,MAAM,MAAM,CAAA,EAAGA,MAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAE5E,EAAA,IAAI;AAEF,IAAA,MAAMC,QAAA,CAAG,MAAM,OAAA,CAAQD,MAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACjD,IAAA,MAAMC,QAAA,CAAG,MAAM,OAAA,CAAQ,GAAG,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAGhD,IAAA,MAAMA,QAAA,CAAG,SAAA,CAAU,GAAA,EAAK,IAAI,CAAA;AAG5B,IAAA,MAAMA,QAAA,CAAG,MAAA,CAAO,GAAA,EAAKD,MAAI,CAAA;AAAA,EAC3B,SAAS,KAAA,EAAO;AAEd,IAAA,IAAI;AACF,MAAA,MAAMC,QAAA,CAAG,OAAO,GAAG,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAMO,SAAS,qBAAA,CAAsB,YAAoB,aAAA,EAA6B;AACrF,EAAA,MAAM,SAAA,GAAY,QAAQ,UAAU,CAAA;AACpC,EAAA,MAAM,OAAA,GAAU,QAAQ,aAAa,CAAA;AAErC,EAAA,IAAI,CAAC,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,wCAAwC,UAAU,CAAA,CAAA;AAAA,MAClD,uDAAA;AAAA,MACA,EAAE,YAAY,aAAA;AAAc,KAC9B;AAAA,EACF;AACF;AAzDA,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,wBAAA,GAAA;AAOA,IAAA,aAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;ACKA,eAAsB,kBAAkB,IAAA,EAAgF;AACpH,EAAA,MAAM,QAAQD,KAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,IAAY,OAAA,CAAQ,KAAK,CAAA;AACzD,EAAA,MAAM,OAAO,IAAA,CAAK,OAAA,GAAUA,MAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AAEzD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,KAAA;AAEV,EAAA,OAAO,IAAA,EAAM;AACT,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,SAAA,EAAW;AAC/B,MAAA,MAAM,SAAA,GAAYA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AACrC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,IAAI;AACA,QAAA,MAAME,QAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MACpC,CAAA,CAAA,MAAQ;AAAA,MAAiB;AAAA,IAC7B;AACA,IAAA,MAAM,MAAA,GAASF,KAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AAAE,MAAA;AAAA,IAAO;AAC7B,IAAA,IAAI,IAAA,KAAS,GAAA,KAAQ,IAAA,IAAQ,MAAA,KAAW,IAAA,CAAA,EAAO;AAAE,MAAA;AAAA,IAAO;AACxD,IAAA,GAAA,GAAM,MAAA;AAAA,EACV;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC/B;AAIA,SAAS,kBAAkB,GAAA,EAAqB;AAC5C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,OAAO,IAAI,GAAA,EAAK;AACZ,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAEhB,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AACd,MAAA,OAAO,IAAI,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,EAAM;AAAE,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA;AAAA,QAAU;AACnE,QAAA,GAAA,IAAO,IAAI,CAAC,CAAA;AACZ,QAAA,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,KAAM,GAAA,EAAK;AAAC,UAAA;AAAA,QAAM;AAAA,MACjC;AAAA,IACJ,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAE7C,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM;AAAC,QAAA,CAAA,EAAA;AAAA,MAAI;AAAA,IAC5C,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAE7C,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM;AAAC,QAAA,CAAA,EAAA;AAAA,MAAI;AAChE,MAAA,CAAA,IAAK,CAAA;AAAA,IACT,CAAA,MAAO;AACH,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAA,IAClB;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AAC3C;AAEA,eAAsB,wBAAqC,CAAA,EAAuC;AAC9F,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,MAAME,QAAA,CAAI,QAAA,CAAS,GAAG,MAAM,CAAA;AACxC,IAAA,IAAI;AACA,MAAA,MAAM,WAAW,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,GAAI,iBAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AACjE,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAChC,MAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,WAAA,EAAY;AAAA,IACzC,SAAS,CAAA,EAAG;AACR,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,mBAAA,EAAqB,OAAA,EAAS,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,CAAC,GAAG,CAAA;AACxH,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,WAAA,EAAY;AAAA,IACpC;AAAA,EACJ,SAAS,CAAA,EAAG;AACR,IAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,kBAAA,EAAoB,OAAA,EAAS,CAAA,qBAAA,EAAwB,CAAC,CAAA,CAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,CAAC,GAAG,CAAA;AACtH,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,WAAA,EAAY;AAAA,EACpC;AACJ;AAGO,SAAS,YAA+C,GAAA,EAAgC;AAC3F,EAAA,IAAI,CAAC,GAAA,EAAK;AAAE,IAAA,OAAO,EAAC;AAAA,EAAG;AACvB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtC,IAAA,IAAI,MAAM,MAAA,EAAW;AAAE,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,IAAG;AAAA,EACvC;AACA,EAAA,OAAO,GAAA;AACX;AAGO,SAAS,YAAA,CAAgB,MAAS,IAAA,EAAsB;AAC3D,EAAA,IAAI,CAAC,IAAA,EAAM;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AAC1B,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC5C,IAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,KAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,MAAS,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,aAAA,CAAc,IAAI,CAAA,IAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC5C,IAAA,MAAM,OAAA,GAAmC,IAAA;AACzC,IAAA,MAAM,GAAA,GAA+B,EAAE,GAAG,OAAA,EAAQ;AAClD,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvC,MAAA,IAAI,MAAM,MAAA,EAAW;AAAE,QAAA;AAAA,MAAU;AACjC,MAAA,IAAI,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AAC/C,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,YAAA,CAAa,OAAA,CAAQ,CAAC,GAAG,CAAC,CAAA;AAAA,MACvC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACtD,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,YAAA,CAAa,OAAA,CAAQ,CAAC,GAAG,CAAC,CAAA;AAAA,MACvC,CAAA,MAAO;AACH,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,MACb;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAEA,EAAA,OAAQ,IAAA,IAAc,IAAA;AAC1B;AAEA,SAAS,cAAc,CAAA,EAA0C;AAC7D,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,KAAM,QAAQ,MAAA,CAAO,cAAA,CAAe,CAAC,CAAA,KAAM,MAAA,CAAO,SAAA;AACtF;AA0BO,SAAS,oBAAA,CACZ,QAAA,EACA,OAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,MAAM,UAA2D,EAAC;AAClE,EAAA,MAAM,uBAAiC,EAAC;AAExC,EAAA,MAAM,IAAA,uBAAW,GAAA,CAAY;AAAA,IACzB,GAAG,MAAA,CAAO,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AAAA,IAC7B,GAAG,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE;AAAA,GAC/B,CAAA;AAED,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,IAAA,MAAM,aAAA,GAAiB,WAAmD,GAAG,CAAA;AAC7E,IAAA,MAAM,YAAA,GAAgB,UAAkD,GAAG,CAAA;AAC3E,IAAA,MAAM,WAAA,GAAe,MAAA,CAAwD,GAAG,CAAA,IAAK,WAAA;AAErF,IAAA,MAAM,cAAc,aAAA,KAAkB,MAAA;AACtC,IAAA,MAAM,aAAa,YAAA,KAAiB,MAAA;AAEpC,IAAA,IAAI,gBAAgB,eAAA,EAAiB;AACjC,MAAA,IAAI,UAAA,EAAY;AAAE,QAAA,oBAAA,CAAqB,KAAK,GAAG,CAAA;AAAA,MAAG;AAClD,MAAA,IAAI,WAAA,EAAa;AACb,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA;AACX,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,MACnB;AACA,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,gBAAgB,cAAA,EAAgB;AAChC,MAAA,IAAI,UAAA,EAAY;AACZ,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AACX,QAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA;AAAA,MACnB,WAAW,WAAA,EAAa;AAGpB,QAAA;AAAA,MACJ;AACA,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,eAAe,UAAA,EAAY;AAC3B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA,CAAa,aAAA,EAAwB,YAAqB,CAAA;AACrE,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,IACnB,WAAW,WAAA,EAAa;AACpB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,aAAA;AACX,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACnB,WAAW,UAAA,EAAY;AACnB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,YAAA;AACX,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA;AAAA,IACnB;AAAA,EACJ;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAU,oBAAA,EAAsB,OAAA,EAAQ;AAC5D;AAEA,IAAM,eAAA,GAAkB;AAAA,EACpB,UAAU,EAAE,OAAA,EAAS,gBAAgB,WAAA,EAAa,SAAA,EAAW,QAAQ,IAAA;AACzE;AAcO,SAAS,cAAuB,IAAA,EAAiF;AACpH,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,MAAM,UAAU,IAAA,CAAK,SAAA,GAAY,OAAA,CAAQ,GAAG,KAAK,EAAC;AAElD,EAAA,MAAM,MAAA,GAAS,YAAA;AAAA,IACX,YAAA;AAAA,MACI,YAAA,CAAa,YAAA,CAAa,eAAA,CAAgB,eAAe,CAAA,EAAkC,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA;AAAA,MAC3I;AAAA,KACJ;AAAA,IACA,IAAA,CAAK;AAAA,GACT;AAEA,EAAA,IAAI,KAAK,QAAA,EAAU;AACf,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACT,MAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,0BAAA,EAA4B,OAAA,EAAS,0CAA0C,CAAA;AACxH,MAAA,IAAI,IAAI,WAAA,EAAa;AAAE,QAAA,WAAA,CAAY,IAAA,CAAK,GAAG,GAAA,CAAI,WAAW,CAAA;AAAA,MAAG;AAAA,IACjE,CAAA,MAAA,IAAW,GAAA,CAAI,WAAA,EAAa,MAAA,EAAQ;AAChC,MAAA,WAAA,CAAY,IAAA,CAAK,GAAG,GAAA,CAAI,WAAW,CAAA;AAAA,IACvC;AAAA,EACJ;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAY;AACxC;;;ACjPO,SAAS,OAAO,CAAA,EAA4C;AAC/D,EAAA,IAAI,MAAM,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACvC,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,IAAA,EAAK,CAAE,WAAA,EAAY;AAC/B,EAAA,IAAI,MAAM,GAAA,IAAO,CAAA,KAAM,UAAU,CAAA,KAAM,KAAA,IAAS,MAAM,IAAA,EAAM;AAAC,IAAA,OAAO,IAAA;AAAA,EAAK;AACzE,EAAA,IAAI,MAAM,GAAA,IAAO,CAAA,KAAM,WAAW,CAAA,KAAM,IAAA,IAAQ,MAAM,KAAA,EAAO;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAC3E,EAAA,OAAO,MAAA;AACX;AAEO,SAAS,MAAM,CAAA,EAA2C;AAC7D,EAAA,IAAI,MAAM,MAAA,EAAW;AAAC,IAAA,OAAO,MAAA;AAAA,EAAU;AACvC,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,MAAA;AACpC;;;ACZA,IAAM,MAAA,uBAAa,GAAA,CAAI;AAAA,EACrB,CAAC,YAAY,WAAW,CAAA;AAAA,EACxB,CAAC,UAAU,SAAS,CAAA;AAAA,EACpB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,UAAU,QAAQ,CAAA;AAAA,EACnB,CAAC,QAAQ,MAAM,CAAA;AAAA,EACf,CAAC,YAAY,UAAU,CAAA;AAAA,EACvB,CAAC,aAAa,WAAW;AAC3B,CAAC,CAAA;AAOM,SAAS,YAAY,EAAA,EAAoB;AAC9C,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,IAAK,EAAA;AAC3B;AAOO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,EAAQ;AAC3B,IAAA,IAAI,MAAM,KAAA,EAAO;AAAC,MAAA,OAAO,CAAA;AAAA,IAAE;AAAA,EAC7B;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,iBAAiB,KAAA,EAAwB;AACvD,EAAA,OAAO,MAAA,CAAO,IAAI,KAAK,CAAA;AACzB;AAKO,SAAS,gBAAA,GAA6B;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AACjC;AC5CO,SAAS,mBAAmB,GAAA,EAAqB;AACtD,EAAA,OAAOF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,UAAU,CAAA;AACzC;AAKO,SAAS,mBAAA,CAAoB,KAAa,SAAA,EAA2B;AAC1E,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,SAAS,CAAA;AACxC;AAKO,SAAS,oBAAA,CAAqB,KAAa,SAAA,EAA2B;AAC3E,EAAA,OAAOA,KAAAA,CAAK,KAAK,mBAAA,CAAoB,GAAA,EAAK,SAAS,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AAClF;AAKO,SAAS,aAAa,GAAA,EAAqB;AAChD,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAC7B;AAKO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,OAAOA,KAAAA,CAAK,IAAA,CAAK,YAAA,CAAa,GAAG,GAAG,WAAW,CAAA;AACjD;;;AC5BA,aAAA,EAAA;ACaA,IAAM,WAAN,MAAqB;AAAA,EACX,KAAA,uBAAY,GAAA,EAAU;AAAA,EACtB,OAAA;AAAA,EAER,WAAA,CAAY,UAAU,GAAA,EAAK;AACzB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,GAAA,EAAuB;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,UAAU,MAAA,EAAW;AAEvB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,GAAA,CAAI,KAAQ,KAAA,EAAgB;AAC1B,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,IACvB,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,KAAK,OAAA,EAAS;AAE1C,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AAC1C,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,OAAO,GAAA,EAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA,EAEA,IAAA,GAAe;AACb,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA;AAAA,EACpB;AACF,CAAA;AAEA,IAAM,UAAN,MAAc;AAAA,EACJ,KAAA,GAAQ,IAAI,QAAA,CAA6B,GAAG,CAAA;AAAA,EAC5C,QAAA,GAAW,IAAI,QAAA,CAA2B,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA,EAKrD,MAAc,YAAY,OAAA,EAAoC;AAC5D,IAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA,CAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAElC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAME,QAAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACpC,QAAA,GAAA,GAAM;AAAA,UACJ,OAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,UAC3B,MAAM,KAAA,CAAM;AAAA,SACd;AACA,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAAA,MAC/B,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,OAAA,EAAmC;AAC3C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,GAAG,GAAA,CAAI,OAAO,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAExD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAMA,QAAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACpC,MAAA,IAAI,KAAA,CAAM,MAAM,OAAA,EAAQ,KAAM,IAAI,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,GAAA,CAAI,IAAA,EAAM;AAElE,QAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAE1B,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ;AAAA,UAC3B,MAAM,KAAA,CAAM;AAAA,SACd;AACA,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,IAAI,MAAM,CAAA;AAC1C,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,OAAA,EAAiB,IAAA,EAA8B;AACvD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,GAAG,GAAA,CAAI,OAAO,IAAI,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA;AAExD,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,QAAA,EAAU;AAAA,MACvB,IAAA;AAAA,MACA,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAoB;AAClB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA8C;AAC5C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAAA,MACtB,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,IAAA;AAAK,KAC9B;AAAA,EACF;AACF;AAGA,IAAM,OAAA,GAAU,IAAI,OAAA;AAOb,SAAS,WAAA,GAAoB;AAClC,EAAA,OAAA,CAAQ,WAAA,EAAY;AACtB;ACjKO,SAAS,kBAAkB,GAAA,EAAsB;AAEtD,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,MAAM,CAAC,CAAA;AAC/C,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,MAAM,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/D;AAQA,SAAS,iBAAiB,GAAA,EAAuB;AAC/C,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,gBAAgB,CAAA;AAAA,EACjC;AAGA,EAAA,MAAM,MAAA,GAAS,GAAA;AACf,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,MAAM,EAAE,IAAA,EAAK;AAC5C,EAAA,MAAM,aAAsC,EAAC;AAE7C,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,UAAA,CAAW,GAAG,CAAA,GAAI,gBAAA,CAAiB,KAAK,CAAA;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAOO,SAAS,mBAAmB,OAAA,EAA4C;AAC7E,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAgC,CAAC,KAAK,MAAA,KAAW;AACxE,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,EAAO;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,kBAAkB,QAAQ,CAAA;AACnC;;;ACtDA,aAAA,EAAA;AASA,SAASC,mBAAkB,GAAA,EAAqB;AAC9C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,OAAO,IAAI,GAAA,EAAK;AACd,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AACd,MAAA,OAAO,IAAI,GAAA,EAAK;AACd,QAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,EAAM;AAAE,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAG,UAAA;AAAA,QAAU;AACnE,QAAA,GAAA,IAAO,IAAI,CAAC,CAAA;AACZ,QAAA,IAAI,GAAA,CAAI,CAAA,EAAG,CAAA,KAAM,GAAA,EAAK;AAAE,UAAA;AAAA,QAAO;AAAA,MACjC;AAAA,IACF,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAC/C,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM;AAAE,QAAA,CAAA,EAAA;AAAA,MAAK;AAAA,IAC5C,CAAA,MAAA,IAAW,IAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAC/C,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,OAAO,CAAA,GAAI,GAAA,IAAO,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM;AAAE,QAAA,CAAA,EAAA;AAAA,MAAK;AAClE,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,GAAA,IAAO,IAAI,CAAA,EAAG,CAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA;AACzC;AAKA,eAAsB,eAAe,QAAA,EAA6C;AAChF,EAAA,MAAM,OAAA,GAAUH,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAGrC,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAC3C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAME,QAAAA,CAAI,QAAA,CAAS,SAAS,OAAO,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAO,CAAA,CAAE,WAAA,EAAY;AAEzC,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,MAAA,EAAQ;AACrC,MAAA,IAAA,GAAOE,KAAA,CAAK,MAAM,GAAG,CAAA;AACrB,MAAA,MAAA,GAAS,MAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,MAAM,UAAA,GAAa,GAAA,KAAQ,QAAA,GAAWD,kBAAAA,CAAkB,GAAG,CAAA,GAAI,GAAA;AAC/D,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAC5B,MAAA,MAAA,GAAS,MAAA;AAAA,IACX;AAEA,IAAA,MAAM,MAAA,GAA2B,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,EAAQ;AAG/D,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAEjC,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,oBAAA;AAAA,QACA,gCAAgC,QAAQ,CAAA,CAAA;AAAA,QACxC,WAAA,CAAY,kBAAA;AAAA,QACZ,EAAE,QAAA,EAAU,KAAA,EAAO,KAAA,CAAM,OAAA;AAAQ,OACnC;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,sBAAA;AAAA,MACA,0BAA0B,QAAQ,CAAA,CAAA;AAAA,MAClC,WAAA,CAAY,oBAAA;AAAA,MACZ,EAAE,UAAU,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAAE,KAC5E;AAAA,EACF;AACF;AAMA,eAAeE,kBAAAA,CACb,QAAA,EACA,SAAA,GAAsB,EAAC,EAC4B;AACnD,EAAA,MAAM,KAAA,GAAQL,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACnC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,KAAA;AAGV,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,gBAAA;AAE3D,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAEpB,MAAA,IAAI;AACF,QAAA,MAAME,QAAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MAClC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAASF,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,WAAW,GAAA,EAAK;AAElB,MAAA;AAAA,IACF;AACA,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC7B;AAKA,eAAsB,YAAY,QAAA,EAA0C;AAC1E,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAE/B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,IAAI;AACF,MAAA,MAAME,SAAI,MAAA,CAAOF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,CAAC,CAAA;AACvC,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,MAAA,IAAI,WAAW,GAAA,EAAK;AAClB,QAAA;AAAA,MACF;AACA,MAAA,GAAA,GAAM,MAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAsB,oBAAoB,GAAA,EAA+C;AACvF,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,MAAMK,mBAAkB,GAAG,CAAA;AAExD,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,eAAe,UAAU,CAAA;AAClC;ACpKA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA;AAIA,eAAsB,YAAA,CACpB,GAAA,EACA,SAAA,GAAsB,mBAAA,EAC6B;AACnD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,OAAA,IAAWL,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAC3C,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAE1B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,IAAI;AACF,QAAA,MAAME,QAAAA,CAAI,OAAO,SAAS,CAAA;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,MAClC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQF,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,GAAMA,KAAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAM;AAC7B;AAEA,eAAsB,aAAa,GAAA,EAA6C;AAC9E,EAAA,MAAM,EAAE,IAAA,EAAAA,MAAAA,EAAK,GAAI,MAAM,aAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAACA,MAAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,eAAeA,MAAI,CAAA;AAC5B;;;AC1CO,SAAS,sBAAsB,MAAA,EAA2C;AAC/E,EAAA,MAAM,QAAsB,EAAC;AAE7B,EAAA,MAAMM,iBAAgB,CAAC,CAAA,KACrB,CAAA,KAAM,IAAA,IAAQ,OAAO,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAK,OAAO,cAAA,CAAe,CAAC,MAAM,MAAA,CAAO,SAAA;AAElG,EAAA,MAAM,QAAQ,CAAC,IAAA,EAAe,SAAkB,KAAA,EAAoBN,MAAAA,GAAiB,EAAC,KAAe;AAEnG,IAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACjD,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAMA,MAAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,IAAA,EAAM,gBAAA;AAAA,QACN,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,QACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,QAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,OACrC,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT;AAGA,IAAA,IAAIM,cAAAA,CAAc,IAAI,CAAA,IAAKA,cAAAA,CAAc,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,MAAA,GAAkC,EAAE,GAAG,IAAA,EAAK;AAElD,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,EAAG,KAAA,EAAO,KAAA,EAAO,CAAC,GAAGN,MAAAA,EAAM,GAAG,CAAC,CAAA;AAAA,QAC7D,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,MAAM,CAAC,GAAGA,QAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,YAC7B,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,IAAA,EAAM,KAAA;AAAA,YACN,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,YACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,YAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,WACrC,CAAA;AACD,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,QAChB;AAAA,MACF;AAEA,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAMA,MAAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,MACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,UAAA,EAAY,MAAM,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAAI,iBAAA,CAAkB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,MACjF,SAAA,EAAW,MAAM,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA,GAAI,MAAA;AAAA,MAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,MAAM;AAAA,KACrC,CAAA;AAED,IAAA,OAAO,OAAA,IAAW,IAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAgC,CAAC,KAAK,KAAA,KAAU;AACpE,IAAA,OAAO,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AACzB;AAKA,SAAS,kBAAkB,MAAA,EAAoC;AAC7D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,yBAAyB,CAAA;AACpD,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;AAKA,SAAS,iBAAiB,MAAA,EAAoC;AAC5D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,mBAAmB,CAAA;AAC9C,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;AAKA,SAAS,eAAe,MAAA,EAAoC;AAC1D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AACrC,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;;;AClGA,aAAA,EAAA;AAaA,eAAsB,aAAA,CACpB,WACA,GAAA,EACqB;AAErB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,eAAe,SAAS,CAAA;AAGhD,EAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,gBAAgB,IAAI,CAAA;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,kBAAA,CAAmB,SAAA,EAAW,MAAM,OAAO,CAAA;AACpE,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAIA,EAAA,MAAM,IAAI,OAAA;AAAA,IACR,yBAAA;AAAA,IACA,qBAAqB,SAAS,CAAA,CAAA;AAAA,IAC9B,WAAA,CAAY,uBAAA;AAAA,IACZ,EAAE,WAAW,GAAA;AAAI,GACnB;AACF;AAKA,SAAS,eAAe,SAAA,EAAqC;AAC3D,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,GAAG,CAAA;AACzC,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,wBAAA;AAAA,MACA,6BAA6B,SAAS,CAAA,CAAA;AAAA,MACtC,0EAAA;AAAA,MACA,EAAE,SAAA;AAAU,KACd;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,SAAA,CAAU,CAAA,EAAG,OAAO,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,SAAA,CAAU,OAAA,GAAU,CAAC,CAAA;AAE/C,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,OAAA,EAAS;AACrB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,wBAAA;AAAA,MACA,6BAA6B,SAAS,CAAA,CAAA;AAAA,MACtC,sDAAA;AAAA,MACA,EAAE,SAAA;AAAU,KACd;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,MAAM,OAAO,CAAA;AACvB;AAKA,eAAe,kBAAA,CACb,UAAA,EACA,IAAA,EACA,OAAA,EAC4B;AAC5B,EAAA,IAAI;AAEF,IAAA,MAAME,QAAAA,CAAI,OAAO,UAAU,CAAA;AAG3B,IAAA,MAAM,eAAA,GAAkBF,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,cAAc,CAAA;AAC5D,IAAA,MAAM,WAAA,GAAc,KAAK,KAAA,CAAM,MAAME,SAAI,QAAA,CAAS,eAAA,EAAiB,OAAO,CAAC,CAAA;AAG3E,IAAA,IAAI,CAAC,cAAA,CAAe,WAAA,CAAY,OAAA,EAAS,OAAO,CAAA,EAAG;AACjD,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAAA,GAAaF,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,sBAAsB,CAAA;AAC/D,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,MAAME,SAAI,QAAA,CAAS,UAAA,EAAY,OAAO,CAAC,CAAA;AAEjE,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,IAAA,EAAM,UAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,SAAS,cAAA,CAAe,eAAuB,eAAA,EAAkC;AAG/E,EAAA,IAAI,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,gBAAgB,SAAA,CAAU,CAAC,EAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACvD,IAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC9C,IAAA,OAAO,KAAA,KAAU,WAAA;AAAA,EACnB;AAEA,EAAA,OAAO,aAAA,KAAkB,eAAA;AAC3B;AAKO,SAAS,yBAAA,CACd,QACA,OAAA,EACyB;AACzB,EAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AACzC,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACxE,IAAA,OAAQ,QAAA,CAAqD,SAAS,CAAA,IAAK,EAAC;AAAA,EAC9E;AACA,EAAA,OAAO,EAAC;AACV;AAKO,SAAS,kBAAkB,MAAA,EAKhC;AACA,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,UAAU,MAAA,CAAO,IAAA,CAAK,OAAO,MAAA,CAAO,QAAA,IAAY,EAAE;AAAA,GACpD;AACF;ACtIA,eAAsB,aAAa,GAAA,EAA2C;AAC5E,EAAA,MAAM,YAAA,GAAeF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,WAAW,CAAA;AAEtD,EAAA,IAAI;AACF,IAAA,MAAM,YAAA,GAAe,MAAME,QAAAA,CAAI,QAAA,CAAS,cAAc,OAAO,CAAA;AAC7D,IAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AAEN,IAAA,MAAM,eAAA,GAAkBF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,eAAe,CAAA;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAME,QAAAA,CAAI,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAChE,MAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF;AAKA,SAAS,eAAA,CAAgB,GAAA,EAAc,KAAA,GAAQ,CAAA,EAAW;AACxD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,CAAC,KAAK,KAAA,KAAmB;AAClD,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,MAAA,OAAO,MAAA,CAAO,KAAK,KAAgC,CAAA,CAChD,MAAK,CACL,MAAA,CAAO,CAAC,MAAA,EAAiC,CAAA,KAAM;AAC9C,QAAA,MAAA,CAAO,CAAC,CAAA,GAAK,KAAA,CAAkC,CAAC,CAAA;AAChD,QAAA,OAAO,MAAA;AAAA,MACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,GAAG,KAAK,CAAA;AACV;AAKA,eAAsB,aAAA,CACpB,KACA,YAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAcF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AACxC,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,WAAW,CAAA;AAGvD,EAAA,MAAME,SAAI,KAAA,CAAM,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAGhD,EAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AACzB,IAAA,YAAA,CAAa,OAAA,GAAU,kDAAA;AAAA,EACzB;AAGA,EAAA,MAAM,EAAE,eAAA,EAAAK,gBAAAA,EAAgB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,cAAA,EAAA,EAAA,iBAAA,CAAA,CAAA;AAClC,EAAA,MAAMA,iBAAgB,YAAA,EAAc,eAAA,CAAgB,YAAA,EAAc,CAAC,IAAI,IAAI,CAAA;AAC7E;AAKA,eAAsB,cAAA,CACpB,KACA,OAAA,EAMuB;AACvB,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AAEvC,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,kDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,SAAA,EAAW,OAAA,CAAQ,SAAA,IAAa,QAAA,EAAU,SAAA;AAAA,IAC1C,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,QAAA,EAAU,OAAA;AAAA,IACtC,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAgB,QAAA,EAAU,YAAA;AAAA,IAChD,MAAA,EAAQ,EAAE,GAAG,QAAA,EAAU,MAAA,EAAO;AAAA,IAC9B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AAGA,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,KAAA,MAAW,CAAC,SAAS,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA,EAAG;AACpE,MAAA,MAAM,SAAA,GAAY,YAAY,OAAiB,CAAA;AAC/C,MAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,MAAA,YAAA,CAAa,MAAA,CAAO,SAAS,CAAA,GAAI,IAAA;AAAA,IACnC;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AACrC,EAAA,OAAO,YAAA;AACT;AAKO,SAAS,qBAAA,CAAsB,SAAiB,MAAA,EAAyB;AAC9E,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AAKA,eAAsB,kBAAA,CACpB,KACA,OAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACvD,IAAA,MAAM,SAAA,GAAY,YAAY,OAAiB,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,kBAAkB,MAAM,CAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAE9C,IAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,iBAAiB,YAAA,EAAqD;AACpF,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,YAAA,KAAiB,QAAA,EAAU;AACrD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,YAAA;AAEb,EAAA,IAAI,IAAA,CAAK,eAAe,CAAA,KAAM,KAAA,EAAO;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,KAAK,QAAQ,CAAA,IAAK,OAAO,IAAA,CAAK,QAAQ,MAAM,QAAA,EAAU;AACzD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,KAAK,aAAa,CAAA,IAAK,OAAO,IAAA,CAAK,aAAa,MAAM,QAAA,EAAU;AACnE,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,iBAAiB,YAAA,EAM/B;AACA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,CAAE,MAAA;AAAA,IAC/C,YAAA,EAAc,CAAC,CAAC,YAAA,CAAa,SAAA;AAAA,IAC7B,UAAA,EAAY,CAAC,CAAC,YAAA,CAAa,OAAA;AAAA,IAC3B,eAAA,EAAiB,CAAC,CAAC,YAAA,CAAa,YAAA;AAAA,IAChC,WAAA,EAAa,IAAI,IAAA,CAAK,YAAA,CAAa,WAAW;AAAA,GAChD;AACF;;;AC9KA,eAAsB,gBAAA,CACpB,MACA,MAAA,EACiC;AACjC,EAAA,MAAM,EAAE,KAAK,OAAA,EAAS,GAAA,GAAM,EAAC,EAAG,UAAA,GAAa,KAAA,EAAO,YAAA,EAAa,GAAI,IAAA;AACrE,EAAA,MAAM,SAAA,GAAY,YAAY,OAAO,CAAA;AAGrC,EAAA,MAAM,eAAA,GAAkB,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAGrD,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,MAAA,CAAO,IAAA,CAAK;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,mBAAmB,OAAO,CAAA;AAAA,IACjC,MAAA,EAAQ;AAAA,GACT,CAAA;AAGD,EAAA,IAAI,YAAA,IAAgB,aAAa,QAAA,EAAU;AAEzC,IAAA,MAAM,iBAAiB,YAAA,CAAa,QAAA;AAEpC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,cAAA;AAAA,MACP,QAAQ,YAAA,CAAa;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,YAAA,CAAa,KAAA,IAAS,YAAA,CAAa,KAAA,CAAM,QAAA,EAAU;AAErD,MAAA,MAAM,YAAA,GAAe,aAAa,KAAA,CAAM,QAAA;AACxC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,KAAA,EAAO,eAAA;AAAA,QACP,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQ,aAAa,KAAA,CAAM;AAAA,OAC5B,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,eAAe,EAAC;AACpB,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,gBAAgB,eAAA,CAAgB,IAAA;AACtC,IAAA,IAAI,aAAA,CAAc,UAAU,CAAA,EAAG;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,MAAM,aAAA,CAAc,aAAA,CAAc,UAAU,GAAa,GAAG,CAAA;AAC3E,QAAA,YAAA,GAAe,yBAAA,CAA0B,QAAQ,OAAO,CAAA;AAExD,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,KAAA,EAAO,QAAA;AAAA,UACP,KAAA,EAAO,YAAA;AAAA,UACP,MAAA,EAAQ,CAAA,OAAA,EAAU,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,SAC5C,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AAEd,QAAA,OAAA,CAAQ,KAAK,CAAA,kCAAA,EAAqC,aAAA,CAAc,UAAU,CAAC,KAAK,KAAK,CAAA;AAAA,MACvF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,WAAW,CAAA,EAAG;AAC1C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,QAAA;AAAA,MACP,OAAO,EAAC;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,gBAAiB,eAAA,CAAgB,IAAA,EAAiD,QAAA,GAAW,SAAS,KAAK,EAAC;AAClH,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,WAAA;AAAA,MACP,KAAA,EAAO,aAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,eAAA,GAAkBP,MAAK,IAAA,CAAK,GAAA,EAAK,OAAO,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AACnF,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,MAAME,QAAAA,CAAI,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAC/D,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AACxC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,YAAA;AAAA,KAC5C,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,GAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,sBAAsB,MAAM,CAAA;AAStD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,gBAAA,CAAiB,GAAA,EAAK,SAAA,EAAW,MAAM,CAAA;AAAA,EAC/C;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,kBAAkB,MAAM,CAAA;AAE3C,IAAA,MAAM,eAAwC,EAAC;AAC/C,IAAA,YAAA,CAAa,OAAO,CAAA,GAAI,UAAA;AACxB,IAAA,MAAM,eAAe,GAAA,EAAK;AAAA,MACxB;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,KAAK,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR;AAAA,GACF;AACF;AAKA,eAAsB,oBAAA,CACpB,MACA,MAAA,EACqD;AACrD,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,IAAY,CAAA;AAClD,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM;AAC/B;AAKA,SAAS,mBAAmB,OAAA,EAA0C;AACpE,EAAA,MAAM,QAAA,GAAoD;AAAA,IACxD,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,4BAAA;AAAA,MACV,QAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,MAClC,OAAA,EAAS,EAAE,GAAA,EAAK,IAAA,EAAM,QAAQ,KAAA,EAAM;AAAA,MACpC,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,EAAM,YAAY,CAAA,EAAE;AAAA,MACzC,QAAQ,EAAE,IAAA,EAAM,MAAM,EAAA,EAAI,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,MAC3C,SAAA,EAAW;AAAA,QACT,OAAA,EAAS,IAAA;AAAA,QACT,cAAc,CAAC,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,YAAY,QAAQ,CAAA;AAAA,QAC1D,YAAA,EAAc,CAAC,OAAA,EAAS,IAAI,CAAA;AAAA,QAC5B,aAAA,EAAe,CAAC,YAAA,EAAc,UAAA,EAAY,uBAAuB,QAAQ,CAAA;AAAA,QACzE,cAAA,EAAgB,IAAA;AAAA,QAChB,eAAA,EAAiB,IAAA;AAAA,QACjB,kBAAA,EAAoB,IAAA;AAAA,QACpB,YAAA,EAAc,aAAA;AAAA,QACd,SAAA,EAAW,IAAA;AAAA,QACX,UAAA,EAAY,IAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,iBAAA,EAAmB,KAAA;AAAA,QACnB,cAAA,EAAgB,CAAC,gBAAA,EAAkB,iBAAA,EAAmB,8BAA8B,wBAAwB,CAAA;AAAA,QAC5G,aAAA,EAAe,GAAA;AAAA,QACf,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,GAAA,EAAK;AAAA,QACH,QAAA,EAAU,MAAA;AAAA,QACV,aAAA,EAAe;AAAA;AACjB,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,IAAA;AAAA,MACT,OAAO;AAAC,KACV;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,WAAW;AAAC,KACd;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,QAAQ;AAAC;AACX,GACF;AAEA,EAAA,OAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAC;AAC/B;AAKA,eAAe,gBAAA,CAAiB,GAAA,EAAa,SAAA,EAAmB,MAAA,EAAgD;AAC9G,EAAA,MAAM,SAAA,GAAYF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,SAAS,CAAA;AACjD,EAAA,MAAM,aAAaA,KAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc,CAAA;AAGlE,EAAA,MAAME,SAAI,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAG9C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,OAAA,EAAS,gDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AAEA,EAAA,MAAMA,QAAAA,CAAI,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,WAAA,EAAa,IAAA,EAAM,CAAC,CAAC,CAAA;AACtE;AAKO,SAAS,cAAc,MAAA,EAAyB;AACrD,EAAA,OAAO,kBAAkB,MAAM,CAAA;AACjC;AClQA,IAAM,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,yCAAyC,CAAA;AAC9E,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,SAAS,CAAA;AAC/D,IAAM,oBAAoB,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,sBAAsB,CAAA;AAE9D,IAAM,aAAA,GAAgB,EAAE,MAAA,CAAO;AAAA,EACpC,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,sBAAsB,CAAA;AAAA,EAC5C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAS,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,GAAA,CAAI,GAAG,oCAAoC,CAAA;AAAA,EACxE,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,UAAU,EAAE,QAAA,EAAS;AAAA,EACtC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACvB,CAAC;AAGM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAM,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,EAAE,MAAA;AAGI,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACtC,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,wBAAwB,CAAA;AAAA,EAC9C,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAG,qDAAqD,EAAE,QAAA,EAAS;AAAA,EAC3F,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,EACxC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,IAAA,EAAM,kBAAkB,QAAA;AAC1B,CAAC;AAGM,IAAM,gBAAA,GAAmB,CAAA,CAAE,KAAA,CAAM,eAAe;AAEhD,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,SAAA,EAAW,EAAE,OAAA,EAAQ;AAAA,EACrB,QAAA,EAAU,kBAAkB,QAAA;AAC9B,CAAC;AAGM,IAAM,yBAAA,GAA4B,EAAE,IAAA,CAAK,CAAC,aAAa,QAAA,EAAU,KAAA,EAAO,UAAU,CAAC;AAGnF,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AACjC,CAAC;AAGM,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EAC3C,QAAA,EAAU,EAAE,IAAA,CAAK,CAAC,YAAY,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,EACxD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACnB,CAAC;AAGM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACzB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAA,EAAQ,yBAAA;AAAA,EACR,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACnC,QAAA,EAAU,kBAAkB,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,mBAAmB,QAAA,EAAS;AAAA,EACnC,IAAA,EAAM,kBAAkB,QAAA,EAAS;AAAA,EACjC,eAAA,EAAiB,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAClE,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,WAAA,EAAa,oBAAoB,QAAA,EAAS;AAAA,EAC1C,cAAA,EAAgB,qBAAqB,QAAA;AACvC,CAAC;;;AC/ED,aAAA,EAAA;AAaA,eAAsB,oBAAoB,GAAA,EAA6C;AACrF,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,UAAU,IAAA,EAAM;AACnB,IAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAE;AAAA,EACxB;AAEA,EAAA,MAAM,WAAA,GAAe,SAAS,IAAA,EAAiC,QAAA;AAE/D,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,OAAO;AAAA,MACL,UAAU,EAAC;AAAA,MACX,YAAY,QAAA,CAAS,IAAA;AAAA,MACrB,QAAQ,QAAA,CAAS;AAAA,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,WAAW,CAAA;AACrD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,0CAAA;AAAA,MACA,WAAA,CAAY,0BAAA;AAAA,MACZ;AAAA,QACE,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAAA,QACrB,YAAY,QAAA,CAAS;AAAA;AACvB,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,IAAA;AAAA,IACjB,YAAY,QAAA,CAAS,IAAA;AAAA,IACrB,QAAQ,QAAA,CAAS;AAAA,GACnB;AACF;;;AC5CA,aAAA,EAAA;AAiBO,SAAS,mBACd,IAAA,EACsB;AACtB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,MAAA,IAAU,EAAC;AAC7C,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,KAAK,OAAO,CAAA;AACtD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,6BAAA;AAAA,QACA,UAAU,IAAA,CAAK,OAAO,CAAA,wBAAA,EAA2B,IAAA,CAAK,cAAc,EAAE,CAAA,CAAA,CAAA;AAAA,QACtE,WAAA,CAAY,2BAAA;AAAA,QACZ,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAE,OAC9D;AAAA,IACF;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAW;AAAA,EACvC;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACjD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,CAAA,0CAAA,EAA6C,IAAA,CAAK,aAAA,CAAc,EAAE,CAAA,CAAA,CAAA;AAAA,MAClE,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA;AAAE,KACtC;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,CAAC,CAAA,EAAG,UAAU,SAAA,EAAU;AAAA,EACnD;AAEA,EAAA,MAAM,YAAA,GAAe,aAAA;AAAA,IACnBF,KAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,GAAA,EAAK,KAAK,aAAa;AAAA,GAC5C;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,IAAO,CAAC,KAAA,KAC7B,gBAAA,CAAiB,KAAA,EAAO,YAAY;AAAA,GACtC;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,+BAA+B,YAAY,CAAA,CAAA,CAAA;AAAA,MAC3C,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,EAAM,YAAA;AAAa,KACzD;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,OAAO,OAAA,CAAQ,CAAC,GAAG,QAAA,EAAU,MAAA,EAAQ,aAAa,YAAA,EAAa;AAAA,EAC1E;AAEA,EAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAC5B;AAEA,SAAS,gBAAA,CAAiB,OAAsB,SAAA,EAA4B;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GACrD,KAAA,CAAM,OAAA,GACN,CAAC,MAAM,CAAA;AACX,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,IAAW,EAAC;AAEvC,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KACd,SAAA,CAAU,IAAA,EAAM,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,SAAS,CAAA;AAEzD,EAAA,MAAM,cAAA,GACJ,SAAA,KAAc,GAAA,IACd,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAC,CAAA;AAElD,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,iBAAiB,YAAA,CAAa,IAAA;AAAA,IAAK,CAAC,IAAA,KACxC,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC;AAAA,GACzB;AAEA,EAAA,OAAO,CAAC,cAAA;AACV;AAEA,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,IAAI,CAAC,CAAA,IAAK,CAAA,KAAM,GAAA,EAAK;AACnB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,aAAa,CAAA,CAAE,KAAA,CAAMA,MAAK,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAC7C,EAAA,OAAO,UAAA,IAAc,GAAA;AACvB;AAEA,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;ACpGA,aAAA,EAAA;AAEA,IAAM,eAAA,GAAkB,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAErD,SAAS,MAAS,KAAA,EAAa;AAC7B,EAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC;AAaA,eAAsB,eACpB,IAAA,EACwB;AACxB,EAAA,MAAM,mBAAA,GAAsB,MAAM,mBAAA,CAAoB,IAAA,CAAK,GAAG,CAAA;AAC9D,EAAA,MAAM,gBAAgB,mBAAA,CAAoB,QAAA;AAC1C,EAAA,MAAM,YAAY,mBAAA,CAAoB,UAAA;AACtC,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAE9D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA0B;AAC5C,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,MAAW,WAAW,aAAA,EAAe;AACnC,MAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,EAAA,EAAI;AAAA,QACpB,OAAA,EAAS,MAAM,OAAO,CAAA;AAAA,QACtB,MAAA,EAAQ,WAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,MAAM,mBAAA;AAAA,IAClB,IAAA,CAAK,SAAA;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA,CAAK,GAAA;AAAA,wBACD,GAAA;AAAY,GAClB;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,yBAAA;AAAA,MACA,CAAA,SAAA,EAAY,KAAK,SAAS,CAAA,WAAA,CAAA;AAAA,MAC1B,WAAA,CAAY,uBAAA;AAAA,MACZ;AAAA,QACE,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAM;AAAA;AACzC,KACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,kBAAkB,KAAK,CAAA;AAE7C,EAAA,MAAM,eAAA,GAAkB,oBAAA,CAAqB,aAAA,EAAe,KAAK,CAAA;AACjE,EAAA,aAAA,CAAc,eAAA,GAAkB,eAAA;AAEhC,EAAA,OAAO,aAAA;AACT;AAEA,eAAe,mBAAA,CACb,SAAA,EACA,KAAA,EACA,aAAA,EACA,KACA,IAAA,EACyB;AACzB,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,yCAAyC,SAAS,CAAA,CAAA,CAAA;AAAA,MAClD,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAE,KACvC;AAAA,EACF;AACA,EAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAE/B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,IAAI,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,MAAA,KAAA,GAAQ;AAAA,QACN,OAAA,EAAS,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,SAAS,CAAE,CAAA;AAAA,QAC5C,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,CAAA,MAAA,IAAW,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACxC,MAAA,KAAA,GAAQ,MAAM,kBAAA,CAAmB,SAAA,EAAW,GAAG,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,yBAAA;AAAA,QACA,YAAY,SAAS,CAAA,WAAA,CAAA;AAAA,QACrB,WAAA,CAAY,uBAAA;AAAA,QACZ,EAAE,WAAW,SAAA,EAAW,KAAA,CAAM,KAAK,aAAA,CAAc,IAAA,EAAM,CAAA;AAAE,OAC3D;AAAA,IACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,WAAW,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,IAAA,MAAM,cAAc,MAAM,mBAAA;AAAA,MACxB,MAAM,OAAA,CAAQ,OAAA;AAAA,MACd,KAAA;AAAA,MACA,aAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,EAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAsC;AAC/D,EAAA,MAAM,iBAA0D,EAAC;AACjE,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,iBAAA;AACJ,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI,SAAoB,EAAC;AACzB,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,WAAA,GAAc,QAAQ,KAAA,IAAS,WAAA;AAC/B,IAAA,iBAAA,GAAoB,QAAQ,WAAA,IAAe,iBAAA;AAC3C,IAAA,aAAA,GAAgB,OAAA,CAAQ,MAAM,OAAA,IAAW,aAAA;AACzC,IAAA,UAAA,GAAa,SAAA,CAAU,UAAA,EAAY,OAAA,CAAQ,IAAI,CAAA;AAE/C,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,KAAA,MAAW,CAAC,YAAY,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtE,QAAA,IAAI,CAAC,uBAAA,CAAwB,SAAS,CAAA,EAAG;AACvC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAAU,cAAA,CAAe,UAAU,CAAA,KAAM,EAAC;AAChD,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAA,GAAS,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC7B,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,OAAA,CAAQ,MAAA,EAAQ;AAC3C,MAAA,MAAA,GAAS,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACzC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,yBAAA;AAAA,MACA,wBAAA;AAAA,MACA,WAAA,CAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,EAAA;AACnC,EAAA,MAAM,cAAc,UAAA,CAAW,MAAA;AAE/B,EAAA,MAAM,aAAA,GAA+B;AAAA,IACnC,EAAA,EAAI,OAAA;AAAA,IACJ,GAAA,EAAK,OAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,MAAM,WAAA,IAAe,OAAA;AAAA,IACrB,OAAA,EAAS,aAAA;AAAA,IACT,MAAA,EAAQ,WAAA;AAAA,IACR,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAC7B,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAA,EAAW,CAAC,CAAC,KAAA,CAAM,OAAA;AAAA,MACnB,UAAU,KAAA,CAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA,KACrD,CAAE,CAAA;AAAA,IACF,UAAU,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,SAAS,cAAA,GAAiB,MAAA;AAAA,IAChE,KAAA,EAAO,WAAW,KAAK,CAAA;AAAA,IACvB,IAAA,EAAM,UAAA;AAAA,IACN,iBAAiB;AAAC,GACpB;AAEA,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,oBAAA,CACP,eACA,KAAA,EACyD;AACzD,EAAA,MAAM,MAA+D,EAAC;AAEtE,EAAA,KAAA,MAAW,KAAA,IAAS,cAAc,MAAA,EAAQ;AACxC,IAAA,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,GAAI,EAAC;AACjB,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,EAAE,CAAA;AACzE,MAAA,IAAI,CAAC,eAAe,QAAA,EAAU;AAC5B,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,CAAC,YAAY,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,EAAG;AAC5E,QAAA,IAAI,CAAC,uBAAA,CAAwB,SAAS,CAAA,EAAG;AACvC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AAC7B,QAAA,IAAI,CAAC,QAAA,EAAU;AAAC,UAAA;AAAA,QAAS;AAEzB,QAAA,MAAM,MAAA,GAAS,SAAS,UAAU,CAAA;AAClC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,QAAA,CAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAS,CAAA;AAAA,QACxC,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBACP,SAAA,EACsC;AACtC,EAAA,OAAO,SAAA,KAAc,IAAA,IAAQ,OAAO,SAAA,KAAc,QAAA;AACpD;AAEA,SAAS,WAAW,KAAA,EAAiD;AACnE,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,MACjB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,KAAA,KAAU;AAEd,IAAA,IAAI,OAAO,MAAM,MAAA,KAAW,QAAA,IAAY,MAAM,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG;AACvE,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,IACf;AAEA,IAAA,OAAO,GAAG,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,EAAE,CAAA,CAAA;AAAA,EAC5C,CAAC,CAAA;AAEH,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,SAAA,CACP,UACA,IAAA,EACqC;AACrC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,QAAA,GAAW,eAAA,CAAgB,QAAQ,CAAA,GAAI,MAAA;AAAA,EAChD;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA,EAC7B;AACE,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,GAAG,KAAA,CAAM,IAAI,CAAA,EAAE;AACzC;AAEA,SAAS,mBAAmB,GAAA,EAAsB;AAChD,EAAA,OAAO,IAAI,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,CAAI,WAAW,GAAG,CAAA;AAChD;AAOA,SAAS,sBAAsB,GAAA,EAAgC;AAC7D,EAAA,MAAM,CAAC,GAAA,EAAK,SAAS,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,aAAa,GAAA,IAAO,EAAA;AAAA,IACpB,WAAW,SAAA,IAAa;AAAA,GAC1B;AACF;AAEA,eAAe,kBAAA,CACb,KACA,GAAA,EACuB;AACvB,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAU,GAAI,sBAAsB,GAAG,CAAA;AAE5D,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,CAAA,EAAG,WAAW,CAAA,aAAA,CAAA,EAAiB;AAAA,MACnE,KAAA,EAAO,CAAC,GAAG;AAAA,KACZ,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,OAAA;AAAA,MACR,4BAAA;AAAA,MACA,2BAA2B,WAAW,CAAA,qBAAA,CAAA;AAAA,MACtC,WAAA,CAAY,0BAAA;AAAA,MACZ,EAAE,WAAW,GAAA;AAAI,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACvC,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACAA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAA;AAAA,IACpCA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAA;AAAA,IACpCA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,eAAe;AAAA,GACrC;AAEA,EAAA,KAAA,MAAW,aAAa,gBAAA,EAAkB;AACxC,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAME,QAAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,QAAQ,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAY,OAAO,IAAA,EAAiC,QAAA;AAC1D,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,MAAM,MAAM,CAAA;AAAA,MACrB,MAAA,EAAQ,CAAA,IAAA,EAAO,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MACvC,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,OAAA;AAAA,IACR,4BAAA;AAAA,IACA,CAAA,SAAA,EAAY,SAAS,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,CAAA;AAAA,IAC3D,WAAA,CAAY,0BAAA;AAAA,IACZ,EAAE,WAAW,GAAA;AAAI,GACnB;AACF;;;ACtWA,aAAA,EAAA;AAEA,cAAA,EAAA;AAOA,SAAS,mBAAA,CAAoB,YAAoB,UAAA,EAA4B;AAC3E,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAI,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAC,GAAG,CAAA,EAAA,EAAK;AACvF,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAE/B,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,IAAI,OAAA,EAAS;AAAC,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MAAE;AACxC,MAAA,IAAI,OAAA,EAAS;AAAC,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MAAE;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,QAAA,IAAY,QAAA,CAAS,SAAS,QAAA,EAAU;AAC5D,IAAA,IAAA,CAAK,KAAK,eAAe,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACpC;AAMA,eAAe,oBACb,GAAA,EAC2D;AAC3D,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,OAAA,IAAWF,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA;AAE3C,EAAA,IAAI,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAE1B,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACzC,MAAA,IAAI;AACF,QAAA,MAAMC,QAAAA,CAAG,OAAO,SAAS,CAAA;AACzB,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,OAAO,IAAI,MAAA,GAAS,MAAA;AACrD,QAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAO;AAAA,MACnC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQD,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AACA,IAAA,GAAA,GAAMA,KAAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,eAAsB,oBACpB,IAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,MAAM,MAAA,GAAqB;AAAA,IACzB,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,UAAU;AAAC,GACb;AAEA,EAAA,IAAI,IAAA,CAAK,YAAY,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1D,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,QAAA,EAAU,MAAA,IAAU,IAAA,CAAK,MAAA,IAAU,MAAA;AAClD,EAAA,MAAM,cAAA,GAAiB,MAAA,KAAW,MAAA,GAAS,gBAAA,GAAmB,gBAAA;AAE9D,EAAA,MAAM,aAAa,QAAA,EAAU,IAAA,IAAQA,MAAK,IAAA,CAAK,GAAA,EAAK,OAAO,cAAc,CAAA;AAGzE,EAAA,qBAAA,CAAsB,YAAY,GAAG,CAAA;AAGrC,EAAA,MAAM,oBAA6C,EAAC;AACpD,EAAA,MAAM,SAAA,GAAqC;AAAA,IACzC,aAAA,EAAe,KAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAkB,YAAY,OAAO;AACrC,MAAA,iBAAA,CAAkB,OAAO,IAAI,EAAC;AAAA,IAChC;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,IAAA,SAAA,CAAU,WAAW,IAAA,CAAK,SAAA;AAAA,EAC5B;AAGA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,kBAAkB,MAAMC,QAAAA,CAAG,QAAA,CAAS,QAAA,CAAS,MAAM,OAAO,CAAA;AAChE,MAAA,MAAM,YAAA,GAAe,WAAW,MAAA,GAC5B,IAAA,CAAK,MAAM,eAAe,CAAA,GAC1BG,KAAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAG9B,MAAA,IAAI,QAAA,GAAW,KAAA;AAGf,MAAA,IAAI,CAAC,aAAa,aAAA,EAAe;AAC/B,QAAA,YAAA,CAAa,aAAA,GAAgB,KAAA;AAC7B,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAGA,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAI,CAAC,aAAa,QAAA,EAAU;AAC1B,UAAA,YAAA,CAAa,WAAW,EAAC;AACzB,UAAA,QAAA,GAAW,IAAA;AAAA,QACb;AACA,QAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,UAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,EAAG;AACnC,YAAA,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA,GAAI,EAAC;AAClC,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,SAAA,KAAc,KAAA,CAAA,IAAa,YAAA,CAAa,QAAA,KAAa,KAAK,SAAA,EAAW;AAC5E,QAAA,YAAA,CAAa,WAAW,IAAA,CAAK,SAAA;AAC7B,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAEA,MAAA,IAAI,CAAC,QAAA,EAAU;AAEb,QAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAA;AACtD,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAC9B,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAA,KAAW,MAAA,GAC1B,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,GACxCA,KAAAA,CAAK,SAAA,CAAU,YAAY,CAAA;AAG/B,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,IAAS,eAAA,KAAoB,UAAA,EAAY;AACjD,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,IAAA,EAAM,UAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,WAAA,EAAa,mBAAA,CAAoB,eAAA,EAAiB,UAAU;AAAA,SAC9D;AACA,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,MAAM,CAAA;AAC1B,QAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,mDAAA,EAAsD,UAAU,CAAA,CAAE,CAAA;AACvF,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,eAAA,CAAgB,YAAY,UAAU,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,YAAY,CAAA;AACxD,MAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,IAChC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,OAAA;AAAA,QACR,oBAAA;AAAA,QACA,CAAA,yCAAA,EAA4C,SAAS,IAAI,CAAA,CAAA;AAAA,QACzD,WAAA,CAAY,kBAAA;AAAA,QACZ,EAAE,OAAO,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAAE,OAClE;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,MAAM,OAAA,GAAU,MAAA,KAAW,MAAA,GACvB,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,GACrCA,KAAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAE5B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,eAAA,CAAgB,YAAY,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,YAAY,CAAA;AACvD,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,MAAA;AACT;ACrNA,cAAA,EAAA;AAMA,eAAsB,eACpB,IAAA,EACqB;AACrB,EAAA,MAAM,GAAA,GAAMJ,KAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AACjC,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,WAAW,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkBA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,OAAO,eAAe,CAAA;AAE7D,EAAA,MAAM,MAAA,GAAqB;AAAA,IACzB,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,SAAS,EAAC;AAAA,IACV,UAAU;AAAC,GACb;AAGA,EAAA,qBAAA,CAAsB,cAAc,GAAG,CAAA;AAGvC,EAAA,IAAI;AACF,IAAA,MAAMC,QAAAA,CAAG,OAAO,eAAe,CAAA;AAC/B,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AAGvC,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,kDAAA;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,WAAW,IAAA,CAAK,SAAA,KAAc,SAAY,IAAA,CAAK,SAAA,IAAa,SAAY,QAAA,EAAU,SAAA;AAAA,IAClF,SAAS,IAAA,CAAK,UAAA,KAAe,SAAY,IAAA,CAAK,UAAA,IAAc,SAAY,QAAA,EAAU,OAAA;AAAA,IAClF,cAAc,IAAA,CAAK,YAAA,KAAiB,SAAY,IAAA,CAAK,YAAA,IAAgB,SAAY,QAAA,EAAU,YAAA;AAAA,IAC3F,MAAA,EAAQ,QAAA,EAAU,MAAA,IAAU,EAAC;AAAA,IAC7B,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACtC;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AAEb,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AAAA,IACvC;AACA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,OAAA,EAAS,IAAA,EAAM,cAAc,CAAA;AACzD,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAClC,CAAA,MAAO;AAEL,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,aAAA,CAAc,KAAK,YAAY,CAAA;AAAA,IACvC;AACA,IAAA,MAAA,CAAO,QAAQ,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,cAAc,CAAA;AAC1D,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,MAAA;AACT;;;Ad/CA,cAAA,EAAA;AerBA,IAAM,GAAA,GAAM,IAAI,GAAA,CAAI,EAAE,WAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AACtD,UAAA,CAAW,GAAG,CAAA;AAEd,IAAM,YAAqD,EAAC;AASrD,SAAS,qBAAA,CAAsB,SAAiB,MAAA,EAAmC;AACxF,EAAA,MAAM,MAAA,GAAS,UAAU,OAAO,CAAA;AAChC,EAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AAAA,EAAE;AAEhD,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACnC,EAAA,MAAM,EAAA,GAAK,SAAS,MAAM,CAAA;AAC1B,EAAA,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,MAAA,EAAQ,QAAA,CAAS,UAAU,IAAA,EAAK;AACrD","file":"index.js","sourcesContent":["/**\n * @module @kb-labs/core/config/errors\n * Standardized error class for KB Labs with exit code mapping\n */\n\nexport class KbError extends Error {\n constructor(\n public code: string,\n message: string,\n public hint?: string,\n public meta?: unknown\n ) {\n super(message);\n this.name = 'KbError';\n }\n}\n\n/**\n * Maps KbError codes to CLI exit codes\n */\nexport function getExitCode(err: KbError): number {\n if (err.code === 'ERR_FORBIDDEN') {return 3;}\n if (err.code === 'ERR_CONFIG_NOT_FOUND') {return 2;}\n if (err.code === 'ERR_CONFIG_EXISTS_CONFLICT') {return 2;}\n if (err.code === 'ERR_PATH_OUTSIDE_WORKSPACE') {return 2;}\n if (err.code.startsWith('ERR_')) {return 1;}\n return 1;\n}\n\n/**\n * Error codes with their standard hints\n */\nexport const ERROR_HINTS = {\n ERR_CONFIG_NOT_FOUND: 'Create .kb/kb-labs.config.yaml or run: kb init',\n ERR_CONFIG_INVALID: 'Check configuration syntax and required fields',\n ERR_CONFIG_EXISTS_CONFLICT: 'Use --force to overwrite existing configuration',\n ERR_PATH_OUTSIDE_WORKSPACE: 'Check cwd or use a relative path within the workspace',\n ERR_PRESET_NOT_RESOLVED: 'Install the required preset package or check network connectivity',\n ERR_PROFILE_INCOMPATIBLE: 'Profile version is incompatible with current system',\n ERR_PROFILE_NOT_DEFINED: 'Add profiles[] to kb.config.json or pass --profile=<id>',\n ERR_PROFILE_RESOLVE_FAILED: 'Profile registry unavailable. Define profiles[] inside kb.config.json or use workspace presets.',\n ERR_PROFILE_EXTENDS_FAILED: 'Profile extends failed. Check extends reference or install required preset/package.',\n ERR_PROFILE_SCOPE_NOT_FOUND: 'Scope not found. Use --scope=<id> with one of the configured scopes.',\n ERR_PROFILE_SCOPE_CONFLICT: 'Multiple scopes matched. Specify --scope=<id> explicitly.',\n ERR_PROFILE_INVALID_FORMAT: 'Update profiles[] in kb.config.json (Profiles v2) or rerun your plugin setup command.',\n ERR_ARTIFACT_LIMIT_EXCEEDED: 'Remove or split large artifacts, or reduce artifact count',\n ERR_FORBIDDEN: 'Add role in policy.overrides or use preset...',\n} as const;\n\nexport type ErrorCode = keyof typeof ERROR_HINTS;\n","/**\n * @module @kb-labs/core/config/utils/fs-atomic\n * Atomic file write operations using tmp+rename pattern\n */\n\nimport { promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { KbError } from '../errors/kb-error';\nimport { dirname } from 'node:path';\n\n/**\n * Write file atomically using tmp+rename pattern\n * This ensures that the file is never partially written in case of crashes\n */\nexport async function writeFileAtomic(\n path: string,\n data: string | Uint8Array\n): Promise<void> {\n const tmp = `${path}.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n \n try {\n // Ensure parent directory exists\n await fs.mkdir(dirname(path), { recursive: true });\n await fs.mkdir(dirname(tmp), { recursive: true });\n \n // Write to temp file\n await fs.writeFile(tmp, data);\n \n // Atomic rename\n await fs.rename(tmp, path);\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.unlink(tmp);\n } catch {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Ensure a path is within the workspace root\n * Throws ERR_PATH_OUTSIDE_WORKSPACE if the path escapes the workspace\n */\nexport function ensureWithinWorkspace(targetPath: string, workspaceRoot: string): void {\n const absTarget = resolve(targetPath);\n const absRoot = resolve(workspaceRoot);\n \n if (!absTarget.startsWith(absRoot)) {\n throw new KbError(\n 'ERR_PATH_OUTSIDE_WORKSPACE',\n `Refusing to write outside workspace: ${targetPath}`,\n 'Check cwd or use a relative path within the workspace',\n { targetPath, workspaceRoot }\n );\n }\n}\n\n","/**\n * @module @kb-labs/core/config/runtime\n * Infrastructure-only config pipeline (no domain keys).\n * Provides: nearest config discovery, safe JSON read with diagnostics,\n * deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).\n */\n\nimport { promises as fsp } from \"node:fs\";\nimport path from \"node:path\";\nimport type { Diagnostic, FindNearestConfigOpts, JsonReadResult, ProfilesConfig, KBConfig } from \"../types\";\n\n/** Find nearest config file walking up from startDir until stopDir or FS root. */\nexport async function findNearestConfig(opts: FindNearestConfigOpts): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(opts.startDir ?? process.cwd());\n const stop = opts.stopDir ? path.resolve(opts.stopDir) : null;\n\n const tried: string[] = [];\n let dir = start;\n\n while (true) {\n for (const name of opts.filenames) {\n const candidate = path.join(dir, name);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch { /* continue */ }\n }\n const parent = path.dirname(dir);\n if (parent === dir) { break; }\n if (stop && (dir === stop || parent === stop)) { break; }\n dir = parent;\n }\n return { path: null, tried };\n}\n\n/** Read JSON with explicit diagnostics (no silent nulls). */\n/** Strip single-line (//) and multi-line (/* *\\/) comments from a JSON string. */\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n // String literal — copy verbatim until closing quote.\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') {break;}\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n // Single-line comment — skip to end of line.\n while (i < len && src[i] !== '\\n') {i++;}\n } else if (src[i] === '/' && src[i + 1] === '*') {\n // Multi-line comment — skip to *\\/\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) {i++;}\n i += 2;\n } else {\n out += src[i++];\n }\n }\n // Remove trailing commas before } or ] (not valid JSON but allowed in JSONC).\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nexport async function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>> {\n const diagnostics: Diagnostic[] = [];\n try {\n const raw = await fsp.readFile(p, \"utf8\");\n try {\n const stripped = p.endsWith('.jsonc') ? stripJsonComments(raw) : raw;\n const data = JSON.parse(stripped) as T;\n return { ok: true, data, diagnostics };\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"JSON_PARSE_FAILED\", message: `Failed to parse JSON: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n } catch (e) {\n diagnostics.push({ level: \"error\", code: \"FILE_READ_FAILED\", message: `Failed to read file: ${p}`, detail: String(e) });\n return { ok: false, diagnostics };\n }\n}\n\n/** Shallow pick of defined fields only. */\nexport function pickDefined<T extends Record<string, unknown>>(obj: T | undefined): Partial<T> {\n if (!obj) { return {}; }\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined) { out[k] = v; }\n }\n return out as Partial<T>;\n}\n\n/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */\nexport function mergeDefined<T>(base: T, over?: Partial<T>): T {\n if (!over) { return base; }\n if (Array.isArray(base) && Array.isArray(over)) {\n return [...base, ...over.filter(v => v !== undefined)] as unknown as T;\n }\n if (isPlainObject(base) && isPlainObject(over)) {\n const baseObj: Record<string, unknown> = base;\n const out: Record<string, unknown> = { ...baseObj };\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) { continue; }\n if (isPlainObject(baseObj[k]) && isPlainObject(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else if (Array.isArray(baseObj[k]) && Array.isArray(v)) {\n out[k] = mergeDefined(baseObj[k], v);\n } else {\n out[k] = v;\n }\n }\n return out as T;\n }\n // Different types → overlay wins if defined\n return (over as T) ?? base;\n}\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && Object.getPrototypeOf(v) === Object.prototype;\n}\n\n/**\n * Policy for a single top-level field during platform ← project merge.\n * - `platform-only` — ignore the project layer's value (emit warning upstream).\n * - `mergeable` — deep-merge (project overrides platform).\n * - `project-only` — take the project value as-is; platform layer is dropped.\n */\nexport type FieldMergePolicy = \"platform-only\" | \"mergeable\" | \"project-only\";\n\nexport interface MergeWithFieldPolicyResult<T> {\n /** Merged config object. */\n value: T;\n /** Top-level field names where the project layer was ignored because the field is `platform-only`. */\n ignoredProjectFields: string[];\n /** Per-field provenance: `'platform'`, `'project'`, or `'both'`. */\n sources: Record<string, \"platform\" | \"project\" | \"both\">;\n}\n\n/**\n * Merge two config layers using a per-field policy map.\n *\n * The `policy` map is keyed by top-level field names on the config object.\n * Fields missing from the map default to `mergeable` — i.e. deep-merge with\n * project overriding platform.\n */\nexport function mergeWithFieldPolicy<T extends object>(\n platform: Partial<T> | undefined,\n project: Partial<T> | undefined,\n policy: Partial<Record<keyof T, FieldMergePolicy>>,\n): MergeWithFieldPolicyResult<T> {\n const out: Record<string, unknown> = {};\n const sources: Record<string, \"platform\" | \"project\" | \"both\"> = {};\n const ignoredProjectFields: string[] = [];\n\n const keys = new Set<string>([\n ...Object.keys(platform ?? {}),\n ...Object.keys(project ?? {}),\n ]);\n\n for (const key of keys) {\n const platformValue = (platform as Record<string, unknown> | undefined)?.[key];\n const projectValue = (project as Record<string, unknown> | undefined)?.[key];\n const fieldPolicy = (policy as Record<string, FieldMergePolicy | undefined>)[key] ?? \"mergeable\";\n\n const hasPlatform = platformValue !== undefined;\n const hasProject = projectValue !== undefined;\n\n if (fieldPolicy === \"platform-only\") {\n if (hasProject) { ignoredProjectFields.push(key); }\n if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n }\n continue;\n }\n\n if (fieldPolicy === \"project-only\") {\n if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n } else if (hasPlatform) {\n // Platform layer carries a value for a project-only field — drop it silently;\n // it has no semantic meaning at the platform layer.\n continue;\n }\n continue;\n }\n\n // mergeable\n if (hasPlatform && hasProject) {\n out[key] = mergeDefined(platformValue as never, projectValue as never);\n sources[key] = \"both\";\n } else if (hasPlatform) {\n out[key] = platformValue;\n sources[key] = \"platform\";\n } else if (hasProject) {\n out[key] = projectValue;\n sources[key] = \"project\";\n }\n }\n\n return { value: out as T, ignoredProjectFields, sources };\n}\n\nconst SYSTEM_DEFAULTS = {\n profiles: { rootDir: '.kb/profiles', defaultName: 'default', strict: true }\n} as const;\n\nexport interface ResolveConfigArgs<TConfig, _TEnvMap = unknown> {\n defaults: TConfig;\n fileConfig?: Partial<TConfig>;\n envMapper?: (env: NodeJS.ProcessEnv) => Partial<TConfig> | undefined; // product supplies mapping\n cliOverrides?: Partial<TConfig>;\n validate?: (cfg: TConfig) => { ok: boolean; diagnostics?: Diagnostic[] }; // product supplies validation\n}\n\n/**\n * Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.\n * No domain keys inside; mapping/validation provided by the product/shared layer.\n */\nexport function resolveConfig<TConfig>(args: ResolveConfigArgs<TConfig>): { value: TConfig; diagnostics: Diagnostic[] } {\n const diagnostics: Diagnostic[] = [];\n const envPart = args.envMapper?.(process.env) ?? {};\n\n const merged = mergeDefined(\n mergeDefined(\n mergeDefined(mergeDefined(structuredClone(SYSTEM_DEFAULTS) as unknown as Partial<TConfig>, structuredClone(args.defaults)), args.fileConfig),\n envPart,\n ),\n args.cliOverrides,\n ) as TConfig;\n\n if (args.validate) {\n const res = args.validate(merged);\n if (!res.ok) {\n diagnostics.push({ level: \"error\", code: \"CONFIG_VALIDATION_FAILED\", message: \"Configuration did not pass validation.\" });\n if (res.diagnostics) { diagnostics.push(...res.diagnostics); }\n } else if (res.diagnostics?.length) {\n diagnostics.push(...res.diagnostics);\n }\n }\n\n return { value: merged, diagnostics };\n}\n\nexport { SYSTEM_DEFAULTS };\nexport type { ProfilesConfig, KBConfig };","/**\n * @module @kb-labs/core/utils/env\n * Small helpers to convert ENV strings to typed values.\n */\n\nexport function toBool(v: string | undefined): boolean | undefined {\n if (v === undefined) {return undefined;}\n const s = v.trim().toLowerCase();\n if (s === \"1\" || s === \"true\" || s === \"yes\" || s === \"on\") {return true;}\n if (s === \"0\" || s === \"false\" || s === \"no\" || s === \"off\") {return false;}\n return undefined; // unknown → let caller decide default\n}\n\nexport function toInt(v: string | undefined): number | undefined {\n if (v === undefined) {return undefined;}\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}","/**\n * @module @kb-labs/core/config/utils/product-normalize\n * Product ID normalization between code (camelCase) and filesystem (kebab-case)\n */\n\nconst FS_MAP = new Map([\n ['aiReview', 'ai-review'],\n ['aiDocs', 'ai-docs'],\n ['devlink', 'devlink'],\n ['release', 'release'],\n ['devkit', 'devkit'],\n ['mind', 'mind'],\n ['workflow', 'workflow'],\n ['analytics', 'analytics'],\n]);\n\n/**\n * Convert product ID to filesystem kebab-case format\n * @param id Product ID (e.g., 'aiReview', 'mind', 'workflow')\n * @returns kebab-case string for filesystem paths\n */\nexport function toFsProduct(id: string): string {\n return FS_MAP.get(id) ?? id;\n}\n\n/**\n * Convert filesystem kebab-case key to product ID\n * @param fsKey kebab-case string from filesystem\n * @returns Product ID (camelCase if mapped, original otherwise)\n */\nexport function toConfigProduct(fsKey: string): string {\n for (const [k, v] of FS_MAP) {\n if (v === fsKey) {return k;}\n }\n return fsKey;\n}\n\n/**\n * Check if a string is a known product ID\n */\nexport function isValidProductId(value: string): boolean {\n return FS_MAP.has(value);\n}\n\n/**\n * Get all known product IDs\n */\nexport function getAllProductIds(): string[] {\n return Array.from(FS_MAP.keys());\n}\n","import path from 'node:path';\n\n/**\n * Get profiles root directory\n */\nexport function getProfilesRootDir(cwd: string): string {\n return path.join(cwd, '.kb', 'profiles');\n}\n\n/**\n * Get product configuration directory\n */\nexport function getProductConfigDir(cwd: string, fsProduct: string): string {\n return path.join(cwd, '.kb', fsProduct);\n}\n\n/**\n * Get product configuration file path\n */\nexport function getProductConfigPath(cwd: string, fsProduct: string): string {\n return path.join(getProductConfigDir(cwd, fsProduct), `${fsProduct}.config.json`);\n}\n\n/**\n * Get .kb root directory\n */\nexport function getKbRootDir(cwd: string): string {\n return path.join(cwd, '.kb');\n}\n\n/**\n * Get lockfile path\n */\nexport function getLockfilePath(cwd: string): string {\n return path.join(getKbRootDir(cwd), 'lock.json');\n}\n\n","// Core exports\nexport * from './types/index.js';\nexport * from './runtime/index.js';\nexport * from './utils/index.js';\nexport * from './utils/paths.js';\n\n// Enhanced config system exports\nexport * from './errors/kb-error.js';\nexport * from './cache/fs-cache.js';\nexport * from './hash/config-hash.js';\nexport * from './api/read-config.js';\nexport * from './api/read-kb-config.js';\nexport * from './merge/layered-merge.js';\nexport * from './api/product-config.js';\nexport * from './preset/resolve-preset.js';\nexport * from './lockfile/lockfile.js';\nexport * from './types/preset.js';\nexport * from './profiles/types.js';\nexport * from './profiles/loader.js';\nexport * from './profiles/scope-selector.js';\nexport * from './profiles/resolver.js';\n\n// Init system exports\nexport * from './types/init.js';\nexport * from './api/init-workspace.js';\nexport * from './api/upsert-lockfile.js';\nexport * from './utils/fs-atomic.js';\n\n// Re-export clearCaches for convenience\nexport { clearCaches } from './cache/fs-cache.js';\n\n// Validation API\nexport { validateProductConfig } from './validation/validate-config.js';\n","/**\n * @module @kb-labs/core/config/cache/fs-cache\n * LRU cache for filesystem reads with clearCaches() support\n */\n\nimport { promises as fsp } from 'node:fs';\n\ninterface CacheEntry {\n data: unknown;\n mtime: number;\n size: number;\n timestamp: number;\n}\n\ninterface CacheKey {\n absPath: string;\n mtime: number;\n size: number;\n}\n\nclass LRUCache<K, V> {\n private cache = new Map<K, V>();\n private maxSize: number;\n\n constructor(maxSize = 100) {\n this.maxSize = maxSize;\n }\n\n get(key: K): V | undefined {\n const value = this.cache.get(key);\n if (value !== undefined) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove least recently used (first item)\n const firstKey = this.cache.keys().next().value;\n if (firstKey !== undefined) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n delete(key: K): boolean {\n return this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\nclass FSCache {\n private cache = new LRUCache<string, CacheEntry>(100);\n private keyCache = new LRUCache<string, CacheKey>(100);\n\n /**\n * Generate cache key from file path, mtime, and size\n */\n private async getCacheKey(absPath: string): Promise<CacheKey> {\n const keyStr = `key:${absPath}`;\n let key = this.keyCache.get(keyStr);\n \n if (!key) {\n try {\n const stats = await fsp.stat(absPath);\n key = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(keyStr, key);\n } catch {\n // File doesn't exist or can't be read\n return { absPath, mtime: 0, size: 0 };\n }\n }\n \n return key;\n }\n\n /**\n * Get cached file data if available and not stale\n */\n async get(absPath: string): Promise<unknown> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n const entry = this.cache.get(cacheKey);\n if (!entry) {\n return null;\n }\n\n // Check if file has been modified since cache\n try {\n const stats = await fsp.stat(absPath);\n if (stats.mtime.getTime() !== key.mtime || stats.size !== key.size) {\n // File changed, remove from cache and update key cache\n this.cache.delete(cacheKey);\n // Update the key cache with new stats\n const newKey = {\n absPath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n };\n this.keyCache.set(`key:${absPath}`, newKey);\n return null;\n }\n } catch {\n // File no longer exists\n this.cache.delete(cacheKey);\n return null;\n }\n\n return entry.data;\n }\n\n /**\n * Cache file data\n */\n async set(absPath: string, data: unknown): Promise<void> {\n const key = await this.getCacheKey(absPath);\n const cacheKey = `${key.absPath}|${key.mtime}|${key.size}`;\n \n this.cache.set(cacheKey, {\n data,\n mtime: key.mtime,\n size: key.size,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.cache.clear();\n this.keyCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; keySize: number } {\n return {\n size: this.cache.size(),\n keySize: this.keyCache.size(),\n };\n }\n}\n\n// Singleton instance\nconst fsCache = new FSCache();\n\nexport { fsCache, FSCache };\n\n/**\n * Clear all filesystem caches\n */\nexport function clearCaches(): void {\n fsCache.clearCaches();\n}\n","/**\n * @module @kb-labs/core/config/hash/config-hash\n * SHA256 hash computation for configuration objects (lockfile generation)\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Compute SHA256 hash of a configuration object\n * @param obj Configuration object to hash\n * @returns SHA256 hash as hex string\n */\nexport function computeConfigHash(obj: unknown): string {\n // Normalize object for consistent hashing\n const normalized = normalizeForHash(obj);\n const json = JSON.stringify(normalized, null, 0);\n return createHash('sha256').update(json, 'utf8').digest('hex');\n}\n\n/**\n * Normalize object for consistent hashing\n * - Sort object keys\n * - Remove undefined values\n * - Convert to stable representation\n */\nfunction normalizeForHash(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return null;\n }\n\n if (typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(normalizeForHash);\n }\n\n // Sort object keys for consistent ordering\n const record = obj as Record<string, unknown>;\n const sortedKeys = Object.keys(record).sort();\n const normalized: Record<string, unknown> = {};\n\n for (const key of sortedKeys) {\n const value = record[key];\n if (value !== undefined) {\n normalized[key] = normalizeForHash(value);\n }\n }\n\n return normalized;\n}\n\n/**\n * Compute hash for multiple config objects\n * @param configs Array of config objects\n * @returns Combined SHA256 hash\n */\nexport function computeConfigsHash(configs: Record<string, unknown>[]): string {\n const combined = configs.reduce<Record<string, unknown>>((acc, config) => {\n return { ...acc, ...config };\n }, {});\n return computeConfigHash(combined);\n}\n","/**\n * @module @kb-labs/core/config/api/read-config\n * Enhanced config file reading with YAML support and find-up\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { extname } from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { fsCache } from '../cache/fs-cache';\n\nexport interface ConfigFileResult {\n data: unknown;\n format: 'json' | 'yaml';\n path: string;\n}\n\nfunction stripJsonComments(src: string): string {\n let out = '';\n let i = 0;\n const len = src.length;\n while (i < len) {\n if (src[i] === '\"') {\n out += src[i++];\n while (i < len) {\n if (src[i] === '\\\\') { out += src[i++]; out += src[i++]; continue; }\n out += src[i];\n if (src[i++] === '\"') { break; }\n }\n } else if (src[i] === '/' && src[i + 1] === '/') {\n while (i < len && src[i] !== '\\n') { i++; }\n } else if (src[i] === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < len && !(src[i] === '*' && src[i + 1] === '/')) { i++; }\n i += 2;\n } else {\n out += src[i++];\n }\n }\n return out.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\n/**\n * Read config file with format detection and caching\n */\nexport async function readConfigFile(filePath: string): Promise<ConfigFileResult> {\n const absPath = path.resolve(filePath);\n \n // Check cache first\n const cached = await fsCache.get(absPath);\n if (cached !== null && cached !== undefined) {\n return cached as ConfigFileResult;\n }\n\n try {\n const raw = await fsp.readFile(absPath, 'utf-8');\n const ext = extname(absPath).toLowerCase();\n \n let data: unknown;\n let format: 'json' | 'yaml';\n \n if (ext === '.yaml' || ext === '.yml') {\n data = YAML.parse(raw);\n format = 'yaml';\n } else {\n const jsonSource = ext === '.jsonc' ? stripJsonComments(raw) : raw;\n data = JSON.parse(jsonSource);\n format = 'json';\n }\n \n const result: ConfigFileResult = { data, format, path: absPath };\n \n // Cache the result\n await fsCache.set(absPath, result);\n \n return result;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to parse config file: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { filePath, error: error.message }\n );\n }\n \n throw new KbError(\n 'ERR_CONFIG_NOT_FOUND',\n `Config file not found: ${filePath}`,\n ERROR_HINTS.ERR_CONFIG_NOT_FOUND,\n { filePath, error: error instanceof Error ? error.message : String(error) }\n );\n }\n}\n\n/**\n * Find nearest config file walking up from startDir to git root\n * Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility\n */\nasync function findNearestConfig(\n startDir: string,\n filenames: string[] = []\n): Promise<{ path: string | null; tried: string[] }> {\n const start = path.resolve(startDir);\n const tried: string[] = [];\n let dir = start;\n\n // Default filenames if not provided: prioritize .kb/ location\n const defaultFilenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;\n\n while (true) {\n for (const filename of searchFilenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n \n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // Continue to next filename\n }\n }\n \n const parent = path.dirname(dir);\n if (parent === dir) {\n // Reached filesystem root\n break;\n }\n dir = parent;\n }\n \n return { path: null, tried };\n}\n\n/**\n * Find git root directory\n */\nexport async function findGitRoot(startDir: string): Promise<string | null> {\n let dir = path.resolve(startDir);\n \n while (true) {\n try {\n await fsp.access(path.join(dir, '.git'));\n return dir;\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n }\n \n return null;\n}\n\n/**\n * Read workspace config with find-up to git root\n */\nexport async function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null> {\n const { path: configPath } = await findNearestConfig(cwd);\n \n if (!configPath) {\n return null;\n }\n \n return readConfigFile(configPath);\n}\n","/**\n * @module @kb-labs/core-config/api/read-kb-config\n * Find + read kb.config.* files (product-level workspace config).\n */\n\nimport path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { findGitRoot, readConfigFile, type ConfigFileResult } from './read-config';\n\nconst KB_CONFIG_FILENAMES = [\n 'kb.config.jsonc',\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n '.kb/kb.config.jsonc',\n '.kb/kb.config.json',\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n];\n\nexport type KbConfigResult = ConfigFileResult;\n\nexport async function findKbConfig(\n cwd: string,\n filenames: string[] = KB_CONFIG_FILENAMES\n): Promise<{ path: string | null; tried: string[] }> {\n const tried: string[] = [];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n let dir = path.resolve(cwd);\n\n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n tried.push(candidate);\n try {\n await fsp.access(candidate);\n return { path: candidate, tried };\n } catch {\n // continue\n }\n }\n\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n\n dir = path.dirname(dir);\n }\n\n return { path: null, tried };\n}\n\nexport async function readKbConfig(cwd: string): Promise<KbConfigResult | null> {\n const { path } = await findKbConfig(cwd);\n if (!path) {\n return null;\n }\n return readConfigFile(path);\n}\n\n","/**\n * @module @kb-labs/core/config/merge/layered-merge\n * Layered merge with trace for configuration layers\n */\n\nimport type { ConfigLayer, MergeTrace } from '../types';\n\nexport interface LayeredMergeResult {\n merged: Record<string, unknown>;\n trace: MergeTrace[];\n}\n\n/**\n * Merge configuration layers with detailed trace\n * Arrays are overwritten (not merged)\n * Objects are deeply merged\n */\nexport function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult {\n const trace: MergeTrace[] = [];\n \n const isPlainObject = (v: unknown): v is Record<string, unknown> =>\n v !== null && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;\n\n const merge = (base: unknown, overlay: unknown, layer: ConfigLayer, path: string[] = []): unknown => {\n // Handle array overwrite\n if (Array.isArray(base) && Array.isArray(overlay)) {\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'overwriteArray',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n return overlay;\n }\n \n // Handle object merge\n if (isPlainObject(base) && isPlainObject(overlay)) {\n const result: Record<string, unknown> = { ...base };\n \n for (const [key, value] of Object.entries(overlay)) {\n if (key in base) {\n result[key] = merge(base[key], value, layer, [...path, key]);\n } else {\n trace.push({\n path: [...path, key].join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n result[key] = value;\n }\n }\n \n return result;\n }\n \n // Different types or primitive values - overlay wins\n trace.push({\n path: path.join('.'),\n source: layer.source,\n type: 'set',\n layer: layer.label,\n profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,\n presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,\n version: extractVersion(layer.source),\n });\n \n return overlay ?? base;\n };\n \n const merged = layers.reduce<Record<string, unknown>>((acc, layer) => {\n return merge(acc, layer.value, layer) as Record<string, unknown>;\n }, {});\n\n return { merged, trace };\n}\n\n/**\n * Extract profile ref from source string\n */\nfunction extractProfileRef(source: string): string | undefined {\n const match = source.match(/profile[^:]*:[^@]+@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract preset ref from source string\n */\nfunction extractPresetRef(source: string): string | undefined {\n const match = source.match(/preset[^:]*:@(.+)/);\n return match?.[1];\n}\n\n/**\n * Extract version from source string\n */\nfunction extractVersion(source: string): string | undefined {\n const match = source.match(/@([^:]+)/);\n return match?.[1];\n}\n","/**\n * @module @kb-labs/core/config/preset/resolve-preset\n * Org preset resolution with offline-first npm package loading\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface PresetInfo {\n name: string;\n version: string;\n path: string;\n config: Record<string, unknown>;\n}\n\n/**\n * Resolve org preset package (offline-first)\n */\nexport async function resolvePreset(\n presetRef: string,\n cwd: string\n): Promise<PresetInfo> {\n // Parse preset reference (e.g., \"@kb-labs/org-preset@1.3.2\")\n const [name, version] = parsePresetRef(presetRef);\n \n // Try local node_modules first (offline-first)\n const localPath = path.join(cwd, 'node_modules', name);\n try {\n const presetInfo = await loadPresetFromPath(localPath, name, version);\n if (presetInfo) {\n return presetInfo;\n }\n } catch {\n // Local preset not found, continue to network resolution\n }\n \n // Try network resolution (this would be implemented with npm/pnpm APIs)\n // For now, we'll throw an error if local resolution fails\n throw new KbError(\n 'ERR_PRESET_NOT_RESOLVED',\n `Preset not found: ${presetRef}`,\n ERROR_HINTS.ERR_PRESET_NOT_RESOLVED,\n { presetRef, cwd }\n );\n}\n\n/**\n * Parse preset reference into name and version\n */\nfunction parsePresetRef(presetRef: string): [string, string] {\n const atIndex = presetRef.lastIndexOf('@');\n if (atIndex === -1) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include version (e.g., @kb-labs/org-preset@1.3.2)',\n { presetRef }\n );\n }\n \n const name = presetRef.substring(0, atIndex);\n const version = presetRef.substring(atIndex + 1);\n \n if (!name || !version) {\n throw new KbError(\n 'ERR_PRESET_REF_INVALID',\n `Invalid preset reference: ${presetRef}`,\n 'Preset references must include both name and version',\n { presetRef }\n );\n }\n \n return [name, version];\n}\n\n/**\n * Load preset from local path\n */\nasync function loadPresetFromPath(\n presetPath: string,\n name: string,\n version: string\n): Promise<PresetInfo | null> {\n try {\n // Check if preset directory exists\n await fsp.access(presetPath);\n \n // Load package.json to verify version\n const packageJsonPath = path.join(presetPath, 'package.json');\n const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, 'utf-8'));\n \n // Verify version matches (supports semver ranges)\n if (!versionMatches(packageJson.version, version)) {\n return null;\n }\n \n // Load preset config\n const configPath = path.join(presetPath, 'config.defaults.json');\n const config = JSON.parse(await fsp.readFile(configPath, 'utf-8'));\n \n return {\n name,\n version: packageJson.version,\n path: presetPath,\n config,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if version matches (simple semver range support)\n */\nfunction versionMatches(actualVersion: string, requiredVersion: string): boolean {\n // Simple exact match for now\n // TODO: Implement proper semver range matching\n if (requiredVersion.startsWith('^')) {\n const major = requiredVersion.substring(1).split('.')[0];\n const actualMajor = actualVersion.split('.')[0];\n return major === actualMajor;\n }\n \n return actualVersion === requiredVersion;\n}\n\n/**\n * Get preset config for a specific product\n */\nexport function getPresetConfigForProduct(\n preset: PresetInfo,\n product: string\n): Record<string, unknown> {\n const fsProduct = toFsProduct(product);\n const products = preset.config['products'];\n if (products && typeof products === 'object' && !Array.isArray(products)) {\n return (products as Record<string, Record<string, unknown>>)[fsProduct] ?? {};\n }\n return {};\n}\n\n/**\n * Get preset metadata\n */\nexport function getPresetMetadata(preset: PresetInfo): {\n name: string;\n version: string;\n path: string;\n products: string[];\n} {\n return {\n name: preset.name,\n version: preset.version,\n path: preset.path,\n products: Object.keys(preset.config.products || {}),\n };\n}\n","/**\n * @module @kb-labs/core/config/lockfile/lockfile\n * Lockfile generation and management\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { computeConfigHash } from '../hash/config-hash';\nimport { toFsProduct } from '../utils/product-normalize';\n\nexport interface LockfileData {\n $schema?: string;\n schemaVersion: '1.0';\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n hashes: Record<string, string>;\n generatedAt: string;\n}\n\n/**\n * Read lockfile from workspace\n */\nexport async function readLockfile(cwd: string): Promise<LockfileData | null> {\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n \n try {\n const lockfileData = await fsp.readFile(lockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n // Try old location for backward compatibility\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n try {\n const lockfileData = await fsp.readFile(oldLockfilePath, 'utf-8');\n return JSON.parse(lockfileData) as LockfileData;\n } catch {\n return null;\n }\n }\n}\n\n/**\n * Stable JSON serialization with sorted keys for predictable diffs\n */\nfunction stableStringify(obj: unknown, space = 2): string {\n return JSON.stringify(obj, (key, value: unknown) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return Object.keys(value as Record<string, unknown>)\n .sort()\n .reduce((sorted: Record<string, unknown>, k) => {\n sorted[k] = (value as Record<string, unknown>)[k];\n return sorted;\n }, {});\n }\n return value;\n }, space);\n}\n\n/**\n * Write lockfile to workspace\n */\nexport async function writeLockfile(\n cwd: string,\n lockfileData: LockfileData\n): Promise<void> {\n const lockfileDir = path.join(cwd, '.kb');\n const lockfilePath = path.join(lockfileDir, 'lock.json');\n \n // Ensure .kb directory exists\n await fsp.mkdir(lockfileDir, { recursive: true });\n \n // Add schema if not present\n if (!lockfileData.$schema) {\n lockfileData.$schema = 'https://schemas.kb-labs.dev/lockfile.schema.json';\n }\n \n // Use atomic write with stable key ordering\n const { writeFileAtomic } = await import('../utils/fs-atomic');\n await writeFileAtomic(lockfilePath, stableStringify(lockfileData, 2) + '\\n');\n}\n\n/**\n * Update lockfile with new hashes\n */\nexport async function updateLockfile(\n cwd: string,\n updates: {\n orgPreset?: string;\n profile?: string;\n policyBundle?: string;\n configHashes?: Record<string, unknown>;\n }\n): Promise<LockfileData> {\n const existing = await readLockfile(cwd);\n \n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: updates.orgPreset || existing?.orgPreset,\n profile: updates.profile || existing?.profile,\n policyBundle: updates.policyBundle || existing?.policyBundle,\n hashes: { ...existing?.hashes },\n generatedAt: new Date().toISOString(),\n };\n \n // Update config hashes\n if (updates.configHashes) {\n for (const [product, config] of Object.entries(updates.configHashes)) {\n const fsProduct = toFsProduct(product as string);\n const hash = computeConfigHash(config);\n lockfileData.hashes[fsProduct] = hash;\n }\n }\n \n await writeLockfile(cwd, lockfileData);\n return lockfileData;\n}\n\n/**\n * Get config hash for a product\n */\nexport function getLockfileConfigHash(product: string, config: unknown): string {\n return computeConfigHash(config);\n}\n\n/**\n * Check if lockfile is up to date\n */\nexport async function isLockfileUpToDate(\n cwd: string,\n configs: Record<string, unknown>\n): Promise<boolean> {\n const lockfile = await readLockfile(cwd);\n if (!lockfile) {\n return false;\n }\n \n for (const [product, config] of Object.entries(configs)) {\n const fsProduct = toFsProduct(product as string);\n const currentHash = computeConfigHash(config);\n const lockfileHash = lockfile.hashes[fsProduct];\n \n if (currentHash !== lockfileHash) {\n return false;\n }\n }\n \n return true;\n}\n\n/**\n * Validate lockfile schema\n */\nexport function validateLockfile(lockfileData: unknown): lockfileData is LockfileData {\n if (!lockfileData || typeof lockfileData !== 'object') {\n return false;\n }\n\n const data = lockfileData as Record<string, unknown>;\n\n if (data['schemaVersion'] !== '1.0') {\n return false;\n }\n\n if (!data['hashes'] || typeof data['hashes'] !== 'object') {\n return false;\n }\n\n if (!data['generatedAt'] || typeof data['generatedAt'] !== 'string') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get lockfile statistics\n */\nexport function getLockfileStats(lockfileData: LockfileData): {\n productCount: number;\n hasOrgPreset: boolean;\n hasProfile: boolean;\n hasPolicyBundle: boolean;\n generatedAt: Date;\n} {\n return {\n productCount: Object.keys(lockfileData.hashes).length,\n hasOrgPreset: !!lockfileData.orgPreset,\n hasProfile: !!lockfileData.profile,\n hasPolicyBundle: !!lockfileData.policyBundle,\n generatedAt: new Date(lockfileData.generatedAt),\n };\n}\n","/**\n * @module @kb-labs/core/config/api/product-config\n * High-level product configuration resolver with layered merge\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n// Note: KbError and ERROR_HINTS are available if needed for future error handling\nimport { readWorkspaceConfig } from './read-config';\nimport { layeredMergeWithTrace } from '../merge/layered-merge';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { ResolveOptions, ProductConfigResult, ConfigLayer } from '../types';\nimport { computeConfigHash } from '../hash/config-hash';\nimport { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';\nimport { updateLockfile } from '../lockfile/lockfile';\n\n/**\n * Get product configuration with layered merge and trace\n */\nexport async function getProductConfig<T = Record<string, unknown>>(\n opts: ResolveOptions,\n schema: unknown\n): Promise<ProductConfigResult<T>> {\n const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;\n const fsProduct = toFsProduct(product);\n \n // Read workspace configuration\n const workspaceConfig = await readWorkspaceConfig(cwd);\n \n // Build configuration layers\n const layers: ConfigLayer[] = [];\n \n // 1. Runtime defaults\n layers.push({\n label: 'runtime',\n value: getRuntimeDefaults(product),\n source: 'runtime:defaults',\n });\n \n // 2. Profile defaults\n if (profileLayer && profileLayer.products) {\n // profileLayer.products is already the product-specific overlay (not a map of products)\n const profileOverlay = profileLayer.products as Record<string, unknown>;\n\n layers.push({\n label: 'profile',\n value: profileOverlay,\n source: profileLayer.source,\n });\n\n if (profileLayer.scope && profileLayer.scope.products) {\n // profileLayer.scope.products is already the scope-specific overlay\n const scopeOverlay = profileLayer.scope.products as Record<string, unknown>;\n layers.push({\n label: 'profile-scope',\n value: scopeOverlay,\n source: profileLayer.scope.source,\n });\n }\n } else {\n layers.push({\n label: 'profile',\n value: {},\n source: 'profile:none',\n });\n }\n \n // 3. Preset defaults (resolve org preset if configured)\n let presetConfig = {};\n if (workspaceConfig?.data) {\n const workspaceData = workspaceConfig.data as Record<string, unknown>;\n if (workspaceData['$extends']) {\n try {\n const preset = await resolvePreset(workspaceData['$extends'] as string, cwd);\n presetConfig = getPresetConfigForProduct(preset, product);\n \n layers.push({\n label: 'preset',\n value: presetConfig,\n source: `preset:${workspaceData['$extends']}`,\n });\n } catch (error) {\n // Preset resolution failed, continue without preset\n console.warn(`Warning: Could not resolve preset ${workspaceData['$extends']}:`, error);\n }\n }\n }\n \n if (Object.keys(presetConfig).length === 0) {\n layers.push({\n label: 'preset',\n value: {},\n source: 'preset:none',\n });\n }\n \n // 4. Workspace config\n if (workspaceConfig?.data) {\n const workspaceData = (workspaceConfig.data as { products?: Record<string, unknown> })?.products?.[fsProduct] ?? {};\n layers.push({\n label: 'workspace',\n value: workspaceData,\n source: 'workspace:kb-labs.config',\n });\n }\n \n // 5. Local config (.kb/<product>/<product>.config.json)\n const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);\n try {\n const localConfig = await fsp.readFile(localConfigPath, 'utf-8');\n const localData = JSON.parse(localConfig);\n layers.push({\n label: 'local',\n value: localData,\n source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,\n });\n } catch {\n // Local config is optional\n }\n \n // 6. CLI overrides\n if (Object.keys(cli).length > 0) {\n layers.push({\n label: 'cli',\n value: cli,\n source: 'cli:overrides',\n });\n }\n \n // Merge all layers\n const { merged, trace } = layeredMergeWithTrace(layers);\n \n // Validate against schema if provided\n if (schema) {\n // Schema validation will be implemented with AJV\n // For now, we'll skip validation\n }\n \n // Write final config if requested\n if (writeFinal) {\n await writeFinalConfig(cwd, fsProduct, merged);\n }\n \n // Update lockfile with config hash\n try {\n const configHash = computeConfigHash(merged);\n \n const configHashes: Record<string, unknown> = {};\n configHashes[product] = configHash;\n await updateLockfile(cwd, {\n configHashes\n });\n } catch (error) {\n // Lockfile update is optional, don't fail the config resolution\n console.warn('Warning: Could not update lockfile:', error);\n }\n \n return {\n config: merged as T,\n trace,\n };\n}\n\n/**\n * Explain product configuration (trace only)\n */\nexport async function explainProductConfig(\n opts: Omit<ResolveOptions, 'writeFinal'>,\n schema: unknown\n): Promise<{ trace: import('../types').MergeTrace[] }> {\n const result = await getProductConfig(opts, schema);\n return { trace: result.trace };\n}\n\n/**\n * Get runtime defaults for a product\n */\nfunction getRuntimeDefaults(product: string): Record<string, unknown> {\n const defaults: Record<string, Record<string, unknown>> = {\n devlink: {\n watch: true,\n build: true,\n },\n release: {\n registry: 'https://registry.npmjs.org',\n strategy: 'semver',\n bump: 'auto',\n strict: true,\n verify: ['audit', 'build', 'tests'],\n publish: { npm: true, github: false },\n rollback: { enabled: true, maxHistory: 5 },\n output: { json: true, md: true, text: true },\n changelog: {\n enabled: true,\n includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],\n excludeTypes: ['chore', 'ci'],\n ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],\n collapseMerges: true,\n collapseReverts: true,\n preferMergeSummary: true,\n bumpStrategy: 'independent',\n workspace: true,\n perPackage: true,\n format: 'both',\n level: 'standard',\n locale: 'en',\n cache: true,\n requireAudit: true,\n requireSignedTags: false,\n redactPatterns: ['(?i)token=\\\\w+', '(?i)apikey=\\\\w+', '(https?://[^\\\\s]+@[^\\\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],\n maxBodyLength: 500,\n ignoreSubmodules: true,\n },\n git: {\n provider: 'auto',\n autoUnshallow: false,\n },\n },\n aiReview: {\n enabled: true,\n rules: [],\n },\n aiDocs: {\n enabled: true,\n templates: [],\n },\n devkit: {\n sync: true,\n check: true,\n },\n analytics: {\n enabled: true,\n sinks: [],\n buffer: {},\n },\n };\n \n return defaults[product] || {};\n}\n\n/**\n * Write final configuration to .kb/<product>/<product>.config.json\n */\nasync function writeFinalConfig(cwd: string, fsProduct: string, config: Record<string, unknown>): Promise<void> {\n const configDir = path.join(cwd, '.kb', fsProduct);\n const configPath = path.join(configDir, `${fsProduct}.config.json`);\n \n // Ensure directory exists\n await fsp.mkdir(configDir, { recursive: true });\n \n // Write config with schema version\n const finalConfig = {\n $schema: 'https://schemas.kb-labs.dev/config.schema.json',\n schemaVersion: '1.0',\n ...config,\n };\n \n await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));\n}\n\n/**\n * Get configuration hash for lockfile\n */\nexport function getConfigHash(config: unknown): string {\n return computeConfigHash(config);\n}\n","/**\n * @module @kb-labs/core-config/profiles/types\n * Shared ProfileV2 + BundleProfile types and Zod schemas.\n */\n\nimport { z } from 'zod';\n\nconst GlobSchema = z.string().min(1, 'Glob pattern must be a non-empty string');\nconst ProductOverridesSchema = z.record(z.string(), z.unknown());\nconst ProductsMapSchema = z.record(z.string(), ProductOverridesSchema);\n\nexport const ScopeV2Schema = z.object({\n id: z.string().min(1, 'Scope id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(GlobSchema).min(1, 'include requires at least one glob'),\n exclude: z.array(GlobSchema).optional(),\n products: ProductsMapSchema.optional(),\n default: z.boolean().optional(),\n});\nexport type ScopeV2 = z.infer<typeof ScopeV2Schema>;\n\nexport const ProfileMetaSchema = z.object({\n version: z.string().optional(),\n tags: z.array(z.string()).optional(),\n deprecated: z.boolean().optional(),\n owner: z.string().optional(),\n}).strict();\nexport type ProfileMeta = z.infer<typeof ProfileMetaSchema>;\n\nexport const ProfileV2Schema = z.object({\n id: z.string().min(1, 'Profile id is required'),\n label: z.string().optional(),\n description: z.string().optional(),\n extends: z.string().min(1, 'extends must reference another profile id or preset').optional(),\n scopes: z.array(ScopeV2Schema).optional(),\n products: ProductsMapSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n});\nexport type ProfileV2 = z.infer<typeof ProfileV2Schema>;\n\nexport const ProfilesV2Schema = z.array(ProfileV2Schema);\n\nexport const ResolvedScopeSchema = z.object({\n id: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n include: z.array(z.string()),\n exclude: z.array(z.string()).optional(),\n isDefault: z.boolean(),\n products: ProductsMapSchema.optional(),\n});\nexport type ResolvedScope = z.infer<typeof ResolvedScopeSchema>;\n\nexport const BundleProfileSourceSchema = z.enum(['workspace', 'preset', 'npm', 'implicit']);\nexport type BundleProfileSource = z.infer<typeof BundleProfileSourceSchema>;\n\nexport const ProfileTraceSchema = z.object({\n extends: z.array(z.string()).optional(),\n overrides: z.array(z.string()).optional(),\n});\nexport type ProfileTrace = z.infer<typeof ProfileTraceSchema>;\n\nexport const ScopeSelectionSchema = z.object({\n strategy: z.enum(['explicit', 'default', 'auto', 'none']),\n path: z.string().optional(),\n});\nexport type ScopeSelection = z.infer<typeof ScopeSelectionSchema>;\n\nexport const BundleProfileSchema = z.object({\n id: z.string(),\n key: z.string().optional(),\n label: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n source: BundleProfileSourceSchema,\n scopes: z.array(ResolvedScopeSchema),\n products: ProductsMapSchema.optional(),\n trace: ProfileTraceSchema.optional(),\n meta: ProfileMetaSchema.optional(),\n productsByScope: z.record(z.string(), ProductsMapSchema).optional(),\n activeScopeId: z.string().optional(),\n activeScope: ResolvedScopeSchema.optional(),\n scopeSelection: ScopeSelectionSchema.optional(),\n});\nexport type BundleProfile = z.infer<typeof BundleProfileSchema>;\n\n","/**\n * @module @kb-labs/core-config/profiles/loader\n * Load + validate profiles[] section from kb.config.*\n */\n\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { readKbConfig } from '../api/read-kb-config';\nimport {\n ProfilesV2Schema,\n type ProfileV2,\n} from './types';\n\nexport interface ProfilesSectionResult {\n profiles: ProfileV2[];\n sourcePath?: string;\n format?: 'json' | 'yaml';\n}\n\nexport async function readProfilesSection(cwd: string): Promise<ProfilesSectionResult> {\n const kbConfig = await readKbConfig(cwd);\n if (!kbConfig?.data) {\n return { profiles: [] };\n }\n\n const rawProfiles = (kbConfig.data as { profiles?: unknown })?.profiles;\n\n if (rawProfiles === undefined) {\n return {\n profiles: [],\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n }\n\n const parsed = ProfilesV2Schema.safeParse(rawProfiles);\n if (!parsed.success) {\n throw new KbError(\n 'ERR_PROFILE_INVALID_FORMAT',\n 'Invalid profiles[] section in kb.config.',\n ERROR_HINTS.ERR_PROFILE_INVALID_FORMAT,\n {\n issues: parsed.error.issues,\n sourcePath: kbConfig.path,\n }\n );\n }\n\n return {\n profiles: parsed.data,\n sourcePath: kbConfig.path,\n format: kbConfig.format,\n };\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/scope-selector\n * Resolve active scope based on include/exclude globs and CLI flags.\n */\n\nimport path from 'node:path';\nimport picomatch from 'picomatch';\nimport type { BundleProfile, ResolvedScope } from './types';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nexport type ScopeSelectionStrategy = 'explicit' | 'default' | 'auto' | 'none';\n\nexport interface ScopeSelectionOptions {\n bundleProfile: BundleProfile;\n cwd: string;\n executionPath: string;\n scopeId?: string;\n}\n\nexport interface ScopeSelectionResult {\n scope?: ResolvedScope;\n strategy: ScopeSelectionStrategy;\n matchedPath?: string;\n}\n\nexport function selectProfileScope(\n opts: ScopeSelectionOptions\n): ScopeSelectionResult {\n const scopes = opts.bundleProfile.scopes || [];\n if (scopes.length === 0) {\n return { strategy: 'none' };\n }\n\n if (opts.scopeId) {\n const scope = scopes.find((s) => s.id === opts.scopeId);\n if (!scope) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_NOT_FOUND',\n `Scope \"${opts.scopeId}\" not found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_NOT_FOUND,\n { scopeId: opts.scopeId, available: scopes.map((s) => s.id) }\n );\n }\n return { scope, strategy: 'explicit' };\n }\n\n const defaults = scopes.filter((s) => s.isDefault);\n if (defaults.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple default scopes found in profile \"${opts.bundleProfile.id}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: defaults.map((s) => s.id) }\n );\n }\n if (defaults.length === 1) {\n return { scope: defaults[0], strategy: 'default' };\n }\n\n const relativePath = normalizePath(\n path.relative(opts.cwd, opts.executionPath)\n );\n const matches = scopes.filter((scope) =>\n scopeMatchesPath(scope, relativePath)\n );\n\n if (matches.length > 1) {\n throw new KbError(\n 'ERR_PROFILE_SCOPE_CONFLICT',\n `Multiple scopes match path \"${relativePath}\"`,\n ERROR_HINTS.ERR_PROFILE_SCOPE_CONFLICT,\n { scopes: matches.map((s) => s.id), path: relativePath }\n );\n }\n\n if (matches.length === 1) {\n return { scope: matches[0], strategy: 'auto', matchedPath: relativePath };\n }\n\n return { strategy: 'none' };\n}\n\nfunction scopeMatchesPath(scope: ResolvedScope, candidate: string): boolean {\n const includes = scope.include && scope.include.length > 0\n ? scope.include\n : ['**/*'];\n const excludeGlobs = scope.exclude || [];\n\n const tester = (glob: string) =>\n picomatch(glob, { dot: true, nocase: false })(candidate);\n\n const includeMatched =\n candidate === '.' ||\n includes.some((glob) => tester(adjustGlob(glob)));\n\n if (!includeMatched) {\n return false;\n }\n\n const excludeMatched = excludeGlobs.some((glob) =>\n tester(adjustGlob(glob))\n );\n\n return !excludeMatched;\n}\n\nfunction normalizePath(p: string): string {\n if (!p || p === '.') {\n return '.';\n }\n const normalized = p.split(path.sep).join('/');\n return normalized || '.';\n}\n\nfunction adjustGlob(glob: string): string {\n if (!glob) {\n return '**/*';\n }\n return glob;\n}\n\n","/**\n * @module @kb-labs/core-config/profiles/resolver\n * Resolve ProfileV2 definitions with extends/merge semantics.\n */\n\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { promises as fsp } from 'node:fs';\nimport type {\n BundleProfile,\n BundleProfileSource,\n ProfileTrace,\n ProfileV2,\n ScopeV2} from './types';\nimport {\n ProfilesV2Schema\n} from './types';\nimport { readProfilesSection } from './loader';\nimport { readConfigFile } from '../api/read-config';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\n\nconst requireFromHere = createRequire(import.meta.url);\n\nfunction clone<T>(value: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\ninterface ProfileLayer {\n profile: ProfileV2;\n source: BundleProfileSource | string; // Can be 'workspace' | 'preset' | 'npm' | 'implicit' or 'npm:package#profile'\n sourcePath?: string;\n}\n\nexport interface ResolveProfileOptions {\n cwd: string;\n profileId: string;\n}\n\nexport async function resolveProfile(\n opts: ResolveProfileOptions\n): Promise<BundleProfile> {\n const localProfilesResult = await readProfilesSection(opts.cwd);\n const localProfiles = localProfilesResult.profiles;\n const localPath = localProfilesResult.sourcePath;\n const profileMap = new Map(localProfiles.map((p) => [p.id, p]));\n\n const cache = new Map<string, ProfileLayer>();\n if (localPath) {\n for (const profile of localProfiles) {\n cache.set(profile.id, {\n profile: clone(profile),\n source: 'workspace',\n sourcePath: localPath,\n });\n }\n }\n\n const chain = await resolveProfileChain(\n opts.profileId,\n cache,\n profileMap,\n opts.cwd,\n new Set<string>()\n );\n\n if (chain.length === 0) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${opts.profileId}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n {\n profileId: opts.profileId,\n available: Array.from(profileMap.keys()),\n }\n );\n }\n\n const bundleProfile = mergeProfileChain(chain);\n\n const productsByScope = buildScopeProductMap(bundleProfile, chain);\n bundleProfile.productsByScope = productsByScope;\n\n return bundleProfile;\n}\n\nasync function resolveProfileChain(\n reference: string,\n cache: Map<string, ProfileLayer>,\n localProfiles: Map<string, ProfileV2>,\n cwd: string,\n seen: Set<string>\n): Promise<ProfileLayer[]> {\n const key = reference;\n if (seen.has(key)) {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Circular profile extends detected at \"${reference}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference, chain: Array.from(seen) }\n );\n }\n seen.add(key);\n\n let layer = cache.get(reference);\n\n if (!layer) {\n if (localProfiles.has(reference)) {\n layer = {\n profile: clone(localProfiles.get(reference)!),\n source: 'workspace',\n };\n } else if (isPackageReference(reference)) {\n layer = await loadPackageProfile(reference, cwd);\n } else {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n `Profile \"${reference}\" not found`,\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED,\n { reference, available: Array.from(localProfiles.keys()) }\n );\n }\n cache.set(reference, layer);\n }\n\n const result: ProfileLayer[] = [];\n if (layer.profile.extends) {\n const parentChain = await resolveProfileChain(\n layer.profile.extends,\n cache,\n localProfiles,\n cwd,\n seen\n );\n result.push(...parentChain);\n }\n\n result.push(layer);\n seen.delete(key);\n return result;\n}\n\nfunction mergeProfileChain(chain: ProfileLayer[]): BundleProfile {\n const mergedProducts: Record<string, Record<string, unknown>> = {};\n let mergedMeta: Record<string, unknown> | undefined;\n let mergedLabel: string | undefined;\n let mergedDescription: string | undefined;\n let mergedVersion: string | undefined;\n let scopes: ScopeV2[] = [];\n let scopesDefined = false;\n\n for (const layer of chain) {\n const profile = layer.profile;\n mergedLabel = profile.label ?? mergedLabel;\n mergedDescription = profile.description ?? mergedDescription;\n mergedVersion = profile.meta?.version ?? mergedVersion;\n mergedMeta = mergeMeta(mergedMeta, profile.meta);\n\n if (profile.products) {\n for (const [productKey, overrides] of Object.entries(profile.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const target = (mergedProducts[productKey] ??= {});\n Object.assign(target, clone(overrides));\n }\n }\n\n if (profile.scopes && profile.scopes.length > 0) {\n scopes = clone(profile.scopes);\n scopesDefined = true;\n } else if (!scopesDefined && profile.scopes) {\n scopes = clone(profile.scopes);\n }\n }\n\n const finalLayer = chain[chain.length - 1];\n if (!finalLayer) {\n throw new KbError(\n 'ERR_PROFILE_NOT_DEFINED',\n 'Profile chain is empty',\n ERROR_HINTS.ERR_PROFILE_NOT_DEFINED\n );\n }\n \n const finalId = finalLayer.profile.id;\n const finalSource = finalLayer.source;\n \n const bundleProfile: BundleProfile = {\n id: finalId,\n key: finalId,\n label: mergedLabel,\n name: mergedLabel ?? finalId,\n version: mergedVersion,\n source: finalSource as BundleProfileSource,\n scopes: scopes.map((scope) => ({\n id: scope.id,\n label: scope.label,\n description: scope.description,\n include: scope.include,\n exclude: scope.exclude,\n isDefault: !!scope.default,\n products: scope.products ? clone(scope.products) : undefined,\n })),\n products: Object.keys(mergedProducts).length ? mergedProducts : undefined,\n trace: buildTrace(chain),\n meta: mergedMeta,\n productsByScope: {},\n };\n\n return bundleProfile;\n}\n\nfunction buildScopeProductMap(\n bundleProfile: BundleProfile,\n chain: ProfileLayer[]\n): Record<string, Record<string, Record<string, unknown>>> {\n const map: Record<string, Record<string, Record<string, unknown>>> = {};\n\n for (const scope of bundleProfile.scopes) {\n map[scope.id] = {};\n for (const layer of chain) {\n const matchingScope = layer.profile.scopes?.find((s) => s.id === scope.id);\n if (!matchingScope?.products) {\n continue;\n }\n for (const [productKey, overrides] of Object.entries(matchingScope.products)) {\n if (!matchedProductOverrides(overrides)) {\n continue;\n }\n const scopeMap = map[scope.id];\n if (!scopeMap) {continue;}\n \n const target = scopeMap[productKey];\n if (!target) {\n scopeMap[productKey] = clone(overrides);\n } else {\n Object.assign(target, clone(overrides));\n }\n }\n }\n }\n\n return map;\n}\n\nfunction matchedProductOverrides(\n overrides: unknown\n): overrides is Record<string, unknown> {\n return overrides !== null && typeof overrides === 'object';\n}\n\nfunction buildTrace(chain: ProfileLayer[]): ProfileTrace | undefined {\n if (chain.length <= 1) {\n return undefined;\n }\n\n const extendsList = chain\n .slice(0, -1)\n .map((layer) => {\n // For npm packages, source is already in format \"npm:package#profile\"\n if (typeof layer.source === 'string' && layer.source.startsWith('npm:')) {\n return layer.source;\n }\n // For workspace profiles, use source:profileId format\n return `${layer.source}:${layer.profile.id}`;\n });\n\n return {\n extends: extendsList,\n };\n}\n\nfunction mergeMeta(\n existing: Record<string, unknown> | undefined,\n next?: Record<string, unknown>\n): Record<string, unknown> | undefined {\n if (!next) {\n return existing ? structuredClone(existing) : undefined;\n }\n if (!existing) {\n return structuredClone(next);\n }\n return { ...existing, ...clone(next) };\n}\n\nfunction isPackageReference(ref: string): boolean {\n return ref.includes('/') || ref.startsWith('@');\n}\n\ninterface PackageProfileRef {\n packageName: string;\n profileId: string;\n}\n\nfunction parsePackageReference(ref: string): PackageProfileRef {\n const [pkg, profileId] = ref.split('#');\n return {\n packageName: pkg || '',\n profileId: profileId || 'default',\n };\n}\n\nasync function loadPackageProfile(\n ref: string,\n cwd: string\n): Promise<ProfileLayer> {\n const { packageName, profileId } = parsePackageReference(ref);\n\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromHere.resolve(`${packageName}/package.json`, {\n paths: [cwd],\n });\n } catch {\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Cannot resolve package \"${packageName}\" for profile extends`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n }\n\n const pkgDir = path.dirname(pkgJsonPath);\n const candidateConfigs = [\n 'kb.config.json',\n 'kb.config.yaml',\n 'kb.config.yml',\n path.join('config', 'kb.config.json'),\n path.join('config', 'kb.config.yaml'),\n path.join('config', 'kb.config.yml'),\n ];\n\n for (const candidate of candidateConfigs) {\n const fullPath = path.join(pkgDir, candidate);\n try {\n await fsp.access(fullPath);\n } catch {\n continue;\n }\n\n const config = await readConfigFile(fullPath);\n const profiles = (config.data as { profiles?: unknown })?.profiles;\n const parsed = ProfilesV2Schema.safeParse(profiles);\n if (!parsed.success) {\n continue;\n }\n const target = parsed.data.find((p) => p.id === profileId);\n if (!target) {\n continue;\n }\n return {\n profile: clone(target),\n source: `npm:${packageName}#${profileId}`,\n sourcePath: fullPath,\n };\n }\n\n throw new KbError(\n 'ERR_PROFILE_EXTENDS_FAILED',\n `Profile \"${profileId}\" not found in package \"${packageName}\"`,\n ERROR_HINTS.ERR_PROFILE_EXTENDS_FAILED,\n { reference: ref }\n );\n}\n\n","/**\n * @module @kb-labs/core/config/api/init-workspace\n * Initialize workspace configuration with idempotent operations\n */\n\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { KbError, ERROR_HINTS } from '../errors/kb-error';\nimport { findGitRoot } from './read-config';\nimport { writeFileAtomic, ensureWithinWorkspace } from '../utils/fs-atomic';\nimport { toFsProduct } from '../utils/product-normalize';\nimport type { InitWorkspaceOptions, InitResult, InitAction } from '../types/init';\n\n/**\n * Generate diff preview (first ~20 lines) for conflicts\n */\nfunction generateDiffPreview(oldContent: string, newContent: string): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n const maxLines = 20;\n const diff: string[] = [];\n \n for (let i = 0; i < Math.min(maxLines, Math.max(oldLines.length, newLines.length)); i++) {\n const oldLine = oldLines[i] || '';\n const newLine = newLines[i] || '';\n \n if (oldLine !== newLine) {\n if (oldLine) {diff.push(`- ${oldLine}`);}\n if (newLine) {diff.push(`+ ${newLine}`);}\n }\n }\n \n if (oldLines.length > maxLines || newLines.length > maxLines) {\n diff.push('... truncated');\n }\n \n return diff.slice(0, 20).join('\\n');\n}\n\n/**\n * Find workspace config file, walking up to git root\n * Prioritizes .kb/ location over root\n */\nasync function findWorkspaceConfig(\n cwd: string\n): Promise<{ path: string; format: 'yaml' | 'json' } | null> {\n const filenames = [\n '.kb/kb.config.yaml',\n '.kb/kb.config.yml',\n '.kb/kb.config.json',\n ];\n const gitRoot = await findGitRoot(cwd);\n const stopDir = gitRoot || path.parse(cwd).root;\n \n let dir = path.resolve(cwd);\n \n while (true) {\n for (const filename of filenames) {\n const candidate = path.join(dir, filename);\n try {\n await fs.access(candidate);\n const format = filename.endsWith('.json') ? 'json' : 'yaml';\n return { path: candidate, format };\n } catch {\n // Continue to next filename\n }\n }\n \n // Stop at git root or filesystem root\n if (dir === stopDir || dir === path.dirname(dir)) {\n break;\n }\n dir = path.dirname(dir);\n }\n \n return null;\n}\n\n/**\n * Initialize or update workspace configuration\n */\nexport async function initWorkspaceConfig(\n opts: InitWorkspaceOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n if (opts.profiles && Object.keys(opts.profiles).length > 0) {\n result.warnings.push(\n 'profiles option is deprecated. Define profiles[] inside kb.config.json (Profiles v2).'\n );\n }\n \n // Find existing config\n const existing = await findWorkspaceConfig(cwd);\n const format = existing?.format || opts.format || 'yaml';\n const configFileName = format === 'json' ? 'kb.config.json' : 'kb.config.yaml';\n // Create .kb directory if needed for new configs\n const configPath = existing?.path || path.join(cwd, '.kb', configFileName);\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(configPath, cwd);\n \n // Build new config structure\n const newConfigProducts: Record<string, unknown> = {};\n const newConfig: Record<string, unknown> = {\n schemaVersion: '1.0',\n products: newConfigProducts,\n };\n\n // Add product sections\n if (opts.products && opts.products.length > 0) {\n for (const product of opts.products) {\n const fsProduct = toFsProduct(product);\n newConfigProducts[product] = {};\n }\n }\n \n // Add preset if specified\n if (opts.presetRef !== undefined) {\n newConfig.$extends = opts.presetRef;\n }\n \n // Check if config already exists\n if (existing) {\n try {\n const existingContent = await fs.readFile(existing.path, 'utf-8');\n const existingData = format === 'json' \n ? JSON.parse(existingContent)\n : YAML.parse(existingContent);\n \n // Merge with existing config (only add missing keys)\n let modified = false;\n \n // Ensure schemaVersion\n if (!existingData.schemaVersion) {\n existingData.schemaVersion = '1.0';\n modified = true;\n }\n \n // Merge products\n if (opts.products) {\n if (!existingData.products) {\n existingData.products = {};\n modified = true;\n }\n for (const product of opts.products) {\n if (!existingData.products[product]) {\n existingData.products[product] = {};\n modified = true;\n }\n }\n }\n \n // Merge preset\n if (opts.presetRef !== undefined && existingData.$extends !== opts.presetRef) {\n existingData.$extends = opts.presetRef;\n modified = true;\n }\n \n if (!modified) {\n // No changes needed\n result.actions.push({ kind: 'skip', path: configPath });\n result.skipped.push(configPath);\n return result;\n }\n \n // Serialize new content\n const newContent = format === 'json'\n ? JSON.stringify(existingData, null, 2) + '\\n'\n : YAML.stringify(existingData);\n \n // Check for conflicts\n if (!opts.force && existingContent !== newContent) {\n const action: InitAction = {\n kind: 'conflict',\n path: configPath,\n previewDiff: generateDiffPreview(existingContent, newContent),\n };\n result.actions.push(action);\n result.warnings.push(`Config file has changes, use --force to overwrite: ${configPath}`);\n return result;\n }\n \n // Write updated config\n if (!opts.dryRun) {\n await writeFileAtomic(configPath, newContent);\n }\n \n result.actions.push({ kind: 'update', path: configPath });\n result.updated.push(configPath);\n } catch (error) {\n throw new KbError(\n 'ERR_CONFIG_INVALID',\n `Failed to read or parse existing config: ${existing.path}`,\n ERROR_HINTS.ERR_CONFIG_INVALID,\n { error: error instanceof Error ? error.message : String(error) }\n );\n }\n } else {\n // Create new config\n const content = format === 'json'\n ? JSON.stringify(newConfig, null, 2) + '\\n'\n : YAML.stringify(newConfig);\n \n if (!opts.dryRun) {\n await writeFileAtomic(configPath, content);\n }\n \n result.actions.push({ kind: 'write', path: configPath });\n result.created.push(configPath);\n }\n \n return result;\n}\n\n","/**\n * @module @kb-labs/core/config/api/upsert-lockfile\n * Upsert lockfile operations\n */\n\nimport path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport { readLockfile, writeLockfile, type LockfileData } from '../lockfile/lockfile';\nimport { ensureWithinWorkspace } from '../utils/fs-atomic';\nimport type { UpsertLockfileOptions, InitResult } from '../types/init';\n\n/**\n * Upsert lockfile with new references\n */\nexport async function upsertLockfile(\n opts: UpsertLockfileOptions\n): Promise<InitResult> {\n const cwd = path.resolve(opts.cwd);\n const lockfilePath = path.join(cwd, '.kb', 'lock.json');\n const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');\n \n const result: InitResult = {\n actions: [],\n created: [],\n updated: [],\n skipped: [],\n warnings: [],\n };\n \n // Ensure we're writing within workspace\n ensureWithinWorkspace(lockfilePath, cwd);\n \n // Check for deprecated lockfile location\n try {\n await fs.access(oldLockfilePath);\n result.warnings.push(\n 'Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json'\n );\n } catch {\n // No old lockfile, that's fine\n }\n \n // Read existing lockfile\n const existing = await readLockfile(cwd);\n \n // Build lockfile data\n const lockfileData: LockfileData = {\n $schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',\n schemaVersion: '1.0',\n orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,\n profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,\n policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,\n hashes: existing?.hashes || {},\n generatedAt: new Date().toISOString(),\n };\n \n if (!existing) {\n // Creating new lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'write', path: lockfilePath });\n result.created.push(lockfilePath);\n } else {\n // Updating existing lockfile\n if (!opts.dryRun) {\n await writeLockfile(cwd, lockfileData);\n }\n result.actions.push({ kind: 'update', path: lockfilePath });\n result.updated.push(lockfilePath);\n }\n \n return result;\n}\n\n","import Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\n\nexport type ValidationResult = { ok: boolean; errors: import('ajv').ErrorObject[] | null };\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\naddFormats(ajv);\n\nconst schemaMap: Record<string, Record<string, unknown>> = {};\n\n/**\n * Temporary schema registry hook – upcoming implementation will register schemas here.\n */\nexport function registerProductSchema(product: string, schema: Record<string, unknown>): void {\n schemaMap[product] = schema;\n}\n\nexport function validateProductConfig(product: string, config: unknown): ValidationResult {\n const schema = schemaMap[product];\n if (!schema) {return { ok: true, errors: null };}\n\n const validate = ajv.compile(schema);\n const ok = validate(config);\n return { ok: !!ok, errors: validate.errors || null };\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/core-config",
3
3
  "description": "Core configuration system for KB Labs products, including schema validation, resolution, and merging",
4
- "version": "2.88.0",
4
+ "version": "2.93.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -34,7 +34,7 @@
34
34
  "tsup": "^8.5.0",
35
35
  "typescript": "^5.6.3",
36
36
  "vitest": "^3.2.4",
37
- "@kb-labs/devkit": "2.88.0"
37
+ "@kb-labs/devkit": "2.93.0"
38
38
  },
39
39
  "engines": {
40
40
  "node": ">=20.0.0",