{"version":3,"sources":["../../../goldenmatch-wasm-runtime/src/index.ts","../../src/core/wasm/loader.ts","../../src/core/models.ts","../../src/core/columnContext.ts","../../src/core/engine/registry.ts","../../src/core/wasm/backend.ts","../../src/core/wasm/plannerJson.ts","../../src/core/engine/resolver.ts","../../src/core/engine/router.ts","../../src/core/engine/runner.ts","../../src/core/engine/reporter.ts","../../src/core/decisions.ts","../../src/core/adapters/load.ts","../../src/core/repair.ts","../../src/core/repairHost.ts","../../src/core/adapters/check.ts","../../src/core/adapters/flow.ts","../../src/core/adapters/match.ts","../../src/core/adapters/infer.ts","../../src/core/adapters/index.ts","../../src/core/autoconfigPlanner.ts","../../src/core/errors.ts","../../src/core/autoconfigGlue.ts","../../src/core/pipeline.ts","../../src/core/wasm/index.ts"],"names":["resolveWasmBytes","lookup","stage","severityLabel","TabularData","scanData","TransformEngine","makeConfig","dedupe","makeMatchkeyConfig","makeMatchkeyField","makeBlockingConfig","UNMAPPED_TYPE","SCHEMA_VERSION","detectDomainDetailed","map","DomainPackTarget","loadDomain","instantiateBackend"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,SAAS,iBAAiB,GAAA,EAAyB;AACxD,EAAA,MAAM,CAAA,GAAI,UAAA;AACV,EAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AAChC,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACtB,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACrC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC9D,IAAA,OAAO,GAAA;AACT,EAAA;AACA,EAAA,IAAI,OAAO,CAAA,CAAE,MAAA,KAAW,WAAA,EAAa;AACnC,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA;AACvC,IAAA,OAAO,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,GAAA,CAAI,UAAA,EAAY,IAAI,UAAU,CAAA;AAClE,EAAA;AACA,EAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAC3E;AAeA,eAAsB,gBAAA,CACpB,MACA,WAAA,EACqB;AACrB,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAW;AAChC,IAAA,IAAI,KAAK,SAAA,CAAU,UAAA,KAAe,GAAG,MAAM,IAAI,MAAM,iBAAiB,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,SAAA;AACd,EAAA;AACA,EAAA,IAAI,KAAK,UAAA,KAAe,MAAA,IAAa,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,UAAU,CAAA;AAC9C,IAAA,IAAI,MAAM,UAAA,KAAe,CAAA,EAAG,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAC9D,IAAA,OAAO,KAAA;AACT,EAAA;AACA,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,IAAW,WAAA;AAC5B,EAAA,MAAM,SACJ,OAAO,OAAA,KAAY,WAAA,IACnB,OAAA,CAAQ,UAAU,IAAA,KAAS,MAAA,KAC1B,GAAA,YAAe,GAAA,GACZ,IAAI,QAAA,KAAa,OAAA,GACjB,OAAO,GAAG,CAAA,CAAE,WAAW,OAAO,CAAA,CAAA;AAEpC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAA4B,CAAA;AACpD,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,QAAA,CAAS,GAAU,CAAA;AACxC,IAAA,OAAO,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,GAAA,CAAI,UAAA,EAAY,IAAI,UAAU,CAAA;AAClE,EAAA;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,GAAU,CAAA;AACnC,EAAA,IAAI,CAAC,KAAK,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AACjE,EAAA,OAAO,IAAI,UAAA,CAAW,MAAM,IAAA,CAAK,aAAa,CAAA;AAChD;AAQO,SAAS,qBAAA,GAA+C;AAC7D,EAAA,IAAI,OAAA,GAAoB,IAAA;AACxB,EAAA,OAAO;AACL,IAAA,GAAA,EAAK,MAAM,OAAA;AACX,IAAA,GAAA,EAAK,CAAC,CAAA,KAAM;AACV,MAAA,OAAA,GAAU,CAAA;AACZ,IAAA;AAAA,GAAA;AAEJ;AAiBA,eAAsB,iBAAA,CACpB,IAAA,EACA,WAAA,EACA,QAAA,EACA,WAAA,EACkB;AAClB,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,IAAA,EAAM,WAAW,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,KAAK,CAAA;AACvC,IAAA,QAAA,CAAS,OAAO,CAAA;AAChB,IAAA,OAAO,IAAA;AACT,EAAA,CAAA,CAAA,OAAS,GAAA,EAAK;AACZ,IAAA,IAAI,IAAA,CAAK,SAAS,MAAM,GAAA;AAGxB,IAAA,OAAA,CAAQ,KAAA,CAAM,2DAA2D,GAAG,CAAA;AAC5E,IAAA,OAAO,KAAA;AACT,EAAA;AACF;;;;;;;AC7IA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,gBAAA,EAAA,MAAAA;AAAA,CAAA,CAAA;AAeO,SAASA,kBAAiB,IAAA,EAAwC;AACvE,EAAA,OAAO,gBAAA;AAAA,IACL,IAAA;AAAA,IACA,IAAI,GAAA,CAAI,qCAAA,EAAuC,2PAAe;AAAA,GAChE;AACF;AAEA,eAAsB,mBAAmB,KAAA,EAA6C;AACpF,EAAA,MAAM,IAAA,GAAQ,MAAM,OAAO,gCAA0C,CAAA;AAYrE,EAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,cAAA,EAAgB,OAAO,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAC,CAAA,KAAM,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,IACvC,iBAAA,EAAmB,CAAC,CAAA,KAAM,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAAA,IACpD,mBAAA,EAAqB,CAAC,CAAA,KAAM,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAAA,IACxD,cAAA,EAAgB,CAAC,CAAA,KAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AAAA,IAC9C,eAAA,EAAiB,CAAC,CAAA,KAAM,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA,IACjD,gBAAA,EAAkB,CAAC,CAAA,KAAM,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAAA,IAClD,mBAAA,EAAqB,CAAC,CAAA,KAAM,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAAA,IACzD,UAAA,EAAY,CAAC,CAAA,KAAM,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,IACtC,mBAAA,EAAqB,CAAC,CAAA,KAAM,IAAA,CAAK,uBAAuB,CAAC;AAAA,GAC3D;AACF;AAhDA,IAAA,WAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAOA,IAAA,SAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACQO,IAAM,WAAA,GAAc;AAAA,EACzB,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAGO,IAAM,UAAA,GAAa;AAAA,EACxB,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAmBO,SAAS,aAAa,KAAA,EAAqC;AAChE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA,EAAO,IAAA,IAAQ,EAAC;AAAA,IACtB,KAAA,EAAO,OAAO,KAAA,IAAS,KAAA;AAAA,IACvB,MAAA,EAAQ,KAAA,EAAO,MAAA,IAAU,EAAC;AAAA,IAC1B,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,GAC3B;AACF;AA2BO,SAAS,gBAAgB,KAAA,EAA2C;AACzE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,OAAO,EAAA,IAAM,IAAA;AAAA,IACjB,SAAA,EAAW,KAAA,EAAO,SAAA,IAAa,EAAC;AAAA,IAChC,QAAA,EAAU,KAAA,EAAO,QAAA,IAAY,EAAC;AAAA,IAC9B,MAAA,EAAQ,KAAA,EAAO,MAAA,IAAU,EAAC;AAAA,IAC1B,SAAA,EAAW,KAAA,EAAO,SAAA,IAAa,EAAC;AAAA,IAChC,WAAA,EAAa,KAAA,EAAO,WAAA,IAAe;AAAC,GACtC;AACF;AAkCO,SAAS,cAAc,KAAA,EAAiE;AAC7F,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,IAAI,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,EAAC,EAAE;AAAA,EAClE;AACA,EAAA,OAAO;AAAA,IACL,GAAI,MAAM,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,GAAI,EAAC;AAAA,IACvD,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,EAAC;AAAA,IACvB,GAAI,MAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAO,GAAI,EAAC;AAAA,IAC7D,OAAA,EAAS,MAAM,OAAA,IAAW,UAAA;AAAA,IAC1B,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU;AAAC,GAC3B;AACF;AAWO,SAAS,mBACd,KAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,GAAI,MAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAO,GAAI,EAAC;AAAA,IAC7D,GAAI,MAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAO,GAAI,EAAC;AAAA,IAC7D,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,GACjC;AACF;AA2BO,SAAS,KAAA,CACd,MACA,EAAA,EACO;AACP,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,SAAS,IAAA,EAAyB;AAAA,IAElC,CAAA;AAAA,IACA,MAAM,IAAI,GAAA,EAAwC;AAChD,MAAA,OAAO,GAAG,GAAG,CAAA;AAAA,IACf,CAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACZ;AACF;;;ACpLO,IAAM,UAAA,GAAa;AAAA,EACxB,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,GAAA,EAAK,KAAA;AAAA,EACL,UAAA,EAAY,YAAA;AAAA,EACZ,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa;AACf;AAGO,IAAM,eAAA,GAAkB;AAAA,EAC7B,KAAA,EAAO,EAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM;AACR;AAQO,IAAM,cAAA,GAAiB;AAG9B,IAAM,gBAAA,uBAAgD,GAAA,CAAI;AAAA,EACxD,UAAA,CAAW,IAAA;AAAA,EACX,UAAA,CAAW,KAAA;AAAA,EACX,UAAA,CAAW;AACb,CAAC,CAAA;AAGD,IAAM,sBAAA,uBAAsD,GAAA,CAAI;AAAA,EAC9D,UAAA,CAAW,IAAA;AAAA,EACX,UAAA,CAAW,OAAA;AAAA,EACX,UAAA,CAAW;AACb,CAAC,CAAA;AAmBM,SAAS,kBACd,KAAA,EACe;AACf,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB,UAAA,CAAW,MAAA;AAAA,IAC/C,QAAA,EAAU,MAAM,QAAA,IAAY,CAAA;AAAA,IAC5B,WAAA,EAAa,MAAM,WAAA,IAAe,CAAA;AAAA,IAClC,YAAA,EAAc,MAAM,YAAA,IAAgB,KAAA;AAAA,IACpC,iBAAA,EAAmB,KAAA,CAAM,iBAAA,IAAqB,EAAC;AAAA,IAC/C,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,IAC7B,UAAA,EAAY,MAAM,UAAA,IAAc,GAAA;AAAA,IAChC,eAAA,EAAiB,KAAA,CAAM,eAAA,IAAmB,eAAA,CAAgB;AAAA,GAC5D;AACA,EAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACb,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,EAAE,GAAA,CAAI,QAAA,IAAY,CAAA,IAAO,GAAA,CAAI,YAAY,CAAA,CAAA,EAAM;AACjD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,GAAA,CAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,GAAA,CAAI,cAAc,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,EAAE,GAAA,CAAI,UAAA,IAAc,CAAA,IAAO,GAAA,CAAI,cAAc,CAAA,CAAA,EAAM;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,GAAA;AACT;AAMA,IAAM,aAAA,GACJ,oFAAA;AACF,IAAM,cAAA,GAAiB,8BAAA;AACvB,IAAM,cAAA,GAAiB,8BAAA;AACvB,IAAM,YAAA,GAAe,kCAAA;AACrB,IAAM,gBAAA,GAAmB,wCAAA;AACzB,IAAM,YAAA,GAAe,4DAAA;AACrB,IAAM,aAAA,GAAgB,0DAAA;AACtB,IAAM,WAAA,GAAc,uCAAA;AAGb,SAAS,eAAe,OAAA,EAAoC;AACjE,EAAA,IAAI,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,IAAA;AACnD,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,KAAA;AACpD,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,GAAA;AAClD,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,GAAA;AAClD,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,OAAA;AACtD,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,KAAA;AACpD,EAAA,IAAI,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,IAAA;AACnD,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA,SAAU,UAAA,CAAW,UAAA;AACjD,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,eAAe,OAAA,EAA6B;AAC1D,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,WAAA,EAAY,CAAE,IAAA,EAAK;AACrC,EAAA,IAAI,CAAA,CAAE,SAAS,KAAK,CAAA,IAAK,EAAE,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,UAAA,CAAW,OAAA;AAChE,EAAA,IAAI,CAAA,CAAE,SAAS,MAAM,CAAA,IAAK,EAAE,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA,CAAW,IAAA;AAChE,EAAA,IAAI,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,SAAU,UAAA,CAAW,MAAA;AAC1C,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB;AAOA,SAAS,wBAAwB,QAAA,EAAiC;AAChE,EAAA,MAAM,iBAAiB,QAAA,CAAS,MAAA;AAAA,IAC9B,CAAC,MAAM,CAAA,CAAE,YAAA,KAAiB,WAAW,OAAA,IAAW,CAAA,CAAE,iBAAiB,UAAA,CAAW;AAAA,GAChF;AACA,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACnF,EAAA,MAAM,IAAI,aAAA,CAAc,MAAA;AAExB,EAAA,MAAM,KAAK,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AAC1C,EAAA,MAAM,KAAK,aAAA,CAAc,IAAA,CAAK,MAAO,CAAA,GAAI,CAAA,GAAK,CAAC,CAAC,CAAA;AAEhD,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,IAAI,YAAA,KAAiB,UAAA,CAAW,WAAW,GAAA,CAAI,YAAA,KAAiB,WAAW,IAAA,EAAM;AACnF,MAAA,GAAA,CAAI,kBAAkB,eAAA,CAAgB,IAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,eAAe,EAAA,EAAI;AACzB,MAAA,GAAA,CAAI,kBAAkB,eAAA,CAAgB,GAAA;AAAA,IACxC,CAAA,MAAA,IAAW,GAAA,CAAI,WAAA,IAAe,EAAA,EAAI;AAChC,MAAA,GAAA,CAAI,kBAAkB,eAAA,CAAgB,IAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,kBAAkB,eAAA,CAAgB,GAAA;AAAA,IACxC;AAAA,EACF;AACF;AAGA,SAAS,uBAAuB,QAAA,EAAiC;AAC/D,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,GAAA,CAAI,YAAY,CAAA,EAAG;AAChD,MAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,YAAY,CAAA;AAC3D,IAAA,MAAM,OAAO,GAAA,CAAI,eAAA;AAEjB,IAAA,IAAI,aAAA,IAAiB,IAAA,KAAS,eAAA,CAAgB,GAAA,EAAK;AACjD,MAAA,GAAA,CAAI,YAAA,GAAe,IAAA;AACnB,MAAA,GAAA,CAAI,aAAa,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,GAAa,MAAM,CAAG,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,aAAA,IAAiB,IAAA,KAAS,eAAA,CAAgB,GAAA,EAAK;AACxD,MAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AACnB,MAAA,GAAA,CAAI,aAAa,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,GAAa,KAAK,cAAc,CAAA;AAAA,IAChE,CAAA,MAAA,IAAW,aAAA,IAAiB,IAAA,KAAS,eAAA,CAAgB,IAAA,EAAM;AACzD,MAAA,GAAA,CAAI,YAAA,GAAe,IAAA;AACnB,MAAA,GAAA,CAAI,aAAa,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,GAAa,MAAM,CAAG,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,IAAA,KAAS,gBAAgB,GAAA,EAAK;AACzD,MAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,UAAA,CAAW,MAAA,EAAQ;AAC1C,QAAA,GAAA,CAAI,YAAA,GAAe,IAAA;AACnB,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AAAA,MACnB;AAAA,IACF,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,IAAA,KAAS,gBAAgB,GAAA,EAAK;AACzD,MAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AAAA,IACrB,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,IAAA,KAAS,gBAAgB,IAAA,EAAM;AAC1D,MAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AAAA,IACrB;AAEA,IAAA,IAAI,GAAA,CAAI,QAAA,GAAW,GAAA,IAAO,GAAA,CAAI,YAAA,EAAc;AAC1C,MAAA,GAAA,CAAI,aAAa,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,GAAa,KAAK,cAAc,CAAA;AAAA,IAChE;AAAA,EACF;AACF;AA2BO,SAAS,sBAAA,CACd,UACA,cAAA,EACiB;AACjB,EAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AAClD,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA2B;AAChD,EAAA,KAAA,MAAW,MAAM,cAAA,EAAgB;AAC/B,IAAA,IAAI,YAAA,GAAe,cAAA,CAAe,EAAA,CAAG,IAAI,CAAA;AACzC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,YAAA,GAAe,cAAA,CAAe,EAAA,CAAG,YAAA,IAAgB,QAAQ,CAAA;AAAA,IAC3D;AACA,IAAA,MAAM,MAAM,iBAAA,CAAkB;AAAA,MAC5B,MAAM,EAAA,CAAG,IAAA;AAAA,MACT,YAAA,EAAc,YAAA;AAAA,MACd,QAAA,EAAU,GAAG,OAAA,IAAW,CAAA;AAAA,MACxB,WAAA,EAAa,GAAG,WAAA,IAAe,CAAA;AAAA,MAC/B,YAAA,EAAc,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AAAA,MAC/C,UAAA,EAAY,YAAA,KAAiB,UAAA,CAAW,MAAA,GAAS,GAAA,GAAM;AAAA,KACxD,CAAA;AACD,IAAA,QAAA,CAAS,GAAA,CAAI,EAAA,CAAG,IAAA,EAAM,GAAG,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,QAAA,CAAS,QAAQ,CAAA;AACzC,EAAA,uBAAA,CAAwB,WAAW,CAAA;AACnC,EAAA,sBAAA,CAAuB,WAAW,CAAA;AAElC,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,UAAU,CAAA,CAAE,MAAA;AAClB,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG;AACxC,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAChC,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,EAAA;AACzB,IAAA,MAAM,OAAA,GAAU,OAAO,CAAA,CAAE,OAAA,IAAW,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACnD,IAAA,GAAA,CAAI,SAAS,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,WAAA;AACT;AAUO,SAAS,sBAAA,CACd,UACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,MAAMC,OAAAA,GAAS,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAEvD,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AACvB,IAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,IAAA,MAAM,QAAA,GAAW,OAAO,YAAA,IAAgB,CAAA;AACxC,IAAA,IAAI,CAAC,OAAA,IAAW,CAACA,OAAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AACtC,IAAA,MAAM,GAAA,GAAMA,OAAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AAC9B,IAAA,IAAI,QAAA,GAAW,KAAK,SAAA,EAAW;AAC7B,MAAA,GAAA,CAAI,iBAAA,CAAkB,KAAK,SAAS,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,aAAa,SAAA,CAAU,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACzD,MAAA,GAAA,CAAI,eAAe,UAAA,CAAW,IAAA;AAC9B,MAAA,GAAA,CAAI,YAAA,GAAe,KAAA;AACnB,MAAA,GAAA,CAAI,UAAA,GAAa,IAAA;AAAA,IACnB;AAAA,EACF;AACF;AAMO,SAAS,eAAA,CAAgB,MAAsB,GAAA,EAAqB;AACzE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAa;AAC9B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,CAAA,GAAI,IAAI,GAAG,CAAA;AACjB,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,IAAa,MAAM,EAAA,EAAI;AAC/C,IAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACZ;AACA,EAAA,OAAO,IAAA,CAAK,IAAA;AACd;AAEO,SAAS,UAAA,CAAW,MAAsB,GAAA,EAAqB;AACpE,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAC9B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,CAAA,GAAI,IAAI,GAAG,CAAA;AACjB,IAAA,IAAI,MAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAI,KAAA,IAAS,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,QAAQ,IAAA,CAAK,MAAA;AACtB;;;AChUO,IAAM,gBAAN,MAAoB;AAAA,EACR,MAAA,uBAAa,GAAA,EAAmB;AAAA;AAAA,EAGjD,SAASC,MAAAA,EAAoB;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,MAAMA,MAAK,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,IAAI,IAAA,EAAqB;AACvB,IAAA,MAAMA,MAAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,IAAIA,WAAU,MAAA,EAAW;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACzD;AACA,IAAA,OAAOA,MAAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,IAAA,EAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAA,GAAqC;AACnC,IAAA,MAAM,MAAiC,EAAC;AACxC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,CAAC,CAAA,IAAK,KAAK,MAAA,EAAQ;AACnC,MAAA,GAAA,CAAI,IAAI,IAAI,CAAA,CAAE,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAOO,SAAS,eAAA,GAAiC;AAC/C,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AAGnC,EAAA,OAAO,QAAA;AACT;;;AC9BA,SAAA,EAAA;AAEA,IAAM,YAAY,qBAAA,EAAuC;AAElD,SAAS,mBAAmB,CAAA,EAAiC;AAClE,EAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AACjB;AAEO,SAAS,kBAAA,GAA6C;AAC3D,EAAA,OAAO,UAAU,GAAA,EAAI;AACvB;;;ACNA,SAAS,aAAa,GAAA,EAAoD;AACxE,EAAA,IAAI,GAAA,CAAI,SAAS,kBAAA,EAAoB;AACnC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,OAAA,EAAU,OAAO,GAAA,CAAI,KAAK,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAA,iCAAA,CAAA;AAAA,MAC9D,EAAE,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAK,GAAG,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA;AAAE,KAC7D;AAAA,EACF;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,oBAAA,EAAsB;AACrC,IAAA,MAAM,IAAI,uBAAuB,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,EAAI,GAAA,CAAI,SAAA,IAA0B,EAAE,CAAA;AAAA,EAC1F;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,OAAA,EAAS;AACxB,IAAA,MAAM,IAAI,UAAA,CAAY,GAAA,CAAI,MAAA,IAAuB,EAAE,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,cAAA,EAAgB;AAC/B,IAAA,MAAM,IAAI,iBAAiB,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAI,GAAA,CAAI,KAAA,IAAsB,EAAE,CAAA;AAAA,EAC7E;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAChC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,OAAO,GAAA,CAAI,GAAG,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,GAAA,CAAI,IAAI,MAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AACpF;AAUO,SAAS,cAAA,CACd,MAAA,EACA,QAAA,EACA,CAAA,EACe;AACf,EAAA,MAAM,GAAA,GAAM,SAAS,OAAA,EAAQ;AAC7B,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,MAAO;AAAA,IACrD,GAAA,EAAK,IAAA;AAAA,IACL,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,UAAU,CAAA,CAAE;AAAA,GACd,CAAE,CAAA;AACF,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,WAAA,CAAY,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAC,CAAA;AAGxE,EAAA,IAAI,SAAS,GAAA,IAAO,GAAA,CAAI,GAAA,EAAK,YAAA,CAAa,IAAI,GAAG,CAAA;AACjD,EAAA,MAAM,QAAA,GAAY,IAAuC,EAAA,CAAG,MAAA;AAC5D,EAAA,MAAM,OAAA,GAA0B,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACnD,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA;AAAA,IACzB,MAAM,aAAA,CAAc;AAAA,MAClB,KAAK,CAAA,CAAE,GAAA;AAAA,MACP,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,OAAA,EAAU,EAAE,QAAA,IAAY,UAAA;AAAA,MACxB,GAAI,EAAE,OAAA,KAAY,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI;AAAC,KACxD,CAAA;AAAA,IACD,MAAA,EAAQ,CAAA,CAAE,MAAA,IAAU;AAAC,GACvB,CAAE,CAAA;AACF,EAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAC3B;AAEO,SAAS,oBAAA,CACd,QAAA,EACA,SAAA,EACA,GAAA,EACA,UACA,CAAA,EACgB;AAChB,EAAA,MAAM,MAAA,GAAqB,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC/C,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,GAAA,EAAK,EAAE,IAAA,CAAK,GAAA;AAAA,IACZ,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,QAAA,EAAU,EAAE,IAAA,CAAK,OAAA;AAAA,IACjB,GAAI,CAAA,CAAE,IAAA,CAAK,MAAA,KAAW,MAAA,GAAY,EAAE,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,MAAA,EAAO,GAAI;AAAC,GAClE,CAAE,CAAA;AACF,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA;AAAA,IACf,CAAA,CAAE,kBAAkB,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,CAAC;AAAA,GACrE;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACxD,EAAA,MAAM,IAAA,GAAuB,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAC9B,IAAA,IAAI,MAAM,OAAO,IAAA;AAEjB,IAAA,OAAO;AAAA,MACL,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,MACzB,MAAM,aAAA,CAAc;AAAA,QAClB,KAAK,CAAA,CAAE,GAAA;AAAA,QACP,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,OAAA,EAAU,EAAE,QAAA,IAAY;AAAA,OACzB,CAAA;AAAA,MACD,MAAA,EAAQ,CAAA,CAAE,MAAA,IAAU;AAAC,KACvB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI,IAAI,WAAA,KAAgB,MAAA,MAAe,SAAA,CAAU,SAAS,IAAI,GAAA,CAAI,WAAA;AAClE,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,sBAAA,CACd,IAAA,EACA,GAAA,EACA,CAAA,EACiB;AACjB,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA;AAAA,IACf,CAAA,CAAE,mBAAA;AAAA,MACA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,GAAA,EAAK,EAAE,SAAA,EAAW,GAAA,CAAI,SAAA,EAAW,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY;AAAA;AACpF,GACF;AACA,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,IAAA;AACzB,EAAA,OAAO,YAAA,CAAa,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAClG;AA0BO,SAAS,kBAAA,CAAmB,OAAgB,CAAA,EAA6B;AAC9E,EAAA,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,eAAA,CAAgB,KAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAC5D;;;AC1JO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EACrC,KAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,IAAI,OAAA,GAA8B;AAChC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EACA,WAAA,CAAY,SAAiB,KAAA,EAA6C;AACxE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AACnB,MAAA,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AAAA,IACxB;AAAA,EACF;AACF;AAEO,IAAM,sBAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,EAChD,WAAA,CAAmB,UAAyB,SAAA,EAAqB;AAC/D,IAAA,KAAA,CAAM,aAAa,QAAQ,CAAA,2BAAA,EAA8B,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAD9D,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAyB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAE1C,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AAAA,EAHmB,QAAA;AAAA,EAAyB,SAAA;AAI9C;AAEO,IAAM,UAAA,GAAN,cAAyB,KAAA,CAAM;AAAA,EACpC,YAAmB,MAAA,EAAkB;AACnC,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAkC,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAD1C,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEjB,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AAAA,EACd;AAAA,EAHmB,MAAA;AAIrB;AAEO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,WAAA,CAAmBA,QAAsB,KAAA,EAAiB;AACxD,IAAA,KAAA,CAAM,UAAUA,MAAK,CAAA,0BAAA,EAA6B,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AADnD,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAAsB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAEvC,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AAAA,EAHmB,KAAA;AAAA,EAAsB,KAAA;AAI3C;AA0BO,SAAS,WAAA,CAAY,QAAwB,QAAA,EAAwC;AAE1F,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AACnC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,GAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,CAAC,GAAG,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,MAChC,UAAU,EAAC;AAAA,MACX,OAAO,EAAC;AAAA,MACR,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,aAAA,CAAc,MAAM,CAAA,EAAG,MAAA,EAAQ,EAAC;AAAE,KAC/E,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,OAAO,MAAA,EAAQ;AACnC,IAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,IAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA;AAAA,MACA,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA,MACpC,QAAA,EAAU,CAAC,GAAG,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA,MACpC,KAAA,EAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CAAA;AAAA,MACrB,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,MAAA;AAAO,KACpE,CAAA;AAAA,EACH;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,MAAM,SAAS,CAAC,OAAA;AAEhB,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAsB,KAAA,CAAM,UAAU,CAAC,EAAA,KAAO,EAAA,CAAG,GAAA,KAAQ,CAAC,CAAA;AAE5E,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,KAAc,KAAA,CAAM,IAAI,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,KAAc,KAAA,CAAM,IAAI,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAK/D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,CAAC,CAAA,CAAG,KAAA,EAAO;AAClC,MAAA,MAAM,CAAA,GAAI,SAAS,IAAI,CAAA;AACvB,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,MAAM,IAAI,gBAAA,CAAiB,KAAA,CAAM,CAAC,CAAA,CAAG,KAAA,EAAO,CAAC,IAAI,CAAC,CAAA;AAC7D,MAAA,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACd;AAAA,EACF;AAGA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,EAAW,CAAA,KAAuB;AACxD,IAAA,IAAI,MAAA,IAAU,CAAA,KAAM,IAAA,EAAM,OAAO,IAAA;AACjC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,IAAI,KAAA,CAAM,CAAC,CAAA,CAAG,QAAA,CAAS,QAAA,CAAS,CAAC,GAAG,OAAO,IAAA;AACvE,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,CAAC,CAAA,CAAG,QAAA,EAAU;AACpC,MAAA,IAAI,cAAA,CAAe,CAAA,EAAG,GAAG,CAAA,EAAG;AAC5B,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,IAAI,KAAA,CAAM,CAAC,CAAA,CAAG,SAAS,QAAA,CAAS,GAAG,CAAA,EAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAClF,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,WAAA;AAAA,UACR,UAAU,KAAA,CAAM,CAAC,CAAA,CAAG,KAAK,eAAe,GAAG,CAAA,iCAAA,CAAA;AAAA,UAC3C,EAAE,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,CAAG,KAAA,EAAO,UAAU,GAAA;AAAI,SAC1C;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,EAAI,CAAC,CAAA;AAAA,MACtB,CAAA,MAAO;AAGL,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAC,CAAA,CAAE,MAAA;AAClD,QAAA,IAAI,WAAW,CAAA,EAAG;AAChB,UAAA,MAAM,IAAI,sBAAA,CAAuB,GAAA,EAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,CAAG,GAAG,CAAC,CAAA;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,CAAC,CAAA;AACjC,EAAA,MAAM,GAAA,GAAkB,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,EAAE,EAAG,MAAM,EAAE,CAAA;AAC1D,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAC,GAAG,CAAC,CAAA,GAAI,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACtC,IAAA,IAAI,MAAM,CAAA,EAAG;AACX,MAAA,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AACd,IAAA,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AAAA,EACd;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC5D,EAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAC1B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,CAAA,GAAI,MAAM,KAAA,EAAM;AACtB,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,EAAI;AACvB,MAAA,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA;AACZ,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,EAAG;AAClB,QAAA,IAAI,EAAA,GAAK,CAAA;AACT,QAAA,OAAO,KAAK,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,EAAE,IAAK,CAAA,EAAG,EAAA,EAAA;AAC5C,QAAA,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,IAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAG,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,EAAG,KAAK,CAAA;AACtE,IAAA,MAAM,IAAI,WAAW,GAAG,CAAA;AAAA,EAC1B;AAGA,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,CAAM,CAAC,CAAA,CAAG,OAAO,CAAA,EAAE;AACvD;AAEO,IAAM,QAAA,GAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAStB,OAAA,CAAQ,QAAwB,QAAA,EAAwC;AACtE,IAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,IAAA,IAAI,CAAA,EAAG,OAAO,cAAA,CAAe,MAAA,EAAQ,UAAU,CAAC,CAAA;AAChD,IAAA,OAAO,WAAA,CAAY,QAAQ,QAAQ,CAAA;AAAA,EACrC;AACF;;;AC5LO,SAAS,SAAA,CACd,QAAA,EACA,SAAA,EACA,GAAA,EACA,QAAA,EACgB;AAChB,EAAA;AACE,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,GAAA,CAAI,SAAA,CAAU,SAAS,CAAA,GAAI,QAAA,CAAS,MAAA;AAAA,IACtC;AAEA,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,GAAA,CAAI,SAAA,CAAU,SAAS,CAAA,GAAI,CAAA,OAAA,EAAU,SAAS,MAAM,CAAA,CAAA;AACpD,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,IAAA,GAAO,SAAA;AACX,IAAA,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA;AACrC,MAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,CAAA,KAAM,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,WAA2B,EAAC;AAClC,MAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,MAAA,EAAQ;AAClC,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAClC,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA;AAAA,UACA,KAAA,EAAO,QAAA;AAAA,UACP,IAAA,EAAM,cAAc,IAAI,CAAA;AAAA,UACxB,QAAQ;AAAC,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAA,GAAO,CAAC,GAAG,QAAA,EAAU,GAAG,IAAI,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,IAAM,MAAA,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpB,KAAA,CACE,QAAA,EACA,SAAA,EACA,GAAA,EACA,QAAA,EACgB;AAChB,IAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,IAAA,IAAI,GAAG,OAAO,oBAAA,CAAqB,UAAU,SAAA,EAAW,GAAA,EAAK,UAAU,CAAC,CAAA;AACxE,IAAA,OAAO,SAAA,CAAU,QAAA,EAAU,SAAA,EAAW,GAAA,EAAK,QAAQ,CAAA;AAAA,EACrD;AACF;;;AC3DO,SAAS,QAAQ,KAAA,EAAyB;AAC/C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,IAAA;AAClD,EAAA,IAAI,UAAU,KAAA,IAAS,KAAA,KAAU,CAAA,IAAK,KAAA,KAAU,IAAI,OAAO,IAAA;AAC3D,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,MAAM,MAAA,KAAW,CAAA;AAClD,EAAA,IAAI,iBAAiB,GAAA,IAAO,KAAA,YAAiB,GAAA,EAAK,OAAO,MAAM,IAAA,KAAS,CAAA;AACxE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU,OAAO,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,KAAW,CAAA;AACpE,EAAA,OAAO,KAAA;AACT;AAEO,IAAM,SAAN,MAAa;AAAA,EAClB,YAA6B,QAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAA0B;AAAA,EAA1B,QAAA;AAAA;AAAA,EAG7B,MAAM,GAAA,CAAI,IAAA,EAAqB,GAAA,EAAwD;AACrF,IAAA,MAAM,UAAuC,EAAC;AAC9C,IAAA,IAAI,SAAA,GAAY,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAE/B,IAAA,OAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AAC3B,MAAA,MAAM,OAAA,GAAU,UAAU,KAAA,EAAM;AAEhC,MAAA,IAAI,OAAA,CAAQ,KAAK,MAAA,EAAQ;AACvB,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,KAAK,MAAM,CAAA;AAClD,QAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,QAAA,MAAM,QAAQ,CAAA,GAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,GAAI,QAAQ,QAAQ,CAAA;AACpE,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,GAAI,EAAE,MAAA,EAAQ,YAAY,OAAA,EAAQ;AACtD,UAAA,GAAA,CAAI,UAAU,OAAA,CAAQ,IAAI,IACxB,CAAA,mBAAA,EAAsB,OAAA,CAAQ,KAAK,MAAM,CAAA,kBAAA,CAAA;AAC3C,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,EAAI;AAC9B,MAAA,IAAI;AAEF,QAAA,GAAA,CAAI,cAAc,OAAA,CAAQ,MAAA;AAE1B,QAAA,MAAM,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AAChC,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,GAAG,CAAA;AAC1C,QAAA,GAAA,CAAI,OAAO,OAAA,CAAQ,IAAI,KAAK,WAAA,CAAY,GAAA,KAAQ,KAAA,IAAS,GAAA;AACzD,QAAA,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,MAAA;AAExB,QAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM;AAC3B,UAAA,SAAA,GAAY,OAAO,KAAA,CAAM,MAAA,CAAO,UAAU,SAAA,EAAW,GAAA,EAAK,KAAK,QAAQ,CAAA;AAAA,QACzE;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,GAAA,CAAI,OAAO,OAAA,CAAQ,IAAI,KAAK,WAAA,CAAY,GAAA,KAAQ,KAAA,IAAS,GAAA;AACzD,QAAA,MAAM,UAAU,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACzD,QAAA,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,EAAE,QAAQ,WAAA,CAAY,MAAA,EAAQ,OAAO,OAAA,EAAQ;AACrE,QAAA,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,WAAW,OAAO,CAAA,CAAA;AAEhD,QAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAA,KAAY,OAAA,EAAS;AACpC,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;ACnEO,IAAM,QAAA,GAAW;AAAA,EACtB,KAAA,CAAM,KAAkB,MAAA,EAAiD;AACvE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAErC,IAAA,MAAM,MAAA,GAAS,OAAA,CACZ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,WAAA,CAAY,MAAA,IAAU,CAAA,CAAE,KAAK,CAAA,CAC5D,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,CAAC,CAAA,KAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAE3C,IAAA,MAAM,UAAU,OAAA,CACb,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,WAAA,CAAY,OAAO,CAAA,CAClD,GAAA,CAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAA;AAEvB,IAAA,MAAM,UAAU,OAAA,CACb,GAAA,CAAI,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,EACvB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,YAAY,OAAO,CAAA;AAE1C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAA,GAAS,UAAA,CAAW,OAAA;AAAA,IACtB,CAAA,MAAA,IAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,WAAA,CAAY,MAAM,CAAA,EAAG;AACzD,MAAA,MAAA,GAAS,UAAA,CAAW,MAAA;AAAA,IACtB,CAAA,MAAA,IAAW,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,WAAA,CAAY,OAAO,CAAA,EAAG;AAC1D,MAAA,MAAA,GAAS,UAAA,CAAW,OAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,UAAA,CAAW,OAAA;AAAA,IACtB;AAEA,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA,EAAQ,OAAO,GAAA,CAAI,QAAA,CAAS,QAAQ,MAAM,QAAA,GAAY,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,GAAe,EAAA;AAAA,MAC1F,SAAA,EAAW,OAAO,GAAA,CAAI,QAAA,CAAS,YAAY,MAAM,QAAA,GAAY,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,GAAe,CAAA;AAAA,MACrG,MAAA;AAAA,MACA,SAAA,EAAW,EAAE,GAAG,GAAA,CAAI,SAAA,EAAU;AAAA,MAC9B,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,EAAE,GAAG,GAAA,CAAI,SAAA,EAAU;AAAA,MAC9B,MAAA,EAAQ,EAAE,GAAG,GAAA,CAAI,MAAA;AAAO,KAC1B;AAAA,EACF;AACF;;;ACxBA,SAAS,WAAW,GAAA,EAA8C;AAChE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA;AACzC,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,IAAA;AAC9D,EAAA,OAAO,QAAA;AACT;AAWO,SAAS,iBAAiB,GAAA,EAAmC;AAClE,EAAA,MAAM,QAAA,GAAW,WAAW,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,cAAc,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,UAAU,CAAA;AAClE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,aAAa,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,8BAA8B,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,aAAa,GAAA,EAAmC;AAC9D,EAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,EAAA,IAAI,CAAA,EAAG,OAAO,sBAAA,CAAuB,eAAA,EAAiB,KAAK,CAAC,CAAA;AAC5D,EAAA,OAAO,iBAAiB,GAAG,CAAA;AAC7B;AAGO,SAAS,cAAc,GAAA,EAAmC;AAC/D,EAAA,MAAM,QAAA,GAAW,WAAW,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,eAAe,CAAA;AAC/D,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,YAAA,CAAa;AAAA,MAClB,IAAA,EAAM,CAAC,oBAAoB,CAAA;AAAA,MAC3B,MAAA,EAAQ,CAAC,yBAAyB,CAAA;AAAA,MAClC,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,UAAU,GAAA,EAAmC;AAC3D,EAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,EAAA,IAAI,CAAA,EAAG,OAAO,sBAAA,CAAuB,YAAA,EAAc,KAAK,CAAC,CAAA;AACzD,EAAA,OAAO,cAAc,GAAG,CAAA;AAC1B;AAGO,SAAS,iBAAiB,GAAA,EAAmC;AAClE,EAAA,MAAM,QAAA,GACJ,OAAO,GAAA,CAAI,QAAA,CAAS,YAAY,MAAM,QAAA,GAAY,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,GAAe,CAAA;AAC5F,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO,YAAA,CAAa;AAAA,MAClB,IAAA,EAAM,CAAC,oBAAoB,CAAA;AAAA,MAC3B,MAAA,EAAQ,QAAQ,QAAQ,CAAA,+BAAA;AAAA,KACzB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,aAAa,GAAA,EAAmC;AAC9D,EAAA,MAAM,IAAI,kBAAA,EAAmB;AAC7B,EAAA,IAAI,CAAA,EAAG,OAAO,sBAAA,CAAuB,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAC7D,EAAA,OAAO,iBAAiB,GAAG,CAAA;AAC7B;;;ACrFO,IAAM,SAAA,GAAmB;AAAA,EAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,CAAC,IAAI,CAAA,EAAG,QAAA,EAAU,EAAC,EAAE;AAAA,EACrD,SAAS,IAAA,EAAyB;AAAA,EAElC,CAAA;AAAA,EACA,MAAM,IAAI,IAAA,EAAyC;AACjD,IAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,EACvC,CAAA;AAAA,EACA,QAAA,EAAU;AACZ;;;ACPA,IAAM,MAAA,uBAAa,GAAA,CAAI,CAAC,QAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAMhE,SAAS,QAAQ,CAAA,EAAgC;AAC/C,EAAA,OAAO,CAAA,KAAM,MAAA,IAAa,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA;AAC7C;AACA,SAAS,QAAQ,CAAA,EAAgC;AAC/C,EAAA,OAAO,CAAA,KAAM,MAAA,IAAa,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA;AAC7C;AACA,SAAS,aAAa,CAAA,EAAgC;AACpD,EAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,OAAA,CAAQ,CAAC,CAAA;AAChC;AAEA,SAAS,QAAA,CAAS,OAAiB,IAAA,EAAuC;AACxE,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,MAAM,IAAI,CAAA;AAC7C;AACA,SAAS,WAAW,CAAA,EAAmB;AACrC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAK,CAAA,EAAG;AACjB,IAAA,GAAA,IAAO,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,GAAA;AACT;AACA,SAAS,UAAU,CAAA,EAAoB;AACrC,EAAA,OAAO,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAA,IAAQ,CAAA,KAAM,QAAQ,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA;AACpF;AAGA,SAAS,OAAO,CAAA,EAAoB;AAClC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,IAAI,YAAY,CAAA;AACrD;AACA,SAAS,KAAK,CAAA,EAAoB;AAChC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,IAAI,OAAO,CAAA;AACjD;AACA,SAAS,MAAM,CAAA,EAAoB;AACjC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,IAAI,OAAO,CAAA;AACjD;AACA,SAAS,KAAK,CAAA,EAAoB;AAChC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAA,CAAQ,EAAA,CAAG,WAAW,CAAA,IAAK,EAAA,CAAG,WAAW,EAAA,KAAO,QAAA,CAAS,IAAI,OAAO,CAAA;AACtE;AACA,SAAS,MAAM,CAAA,EAAoB;AACjC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,IAAI,GAAG,MAAA,KAAW,EAAA,IAAM,SAAS,EAAA,EAAI,OAAO,GAAG,OAAO,IAAA;AACtD,EAAA,MAAM,EAAA,GAAK,GAAG,CAAC,CAAA;AACf,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,GAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,CAAA,IAAK,EAAA,KAAO,MAAA,IAAa,cAAA,CAAe,SAAS,EAAE,CAAA;AAChH;AACA,SAAS,KAAK,CAAA,EAAoB;AAChC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAO,EAAA,CAAG,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,IAAI,OAAO,CAAA;AAChD;AACA,SAAS,MAAM,CAAA,EAAoB;AACjC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,IAAI,EAAE,EAAA,CAAG,MAAA,IAAU,MAAM,EAAA,CAAG,MAAA,IAAU,KAAK,OAAO,KAAA;AAClD,EAAA,OACE,OAAA,CAAQ,EAAA,CAAG,CAAC,CAAC,CAAA,IACb,QAAQ,EAAA,CAAG,CAAC,CAAC,CAAA,IACb,OAAA,CAAQ,EAAA,CAAG,CAAC,CAAC,CAAA,IACb,OAAA,CAAQ,EAAA,CAAG,CAAC,CAAC,CAAA,IACb,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,CAAC,CAAA,EAAG,YAAY,CAAA;AAEtC;AACA,SAAS,MAAM,CAAA,EAAoB;AACjC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OACE,EAAA,CAAG,MAAA,KAAW,EAAA,IACd,OAAA,CAAQ,EAAA,CAAG,CAAC,CAAC,CAAA,IACb,OAAA,CAAQ,EAAA,CAAG,CAAC,CAAC,KACb,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,YAAY,CAAA,IACtC,OAAA,CAAQ,EAAA,CAAG,EAAE,CAAC,CAAA;AAElB;AACA,SAAS,OAAO,CAAA,EAAoB;AAClC,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,IAAI,EAAE,EAAA,CAAG,MAAA,KAAW,KAAK,EAAA,CAAG,MAAA,KAAW,KAAK,OAAO,KAAA;AACnD,EAAA,OACE,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAC,GAAG,OAAO,CAAA,IAChC,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG,YAAY,CAAA,KACpC,EAAA,CAAG,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,YAAY,CAAA,CAAA;AAE9D;AACA,SAAS,OAAO,CAAA,EAAoB;AAClC,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,GAAA,GAAM,KAAA;AAGV,EAAA,KAAA,MAAW,KAAK,CAAC,GAAG,CAAC,CAAA,CAAE,SAAQ,EAAG;AAChC,IAAA,IAAI,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,GAAI,EAAA;AAC1B,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,IAAI,CAAA,GAAI,GAAG,CAAA,IAAK,CAAA;AAAA,IAClB;AACA,IAAA,KAAA,IAAS,CAAA;AACT,IAAA,GAAA,GAAM,CAAC,GAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAQ,EAAA,KAAO,CAAA;AACxB;AACA,SAAS,YAAY,CAAA,EAAoB;AACvC,EAAA,MAAM,CAAA,GAAI,CAAC,GAAG,CAAC,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9D,EAAA,MAAM,EAAA,GAAK,CAAC,GAAG,CAAC,CAAA;AAChB,EAAA,OAAO,EAAA,CAAG,MAAA,IAAU,EAAA,IAAM,EAAA,CAAG,MAAA,IAAU,EAAA,IAAM,QAAA,CAAS,EAAA,EAAI,OAAO,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA;AAChF;AAIA,IAAM,SAAA,GAAsE;AAAA,EAC1E,CAAC,OAAA,EAAS,CAAC,OAAO,GAAG,MAAM,CAAA;AAAA,EAC3B,CAAC,KAAA,EAAO,CAAC,KAAK,GAAG,IAAI,CAAA;AAAA,EACrB,CAAC,MAAA,EAAQ,CAAC,MAAA,EAAQ,MAAM,GAAG,KAAK,CAAA;AAAA,EAChC,CAAC,KAAA,EAAO,CAAC,OAAO,MAAA,EAAQ,SAAS,GAAG,IAAI,CAAA;AAAA,EACxC,CAAC,MAAA,EAAQ,CAAC,MAAM,GAAG,KAAK,CAAA;AAAA,EACxB,CAAC,aAAA,EAAe,CAAC,SAAA,EAAW,KAAK,GAAG,IAAI,CAAA;AAAA,EACxC,CAAC,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA;AAAA,EACpB,CAAC,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA;AAAA,EACpB,CAAC,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,EACtB,CAAC,aAAA,EAAe,IAAA,EAAM,WAAW;AACnC,CAAA;AAEA,SAAS,QAAA,CAAS,MAAc,OAAA,EAAkC;AAChE,EAAA,MAAM,KAAA,GAAQ,WAAW,IAAI,CAAA;AAC7B,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AACxE,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAA,EAAO,IAAI,KAAK,SAAA,EAAW;AAC1C,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,CAAM,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAC7D,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,OAAA,EAAA;AACvC,IAAA,IAAI,OAAA,GAAU,CAAA,GAAI,QAAA,CAAS,MAAA,EAAQ,OAAO,GAAA;AAAA,EAC5C;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,UAAA,EAAoB,OAAA,EAAkC;AACtF,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AACjC,EAAA,IAAI,EAAA,KAAO,MAAM,OAAO,EAAA;AACxB,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,GAAI,UAAA,GAAa,IAAA;AAC/C;AAGA,IAAM,SAAA,GAAoC;AAAA,EACxC,IAAA,EAAM,eAAA;AAAA,EACN,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO,gBAAA;AAAA,EACP,KAAA,EAAO,gBAAA;AAAA,EACP,GAAA,EAAK,cAAA;AAAA,EACL,IAAA,EAAM,eAAA;AAAA,EACN,GAAA,EAAK,cAAA;AAAA,EACL,IAAA,EAAM,eAAA;AAAA,EACN,WAAA,EAAa,eAAA;AAAA,EACb,WAAA,EAAa;AACf,CAAA;AAIA,IAAM,KAAA,uBAAY,GAAA,EAAmC;AACrD,SAAS,QAAA,CAAS,KAAA,EAAe,GAAA,EAAa,UAAA,EAA4B;AACxE,EAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC3B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,KAAA,uBAAY,GAAA,EAAsB;AAClC,IAAA,KAAA,CAAM,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,KAAA,CAAM,GAAA,CAAI,KAAK,UAAU,CAAA;AAC3B;AACA,QAAA,CAAS,oBAAA,EAAsB,GAAA,EAAK,CAAC,cAAA,EAAgB,mBAAmB,CAAC,CAAA;AACzE,QAAA,CAAS,cAAA,EAAgB,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;AAClD,QAAA,CAAS,gBAAA,EAAkB,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;AACpD,QAAA,CAAS,YAAA,EAAc,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;AAChD,QAAA,CAAS,kBAAA,EAAoB,MAAA,EAAQ,CAAC,YAAY,CAAC,CAAA;AACnD,QAAA,CAAS,kBAAA,EAAoB,OAAA,EAAS,CAAC,iBAAiB,CAAC,CAAA;AACzD,QAAA,CAAS,qBAAA,EAAuB,OAAA,EAAS,CAAC,iBAAiB,CAAC,CAAA;AAC5D,QAAA,CAAS,qBAAA,EAAuB,MAAA,EAAQ,CAAC,aAAa,CAAC,CAAA;AACvD,QAAA,CAAS,kBAAA,EAAoB,OAAA,EAAS,CAAC,gBAAgB,CAAC,CAAA;AACxD,QAAA,CAAS,qBAAA,EAAuB,OAAA,EAAS,CAAC,gBAAgB,CAAC,CAAA;AAC3D,QAAA,CAAS,kBAAA,EAAoB,KAAA,EAAO,CAAC,eAAe,CAAC,CAAA;AACrD,KAAA,MAAW,CAAC,GAAA,EAAK,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACxD,EAAA,QAAA,CAAS,kBAAA,EAAoB,GAAA,EAAK,CAAC,SAAS,CAAC,CAAA;AAC7C,EAAA,QAAA,CAAS,qBAAA,EAAuB,GAAA,EAAK,CAAC,SAAS,CAAC,CAAA;AAClD;AAEA,SAAS,MAAA,CAAO,OAAe,GAAA,EAAqC;AAClE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC7B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,EAAA,IAAI,GAAA,KAAQ,QAAQ,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACxD,EAAA,IAAI,MAAM,GAAA,CAAI,GAAG,GAAG,OAAO,KAAA,CAAM,IAAI,GAAG,CAAA;AACxC,EAAA,OAAO,IAAA;AACT;AAwBO,SAAS,eAAA,CAAgB,UAAqB,OAAA,EAAoC;AACvF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA2B;AAC5C,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,UAAA,CAAW,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,WAAA,IAAe,EAAA,EAAI,CAAA,CAAE,OAAA,IAAW,EAAE,CAAC,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,MAAM,CAAA,CAAE,MAAA;AACd,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,EAAA;AAEzB,IAAA,IAAI,QAAQ,MAAA,IAAa,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACzC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,EAAO,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC5C,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA;AAAA,MACA,QAAA,EAAU,GAAA,KAAQ,IAAA,GAAO,GAAA,GAAM,GAAA;AAAA,MAC/B,oBAAA,EAAsB,CAAC,GAAG,UAAU,CAAA;AAAA,MACpC,MAAA,EAAQ,CAAC,GAAG,MAAA,CAAO,EAAE,OAAA,IAAW,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,KAAK,EAAE;AAAA,KAC1D,CAAA;AAAA,EACH;AACA,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;;;AC9OA,IAAM,YAAA,GAAe,EAAA;AAEd,SAAS,YAAA,CAAa,IAAA,EAAa,GAAA,EAAa,KAAA,GAAQ,YAAA,EAAwB;AACrF,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,CAAA,GAAK,IAAgC,GAAG,CAAA;AAC9C,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW;AACnC,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,IAAI,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA,EAAI;AACrB,IAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,IAAA,IAAI,GAAA,CAAI,UAAU,KAAA,EAAO;AAAA,EAC3B;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,iBAAA,CAAkB,UAA2B,IAAA,EAA4B;AACvF,EAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAY,KAAA,GAAQ,OAAO,IAAA,CAAK,KAAe,CAAA,GAAI,EAAE,CAAA;AACvE,EAAA,MAAM,OAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1B,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,WAAA,EAAa,GAAA,CAAI,YAAA,EAAc,OAAA,EAAS,YAAA,CAAa,IAAA,EAAM,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,EACpG;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,gBAAA,CACd,GAAA,EACA,QAAA,EACA,QAAA,EACA,IAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,EAAU,IAAI,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,QAAA,EAAU,OAAO,CAAA;AAC9C,EAAA,GAAA,CAAI,SAAA,CAAU,aAAa,CAAA,GAAI,IAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,GAAA;AAAA,IACzB,CAAC,IAAA,KAAS,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,KAAK,IAAA,CAAK,KAAK,CAAA,KAAA,EAAQ,IAAA,CAAK,qBAAqB,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAK,MAAM,CAAA,CAAA;AAAA,GAC5G;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG,GAAA,CAAI,UAAU,aAAa,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACpE,EAAA,OAAO,IAAA;AACT;AAGO,IAAM,MAAA,uBAAkC,GAAA,CAAI;AAAA,EACjD,cAAA;AAAA,EAAgB,mBAAA;AAAA,EAAqB,YAAA;AAAA,EAAc,iBAAA;AAAA,EACnD,iBAAA;AAAA,EAAmB,aAAA;AAAA,EAAe,gBAAA;AAAA,EAAkB;AACtD,CAAC,CAAA;AAEM,SAAS,qBAAqB,IAAA,EAGnC;AACA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAsB;AACxC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,UAAiD,EAAC;AACxD,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,EAAC,EAAG;AACtC,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,oBAAA,IAAwB,EAAC,EAAG;AAChD,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,QAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACvB,QAAA,IAAI,QAAQ,MAAA,EAAW;AAAE,UAAA,GAAA,GAAM,EAAC;AAAG,UAAA,KAAA,CAAM,GAAA,CAAI,KAAK,GAAG,CAAA;AAAG,UAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,QAAG;AACzE,QAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,EAAG,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAI,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAyB,KAAA,CAAM,GAAA,CAAI,CAAC,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,MAAM,GAAA,CAAI,CAAC,CAAA,IAAK,IAAG,CAAE,CAAA;AACxF,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B;AAEO,SAAS,eAAA,CAAgB,MAAgC,MAAA,EAAmD;AACjH,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAsB;AACxC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,CAAC,GAAG,IAAA,EAAM,GAAG,MAAM,CAAA,EAAG;AACvC,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AAC/B,IAAA,IAAI,QAAQ,MAAA,EAAW;AAAE,MAAA,GAAA,GAAM,EAAC;AAAG,MAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA;AAAG,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,IAAG;AACzF,IAAA,GAAA,CAAI,IAAA,CAAK,GAAG,IAAA,CAAK,GAAG,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ;AACxB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,IAAK,EAAC,EAAG,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAAE,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AAAG,MAAA,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IAAG;AACxF,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAI;AAAA,EAC5B,CAAC,CAAA;AACH;;;AC/DA,SAAS,iBAAiB,CAAA,EAA+B;AACvD,EAAA,OAAO;AAAA,IACL,QAAA,EAAUC,kBAAA,CAAc,CAAA,CAAE,QAAQ,EAAE,WAAA,EAAY;AAAA,IAChD,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,SAAS,CAAA,CAAE;AAAA,GACb;AACF;AAGA,SAAS,oBAAoB,EAAA,EAAsC;AACjE,EAAA,OAAO;AAAA,IACL,MAAM,EAAA,CAAG,IAAA;AAAA,IACT,cAAc,EAAA,CAAG,YAAA;AAAA,IACjB,SAAS,EAAA,CAAG,OAAA;AAAA,IACZ,aAAa,EAAA,CAAG;AAAA,GAClB;AACF;AAEO,IAAM,SAAA,GAAmB;AAAA,EAC9B,IAAA,EAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,QAAA,EAAU,CAAC,UAAA,EAAY,SAAS,CAAA,EAAG,QAAA,EAAU,CAAC,IAAI,CAAA,EAAE;AAAA,EAEtF,SAAS,GAAA,EAAwB;AAC/B,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,IAAI,GAAA,EAAwC;AAChD,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,EAAA,IAAM,EAAC;AACxB,IAAA,MAAM,IAAA,GAAO,IAAIC,gBAAA,CAAY,IAAI,CAAA;AACjC,IAAA,MAAM,WAAW,GAAA,CAAI,WAAA;AACrB,IAAA,MAAM,IAAA,GAAO,YAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvE,IAAA,MAAM,MAAA,GAASC,aAAA,CAAS,IAAA,EAAM,IAAsC,CAAA;AAEpE,IAAA,MAAM,QAAA,GAAgC,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAA;AAC1E,IAAA,MAAM,cAAA,GAAiB,OAAO,OAAA,CAAQ,OAAA;AAEtC,IAAA,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,GAAI,QAAA;AAC5B,IAAA,GAAA,CAAI,SAAA,CAAU,SAAS,CAAA,GAAI,MAAA,CAAO,OAAA;AAGlC,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAoC,cAAA,CAAe,GAAA,CAAI,mBAAmB,CAAA;AAChF,MAAA,MAAM,YAAA,GAA8B,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACvD,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,OAAO,CAAA,CAAE,KAAA;AAAA,QACT,SAAS,CAAA,CAAE;AAAA,OACb,CAAE,CAAA;AACF,MAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,sBAAA,CAAuB,cAAc,YAAY,CAAA;AAAA,IACtF,CAAA,CAAA,MAAQ;AACN,MAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,EAAC;AAAA,IACtC;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAe,GAAA,CAAI,SAAA,CAAU,UAAU,KAA6B,EAAC;AAC3E,MAAA,MAAM,WAAA,GAAe,GAAA,CAAI,SAAA,CAAU,iBAAiB,KAAyB,EAAC;AAC9E,MAAA,IAAI,IAAI,EAAA,IAAM,WAAA,CAAY,SAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AAC9D,QAAA,gBAAA,CAAiB,GAAA,EAAK,WAAA,EAAa,WAAA,EAAa,GAAA,CAAI,EAAE,CAAA;AAAA,MACxD;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,EACvC,CAAA;AAAA,EAEA,QAAA,EAAU;AACZ;ACrFO,IAAM,cAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,EAAE,IAAA,EAAM,sBAAA,EAAwB,QAAA,EAAU,CAAC,IAAA,EAAM,UAAU,CAAA,EAAG,QAAA,EAAU,CAAC,IAAI,CAAA,EAAE;AAAA,EAErF,SAAS,GAAA,EAAwB;AAC/B,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,IACpD;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,IAAI,GAAA,EAAwC;AAChD,IAAA,MAAM,IAAA,GAAQ,GAAA,CAAI,EAAA,IAAM,EAAC;AACzB,IAAA,MAAM,SAAkC,EAAE,GAAI,GAAA,CAAI,WAAA,IAAe,EAAC,EAAG;AACrE,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,eAAe,CAAA,KAAM,IAAA;AAC1C,IAAA,OAAO,OAAO,eAAe,CAAA;AAE7B,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,CAAU,aAAa,CAAA;AACxC,MAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,qBAAqB,IAAI,CAAA;AACpD,MAAA,MAAM,cAAA,GAAkB,MAAA,CAAO,YAAY,CAAA,IAAqC,EAAC;AACjF,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,GAAA,CAAI,UAAU,gBAAgB,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MACvF;AACA,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AACjD,QAAA,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,YAAY,eAAA,CAAgB,cAAA,EAAgB,KAAK,CAAA,EAAE;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAK,MAAA,GAAuC,MAAA;AAAA,MACpF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAK,MAAA,GAAuC,MAAA;AAAA,IACpF;AAEA,IAAA,MAAM,MAAA,GAAS,IAAIC,sBAAA,CAAgB,MAAM,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA;AAEtC,IAAA,GAAA,CAAI,EAAA,GAAK,CAAC,GAAG,MAAA,CAAO,IAAI,CAAA;AACxB,IAAA,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA,CAAO,QAAA;AAGnC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA;AAChD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,UAAgC,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACxE,QAAQ,CAAA,CAAE,MAAA;AAAA,UACV,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,cAAc,CAAA,CAAE;AAAA,SAClB,CAAE,CAAA;AACF,QAAA,sBAAA,CAAuB,UAA6B,OAAO,CAAA;AAAA,MAC7D,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,EACvC,CAAA;AAAA,EAEA,QAAA,EAAU;AACZ;ACrCA,SAAS,iBAAiB,IAAA,EAA6B;AACrD,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,IAAA,MAAM,MAAW,EAAC;AAClB,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,MAAA,GAAA,CAAI,CAAC,IAAI,CAAA,KAAM,IAAA,IAAQ,MAAM,MAAA,GAAY,EAAA,GAAK,OAAO,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,IAAM,WAAA,GAAqB;AAAA,EAChC,IAAA,EAAM,EAAE,IAAA,EAAM,oBAAA,EAAsB,QAAA,EAAU,CAAC,UAAA,EAAY,QAAQ,CAAA,EAAG,QAAA,EAAU,CAAC,IAAI,CAAA,EAAE;AAAA,EAEvF,SAAS,GAAA,EAAwB;AAC/B,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAAA,EACF,CAAA;AAAA,EAEA,MAAM,IAAI,GAAA,EAAwC;AAChD,IAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,GAAA,CAAI,EAAA,IAAM,EAAE,CAAA;AAC1C,IAAA,GAAA,CAAI,EAAA,GAAK,IAAA;AAET,IAAA,MAAM,WAAW,GAAA,CAAI,WAAA;AACrB,IAAA,IAAI,MAAA,GAAmC,IAAA;AAGvC,IAAA,IAAI,YAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,MAAA,MAAA,GAASC,kBAAW,QAAsC,CAAA;AAAA,IAC5D,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA;AAChD,MAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAClD,QAAA,MAAA,GAAS,uBAAA,CAAwB,UAA6B,IAAI,CAAA;AAAA,MACpE;AAAA,IACF;AAGA,IAAA,MAAM,MAAA,GAAS,MAAA,KAAW,IAAA,GAAO,MAAMC,aAAA,CAAO,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,GAAI,MAAMA,aAAA,CAAO,IAAI,CAAA;AAEnF,IAAA,GAAA,CAAI,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA,CAAO,QAAA;AACnC,IAAA,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,GAAI,MAAA,CAAO,aAAA;AACjC,IAAA,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,GAAI,MAAA,CAAO,MAAA;AACjC,IAAA,GAAA,CAAI,SAAA,CAAU,OAAO,CAAA,GAAI,MAAA,CAAO,KAAA;AAChC,IAAA,GAAA,CAAI,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA,CAAO,KAAA;AACtC,IAAA,GAAA,CAAI,SAAA,CAAU,cAAc,CAAA,GAAI,MAAA,CAAO,WAAA;AAGvC,IAAA,MAAM,MAAM,MAAA,EAAQ,SAAA;AACpB,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AACzB,MAAA,GAAA,CAAI,SAAA,CAAU,eAAe,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,CAAG,IAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,EACvC,CAAA;AAAA,EAEA,QAAA,EAAU;AACZ;AAOO,SAAS,uBAAA,CACd,UACA,IAAA,EAC0B;AAC1B,EAAA,MAAM,WAAW,QAAA,CAAS,MAAA;AAAA,IACxB,CAAC,CAAA,KAAM,CAAA,CAAE,YAAA,KAAiB,UAAA,CAAW,QAAQ,CAAA,CAAE;AAAA,GACjD;AACA,EAAA,MAAM,SAAA,GAAY,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,YAAA,KAAiB,WAAW,KAAK,CAAA;AAC5E,EAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,YAAA,KAAiB,WAAW,GAAG,CAAA;AAExE,EAAA,MAAM,YAA8B,EAAC;AAGrC,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,SAAA,CAAU,IAAA;AAAA,MACRC,yBAAA,CAAmB;AAAA,QACjB,IAAA,EAAM,CAAA,MAAA,EAAS,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,QACvB,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,CAACC,wBAAA,CAAkB,EAAE,OAAO,GAAA,CAAI,IAAA,EAAM,UAAA,EAAY,CAAC,aAAa,OAAO,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAS,CAAC;AAAA,OACrG;AAAA,KACH;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,cAA+B,QAAA,CAAS,GAAA;AAAA,MAAI,CAAC,QACjDA,wBAAA,CAAkB;AAAA,QAChB,OAAO,GAAA,CAAI,IAAA;AAAA,QACX,MAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAQ,CAAA;AAAA,QACR,UAAA,EAAY,CAAC,WAAA,EAAa,OAAO;AAAA,OAClC;AAAA,KACH;AACA,IAAA,SAAA,CAAU,IAAA;AAAA,MACRD,yBAAA,CAAmB;AAAA,QACjB,IAAA,EAAM,aAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,SAAA,EAAW,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACT;AAAA,KACH;AAAA,EACF;AAKA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,IAAI,aAAa,QAAA,CAAS,MAAA;AAAA,MACxB,CAAC,MAAM,CAAA,CAAE,YAAA,KAAiB,WAAW,MAAA,IAAU,CAAA,CAAE,iBAAiB,UAAA,CAAW;AAAA,KAC/E;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,MAAM,cAAA,GAAiB,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAA;AAClE,MAAA,UAAA,GAAa,UAAA,CAAW,OAAO,CAAC,CAAA,KAAM,gBAAgB,IAAA,EAAM,CAAA,CAAE,IAAI,CAAA,IAAK,cAAc,CAAA;AAAA,IACvF;AACA,IAAA,MAAM,cAAA,GAAkC,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA;AAAA,MAAI,CAAC,QAClEC,wBAAA,CAAkB;AAAA,QAChB,OAAO,GAAA,CAAI,IAAA;AAAA,QACX,MAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAQ,CAAA;AAAA,QACR,UAAA,EAAY,CAAC,WAAA,EAAa,OAAO;AAAA,OAClC;AAAA,KACH;AACA,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,SAAA,CAAU,IAAA;AAAA,QACRD,yBAAA,CAAmB;AAAA,UACjB,IAAA,EAAM,gBAAA;AAAA,UACN,IAAA,EAAM,UAAA;AAAA,UACN,SAAA,EAAW,IAAA;AAAA,UACX,MAAA,EAAQ;AAAA,SACT;AAAA,OACH;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAIA,EAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,EAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,EAAG;AACzC,IAAA,MAAM,WAAA,GAAc,GAAA;AACpB,IAAA,MAAM,gBAAyC,EAAC;AAChD,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAI,UAAA,CAAW,IAAA,EAAM,CAAA,CAAE,IAAI,KAAK,WAAA,EAAa;AAC3C,QAAA,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA,EAAM,gBAAgB,IAAA,EAAM,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,MAC5D;AAAA,IACF;AACA,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AACxC,MAAA,OAAA,GAAU,aAAA,CAAc,CAAC,CAAA,CAAG,CAAC,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,CACnB,aAAA,EACA,UAAA,EACA,UAAU,KAAA,KACS;AACnB,IAAA,MAAM,MAAA,GAA8B;AAAA,MAClC,EAAE,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAC,WAAA,EAAa,OAAO,CAAA;AAAE,KAC9D;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAC,WAAA,EAAa,eAAe,CAAA,EAAG,CAAA;AAAA,IACnF;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAC,UAAU,CAAA,EAAG,UAAA,EAAY,CAAC,WAAA,EAAa,SAAS,CAAA,EAAG,CAAA;AAC1E,IAAA,OAAOE,yBAAA,CAAmB;AAAA,MACxB,QAAA,EAAU,YAAA;AAAA,MACV,IAAA,EAAM,CAAC,MAAA,CAAO,CAAC,CAAE,CAAA;AAAA,MACjB,MAAA;AAAA,MACA,YAAA,EAAc,GAAA;AAAA,MACd,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,QAAA,GAAkC,IAAA;AACtC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACjF,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,CAAC,CAAA,CAAG,IAAA;AAClC,IAAA,QAAA,GAAW,OAAA,GACP,YAAA,CAAa,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,QAAA,EAAU,IAAI,CAAA,GAChD,YAAA,CAAa,CAAC,QAAQ,GAAG,QAAQ,CAAA;AAAA,EACvC,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA;AAC9B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,GAAW,aAAa,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,UAAU,IAAI,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,QAAA,GAAWA,yBAAA,CAAmB;AAAA,QAC5B,QAAA,EAAU,QAAA;AAAA,QACV,IAAA,EAAM,CAAC,EAAE,MAAA,EAAQ,CAAC,QAAQ,CAAA,EAAG,UAAA,EAAY,CAAC,WAAA,EAAa,SAAS,CAAA,EAAG,CAAA;AAAA,QACnE,YAAA,EAAc,GAAA;AAAA,QACd,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,QAAA,IAAY,OAAA,IAAW,SAAA,CAAU,SAAS,CAAA,EAAG;AAChD,IAAA,MAAM,WAAW,SAAA,CAAU,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,SAAS,UAAU,CAAA;AAChE,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACpC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,CAAG,KAAA;AAChC,MAAA,QAAA,GAAW,aAAa,CAAC,OAAA,EAAS,MAAM,CAAA,EAAG,QAAQ,IAAI,CAAA;AAAA,IACzD;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAWA,0BAAmB,EAAE,IAAA,EAAM,EAAC,EAAG,WAAA,EAAa,MAAM,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAOJ,iBAAA,CAAW,EAAE,SAAA,EAAW,QAAA,EAAU,CAAA;AAC3C;ACnOA,SAAS,sBAAA,CAAuB,QAAmB,MAAA,EAAgC;AACjF,EAAA,MAAM,SAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,EAAA,IAAM,OAAO,QAAA,EAAU;AAChC,IAAA,MAAA,CAAO,EAAA,CAAG,MAAM,CAAA,GAAI;AAAA,MAClB,YAAY,EAAA,CAAG,MAAA;AAAA,MACf,WAAW,EAAA,CAAG,MAAA;AAAA;AAAA,MACd,IAAA,EAAM,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,MAAA,GAASK,8BAAA;AAAA,MAC9B,YAAY,EAAA,CAAG,UAAA;AAAA,MACf,QAAA,EAAU,EAAE,SAAA,EAAW,EAAA,CAAG,SAAA;AAAU,KACtC;AAAA,EACF;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,cAAA,EAAgB;AACvC,IAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AACpB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACZ,UAAA,EAAY,GAAA;AAAA,QACZ,SAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAMA,8BAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU;AAAC,OACb;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,aAAa,MAAA,CAAO,QAAA,CAAS,MAAA,GAC/B,MAAA,CAAO,SAAS,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA,KAAQ,GAAG,UAAA,GAAa,CAAA,GAAI,GAAG,UAAA,GAAa,CAAA,EAAI,QAAQ,CAAA,GACnF,CAAA;AAGJ,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,gBAAgBC,+BAAA,EAAe;AACtE;AAGA,SAAS,cAAc,GAAA,EAAoC;AACzD,EAAA,MAAM,GAAA,GAAA,CACH,GAAA,CAAI,MAAA,IAAU,IAAA,GAAO,CAAA,GAAI,CAAA,KACzB,GAAA,CAAI,QAAA,GAAW,CAAA,GAAI,CAAA,CAAA,IACnB,GAAA,CAAI,MAAA,IAAU,OAAO,CAAA,GAAI,CAAA,CAAA;AAC5B,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACF;AAEO,IAAM,gBAAA,GAA0B;AAAA,EACrC,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA,IAIJ,IAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAU,CAAC,iBAAiB,CAAA;AAAA,IAC5B,UAAU;AAAC,GACb;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,IAAA,EAAyB;AAAA,EAAC,CAAA;AAAA,EAEnC,MAAM,IAAI,GAAA,EAAwC;AAChD,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,WAAA,IAAe,EAAC;AAChC,IAAA,aAAA,CAAc,GAAG,CAAA;AAEjB,IAAA,IAAI,GAAA,CAAI,UAAU,IAAA,EAAM;AACtB,MAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,GAAA,CAAI,MAAA;AACvC,MAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,IAAI,IAAI,QAAA,EAAU;AAChB,MAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,IAAA;AACnC,MAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,IACvC;AACA,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,IAAA;AACnC,MAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,IACvC;AAEA,IAAA,MAAM,WAAW,GAAA,CAAI,MAAA;AACrB,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,cAAA;AAIJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAA,GAAS,QAAA;AACT,MAAA,WAAA,GAAc,CAAA;AACd,MAAA,cAAA,GAAiB,EAAE,eAAe,UAAA,EAAW;AAAA,IAC/C,CAAA,MAAO;AACL,MAAA,MAAM,YAAYC,6BAAA,CAAqB,EAAE,OAAA,EAAS,GAAA,CAAI,IAAI,CAAA;AAC1D,MAAA,IAAI,SAAA,CAAU,WAAW,IAAA,EAAM;AAC7B,QAAA,MAAA,GAAS,SAAA,CAAU,MAAA;AACnB,QAAA,WAAA,GAAc,SAAA,CAAU,KAAA;AACxB,QAAA,cAAA,GAAiB;AAAA,UACf,eAAe,SAAA,CAAU,MAAA;AAAA,UACzB,cAAc,SAAA,CAAU,KAAA;AAAA,UACxB,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,iBAAiB,SAAA,CAAU;AAAA,SAC7B;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,SAAA;AACT,QAAA,WAAA,GAAc,CAAA;AACd,QAAA,cAAA,GAAiB;AAAA,UACf,eAAe,SAAA,CAAU,MAAA;AAAA,UACzB,cAAc,SAAA,CAAU,KAAA;AAAA,UACxB,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,iBAAiB,SAAA,CAAU,eAAA;AAAA,UAC3B,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAASC,YAAA;AAAA,MACb,EAAE,OAAA,EAAS,GAAA,CAAI,EAAA,EAAG;AAAA,MAClB,IAAIC,yBAAA,CAAiBC,2BAAA,CAAW,MAAM,CAAC,CAAA;AAAA,MACvC,EAAE,MAAM,IAAA;AAAK,KACf;AACA,IAAA,MAAM,QAAA,GAA2B;AAAA,MAC/B,GAAG,sBAAA,CAAuB,MAAA,EAAQ,MAAM,CAAA;AAAA,MACxC,UAAA,EAAY;AAAA,KACd;AAEA,IAAA,GAAA,CAAI,SAAA,CAAU,iBAAiB,CAAA,GAAI,QAAA;AAEnC,IAAA,IAAI,EAAE,uBAAA,IAA2B,GAAA,CAAI,SAAA,CAAA,EAAY;AAC/C,MAAA,GAAA,CAAI,SAAA,CAAU,uBAAuB,CAAA,GAAI,cAAA;AAAA,IAC3C;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAQ;AAAA,EACvC;AACF,CAAA;;;ACpIO,SAAS,oBAAA,GAAsC;AACpD,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,EAAA,QAAA,CAAS,SAAS,SAAS,CAAA;AAC3B,EAAA,QAAA,CAAS,SAAS,SAAS,CAAA;AAC3B,EAAA,QAAA,CAAS,SAAS,cAAc,CAAA;AAChC,EAAA,QAAA,CAAS,SAAS,WAAW,CAAA;AAC7B,EAAA,QAAA,CAAS,SAAS,gBAAgB,CAAA;AAClC,EAAA,OAAO,QAAA;AACT;;;ACJA,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,0BAAA,GAA6B,GAAA;AAC5B,IAAM,oBAAA,GAAuB,GAAA;AACpC,IAAM,wBAAA,GAA2B,IAAA;AACjC,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,eAAA,GAAkB,GAAA;AAEjB,SAAS,OAAO,UAAA,EAA+C;AACpE,EAAA,IAAI,UAAA,IAAc,iBAAiB,OAAO,OAAA;AAC1C,EAAA,IAAI,UAAA,IAAc,iBAAiB,OAAO,OAAA;AAC1C,EAAA,OAAO,KAAA;AACT;AAEA,SAASf,MAAAA,CAAM,IAAA,EAAc,MAAA,GAAkC,EAAC,EAAiB;AAC/E,EAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AACxB;AAEA,SAAS,mBAAA,GAAsC;AAC7C,EAAA,OAAO,CAACA,OAAM,kBAAkB,CAAA,EAAGA,OAAM,sBAAsB,CAAA,EAAGA,MAAAA,CAAM,oBAAoB,CAAC,CAAA;AAC/F;AAGA,SAAS,gBAAgB,GAAA,EAA4C;AACnE,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,IAAI,OAAA,CAAQ,KAAA;AAAA,IACpB,MAAA,EAAQ,IAAI,OAAA,CAAQ,KAAA;AAAA,IACpB,eAAA,EAAiB,IAAI,OAAA,CAAQ,cAAA;AAAA,IAC7B,iBAAA,EAAmB,IAAI,OAAA,CAAQ,gBAAA;AAAA,IAC/B,gBAAA,EAAkB,IAAI,UAAA,CAAW,cAAA;AAAA,IACjC,iBAAA,EAAmB,IAAI,UAAA,CAAW;AAAA,GACpC;AACF;AAEO,SAAS,aAAa,GAAA,EAA6B;AACxD,EAAA,MAAM,IAAI,GAAA,CAAI,OAAA;AACd,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,IAAA,OAAO;AAAA,MACL,QAAQ,CAACA,MAAAA,CAAM,kBAAkB,CAAA,EAAGA,MAAAA,CAAM,sBAAsB,CAAC,CAAA;AAAA,MACjE,QAAA,EAAU,cAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MACZ,QAAA,EAAU,gBAAgB,GAAG;AAAA,KAC/B;AAAA,EACF;AACA,EAAA,IAAI,CAAA,CAAE,cAAA,KAAmB,IAAA,IAAQ,CAAA,CAAE,oBAAoB,0BAAA,EAA4B;AACjF,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACNA,OAAM,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,CAAE,gBAAgB,CAAA;AAAA,QAClDA,OAAM,kBAAkB,CAAA;AAAA,QACxBA,OAAM,sBAAsB,CAAA;AAAA,QAC5BA,OAAM,oBAAoB;AAAA,OAC5B;AAAA,MACA,QAAA,EAAU,kBAAA;AAAA,MACV,YAAY,CAAA,CAAE,gBAAA;AAAA,MACd,QAAA,EAAU,gBAAgB,GAAG;AAAA,KAC/B;AAAA,EACF;AACA,EAAA,IAAI,EAAE,cAAA,KAAmB,IAAA,IAAQ,GAAA,CAAI,UAAA,CAAW,iBAAiB,gBAAA,EAAkB;AACjF,IAAA,OAAO;AAAA,MACL,QAAQ,mBAAA,EAAoB;AAAA,MAC5B,QAAA,EAAU,gBAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,gBAAgB,GAAG;AAAA,KAC/B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,QAAQ,mBAAA,EAAoB;AAAA,IAC5B,QAAA,EAAU,SAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,gBAAgB,GAAG;AAAA,GAC/B;AACF;AAEO,SAAS,eAAA,CAAgB,MAAgB,OAAA,EAAgC;AAC9E,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,oBAAoB,CAAA;AACzE,EAAA,IAAI,OAAA,CAAQ,KAAA,GAAQ,oBAAA,IAAwB,CAAC,SAAA,EAAW;AACtD,IAAA,OAAO;AAAA,MACL,QAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,EAAE,GAAG,CAAA,CAAE,MAAA,IAAS,CAAE,CAAA;AAAA,MAC1E,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,QAAA,EAAU,EAAE,GAAG,IAAA,CAAK,QAAA;AAAS,KAC/B;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,GAAA;AAAA,IAAI,CAAC,CAAA,KAC9B,CAAA,CAAE,IAAA,KAAS,oBAAA,GACP;AAAA,MACE,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,GAAG,CAAA,CAAE,MAAA;AAAA,QACL,eAAe,EAAE,UAAA,EAAY,EAAE,aAAA,EAAe,0BAAyB;AAAE;AAC3E,KACF,GACA,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,EAAE,GAAG,CAAA,CAAE,MAAA,EAAO;AAAE,GAC9C;AACA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,cAAc,IAAA;AAAK,GACnD;AACF;;;ACnIO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAC/C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;;;ACYO,IAAM,oBAAA,GAAuB,GAAA;AAE7B,SAAS,eAAe,IAAA,EAAmC;AAChE,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA;AAAA,MAAG,KAAA,EAAO,CAAA;AAAA,MAAG,aAAa,EAAC;AAAA,MAAG,QAAQ,EAAC;AAAA,MAC9C,cAAA,EAAgB,IAAA;AAAA,MAAM,gBAAA,EAAkB;AAAA,KAC1C;AAAA,EACF;AACA,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACxC,EAAA,MAAM,GAAA,GAAMY,6BAAAA,CAAqB,EAAE,OAAA,EAAS,aAAa,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,OAAO,WAAA,CAAY,MAAA;AAAA,IACnB,WAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,gBAAgB,GAAA,CAAI,MAAA;AAAA,IACpB,gBAAA,EAAkB,GAAA,CAAI,MAAA,KAAW,IAAA,GAAO,IAAI,KAAA,GAAQ;AAAA,GACtD;AACF;AAEO,SAAS,kBAAkB,IAAA,EAAyC;AACzE,EAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,EAAA,IAAI,UAAU,CAAA,EAAG,OAAO,EAAE,cAAA,EAAgB,CAAA,EAAG,iBAAiB,CAAA,EAAE;AAChE,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACxC,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG,OAAO,EAAE,cAAA,EAAgB,CAAA,EAAG,iBAAiB,CAAA,EAAE;AAC7E,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM;AACvC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AACb,MAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,KAAA,EAAA;AAAA,IACrC;AACA,IAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,KAAA,MAAW,CAAA,IAAK,SAAA,EAAW,IAAI,CAAA,GAAI,gBAAgB,cAAA,GAAiB,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,eAAA,EAAiB,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,SAAA,CAAU;AAAA,GACpE;AACF;AAEO,SAAS,kBAAkB,IAAA,EAAoC;AACpE,EAAA,OAAO,EAAE,SAAS,cAAA,CAAe,IAAI,GAAG,UAAA,EAAY,iBAAA,CAAkB,IAAI,CAAA,EAAE;AAC9E;AAEO,SAAS,iBAAA,CAAkB,MAAgB,OAAA,EAA4B;AAC5E,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,KAAM,KAAA,EAAO;AACvC,EAAA,IAAI,OAAA,CAAQ,SAAS,oBAAA,EAAsB;AACzC,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,IAAA,CAAK,QAAQ,CAAA,aAAA,EAAgB,KAAK,UAAU,CAAA,KAAA,EACvE,OAAA,CAAQ,KAAK,CAAA,6EAAA,EACP,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,KAC7C;AAAA,EACF;AACF;AAEO,SAAS,YAAA,CACd,IAAA,EACA,SAAA,EACA,YAAA,EACgB;AAChB,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,SAAS,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,KAAM,aAAA,CAAc,EAAE,GAAA,EAAK,CAAA,CAAE,MAAM,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAC9D,EAAA,MAAM,QAAA,GAAW,8BAAA;AACjB,EAAA,IAAI,OAAO,IAAA,CAAK,YAAY,EAAE,MAAA,GAAS,CAAA,IAAK,YAAY,SAAA,EAAW;AACjE,IAAA,MAAA,CAAO,IAAA,CAAK,cAAc,EAAE,GAAA,EAAK,UAAU,MAAA,EAAQ,YAAA,EAAc,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,kBAAA,CAAmB,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AACxD;;;ACtDO,IAAM,WAAN,MAAe;AAAA,EACH,MAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EAEjB,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,SAAS,OAAA,EAAS,MAAA;AAGvB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,EAAS,QAAA,IAAY,oBAAA,EAAqB;AAC1D,IAAA,IAAA,CAAK,YAAA,GAAe,OAAA,EAAS,YAAA,IAAgB,EAAC;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,IAAA,EAAsB,MAAA,GAAS,QAAA,EAA+B;AACtE,IAAA,MAAM,MAAM,eAAA,CAAgB;AAAA,MAC1B,EAAA,EAAI,CAAC,GAAG,IAAI,CAAA;AAAA,MACZ,QAAA,EAAU,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAK,MAAA;AAAO,KAC7C,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,UAAA,CAAW,CAAC,GAAG,IAAI,CAAA,EAAG,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,YAAY,CAAA;AAEpF,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC/C,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,UAAU,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,MAAA;AAAA,QACA,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,QAAQ,EAAC;AAAA,QACT,WAAW,EAAC;AAAA,QACZ,SAAS,EAAC;AAAA,QACV,MAAA,EAAQ,CAAC,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,CAAA;AAAA,QACjD,WAAW,EAAC;AAAA,QACZ,QAAQ;AAAC,OACX;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA;AACvC,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AACzC,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,GAAA,EAAK,MAAM,CAAA;AAAA,EACnC;AAEF;AA8BO,SAAS,UAAA,CACd,IAAA,EACA,QAAA,EACA,YAAA,EACgB;AAChB,EAAA,MAAM,GAAA,GAAM,kBAAkB,IAAI,CAAA;AAClC,EAAA,IAAI,IAAA,GAAO,aAAa,GAAG,CAAA;AAC3B,EAAA,IAAA,GAAO,eAAA,CAAgB,IAAA,EAAM,GAAA,CAAI,OAAO,CAAA;AACxC,EAAA,iBAAA,CAAkB,IAAA,EAAM,IAAI,OAAO,CAAA;AACnC,EAAA,OAAO,YAAA,CAAa,IAAA,EAAM,QAAA,CAAS,OAAA,IAAW,YAAY,CAAA;AAC5D;AAmBA,eAAsB,KAAA,CACpB,IAAA,EACA,MAAA,EACA,MAAA,GAAS,QAAA,EACY;AACrB,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,MAAA,KAAW,SAAY,EAAE,MAAA,EAAO,GAAI,EAAE,CAAA;AAChE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAC9B;AAMA,eAAsB,SAAA,CAAU,QAA0B,IAAA,EAA2C;AACnG,EAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,QAAA,CAAS,QAAA,CAAS,CAAC,CAAA;AAE3C,EAAA,MAAM,SAAS,kBAAA,CAAmB;AAAA,IAChC,QAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAQ,OAAO,GAAA,CAAI,CAAC,MAAM,aAAA,CAAc,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,GACrD,CAAA;AAED,EAAA,MAAM,MAAmB,eAAA,CAAgB;AAAA,IACvC,EAAA,EAAI,CAAC,GAAG,IAAI,CAAA;AAAA,IACZ,UAAU,EAAE,MAAA,EAAQ,gBAAA,EAAkB,UAAA,EAAY,KAAK,MAAA;AAAO,GAC/D,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,CAAA;AAC9C,EAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAEzD,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,QAAQ,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AAC1C,EAAA,OAAO,QAAA,CAAS,KAAA,CAAM,GAAA,EAAK,OAAO,CAAA;AACpC;;;ACvKA,SAAA,EAAA;AAMA,IAAI,QAAA,GAAW,KAAA;AAEf,eAAsB,UAAA,CAAW,IAAA,GAA0B,EAAC,EAAqB;AAC/E,EAAA,IAAI,UAAU,OAAO,IAAA;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,kBAAA,EAAAI,mBAAAA,EAAmB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,WAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AACrC,IAAA,MAAM,KAAK,MAAM,iBAAA;AAAA,MACf,IAAA;AAAA,MACAA,mBAAAA;AAAA,MACA,kBAAA;AAAA,MACA,IAAI,GAAA,CAAI,qCAAA,EAAuC,2PAAe;AAAA,KAChE;AACA,IAAA,IAAI,IAAI,QAAA,GAAW,IAAA;AACnB,IAAA,OAAO,EAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,IAAA,CAAK,SAAS,MAAM,GAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,aAAA,GAAyB;AACvC,EAAA,OAAO,oBAAmB,KAAM,IAAA;AAClC;AAEO,SAAS,WAAA,GAAoB;AAClC,EAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,EAAA,QAAA,GAAW,KAAA;AACb","file":"index.cjs","sourcesContent":["/**\n * goldenmatch-wasm-runtime — shared opt-in WASM plumbing for the Golden Suite\n * TS packages. Edge-safe: the only node:* touch is the guarded dynamic\n * `import(\"node:fs/promises\" as string)` idiom (keeps bundlers from statically\n * resolving node built-ins). Domain-agnostic: the byte loader, a generic enable\n * skeleton, and a backend singleton.\n *\n * Each consumer owns: its artifact URL (computed in ITS OWN module so\n * `import.meta.url` resolves to that package's `dist`), its wasm-bindgen glue\n * import, and its backend interface. Those CANNOT live here.\n */\n\nexport interface LoadOptions {\n  readonly wasmBytes?: Uint8Array;\n  readonly wasmUrl?: string | URL;\n  /**\n   * A standard base64 encoding of the raw `.wasm` bytes. The UNIVERSAL loader\n   * strategy (see `decodeWasmBase64`): a consumer can pass the contents of its\n   * generated `<name>_base64` module here and the bytes resolve with NO fetch /\n   * fs / `import.meta.url` — the one path that works edge-safe in Workers + Deno\n   * + every bundler. Takes precedence over `wasmUrl` (but not explicit\n   * `wasmBytes`). The decode is pure-JS (`atob` where present, else a Node\n   * Buffer fallback), so it stays edge-safe.\n   */\n  readonly wasmBase64?: string;\n}\n\n/**\n * Decode a standard-base64 string to raw bytes, edge-safe (no `node:*`). Uses\n * the global `atob` (browser / Workers / Deno / Node 16+) when present, else a\n * `Buffer` fallback for older Node. Exported so a consumer can decode its\n * generated base64 module directly if it wants the bytes without `enableWasm`.\n */\nexport function decodeWasmBase64(b64: string): Uint8Array {\n  const g = globalThis as { atob?: (s: string) => string; Buffer?: typeof Buffer };\n  if (typeof g.atob === \"function\") {\n    const bin = g.atob(b64);\n    const out = new Uint8Array(bin.length);\n    for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n    return out;\n  }\n  if (typeof g.Buffer !== \"undefined\") {\n    const buf = g.Buffer.from(b64, \"base64\");\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n  throw new Error(\"no base64 decoder available (atob / Buffer both absent)\");\n}\n\n/**\n * Resolve raw wasm bytes for the current environment. `fallbackUrl` is the\n * consumer's `new URL('./artifacts/<name>_bg.wasm', import.meta.url)` — it MUST\n * be evaluated in the consumer's module, never here.\n *\n * Resolution: explicit bytes -> explicit base64 -> explicit URL -> fs (Node) ->\n * fetch (browser/Workers/bundler). Any failure throws.\n *\n * `wasmBase64` is the UNIVERSAL strategy: a consumer that wires its generated\n * `<name>_base64` module into `opts.wasmBase64` resolves with no fetch/fs/\n * import.meta.url, which is the only path that is reliably edge-safe in\n * Cloudflare Workers + Deno + every bundler.\n */\nexport async function resolveWasmBytes(\n  opts: LoadOptions,\n  fallbackUrl: URL,\n): Promise<Uint8Array> {\n  if (opts.wasmBytes !== undefined) {\n    if (opts.wasmBytes.byteLength === 0) throw new Error(\"empty wasmBytes\");\n    return opts.wasmBytes;\n  }\n  if (opts.wasmBase64 !== undefined && opts.wasmBase64.length > 0) {\n    const bytes = decodeWasmBase64(opts.wasmBase64);\n    if (bytes.byteLength === 0) throw new Error(\"empty wasmBase64\");\n    return bytes;\n  }\n  const url = opts.wasmUrl ?? fallbackUrl;\n  const isNode =\n    typeof process !== \"undefined\" &&\n    process.versions?.node !== undefined &&\n    (url instanceof URL\n      ? url.protocol === \"file:\"\n      : String(url).startsWith(\"file:\"));\n\n  if (isNode) {\n    const fs = await import(\"node:fs/promises\" as string);\n    const buf = await fs.readFile(url as URL);\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n  const resp = await fetch(url as URL);\n  if (!resp.ok) throw new Error(`fetch wasm failed: ${resp.status}`);\n  return new Uint8Array(await resp.arrayBuffer());\n}\n\n/** A module-singleton backend registry (mirrors the setSyncEmbedder(null) pattern). */\nexport interface BackendRegistry<B> {\n  get(): B | null;\n  set(b: B | null): void;\n}\n\nexport function createBackendRegistry<B>(): BackendRegistry<B> {\n  let backend: B | null = null;\n  return {\n    get: () => backend,\n    set: (b) => {\n      backend = b;\n    },\n  };\n}\n\nexport interface EnableOptions extends LoadOptions {\n  /** Throw instead of falling back to pure-TS when the module can't load. */\n  readonly require?: boolean;\n}\n\n/**\n * Generic opt-in enable skeleton. Resolves bytes, runs the per-domain\n * `instantiate` (glue import + adapt to the domain backend), then `register`s\n * it. Returns true on success; on failure returns false (pure-TS stays active)\n * unless `require:true`.\n *\n * The `_enabled` idempotency guard stays in each consumer's `index.ts` (so the\n * lazy dynamic import of the consumer's loader/glue is skipped for default\n * users); this helper assumes the caller already decided to (re)load.\n */\nexport async function enableWasmBackend<B>(\n  opts: EnableOptions,\n  instantiate: (bytes: Uint8Array) => Promise<B>,\n  register: (b: B) => void,\n  fallbackUrl: URL,\n): Promise<boolean> {\n  try {\n    const bytes = await resolveWasmBytes(opts, fallbackUrl);\n    const backend = await instantiate(bytes);\n    register(backend);\n    return true;\n  } catch (err) {\n    if (opts.require) throw err;\n    // Debug-level so a broken artifact isn't wholly silent, without noise for\n    // the normal \"no artifact present\" path.\n    console.debug(\"[goldenmatch-wasm-runtime] enable fell back to pure-TS:\", err);\n    return false;\n  }\n}\n","/**\n * loader.ts — universal WASM byte loader + instantiation for the goldenpipe\n * planner kernel. Edge-safe: the only node:* touch is inside the shared\n * runtime's resolveWasmBytes. Resolution order (delegated): explicit bytes ->\n * base64 -> URL -> fs (Node) -> fetch. Any failure throws; index.ts turns\n * that into the pure-TS fallback (or rethrows under { require: true }).\n */\nimport {\n  resolveWasmBytes as sharedResolveWasmBytes,\n  type LoadOptions,\n} from \"goldenmatch-wasm-runtime\";\nimport type { PipeWasmBackend } from \"./backend.js\";\n\nexport type { LoadOptions };\n\nexport function resolveWasmBytes(opts: LoadOptions): Promise<Uint8Array> {\n  return sharedResolveWasmBytes(\n    opts,\n    new URL(\"./artifacts/goldenpipe_wasm_bg.wasm\", import.meta.url),\n  );\n}\n\nexport async function instantiateBackend(bytes: Uint8Array): Promise<PipeWasmBackend> {\n  const glue = (await import(\"./artifacts/goldenpipe_wasm.js\" as string)) as {\n    default: (input: { module_or_path: Uint8Array }) => Promise<unknown>;\n    resolve_json: (s: string) => string;\n    apply_decision_json: (s: string) => string;\n    evaluate_builtin_json: (s: string) => string;\n    auto_config_json: (s: string) => string;\n    skip_if_falsy_json: (s: string) => string;\n    plan_pipeline_json: (s: string) => string;\n    apply_scale_hints_json: (s: string) => string;\n    band_of_json: (s: string) => string;\n    build_repair_plan_json: (s: string) => string;\n  };\n  await glue.default({ module_or_path: bytes });\n\n  return {\n    resolveJson: (s) => glue.resolve_json(s),\n    applyDecisionJson: (s) => glue.apply_decision_json(s),\n    evaluateBuiltinJson: (s) => glue.evaluate_builtin_json(s),\n    autoConfigJson: (s) => glue.auto_config_json(s),\n    skipIfFalsyJson: (s) => glue.skip_if_falsy_json(s),\n    planPipelineJson: (s) => glue.plan_pipeline_json(s),\n    applyScaleHintsJson: (s) => glue.apply_scale_hints_json(s),\n    bandOfJson: (s) => glue.band_of_json(s),\n    buildRepairPlanJson: (s) => glue.build_repair_plan_json(s),\n  };\n}\n","/**\n * Core data models — port of goldenpipe/models/{context,config,stage}.py.\n *\n * Edge-safe: no `node:` imports. Data flows as `Row[]` (arrays of plain row\n * objects) instead of Polars DataFrames — the TS siblings all operate on\n * `Row[]`.\n */\n\n/** A single tabular record. Mirrors the siblings' `Row` type. */\nexport type Row = Record<string, unknown>;\n\n// ---------------------------------------------------------------------------\n// Status enums (mirrors Python str-Enums; kept as string-literal unions in TS)\n// ---------------------------------------------------------------------------\n\nexport const StageStatus = {\n  SUCCESS: \"success\",\n  SKIPPED: \"skipped\",\n  FAILED: \"failed\",\n} as const;\nexport type StageStatus = (typeof StageStatus)[keyof typeof StageStatus];\n\nexport const PipeStatus = {\n  SUCCESS: \"success\",\n  PARTIAL: \"partial\",\n  FAILED: \"failed\",\n} as const;\nexport type PipeStatus = (typeof PipeStatus)[keyof typeof PipeStatus];\n\n// ---------------------------------------------------------------------------\n// Decision — routing instruction from a stage to the framework\n// ---------------------------------------------------------------------------\n\nexport interface Decision {\n  /** Stage names to drop from the remaining plan. */\n  skip: string[];\n  /** Abort the whole pipeline after this stage. */\n  abort: boolean;\n  /** Stage names to prepend to the remaining plan. */\n  insert: string[];\n  /** Human-readable explanation, surfaced in `reasoning._router`. */\n  reason: string;\n}\n\n/** Construct a Decision with Python-parity defaults. */\nexport function makeDecision(input?: Partial<Decision>): Decision {\n  return {\n    skip: input?.skip ?? [],\n    abort: input?.abort ?? false,\n    insert: input?.insert ?? [],\n    reason: input?.reason ?? \"\",\n  };\n}\n\n// ---------------------------------------------------------------------------\n// StageResult — returned by every stage's run()\n// ---------------------------------------------------------------------------\n\nexport interface StageResult {\n  status: StageStatus;\n  decision?: Decision | null;\n  error?: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// PipeContext — the object flowing through the pipeline (mutated in place)\n// ---------------------------------------------------------------------------\n\nexport interface PipeContext {\n  /** Working data. `null` until the load stage populates it. */\n  df: Row[] | null;\n  artifacts: Record<string, unknown>;\n  metadata: Record<string, unknown>;\n  timing: Record<string, number>;\n  reasoning: Record<string, string>;\n  /** Per-stage config made available to the adapter by the runner. */\n  stageConfig: Record<string, unknown>;\n}\n\nexport function makePipeContext(input?: Partial<PipeContext>): PipeContext {\n  return {\n    df: input?.df ?? null,\n    artifacts: input?.artifacts ?? {},\n    metadata: input?.metadata ?? {},\n    timing: input?.timing ?? {},\n    reasoning: input?.reasoning ?? {},\n    stageConfig: input?.stageConfig ?? {},\n  };\n}\n\n// ---------------------------------------------------------------------------\n// PipeResult — final output returned to the caller\n// ---------------------------------------------------------------------------\n\nexport interface PipeResult {\n  status: PipeStatus;\n  source: string;\n  inputRows: number;\n  stages: Record<string, StageResult>;\n  artifacts: Record<string, unknown>;\n  skipped: string[];\n  errors: string[];\n  reasoning: Record<string, string>;\n  timing: Record<string, number>;\n}\n\n// ---------------------------------------------------------------------------\n// Stage configuration models (mirrors models/config.py Pydantic models)\n// ---------------------------------------------------------------------------\n\nexport type OnError = \"continue\" | \"abort\";\n\nexport interface StageSpec {\n  name?: string | undefined;\n  use: string;\n  needs: string[];\n  skipIf?: string | undefined;\n  onError: OnError;\n  config: Record<string, unknown>;\n}\n\n/** Normalize a raw stage spec (object or bare string) into a full StageSpec. */\nexport function makeStageSpec(input: string | Partial<StageSpec> & { use: string }): StageSpec {\n  if (typeof input === \"string\") {\n    return { use: input, needs: [], onError: \"continue\", config: {} };\n  }\n  return {\n    ...(input.name !== undefined ? { name: input.name } : {}),\n    use: input.use,\n    needs: input.needs ?? [],\n    ...(input.skipIf !== undefined ? { skipIf: input.skipIf } : {}),\n    onError: input.onError ?? \"continue\",\n    config: input.config ?? {},\n  };\n}\n\nexport interface PipelineConfig {\n  pipeline: string;\n  source?: string | undefined;\n  output?: string | undefined;\n  /** Stages may be bare strings or full specs; normalize via `makeStageSpec`. */\n  stages: Array<string | StageSpec>;\n  decisions: string[];\n}\n\nexport function makePipelineConfig(\n  input: Partial<PipelineConfig> & { pipeline: string; stages: Array<string | StageSpec> },\n): PipelineConfig {\n  return {\n    pipeline: input.pipeline,\n    ...(input.source !== undefined ? { source: input.source } : {}),\n    ...(input.output !== undefined ? { output: input.output } : {}),\n    stages: input.stages,\n    decisions: input.decisions ?? [],\n  };\n}\n\n// ---------------------------------------------------------------------------\n// Stage protocol + StageInfo + @stage factory (mirrors models/stage.py)\n// ---------------------------------------------------------------------------\n\nexport interface StageInfo {\n  name: string;\n  produces: string[];\n  consumes: string[];\n}\n\n/**\n * Full contract for pipeline stages. `run` is async so it can await the\n * async GoldenMatch `dedupe` adapter.\n */\nexport interface Stage {\n  readonly info: StageInfo;\n  validate(ctx: PipeContext): void | Promise<void>;\n  run(ctx: PipeContext): Promise<StageResult>;\n  rollback?: ((ctx: PipeContext) => void | Promise<void>) | null;\n}\n\n/**\n * Wrap a plain async function into a Stage. Port of the Python `@stage`\n * decorator + `_FunctionStage`.\n */\nexport function stage(\n  info: StageInfo,\n  fn: (ctx: PipeContext) => Promise<StageResult> | StageResult,\n): Stage {\n  return {\n    info,\n    validate(_ctx: PipeContext): void {\n      /* function stages have no validation hook */\n    },\n    async run(ctx: PipeContext): Promise<StageResult> {\n      return fn(ctx);\n    },\n    rollback: null,\n  };\n}\n","/**\n * Column context — shared column metadata flowing between pipeline stages.\n * Port of goldenpipe/models/column_context.py.\n *\n * Built by GoldenCheck (scan), enriched by GoldenFlow (transform), consumed by\n * GoldenMatch (auto-config) to avoid re-profiling.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { Row } from \"./models.js\";\n\n// ---------------------------------------------------------------------------\n// Enums (string-literal unions in TS)\n// ---------------------------------------------------------------------------\n\nexport const ColumnType = {\n  NAME: \"name\",\n  EMAIL: \"email\",\n  PHONE: \"phone\",\n  DATE: \"date\",\n  GEO: \"geo\",\n  ADDRESS: \"address\",\n  ZIP: \"zip\",\n  IDENTIFIER: \"identifier\",\n  NUMERIC: \"numeric\",\n  STRING: \"string\",\n  DESCRIPTION: \"description\",\n} as const;\nexport type ColumnType = (typeof ColumnType)[keyof typeof ColumnType];\n\nexport const CardinalityBand = {\n  UNSET: \"\",\n  LOW: \"low\",\n  MID: \"mid\",\n  HIGH: \"high\",\n  SKIP: \"skip\",\n} as const;\nexport type CardinalityBand = (typeof CardinalityBand)[keyof typeof CardinalityBand];\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Floor — below this, the signal is too weak to act on. */\nexport const MIN_CONFIDENCE = 0.3;\n\n/** Identifier types — columns that identify an entity (used for matching). */\nconst IDENTIFIER_TYPES: ReadonlySet<ColumnType> = new Set([\n  ColumnType.NAME,\n  ColumnType.EMAIL,\n  ColumnType.PHONE,\n]);\n\n/** Types that should never be identifiers regardless of cardinality. */\nconst NEVER_IDENTIFIER_TYPES: ReadonlySet<ColumnType> = new Set([\n  ColumnType.DATE,\n  ColumnType.NUMERIC,\n  ColumnType.IDENTIFIER,\n]);\n\n// ---------------------------------------------------------------------------\n// ColumnContext\n// ---------------------------------------------------------------------------\n\nexport interface ColumnContext {\n  name: string;\n  inferredType: ColumnType;\n  nullRate: number;\n  cardinality: number;\n  isIdentifier: boolean;\n  transformsApplied: string[];\n  findings: string[];\n  confidence: number;\n  cardinalityBand: CardinalityBand;\n}\n\n/** Construct a ColumnContext, validating invariants (port of `__post_init__`). */\nexport function makeColumnContext(\n  input: Partial<ColumnContext> & { name: string },\n): ColumnContext {\n  const ctx: ColumnContext = {\n    name: input.name,\n    inferredType: input.inferredType ?? ColumnType.STRING,\n    nullRate: input.nullRate ?? 0.0,\n    cardinality: input.cardinality ?? 0,\n    isIdentifier: input.isIdentifier ?? false,\n    transformsApplied: input.transformsApplied ?? [],\n    findings: input.findings ?? [],\n    confidence: input.confidence ?? 0.5,\n    cardinalityBand: input.cardinalityBand ?? CardinalityBand.UNSET,\n  };\n  if (!ctx.name) {\n    throw new Error(\"ColumnContext.name must be non-empty\");\n  }\n  if (!(ctx.nullRate >= 0.0 && ctx.nullRate <= 1.0)) {\n    throw new Error(`nullRate must be in [0, 1], got ${ctx.nullRate}`);\n  }\n  if (ctx.cardinality < 0) {\n    throw new Error(`cardinality must be >= 0, got ${ctx.cardinality}`);\n  }\n  if (!(ctx.confidence >= 0.0 && ctx.confidence <= 1.0)) {\n    throw new Error(`confidence must be in [0, 1], got ${ctx.confidence}`);\n  }\n  return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Name-based classification (regex heuristics)\n// ---------------------------------------------------------------------------\n\nconst NAME_PATTERNS =\n  /(^name$|first.?name|last.?name|full.?name|fname|lname|surname|given.?name|middle)/i;\nconst EMAIL_PATTERNS = /(email|e.?mail|email.?addr)/i;\nconst PHONE_PATTERNS = /(phone|tel|mobile|fax|cell)/i;\nconst ZIP_PATTERNS = /(zip|postal|postcode|zip.?code)/i;\nconst ADDRESS_PATTERNS = /(address|street|addr|line.?1|line.?2)/i;\nconst GEO_PATTERNS = /(city|^state$|state.?cd|^country$|province|region|county)/i;\nconst DATE_PATTERNS = /(date|_dt$|_date$|registr|created|updated|birth.?d|dob)/i;\nconst ID_PATTERNS = /(^id$|^key$|^code$|^sku$|_id$|_key$)/i;\n\n/** Classify a column by name pattern matching. Returns null when no match. */\nexport function classifyByName(colName: string): ColumnType | null {\n  if (DATE_PATTERNS.test(colName)) return ColumnType.DATE;\n  if (EMAIL_PATTERNS.test(colName)) return ColumnType.EMAIL;\n  if (ZIP_PATTERNS.test(colName)) return ColumnType.ZIP;\n  if (GEO_PATTERNS.test(colName)) return ColumnType.GEO;\n  if (ADDRESS_PATTERNS.test(colName)) return ColumnType.ADDRESS;\n  if (PHONE_PATTERNS.test(colName)) return ColumnType.PHONE;\n  if (NAME_PATTERNS.test(colName)) return ColumnType.NAME;\n  if (ID_PATTERNS.test(colName)) return ColumnType.IDENTIFIER;\n  return null;\n}\n\n/** Map a profiler dtype string to a ColumnType. */\nexport function normalizeDtype(rawType: string): ColumnType {\n  const t = rawType.toLowerCase().trim();\n  if (t.includes(\"int\") || t.includes(\"float\")) return ColumnType.NUMERIC;\n  if (t.includes(\"date\") || t.includes(\"time\")) return ColumnType.DATE;\n  if (t.includes(\"bool\")) return ColumnType.STRING;\n  return ColumnType.STRING;\n}\n\n// ---------------------------------------------------------------------------\n// Cardinality IQR banding\n// ---------------------------------------------------------------------------\n\n/** Classify each column's cardinality as low/mid/high using IQR quartiles. */\nfunction computeCardinalityBands(contexts: ColumnContext[]): void {\n  const stringContexts = contexts.filter(\n    (c) => c.inferredType !== ColumnType.NUMERIC && c.inferredType !== ColumnType.DATE,\n  );\n  if (stringContexts.length < 3) {\n    return;\n  }\n\n  const cardinalities = stringContexts.map((c) => c.cardinality).sort((a, b) => a - b);\n  const n = cardinalities.length;\n  // Python uses integer-division indices: q1 = card[n // 4], q3 = card[3 * n // 4].\n  const q1 = cardinalities[Math.floor(n / 4)]!;\n  const q3 = cardinalities[Math.floor((3 * n) / 4)]!;\n\n  for (const ctx of contexts) {\n    if (ctx.inferredType === ColumnType.NUMERIC || ctx.inferredType === ColumnType.DATE) {\n      ctx.cardinalityBand = CardinalityBand.SKIP;\n      continue;\n    }\n    if (ctx.cardinality <= q1) {\n      ctx.cardinalityBand = CardinalityBand.LOW;\n    } else if (ctx.cardinality >= q3) {\n      ctx.cardinalityBand = CardinalityBand.HIGH;\n    } else {\n      ctx.cardinalityBand = CardinalityBand.MID;\n    }\n  }\n}\n\n/** Refine `isIdentifier` using cardinality band as a second signal. */\nfunction applyCardinalitySignal(contexts: ColumnContext[]): void {\n  for (const ctx of contexts) {\n    if (NEVER_IDENTIFIER_TYPES.has(ctx.inferredType)) {\n      ctx.isIdentifier = false;\n      continue;\n    }\n\n    const hasNameSignal = IDENTIFIER_TYPES.has(ctx.inferredType);\n    const band = ctx.cardinalityBand;\n\n    if (hasNameSignal && band === CardinalityBand.MID) {\n      ctx.isIdentifier = true;\n      ctx.confidence = Math.min(ctx.confidence + 0.15, 1.0);\n    } else if (hasNameSignal && band === CardinalityBand.LOW) {\n      ctx.isIdentifier = false;\n      ctx.confidence = Math.max(ctx.confidence - 0.2, MIN_CONFIDENCE);\n    } else if (hasNameSignal && band === CardinalityBand.HIGH) {\n      ctx.isIdentifier = true;\n      ctx.confidence = Math.min(ctx.confidence + 0.05, 1.0);\n    } else if (!hasNameSignal && band === CardinalityBand.MID) {\n      if (ctx.inferredType === ColumnType.STRING) {\n        ctx.isIdentifier = true;\n        ctx.confidence = 0.5;\n      }\n    } else if (!hasNameSignal && band === CardinalityBand.LOW) {\n      ctx.isIdentifier = false;\n    } else if (!hasNameSignal && band === CardinalityBand.HIGH) {\n      ctx.isIdentifier = false;\n    }\n\n    if (ctx.nullRate > 0.3 && ctx.isIdentifier) {\n      ctx.confidence = Math.max(ctx.confidence - 0.1, MIN_CONFIDENCE);\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Context builders\n// ---------------------------------------------------------------------------\n\n/** Minimal shape of a GoldenCheck ColumnProfile that we consume. */\nexport interface ColumnProfileLike {\n  name: string;\n  inferredType?: string;\n  nullPct?: number;\n  uniqueCount?: number;\n}\n\n/** Minimal shape of a GoldenCheck finding that we consume. */\nexport interface FindingLike {\n  column?: string;\n  check?: string;\n  message?: string;\n}\n\n/**\n * Build ColumnContexts from GoldenCheck scan results. Combines three signals:\n * 1. Column-name heuristics (regex patterns).\n * 2. Profile data (null rate, cardinality, dtype).\n * 3. Cardinality IQR bands.\n */\nexport function buildContextsFromCheck(\n  findings: readonly FindingLike[],\n  columnProfiles: readonly ColumnProfileLike[] | null | undefined,\n): ColumnContext[] {\n  if (!columnProfiles || columnProfiles.length === 0) {\n    return [];\n  }\n\n  const contexts = new Map<string, ColumnContext>();\n  for (const cp of columnProfiles) {\n    let semanticType = classifyByName(cp.name);\n    if (!semanticType) {\n      semanticType = normalizeDtype(cp.inferredType ?? \"string\");\n    }\n    const ctx = makeColumnContext({\n      name: cp.name,\n      inferredType: semanticType,\n      nullRate: cp.nullPct ?? 0.0,\n      cardinality: cp.uniqueCount ?? 0,\n      isIdentifier: IDENTIFIER_TYPES.has(semanticType),\n      confidence: semanticType !== ColumnType.STRING ? 0.8 : 0.4,\n    });\n    contexts.set(cp.name, ctx);\n  }\n\n  const contextList = [...contexts.values()];\n  computeCardinalityBands(contextList);\n  applyCardinalitySignal(contextList);\n\n  for (const f of findings) {\n    const colName = f.column;\n    if (!colName || !contexts.has(colName)) continue;\n    const ctx = contexts.get(colName)!;\n    const check = f.check ?? \"\";\n    const message = String(f.message ?? \"\").slice(0, 80);\n    ctx.findings.push(`${check}: ${message}`);\n  }\n\n  return contextList;\n}\n\n/** Minimal shape of a GoldenFlow manifest record we consume. */\nexport interface ManifestRecordLike {\n  column?: string;\n  transform?: string;\n  affectedRows?: number;\n}\n\n/** Enrich ColumnContexts with GoldenFlow transform information. */\nexport function enrichContextsFromFlow(\n  contexts: ColumnContext[],\n  records: readonly ManifestRecordLike[] | null | undefined,\n): void {\n  if (!records) return;\n  const lookup = new Map(contexts.map((c) => [c.name, c]));\n\n  for (const record of records) {\n    const colName = record.column;\n    const transform = record.transform;\n    const affected = record.affectedRows ?? 0;\n    if (!colName || !lookup.has(colName)) continue;\n    const ctx = lookup.get(colName)!;\n    if (affected > 0 && transform) {\n      ctx.transformsApplied.push(transform);\n    }\n    if (transform && transform.toLowerCase().includes(\"date\")) {\n      ctx.inferredType = ColumnType.DATE;\n      ctx.isIdentifier = false;\n      ctx.confidence = 0.95;\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Cardinality helper used by the match adapter (counts distinct non-null vals)\n// ---------------------------------------------------------------------------\n\nexport function distinctNonNull(rows: readonly Row[], col: string): number {\n  const seen = new Set<unknown>();\n  for (const row of rows) {\n    const v = row[col];\n    if (v === null || v === undefined || v === \"\") continue;\n    seen.add(v);\n  }\n  return seen.size;\n}\n\nexport function nullRateOf(rows: readonly Row[], col: string): number {\n  if (rows.length === 0) return 1.0;\n  let nulls = 0;\n  for (const row of rows) {\n    const v = row[col];\n    if (v === null || v === undefined || v === \"\") nulls += 1;\n  }\n  return nulls / rows.length;\n}\n","/**\n * Stage registry — register and retrieve stages.\n * Port of goldenpipe/engine/registry.py.\n *\n * Unlike the Python version, which discovers stages via importlib entry points,\n * the TS registry is STATIC: built-in stages (load, goldencheck.scan,\n * goldenflow.transform, goldenmatch.dedupe) are registered explicitly in\n * `defaultRegistry()`. Custom stages can be added with `register()`.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { Stage, StageInfo } from \"../models.js\";\n\nexport class StageRegistry {\n  private readonly stages = new Map<string, Stage>();\n\n  /** Register a stage under its `info.name`. */\n  register(stage: Stage): void {\n    this.stages.set(stage.info.name, stage);\n  }\n\n  /** Retrieve a stage by name. Throws if not found. */\n  get(name: string): Stage {\n    const stage = this.stages.get(name);\n    if (stage === undefined) {\n      throw new Error(`Stage '${name}' not found in registry`);\n    }\n    return stage;\n  }\n\n  /** True when a stage with this name is registered. */\n  has(name: string): boolean {\n    return this.stages.has(name);\n  }\n\n  /** Return `{ name: StageInfo }` for all registered stages. */\n  listAll(): Record<string, StageInfo> {\n    const out: Record<string, StageInfo> = {};\n    for (const [name, s] of this.stages) {\n      out[name] = s.info;\n    }\n    return out;\n  }\n}\n\n/**\n * Build a registry with the built-in suite stages registered. This is the TS\n * analogue of Python's entry-point discovery — wiring goldencheck.scan,\n * goldenflow.transform, and goldenmatch.dedupe (+ the built-in `load` stage).\n */\nexport function defaultRegistry(): StageRegistry {\n  const registry = new StageRegistry();\n  // Imported here (not at module top) to keep the dependency graph explicit\n  // and avoid a cycle: adapters import models + engine helpers, not registry.\n  return registry;\n}\n","/**\n * backend.ts — opt-in WASM planner-kernel backend registry. Edge-safe: no\n * node:* here. The active backend (if any) is consulted by the five planner\n * seams (Resolver.resolve, Router.apply, the decision gates, autoConfig, the\n * runner's isFalsy) via getPipeWasmBackend(); everything else stays pure-TS.\n * Mirrors goldenflow's setFlowWasmBackend module-singleton for test isolation.\n */\n\n/**\n * A WASM-backed planner kernel over goldenpipe-core's five JSON wrappers\n * (see goldenpipe-wasm/src/lib.rs). Byte-identical to the Python/native\n * kernels by construction — a thin wasm-bindgen shim over the SAME\n * goldenpipe-core::json module. All five are string -> string.\n */\nexport interface PipeWasmBackend {\n  resolveJson(input: string): string;\n  applyDecisionJson(input: string): string;\n  evaluateBuiltinJson(input: string): string;\n  autoConfigJson(input: string): string;\n  skipIfFalsyJson(input: string): string;\n  planPipelineJson(input: string): string;\n  applyScaleHintsJson(input: string): string;\n  bandOfJson(input: string): string;\n  buildRepairPlanJson(input: string): string;\n}\n\nimport { createBackendRegistry } from \"goldenmatch-wasm-runtime\";\n\nconst _registry = createBackendRegistry<PipeWasmBackend>();\n\nexport function setPipeWasmBackend(b: PipeWasmBackend | null): void {\n  _registry.set(b);\n}\n\nexport function getPipeWasmBackend(): PipeWasmBackend | null {\n  return _registry.get();\n}\n","/**\n * plannerJson.ts — the serialize -> backend -> deserialize side of the five\n * planner seams. Each `*ViaWasm` fn serializes the live TS inputs to\n * goldenpipe-core's JSON shapes, calls the registered WASM backend, and\n * reconstructs the SAME rich TS objects the pure-TS planner returns (rehydrating\n * live `Stage` handles from the registry, WiringError, router notes, etc.).\n *\n * Called ONLY from the guarded public entries (Resolver.resolve, Router.apply,\n * the decision gates, computeAutoConfig, the runner's isFalsy call site) when a\n * backend is registered. The pure-core (`*Pure`) bodies never route here, so\n * there is no recursion.\n *\n * NOTE on the import cycle: resolver.ts imports `resolveViaWasm` from here, and\n * here we import the `WiringError` VALUE from resolver.ts. This is a 2-module\n * ESM value cycle, but every reference is inside a function body (never at\n * module-evaluation time), so ESM live bindings resolve it safely. The type\n * deps (PlannedStage/ExecutionPlan) use `import type` so they carry zero runtime\n * weight.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport { WiringError, AmbiguousProducerError, CycleError, UnknownNeedError } from \"../engine/resolver.js\";\nimport type { PlannedStage, ExecutionPlan } from \"../engine/resolver.js\";\nimport { makeStageSpec, makeDecision, makePipelineConfig } from \"../models.js\";\nimport type { Decision, PipeContext, PipelineConfig, StageSpec } from \"../models.js\";\nimport type { StageRegistry } from \"../engine/registry.js\";\nimport type { PipeWasmBackend } from \"./backend.js\";\n\n/** Reconstruct the pure-TS error surface from goldenpipe-core's `err` payload. */\nfunction throwFromErr(err: { kind: string; [k: string]: unknown }): never {\n  if (err.kind === \"missing_producer\") {\n    throw new WiringError(\n      `Stage '${String(err.stage)}' consumes '${String(err.artifact)}' but no prior stage produces it.`,\n      { stage: String(err.stage), artifact: String(err.artifact) },\n    );\n  }\n  if (err.kind === \"ambiguous_producer\") {\n    throw new AmbiguousProducerError(String(err.artifact), (err.producers as string[]) ?? []);\n  }\n  if (err.kind === \"cycle\") {\n    throw new CycleError((err.stages as string[]) ?? []);\n  }\n  if (err.kind === \"unknown_need\") {\n    throw new UnknownNeedError(String(err.stage), (err.needs as string[]) ?? []);\n  }\n  if (err.kind === \"unknown_stage\") {\n    throw new Error(`Stage '${String(err.use)}' not found in registry`);\n  }\n  // Includes \"parse\" and any future kind.\n  throw new Error(`goldenpipe-wasm error kind '${err.kind}': ${JSON.stringify(err)}`);\n}\n\ninterface SerStage {\n  name: string;\n  use: string;\n  config?: Record<string, unknown>;\n  on_error?: string;\n  skip_if?: string;\n}\n\nexport function resolveViaWasm(\n  config: PipelineConfig,\n  registry: StageRegistry,\n  b: PipeWasmBackend,\n): ExecutionPlan {\n  const all = registry.listAll(); // Record<name, StageInfo> — real registry keys by name, so key===name.\n  const stages = Object.entries(all).map(([name, i]) => ({\n    key: name,\n    name: i.name,\n    produces: i.produces,\n    consumes: i.consumes,\n  }));\n  const out = JSON.parse(b.resolveJson(JSON.stringify({ config, stages }))) as\n    | { ok: { stages: SerStage[] } }\n    | { err: { kind: string; [k: string]: unknown } };\n  if (\"err\" in out && out.err) throwFromErr(out.err);\n  const okStages = (out as { ok: { stages: SerStage[] } }).ok.stages;\n  const planned: PlannedStage[] = okStages.map((s) => ({\n    name: s.name,\n    stage: registry.get(s.use), // re-correlate to the live stage\n    spec: makeStageSpec({\n      use: s.use,\n      name: s.name,\n      onError: (s.on_error ?? \"continue\") as StageSpec[\"onError\"],\n      ...(s.skip_if !== undefined ? { skipIf: s.skip_if } : {}),\n    }),\n    config: s.config ?? {},\n  }));\n  return { stages: planned };\n}\n\nexport function applyDecisionViaWasm(\n  decision: Decision,\n  remaining: PlannedStage[],\n  ctx: PipeContext,\n  registry: StageRegistry,\n  b: PipeWasmBackend,\n): PlannedStage[] {\n  const remSer: SerStage[] = remaining.map((p) => ({\n    name: p.name,\n    use: p.spec.use,\n    config: p.config,\n    on_error: p.spec.onError,\n    ...(p.spec.skipIf !== undefined ? { skip_if: p.spec.skipIf } : {}),\n  }));\n  const out = JSON.parse(\n    b.applyDecisionJson(JSON.stringify({ decision, remaining: remSer })),\n  ) as { remaining: SerStage[]; router_note?: string };\n  const byName = new Map(remaining.map((p) => [p.name, p]));\n  const next: PlannedStage[] = out.remaining.map((s) => {\n    const orig = byName.get(s.name);\n    if (orig) return orig; // kept stage: preserve the ORIGINAL live PlannedStage\n    // inserted stage: rehydrate a live handle from the registry\n    return {\n      name: s.name,\n      stage: registry.get(s.use),\n      spec: makeStageSpec({\n        use: s.use,\n        name: s.name,\n        onError: (s.on_error ?? \"continue\") as StageSpec[\"onError\"],\n      }),\n      config: s.config ?? {},\n    };\n  });\n  if (out.router_note !== undefined) ctx.reasoning[\"_router\"] = out.router_note;\n  return next;\n}\n\nexport function evaluateBuiltinViaWasm(\n  name: string,\n  ctx: PipeContext,\n  b: PipeWasmBackend,\n): Decision | null {\n  const out = JSON.parse(\n    b.evaluateBuiltinJson(\n      JSON.stringify({ name, ctx: { artifacts: ctx.artifacts, metadata: ctx.metadata } }),\n    ),\n  ) as { skip: string[]; abort: boolean; insert: string[]; reason: string } | null;\n  if (out === null) return null;\n  return makeDecision({ skip: out.skip, abort: out.abort, insert: out.insert, reason: out.reason });\n}\n\nexport function autoConfigViaWasm(\n  registry: StageRegistry,\n  identityOpts: Record<string, unknown>,\n  b: PipeWasmBackend,\n): PipelineConfig {\n  const available = Object.keys(registry.listAll());\n  const out = JSON.parse(\n    b.autoConfigJson(JSON.stringify({ available, identity_opts: identityOpts })),\n  ) as {\n    pipeline: string;\n    stages: Array<{ use: string; needs?: string[]; on_error?: string; config?: Record<string, unknown> }>;\n    decisions?: string[];\n  };\n  const stages: StageSpec[] = out.stages.map((s) =>\n    makeStageSpec({\n      use: s.use,\n      needs: s.needs ?? [],\n      onError: (s.on_error ?? \"continue\") as StageSpec[\"onError\"],\n      config: s.config ?? {},\n    }),\n  );\n  return makePipelineConfig({ pipeline: out.pipeline, stages, decisions: out.decisions ?? [] });\n}\n\nexport function skipIfFalsyViaWasm(value: unknown, b: PipeWasmBackend): boolean {\n  return JSON.parse(b.skipIfFalsyJson(JSON.stringify(value))) as boolean;\n}\n","/**\n * Pipeline resolver — build an ExecutionPlan and validate wiring.\n * Port of goldenpipe/engine/resolver.py.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { PipelineConfig, Stage, StageSpec } from \"../models.js\";\nimport { makeStageSpec } from \"../models.js\";\nimport type { StageRegistry } from \"./registry.js\";\nimport { getPipeWasmBackend } from \"../wasm/backend.js\";\nimport { resolveViaWasm } from \"../wasm/plannerJson.js\";\n\n/** A consumed artifact no stage (nor the `df` seed) produces (spec: MissingProducer).\n * Name retained for back-compat with host `catch (WiringError)` sites. */\nexport class WiringError extends Error {\n  stage?: string;\n  artifact?: string;\n  /** legacy alias for {@link artifact}. */\n  get missing(): string | undefined {\n    return this.artifact;\n  }\n  constructor(message: string, extra?: { stage: string; artifact: string }) {\n    super(message);\n    this.name = \"WiringError\";\n    if (extra) {\n      this.stage = extra.stage;\n      this.artifact = extra.artifact;\n    }\n  }\n}\n\nexport class AmbiguousProducerError extends Error {\n  constructor(public artifact: string, public producers: string[]) {\n    super(`Artifact '${artifact}' has ambiguous producers: ${producers.join(\", \")}`);\n    this.name = \"AmbiguousProducerError\";\n  }\n}\n\nexport class CycleError extends Error {\n  constructor(public stages: string[]) {\n    super(`Dependency cycle among stages: ${stages.join(\", \")}`);\n    this.name = \"CycleError\";\n  }\n}\n\nexport class UnknownNeedError extends Error {\n  constructor(public stage: string, public needs: string[]) {\n    super(`Stage '${stage}' needs unknown stage(s): ${needs.join(\", \")}`);\n    this.name = \"UnknownNeedError\";\n  }\n}\n\nexport interface PlannedStage {\n  name: string;\n  stage: Stage;\n  spec: StageSpec;\n  config: Record<string, unknown>;\n}\n\nexport interface ExecutionPlan {\n  stages: PlannedStage[];\n}\n\ninterface ResolveNode {\n  pname: string;\n  use: string;\n  produces: string[];\n  consumes: string[];\n  needs: string[];\n  planned: PlannedStage;\n}\n\n/**\n * Pure-TS core of {@link Resolver.resolve} — the dependency-DAG planner (spec §3.1),\n * guard-free so plannerJsonPure can call it without re-entering the WASM reroute guard.\n */\nexport function resolvePure(config: PipelineConfig, registry: StageRegistry): ExecutionPlan {\n  // 1. Build the ordered node list (load prepended; registry.get throws -> unknown_stage).\n  const nodes: ResolveNode[] = [];\n  const hasLoad = registry.has(\"load\");\n  if (hasLoad) {\n    const load = registry.get(\"load\");\n    nodes.push({\n      pname: \"load\",\n      use: \"load\",\n      produces: [...load.info.produces],\n      consumes: [],\n      needs: [],\n      planned: { name: \"load\", stage: load, spec: makeStageSpec(\"load\"), config: {} },\n    });\n  }\n  for (const rawSpec of config.stages) {\n    const spec = makeStageSpec(rawSpec);\n    const stageObj = registry.get(spec.use);\n    const pname = spec.name ?? stageObj.info.name;\n    nodes.push({\n      pname,\n      use: spec.use,\n      produces: [...stageObj.info.produces],\n      consumes: [...stageObj.info.consumes],\n      needs: [...spec.needs],\n      planned: { name: pname, stage: stageObj, spec, config: spec.config },\n    });\n  }\n  const n = nodes.length;\n  const seedDf = !hasLoad;\n\n  const keyToIdx = (k: string): number => nodes.findIndex((nd) => nd.use === k);\n\n  const edges = new Set<string>(); // \"a>b\"\n  const addEdge = (a: number, b: number) => edges.add(`${a}>${b}`);\n  const hasEdge = (a: number, b: number) => edges.has(`${a}>${b}`);\n\n  // 2. needs edges (reported before missing/ambiguous).\n  // (`!` on nodes[...] is compile-time only — indices are in-bounds by construction;\n  //  required by tsconfig `noUncheckedIndexedAccess`. Runtime behavior is unchanged.)\n  for (let i = 0; i < n; i++) {\n    for (const need of nodes[i]!.needs) {\n      const j = keyToIdx(need);\n      if (j < 0) throw new UnknownNeedError(nodes[i]!.pname, [need]);\n      addEdge(j, i); // self-edge -> Cycle in step 4\n    }\n  }\n\n  // 3. Guarded sole-producer edges. First violation (by index, then consumes order) wins.\n  const producedBefore = (i: number, x: string): boolean => {\n    if (seedDf && x === \"df\") return true;\n    for (let j = 0; j < i; j++) if (nodes[j]!.produces.includes(x)) return true;\n    return false;\n  };\n  for (let i = 0; i < n; i++) {\n    for (const dep of nodes[i]!.consumes) {\n      if (producedBefore(i, dep)) continue;\n      const later: number[] = [];\n      for (let j = i + 1; j < n; j++) if (nodes[j]!.produces.includes(dep)) later.push(j);\n      if (later.length === 0) {\n        throw new WiringError(\n          `Stage '${nodes[i]!.pname}' consumes '${dep}' but no prior stage produces it.`,\n          { stage: nodes[i]!.pname, artifact: dep },\n        );\n      } else if (later.length === 1) {\n        addEdge(later[0]!, i);\n      } else {\n        // pinned by ANY must-precede edge (needs OR an earlier-consumes sole-producer edge):\n        // exactly one -> deterministic binding; else AmbiguousProducer.\n        const pinned = later.filter((j) => hasEdge(j, i)).length;\n        if (pinned !== 1) {\n          throw new AmbiguousProducerError(dep, later.map((j) => nodes[j]!.use));\n        }\n      }\n    }\n  }\n\n  // 4. Stable Kahn topo-sort keyed by config index (min-heap emulated by sorted array).\n  const indeg = new Array(n).fill(0);\n  const adj: number[][] = Array.from({ length: n }, () => []);\n  for (const e of edges) {\n    const [a, b] = e.split(\">\").map(Number) as [number, number];\n    if (a === b) {\n      indeg[b] += 1; // self-edge -> stuck node, reported by the ascending-index fall-through\n      continue;\n    }\n    adj[a]!.push(b);\n    indeg[b] += 1;\n  }\n  const ready: number[] = [];\n  for (let i = 0; i < n; i++) if (indeg[i] === 0) ready.push(i);\n  ready.sort((x, y) => x - y);\n  const order: number[] = [];\n  while (ready.length > 0) {\n    const u = ready.shift() as number; // smallest config index\n    order.push(u);\n    for (const v of adj[u]!) {\n      indeg[v] -= 1;\n      if (indeg[v] === 0) {\n        let lo = 0;\n        while (lo < ready.length && ready[lo]! < v) lo++;\n        ready.splice(lo, 0, v);\n      }\n    }\n  }\n  if (order.length !== n) {\n    const cyc: string[] = [];\n    for (let i = 0; i < n; i++) if (indeg[i] > 0) cyc.push(nodes[i]!.pname);\n    throw new CycleError(cyc);\n  }\n\n  // 5. Emit in sorted order.\n  return { stages: order.map((i) => nodes[i]!.planned) };\n}\n\nexport const Resolver = {\n  /**\n   * Resolve a config + registry into an ordered ExecutionPlan. Auto-prepends\n   * the built-in `load` stage when available and validates that every stage's\n   * `consumes` is produced by an earlier stage.\n   *\n   * Routes through the registered WASM planner backend when one is enabled;\n   * otherwise runs the pure-TS core.\n   */\n  resolve(config: PipelineConfig, registry: StageRegistry): ExecutionPlan {\n    const b = getPipeWasmBackend();\n    if (b) return resolveViaWasm(config, registry, b);\n    return resolvePure(config, registry);\n  },\n};\n","/**\n * Decision router — apply routing decisions to the remaining execution plan.\n * Port of goldenpipe/engine/router.py.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { Decision, PipeContext } from \"../models.js\";\nimport { makeStageSpec } from \"../models.js\";\nimport type { StageRegistry } from \"./registry.js\";\nimport type { PlannedStage } from \"./resolver.js\";\nimport { getPipeWasmBackend } from \"../wasm/backend.js\";\nimport { applyDecisionViaWasm } from \"../wasm/plannerJson.js\";\n\n/**\n * Pure-TS core of {@link Router.apply}. Guard-free so plannerJsonPure can call\n * it without re-entering the WASM reroute (no recursion).\n */\nexport function applyPure(\n  decision: Decision,\n  remaining: PlannedStage[],\n  ctx: PipeContext,\n  registry: StageRegistry,\n): PlannedStage[] {\n  {\n    if (decision.reason) {\n      ctx.reasoning[\"_router\"] = decision.reason;\n    }\n\n    if (decision.abort) {\n      ctx.reasoning[\"_router\"] = `ABORT: ${decision.reason}`;\n      return [];\n    }\n\n    let next = remaining;\n    if (decision.skip.length > 0) {\n      const skipSet = new Set(decision.skip);\n      next = next.filter((s) => !skipSet.has(s.name));\n    }\n\n    if (decision.insert.length > 0) {\n      const inserted: PlannedStage[] = [];\n      for (const name of decision.insert) {\n        const stageObj = registry.get(name);\n        inserted.push({\n          name,\n          stage: stageObj,\n          spec: makeStageSpec(name),\n          config: {},\n        });\n      }\n      next = [...inserted, ...next];\n    }\n\n    return next;\n  }\n}\n\nexport const Router = {\n  /**\n   * Apply a Decision (skip / abort / insert) to the remaining stages and\n   * return the new remaining list. Records `decision.reason` in\n   * `ctx.reasoning._router`.\n   *\n   * Routes through the registered WASM planner backend when enabled; otherwise\n   * runs the pure-TS core.\n   */\n  apply(\n    decision: Decision,\n    remaining: PlannedStage[],\n    ctx: PipeContext,\n    registry: StageRegistry,\n  ): PlannedStage[] {\n    const b = getPipeWasmBackend();\n    if (b) return applyDecisionViaWasm(decision, remaining, ctx, registry, b);\n    return applyPure(decision, remaining, ctx, registry);\n  },\n};\n","/**\n * Pipeline runner — execute stages with error handling and routing.\n * Port of goldenpipe/engine/runner.py.\n *\n * ASYNC: stage execution awaits each stage's `run`, because the GoldenMatch\n * `dedupe` adapter is async.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { PipeContext, StageResult } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\nimport type { StageRegistry } from \"./registry.js\";\nimport type { ExecutionPlan } from \"./resolver.js\";\nimport { Router } from \"./router.js\";\nimport { getPipeWasmBackend } from \"../wasm/backend.js\";\nimport { skipIfFalsyViaWasm } from \"../wasm/plannerJson.js\";\n\nexport function isFalsy(value: unknown): boolean {\n  if (value === null || value === undefined) return true;\n  if (value === false || value === 0 || value === \"\") return true;\n  if (Array.isArray(value)) return value.length === 0;\n  if (value instanceof Map || value instanceof Set) return value.size === 0;\n  if (typeof value === \"object\") return Object.keys(value).length === 0;\n  return false;\n}\n\nexport class Runner {\n  constructor(private readonly registry: StageRegistry) {}\n\n  /** Execute an ExecutionPlan against a PipeContext, returning per-stage results. */\n  async run(plan: ExecutionPlan, ctx: PipeContext): Promise<Record<string, StageResult>> {\n    const results: Record<string, StageResult> = {};\n    let remaining = [...plan.stages];\n\n    while (remaining.length > 0) {\n      const planned = remaining.shift()!;\n\n      if (planned.spec.skipIf) {\n        const artifact = ctx.artifacts[planned.spec.skipIf];\n        const b = getPipeWasmBackend();\n        const falsy = b ? skipIfFalsyViaWasm(artifact, b) : isFalsy(artifact);\n        if (falsy) {\n          results[planned.name] = { status: StageStatus.SKIPPED };\n          ctx.reasoning[planned.name] =\n            `Skipped: artifact '${planned.spec.skipIf}' is missing/falsy`;\n          continue;\n        }\n      }\n\n      const start = performance.now();\n      try {\n        // Make stage-level config available to the adapter via context.\n        ctx.stageConfig = planned.config;\n\n        await planned.stage.validate(ctx);\n        const result = await planned.stage.run(ctx);\n        ctx.timing[planned.name] = (performance.now() - start) / 1000;\n        results[planned.name] = result;\n\n        if (result.decision != null) {\n          remaining = Router.apply(result.decision, remaining, ctx, this.registry);\n        }\n      } catch (e) {\n        ctx.timing[planned.name] = (performance.now() - start) / 1000;\n        const message = e instanceof Error ? e.message : String(e);\n        results[planned.name] = { status: StageStatus.FAILED, error: message };\n        ctx.reasoning[planned.name] = `Failed: ${message}`;\n\n        if (planned.spec.onError === \"abort\") {\n          break;\n        }\n      }\n    }\n\n    return results;\n  }\n}\n","/**\n * Reporter — build a PipeResult from a PipeContext after execution.\n * Port of goldenpipe/engine/reporter.py.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { PipeContext, PipeResult, StageResult } from \"../models.js\";\nimport { PipeStatus, StageStatus } from \"../models.js\";\n\nexport const Reporter = {\n  build(ctx: PipeContext, stages: Record<string, StageResult>): PipeResult {\n    const entries = Object.entries(stages);\n\n    const errors = entries\n      .filter(([, r]) => r.status === StageStatus.FAILED && r.error)\n      .map(([name, r]) => `${name}: ${r.error}`);\n\n    const skipped = entries\n      .filter(([, r]) => r.status === StageStatus.SKIPPED)\n      .map(([name]) => name);\n\n    const nonSkip = entries\n      .map(([, r]) => r.status)\n      .filter((s) => s !== StageStatus.SKIPPED);\n\n    let status: PipeStatus;\n    if (nonSkip.length === 0) {\n      status = PipeStatus.SUCCESS;\n    } else if (nonSkip.every((s) => s === StageStatus.FAILED)) {\n      status = PipeStatus.FAILED;\n    } else if (nonSkip.every((s) => s === StageStatus.SUCCESS)) {\n      status = PipeStatus.SUCCESS;\n    } else {\n      status = PipeStatus.PARTIAL;\n    }\n\n    return {\n      status,\n      source: typeof ctx.metadata[\"source\"] === \"string\" ? (ctx.metadata[\"source\"] as string) : \"\",\n      inputRows: typeof ctx.metadata[\"input_rows\"] === \"number\" ? (ctx.metadata[\"input_rows\"] as number) : 0,\n      stages,\n      artifacts: { ...ctx.artifacts },\n      skipped,\n      errors,\n      reasoning: { ...ctx.reasoning },\n      timing: { ...ctx.timing },\n    };\n  },\n};\n","/**\n * Built-in decision functions for pipeline routing.\n * Port of goldenpipe/decisions.py.\n *\n * Edge-safe: no `node:` imports.\n *\n * NOTE on TS sibling skew: GoldenCheck-JS `Finding.severity` is a numeric enum\n * (INFO=1, WARNING=2, ERROR=3) and has no `\"critical\"` level, and there is no\n * `\"pii_detection\"` check. The check adapter normalizes findings to a string\n * `severity` label (\"info\"/\"warning\"/\"error\") and a `check` string. So in\n * practice `severityGate` and `piiRouter` are no-ops against current\n * GoldenCheck-JS output — they are ported for structural parity and so that\n * custom stages emitting `\"critical\"` / `\"pii_detection\"` findings still route.\n */\n\nimport type { Decision, PipeContext } from \"./models.js\";\nimport { makeDecision } from \"./models.js\";\nimport { getPipeWasmBackend } from \"./wasm/backend.js\";\nimport { evaluateBuiltinViaWasm } from \"./wasm/plannerJson.js\";\n\ninterface NormalizedFinding {\n  severity?: unknown;\n  check?: unknown;\n}\n\nfunction findingsOf(ctx: PipeContext): NormalizedFinding[] | null {\n  const findings = ctx.artifacts[\"findings\"];\n  if (!Array.isArray(findings) || findings.length === 0) return null;\n  return findings as NormalizedFinding[];\n}\n\n// ---------------------------------------------------------------------------\n// Guarded-public / pure-core split. The exported gate names (severityGate /\n// piiRouter / rowCountGate) stay stable for external consumers and route\n// through the WASM planner backend when one is registered; the `*Pure` cores\n// hold the original bodies and are called guard-free by plannerJsonPure (no\n// recursion).\n// ---------------------------------------------------------------------------\n\n/** Abort the pipeline if any finding has `critical` severity. */\nexport function severityGatePure(ctx: PipeContext): Decision | null {\n  const findings = findingsOf(ctx);\n  if (!findings) return null;\n\n  const hasCritical = findings.some((f) => f.severity === \"critical\");\n  if (hasCritical) {\n    return makeDecision({ abort: true, reason: \"Critical findings detected\" });\n  }\n  return null;\n}\n\nexport function severityGate(ctx: PipeContext): Decision | null {\n  const b = getPipeWasmBackend();\n  if (b) return evaluateBuiltinViaWasm(\"severity_gate\", ctx, b);\n  return severityGatePure(ctx);\n}\n\n/** Route to PPRL matching if PII is detected. */\nexport function piiRouterPure(ctx: PipeContext): Decision | null {\n  const findings = findingsOf(ctx);\n  if (!findings) return null;\n\n  const hasPii = findings.some((f) => f.check === \"pii_detection\");\n  if (hasPii) {\n    return makeDecision({\n      skip: [\"goldenmatch.dedupe\"],\n      insert: [\"goldenmatch.dedupe_pprl\"],\n      reason: \"PII detected, routing to PPRL matching\",\n    });\n  }\n  return null;\n}\n\nexport function piiRouter(ctx: PipeContext): Decision | null {\n  const b = getPipeWasmBackend();\n  if (b) return evaluateBuiltinViaWasm(\"pii_router\", ctx, b);\n  return piiRouterPure(ctx);\n}\n\n/** Skip matching if fewer than 2 rows. */\nexport function rowCountGatePure(ctx: PipeContext): Decision | null {\n  const rowCount =\n    typeof ctx.metadata[\"input_rows\"] === \"number\" ? (ctx.metadata[\"input_rows\"] as number) : 0;\n  if (rowCount < 2) {\n    return makeDecision({\n      skip: [\"goldenmatch.dedupe\"],\n      reason: `Only ${rowCount} row(s), skipping deduplication`,\n    });\n  }\n  return null;\n}\n\nexport function rowCountGate(ctx: PipeContext): Decision | null {\n  const b = getPipeWasmBackend();\n  if (b) return evaluateBuiltinViaWasm(\"row_count_gate\", ctx, b);\n  return rowCountGatePure(ctx);\n}\n","/**\n * Built-in LoadStage — marks `df` as available. The actual data loading is\n * handled by the Pipeline (file read) or supplied by the caller (runDf).\n * Port of goldenpipe/adapters/__init__.py LoadStage.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { PipeContext, Stage, StageResult } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\n\nexport const LoadStage: Stage = {\n  info: { name: \"load\", produces: [\"df\"], consumes: [] },\n  validate(_ctx: PipeContext): void {\n    /* no-op */\n  },\n  async run(_ctx: PipeContext): Promise<StageResult> {\n    return { status: StageStatus.SUCCESS };\n  },\n  rollback: null,\n};\n","/**\n * repair.ts — pure-TS repair-plan kernel. The SP2 TS mirror of\n * goldenpipe-core/src/repair.rs and goldenpipe/repair.py. Deterministic, no I/O,\n * no regex; hand-rolled ASCII matchers so the three surfaces are byte-identical\n * by construction.\n *\n * BYTE-PARITY NOTE: JS strings are UTF-16, so `s.length`/`s[i]` count code\n * UNITS. Python `len`/indexing and Rust `.chars()` count code POINTS. Every\n * predicate here first spreads to a code-point array (`const cs = [...s]`) and\n * indexes/slices THAT — never the raw string.\n */\n\n// coarse tags the host may supply\nconst COARSE = new Set([\"date\", \"email\", \"name\", \"phone\", \"zip\"]);\n\n// ASCII char-class primitives (no regex; \\d would diverge across engines)\n// Accept `string | undefined` because the repo's `noUncheckedIndexedAccess`\n// types `cs[i]` as possibly-undefined; length checks guarantee a real char at\n// runtime, and undefined -> false preserves byte-parity with Python/Rust.\nfunction isDigit(c: string | undefined): boolean {\n  return c !== undefined && c >= \"0\" && c <= \"9\";\n}\nfunction isUpper(c: string | undefined): boolean {\n  return c !== undefined && c >= \"A\" && c <= \"Z\";\n}\nfunction isAlnumUpper(c: string | undefined): boolean {\n  return isDigit(c) || isUpper(c);\n}\n// `chars` is already a code-point array; nonempty + every char passes.\nfunction allChars(chars: string[], pred: (c: string) => boolean): boolean {\n  return chars.length > 0 && chars.every(pred);\n}\nfunction asciiLower(s: string): string {\n  let out = \"\";\n  for (const c of s) {\n    out += c >= \"A\" && c <= \"Z\" ? String.fromCharCode(c.charCodeAt(0) + 32) : c;\n  }\n  return out;\n}\nfunction isAsciiWs(c: string): boolean {\n  return c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \"\\f\" || c === \"\\v\";\n}\n\n// value predicates (detection shape, not full validation)\nfunction vCusip(s: string): boolean {\n  const cs = [...s];\n  return cs.length === 9 && allChars(cs, isAlnumUpper);\n}\nfunction vNpi(s: string): boolean {\n  const cs = [...s];\n  return cs.length === 10 && allChars(cs, isDigit);\n}\nfunction vImei(s: string): boolean {\n  const cs = [...s];\n  return cs.length === 15 && allChars(cs, isDigit);\n}\nfunction vEan(s: string): boolean {\n  const cs = [...s];\n  return (cs.length === 8 || cs.length === 13) && allChars(cs, isDigit);\n}\nfunction vIsbn(s: string): boolean {\n  const cs = [...s];\n  if (cs.length === 13 && allChars(cs, isDigit)) return true;\n  const c9 = cs[9];\n  return cs.length === 10 && allChars(cs.slice(0, 9), isDigit) && c9 !== undefined && \"0123456789Xx\".includes(c9);\n}\nfunction vAba(s: string): boolean {\n  const cs = [...s];\n  return cs.length === 9 && allChars(cs, isDigit);\n}\nfunction vIban(s: string): boolean {\n  const cs = [...s];\n  if (!(cs.length >= 15 && cs.length <= 34)) return false;\n  return (\n    isUpper(cs[0]) &&\n    isUpper(cs[1]) &&\n    isDigit(cs[2]) &&\n    isDigit(cs[3]) &&\n    allChars(cs.slice(4), isAlnumUpper)\n  );\n}\nfunction vIsin(s: string): boolean {\n  const cs = [...s];\n  return (\n    cs.length === 12 &&\n    isUpper(cs[0]) &&\n    isUpper(cs[1]) &&\n    allChars(cs.slice(2, 11), isAlnumUpper) &&\n    isDigit(cs[11])\n  );\n}\nfunction vSwift(s: string): boolean {\n  const cs = [...s];\n  if (!(cs.length === 8 || cs.length === 11)) return false;\n  return (\n    allChars(cs.slice(0, 6), isUpper) &&\n    allChars(cs.slice(6, 8), isAlnumUpper) &&\n    (cs.length === 8 || allChars(cs.slice(8, 11), isAlnumUpper))\n  );\n}\nfunction luhnOk(s: string): boolean {\n  let total = 0;\n  let alt = false;\n  // iterate right-to-left over code points (reverse() avoids indexed access,\n  // which noUncheckedIndexedAccess would type as possibly-undefined)\n  for (const c of [...s].reverse()) {\n    let x = c.charCodeAt(0) - 48; // digit value; callers guarantee all-digit\n    if (alt) {\n      x *= 2;\n      if (x > 9) x -= 9;\n    }\n    total += x;\n    alt = !alt;\n  }\n  return total % 10 === 0;\n}\nfunction vCreditCard(s: string): boolean {\n  const t = [...s].filter((c) => c !== \" \" && c !== \"-\").join(\"\");\n  const cs = [...t];\n  return cs.length >= 13 && cs.length <= 19 && allChars(cs, isDigit) && luhnOk(t);\n}\n\n// detectors: [tag, name_hints_or_null, value_predicate] in fixed order —\n// name-gated group first (low false-positive), value-distinctive fallback second.\nconst DETECTORS: Array<[string, string[] | null, (s: string) => boolean]> = [\n  [\"cusip\", [\"cusip\"], vCusip],\n  [\"npi\", [\"npi\"], vNpi],\n  [\"imei\", [\"imei\", \"imsi\"], vImei],\n  [\"ean\", [\"ean\", \"gtin\", \"barcode\"], vEan],\n  [\"isbn\", [\"isbn\"], vIsbn],\n  [\"aba_routing\", [\"routing\", \"aba\"], vAba],\n  [\"iban\", null, vIban],\n  [\"isin\", null, vIsin],\n  [\"swift\", null, vSwift],\n  [\"credit_card\", null, vCreditCard],\n];\n\nfunction fineType(name: string, samples: string[]): string | null {\n  const lname = asciiLower(name);\n  const nonempty = samples.filter((s) => [...s].some((c) => !isAsciiWs(c)));\n  if (nonempty.length === 0) return null;\n  for (const [tag, hints, pred] of DETECTORS) {\n    if (hints !== null && !hints.some((h) => lname.includes(h))) continue;\n    let matches = 0;\n    for (const s of nonempty) if (pred(s)) matches++;\n    if (matches * 2 > nonempty.length) return tag;\n  }\n  return null;\n}\n\nfunction resolveTag(name: string, coarseType: string, samples: string[]): string | null {\n  const ft = fineType(name, samples);\n  if (ft !== null) return ft;\n  return COARSE.has(coarseType) ? coarseType : null;\n}\n\n// per-fine-tag validator; credit_card uses luhn_validate.\nconst VALIDATOR: Record<string, string> = {\n  iban: \"iban_validate\",\n  isin: \"isin_validate\",\n  swift: \"swift_validate\",\n  cusip: \"cusip_validate\",\n  npi: \"npi_validate\",\n  imei: \"imei_validate\",\n  ean: \"ean_validate\",\n  isbn: \"isbn_validate\",\n  credit_card: \"luhn_validate\",\n  aba_routing: \"aba_validate\",\n};\n\n// mapping table: check -> tag -> transforms; tag \"*\" = wildcard. Nested (not a\n// concatenated string key) so there is no separator char in the source.\nconst TABLE = new Map<string, Map<string, string[]>>();\nfunction tableSet(check: string, tag: string, transforms: string[]): void {\n  let byTag = TABLE.get(check);\n  if (byTag === undefined) {\n    byTag = new Map<string, string[]>();\n    TABLE.set(check, byTag);\n  }\n  byTag.set(tag, transforms);\n}\ntableSet(\"encoding_detection\", \"*\", [\"fix_mojibake\", \"normalize_unicode\"]);\ntableSet(\"future_dated\", \"date\", [\"date_validate\"]);\ntableSet(\"temporal_order\", \"date\", [\"date_validate\"]);\ntableSet(\"stale_data\", \"date\", [\"date_validate\"]);\ntableSet(\"format_detection\", \"date\", [\"date_parse\"]);\ntableSet(\"format_detection\", \"email\", [\"email_normalize\"]);\ntableSet(\"pattern_consistency\", \"email\", [\"email_canonical\"]);\ntableSet(\"pattern_consistency\", \"name\", [\"name_proper\"]);\ntableSet(\"format_detection\", \"phone\", [\"phone_validate\"]);\ntableSet(\"pattern_consistency\", \"phone\", [\"phone_national\"]);\ntableSet(\"format_detection\", \"zip\", [\"zip_normalize\"]);\nfor (const [tag, validator] of Object.entries(VALIDATOR)) {\n  tableSet(\"format_detection\", tag, [validator]);\n  tableSet(\"pattern_consistency\", tag, [validator]);\n}\n\nfunction lookup(check: string, tag: string | null): string[] | null {\n  const byTag = TABLE.get(check);\n  if (byTag === undefined) return null;\n  if (tag !== null && byTag.has(tag)) return byTag.get(tag)!;\n  if (byTag.has(\"*\")) return byTag.get(\"*\")!;\n  return null;\n}\n\nexport interface Finding {\n  column?: string;\n  check?: string;\n  message?: string;\n  severity?: string;\n}\nexport interface ColumnInput {\n  name: string;\n  coarse_type?: string;\n  samples?: string[];\n}\nexport interface Repair {\n  column: string;\n  check: string;\n  type_tag: string;\n  suggested_transforms: string[];\n  reason: string;\n}\nexport interface RepairPlan {\n  repairs: Repair[];\n}\n\nexport function buildRepairPlan(findings: Finding[], columns: ColumnInput[]): RepairPlan {\n  const tags = new Map<string, string | null>();\n  for (const c of columns) {\n    tags.set(c.name, resolveTag(c.name, c.coarse_type ?? \"\", c.samples ?? []));\n  }\n\n  const repairs: Repair[] = [];\n  for (const f of findings) {\n    const col = f.column;\n    const check = f.check ?? \"\";\n    // encoding wildcard can apply even to an omitted-tag column present in `columns`\n    if (col === undefined || !tags.has(col)) continue;\n    const tag = tags.get(col)!;\n    const transforms = lookup(check, tag);\n    if (!transforms || transforms.length === 0) continue;\n    repairs.push({\n      column: col,\n      check,\n      type_tag: tag !== null ? tag : \"*\",\n      suggested_transforms: [...transforms],\n      reason: [...String(f.message ?? \"\")].slice(0, 80).join(\"\"),\n    });\n  }\n  return { repairs };\n}\n","/**\n * repairHost.ts — TS producer glue for the repair plan (mirror of\n * goldenpipe/repair_host.py). Samples column values from the row array, builds\n * ColumnInputs, calls the pure repair.ts kernel, attaches the advisory artifact.\n * Also holds the Phase-2 FIXERS allowlist + config conversion (host policy,\n * identical to repair_host.py — NOT the parity-gated kernel).\n */\nimport { buildRepairPlan } from \"./repair.js\";\nimport type { ColumnInput, Finding, RepairPlan } from \"./repair.js\";\nimport type { ColumnContext } from \"./columnContext.js\";\nimport type { PipeContext, Row } from \"./models.js\";\nimport type { TransformSpec } from \"goldenflow/core\";\n\nconst SAMPLE_LIMIT = 20;\n\nexport function sampleColumn(rows: Row[], col: string, limit = SAMPLE_LIMIT): string[] {\n  const out: string[] = [];\n  for (const row of rows) {\n    const v = (row as Record<string, unknown>)[col];\n    if (v === null || v === undefined) continue;\n    const s = String(v);\n    if (s.trim() === \"\") continue;\n    out.push(s);\n    if (out.length >= limit) break;\n  }\n  return out;\n}\n\nexport function buildColumnInputs(contexts: ColumnContext[], rows: Row[]): ColumnInput[] {\n  const first = rows.length > 0 ? rows[0] : undefined;\n  const names = new Set<string>(first ? Object.keys(first as object) : []);\n  const cols: ColumnInput[] = [];\n  for (const ctx of contexts) {\n    if (!names.has(ctx.name)) continue;\n    cols.push({ name: ctx.name, coarse_type: ctx.inferredType, samples: sampleColumn(rows, ctx.name) });\n  }\n  return cols;\n}\n\nexport function attachRepairPlan(\n  ctx: PipeContext,\n  findings: Finding[],\n  contexts: ColumnContext[],\n  rows: Row[],\n): RepairPlan {\n  const columns = buildColumnInputs(contexts, rows);\n  const plan = buildRepairPlan(findings, columns);\n  ctx.artifacts[\"repair_plan\"] = plan;\n  const lines = plan.repairs.map(\n    (item) => `repair: ${item.column} (${item.check}) -> ${item.suggested_transforms.join(\",\")} [${item.reason}]`,\n  );\n  if (lines.length > 0) ctx.reasoning[\"repair_plan\"] = lines.join(\"\\n\");\n  return plan;\n}\n\n// ── FIXERS allowlist + conversion (identical to repair_host.py) ──────────\nexport const FIXERS: ReadonlySet<string> = new Set([\n  \"fix_mojibake\", \"normalize_unicode\", \"date_parse\", \"email_normalize\",\n  \"email_canonical\", \"name_proper\", \"phone_national\", \"zip_normalize\",\n]);\n\nexport function repairTransformSpecs(plan: RepairPlan | undefined): {\n  specs: TransformSpec[];\n  skipped: Array<{ column: string; op: string }>;\n} {\n  const byCol = new Map<string, string[]>();\n  const order: string[] = [];\n  const skipped: Array<{ column: string; op: string }> = [];\n  for (const item of plan?.repairs ?? []) {\n    const col = item.column;\n    for (const op of item.suggested_transforms ?? []) {\n      if (FIXERS.has(op)) {\n        let ops = byCol.get(col);\n        if (ops === undefined) { ops = []; byCol.set(col, ops); order.push(col); }\n        if (!ops.includes(op)) ops.push(op);\n      } else {\n        skipped.push({ column: col, op });\n      }\n    }\n  }\n  const specs: TransformSpec[] = order.map((c) => ({ column: c, ops: byCol.get(c) ?? [] }));\n  return { specs, skipped };\n}\n\nexport function mergeTransforms(user: readonly TransformSpec[], repair: readonly TransformSpec[]): TransformSpec[] {\n  const byCol = new Map<string, string[]>();\n  const order: string[] = [];\n  for (const spec of [...user, ...repair]) {\n    let ops = byCol.get(spec.column);\n    if (ops === undefined) { ops = []; byCol.set(spec.column, ops); order.push(spec.column); }\n    ops.push(...spec.ops);\n  }\n  return order.map((col) => {\n    const seen = new Set<string>();\n    const ops: string[] = [];\n    for (const op of byCol.get(col) ?? []) if (!seen.has(op)) { seen.add(op); ops.push(op); }\n    return { column: col, ops };\n  });\n}\n","/**\n * GoldenCheck adapter — wraps GoldenCheck-JS `scanData`.\n * Port of goldenpipe/adapters/check.py.\n *\n * Shape divergence vs Python: the Python adapter calls `scan_file(path)` and\n * reads `ctx.metadata[\"source\"]`. GoldenCheck-JS's edge-safe `scanData` instead\n * operates on a `TabularData` built from rows, so the TS adapter scans\n * `ctx.df` directly. This means `goldencheck.scan` succeeds in the in-memory\n * (`runDf`) path here, whereas the Python `run_df` path fails the scan stage\n * (it has no file). Use `run(source)` for cross-language parity.\n *\n * Edge-safe: no `node:` imports (GoldenCheck-JS core is edge-safe).\n */\n\nimport { scanData, TabularData, severityLabel } from \"goldencheck/core\";\nimport type { Finding, ColumnProfile } from \"goldencheck/core\";\nimport type { PipeContext, Stage, StageResult } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\nimport {\n  buildContextsFromCheck,\n  type ColumnContext,\n  type ColumnProfileLike,\n  type FindingLike,\n} from \"../columnContext.js\";\nimport { attachRepairPlan } from \"../repairHost.js\";\n\ninterface NormalizedFinding {\n  severity: string;\n  check: string;\n  column: string;\n  message: string;\n}\n\n/** Normalize a GoldenCheck-JS Finding (numeric severity) to the dict shape\n *  the Python pipeline used (string severity label). */\nfunction normalizeFinding(f: Finding): NormalizedFinding {\n  return {\n    severity: severityLabel(f.severity).toLowerCase(),\n    check: f.check,\n    column: f.column,\n    message: f.message,\n  };\n}\n\n/** Map a GoldenCheck-JS ColumnProfile to the minimal shape columnContext consumes. */\nfunction toColumnProfileLike(cp: ColumnProfile): ColumnProfileLike {\n  return {\n    name: cp.name,\n    inferredType: cp.inferredType,\n    nullPct: cp.nullPct,\n    uniqueCount: cp.uniqueCount,\n  };\n}\n\nexport const ScanStage: Stage = {\n  info: { name: \"goldencheck.scan\", produces: [\"findings\", \"profile\"], consumes: [\"df\"] },\n\n  validate(ctx: PipeContext): void {\n    if (ctx.df === null) {\n      throw new Error(\"ScanStage: no df in context\");\n    }\n  },\n\n  async run(ctx: PipeContext): Promise<StageResult> {\n    const rows = ctx.df ?? [];\n    const data = new TabularData(rows);\n    const stageCfg = ctx.stageConfig;\n    const opts = stageCfg && Object.keys(stageCfg).length > 0 ? stageCfg : undefined;\n    const result = scanData(data, opts as Parameters<typeof scanData>[1]);\n\n    const findings: NormalizedFinding[] = result.findings.map(normalizeFinding);\n    const columnProfiles = result.profile.columns;\n\n    ctx.artifacts[\"findings\"] = findings;\n    ctx.artifacts[\"profile\"] = result.profile;\n\n    // Build column contexts for downstream stages (best-effort enrichment).\n    try {\n      const profileLikes: ColumnProfileLike[] = columnProfiles.map(toColumnProfileLike);\n      const findingLikes: FindingLike[] = findings.map((f) => ({\n        column: f.column,\n        check: f.check,\n        message: f.message,\n      }));\n      ctx.artifacts[\"column_contexts\"] = buildContextsFromCheck(findingLikes, profileLikes);\n    } catch {\n      ctx.artifacts[\"column_contexts\"] = [];\n    }\n\n    // Advisory repair-plan (Phase 1 producer, TS side). Never throws.\n    try {\n      const rp_findings = (ctx.artifacts[\"findings\"] as NormalizedFinding[]) ?? [];\n      const rp_contexts = (ctx.artifacts[\"column_contexts\"] as ColumnContext[]) ?? [];\n      if (ctx.df && rp_findings.length > 0 && rp_contexts.length > 0) {\n        attachRepairPlan(ctx, rp_findings, rp_contexts, ctx.df);\n      }\n    } catch {\n      /* advisory: never break the scan stage */\n    }\n\n    return { status: StageStatus.SUCCESS };\n  },\n\n  rollback: null,\n};\n","/**\n * GoldenFlow adapter — wraps GoldenFlow-JS `TransformEngine.transformDf`.\n * Port of goldenpipe/adapters/flow.py.\n *\n * Shape note: GoldenFlow-JS exposes `new TransformEngine(config).transformDf(rows)`\n * which returns `{ rows, columns, manifest }` (the Python sibling's\n * `transform_df(df)` returns an object with `.df` + `.manifest`). We read\n * `.rows` back into `ctx.df` and surface `.manifest` as an artifact.\n *\n * Edge-safe: no `node:` imports (GoldenFlow-JS core is edge-safe).\n */\n\nimport { TransformEngine } from \"goldenflow/core\";\nimport type { GoldenFlowConfig, TransformSpec } from \"goldenflow/core\";\nimport type { PipeContext, Stage, StageResult, Row } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\nimport { enrichContextsFromFlow, type ColumnContext, type ManifestRecordLike } from \"../columnContext.js\";\nimport { repairTransformSpecs, mergeTransforms } from \"../repairHost.js\";\n\nexport const TransformStage: Stage = {\n  info: { name: \"goldenflow.transform\", produces: [\"df\", \"manifest\"], consumes: [\"df\"] },\n\n  validate(ctx: PipeContext): void {\n    if (ctx.df === null) {\n      throw new Error(\"TransformStage: no df in context\");\n    }\n  },\n\n  async run(ctx: PipeContext): Promise<StageResult> {\n    const rows = (ctx.df ?? []) as Row[];\n    const rawCfg: Record<string, unknown> = { ...(ctx.stageConfig ?? {}) };\n    const apply = rawCfg[\"apply_repairs\"] === true;\n    delete rawCfg[\"apply_repairs\"];\n\n    let config: Partial<GoldenFlowConfig> | undefined;\n    if (apply) {\n      const plan = ctx.artifacts[\"repair_plan\"] as Parameters<typeof repairTransformSpecs>[0];\n      const { specs, skipped } = repairTransformSpecs(plan);\n      const userTransforms = (rawCfg[\"transforms\"] as TransformSpec[] | undefined) ?? [];\n      if (skipped.length > 0) {\n        ctx.reasoning[\"repair_skipped\"] = skipped.map((s) => `${s.column}:${s.op}`).join(\"; \");\n      }\n      if (specs.length > 0 || userTransforms.length > 0) {\n        config = { ...rawCfg, transforms: mergeTransforms(userTransforms, specs) } as Partial<GoldenFlowConfig>;\n      } else {\n        config = Object.keys(rawCfg).length > 0 ? (rawCfg as Partial<GoldenFlowConfig>) : undefined;\n      }\n    } else {\n      config = Object.keys(rawCfg).length > 0 ? (rawCfg as Partial<GoldenFlowConfig>) : undefined;\n    }\n\n    const engine = new TransformEngine(config);\n    const result = engine.transformDf(rows);\n\n    ctx.df = [...result.rows] as Row[];\n    ctx.artifacts[\"manifest\"] = result.manifest;\n\n    // Enrich column contexts with transform information (best-effort).\n    const contexts = ctx.artifacts[\"column_contexts\"];\n    if (Array.isArray(contexts)) {\n      try {\n        const records: ManifestRecordLike[] = result.manifest.records.map((r) => ({\n          column: r.column,\n          transform: r.transform,\n          affectedRows: r.affectedRows,\n        }));\n        enrichContextsFromFlow(contexts as ColumnContext[], records);\n      } catch {\n        /* best-effort: never break the pipeline on enrichment failure */\n      }\n    }\n\n    return { status: StageStatus.SUCCESS };\n  },\n\n  rollback: null,\n};\n","/**\n * GoldenMatch adapter — wraps GoldenMatch-JS `dedupe`.\n * Port of goldenpipe/adapters/match.py (+ `_build_config_from_contexts`).\n *\n * `dedupe` is ASYNC, so this stage's `run` awaits it (and the whole runner is\n * async). Config selection priority mirrors Python:\n *   1. explicit stage config (from YAML / PipelineConfig.config)\n *   2. config built from upstream column contexts\n *   3. GoldenMatch auto-configure (no config → shorthand path)\n *\n * Shape divergences from the Python sibling, surfaced as artifacts:\n *   - GoldenMatch-JS `DedupeResult` exposes `.goldenRecords` (not `.golden`),\n *     `.dupes`, `.unique`, `.stats`, `.scoredPairs`. We map `goldenRecords` to\n *     the `golden` artifact for parity with the Python pipeline's artifact name.\n *   - `matchkey_used` is derived from the built config's first matchkey (the\n *     JS result does not carry the resolved matchkey list back).\n *\n * Edge-safe: no `node:` imports (GoldenMatch-JS core is edge-safe).\n */\n\nimport { dedupe, makeConfig, makeMatchkeyConfig, makeMatchkeyField, makeBlockingConfig } from \"goldenmatch/core\";\nimport type {\n  GoldenMatchConfig,\n  MatchkeyConfig,\n  MatchkeyField,\n  BlockingConfig,\n  BlockingKeyConfig,\n} from \"goldenmatch/core\";\nimport type { PipeContext, Stage, StageResult, Row } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\nimport {\n  ColumnType,\n  distinctNonNull,\n  nullRateOf,\n  type ColumnContext,\n} from \"../columnContext.js\";\n\n/** Cast every cell to string, mirroring the Python adapter's defensive cast\n *  that prevents mixed-type-column schema mismatches reaching GoldenMatch. */\nfunction castRowsToString(rows: readonly Row[]): Row[] {\n  return rows.map((row) => {\n    const out: Row = {};\n    for (const [k, v] of Object.entries(row)) {\n      out[k] = v === null || v === undefined ? \"\" : String(v);\n    }\n    return out;\n  });\n}\n\nexport const DedupeStage: Stage = {\n  info: { name: \"goldenmatch.dedupe\", produces: [\"clusters\", \"golden\"], consumes: [\"df\"] },\n\n  validate(ctx: PipeContext): void {\n    if (ctx.df === null) {\n      throw new Error(\"DedupeStage: no df in context\");\n    }\n  },\n\n  async run(ctx: PipeContext): Promise<StageResult> {\n    const rows = castRowsToString(ctx.df ?? []);\n    ctx.df = rows;\n\n    const stageCfg = ctx.stageConfig;\n    let config: GoldenMatchConfig | null = null;\n\n    // Priority 1: explicit stage config.\n    if (stageCfg && Object.keys(stageCfg).length > 0) {\n      config = makeConfig(stageCfg as Partial<GoldenMatchConfig>);\n    } else {\n      // Priority 2: build config from upstream column contexts.\n      const contexts = ctx.artifacts[\"column_contexts\"];\n      if (Array.isArray(contexts) && contexts.length > 0) {\n        config = buildConfigFromContexts(contexts as ColumnContext[], rows);\n      }\n    }\n\n    // Priority 3 falls through: no config → dedupe auto-configures.\n    const result = config !== null ? await dedupe(rows, { config }) : await dedupe(rows);\n\n    ctx.artifacts[\"clusters\"] = result.clusters;\n    ctx.artifacts[\"golden\"] = result.goldenRecords;\n    ctx.artifacts[\"unique\"] = result.unique;\n    ctx.artifacts[\"dupes\"] = result.dupes;\n    ctx.artifacts[\"match_stats\"] = result.stats;\n    ctx.artifacts[\"scored_pairs\"] = result.scoredPairs;\n\n    // Surface the first matchkey name (best-effort) for downstream stages.\n    const mks = config?.matchkeys;\n    if (mks && mks.length > 0) {\n      ctx.artifacts[\"matchkey_used\"] = mks[0]!.name;\n    }\n\n    return { status: StageStatus.SUCCESS };\n  },\n\n  rollback: null,\n};\n\n/**\n * Build a GoldenMatchConfig from pipeline column contexts. Returns `null` if no\n * usable matchkeys can be built (caller then falls back to auto-configure).\n * Port of `_build_config_from_contexts`.\n */\nexport function buildConfigFromContexts(\n  contexts: readonly ColumnContext[],\n  rows: readonly Row[],\n): GoldenMatchConfig | null {\n  const nameCols = contexts.filter(\n    (c) => c.inferredType === ColumnType.NAME && c.isIdentifier,\n  );\n  const emailCols = contexts.filter((c) => c.inferredType === ColumnType.EMAIL);\n  const geoCols = contexts.filter((c) => c.inferredType === ColumnType.GEO);\n\n  const matchkeys: MatchkeyConfig[] = [];\n\n  // Exact matchkeys for high-quality discriminators (email).\n  for (const col of emailCols) {\n    matchkeys.push(\n      makeMatchkeyConfig({\n        name: `exact_${col.name}`,\n        type: \"exact\",\n        fields: [makeMatchkeyField({ field: col.name, transforms: [\"lowercase\", \"strip\"], scorer: \"exact\" })],\n      }),\n    );\n  }\n\n  // Fuzzy matchkey on name columns (the core of person matching).\n  if (nameCols.length > 0) {\n    const fuzzyFields: MatchkeyField[] = nameCols.map((col) =>\n      makeMatchkeyField({\n        field: col.name,\n        scorer: \"jaro_winkler\",\n        weight: 1.0,\n        transforms: [\"lowercase\", \"strip\"],\n      }),\n    );\n    matchkeys.push(\n      makeMatchkeyConfig({\n        name: \"fuzzy_names\",\n        type: \"weighted\",\n        threshold: 0.85,\n        fields: fuzzyFields,\n      }),\n    );\n  }\n\n  // Fallback: no identifier columns — use discriminative string columns.\n  // Exclude low-cardinality columns (they inflate fuzzy scores without\n  // providing meaningful discrimination).\n  if (matchkeys.length === 0) {\n    let stringCols = contexts.filter(\n      (c) => c.inferredType === ColumnType.STRING || c.inferredType === ColumnType.NAME,\n    );\n    if (rows.length > 0) {\n      const minCardinality = Math.max(10, Math.floor(rows.length * 0.05));\n      stringCols = stringCols.filter((c) => distinctNonNull(rows, c.name) >= minCardinality);\n    }\n    const fallbackFields: MatchkeyField[] = stringCols.slice(0, 3).map((col) =>\n      makeMatchkeyField({\n        field: col.name,\n        scorer: \"jaro_winkler\",\n        weight: 1.0,\n        transforms: [\"lowercase\", \"strip\"],\n      }),\n    );\n    if (fallbackFields.length > 0) {\n      matchkeys.push(\n        makeMatchkeyConfig({\n          name: \"fuzzy_fallback\",\n          type: \"weighted\",\n          threshold: 0.85,\n          fields: fallbackFields,\n        }),\n      );\n    }\n  }\n\n  // No matchkeys → give up; caller falls back to auto-configure.\n  if (matchkeys.length === 0) {\n    return null;\n  }\n\n  // Blocking: compound geo columns with name to prevent cross-region false\n  // positives. Prefer low-cardinality geo (state ~50) over high (city ~3000).\n  let bestGeo: string | null = null;\n  if (geoCols.length > 0 && rows.length > 0) {\n    const maxNullRate = 0.2;\n    const geoCandidates: Array<[string, number]> = [];\n    for (const g of geoCols) {\n      if (nullRateOf(rows, g.name) <= maxNullRate) {\n        geoCandidates.push([g.name, distinctNonNull(rows, g.name)]);\n      }\n    }\n    if (geoCandidates.length > 0) {\n      geoCandidates.sort((a, b) => a[1] - b[1]);\n      bestGeo = geoCandidates[0]![0];\n    }\n  }\n\n  const makeBlocking = (\n    primaryFields: string[],\n    recallName: string,\n    withGeo = false,\n  ): BlockingConfig => {\n    const passes: BlockingKeyConfig[] = [\n      { fields: primaryFields, transforms: [\"lowercase\", \"strip\"] },\n    ];\n    if (withGeo) {\n      passes.push({ fields: primaryFields, transforms: [\"lowercase\", \"substring:0:3\"] });\n    }\n    // Name-only soundex recall pass (phonetic variants; relies on skipOversized).\n    passes.push({ fields: [recallName], transforms: [\"lowercase\", \"soundex\"] });\n    return makeBlockingConfig({\n      strategy: \"multi_pass\",\n      keys: [passes[0]!],\n      passes,\n      maxBlockSize: 500,\n      skipOversized: true,\n    });\n  };\n\n  let blocking: BlockingConfig | null = null;\n  const lastNameCols = nameCols.filter((c) => c.name.toLowerCase().includes(\"last\"));\n  if (lastNameCols.length > 0) {\n    const bestName = lastNameCols[0]!.name;\n    blocking = bestGeo\n      ? makeBlocking([bestGeo, bestName], bestName, true)\n      : makeBlocking([bestName], bestName);\n  } else if (nameCols.length > 0) {\n    const bestName = nameCols[0]!.name;\n    if (bestGeo) {\n      blocking = makeBlocking([bestGeo, bestName], bestName, true);\n    } else {\n      blocking = makeBlockingConfig({\n        strategy: \"static\",\n        keys: [{ fields: [bestName], transforms: [\"lowercase\", \"soundex\"] }],\n        maxBlockSize: 500,\n        skipOversized: true,\n      });\n    }\n  }\n\n  // Fallback: no name columns, but string matchkeys + geo present.\n  if (!blocking && bestGeo && matchkeys.length > 0) {\n    const fuzzyMks = matchkeys.filter((mk) => mk.type === \"weighted\");\n    const first = fuzzyMks[0];\n    if (first && first.fields.length > 0) {\n      const anchor = first.fields[0]!.field;\n      blocking = makeBlocking([bestGeo, anchor], anchor, true);\n    }\n  }\n\n  // Still no blocking → let GoldenMatch auto-suggest.\n  if (!blocking) {\n    blocking = makeBlockingConfig({ keys: [], autoSuggest: true });\n  }\n\n  return makeConfig({ matchkeys, blocking });\n}\n","/**\n * infer_schema — GoldenPipe stage that runs InferMap to label columns.\n * TS port of goldenpipe/stages/infer_schema.py. Produces\n * `inferred_schema` (goldencheck-types.InferredSchema | null) + (on the\n * auto-detect path) `infer_schema_evidence`. Consumes nothing — meant to run\n * before stages that want typed columns. Opt-in (not in DEFAULT_STAGE_ORDER),\n * matching Python.\n *\n * Config (ctx.stageConfig): schema?: InferredSchema | no_infer?: boolean |\n * domain?: string. Precedence: schema > no_infer > domain > auto-detect;\n * the three are mutually exclusive (conflict throws in run()).\n */\nimport {\n  SCHEMA_VERSION,\n  UNMAPPED_TYPE,\n  loadDomain,\n  type FieldMapping,\n  type InferredSchema,\n} from \"goldencheck-types\";\nimport {\n  detectDomainDetailed,\n  map,\n  DomainPackTarget,\n  type MapResult,\n} from \"infermap\";\n\nimport type { PipeContext, Stage, StageResult } from \"../models.js\";\nimport { StageStatus } from \"../models.js\";\n\n/** Mirror of Python `_result_to_inferred_schema`. `confidence` is overwritten\n *  by the caller with the detection score. */\nfunction resultToInferredSchema(result: MapResult, domain: string): InferredSchema {\n  const fields: Record<string, FieldMapping> = {};\n  for (const fm of result.mappings) {\n    fields[fm.source] = {\n      source_col: fm.source,\n      canonical: fm.target, // soft mode sets target = null -> canonical null\n      type: fm.target ? fm.target : UNMAPPED_TYPE,\n      confidence: fm.confidence,\n      evidence: { reasoning: fm.reasoning },\n    };\n  }\n  for (const col of result.unmappedSource) {\n    if (!(col in fields)) {\n      fields[col] = {\n        source_col: col,\n        canonical: null,\n        type: UNMAPPED_TYPE,\n        confidence: 0.0,\n        evidence: {},\n      };\n    }\n  }\n  // Loop-based min — never spread an array into Math.min/max (it throws\n  // RangeError past ~65K elements; banned by ast-grep ts-no-spread-math-min-max).\n  const confidence = result.mappings.length\n    ? result.mappings.reduce((m, fm) => (fm.confidence < m ? fm.confidence : m), Infinity)\n    : 0.0;\n  // Stamp schema_version like the Python InferredSchema dataclass (default\n  // SCHEMA_VERSION) so the artifact is field-identical cross-surface.\n  return { domain, fields, confidence, schema_version: SCHEMA_VERSION };\n}\n\n/** Mirror of Python `_validate_flags`: at most one of schema/no_infer/domain. */\nfunction validateFlags(cfg: Record<string, unknown>): void {\n  const set =\n    (cfg.schema != null ? 1 : 0) +\n    (cfg.no_infer ? 1 : 0) +\n    (cfg.domain != null ? 1 : 0);\n  if (set > 1) {\n    throw new Error(\n      \"conflict: 'schema', 'no_infer', and 'domain' are mutually exclusive. \" +\n        \"Precedence: schema > no_infer > domain > auto-detect.\",\n    );\n  }\n}\n\nexport const InferSchemaStage: Stage = {\n  info: {\n    // Matches Python's declared produces=[\"inferred_schema\"]. The stage ALSO sets\n    // `infer_schema_evidence` at runtime (via setdefault) but, like Python, does\n    // not declare it — replicated faithfully so the stage contract is identical.\n    name: \"infer_schema\",\n    produces: [\"inferred_schema\"],\n    consumes: [],\n  },\n\n  // No precondition: consumes [] and a null df is a valid SUCCESS branch, so\n  // validate() must NOT throw. The flag-conflict check lives in run() (mirrors\n  // Python's _validate_flags at the top of run()).\n  validate(_ctx: PipeContext): void {},\n\n  async run(ctx: PipeContext): Promise<StageResult> {\n    const cfg = ctx.stageConfig ?? {};\n    validateFlags(cfg);\n\n    if (cfg.schema != null) {\n      ctx.artifacts[\"inferred_schema\"] = cfg.schema;\n      return { status: StageStatus.SUCCESS };\n    }\n    if (cfg.no_infer) {\n      ctx.artifacts[\"inferred_schema\"] = null;\n      return { status: StageStatus.SUCCESS };\n    }\n    if (ctx.df === null) {\n      ctx.artifacts[\"inferred_schema\"] = null;\n      return { status: StageStatus.SUCCESS };\n    }\n\n    const explicit = cfg.domain as string | undefined;\n    let domain: string;\n    let detectScore: number;\n    let detectEvidence: Record<string, unknown>;\n\n    // Truthy check mirrors Python `if explicit_domain:` — an empty-string domain\n    // falls through to auto-detect (validateFlags counted it via `!= null`).\n    if (explicit) {\n      domain = explicit;\n      detectScore = 1.0;\n      detectEvidence = { detect_reason: \"explicit\" };\n    } else {\n      const detection = detectDomainDetailed({ records: ctx.df });\n      if (detection.domain !== null) {\n        domain = detection.domain;\n        detectScore = detection.score;\n        detectEvidence = {\n          detect_reason: detection.reason,\n          detect_score: detection.score,\n          runner_up: detection.runner_up,\n          runner_up_score: detection.runner_up_score,\n        };\n      } else {\n        domain = \"generic\";\n        detectScore = 0.0;\n        detectEvidence = {\n          detect_reason: detection.reason,\n          detect_score: detection.score,\n          runner_up: detection.runner_up,\n          runner_up_score: detection.runner_up_score,\n          fallback: true,\n        };\n      }\n    }\n\n    const result = map(\n      { records: ctx.df },\n      new DomainPackTarget(loadDomain(domain)),\n      { soft: true },\n    );\n    const inferred: InferredSchema = {\n      ...resultToInferredSchema(result, domain),\n      confidence: detectScore,\n    };\n\n    ctx.artifacts[\"inferred_schema\"] = inferred;\n    // setdefault: only set when a prior stage hasn't already.\n    if (!(\"infer_schema_evidence\" in ctx.artifacts)) {\n      ctx.artifacts[\"infer_schema_evidence\"] = detectEvidence;\n    }\n    return { status: StageStatus.SUCCESS };\n  },\n};\n","/**\n * Adapters index — built-in suite stages + registry wiring.\n * Replaces Python's importlib entry-point discovery with a STATIC registry.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport { StageRegistry } from \"../engine/registry.js\";\nimport { LoadStage } from \"./load.js\";\nimport { ScanStage } from \"./check.js\";\nimport { TransformStage } from \"./flow.js\";\nimport { DedupeStage } from \"./match.js\";\nimport { InferSchemaStage } from \"./infer.js\";\n\nexport { LoadStage } from \"./load.js\";\nexport { ScanStage } from \"./check.js\";\nexport { TransformStage } from \"./flow.js\";\nexport { DedupeStage, buildConfigFromContexts } from \"./match.js\";\nexport { InferSchemaStage } from \"./infer.js\";\n\n/**\n * Build a registry with all built-in suite stages registered:\n *   - `load` (built-in)\n *   - `goldencheck.scan`\n *   - `goldenflow.transform`\n *   - `goldenmatch.dedupe`\n *\n * This is the TS analogue of Python's `StageRegistry.discover()`.\n */\nexport function buildDefaultRegistry(): StageRegistry {\n  const registry = new StageRegistry();\n  registry.register(LoadStage);\n  registry.register(ScanStage);\n  registry.register(TransformStage);\n  registry.register(DedupeStage);\n  registry.register(InferSchemaStage);\n  return registry;\n}\n","/**\n * autoconfigPlanner.ts — pure-TS auto-config BRAIN (decision core), ported from\n * autoconfig_planner.py / goldenpipe-core planner.rs. Rust is the source of\n * truth; this is the SP3 TS fallback proven to reproduce the golden vectors.\n * Pure: no InferMap/profiling (that is a PlannerInput the caller supplies).\n */\nexport interface PipeProfile {\n  nRows: number;\n  nCols: number;\n  columnNames: string[];\n  dtypes: string[];\n  inferredDomain: string | null;\n  domainConfidence: number;\n}\nexport interface ComplexityProfile {\n  maxNullDensity: number;\n  meanNullDensity: number;\n}\nexport interface PlannerInput {\n  runtime: PipeProfile;\n  complexity: ComplexityProfile;\n}\nexport interface PlannedStage {\n  name: string;\n  config: Record<string, unknown>;\n}\nexport interface PipePlan {\n  stages: PlannedStage[];\n  ruleName: string;\n  confidence: number;\n  evidence: Record<string, unknown>;\n}\n\nconst RED_NULL_DENSITY = 0.6;\nconst CONFIDENT_DOMAIN_THRESHOLD = 0.5;\nexport const SCALE_ROUTE_MIN_ROWS = 1_000_000;\nconst THROUGHPUT_RECALL_TARGET = 0.95;\nconst GREEN_THRESHOLD = 0.7;\nconst AMBER_THRESHOLD = 0.4;\n\nexport function bandOf(confidence: number): \"green\" | \"amber\" | \"red\" {\n  if (confidence >= GREEN_THRESHOLD) return \"green\";\n  if (confidence >= AMBER_THRESHOLD) return \"amber\";\n  return \"red\";\n}\n\nfunction stage(name: string, config: Record<string, unknown> = {}): PlannedStage {\n  return { name, config };\n}\n\nfunction defaultDedupeStages(): PlannedStage[] {\n  return [stage(\"goldencheck.scan\"), stage(\"goldenflow.transform\"), stage(\"goldenmatch.dedupe\")];\n}\n\n// Evidence keys are snake_case, in the exact Python/Rust order.\nfunction defaultEvidence(inp: PlannerInput): Record<string, unknown> {\n  return {\n    n_rows: inp.runtime.nRows,\n    n_cols: inp.runtime.nCols,\n    inferred_domain: inp.runtime.inferredDomain,\n    domain_confidence: inp.runtime.domainConfidence,\n    max_null_density: inp.complexity.maxNullDensity,\n    mean_null_density: inp.complexity.meanNullDensity,\n  };\n}\n\nexport function planPipeline(inp: PlannerInput): PipePlan {\n  const r = inp.runtime;\n  if (r.nRows <= 1) {\n    return {\n      stages: [stage(\"goldencheck.scan\"), stage(\"goldenflow.transform\")],\n      ruleName: \"pathological\",\n      confidence: 1.0,\n      evidence: defaultEvidence(inp),\n    };\n  }\n  if (r.inferredDomain !== null && r.domainConfidence >= CONFIDENT_DOMAIN_THRESHOLD) {\n    return {\n      stages: [\n        stage(\"infer_schema\", { domain: r.inferredDomain }),\n        stage(\"goldencheck.scan\"),\n        stage(\"goldenflow.transform\"),\n        stage(\"goldenmatch.dedupe\"),\n      ],\n      ruleName: \"confident_schema\",\n      confidence: r.domainConfidence,\n      evidence: defaultEvidence(inp),\n    };\n  }\n  if (r.inferredDomain === null && inp.complexity.maxNullDensity > RED_NULL_DENSITY) {\n    return {\n      stages: defaultDedupeStages(),\n      ruleName: \"low_confidence\",\n      confidence: 0.3,\n      evidence: defaultEvidence(inp),\n    };\n  }\n  return {\n    stages: defaultDedupeStages(),\n    ruleName: \"default\",\n    confidence: 0.7,\n    evidence: defaultEvidence(inp),\n  };\n}\n\nexport function applyScaleHints(plan: PipePlan, runtime: PipeProfile): PipePlan {\n  const hasDedupe = plan.stages.some((s) => s.name === \"goldenmatch.dedupe\");\n  if (runtime.nRows < SCALE_ROUTE_MIN_ROWS || !hasDedupe) {\n    return {\n      stages: plan.stages.map((s) => ({ name: s.name, config: { ...s.config } })),\n      ruleName: plan.ruleName,\n      confidence: plan.confidence,\n      evidence: { ...plan.evidence },\n    };\n  }\n  const stages = plan.stages.map((s) =>\n    s.name === \"goldenmatch.dedupe\"\n      ? {\n          name: s.name,\n          config: {\n            ...s.config,\n            _dedupe_hints: { throughput: { recall_target: THROUGHPUT_RECALL_TARGET } },\n          },\n        }\n      : { name: s.name, config: { ...s.config } },\n  );\n  return {\n    stages,\n    ruleName: plan.ruleName,\n    confidence: plan.confidence,\n    evidence: { ...plan.evidence, scale_hinted: true },\n  };\n}\n","/** goldenpipe-local exceptions. */\nexport class PipeNotConfidentError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"PipeNotConfidentError\";\n  }\n}\n","/**\n * autoconfigGlue.ts — impure host bracket for the auto-config brain\n * (InferMap detect + Row[] profiling in; PipelineConfig out; refuse-on-RED).\n * TS analogue of goldenpipe/autoconfig_glue.py. The pure decision core is\n * autoconfigPlanner.ts.\n */\nimport type { Row } from \"./index.js\";\nimport {\n  bandOf,\n  type PipeProfile,\n  type ComplexityProfile,\n  type PlannerInput,\n  type PipePlan,\n} from \"./autoconfigPlanner.js\";\nimport { detectDomainDetailed } from \"infermap\";\nimport { PipeNotConfidentError } from \"./errors.js\";\nimport { makePipelineConfig, makeStageSpec, type PipelineConfig } from \"./models.js\";\n\nexport const REFUSE_ROW_THRESHOLD = 100_000;\n\nexport function profileContext(rows: readonly Row[]): PipeProfile {\n  if (rows.length === 0) {\n    return {\n      nRows: 0, nCols: 0, columnNames: [], dtypes: [],\n      inferredDomain: null, domainConfidence: 0,\n    };\n  }\n  const columnNames = Object.keys(rows[0]!);\n  const det = detectDomainDetailed({ columns: columnNames });\n  return {\n    nRows: rows.length,\n    nCols: columnNames.length,\n    columnNames,\n    dtypes: [],\n    inferredDomain: det.domain,\n    domainConfidence: det.domain !== null ? det.score : 0,\n  };\n}\n\nexport function profileComplexity(rows: readonly Row[]): ComplexityProfile {\n  const nRows = rows.length;\n  if (nRows === 0) return { maxNullDensity: 0, meanNullDensity: 0 };\n  const columnNames = Object.keys(rows[0]!);\n  if (columnNames.length === 0) return { maxNullDensity: 0, meanNullDensity: 0 };\n  const fractions = columnNames.map((c) => {\n    let nulls = 0;\n    for (const r of rows) {\n      const v = r[c];\n      if (v === null || v === undefined) nulls++;\n    }\n    return nulls / nRows;\n  });\n  // Loop-max, NOT Math.max(...spread) (ts-no-spread-math-min-max is error-severity).\n  let maxNullDensity = 0;\n  for (const f of fractions) if (f > maxNullDensity) maxNullDensity = f;\n  return {\n    maxNullDensity,\n    meanNullDensity: fractions.reduce((a, b) => a + b, 0) / fractions.length,\n  };\n}\n\nexport function buildPlannerInput(rows: readonly Row[]): PlannerInput {\n  return { runtime: profileContext(rows), complexity: profileComplexity(rows) };\n}\n\nexport function enforceConfidence(plan: PipePlan, runtime: PipeProfile): void {\n  if (bandOf(plan.confidence) !== \"red\") return;\n  if (runtime.nRows >= REFUSE_ROW_THRESHOLD) {\n    throw new PipeNotConfidentError(\n      `auto-config not confident (rule=${plan.ruleName}, confidence=${plan.confidence}) ` +\n        `on ${runtime.nRows} rows; supply an explicit pipeline config or reduce the input size. ` +\n        `evidence=${JSON.stringify(plan.evidence)}`,\n    );\n  }\n}\n\nexport function planToConfig(\n  plan: PipePlan,\n  available: Record<string, unknown>,\n  identityOpts: Record<string, unknown>,\n): PipelineConfig {\n  const stages = plan.stages\n    .filter((s) => s.name in available)\n    .map((s) => makeStageSpec({ use: s.name, config: s.config }));\n  const IDENTITY = \"goldenmatch.identity_resolve\";\n  if (Object.keys(identityOpts).length > 0 && IDENTITY in available) {\n    stages.push(makeStageSpec({ use: IDENTITY, config: identityOpts }));\n  }\n  return makePipelineConfig({ pipeline: \"auto\", stages });\n}\n","/**\n * Pipeline — high-level orchestrator + programmatic run helpers.\n * Port of goldenpipe/pipeline.py + goldenpipe/_api.py (the DataFrame paths).\n *\n * Operates on `Row[]`. The file-loading `run(source)` entry point lives in\n * `node/` (it needs `node:fs`); the edge-safe core only exposes the in-memory\n * `runDf` / `runStages` paths.\n *\n * Edge-safe: no `node:` imports.\n */\n\nimport type { PipeContext, PipelineConfig, PipeResult, Row, Stage } from \"./models.js\";\nimport { makePipeContext, makePipelineConfig, makeStageSpec, PipeStatus } from \"./models.js\";\nimport { StageRegistry } from \"./engine/registry.js\";\nimport { Resolver } from \"./engine/resolver.js\";\nimport { Runner } from \"./engine/runner.js\";\nimport { Reporter } from \"./engine/reporter.js\";\nimport { buildDefaultRegistry } from \"./adapters/index.js\";\nimport { getPipeWasmBackend } from \"./wasm/backend.js\";\nimport { autoConfigViaWasm } from \"./wasm/plannerJson.js\";\nimport { buildPlannerInput, enforceConfidence, planToConfig } from \"./autoconfigGlue.js\";\nimport { planPipeline, applyScaleHints } from \"./autoconfigPlanner.js\";\n\nconst DEFAULT_STAGE_ORDER = [\n  \"goldencheck.scan\",\n  \"goldenflow.transform\",\n  \"goldenmatch.dedupe\",\n];\n\nexport interface PipelineOptions {\n  config?: PipelineConfig | undefined;\n  registry?: StageRegistry | undefined;\n  identityOpts?: Record<string, unknown> | undefined;\n}\n\nexport class Pipeline {\n  private readonly config: PipelineConfig | undefined;\n  private readonly registry: StageRegistry;\n  private readonly identityOpts: Record<string, unknown>;\n\n  constructor(options?: PipelineOptions) {\n    this.config = options?.config;\n    // When the caller supplies a registry, use it as-is; otherwise build the\n    // default suite registry (load + scan + transform + dedupe).\n    this.registry = options?.registry ?? buildDefaultRegistry();\n    this.identityOpts = options?.identityOpts ?? {};\n  }\n\n  /** Run the pipeline on an array of rows. */\n  async run(rows: readonly Row[], source = \"<rows>\"): Promise<PipeResult> {\n    const ctx = makePipeContext({\n      df: [...rows] as Row[],\n      metadata: { source, input_rows: rows.length },\n    });\n\n    const config = this.config ?? planConfig([...rows], this.registry, this.identityOpts);\n\n    let plan;\n    try {\n      plan = Resolver.resolve(config, this.registry);\n    } catch (e) {\n      const message = e instanceof Error ? e.message : String(e);\n      return {\n        status: PipeStatus.FAILED,\n        source,\n        inputRows: rows.length,\n        stages: {},\n        artifacts: {},\n        skipped: [],\n        errors: [`Pipeline resolution failed: ${message}`],\n        reasoning: {},\n        timing: {},\n      };\n    }\n\n    const runner = new Runner(this.registry);\n    const stages = await runner.run(plan, ctx);\n    return Reporter.build(ctx, stages);\n  }\n\n}\n\n/**\n * Build the default check→flow→dedupe config from the available stages,\n * optionally appending the identity stage. Conforms to goldenpipe-core\n * (config.rs `auto_config`): the identity stage is appended iff `identityOpts`\n * is non-empty AND the identity stage is registered, carrying the opts as its\n * config. Extracted as a standalone helper so both `Pipeline.run()` and the\n * cross-surface shim call the same code path.\n */\nexport function computeAutoConfigPure(\n  registry: StageRegistry,\n  identityOpts: Record<string, unknown>,\n): PipelineConfig {\n  const available = registry.listAll();\n  const stages = DEFAULT_STAGE_ORDER.filter((name) => name in available).map((name) =>\n    makeStageSpec(name),\n  );\n  const IDENTITY_STAGE = \"goldenmatch.identity_resolve\";\n  if (Object.keys(identityOpts).length > 0 && IDENTITY_STAGE in available) {\n    stages.push(makeStageSpec({ use: IDENTITY_STAGE, config: identityOpts }));\n  }\n  return makePipelineConfig({ pipeline: \"auto\", stages });\n}\n\n/**\n * planConfig — the brain path (pure-TS; mirrors Python _plan_config). Profiles\n * the rows, runs the rule table + scale hints, refuses if not confident at\n * scale, and materializes the chosen plan into a PipelineConfig.\n */\nexport function planConfig(\n  rows: readonly Row[],\n  registry: StageRegistry,\n  identityOpts: Record<string, unknown>,\n): PipelineConfig {\n  const inp = buildPlannerInput(rows);\n  let plan = planPipeline(inp);\n  plan = applyScaleHints(plan, inp.runtime);\n  enforceConfidence(plan, inp.runtime); // may throw PipeNotConfidentError\n  return planToConfig(plan, registry.listAll(), identityOpts);\n}\n\n/**\n * Guarded public entry: routes through the registered WASM planner backend when\n * one is enabled, else runs the pure-TS core. `Pipeline.run()` calls this.\n */\nexport function computeAutoConfig(\n  registry: StageRegistry,\n  identityOpts: Record<string, unknown>,\n): PipelineConfig {\n  const b = getPipeWasmBackend();\n  if (b) return autoConfigViaWasm(registry, identityOpts, b);\n  return computeAutoConfigPure(registry, identityOpts);\n}\n\n/**\n * Run a pipeline on an array of rows. Zero-config (default suite chain) or with\n * an explicit PipelineConfig. Port of `_api.run_df`.\n */\nexport async function runDf(\n  rows: readonly Row[],\n  config?: PipelineConfig,\n  source = \"<rows>\",\n): Promise<PipeResult> {\n  const pipe = new Pipeline(config !== undefined ? { config } : {});\n  return pipe.run(rows, source);\n}\n\n/**\n * Run specific stages programmatically against rows. Port of `_api.run_stages`.\n * The auto-prepended `load` stage is removed since rows are already supplied.\n */\nexport async function runStages(stages: readonly Stage[], rows: readonly Row[]): Promise<PipeResult> {\n  const registry = new StageRegistry();\n  for (const s of stages) registry.register(s);\n\n  const config = makePipelineConfig({\n    pipeline: \"programmatic\",\n    stages: stages.map((s) => makeStageSpec(s.info.name)),\n  });\n\n  const ctx: PipeContext = makePipeContext({\n    df: [...rows] as Row[],\n    metadata: { source: \"<programmatic>\", input_rows: rows.length },\n  });\n\n  const plan = Resolver.resolve(config, registry);\n  plan.stages = plan.stages.filter((s) => s.name !== \"load\");\n\n  const runner = new Runner(registry);\n  const results = await runner.run(plan, ctx);\n  return Reporter.build(ctx, results);\n}\n","/**\n * Public opt-in WASM API for the goldenpipe planner kernel. enableWasm() is\n * async; after it resolves, the five planner seams consult the registered\n * backend instead of pure-TS. Pure-TS stays the default + fallback.\n */\nimport { enableWasmBackend, type EnableOptions } from \"goldenmatch-wasm-runtime\";\nimport { setPipeWasmBackend, getPipeWasmBackend } from \"./backend.js\";\n\nexport type { PipeWasmBackend } from \"./backend.js\";\nexport type EnableWasmOptions = EnableOptions;\n\nlet _enabled = false;\n\nexport async function enableWasm(opts: EnableWasmOptions = {}): Promise<boolean> {\n  if (_enabled) return true;\n  try {\n    const { instantiateBackend } = await import(\"./loader.js\");\n    const ok = await enableWasmBackend(\n      opts,\n      instantiateBackend,\n      setPipeWasmBackend,\n      new URL(\"./artifacts/goldenpipe_wasm_bg.wasm\", import.meta.url),\n    );\n    if (ok) _enabled = true;\n    return ok;\n  } catch (err) {\n    if (opts.require) throw err;\n    return false;\n  }\n}\n\nexport function isWasmEnabled(): boolean {\n  return getPipeWasmBackend() !== null;\n}\n\nexport function disableWasm(): void {\n  setPipeWasmBackend(null);\n  _enabled = false;\n}\n"]}